动态

如何使用openrefine自动清洗电子表格数据

您是否有过这样的经历:面对包含错误信息的大量数据文件,手足无措,不知怎样开始?

我曾经在一家公司工作,该公司将文书工作存放在异地60年。材料在文件表中编入索引。大多数记录都有一个盒号,存储日期,存储供应商收据编号以及内容的粗略概念。最重要的是,请注意。

超过60年的名单变得……凌乱。存储合同多次更改 – 因此包装箱代码和供应商收据随时间变化。加上随着时间的推移而累积的随机错误,你就一团糟了。

我的工作是将所有东西转移给另一家承包商 – 这意味着要清理数千条记录,以便与新供应商的精彩在线库存保持良好关系。这是一件苦差事 – 我们许多人在尝试组织数据时所面临的苦差事。

好消息是,如果您可以将杂乱的数据放入电子表格中,您可以清理并重新格式化。我最喜欢的工具是OpenRefine,它的专长是“协调”或“规范化” – 使得很容易找到拼写错误,短语的变化,格式化错误,额外的空间以及其他很难在行上发现的东西信息。

什么是OpenRefine

OpenRefine简单地称其为“处理凌乱数据的强大工具。”最初于2010年发布了“ Freebase Gridworks ”,后来被搜索巨头收购后被称为“Google Refine”。今天,它是一个社区运行的开源项目,可以优化您的数据。

对你而言,这可能意味着许多事情。您的销售团队可能希望导出旧商店数据,重新组织它,并将其导入新的电子商务应用程序。您的会计人员可能会有多年前遗留下来的遗留数据。您的公关人员可能有多个来自您希望合并,修改或删除重复的广告系列的电子邮件列表。

也许您的调查结果很混乱,您的应用导出令人困惑,或者您的分析数据需要来自多个来源。

OpenRefine特别针对这些类型的批量操作而构建。它可能只是你需要最终完成你一直推迟的数据项目。

OpenRefine入门

入门很容易。只需下载OpenRefine -it适用于Windows,Mac和Linux,然后启动该程序。它会打开一个与其他Google Apps非常相似的浏览器标签,并会要求您创建项目,或者打开您已经开始的项目。

您需要OpenRefine的一些数据才能使用 – 它会以电子表格格式打开任何数据:CSV,XLS,甚至是在线的Google表格电子表格。它也可以采用XML和JSON文件。

OpenRefine可以直接从Web导入电子表格文件 1

OpenRefine可以直接从Web导入电子表格文件

 

让我们开始一个新项目。这项工作将使用安大略省政府提供的一系列公开数据 – 与许多公共数据一样,这些数据有点混乱。让我们走近一个主题,亲爱的:啤酒。将链接复制到该XLSX文件,其中包含有关安大略省微型啤酒厂和品牌的详细信息。切换到OpenRefine选项卡,启动新项目,选择“ Web地址”选项,然后粘贴到电子表格链接中。

输入数据集后,OpenRefine会立即生成预览以确保正确显示。您可以执行一些初步清理 – 删除空行,将第一行设置为具有列名称的标题,或将列转换为特定数据类型(日期,整数等)。

当您确保数据显示正确时,单击“创建项目”,您将被带到所有魔术发生的屏幕。

openrefine创建项目 2

openrefine创建项目

 

您会注意到的第一件事是OpenRefine不会像带有长行列表的电子表格那样显示您的数据。相反,它一次最多显示50行,基本上只是预览,您可以考虑使用它。如果需要,您可以翻阅您的数据,但我认为您很快就会感到舒服。

使用OpenRefine Facets清理数据

第一步是了解方面。这些精确显示了列中使用的值,因此您可以找到应该相同的拼写错误或变体。让我们从制造商的名字开始。单击标题旁边的下拉按钮,选择Facet,然后选择Text Facet。您将看到一个这样的列,显示每个项目在数据集中出现的次数:

使用OpenRefine Facets清理数据 3

使用OpenRefine Facets清理数据

 

例如,我们可以看到Big Rig Brewery有13种不同的啤酒; Big Rock Brewery,6种不同的啤酒。我们已经可以在这里看到一些混乱的数据 – “Black Swan Brewing Company”和“BLACK SWAN BREWING COMPANY INC。”是同一家公司,但在此电子表格中名称略有不同。

使用OpenRefine Facets清理数据01 4

使用OpenRefine Facets清理数据01

 

要解决此问题,请将鼠标悬停在要更改的名称上,单击“编辑”,然后键入新名称。单击“ 应用”,它将自动编辑数据集中的所有匹配条目。

让我们通过自动识别所有相似的方面并合并它们来加速这个过程 – 无需任何打字 – 通过聚类数据。单击构面显示顶部的“ 群集”按钮,您将看到OpenRefine标识的所有类似条目:

使用OpenRefine Facets清理数据02 5

使用OpenRefine Facets清理数据02

 

对于其中一些,它只是一个额外的空间(如“Square Timber酿酒公司”的末尾)或额外的逗号(如Blood Brothers Brewing),或自由使用大写字母。正如您在“Bevin Palmateer”条目中看到的那样,OpenRefine还会识别出乱序的单词。

检查合并框以查找要修复的任何内容。如果您不喜欢建议的新值 – 例如,为NITA BEER建议的大写名称 – 您只需单击小写选项即可更改该字段。如果您不喜欢任何选项,只需输入您的首选名称即可。

单击Merge Selected&Re-Cluster进行另一次检查。当检查没有找到结果时,尝试使用另一种聚类方法来查找更多(您应该找到“Walkervile”和“Walkerville”)。

