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

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包的综合运用:

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

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

使用j

DT[,v1] #选择v1列

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

DT[,.(v1,v3)]
#在j上调用函数
DT[,sum(v1)]
DT[,.(sum(v1),sd(v3))]

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

DT[,.(sum_v1=sum(v1),sd_v3=sd(v3))]

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

使用by

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

DT[,.(mean_age=mean(age),sum_sale=sum(sales)),by=.(v1,v2)]

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GopherCoder

『Go 语言学习专栏』-- 第七期

27760
来自专栏数据小魔方

R语言学习笔记之——数据处理神器data.table

数据处理在数据分析流程中的地位相信大家都有目共睹,也是每一个数据从业者面临的最为繁重的工作任务。 在实际应用场景下,虽然SQL(SQL类专业的etl语言)是数...

38980
来自专栏程序工场

什么才是java的基础知识?

16060
来自专栏hrscy

Unity 基础 - 射线

Unity 中虚拟射线能够检测所碰撞到物体,使用 Physics 类的 Raycast 方法实现色心啊碰撞检测功能。

60810
来自专栏Java学习网

你的代码糟粕比精华要多得多

你的代码糟粕比精华要多得多 新的研究发现,一个程序的核心功能仅在于一小部分封装的代码。 如果你是一个软件开发人员,有人问你,你写的代码中有多少是真正在实现实际...

27950
来自专栏微信公众号:Java团长

什么才是Java的基础知识?

近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的...

8510
来自专栏新智元

14张思维导图读懂 Python 编程核心知识体系

【新智元导读】本文主要涵盖了 Python 编程的核心知识,用14张思维导图说明问题。 本文来自ZOE | 数林觅风,作者小越酱,某医学院研二小硕一枚,热爱思维...

39370
来自专栏深度学习计算机视觉

迪米特法则

一个对象应该对其他对象有最少的了解 迪米特法则对低耦合提出了明确的要求 1、只和朋友交流 虽然一个类和多个类产生依赖关系,但它只和朋友类交流 朋友类的定义...

37780
来自专栏java达人

软件构建中的设计

设计中的挑战 1、设计是一个险恶的问题:只有通过解决或部分解决才能被明确的问题 (Tacoma Narrows大桥,空气动力学) ? 2、设计是一个了无...

20370
来自专栏数据小魔方

空间数据可视化笔记——simple features空间对象基础

是不是感觉被封面图和不明觉厉的题目给骗进来了哈哈哈,今天这篇是理论篇,没有多少案例,而且还很长,所以静不下心的小伙伴儿可以先收藏着,时间充裕了再看。 ---- ...

36150

扫码关注云+社区

领取腾讯云代金券