前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >懒癌必备-dplyr和data.table让你的数据分析事半功倍

懒癌必备-dplyr和data.table让你的数据分析事半功倍

作者头像
Erin
发布2018-01-09 10:53:12
2.4K0
发布2018-01-09 10:53:12
举报
文章被收录于专栏:大数据风控大数据风控

duang,duang!Erin又上线为大家分享干货来了。 最近Erin在做信用风险评级模型的开发,几千行的代码敲的我头晕眼花。作为一个懒癌晚期,并且追求高效率的数据er,怎么能受得了浪费时间去造轮子呢。接下来,我就为大家分享几个我在工作当中最常用来做数据分析用到的包,dplyr和data.table,我保证你get到这两个包后,就再也不想用R里面自带的基础包函数进行数据分析了!!(贼笑中)

dplyr包

R语言中最为重要的包(之一)! 它可以让数据分析功能更加强大,代码更加简洁。你可以随心所欲的操作它,使用它获取你想要的数据,而且它的语法非常简单,非常直白。在编程语言里面,说语法简单,意味着编程语言与我们正常人的逻辑思维是一致的。它相对于R自带的筛选方法会更高效,我们不需要花很多时间去等待机器反应。 我工作当中,或者是公认的最常用的方法,无非就是下面几种: ① 数据过滤 ② 数据选择 ③ 数据排序 ④ 数据转换 ⑤ 数据分组 ⑥ 数据抽样

大家做数据分析,会发现90%的时间都在与这几个打交道。dplyr很庆幸,都提供了关于常用方法的一些函数。 在GitHub上面,之前有人做了一个统计,以下几个函数最为常用:

filter( ) 过滤

filter(df,cond1,cond2,…) 用逗号,隔开表示条件是and的关系 filter(df,cond1|cond2|…) 用竖线|隔开表示条件是or的关系 slice(df,80:100) 选取索引80到100的数据

arrange( ) 对数据框进行排序

arrange(df,V1,desc(V2),V3) 对V1,V3升序排序,对V2降序排序

※arrange的语法非常简单,功能也很强大,我们再也不要用order()函数了

select( ) 选择列

select(df,V1,V2,V3) 选择V1,V2,V3列数据 select(df,V1:V3) 选择V1到V3列的所有数据 t<-select(df,-c(V1,V3)) 选择除了V1,V3以外的所有列

distinct( ) 去重

distinct(df,V1,V2) 根据V1和V2两个条件来进行去重

在基础包里面也有一个去重函数unique() ※注意distinct()可以针对某些列进行去重,而unique()只能对整个数据框进行去重。

mutate( ) 为数据增加新列

mutate(df,vnew1=v1-v2,vnew2=vnew1+v3)

与基础包里的transform()函数接近,但mutate可以使用你刚刚创建的column, transform则不行,会报错:”找不到对象vnew”

summarise( ) 计算统计数据

summarise(df,sum(v1))

sample_n(df,1000) 随机抽取1000条数据 sample_frac(df,0.7) 随机抽取70%的数据

看了以上这几个函数,是不是觉得dplyr包超简单!对!我们要的就是简洁简单!有这么好的作者给你开发了这么好的packages,你就放心大胆的用呗,不用自己去写基础代码造轮子的事,多好!!找到合适的packages并学习使用它,绝对会让我们数据分析工作事半功倍!

我们有没有发现dylyr包中函数使用的一些规律? 有的! ①第一个参数都是数据集df ②查询条件都是关于如何操作数据集的,在列上面进行操作 ③返回的都是新的数据集,不会改变原始数据集

在介绍下一个包之前,我们先来引入一个dplyr包的综合运用:

代码语言:javascript
复制
grouped<-group_by(df,v1,V2) #df被v1,v2进行分组
newdata<-summarise(grouped,mean_age=mean(age),sum_sale=sum(sales))

以上这段代码我们使用group_by和summarise的结合实现了对数据集分组分析,并进行统计量计算的一个功能。学习了下面的data.table包以后,你再回来看看这个,你绝对不会选择这种写法并且超级鄙视它!

data.table包

