《Using OpenRefine》翻译~7

来源:互联网 发布:战网更新网络错误 编辑:程序博客网 时间:2024/06/06 02:05

上一篇:《Using OpenRefine》翻译~6

2-数据透视

OpenRefine最常用的功能可能就是数据透视了。数据透视并不改变数据,但是可以让你获得数据集的有用信息。你可以把数据透视看作是多方面查看数据的方法,就像从不同的角度观察宝石一样。数据透视可以获得数据中一个变化后的子集,比如只显示某个参数要求下的行。

本点中,我们将学习如何按照你的要求或者数据具体的值来透视数据:对字符串进行文本透视、对数字和日期进行数字透视、几个预定义的透视功能、最后还有标星和标旗功能。OpenRefine的强大之处也在于这些透视功能的组合使用。

 

文本透视

如果你的数据集中包含城市或者国家名称的列,而你想大致了解下这个字段都有些什么值和这些值的统计次数有多少,那么就可以用文本透视。当然,只有该列中的类别总数不是特别大的时候文本透视才有用,因为文本透视并不是为了列出所有的信息,全部列出并没有多大意义,同时透视结果也不会出现相同的两个类别(除非又重复项,我们将在下一点中说明)

对于Powerhouse数据集中Categories列最适合做文本透视,其是从一个严格设计的词汇中选择(称为powerhouse museum object name thesaurus),简单来讲,Categories列包含了几千个常用事物的描述信息。

让我们试试看,点击Categories列菜单,选择Facet | Text facet ,结果会出现在屏幕左侧的Facet/Filter 页中。可惜的是,OpenRefine提醒我们总共有14,805个分类,已经超过了我们的电脑显示内存。事实上,透视不能超过2000个分类,当然你可以通过点击Set choice count limit设置成15000,但是这很可能将使得软件运行缓慢,特别是你哈没有改变JAVA内存分配数量(参见1初识OpenRefine中的要点7:获取更多的运行内存)

如果你选择提高弹出窗口中限制数的最小值,OpenRefine其实是改变了JAVA变量中ui.browsing.listFacet.limit 的值,但是大都数情况下你并不需要对这么复杂的值过多关注,其实提示窗口的出现也就意味着分类数太多了,需要减少。其实OpenRefine在超出时完全有办法提高限制数,但实际情况下往往我们想减少限制数的,太多的分类对于我们毫无意义。如果想这么做,可以访问系统参数:http://127.0.0.1:3333/preferences ,编辑ui.browsing.listFacet.limit,然后调低到想要的值。如果想恢复默认值2000,直接删掉这个值即可。

点击下面的Facet by choice counts 链接,将打开二级透视界面。新的透视也是对Categories的透视,这里可以让你对透视显示范围进行限定。当第一次打开的时候,OpenRefine会显示所有分类,无论分类数量只有1次还是有几千次。因为有太多的分类会被显示,所以一般开始的时候只显示数量较多的分类就比较有意义。

拖动左边的滑块从最小值0到1000,文本透视情况将自动更新,现在将只显示大于1000数量的Categories分类。这里只有7个,这就比先前大大减少了。为了观察方便,可以选择对count(计数项)排序(降序)来替代按字母排序。

下图显示你得到的透视图:


如果你想导出最多的7个分类名称,可以点击上图中的7 choices链接,会得到一个TSV格式的内容,你可以复制粘帖到你喜欢的文本编辑器或者电子表格软件中。然而你会觉得奇怪,比如Photographic prints|Photographs 并不是一个分类名称,其实包含两个分类,被“|”分开了。

这就是为什么我们第一次透视会出现这么多的分类。Glass plate negatives|Gelatin dry plate negatives|Photographs, Glass plate negatives|Photographs和Glass plate negatives被区分为不同的分类,但是其实他们都属于一个分类。这就是多义单元格的困扰,我们现在暂不去管这个问题,我们将在第三章:高级数据操作学习,第三章我们还将学习一个有趣的按钮Cluster,因为现在我们刚开始学习,所以现在我们暂且忽略。

