从一件数据清洗的小事说起
写
在前面
“
转载自公众号:大猫的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语言入门及数据挖掘
回复 人工智能 三个月入门人工智能
回复 数据分析师 数据分析师成长之路
回复 机器学习 机器学习的商业应用
回复 数据科学 数据科学实战
回复 常用算法 常用数据挖掘算法
从一件数据清洗的小事说起相关推荐
- 做一件持之以恒的小事
以往总是羡慕别人的博客写的多么高大上,觉得自己做不到,也没有了做的想法.直到前几天,我在看python代码时,遇到一条不懂的语句,于是我将这条语句copy到百度上,最相关的是一个博客,我点开一看,原来 ...
- 有一件重要的小事,需要你帮忙
大家好,我是对白. 今天有件小事,想请你帮个忙. 最近想给公众号改一个名字,希望能面向更广泛的读者朋友们,后期发布的文章也不再局限于高端的AI算法,还会给大家科普**计算机小白该如何入门,**包括:算 ...
- 批量生成变量及引用_R语言:data.table语句批量生成变量
作者:村长,数据科学.指弹吉他及录音工程爱好者,浙大金融学博士在读,在data.table包和MongoDB的使用上有较多经验. 写 在前面 本期依然由村长为大家供稿,只为填上一期最后挖的坑,话不多说 ...
- R语言中文社区2018年终文章整理(作者篇)
欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答.求职一站式搞定! 对商业智能BI.大数据分析挖掘.机器学习,python,R等数据领域感兴趣的同学 ...
- 计算机作文点评,中学生作文点评:《你是我最温暖的人》,文章于平凡小事中见真情...
你是我最温暖的人 人说父爱如山,此言极是,我的父亲如同大山一般默默无言,但是,我心中,父亲虽不多言语,父亲的爱却又比远比大山要温暖,从记忆中的童年一直温暖到如今. 冬日·嬉戏 记得在两三岁时,我最喜欢 ...
- 从 pheatmap 无缝迁移至 ComplexHeatmap
pheatmap 是一个非常受欢迎的绘制热图的 R 包.ComplexHeatmap 包即是受之启发而来.你可以发现Heatmap()函数中很多参数都与pheatmap()相同.在 pheatmap ...
- 人在职场,干得好真的不如汇报得好?
写在前面 新的一年,我们想和大家聊点 flag,比如升职加薪. 上学的时候,总觉得升职加薪的逻辑很直白:工作做好了,经验够多了,能力和资历都到了,自然就升职加薪了.工作以后才发现,职场上还有别的说法. ...
- 网传字节跳动实习生删除GB以下所有机器学习模型,差点没上头条
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 作者 | 陈大鑫.陈彩娴 来源 | AI科技评论 昨晚脉脉上有网友爆料,字节跳动一位实 ...
- 【前沿技术】严重事故!实习生删除字节跳动所有轻量级机器学习模型
来源:智能研究院 昨晚脉脉上有网友爆料,字节跳动一位实习生删除了公司所有轻量级别的机器学习模型! 什么是lite模型?该楼主表示,lite模型就是公司内几乎所有GB大小以下的机器学习模型,且全部被删除 ...
- unity3d 不规则外发光描边_饰品,就是女人身上的星星,能让你在夏天里闪闪发光...
饰品,就好像是女人身上的星星,总是会藉由著她身上的能量,帮助她闪闪发光: 夏天总会比较偏爱简洁清爽的搭配,常常是一件纯色上衣搭万物,再点缀一两款风格配饰.一件平凡无奇的白 T-Shirt 只要搭配上了 ...
最新文章
- mysql密码有格式要求吗_高考日语作文10个格式要求!你能看出图中5处错误吗?...
- winformC# TreeView 点击父节点,子节点全选,
- mysql 事务sqlserver_SQLServer数据库:事务与隔离级别实例讲解
- 覆盖与隐藏的区别 (一个列子)
- element 使用阿里图标变形了_2TB不限速的阿里网盘App来了 终于不再忍受众生平等盘...
- 基于 SurfaceView 的直播点亮心形效果
- origin三维散点图_Origin 9按类别绘制散点图的方法
- 办公用计算机的配置,办公电脑用什么配置的好,2018办公电脑配置推荐
- 攻防世界-Mobile-基础android (Misc经验解法)
- 2017年真题精选(六)
- linux戒游戏下载,灵魂宝戒游戏下载-灵魂宝戒安卓版v0.9.50-Linux公社
- 摊牌了!我要手写一个“Spring Boot”
- 基于ERNIR3.0文本分类:(KUAKE-QIC)意图识别多分类(单标签)
- 阿里巴巴Java面试题目
- 最好用的内网穿透工具合集
- Power Query介绍
- CMMI认证所需要的全部流程在这里
- threejs:流光效果封装
- IC行业薪资排序:软件架构师、算法工程师、FPGA工程师、嵌入式开发。。。
- 记一次vue^2.6.5-router^3.0.6的keep-alive事故
热门文章
- [Tomcat]无法使用tomcat6.exe启动服务解决办法
- 全员远程办公,半年入 1 亿美元:GitHub 的最大竞争对手上市了
- 牛皮啊!竟然可以为Dubbo接口生成文档了!
- 如何提升人脸识别的精度_宝比万像人脸识别:健身房人脸识别门禁系统如何助力健身房管理?...
- Gym102028G Shortest Paths on Random Forests 生成函数、多项式Exp
- CTF加密题型解析:RSA算法的CTF解法之一
- 网站改版进行时,需要注意的
- js库编写的环境和准备工作
- UVA 12299 - RMQ with Shifts 线段树
- Java图形组件 OpenSwing