本文共 4089 字,大约阅读时间需要 13 分钟。
数据处理函数入门:Python与R的实用技巧
数据处理是数据科学家日常工作中的重头戏。无论是从数据清洗、变量衍生,还是统计量计算,现代数据处理框架都为我们提供了强大的工具。在Python与R这两大生态中,dfply和dplyr包提供了强大的数据处理能力,能够满足大部分数据预处理需求。本文将分别介绍Python和R中常用函数的使用方法,帮助你快速上手数据处理。
1. 重塑函数
重塑函数是数据处理的核心工具。常用的函数包括arrange和rename。
1.1 arrange函数
arrange 是一个排序函数,可以根据指定的列对数据集进行升序或降序排列。参数ascending控制排序方向,True表示升序,False表示降序。
Python实现
diamonds >> arrange(X.price, ascending=True) >> head(4)
以上代码会按price列升序排列前4行数据。
R实现
diamonds %>% arrange(price) %>% head(4)
同样是按price列升序排列前4行数据。
注意
- Python中使用
ascending参数控制排序方向; - R语言中使用
desc函数来指定降序排列。
1.2 rename函数
rename 用于将数据集中的列名重命名。新名通过new_name参数指定,旧名通过old_name参数指定。
Python实现
diamonds >> rename(CUT=X.cut) >> head(5)
将cut列重命名为CUT,并显示前5行数据。
R实现
diamonds %>% rename(CUT=cut) %>% head(5)
同样是将cut列重命名为CUT,并显示前5行数据。
2. 汇总函数
汇总函数用于对数据进行统计计算。在Python中,summarize 和 summarize_each 是常用的工具;在R中,summarise 是主要函数。
Python实现
diamonds >> summarize(price_max = X.price.max(), price_min = X.price.min()) >> head(4)
计算price列的最大值和最小值,并显示前4行数据。
diamonds >> summarize_each([np.max, np.min], X.x, X.y, X.z) >> head(4)
对X.x、X.y、X.z三列分别计算最大值和最小值,并显示前4行数据。
R实现
diamonds %>% summarise(price_max = max(price), price_min=min(price)) %>% head(4)
计算price列的最大值和最小值,并显示前4行数据。
diamonds %>% select(x, y, z) %>% summarise_all(list(min, max)) %>% head(4)
对x、y、z三列分别计算最小值和最大值,并显示前4行数据。
注意
- R语言中没有
summarise_each,但可以通过summarise_all实现类似功能。
3. 窗口函数
窗口函数用于对数据集进行相邻数据的操作,包括排名、偏移和累计聚合。
3.1 排名函数
排名函数包括row_number、min_rank和dense_rank。row_number生成连续编码;min_rank生成不连续编码;dense_rank生成连续编码。
Python实现
diamonds >> select(X.price) >> mutate(price_rn = row_number(X.price)) >> head(6)
新增一列price_rn,表示行号编码。
diamonds >> select(X.price) >> mutate(price_mrank = min_rank(X.price)) >> head(6)
新增一列price_mrank,表示最小编码。
diamonds >> select(X.price) >> mutate(price_drank = dense_rank(X.price)) >> head(6)
新增一列price_drank,表示密集编码。
R实现
diamonds %>% select(price) %>% mutate(price_rn = row_number(price)) %>% head(6)
新增一列price_rn,表示行号编码。
diamonds %>% select(price) %>% mutate(price_mrank = min_rank(price)) %>% head(6)
新增一列price_mrank,表示最小编码。
diamonds %>% select(price) %>% mutate(price_drank = dense_rank(price)) %>% head(6)
新增一列price_drank,表示密集编码。
3.2 偏移函数
偏移函数包括lead和lag。lead获取下一行的值;lag获取上一行的值。
Python实现
diamonds >> arrange(X.price) >> select(X.price) >> mutate( price_lead1 = lead(X.price, 1), price_lead2 = lead(X.price, 2), price_lag1 = lag(X.price, 1), price_lag2 = lag(X.price, 2)) >> head(5)
新增四列,分别表示价格列的前后偏移值。
R实现
diamonds %>% arrange(price) %>% select(price) %>% mutate( price_lead1 = lead(price, 1), price_lead2 = lead(price, 2), price_lag1 = lag(price, 1), price_lag2 = lag(price, 2)) %>% head(5)
新增四列,分别表示价格列的前后偏移值。
3.3 累计聚合函数
累计聚合函数包括cumsum、cummean、cummax、cummin和cumprod。这些函数会在排序后的数据上进行逐步计算。
Python实现
diamonds >> select(X.price) >> head(6) >> mutate( price_cumsum = cumsum(X.price), price_cummean = cummean(X.price), price_cummax = cummax(X.price), price_cummin = cummin(X.price), price_cumprod = cumprod(X.price)) >> head(6)
新增五列,分别表示价格列的累计和、均值、最大值、最小值和积累乘积。
R实现
diamonds %>% select(price) %>% head(6) %>% mutate( price_cumsum = cumsum(price), price_cummean = cummean(price), price_cummax = cummax(price), price_cummin = cummin(price), price_cumprod = cumprod(price)) >> head(6)
新增五列,分别表示价格列的累计和、均值、最大值、最小值和积累乘积。
4. 聚合函数
聚合函数用于对数据进行统计汇总。在Python中常用的函数包括first、last、nth、n和n_distinct;在R中对应的函数也是类似的名称。
Python实现
diamonds >> head(6) >> select(X.price) >> summarise( price_first = first(X.price), price_last = last(X.price), price_nthprice = nth(X.price, 3), price_n = n(X.price), price_disn = n_distinct(X.price)) >> head(6)
计算price列的前值、后值、第3值、计数(不去重)和去重计数,并显示结果。
R实现
diamonds %>% head(6) %>% select(price) %>% summarise( price_first = first(price), price_last = last(price), price_nthprice = nth(price, 3), price_n = n(), price_disn = n_distinct(price)) >> head(6)
计算price列的前值、后值、第3值、计数(不去重)和去重计数,并显示结果。
注意
- Python中
n()函数需要传入参数,R中不需要传入参数; - Python中输出列按照字段名称升序排列,R中输出的列按照书写顺序输出。
5. 总结
数据处理函数是数据科学家日常工作的重要工具。从arrange到summarize,从window到aggregate,这些函数能够满足大部分数据预处理需求。在选择工具时,应该根据项目需求和个人偏好决定Python还是R。希望本文能为你提供实用的数据处理技巧!
发表评论
最新留言
关于作者