承接上面内容,本部分将剩余函数介绍完整。
R&Python Data Science 系列:数据处理(1)
R&Python Data Science 系列:数据处理(2)
1 重塑函数
这里只介绍arrange()和rename()两个函数。
1.1 arrange函数
排序函数,按照某(几)个指定的列按照升(降)序排列重新排列数据集,参数ascending = False,降序排列,ascending = True,升序排列;
Python实现
from dfply import *import numpy as npimport pandas as pd###按照price升序排列diamonds >> arrange(X.price, ascending = True) >> head(4)
![1dae2893755dc26999f403a815adfaab.png](https://i-blog.csdnimg.cn/blog_migrate/4034ed6b205dcfa272104887555ec64d.jpeg)
###按照price降序排列diamonds >> arrange(X.price, ascending = False) >> head(4)
![08d2a53bcd40f221599e3c207bd4d8c9.png](https://i-blog.csdnimg.cn/blog_migrate/b6102d75da9377972ac46a58a166a080.jpeg)
R实现
library(tidyverse)library(ggplot2)library(dplyr)##按照price升序排列diamonds %>% arrange(price) %>% head(4)##按照price降序排列diamonds %>% arrange(desc(price)) %>% head(4)
![c0698140684900a0d040dee82e980c8b.png](https://i-blog.csdnimg.cn/blog_migrate/06c3fffd670291f882f1c85cee2062c8.jpeg)
注意:Python排列顺序使用参数ascending控制;R语言中使用desc函数;
1.2 rename函数
重命名函数,Python和R语言中使用方法相同,new_name = old_name:
Python实现
###将cut重命名为CUTdiamonds >> rename(CUT = X.cut) >> head(5)
![c3428b1e03d249819161fac9bf3cc7e2.png](https://i-blog.csdnimg.cn/blog_migrate/d9190de117fadc1f9820806f25a7c4dc.jpeg)
R实现
###将cut重命名为CUTdiamonds %>% rename(CUT = cut) %>% head(5)
![8eb685d6af36f5fa6326baf344b9fb77.png](https://i-blog.csdnimg.cn/blog_migrate/734369cd5209bc3d054238b3e329945a.jpeg)
2 汇总函数
Python中汇总函数主要有summarize()和summarize_each()函数,这里的"汇总"翻译成概括更加合适,summarize()和summarize_each()区别在于:对某(几)列作用几个函数,summarize()需要几个函数依次作用于对应的列,而summarize_each()将几个函数以列表形式作为第一个参数,作用于后面的列:
Python实现
###计算钻石价格price的最大值、最小值diamonds >> summarize(price_max = X.price.max(), price_min = X.price.min()) >> head(4)
![d52afef68fe2453efd8b6b342db94bba.png](https://i-blog.csdnimg.cn/blog_migrate/465a4d2021a01f5c0db88970ebfba837.jpeg)
###计算x、y、z的最大值和最小值diamonds >> summarize_each([np.max, np.min], X.x, X.y, X.z) >> head(4)
![c7abe8d6e3a3845054b6a40012a0745a.png](https://i-blog.csdnimg.cn/blog_migrate/92a8c584e23f8b63b440d951eb64725f.jpeg)
R实现
##计算钻石价格price的最大值、最小值diamonds %>% summarise(price_max = max(price), price_min=min(price))###计算钻石x、y、z的最大值、最小值diamonds %>% select(x, y, z) %>% summarise_all(list(min, max))
![a2fd9cd1067a7e643d7bccedbfbcd33e.png](https://i-blog.csdnimg.cn/blog_migrate/8469cfa661f38ed0574a8af669ca1a8d.jpeg)
注意:R语言中没有summarise_each(),但是summarise_all()有相同的处理方式。
3 窗口函数
窗口函数,是对某列操作,返回长度相同的一列,主要包括排名函数、偏移函数、累计聚合函数。
3.1 排名函数
Python中排名函数主要有row_number()、min_rank()、dense_rank(),R语言也是这个3个函数,函数名都是相同的,用法也完全相同。在某种分组排序规则之后,row_number()生成一个连续不重复的编码,min_rank()生成一个不连续的编码,但是对相同的记录编码相同,而dense_rank()生成一个连续的编码,相同记录有相同的编码:
Python实现
##新增一列排序,row_numberdiamonds >> select(X.price) >> mutate(price_rn = row_number(X.price)) >> head(6)
![56900106efe2ec6b717c1d4b0c596584.png](https://i-blog.csdnimg.cn/blog_migrate/366c0a6183344eead71ebedb2d39ad10.jpeg)
#新增一列排序,min_rankdiamonds >> select(X.price) >> mutate(price_mrank = min_rank(X.price)) >> head(6)
![4f52c680456ae653593e59257dd5df47.png](https://i-blog.csdnimg.cn/blog_migrate/5ea83a47de6c7c0212681550fcfb83ab.jpeg)
#新增一列排序,dense_rankdiamonds >> select(X.price) >> mutate(price_drank = dense_rank(X.price)) >> head(6)
![e32f6d54aecf2609388e6f798913387c.png](https://i-blog.csdnimg.cn/blog_migrate/e9bcfbfdf08122450bb6f0501270f928.jpeg)
R实现
#新增一列排序,row_numberdiamonds %>% select(price) %>% mutate(price_rn = row_number(price)) %>% head(6)#新增一列排序,min_rankdiamonds %>% select(price) %>% mutate(price_mrank = min_rank(price)) %>% head(6)#新增一列排序,dense_rankdiamonds %>% select(price) %>% mutate(price_drank = dense_rank(price)) %>% head(6)
![624167ae1bc08016772a4696095094c3.png](https://i-blog.csdnimg.cn/blog_migrate/fa9365992eb955194a3d4a1b3194b6b3.jpeg)
3.2 偏移函数
两个偏移函数lead()和lag():
lead(column,n):按照某种分组排序规则之后,向下取某列数据的第n行记录
lag(column,n):按照某种分组排序规则之后,向上取某列数据的第n行记录
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))
![5901e02441c40c50307c21279a21b2b8.png](https://i-blog.csdnimg.cn/blog_migrate/4c44eff3af22cb810be242759b67cd1c.jpeg)
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)
![97fc85fd7e6f2812400e3054d2e12882.png](https://i-blog.csdnimg.cn/blog_migrate/52672489d79f6173772cbd896273e794.jpeg)
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)))
![77b6041715c579152ccdf971b39dbb9a.png](https://i-blog.csdnimg.cn/blog_migrate/4072383e64ad9262e061a707e4b6bff9.jpeg)
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))
![62b2e3f6d8f54ecadc65337c84490782.png](https://i-blog.csdnimg.cn/blog_migrate/1770898e9d1b90db35dd3ab7394d7a67.jpeg)
4 聚合函数
聚合函数是对某一列数据,使用分组函数和排序函数进行处理之后(可以省略),使用聚合函数,返回一个值。主要有first()、last()、nth()、n()以及n_distinct():
first(column):按照某种规则分组排序后(可选),取第一行数据记录
last(column):按照某种规则分组排序后(可选),取最后一行数据记录
nth(column,n):按照某种规则分组排序后(可选),取第n行的记录
n():按照某种规则分组排序后(可选),count计数,不去重
n_distinct():按照某种规则分组排序后(可选),count计数,去重
![7e661efb70d4843d625f548bd3a02751.png](https://i-blog.csdnimg.cn/blog_migrate/fdb642f7fdf389a80916520b2aac6679.jpeg)
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)))
![1731a8cfc131c0bf1e6a018caebd4809.png](https://i-blog.csdnimg.cn/blog_migrate/6cabdeae037474cc71ec81126df7d9af.jpeg)
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))
![cda802b88d4dac5f32304a277ff35517.png](https://i-blog.csdnimg.cn/blog_migrate/7de97d00370132dafdb9ee5b99d696b0.jpeg)
注意:Python中n()函数需要传入参数,R中不需要传入参数;Python中输出列按照字段名称升序排列,R中输出的列按照书写顺序输出。
5 总结
数据处理1-3,主要介绍了Python中dfply和R中dplyr包中的数据处理函数,几乎满足数据预处理中筛选变量、衍生变量以及计算一些统计量的需求。