【R vs Python】数据清洗

R语言
python
数据清洗
R语言(tidyverse 和 data.table)和python(pandas)数据清洗对比
作者

不止BI

发布于

2024年2月21日

包(库)的安装

在打开本页面的同时,会自动开始安装dplyrtidyrdata.table,安装速度取决于你的网络情况,请耐心等待,不要刷新,否则将重新安装。对于其他包,你可以使用webr::install进行安装,安装完成后使用library加载包

代码
webr::install("ggplot2")

在打开本页面的同时,会自动安装常用的数据分析库,如pandasmatplotlib等,对于没有预安装的库,你可以使用micropip进行安装,安装完成后使用import进行加载库。比如如果需要安装seaborn,你可以使用以下代码

代码
import micropip
micropip.install('seaborn')
import seaborn as sns

数据集

企鹅数据集(penguins)是一个包含南极洲三种企鹅物种的生物测量数据的公开数据集。该数据集由美国南极洲 Palmer 站的科学家在 1971 年至 2022 年间收集。所有示例基于本数据集,请执行下方三个代码块先加载本数据集至环境。

  • species: 企鹅物种,取值为 Adelie、Chinstrap 或 Gentoo

  • island: 企鹅栖息的岛屿,取值为 Biscoe、Dream 或 Torgersen

  • sex: 企鹅性别,取值为 male 或 female

  • bill_length_mm: 企鹅喙长(毫米)

  • bill_depth_mm: 企鹅喙深(毫米)

  • flipper_length_mm: 企鹅鳍长(毫米)

  • body_mass_g: 企鹅体重(克)

  • year: 数据收集年份

  • age: 企鹅年龄(年)

链式法则

你可以使用%>% 或者|>进行链式处理

使用中括号进行链式处理,形如DT[ … ][ … ][ … ],为了美观也可以纵向链式

代码
DT[...
   ][...
     ][...]

python使用.进行链式处理,为了美观可以使用反斜杠将一行代码拆分成多行或是将整个链式放在括号中

筛选行

  • 使用slice进行行索引筛选,slice_headslice_tail可以快速筛选

  • 使用filter进行条件数据筛选

  • 使用slice_max 或者slice_min 快速筛选某列最大值对应行

data.table的一般数据清洗形式形如DT[i, j, by],其中i的位置可以用来筛选行和排序,j 的位置可以用来选择列及更新数据,by的位置可以用来分组

python使用loc方法进行条件选择,使用iloc进行索引筛选。直接使用[]也可以进行筛选,loc方法支持同时筛选行和列,而[]只可以筛选行或者列

选择列

  • 使用select进行列选择
  • matches可以通过正则表达式来匹配列名称,
  • 提供了一些封装好的函数来快速匹配列,例如starts_withends_withcontains

DT[,j=.(...)]进行列选择,返回的还是data.table,但是如果直接使用DT[,j=cloname],返回的则是列值

排序

  • order更改排序需要重新赋值

  • setorder会直接修改原数据框,不需要重新赋值。data.table包中的所有set*族函数都是直接修改原数据框

inplace = True参数可以直接修改原数据框

新增/删除列

  • 使用mutate进行新增列

  • 条件列可以使用case_when

使用apply将函数逐个元素运用于列值

分组

  • 使用group_by进行分组
  • 使用DT[i, j, by]中的by来进行分组

  • SD是一个特殊符号,代表当前分组中的所有行

使用groupby将函数逐个元素运用于列值

行列互转

  • 使用pivot_wider将数据从长格式转换为宽格式的函数

  • 使用pivot_longer将数据从宽格式转换为长格式的函数

pivot_wider() 是一个用于将数据从长格式转换为宽格式的函数。它的作用是根据提供的参数重新组织数据框,使得原本分散在多行的数据变为分布在一行的形式。

参数说明:

  • data:要进行数据转换的数据框。 …:传递给方法的其他参数。

  • id_cols:用于唯一标识每个观察值的一组列。通常用于处理冗余变量,即与现有变量完全相关的变量。

  • id_expand:是否在进行数据转换前对id_cols列中的值进行扩展。

  • names_from和values_from:描述输出列的名称和单元格值来自哪些列。

  • names_prefix:添加到每个变量名开头的字符串。

  • names_sep:用于将多个变量的值连接成单个字符串以用作列名的分隔符。

  • names_glue:可以提供一个glue规范来创建自定义列名。

  • names_sort:是否对列名进行排序。

  • names_vary:当names_from标识出具有多个唯一值的列时,应该以何种顺序组合生成的列名。

  • names_expand:是否在进行数据转换前对names_from列中的值进行扩展。

  • names_repair:处理输出具有无效列名的情况。 values_fill:指定缺失值应填充的值。

  • values_fn:应用于输出中每个单元格值的函数。

  • unused_fn:用于总结未使用列的值的函数。

  • data:将要进行透视操作的数据框。

  • cols:指定要在透视过程中转换为长格式的列。

  • cols_vary:确定在透视过程中输出行相对于其原始行号的排列方式。

  • names_to:指定根据指定列中的列名信息创建的新列。

  • names_prefix, names_sep, names_pattern:控制如果创建多个新列时如何处理和拆分列名。

  • names_ptypes, values_ptypes:定义生成列的类型,以确保其符合预期。

  • names_transform, values_transform:允许根据需要转换特定列的数据类型。

  • names_repair:指定如何处理输出中的无效列名。

  • values_to:指定从单元格值中创建的列的名称。

  • values_drop_na:控制是否应删除仅包含缺失值的行。

  • dcast函数宽变长

  • melt函数宽变长

shift(lag/lead)

laglead操作用来获取时间序列数据中前一个时间点(lag)或后一个时间点(lead)的值。

表关联

描述性统计

列表展开

数据拆分

在某些情况下,需要将一个数据框拆分为多个数据框

回到顶部