因为对于Categories列的 透视 看上去 不是特别整齐,让我们在对数值列进行透视前来看看另一个文本透视操作。Height虽然并不是特别明显,但是我们也可以看到这个列并不仅仅包括数值,比如还有一些带单位的数字990mm,这意味着我们不能使用数值透视(最起码不能直接用),但是我们可以试试文本透视,希望能够看出端倪。

幸运的是,我们在对Hight列进行透视操作(Facet|Text facet)时,我们发现只有1313个分类,低于2000限制数,用count代替name排序,我们发现164mm的数量有1368,而第二位的215mm只有400,如下图所示:


在上图列表底部,我们可以看到Hight列中空值有45501,也就是说这些值缺失。但是我们将不在这里处理,因为OpenRefine提供了一个处理空值的透视功能,我们将在下面说明定制透视时说明。



数字透视

找到一个列可以用来做数字透视比文本透视简单,因为数据中往往包含许多数字,如果你在项目导入时勾选Parse cell text into numbers, dates...,那么数字也可以通过绿色来快速识别。本例中Record ID就是个很好的例子,通过对其透视可以看出ID的分布,并且可以看出是否每条记录都有一个ID。

点击Record ID列菜单,选择Facet | Numeric facet,然后看看左侧Facet/Filter页出现了什么。文本透视会返回一个不同分类数量的列表,而数字透视则是某个数值范围的分布,就像我们通过频数来透视一样。


我们可以看到Record ID的值域从0510,000,在270,000至280,000之间有个小缺口,在410,000至500,000有个大缺口。通过滑动滑块,我们可以看出有533行的值大于500,000。

在图的下方,我们可以看到值类型被分成四种:Numeric, Non-numeric,Blank Errors。这是因为一些错误所导致的。在我们操作前可以看到Errors(错误值)为0,blanks(空值)数也是0,说明每一行都被分配了一个ID,有三行的值为Non-numeric(非数字),不能用作ID。让我们只勾选Non-numeric来看看情况。

现在右侧我们能够看到这三行的内容了。这三行不光ID缺失,其他很多列也是空白,除了persistent link和license information列,但是这些信息也是自动产生的。这几行并没有什么实际意义,所以我们可以删除(本章最后内容会介绍为什么会产生)

但是这里有个问题,如果这三行ID确实为空,那么为什么会被分类到Non-numeric,而不是分类到Blank?其实是空格导致的,我们可以通过编辑这几个单元格来验证。我们可以将鼠标移到单元格上,会出现edit标记,点击进入你就会看到包含一个单独的空格,如下图所示:


为了改正这个错误,可以单击Backspace或Delete键删除这个空格,然后点击Apply to All Identical Cells 按钮或者按Ctrl_Enter。OpenRefne 会弹出一个黄框提示你有多个Record ID 列值被修改。最后,左侧的透视图会自动刷新,有问题的三行也会归到Black分类。

在我们学习定制透视技术前,让我们快速学习下和数字透视相关的两种透视方法:时间轴透视和散点图透视。

时间轴透视要求数据为日期格式,所以类似17/10/1890 的文本字符串需要改为日期格式。你可以用Production Date 列练手,但是请注意,真实的时间很少是确定的,比如仅仅包含年份的1984,或者一个时间范围如2006到2007.我们可以对某列做如下操作:Edit cells | Common transforms | To date 

79个单元格转换成日期格式。比如17/10/1890 会被转成1890-10-17T00:00:00Z ,其中这些0标识一天中的小时、分钟、秒。

很显然,79个单元格跟总数75,814比起来太少了,但是时间轴透视结果还是能够让我们了解到这些物品的生产日期起码跨度为1880年2月26日至1952年1月31日。虽然大部分值要么不是日期格式(19,820),要么是空白(55,915)。

下图显示了将Production Date 列转换成日期后的时间轴透视图:


最后,散点图透视能够让我们对值的图形分布作了解。我们不会对这点细节展开,你试试看就知道了。


下一篇:《Using OpenRefine》翻译~8


原创粉丝点击