给pandas带来tidyverse的力量!-tidyversetopandas教程(3)

文摘   2024-10-28 00:15   天津  

教程:Palmer Penguins数据集

在本教程中,我们将使用tidyversetopandas包探索Palmer Penguins数据集。这个包通过将R的类似tidyverse的功能引入pandas来简化Python中的数据操作。我们将演示如何使用它的关键功能:select, mutate, filter, and arrange。

教程地址:https://tidyversetopandas.readthedocs.io/en/latest/

测试环境 colab

在测试环境安装及加载库

加载Palmer Penguins数据集

Palmer Penguins数据集包括三种企鹅的各种测量值。它是演示数据操作技术的理想选择。首先,让我们将数据集加载到pandas的DataFrame中:

import os

# 获取当前目录下的所有文件和文件夹名称
files_and_folders = os.listdir(os.getcwd())

# 打印文件和文件夹名称
for item in files_and_folders:
    print(item)
已提前将github的数据上传到colab
# Load Penguins dataset
import pandas as pd
from tidyversetopandas import tidyversetopandas as ttp

penguins = pd.read_csv("penguins (1).csv")
penguins.head()
部分数据里面有缺失值

使用filter删除NAs

让我们从找出列中有多少na值开始

penguins.isna().sum()

在性别中有11例na,让我们尝试在ttp中使用filter功能去除它们,并在pandas中建立isnull功能。

newPenguins = ttp.filter(penguins, "~ sex.isnull()")
newPenguins.isna().sum()

看起来棒极了!我们成功地从性别中去除了所有的na。

用过filter过滤物种和尺寸

接下来,我们希望将我们的研究限制在“Adelie”物种的企鹅身上,body_mass_g大于3000克。函数filter非常适合这项工作。我们从333行开始,过滤后的行数应该会减少

print(newPenguins.shape)
newPenguins = ttp.filter(
    newPenguins, "species == 'Adelie' & body_mass_g > 3000")
print(newPenguins.shape)

我们确实看到行减少到138行,这是一个很好的迹象。让我们检查数据框,以确保只有“阿德利”企鹅可用并且尺寸大于3000克。

print(newPenguins.species.unique())
print(newPenguins.body_mass_g.min())

使用mutate创建新列

现在,让我们创建一个名为body_mass_kg的新列,将body_mass_g转换为千克。

penguins = ttp.mutate(penguins, "body_mass_kg = body_mass_g / 1000")

penguins.head()

现在我们可以在最右边的列中看到我们有一个名为body_mass_kg的新列。

将所有长度转换为厘米

现在,让我们将bill_length_mm、bill_depth_mm和flipper_length_mm列转换为厘米。我们也可以用mutate函数来做这件事。

penguins = ttp.mutate(penguins, "bill_length_cm = bill_length_mm / 10")
penguins = ttp.mutate(penguins, "bill_depth_cm = bill_depth_mm / 10")
penguins = ttp.mutate(penguins, "flipper_length_cm = flipper_length_mm / 10")

penguins.head()

现在我们看到数据框中有所有这些新列,但有些是多余的。让我们使用select函数删除旧列

使用select选择列

tidyversetopandas包中的select函数是一个强大的工具,旨在将R的tidyverse的简单性和直观性带到Python的pandas库中。此函数特别反映了R中dplyr的select功能,允许用户轻松地从DataFrame中选择特定列进行集中分析。

实际上,select允许用户通过只包含与当前分析相关的列来简化他们的数据集,从而简化数据操作过程。通过使用select,Python用户可以享受更像R的数据操作语法,使R和Python之间的转换更加顺畅和直观。

示例1:选择一列

让我们尝试选择一列:

# Selecting species
penguins_subset = ttp.select(penguins, "species")
penguins_subset.head()
选择了一列

输出是原始企鹅DataFrame的子集,仅包含列物种。该子集显示每只企鹅的物种和岛屿,以及以毫米为单位的脚蹼长度的测量值。

帮助文档

示例2:选择多列进行比较分析

为了进行更详细的比较分析,让我们选择能够深入了解企鹅物理特征的列。我们将选择物种、喙长、喙深和体重。

# Selecting species, bill_length_mm, bill_depth_mm, and body_mass_g columns
penguins_physical = ttp.select(
    penguins, "species""bill_length_mm""bill_depth_mm""body_mass_g"
)
penguins_physical.head()

这里,输出是一个DataFrame,其中包括一组不同的列:物种、bill_length_mm、bill_depth_mm和body_mass_g。这个子集旨在进行更详细的比较分析,重点关注企鹅的物理特征,如长度,深度和体重。

示例3:只选择mutate后我们要保留的列

在突变部分的前面,我们创建了一些新列。让我们使用select删除旧列

penguins = ttp.select(
    penguins,
    "species",
    "bill_length_cm",
    "bill_depth_cm",
    "flipper_length_cm",
    "body_mass_kg",
)

penguins.head()

使用arrange对数据进行排序

在Python中,排序函数是sort_values(),它位于包pandas下。然而,在R的tidyverse包中,该函数被命名为araange()。它将整个数据集作为第一个参数,然后是数据将被排序的列名。为了使Python版本的排序函数对习惯使用R和tidyverse的人更友好,我们按照tidyverse函数的结构包装了pandas函数sort_values()。

为了更好地理解它是如何工作的,我们可以尝试对棕榈企鹅数据集进行排序,以找到少数体重最大的企鹅。

penguins_sorted = ttp.arrange(penguins, False, "body_mass_kg")
penguins_sorted.head()

上图,我们可以看到体重最大的前几只企鹅都是来自比斯科岛的巴布亚企鹅。我们还可以使用排列()函数对具有多列的数据进行排序。假设我们要找到长度和深度最短的企鹅:

penguins_small_bill = ttp.arrange(
    penguins, True, "bill_length_cm""bill_depth_cm")
penguins_small_bill.head(1)

用pipe管道符把它们放在一起

我们可以使用管道函数在一行中调用所有4个函数。此函数类似于R的tidyverse包中的%>%运算符。

penguins = pd.read_csv("penguins.csv")

penguins_subset2 = (
    penguins.pipe(ttp.filter, "~ sex.isnull()")
    .pipe(ttp.mutate, "body_mass_kg = body_mass_g / 1000")
    .pipe(ttp.select, "species""island""body_mass_kg")
    .pipe(ttp.arrange, False, "body_mass_kg")
)

penguins_subset2.head()

高分文章新方法-基于R语言的动态预测模型课程第三期

开课目的及前言

预测模型类文章目前总结起来发展经历了以下三个阶段:

  1. 基于传统流行病学的列线图模型(本质都是cox回归及glm回归),简单的统计学分析模型,是模型依赖的方法,临床上实际情况很难满足其前提假设,实际效果不好。

  2. 基于机器学习/深度学习的预测模型的构建(在数据上提高了维度,在算法上引入了机器学习),虽然算法上引入了机器学习模型,处理数据更加灵活,模型的假设也更少。但是在使用的数据上还是患者的一次基线数据进行预测,与临床实际不符。

  3. 基于纵向数据的动态预测模型(基于纵向多次随访数据,模型应用联合模型等动态预测模型方法),应用患者的多次随访数据对最终的生存结果进行预测,从数据和方法上都更类似于临床实际。

考虑到动态预测模型有以下特点,因此必然是后续高分文章的必备方法:

  1. 数据上必须有同一个患者的多次随访数据,相对于既往横断面一次基线数据,数据的收集难度更大,而且动态预测模型需拟合纵向的线性混合模型,因此需要的数据量较大。这就提示我们如果能收集到如上数据更加容易发高分文章。

  2. 应用方法学动态预测模型需首先掌握普通生存分析及普通预测模型的方法,并且还需要熟悉纵向数据分析的广义线性混合模型,再次基础上还需要掌握tidyverse语法基础来将自己的数据转换为满足函数要求的纵向数据,另外对于联合模型,模型的结合形式及变量选择也均需要从临床背景及统计学方法考虑。

文章示例-动态预测模型预测筛查肠癌患者
文章示例-动态预测模型预测前列腺癌预后
文章示例-动态预测用于创伤外科
文章示例-动态预测对比传统模型在糖尿病患者中的应用
顶刊文章示例-动态预测模型用于肾移植后再次肾功能不全诊断
杂志情况

授课老师

1 灵活胖子

双一流学校肿瘤学博士毕业,目前就职于国内五大肿瘤中心之一。科研方向为真实世界研究,生物信息学分析及人工智能研究。目前以第一或共同第一作者身份发表SCI论文10余篇,累计IF50+。目前与国内多个院校及医院有科研合作。联合翻译小组同学,在国内第一次将jmbayes2及dynamicLM全文翻译为中文并在公众号发表。

2 Rio

医学博士,临床医生。发表中英文文章 10 余篇。R 与 python 爱好者。

课程目录及安排

第一部分:R语言基础部分

第二部分:传统临床基础统计图表制作

第三部分:常规生存分析部分

第四部分:高级生存分析部分

第五部分:动态预测模型部分

授课形式及时间

授课形式:远程在线实时直播授课。

授课时间:2024年12月开课,总课时不少于30小时,每周利用休息时间进行4-6小时的授课,预计4-6周完成所有授课内容。

答疑支持:建立课程专属微信群,1年内课程内容免费答疑。

视频回看:3年内免费无限次回看。

课程售价及售后保证

课程售价:总价3000元,报名可先交300元预定,开课后2周内交齐即可

对公转账等手续务必提前联系助教

承办公司:天企助力(天津)生产力促进有限公司

奖励政策:学员应用所学内容发表IF 10+文章可退还学费(具体要求及流程需要咨询助教)

报名咨询

可联系我的助教进行咨询

我的助教微信

助教联系电话:18502623993


灵活胖子的科研进步之路
医学博士,R语言及Python爱好者,科研方向为真实世界研究,生信分析与人工智能研究。
 最新文章