《Using OpenRefine》翻译~11

来源:互联网 发布:中国最新人口普查数据 编辑:程序博客网 时间:2024/06/06 01:34

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

3:相似单元格聚类

多亏了OpenRefine,我们并不需要担心数据创建过程中产生的一些问题。如果你在分割多值单元格后对分类进行了分析,你会发现同样的分类并不一定有相同的拼写。比如,Agricultural Equipment 和 Agricultural equipment(大小写不同),Costumes 和 Costume(单复数区别)等等。好消息是这类问题可以借助OpenRefine自动处理。OpenRefine确实让你的工作变得简单。

找到拼写有微小区别的内容的过程叫做clustering(聚类),在你分割好多值单元格后,你可以点击Categories下拉菜单:Edit cells | Cluster and edit….,OpenRefine会打开一个对话框,这里可以选择不同的聚类方法,不同的方法都提供了很多相似的功能。打开时默认参数为key collisionfingerprint选中。

稍等一会后(如果数据量大可能耗时较多),OpenRefine会完成对Categories列的聚类算法计算,最后其会列出所有的聚类项,每一项都包含拼写有微小差别的行,并且会提供一个整个聚会项的建议值,如下图所示:


请注意OpenRefine并不能完全自动的合并聚类值。事实上,OpenRefine需要你确认是否这些值真的指向同一个内容。这个措施可以名称相似但意义不同的内容被合并。

在我们开始操作前,让我们先学习下界面中的列代表什么。Cluster Size列代表某个名称有多少种不同的拼写方式被找到。Row Count列代表有多少行数据被找到。Values in Cluster列指明不同的拼写方式并且其数量,另外,这些拼写方式可以被点击,所以你可以确定那种是正确的,如果你将鼠标移动到某个拼写上方,会出现Browse this cluster 链接,你可以点击查看所有这类型的数据。Merge?列包含一个勾选框,如果你选中它,那么所有的值将会修改为New Cell Value列中的内容,但你需要点击Merge Selected按钮确认。当然,你也可以手工指定一个值,如果自动出现的值并不符合你的要求。

那么,让我们开始第一次聚类操作吧。我强烈建议你仔细的检查列表,不然会把不同的值聚类到一起。在本例中,聚类算法表现很好:事实上,所有的建议聚类项都是正确的。所以我们可以不必点击每个Merge?勾选框,我们可以直接点击Select All按钮,然后点击Merge Selected & Re-Cluster按钮,这个操作可以让我们将所有聚类项进行聚类操作并且不会关闭界面,这样我们还可以试试其它聚类算法。

OpenRefine立即用相同的算法进行了聚类,结果会显示没有需要聚类项了。让我们尝试下换种聚类算法,点击Keying Function菜单,选择ngram-fingerprint.这里我们需要设置一个新的参数Ngram Size,我们可以尝试改大获改小来获得一个合适的聚类。我们发现OpenRefine又发现了几个新的聚类。你可能急着想点击Select All合并了,但是请记住我们要求仔细检查所有的列表,你能发现错误吗?仔细看看下图:


确实,这种聚类算法将ShirtsT-shirts认为是相同的,但是这可能并不对,所以,要么手工选择所有正确的建议,要么不要勾选不正确的项。最后点击Merge Selected & Re-Cluster按钮。

除了我们可以尝试不同的算法,我们也可以尝试不同的聚类模式。Method菜单中点击选择nearest neighbor. 我们将看到新的聚类参数 (RadiusBlock Chars,我们先使用默认参数). OpenRefine 又发现了新的聚类项,但是这里就有点过头了,事实上有一些建议是错误的,比如Lockets / Pockets / Rockets聚类,另一个聚类是合适的,比如"Photocopiers"和 "Photocopier",这种情况下,最好的办法是在这许多错误项中手工选择正确项。

假设我们已经找出了所有的需要聚类的项,点击Merge Selected & Close按钮,我们将把所有项进行聚类,并且退回到OpenRefine主界面。如果现在你再观察数据或者对Categories列再进行一次文本透视,你会发现先前出现的那些问题都没有了。

什么是聚类模式?

OpenRefine提供两种不同的聚类模式,key collisionnearest neighbor,这两种模式原理不同。对于key collision,我们使用键函数来影射某个键值。相同的聚类有相同的键值。比如,如果我们有一个移除空格功能的键函数,那么A B C, AB C,和 ABC就会有相同的键值:ABC。事实上,键函数在构建上更加复杂和高效。

而Nearest neighbor使用的是一种技术:值与值之间使用来distance function衡量。比如,如果我们将每一次修改成为一个变化,那么Boot 和 Bots变化数是2:一次增加和一次修改。对于OpenRefine来说,其使用的distance function称为levenshtein

在实际应用中,很难确定究竟哪种模式和方法组合最好。因此,最好的方法是尝试不同的组合,每次都需要小心的确认聚类项是否真的可以合并。OpenRefine能够帮助我们进行有效组合:比如,先尝试key collision ,然后 nearest neighbor。

 

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