数据清洗累死个人?快试试这款神器!
做美美的可视化之前,你肯定也遇到过这样的问题——
得到的数据奇奇怪怪格式不统一,也找不到合适的方式用 excel 统一处理。遇到这种情况,我们只能一条一条人肉改成我们想要的数据吗?
当然不用!课代表今天为大家推荐一款好用的数据清洗工具 OpenRefine。
它的前身是谷歌开发的数据清洗工具 Google Refine,2012 年开放源代码后改为现在的 OpenRefine。
它类似于传统 excel 处理软件,但是在数据清洗、数据探索以及数据转换方面非常有效,在处理数据时也有更多优势。例如:使用 excel 容易导致误操作,而 OpenRefine 则可以随时退回上一步;OpenRefine 处理大数据的速度会更快;相较于 excel 简单的透视表功能,OpenRefine 可以进行进阶的数据分类分析……
那么,今天课代表就带大家一起学习这款工具。为了让大家学得更清楚,课代表还为大家精心准备了一份用来实战的“脏数据”,里面记录了著名的泰坦尼克号上的乘客信息。
您可以在公众号后台回复“67”一键获得项目的数据集、OpenRefine 下载链接以及教程的英文电子版。准备好这些就和我们一起动手操练起来吧!
✦✧✧✧
清洗数据,浏览器就行!
OpenRefine 是一个开源的网络应用,可以在计算机浏览器中直接运行,按照提示安装即可使用(你可以在它的官网下载它的最新版本:https://openrefine.org/)。
如果没有自动弹出,在浏览器中输入“127.0.0.1:3333”也可以打开。需要注意的是:使用 OpenRefine 需要保证电脑上有最新的 java 环境。
▼ Step 1 :创建新项目。
打开 OpenRefine 后,点击“新建项目-选择文件”,将准备好的数据集导入,随后点击“下一步”。
▼ Step 2:数据初步处理。
然后,根据数据预览选择合适的字符编码。
如果汉字显示为乱码,需要将字符编码选择为“utf-8”。根据需求选择数据的分割方式、表列标题、解析数据格式为日期等,修改项目名称后点击新建项目即可。
课代表强烈推荐大家在新建项目之前,将单元格中的文本解析为数字、日期等等格式(将图中右下角被框中的选项选中),这样可以为后续的处理带来很多的便利。
▼ Step 3:开始清洗。
导入成功后就可以看到具体的操作界面了。
因为 OpenRefine 是以数据库的形式去运行,所以它默认只预览10行数据。当然,如果你心里没有底的话,可以根据需要选择预览更多行。清洗完成后点击右上角的“导出”按钮即可。
✧✦✧✧
相似与不同,怎么找?
泰坦尼克号的乘客们来自天南地北,目的地也各不相同。如果想借助 OpenRefine 看看哪些有缘分的乘客既是是“老乡”又有同一目的地,我们该怎么做呢?
▼ Step 1:进入文本归类。
首先,我们需要点击列标题左侧的“▼”标志,选择“归类-文本归类”。
左侧将出现对该列的文本分类结果,我们可以看到不同种数据的类别及个数,从而对数据整体有更好的把握。
但是,不是所有的数据集都这么友好。在数据处理中,我们经常会遇到内容相同但拼写不同的情况,例如“new york”和“New York”。这给我们的数据处理带来了很大的麻烦,但 OpenRefine 可以轻松识别文本的大小写、单复数等,为我们提供便利。
在这份表格中,home.dest 列中既显示来自地又显示目的地的数据中,有些使用空格区分,有些使用“/”区分,格式也不完全相同。这时我们可以使用文本归类的“簇集”功能对它进行清洗。
▼ Step 2:进入文本簇集。
点击“簇集”按钮,进入相似文本的统一处理过程。
在“簇集”功能中,OpenRefine 为用户提供了不同的相似文本判断方法以及关键词算法,帮助我们更好地将实际内容一致的数据处理成统一格式。
在这里,我们可以先选择合适的数据处理方法及关键词算法,再按需要将需要合并的内容的复选框选中,修改为统一的新数据值内容(例如,将第一个的空格改为使用“/”),最后合并选中即可。在实际使用中,还可以按照需要进行再次簇集来得到一个更好的效果。
▼ Step 3:得到结果。
得到的结果如下图,谁是船上的有缘人一目了然。当然,你也可以直接在这个窗口中对文本直接进行修改。
✧✧✦✧
数字凌乱,你不能凌乱!
很多时候,我们需要清洗的数据的数字并不是那么“亲切”——它有时候是文本格式,有时候又夹杂了一些空值、字母或者符号。如何找到我们需要清理的那些数据呢?
▼ Step 1:数字化数据。
点击列标题左侧的“▼”标志,选择“编辑单元格-常用转换-数字化”。
▼ Step 2:进入数值归类
将列数据更改为数字类型后,再次点击▼标志,选择“归类-数值归类”。
▼ Step3:排除异常数据
将左侧数值型之外复选框选中,可以查看非数值型的数据。同时,我们还可以根据数字数据的性质拖动可能的分布区间。这样可以判断异常值的情况,将不可能的数据排除在外。
再次点击“▼”标志,选择“归类-文本归类”。我们可以看到,需要清洗的数据都有什么样不同的内容。
▼ Step4:进行数据清洗
经过筛选发现脏数据了,我们该怎么处理呢?
点击 age 列旁的“▼”标志,选择“编辑单元格-转换”。
这时就需要一点点编程知识了,但相信这难不倒你。如果我们需要将所有的“+”替换成空白,那么,在表达式处输入这行代码,之后点击确定即可:
value.replace("+", "")
这个表达式“replace”的含义是替换,针对括号里的前值进行搜索并替换为后值。这里你也可以看到替换后的值的预览。
在这里,我们还需要替换“NA”“、”等等内容,我们不需要重复点击“编辑单元格-转换”,可以直接将表达式连在一起统一处理——
value.replace("+","").replace("NA","").replace("、","").replace("~","")
更多的表达式,你可以在 OpenRefine 的官方教程中找到,这非常值得你去探索。
✧✧✧✦
学无止境,书可以参考!
当然,课代表介绍的功能只是九牛一毛。
关于 OpenRefine 使用更多的内容,我们推荐你参考 Using OpenRefine 这本书,它由世界上最大的编程相关书籍出版商 Packt Publishing 出版。
这本书囊括了 OpenRefine 安装、创建新项目、探索数据、分析数据等等一系列的的内容,遇到什么不会,查这本详细的说明书就行!
那么今天的分享就到这里了!
别忘记公众号后台回复“67”,可以获取本项目数据集、OpenRefine 下载链接以及这本教程的电子版,欢迎你和我们分享你的数据清洗心得哦!
作者 张宇昭
◒◡◒
┊推 - 荐 - 阅 - 读┊