美文网首页程序员
从一件数据清洗的小事说起

从一件数据清洗的小事说起

作者: 天善智能 | 来源:发表于2018-11-27 10:37 被阅读3次

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!

对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tsaiedu,并注明消息来源,邀请你进入数据爱好者交流群,数据爱好者们都在这儿。

转载自公众号:大猫的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语言入门及数据挖掘

回复 人工智能     三个月入门人工智能

回复 数据分析师  数据分析师成长之路 

回复 机器学习     机器学习的商业应用

回复 数据科学     数据科学实战

回复 常用算法     常用数据挖掘算法

相关文章

  • 从一件数据清洗的小事说起

    欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞...

  • 070|从一件小事说起

    在昨天上午的时候在京东上买了一个新的手机,可我填写的地址在上海的松江,物流却送到上海的崇明岛去了,这让我倍感意外,...

  • 启示——从一件小事说起

    今天早上,我特意用专家说的”五分钟煮蛋法”煮鸡蛋做了个测试。结果煮了四个鸡蛋都没煮熟,不仅浪费了食材还浪费了宝贵的...

  • 从一件衣服说起

    那天去店里面看到一套很好看的衣服,准备网上回购。可以在购买的过程中,引发了无数的纠结,到现在都没有购买。而是跑去...

  • 从一件毛衣说起

    这个日子说毛衣,当然跟老娘有关。儿时的冬天,在老娘的反复叮嘱下,我们总算养成脱掉毛衣睡觉的习惯。说穿一身毛...

  • [319]是服务还是引领?从一件小事说起......

    我在笑来老师的践行群当班委,今天遇到一件事情,倒是挺考验我能力的,可以拿出来给大家分享一下。 我在114班,群成员...

  • 练习理解

    理解二字说起来容易,做起来难,如果我们每个人都互相多理解下,那么就更好了,这世道也不会那么冷漠了。 从一件小事说起...

  • 生活是一种态度,从一件小事说起

    每次出差,路上时间都很长,久而久之,对出差就特别反感,路上很煎熬,也烦躁,但是前一阵旅程中的一件小事儿改变了我的态...

  • 0413 从一件小事说起给娃谈做事目标

    本周三,小朋友们对带去教室的大蒜头进行了二次收割,由爱心妈妈带回家做成菜,再送到教室给小朋友午餐加餐。 上次加餐日...

  • 一位电商人的11月总结

    一个人的改变,需要从一件件小事开始,一个人的成功,需要从一件件小事的坚持。我想改变自己,所以我开始写文章,记录我的...

网友评论

    本文标题:从一件数据清洗的小事说起

    本文链接:https://www.haomeiwen.com/subject/tcawqqtx.html