中国数据新闻工作坊培训手册第四章 – 实操:使用Open Refine清理数据

分享给朋友:

本教学材料部分根据 http://enipedia.tudelft.nl/wiki/OpenRefine_Tutorial 改编。你可以到此网址了解有关 Open Refine 的更多情况。Open Refine 以前叫 Google Refine, 所以你在搜索信息时也可以用Google Refine 这个名字。

第一部分:归类

在该部分中,你会学到如何使用 Open Refine 的归类功能来清理国家名。我们的测试数据是一个来自不同国家的大学名称单,大学名称信息是从维基百科抓取来的。

  1. 首先我们得载入数据文件

打开Open Refine, 点击屏幕左侧的“新建项目” (Create Project)

Open Refine1

先点击“这台电脑” (This Computer),然后点击“选择文件”(Choose Files)。 在你的数据文件中选择UniversityData.csv。你就会看到数据。

Open Refine2

该文件中有些中文文字(列的名字)。如果中文显示不对,你也许需要告诉Open Refine使用正确的字符集。要做到这一点,点击“字符编码” (Character encoding) 旁边的空白空间,从中选择UTF-8。

Open Refine3

然后点击右边的“新建项目” (Create Project) 键。

  1. 你可以看到country (“国家”)这一列中, 国家名字不统一。例如,美国即叫 United States,也叫USA。我们要通过创立一个文字归类, 让Open Refine 给我们看 country 一列中所有的值。摁下 country 旁边的小下箭头,选择 归类 Facet -> 文本归类 Text Facet

Open Refine4

片刻后,该归类中所有国家的值就会在屏幕左侧显示出来。

Open Refine5

你可以看到美国有多个不同叫法, 还有一些错误的名字,比如有一行美国叫United States ), 还有一个捏造的国家叫Utopia(乌托邦)!每个不同的国家名叫一个归类, Open Refine 给你显示了每一个归类里有多少行数据。

点击任何归类名字,你会只看到那个归类里的行。在我们这个例子里,你只会看到那些国家列里数据和你点击的名字相符的行。

  1. 你只要点击任何一个归类名,就能对其进行编辑。现在我们来把美国所有不同的叫法都变成United States。 你鼠标指向 US 这一归类时,一个的“编辑”edit 选项就会出现。点击该 编辑 edit

Open Refine6

请打入United States, 然后点击 应用 Apply

Open Refine7

现在所有是 US 的2609行都变成了United States。 对每一个别的叫法都同样进行编辑,直到美国所有的叫法都变成United States。 你做完后,你的归类应该如下:

Open Refine8

第二部分 – 清理数字

我们现在来清理有关学生数目的数据。这些数据里,有的值不是数字,很多值里除了学生数目的数字外,还包含有文字片段。要找出那些条目需要清理,我们需要使用 数值归类 Numeric facet:

Open Refine9

如果你看不到数字Numeric facet 的选项,你可能首先需要将学生数那一列转换成数字。你可以通过选择编辑栏Edit cells->一般转换Common transforms->到数字To number

这儿显示的是值的直方图,并列出每种类型 numeric (数值型), non-numeric (非数值),blank (空白)或者error (错误))条目的数目。你一定要只选择非数字型的行,这可以通过把numeric, blank 和error排除掉来实现。

Open Refine10

我们已经可以看出有问题了,因为有的格里包含有+和~符号。要解决这个问题,我们需要做 编辑单元格 Edit cells -> 转换 Transform

Open Refine11

这使得我们可以打入替换字符序列的命令:

value.replace(“+”, “”)

每格里的现值总是由value (“值”)这个名称代表的。replace (“替换”)这个命令做的是让系统针对value进行文字搜索和替换运作,把+换成什么都没有 (两个引号里什么都没有)。

Open Refine12

做这个命令时,你其实是在用一点编程语言。系统还有很多高级功能(本教学材料中没包括),如果你想在此方面获得更多知识,可以参考Google Refine Expression Language (GREL) reference

如果你发现有多个东西需要被替换,没有必要通过不断点击编辑单元格 Edit cells -> 转换 Transform 来逐个替换。相反,你可以将这些命令连在一起,同时来解决多个问题,不管你有多少问题都行:

value.replace(“~”, “”).replace(“,”,””)

为了更新对非数字型值的选择,有时候有必要将各列的值转变为数字 (编辑单元格 Edit cells -> 常用转换 Common transforms -> 数字化 To number)。你做完这一步以后,应该看到非数字型值少了。

Open Refine13

第三部分 – 自己动手

在该部分里,你会得到一个从新浪微博网站剪贴来的文件, 然后将其转换为有关PM2.5 值的Excel电子表格。

文件名是Weibo air pollution data.txt 。你可以以跟以前同样的方式载入。文件是这样:

Open Refine14

你必须首先删除不包含PM2.5的所有的行,然后把数据按时间、PM2.5值、和健康警告级别分成不同的列。你做完以后文件应该像这样:

Open Refine15


点击进入下一章节:第五章: 数据新闻编程基础
想回到目录请点击这里

作者简介

数据新闻工作坊

数据新闻网以引介全球范围内最顶尖的数据新闻实践为初衷,以推动数据开放及媒体革新为宗旨,面向中国的新闻从业者、媒体管理者、新传教育者以及对传媒感兴趣的设计师、程序员,提供线上信息平台与线下交流机会。