它是数据挖掘,但您无需学习高级数据挖掘理论即可获得结果:只需单击所有选项即可。你会开始看到误报(例如,“贝尔城”不是“河城”),你可以忽略它。

使用OpenRefine Facets清理数据03 6

使用OpenRefine Facets清理数据03

 

还有一些常用的转换工具可用于清理内容,例如消除文本前后的所有空格。让我们通过将整个列转换为Titlecase来摆脱所有大写啤酒厂名称。再次单击列的下拉菜单,转到编辑单元格,并阅读所有可能性。

在OpenRefine中自动分类数据

下一步是用所有这些数据做一些聪明的事情。让我们假装这些啤酒是我们的产品数据,我们想在我们的目录中添加啤酒类别。我们不想手动标记每个条目,所以让我们通过从啤酒名称中识别啤酒类型来节省一些时间。

我们可以使用Custom Text Facet快速检查一种啤酒。我们将查找包含“Porter”的所有单元格值(这也是区分大小写的,但现在我们已将所有内容放入标题中,首都P应该捕获所有内容)。制造商品牌列上的自定义文本构面会显示此窗口,我们在其中输入过滤器:

value.contains("Porter")

 

在OpenRefine中自动分类数据 7

在OpenRefine中自动分类数据

 

该函数返回truefalse-和true在这里表示25个啤酒在列表搬运工。(还有79家啤酒厂没有任何可用的啤酒 – 该(blank)类别 – 但现在让我们忽略它。)

当您想要操作电子表格的子集而不必删除其余部分或保持选择焦点行时,这些过滤器非常有用。您可以应用过滤器,执行一系列操作,然后再将其删除。OpenRefine甚至包括一些用于格式化数据的常用配方,例如标准化日期格式或将“Firstname Lastname”转换为“Lastname,Firstname”。

让我们用它来将我们的数据转换成有用的东西。我们将根据“制造商的品牌”列添加一个新列,使用文本分析来猜测它是什么类型的啤酒。它不适用于所有条目,但对于名称中包含“IPA”,“lager”,“stout”,“lime”,“red”,“wheat”等的啤酒,我们将拥有一些成功。

 

在OpenRefine中自动分类数据01 8

在OpenRefine中自动分类数据01

 

首先单击“制造商的品牌”。选择“ 编辑列”,然后选择“ 基于此列创建列”。要查找“lager”并用适当的“lager”替换整个Beer类型值,我们使用if语句:

if(value.contains(“Lager”),”lager”,value)

If 这里的陈述很简单:如果第一部分为真,则将整个值转换为“lager;”否则,将单元格值替换为自身(或者不执行任何操作)。

如果我们想要同时对大量啤酒类型进行分类,我们会将一系列if语句嵌套在一起。它看起来有点傻,但完成工作:

if(value.contains("Lager"),"Lager",if(value.contains("IPA"),"IPA",if(value.contains("Wheat"),"Wheat",if(value.contains("Pilsner"),"Pilsner",if(value.contains("Brown"),"Brown",if(value.contains("Kolsch"),"Kolsch",if(value.contains("Light"),"Light",if(value.contains("Red"),"Red",if(value.contains("English"),"English",if(value.contains("Stout"),"Stout",if(value.contains("Porter"),"Porter",value)))))))))))

基本上,如果没有找到“Lager”,那么尝试“IPA”,然后尝试“小麦”,然后尝试“Pilsner”等等。这不是标准的编程语法,而是完成工作。

应用该转换,然后检查列的构面以查看我们的进度。

在OpenRefine中自动分类数据02 9

在OpenRefine中自动分类数据02

 

虽然我们正在努力,但让我们清理结果。根据您在上面学到的步骤,将“IPA”和“India Pale Ale”调和为“IPA”。另外请记住,操作按顺序运行:在重新格式化“Pale Ale”之前,您需要转换“India Pale Ale”。由于这些转换也区分大小写,因此转换为小写“India pale ale”也会保护以后搜索“Pale Ale”时的工作。

通过一些分类,我们可以开始看到安大略省啤酒类型的传播。(今天就试试吧!)这绝对比手动标记它们更快,它应该让你知道如何让OpenRefine过滤器为你工作。

如果这是我们在线商店的产品列表,我们希望从OpenRefine导出我们清理过的和增值的电子表格,并将其导入我们的电子商务商店。在导出按钮是你的朋友。您可以将数据导出为包含一系列选项和数据表单的电子表格。您还可以将数据直接上传到新的Google表格电子表格或Google Fusion表格。

 

使用OpenRefine做更多事情

还有一些其他有用的OpenRefine工具。该撤销/重做选项为您提供有关所有的活动,而不是仅仅解开自己的失误,这是在学习如何更充分地利用OpenRefine的超级有用的详细信息。还要记住:OpenRefine是围绕数据库设计的,因此您可以单独使用其记录和行来组织数据。

现在轮到你试试了。是否有来自应用导出的混乱数据,或者是一个充满混乱数据的旧电子表格?

一个好方法是使用OpenRefine来组织您的联系人:在将数据导入新应用程序之前,查找电子邮件地址,电话号码或公司名称中的拼写错误和格式错误。当我们改变注册表单的设计时,我用它来重新格式化旧的Mailchimp数据 – 超级方便。

不要花费数小时重新格式化数据。OpenRefine可以在几分钟内为您完成。

 

继续阅读

 

改写自Allana Maye

Write a Comment