好多同学把统计和数据清洗搞混,直接把原始数据发给我,做个统计吧,这个时候其实很大的工作量是在数据清洗和处理上,如果数据很杂乱,清洗起来是很费工夫的,反而清洗好的数据做统计分析常常就是一行代码的事情。
Data scientists only spend 20% of their time creating insights, the rest wrangling data.
想想今天就给大家写一篇数据处理的常用函数介绍吧。全是自己的一丢丢经验,肯定不会是最优的,仅仅是给个参考,因为在R中同一个目的的实现方法太多了,找到适合自己的才是最好的。我争取尽量清晰地一步一步给大家展示一下整个清洗数据的流程。
在R语言中我们会用一系列的方法把我们的数据清洗过程连起来,整个的思路就是从原始数据开始,一步一步形成我们的最终可以用来做统计的数据。
整体上我们数据处理的步骤可以包含下面5个部分,也是有顺序的5步:
- Importing of data(数据导入)
- Column names cleaned or changed(列名的清洗转换)
- De-duplication(去重)
- Column creation and transformation (e.g. re-coding or standardising values)(生成新变量)
- Rows filtered or added(数据选择)
本文就带着大家一步一步走一遍,中间会详细说明一些核心函数的用法,希望对大家有点帮助。当然了,以下内容默认您已经理解dplyr包的基础,比如Pipes%>%符号。
数据导入
数据导入大家应该都没有问题,就算有问题网上搜搜一般都可以解决,导入数据的方法有很多种,这儿会推荐大家直接用右上角的菜单import data,或者使用rio包的import函数。我现在有一个已经导入的原始数据raw如下图:
数据导入进来之后我们首先应该整体上看看变量类型,变量名称都是如何的,以此决定我们是不是将变量名初步改改,或者变量类型也得改改,就是首先得有个整体把握,此时推荐大家运行一下skim函数,这个是帮助我们了解数据整体形式的十分方便的函数,请大家把summary忘掉,直接运行skim:
skimr::skim(raw)
函数的输出包括整体的数据有多少行多少列,列的不同类型(数值,字符,时间)有几种,然后不同的列的类型还会输出我们关心的指标,比如字符型的列都会有每一列的缺失比例,极值,非重复值,空白等:
比如对于每一个数值型的列都会有缺失数量,均值标准差百分位数,直方图等等我们关心的东西:
反正就是大家用skim函数就可以从整体上把握住我们的数据的样子了。
另外还会推荐大家用names函数看看数据的列名,有了对数据集的整体把握和全部的变量名,我们可以紧接着进行下一步:变量名的转换。
列名的清洗转换
转化的目的就是使得之后的操作调用变量可以更加的清晰和方便,我可以瞅瞅我的原始数据的列名:
names(raw)
在查看列名时我们需要关注一下列名是不是符合以下要求:
- 在可读性高的情况下尽可能短
- 没空格
- 没有特殊字符(&, #, <, >, …)
- 样式统一(e.g. all date