OpenRefine使⽤教程
⼀、openrefine简介
⽆论是现今的⼤数据还是企业内部的⼩数据,都存在⼀些普遍的问题,如数据格式不对需要转换,⼀个单元格内包含多个含义的内容,包含重复项等等,虽然我们也可以使⽤excel解决,但是excel天⽣有诸多限制,⽐如其为直接对数据进⾏操作,容易导致误操作;数据量⼤会处理缓慢;透视表功能太过简单;⽆法进⾏⾼级的数据分类分析。⽽OpenRefine很好的解决了以上问题。
数据清洗Data Cleaning:是尝试通过移除空的数据⾏或重复的数据⾏、过滤数据⾏、聚集或转换数据值、分开多值单元等,以半⾃动化的⽅式修复错误数据的过程。数据清洗是⼀个反复的过程,不可能在⼏天内完成,只有不断的发现问题,解决问题。对于是否过滤,是否修正⼀般要求客户确认。
IDTs:Interactive Data Transformation tools,交互数据转换⼯具,它可以对⼤数据进⾏快速、廉价的操作,使⽤单个的集成接⼝。OpenRefine就是这样的IDT⼯具,可以观察和操纵数据的⼯具。它类似于传统Excel的表格处理软件,但是⼯作⽅式更像是数据库,以列和字段的⽅式⼯作,⽽不是以单元格的⽅式⼯作。这意味着OpenRefine不仅适合对新的⾏数据进⾏编码,⽽且功能还极为强⼤。
⼆、下载及安装
三、初识openrefine
1.创建⼀个新项⽬
以下是部分OpenRefine⽀持的⽂件格式:
●csv、tsv及其他*sv
●xls/xlsx、cdf、ods
●JSON
●XML
●⾏⽂本格式(⽐如log⽂件)
如果你需要打开其他格式⽂件,你可以通过OpenRefine扩展功能打开。
创建OpenRefine项⽬⼗分简单,只需要三步:选择⽂件、预览数据内容、确认创建。让我们通过点击“创建项⽬”标签页、选择数据集、点击下⼀步来创建新项⽬。
2.操纵列
列是OpenRefine中的基本元素:其是具有同⼀属性的成千上万的值的集合,可以按照很多⽅法查看处理。
列在OpenRefine中的操作有隐藏和展开(View菜单)、按需要转换、移动以及重命名和删除(Edit菜单)。
通过操纵列可以更加直观⽅便的观察数据,分析数据,操作数据。
3.项⽬操作历史
这是OpenRefine⼀个特别有⽤的功能,可以在项⽬创建后保存所有的操作步骤。这也就意味着你不需要害怕做数据变换尝试:你可以随意按照⾃⼰的想法变换数据,因为⼀旦你发觉做错了(即使是⼏个⽉前做的),你也可以撤销该操作以恢复数据。
只有对数据有实际影响的操作才会出现在项⽬历史操作表中。数据透视⽐如:交换⾏列视⾓、在⼀页中改变显⽰数⽬、隐藏或展开列并不改变原来数据,所以也就不会出现在操作历史表中。
操作历史也可以以JSON格式导出,可以点击Undo / Redo页中的Extract…
4.导出项⽬
⼤部分弹出的选项能够让你将数据导出为常⽤格式,⽐如csv、tsv、excel和open document格式、还有不常⽤的RDF格式。
还可以导出openrefine的压缩包(Export project),将⽂件发布到互联⽹上(HTML table)。⾃定义导出设置(Custom tabular exporter and templating)等
5.获取更⼤的运⾏内存
Windows
Windows平台,你可以在OpenRefine的⽂件夹中到openrefine.l4j.ini⽂件,到以-Xmx(对于JAVA来说表⽰最⼤内存数)开始的那⾏,默认情况下分配内存为1024M。稍稍改⼤点,⽐如2048M。保存后下次你打开OpenRefine就能够⽣效。
Mac
字段字符串去重复对于Mac平台就有点复杂,因为Mac电脑的操作系统将配置⽂件隐藏了。⾸先关闭OpenRefine,按住control键然后点击OpenRefine图标,在弹出菜单中选择Show package contents,然后在Contents⽂件夹中到info.plist⽂件并打开,然后在其中到VMOptions项(这就是JAVA虚拟机设置项)。到以-Xmx开头的设置项,将默认的1024M按你的需要修改,⽐如-Xmx 2048M。
四、分析和修改数据
分析数据包括排序和各类透视功能,还包括⽂本过滤和检重。
修复数据步骤则包括排序、单元格转换、删除。
1.数据排序(sort菜单)
单元格值可以按照⽂本(区别⼤⼩写或者不区别)、数字、⽇期、布尔值排序,对每个类别有两种不同的排序⽅式:
• Text: ⽂本:从a到z排序或者从z到a排序
• Numbers数字: 升序或者降序
• Dates: ⽇期升序或者⽇期降序
• Booleans: false值先于true值或true值先于false值
我们还可以对错误值和空值指定排序顺序。⽐如错误值可以排在最前⾯(这样容易发现问题),空值排在最后(因为空值⼀般没有意义),⽽有效值居中。
每次对某列进⾏排序,你就会⾯对三种抉择:取消排序回到原来状态、暂时保持、永久改变。
如果你想将排序后的结果再进⾏后续操作,⼀定要将排序结果永久保存,⽐如对于空⽩单元格或者填充单元格,为了避免前后不⼀致的错误。
2.数据透视(Facet菜单)
数据透视并不改变数据,但是可以让你获得数据集的有⽤信息。你可以把数据透视看作是多⽅⾯查看数据的⽅法,就像从不同的⾓度观察宝⽯⼀样。数据透视可以获得数据中⼀个变化后的⼦集,⽐如只显⽰某个参数要求下的⾏。
对字符串进⾏⽂本透视、对数字和⽇期进⾏数字透视、⼏个预定义的透视功能、最后还有标星和标旗功能。OpenRefine的强⼤之处也在于这些透视功能的组合使⽤。
(1)⽂本透视( Text facet):只有该列中的类别总数不是特别⼤的时候⽂本透视才有⽤,因为⽂本透视并不是为了列出所有的信息,全部列出并没有多⼤意义,同时透视结果也不会出现相同的两个类别(除⾮⼜重复项,我们将在下⼀点中说明)
(2)数字透视(Numeric facet)
⽂本透视会返回⼀个不同分类数量的列表,⽽数字透视则是某个数值范围的分布,就像我们通过频数来透视⼀样。
(3)时间轴透视(Timeline facet)
时间轴透视要求数据为⽇期格式,所以类似17/10/1890 的⽂本字符串需要改为⽇期格式(Edit cells | Common transforms | To date )。
(4)定制透视(Customized facets)
定制透视就是按照你的想法⾃如的透视数据,需要对General Refine Expression language(openrefine内建函数语⾔GREL)有基本的了解
(5)对标星和标旗⾏进⾏透视
现在假设你想显⽰要么diameter字段有内容或者weight字段有内容的⾏。如果你对这两列都做了空值透视,然后分两次点击结果是false的内容,你将得到29⾏匹配,但其实这29⾏指的是diameter字段有内容⽽且weight字段也有内容,这和我们的⽬的不符,我了按要求取到数据,解决⽅法是分两步:先对diameter列进⾏空值透视,得到2106⾏为false(也就是diameter内容存在),然后使⽤All| Edit rows| Star rows标星,清除透视并且对weight列进⾏空值透视,得到179⾏(你会注意到只有150⾏被标星,因
为29⾏已经被标星,其weight和diameter都有内容⽽已)。再次清除透视,然后选择All| Facet| Facet by star获得数据
3.重复检测
重复值是数据集中出现两次或更多次的恼⼈数据。重复数据不仅浪费存储空间,并且会导致⼲扰。所以我们希望能够删除重复值。
重复项透视(Duplicates facet)就是⼀种能够检测重复的简单办法。但是其也有限制性,⽐如其只能对字符串进⾏重复检测,最起码不能直接对⾮字符串进⾏操作
4.⽂本过滤(Text flter)
当你想寻那些匹配某个特定字符串的⾏时,最简单的⽅法是使⽤⽂本过滤功能。
简单的⽂本过滤并没有考虑到拼写⽅式
⽂本过滤的另⼀个应⽤是检测分隔符的使⽤
5.简单的单元格转换(Edit cells菜单)
(1)删除⾸尾空格(Common transforms|Trimming whitespace):对数据进⾏删除多余⾸尾空格操作是提升数据质量的很好的开始。这保证了不会因为⾸尾处的空格使得相同的值为误认为不同;删除⾸尾空格的操作只能针对字符串,⽽不能对整数操作。如果你去试试,也会发现所有整数会被删除。
(2)连续空格只保留⼀个(Common transforms|Collapse consecutive whitespace):这个操作很安全,⽽且总是对数据清洗有益的。会将整数转化成字符串。
(3)解析HTML标记(Common transforms|Unescape HTML entities):HTML代码内容就能够被正确解析。
(3)⼤⼩写转换(Common transforms |To uppercase):这些值的变化主要是因为整数被转换成了字符串(因为数字被认为没有被⼤写)。To titlecase只会将空格后的字符串⾸字母⼤写
6.删除匹配⾏
检测重复或者将冗余⾏标上旗帜标识是需要的,但还不够。某些时候,你可能需要从单纯的数据分析转到数据清洗中来。在实际情况中,这意味着那些有问题的⾏需要从数据集中删除,因为它们的存在是对数据质量的损害。
在删除⾏前,请确保你已经做过了⼀个透视或者过滤,不然你可能会误将所有数据删除。请确保OpenR
efine是以⾏rows显⽰⽽不是以记录records显⽰。
删除空值⾏⼗分简单,问题是,如果你直接删除这些⾏,那么不光重复项会被删除,那个唯⼀的值同时也会被删除。换句话说,如果某⾏出现了两次,那么删除匹配⾏就会把两条都删除⽽不是仅仅删除⼀条。不过即使你误删除了,你也可以通过项⽬历史恢复。
所以我们需要做到既去除多余重复项,同时还能够保留⼀项。我们可以这么做:对Registration Number进⾏排序,选择text和a-z选项(case sensitive不必勾选,因为该列只有⼤写),然后选择Sort| Reorder rows permanently来固定排序。最后,使⽤Registration Number | Edit cells| Blank down将多余的重复项使⽤空⽩填充
五、⾼级数据操作
1.对多值单元格进⾏处理
分割单元格内容(Edit Cells | Split multi-valued cells…):可以让我们了解所有单独的分类。把他们重新组合在⼀起(Edit cells |Join multi-valued cells…):分隔符可以随意设置。
2.⾏模式和记录模式的转换
row是指数据集中的⼀⾏。
Record包括⼀个主体中的所有⾏。第⼀⾏所有单元格⾮空,标识⼀条记录;后续⾏中相同内容为空,表⽰这些⾏⾪属于同⼀条记录
在records模式下,操作对整条记录有效,记录起码是⼀⾏以上。总结下,我们可以这么说,rows模式只是各个独⽴的⾏,⽽records模式则是⼀个整体,可以包含数⾏。
3.相似单元格聚类(clustering)
你在分割多值单元格后对分类进⾏了分析,你会发现同样的分类并不⼀定有相同的拼写。⽐如,Agricultural Equipment 和 Agricultural equipment(⼤⼩写不同),Costumes 和 Costume(单复数区别)等等。这类问题可以借助OpenRefine的clustering⾃动处理。
在实际应⽤中,最好的⽅法是尝试不同的聚类组合,每次都需要⼩⼼的确认聚类项是否真的可以合并。
4.单元格转换(Edit cells | Transform…. )
递replace参数时出错了。如果我们检查下出现错误的单元格,我们发现是有些单元格为null所导致,选择Text filter.虽然我们可以选择Facet by blank功能
value.split(", “).uniques().join(”, "):将值按照“,”分割(逗号后⾯跟⼀个空格),然后使⽤uniques函数去重,最后再把内容重新连接到⼀起5.增加源列(Add column based on this column…)
有时候你可能希望在单元格值转换的时候保留原单元格值,同时显⽰原值和转换后的值得话⼀定会更好
6.拆分列(Split into several columns….)
分割列⽐分割多值单元格功能更加强⼤,因为其有很多配置选项。你甚⾄可以使⽤正则表达式来定义分隔符,这样我们可以做到不同的内容应⽤不同的分隔符
7.⾏列转换(Transpose | Transpose cells across columns into rows…)
左侧From Column栏中选择需要转换的开始列,To Column 栏选择停⽌转换的列,这两列中间的所有列就是需要转换的列。
注意,这⾥OpenRefine需要设置成records模式以保证信息关联。所以,如过某⾏有不同的量度信息,那么转换后它们会占据多⾏。
我们还可以通过执⾏Transpose |Columnize by key/value columns…来实现反向转换。但是,这个操作对于空单元格⼗分敏感,所以必须⼩⼼。
六、正则表达式和GREL
regular expressions(正则表达式) 和 GREL. Regular expressions 是在处理⼤量数据时⽤来匹配和替换⽂本的有效⼯具。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论