我的征途是星辰大海分享 http://blog.sciencenet.cn/u/changxiaoyu

博文

数据清洗——合并数据

已有 4623 次阅读 2016-12-21 11:27 |个人分类:科学家之路|系统分类:科研笔记

HadleyWickham 大神2013年的访谈中提到,如果你用了8小时进行数据清理和数据整理,而只用了2小时进行建模,那么很明显,你希望了解如何将数据清理和整理的时间尽可能缩短[1]

事实的确如此。以前我用在数据清洗上的时间通常是建模时间的10倍!作为一个菜鸟级的数据分析工作者,几乎每一条命令都是搜索或求助来的,写好的程序运行时满屏的bug,日子都是在抓耳挠腮中度过。R如何连接MS ACCESS数据库?如何去掉空格字符串?如何用一个数据集匹配替换另一个数据集的部分数据?如何将N个数据集合并且仅保留共有项?……随着不断解决问题、积累经验,数据清洗逐渐变得没有以前那么面目可憎了。

本文将以数据合并为例,抛砖引玉,讲一下数据合并的一些tips

做科研的人使用的数据分析工具大多是RR拥有自己的脚本语言和大量的统计、图形库(得益于开源社区),这让她看起来既美又实用。R虽说有一套自己的语言,还挺完备,但她最专业的还是做统计和画图,而像连接数据库、文本处理、文件操作等这些脏活可不能委屈R来干哪,做这些脏活最棒的工具是Python[2]

但是根据我的个人经验,以及网上各路大神们的比较总结,绝大部分情况下R能够很好地胜任数据清洗的任务,毫不逊色于python

比如有两个数据集,分别是小朋友中文课和音乐课的成绩:

> chinese

  NAME  CLASS  CHINESE

1  Lily      1     90

2  Daisy     1     88

3  Rose      1     85

4  Cherry    2     85

5  Lotus     2     82

6  Iris      2     80

7  Kate      3     80

> music

  NAME  CLASS  MUSIC

1  Lily      1    85

2  Daisy     1    85

3  Rose      1    85

4  Cherry    2    80

5  Lotus     2    80

6  Iris      2    90

现在我想把它们合并,去掉3班的小朋友,分析中文课成绩和音乐课成绩是否有相关性。最简单的,使用R的基本函数merge

> newdata<-merge(chinese,music)

> newdata

  NAME  CLASS  CHINESE  MUSIC

1  Cherry    2     85    80

2  Daisy     1     88    85

3  Iris      2     80    90

4  Lily      1     90    85

5  Lotus     2     82    80

6  Rose      1     85    85

当数据集特别大,R的运算速度特别慢,甚至出现内存不够的情况,可以使用Hadley Wickham 大神开发的包dplyrjoin函数

> library(dplyr)  #注意!这个包适用于64R

> newdata1<-inner_join(chinese,music)

> newdata1

  NAME  CLASS  CHINESE  MUSIC

1  Lily      1     90    85

2  Daisy     1     88    85

3  Rose      1     85    85

4  Cherry    2     85    80

5  Lotus     2     82    80

6  Iris      2     80    90

Join函数包括以下几种:

inner_join#內连

left_join#左连

right_join#右连

full_join#全连

semi_join#返回能够与y表匹配的x表所有记录

anti_join#返回无法与y表匹配的x表的所记录

最后,用python的数据分析包pandas的数据合并命令pd.merge当然能轻松地完成这个任务!永远不用担心内存不够的问题!

参考:

[1] http://blog.163.com/zzz216@yeah/blog/static/16255468420147179438149/

[2] http://www.cnblogs.com/shined/p/4401223.html




https://blog.sciencenet.cn/blog-485525-1022188.html

上一篇:人生第一次
下一篇:一个世纪前的文献
收藏 IP: 61.140.123.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-23 15:07

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部