无论是现今的大数据还是企业内部的小数据,都存在一些普遍的问题,如数据格式不对需要转换,一个单元格内包含多个含义的内容,包含重复项等等,虽然我们也可以使用excel解决,但是excel天生有诸多限制,比如其为直接对数据进行操作,容易导致误操作;数据量大会处理缓慢;透视表功能太过简单;无法进行高级的数据分类分析。而OpenRefine很好的解决了以上问题,最重要的一点是它还是免费的!!
确认错误是保证数据质量的第一步,主要包括数据画像和数据清洗。
- 数据画像 Olson定义为:使用统计方法发现数据的结构、内容、质量。换句话说,这是一种对你的数据进行画像,预发现包含的错误信息的方法。
- 数据清洗:用半自动化的方式改正画像过程中发现的错误,比如:删除缺失和重复值、行过滤透视、值聚类及转换、单元格拆分等等。
鉴于后续章节都需要保证数据已经画像清洗过。OpenRefine是一个数据转换工具(IDTS),其能够对数据进行可视化操作处理。它很像传统的excel软件,但其工作方式更像数据库,因其并不是处理单独的单元格,而是处理列和字段。这意味着OpenRefine对于增加新行内容表现不佳,但对于探索、清洗、整合数据却功能强大。
第一章 基础
1.1、创建新项目
OpenRefine使用默认浏览器中打开,程序在本地运行,点击下图中的“选择文件”按钮,导入演示实例中的phm-collection.tsv文件,然后点击下一步。
当数据上传之后,会出现导入数据的预览和格式需求。
默认情况下,第一行数据会被解析为列名称。OpenRefine同时也会猜测单元格类型,给其赋予整数、日期、网址等等,这在你后续整理排列数据的时候十分有用(比如如果你将单元格设为文本格式,那么10就会排在2前面)
另一个选项是“引号在原数据中用来分隔列”选择项,如果选中,则原数据中引号用来分隔列,否则就需要去掉勾选框以使得OpenRefine能够正确读取。在Powerhouse数据集中,引号是用来表明物体名称和说明信息,所以此情况下,引号没有分隔列的意思:所以这里我们需要去掉勾选。剩下的选项在某些情况下需要设置,试着勾选或者去掉勾选来看看如何影响数据。另外,请确保编码正确,以使得显示正确。当所有都设置好后,点击创建项目来加载数据。
1.2、探索数据
数据加载之后的界面如下:
上图中标明1~4的四个区域,我们按照顺序介绍:
1、总行数:如果你没有忘记去掉“引号有意义”选项(参照要点2-创建一个新项目),那么你会看到Powerhouse文件包含75814行数据。当数据按照某个参数进行过筛选,这里的显示会变成类似于找到123匹配行(总共75814行)。
2、显示选项:试着点击下,将行变成记录来查看区别,事实上变化并不大,只不过该区域显示为75814条记录而已。行数量一般情况下等于记录数量,但在后续情况中还是不一样的。该区域可以让你选择按5、10、25、50每页显示,并且你也可以在这里跳转页。
3、列名称及菜单:你会发现数据加载后的第一行被解析为列名称,在Powerhouse数据集中,列包含Record ID, Object Title, Registration Number等等(如果你在创建时去掉了“将第一行解析为列名称”的勾选,那么列名称区域会显示为Column1、Column2等等)
4、单元格内容:此处显示实际单元格数据
在开始剖析清理数据前,十分重要的一点是确保OpenRefine较好的载入显示了数据:查看列名称被解析正确(数据显示较宽时请使用水平滑动条)、单元格类型是否正确等等。将行显示项改为每页显示50条以查看数据不明显矛盾(理想情况下,你应该在创建项目前的预览界面时处理这些工作)。当你已经熟悉了操作界面,你就可以继续下一步了。
1.3、操纵列
操纵列可以对列进行隐藏和展开、按需要转换、以及重命名和删除等操作。
列是OpenRefine中的基本元素:其是具有同一属性的成千上万的值的集合,可以按照很多方法查看处理。
1.3.1 隐藏和展开列
如果要隐藏一列或几列以方便观察操作,那么点击列下拉菜单,选择View,有四个可选项:
以下是对Categories点击了收起所有其他列的效果:
1.3.2 移动列
有时候改变原数据中列的顺序十分重要。比如,为了将两列放在一起比较。选择需要处理的一列然后在列菜单中选择“编辑列” 。子菜单中会出现如下选项,在最后的四个选项跟别是对列进行移动。
如果对所有列操作,可以使用第一列名称为“全部”的列。这一列可以使你同时操作多列。“视图”菜单可以让你快速的隐藏和展开列。选择“编辑列”中的“重排/移动列”可以通过通过拖动重新对列进行排列,还可以将将列拖动到右侧来去除该列,如下图所示:
1.4、使用项目操作历史
OpenRefine一个特别有用的功能是可以在项目创建后保存所有的操作步骤。这也就意味着你不需要害怕做数据变换尝试:你可以随意按照自己的想法变换数据,因为一旦你发觉做错了(即使是几个月前做的),你也可以撤销该操作以恢复数据。
为了恢复历史数据,单击你想保留的最近一个步骤操作。比如,为了取消上图第2步及以后的操作,可以单击第1步使其高亮显示,这样第2步之后就会变灰。这意味着选中项后的操作都将取消。如果点击第0步,那么所有操作都将取消。
请注意,撤销某几步操作后再做出新的操作的话,原来的后续操作内容会丢失.比如,如果你从第2步回退到第1步,然后对Description 列执行左移操作,那么会显示第2步操作2. Move column description to position 1 ,而先前的灰色操作项(第2步)会丢失:因为我们不能在同时拥有两种互相矛盾的操作历史记录。记得多尝试下上面的步骤,省的以后带来严重的困扰。
记住,只有对数据有实际影响的操作才会出现在项目历史操作表中。数据透视比如:交换行列视角、在一页中改变显示数目、隐藏或展开列并不改变原来数据,所以也就不会出现在操作历史表中。以上操作也就无法随着项目信息传递:当你重新打开一个项目,无论原来是否隐藏,这时所有的列默认都是展开的,但是对于重命名列和删除列这类操作会出现在操作历史表中。在第二章,分析和修改数据中,我们会看到还有一些类型的操作会存在在操作历史表中:比如单元格和列的变换、但是过滤和透视操作则不会。
操作历史也可以以JSON格式导出,可以点击“提取”按钮进行操作。
1.5、导出项目
虽然可能已经移动、重命名或者删除了列,但其实原始数据并没有被修改。不像有些电子表格软件直接将改动写进文件,OpenRefine只是对数据文件的一份拷贝进行操作,在界面右上角点击Export按钮进行操作:
大部分弹出的选项能够让你将数据导出为常用格式,比如csv、tsv、excel和open document格式、还有不常用的RDF格式。让我们往下看:
- 导出项目: 这个选项能让你导出OpenRefine格式的压缩包,你可以用来和其他人共享或者仅仅用来备份。
- HTML表格: 这个选项可以让你方便的将文件发布到互联网。
- Triple loader 和MQLWrite: 这个选项有一些扩展功能,能够让你将数据转换成支持Freeebase规则的样式(参照附录:正则表达式和GREL)
- 自定义表格导出器:可能这是最吸引你的部分。OpenRefine可以让你对你的数据导出有更精细的控制,比如对列进行选择和排序、忽略空白行、正确选择日期格式以得到更有效的数据(参见附录:正则表达式和GREL)。如下图所示:
1.6、小结
到这里,可以初步了解了OpenRefine,一种新的具有数据画像、清洗、转换等等功能的工具,并且已经了解如何在创建新项目中导入数据和如何在完成操作后导出数据以及行、列的运行机制。
第二章 分析和修改数据
2.1 数据排序
排过序的值更加容易理解和分析,以Record ID 列为例进行排序,选择列菜单中的“排序” ,将弹出如下窗口:
单元格值可以按照文本(区别大小写或者不区别)、数字、日期、布尔值排序,另外还可以对错误值和空值指定排序顺序。比如错误值可以排在最前面(这样容易发现问题),空值排在最后(因为空值一般没有意义),而有效值居中。
对Record ID列通过按数字升序排列为例,我们就会获得一列以7、9、14等等标识的列,而打开时是以267220、346260、 267098标识顺序的,下图对排序前后的情况做了比对:
如果按照Text: 文本排序的话,会得到以100、1001、10019开始的一列。同时应该关注的一点是:排序并不会被记录在项目操作历史中。你可以在屏幕左侧顶部的“撤销/重做”页中确认下。因为排序并不会改变数据,其仅仅是改变了显示方式,比如行列互换、隐藏不想显示的列(就像excel的排序过滤功能)。所以每次对某列进行排序,你就会面对三种抉择:取消排序回到原来状态、暂时保持、永久改变,但是你可以在屏幕顶部的快捷菜单Sort来做到: