【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进行索引筛选

选择列

  • 使用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)的值。

表关联

描述性统计

列表展开

回到顶部