在前面

转载自公众号:大猫的R语言课堂

村长,数据科学、指弹吉他及录音工程爱好者,浙大金融学博士在读,在data.table包和MongoDB的使用上有较多经验。

题:从一段json清晰代码说起

笔者某一日在R语言中文社区某一群里面发现了水友提出的一个问题,处理一个比较奇葩的数据清洗问题,先来看数据结构:

这是一个类json格式嵌套的数据,其中存在两个变量,第一个变量是cusnum作为序号,第二个是一个类json的嵌套变量,里面以类jsno格式嵌套了很多变量。

需要将这个数据集转换成如下格式:

如果你以为这一期我们会非常正经的讲一个技术问题,那么你错了!!!233333333!!!

在这个时候,群里的大佬开始了扶贫工作,为萌新们开启了超人模式,直接上传dplyr代码到男性交友平台(github),代码如下:

library(jsonlite)

library(dplyr)

library(stringr)

library(purrr)

library(forcats)

library(tidyr)

library(readr)

json %>%

mutate(var = str_replace_all(var, '""', '\"')) %>%

mutate(var = map(.x = var, .f = jsonlite::fromJSON)) %>%

unnest() %>%

as_tibble() %>%

print %>%

write_excel_csv('tmp.csv')

笔者那天下午也觉得没处理过这种类型的数据,就琢磨了一下,于是也用data.table写了一段代码:

library(data.table)

library(jsonlite)

library(stringr)

flat.json <- json[, var := str_replace_all(var, '""', '\"')

][, {

I <- list()

for (i in 1:.N) {

I[[i]] <- c(fromJSON(var[i]), cusnum = cusnum[i])

}

rbindlist(I, fill = T)

}] %>% fwrite("flat.json.csv")

还就此测试了一下二者的性能:图一为大佬代码的运行时间,图二为笔者代码运行时间

笔者的代码还是要比大佬写的快了不少。

而接下来发生在群里的事情是这样的:

怎么说呢,大姐,我知道你是大佬的邪教粉,但是你真的对力量一无所知。“For循环很慢”只是一种很不科学的说法,就好比有人说CD的音质硬是要比Hi-res音轨要好,Win7的兼容性比Win10好。很多人只知道这种说法,但并不知道背后的原因。实际上,for循环“只会在不恰当使用时”降低性能。

然而大佬毕竟是大佬,用科学的态度做了实验并给出了结论:

其实这一期这么扯淡的讲这么多事情,只是为了说明一点,data.table真的有很好的性能,尤其在处理海量数据方面(在分组特别多的时候,相比dplyr和pandas有2x~10x的提升,来自官方文档)。编程的效率最重要的来自于框架,框架如果一开始就不那么有效率,再怎么改进都是有限的。

那么data.table的框架优秀在哪儿呢?

data.table之所以比dplyr要快,在于两者设计的哲学不同。dplyr的哲学和Linux类似:每个组件就做好一件事,当把所有组件拼在一起之后就是一个全功能的包了。这个理论利弊共存。从好处来说,因为每个组件只做一件事(比如group、mutate),所以在开发的时候耦合度低,容易开发维护,而且对于使用者来说也“更容易学习”。然而,他的弊端也是非常明显的,首先是效率不高。毕竟,局部最优不等于全局最优(关于背后原理此处省略一万字)。其次,由于dplyr把原本是一个整体的数据处理需求拆分成了很多“步”,导致代码会比较冗长。相较之下,data.table则通过把数据处理中最常见的“选取行”、“修改列”、“分组”三大操作通过dt[i,j,by]的语法统一了一起来

关于如何学习data.table包,大家可以查看本公众号前几期的文章。R语言的data.table包是一个被大多数人远远低估的存在,在这里想强烈推荐给大家!!如果大家对于上面的代码有兴趣的话,也欢迎后台提问~

往期精彩:

【推荐】在R中无缝集成Github云端代码托管

还在用tm?你OUT啦!

公众号后台回复关键字即可学习

回复 爬虫            爬虫三大案例实战
回复 Python       1小时破冰入门
回复 数据挖掘     R语言入门及数据挖掘
回复 人工智能     三个月入门人工智能
回复 数据分析师  数据分析师成长之路 
回复 机器学习     机器学习的商业应用
回复 数据科学     数据科学实战
回复 常用算法     常用数据挖掘算法

