数据一多,就有可能出现名目不统一、残缺或者冗余等问题,数据量越大错误可能越多。如何才能使杂乱无章的数据变得清晰有致?免费开源的数据清洗工具OpenRefine是你的好帮手。它不但可以清洗数据、转换格式,借助网络服务和外部数据帮你扩展,而且还能链接数据库。
何为OpenRefine
OpenRefine(原来是GoogleRefine,2012年10月2日后改名)是一款数据清洗软件,帮你在使用数据之前挖掘、清洗数据。它以你的网页浏览器作为界面,这就意味着它看上去是在网上运行,但所有数据其实保存在你电脑里。
OpenRefine免费开源,可供所有人使用。现在可下载GoogleRefine2.5和OpenRefine2.6beta版本。
1归类在该部分中,你会学到如何使用OpenRefine的归类功能来清理国家名。我们的测试数据是一个来自不同国家的大学名称单,大学名称信息是从维基百科抓取来的。
1.首先我们得载入数据文件
打开OpenRefine,点击屏幕左侧的“新建项目”(CreateProject)
先点击“这台电脑”(ThisComputer),然后点击“选择文件”(ChooseFiles)。在你的数据文件中选择UniversityData.csv。你就会看到数据。
该文件中有些中文文字(列的名字)。如果中文显示不对,你也许需要告诉OpenRefine使用正确的字符集。要做到这一点,点击“字符编码”(Characterencoding)旁边的空白空间,从中选择UTF-8。
然后点击右边的“新建项目”(CreateProject)键。
2.你可以看到country(“国家”)这一列中,国家名字不统一。例如,美国即叫UnitedStates,也叫USA。我们要通过创立一个文字归类,让OpenRefine给我们看country一列中所有的值。摁下country旁边的小下箭头,选择归类Facet->文本归类TextFacet。
片刻后,该归类中所有国家的值就会在屏幕左侧显示出来。
你可以看到美国有多个不同叫法,还有一些错误的名字,比如有一行美国叫UnitedStates),还有一个捏造的国家叫Utopia(乌托邦)!每个不同的国家名叫一个归类,OpenRefine给你显示了每一个归类里有多少行数据。
点击任何归类名字,你会只看到那个归类里的行。在我们这个例子里,你只会看到那些国家列里数据和你点击的名字相符的行。
3.你只要点击任何一个归类名,就能对其进行编辑。现在我们来把美国所有不同的叫法都变成UnitedStates。你鼠标指向US这一归类时,一个“编辑(edit)”选项就会出现。点击编辑edit。
请打入UnitedStates,然后点击应用Apply。
现在所有是US的2609行都变成了UnitedStates。对每一个别的叫法都同样进行编辑,直到美国所有的叫法都变成UnitedStates。你做完后,你的归类应该如下:
2清理数字
我们现在来清理有关学生数目的数据。这些数据里,有的值不是数字,很多值里除了学生数目的数字外,还包含有文字片段。要找出那些条目需要清理,我们需要使用数值归类Numericfacet:
如果你看不到数字Numericfacet的选项,你可能首先需要将学生数那一列转换成数字。你可以通过选择编辑单元格Editcells->常用转换Commontransforms->数字化Tonumber
这儿显示的是值的直方图,并列出每种类型numeric(数值型),non-numeric(非数值),blank(空白)或者error(错误))条目的数目。你一定要只选择非数字型的行,这可以通过把numeric,blank和error排除掉来实现。
我们已经可以看出有问题了,因为有的格里包含有+和~符号。要解决这个问题,我们需要做编辑单元格Editcells->转换Transform
这使得我们可以打入替换字符序列的命令:
每格里的现值总是由value(“值”)这个名称代表的。replace(“替换”)这个命令做的是让系统针对value进行文字搜索和替换运作,把+换成什么都没有(两个引号里什么都没有)。
做这个命令时,你其实是在用一点编程语言。系统还有很多高级功能(本教学材料中没包括),如果你想在此方面获得更多知识,可以参考GoogleRefineExpressionLanguage(GREL)reference
如果你发现有多个东西需要被替换,没有必要通过不断点击编辑单元格Editcells->转换Transform来逐个替换。相反,你可以将这些命令连在一起,同时来解决多个问题,不管你有多少问题都行:
value.replace(“~”,“”).replace(“,”,””)
为了更新对非数字型值的选择,有时候有必要将各列的值转变为数字(编辑单元格Editcells->常用转换Commontransforms->数字化Tonumber)。你做完这一步以后,应该看到非数字型值少了。
文件名是Weiboairpollutiondata.txt。你可以以跟以前同样的方式载入。文件是这样:
如果想学习更多功能?
深度君还推荐:
Git-HubOpenRefine
数据学院-CleaningdatawithRefine
BigDataUniversity的线上课程
RefinePro提供的OpenRefine使用建议/方法合集
FreeYourMetadata的教学指南
原文:《中国数据新闻工作坊培训手册》第四章–实操:使用OpenRefine清理数据
深度网编辑/周炜乐
戳“阅读原文”,即可查看深度君总结的“数据新闻收集和处理工具一览”哦