dplyr已经可以满足我们数据分析工作中大部分的需求,后来该包的作者又开发了一个炫酷吊炸天的包“data.table” 如果你的日常处理数据在几万到十几万行,那么用dplyr就完全足够了。 如果你的日常处理数据量非常大,有上亿行的数据处理需求,这个时候你完全可以放心大胆的使用data.table 这个包异常的高效,速度非常的快!! 官网上面有关于data.table包对于dplyr的提升和改进:

这里写图片描述
这里写图片描述

作为课代表的我来帮大家简单的总结一下: 我们都知道R有个令人诟病的缺点就是跑起来耗内存,data.table相对于dplyr 更快、更节省内存了!data.table这个包的语法用起来稍微有点奇怪(哈哈~), 但是速度亲妈快啊!!小伙伴们一定不能错过的绝世好包

铺垫了这么多,来来来,数据分析神器data.table走起来!!

还是那句话,讲几个最常用的函数,就算你的数据量大到逆天,data.table跑起来都是游刃有余的。剩下的大家有什么特殊需求再去下载官方文档看就好啦!

DT<-data.table() DT[i,j,by] take DT,subset rows using i,then calculate j grouped by by 我们在横轴上过滤数据,用by进行分组,然后在列上面进行计算。

使用i

代码语言:javascript
复制
DT[3:5] #选取3到5行的数据
class(DT)
[1] "data.table" "data.frame"
DT[v1=="A"] #基于条件的选择
DT[v1 %in% c("A","B")]

使用j

代码语言:javascript
复制
DT[,v1] #选择v1列

那如果我要选择多列呢,大家注意一下这里不是用c()来选取了, 而是通过.()来选取,注意前面有一个”.”号,所以我说data.table的语法有点奇怪呢。

代码语言:javascript
复制
DT[,.(v1,v3)]
代码语言:javascript
复制
#在j上调用函数
DT[,sum(v1)]
DT[,.(sum(v1),sd(v3))]

data.table居然支持直接在j上进行列的计算,看到这里是不是觉得超牛逼,关键是代码非常简洁,一句话的事,就帮我们完成数据的筛选和计算了!

代码语言:javascript
复制
DT[,.(sum_v1=sum(v1),sd_v3=sd(v3))]

还可以直接给计算的列赋予名称哦!!功能强大得我都要笑开花了!

使用by

这还只是小试牛刀,你忘了我们还有个by吗!!

代码语言:javascript
复制
DT[,.(mean_age=mean(age),sum_sale=sum(sales)),by=.(v1,v2)]

回顾一下我们在上一节最后保留的一段代码:

代码语言:javascript
复制
group_by()
grouped<-group_by(df,v1,V2) #data被v1,v2进行分组
newdata<-summarise(grouped,mean_age=mean(age),sum_sale=sum(sales))

以上两段代码的效果是等同的!data.table把我们刚刚用group_by和summarise组合才能实现的功能,直接在一句代码里面就实现了,而且代码的可读性和可扩展运用性非常强!

以上讲的这些只是我工作中data.table用得最多的功能,它的强大之处还远远不止这些!如果你想深入,可以去官网下载文档,你绝对值得拥有!(反正我用了data.table以后就再也不想用R里面基础包自带的函数了,今天就黑到这里,匿了~)

——Copyright Reserved by Erin

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年08月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • dplyr包
    • filter( ) 过滤
      • arrange( ) 对数据框进行排序
        • select( ) 选择列
          • distinct( ) 去重
            • mutate( ) 为数据增加新列
              • summarise( ) 计算统计数据
                • 看了以上这几个函数,是不是觉得dplyr包超简单!对!我们要的就是简洁简单!有这么好的作者给你开发了这么好的packages,你就放心大胆的用呗,不用自己去写基础代码造轮子的事,多好!!找到合适的packages并学习使用它,绝对会让我们数据分析工作事半功倍!
                • data.table包
                  • 使用i
                    • 使用j
                      • 使用by
                        • 以上讲的这些只是我工作中data.table用得最多的功能,它的强大之处还远远不止这些!如果你想深入,可以去官网下载文档,你绝对值得拥有!(反正我用了data.table以后就再也不想用R里面基础包自带的函数了,今天就黑到这里,匿了~)
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档