从一件数据清洗的小事说起相关推荐

  1. 做一件持之以恒的小事

    以往总是羡慕别人的博客写的多么高大上,觉得自己做不到,也没有了做的想法.直到前几天,我在看python代码时,遇到一条不懂的语句,于是我将这条语句copy到百度上,最相关的是一个博客,我点开一看,原来 ...

  2. 有一件重要的小事,需要你帮忙

    大家好,我是对白. 今天有件小事,想请你帮个忙. 最近想给公众号改一个名字,希望能面向更广泛的读者朋友们,后期发布的文章也不再局限于高端的AI算法,还会给大家科普**计算机小白该如何入门,**包括:算 ...

  3. 批量生成变量及引用_R语言:data.table语句批量生成变量

    作者:村长,数据科学.指弹吉他及录音工程爱好者,浙大金融学博士在读,在data.table包和MongoDB的使用上有较多经验. 写 在前面 本期依然由村长为大家供稿,只为填上一期最后挖的坑,话不多说 ...

  4. R语言中文社区2018年终文章整理(作者篇)

    欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 对商业智能BI.大数据分析挖掘.机器学习,python,R等数据领域感兴趣的同学 ...

  5. 计算机作文点评,中学生作文点评:《你是我最温暖的人》,文章于平凡小事中见真情...

    你是我最温暖的人 人说父爱如山,此言极是,我的父亲如同大山一般默默无言,但是,我心中,父亲虽不多言语,父亲的爱却又比远比大山要温暖,从记忆中的童年一直温暖到如今. 冬日·嬉戏 记得在两三岁时,我最喜欢 ...

  6. 从 pheatmap 无缝迁移至 ComplexHeatmap

    pheatmap 是一个非常受欢迎的绘制热图的 R 包.ComplexHeatmap 包即是受之启发而来.你可以发现Heatmap()函数中很多参数都与pheatmap()相同.在 pheatmap  ...

  7. 人在职场,干得好真的不如汇报得好?

    写在前面 新的一年,我们想和大家聊点 flag,比如升职加薪. 上学的时候,总觉得升职加薪的逻辑很直白:工作做好了,经验够多了,能力和资历都到了,自然就升职加薪了.工作以后才发现,职场上还有别的说法. ...

  8. 网传字节跳动实习生删除GB以下所有机器学习模型,差点没上头条

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 作者 | 陈大鑫.陈彩娴 来源 | AI科技评论 昨晚脉脉上有网友爆料,字节跳动一位实 ...

  9. 【前沿技术】严重事故!实习生删除字节跳动所有轻量级机器学习模型

    来源:智能研究院 昨晚脉脉上有网友爆料,字节跳动一位实习生删除了公司所有轻量级别的机器学习模型! 什么是lite模型?该楼主表示,lite模型就是公司内几乎所有GB大小以下的机器学习模型,且全部被删除 ...

  10. unity3d 不规则外发光描边_饰品,就是女人身上的星星,能让你在夏天里闪闪发光...

    饰品,就好像是女人身上的星星,总是会藉由著她身上的能量,帮助她闪闪发光: 夏天总会比较偏爱简洁清爽的搭配,常常是一件纯色上衣搭万物,再点缀一两款风格配饰.一件平凡无奇的白 T-Shirt 只要搭配上了 ...

最新文章

  1. mysql密码有格式要求吗_高考日语作文10个格式要求!你能看出图中5处错误吗?...
  2. winformC# TreeView 点击父节点,子节点全选,
  3. mysql 事务sqlserver_SQLServer数据库:事务与隔离级别实例讲解
  4. 覆盖与隐藏的区别 (一个列子)
  5. element 使用阿里图标变形了_2TB不限速的阿里网盘App来了 终于不再忍受众生平等盘...
  6. 基于 SurfaceView 的直播点亮心形效果
  7. origin三维散点图_Origin 9按类别绘制散点图的方法
  8. 办公用计算机的配置,办公电脑用什么配置的好,2018办公电脑配置推荐
  9. 攻防世界-Mobile-基础android (Misc经验解法)
  10. 2017年真题精选(六)
  11. linux戒游戏下载,灵魂宝戒游戏下载-灵魂宝戒安卓版v0.9.50-Linux公社
  12. 摊牌了!我要手写一个“Spring Boot”
  13. 基于ERNIR3.0文本分类:(KUAKE-QIC)意图识别多分类(单标签)
  14. 阿里巴巴Java面试题目
  15. 最好用的内网穿透工具合集
  16. Power Query介绍
  17. CMMI认证所需要的全部流程在这里
  18. threejs:流光效果封装
  19. IC行业薪资排序:软件架构师、算法工程师、FPGA工程师、嵌入式开发。。。
  20. 记一次vue^2.6.5-router^3.0.6的keep-alive事故

热门文章

  1. [Tomcat]无法使用tomcat6.exe启动服务解决办法
  2. 全员远程办公,半年入 1 亿美元:GitHub 的最大竞争对手上市了
  3. 牛皮啊!竟然可以为Dubbo接口生成文档了!
  4. 如何提升人脸识别的精度_宝比万像人脸识别:健身房人脸识别门禁系统如何助力健身房管理?...
  5. Gym102028G Shortest Paths on Random Forests 生成函数、多项式Exp
  6. CTF加密题型解析:RSA算法的CTF解法之一
  7. 网站改版进行时,需要注意的
  8. js库编写的环境和准备工作
  9. UVA 12299 - RMQ with Shifts 线段树
  10. Java图形组件 OpenSwing