上一篇:《Using OpenRefine》翻译~3
要点5:使用项目操作历史
本点中,你将学习到如何返回到任一个项目历史操作点,并且学习如何在项目重新打开后查看历史操作信息。
OpenRefine一个特别有用的功能是可以在项目创建后保存所有的操作步骤。这也就意味着你不需要害怕做数据变换尝试:你可以随意按照自己的想法变换数据,因为一旦你发觉做错了(即使是几个月前做的),你也可以撤销该操作以恢复数据。
为了使用项目操作历史功能,请单击左侧顶部Facet / Filter 旁边的Undo / Redo 标签页,如下图所示:
为了恢复历史数据,单击你想保留的最近一个步骤操作。比如,为了取消上图第3步及以后的操作,可以单击第2步使其高亮显示,这样第3~5步就会变灰。这意味着选中项后的操作都将取消。如果点击第0步,那么所有操作都将取消。点击第4步,那么第3和第4步的操作将被执行,而第5步将撤销。
请注意,撤销某几步操作后再做出新的操作的话,原来的后续操作内容会丢失.比如,如果你从第5步回退到第2步,然后对Description 列执行左移操作,那么会显示第3步操作3. Move column description to position 1 ,而先前的灰色操作项(第3-5步)会丢失:因为我们不能在同时拥有两种互相矛盾的操作历史记录。记得多尝试下上面的步骤,省的以后带来严重的困扰。
记住,只有对数据有实际影响的操作才会出现在项目历史操作表中。数据透视比如:交换行列视角、在一页中改变显示数目、隐藏或展开列并不改变原来数据,所以也就不会出现在操作历史表中。以上操作也就无法随着项目信息传递:当你重新打开一个项目,无论原来是否隐藏,这时所有的列默认都是展开的,但是对于重命名列和删除列这类操作会出现在操作历史表中。在第二章,分析和修改数据中,我们会看到还有一些类型的操作会存在在操作历史表中:比如单元格和列的变换、但是过滤和透视操作则不会。
操作历史也可以以JSON格式导出,可以点击Undo / Redo页中的Extract...
,在打开界面中可以选择需要导出的步骤(注意只有通用的操作才能够导出,而对某个特定单元格的操作则无法导出)。上述操作能够获得JSON格式代码从而可以让你复制粘帖到他处。第1和第2步操作的代码如下:
[
{
"op": "core/column-move",
"description": "Move column Registration Number to position
1",
"columnName": "Registration Number",
"index": 1
},
{
"op": "core/column-rename",
"description": "Rename column Description. to Description",
"oldColumnName": "Description.",
"newColumnName": "Description"
}
]
在上面代码中,op代表操作,description描述了具体操作是什么,余下的是操作用到的参数。我们可以点击Undo / Redo页中的Apply...按钮,然后将先前保存的JSON格式的操作代码粘帖上去,从而可以在不同的项目之间传递操作。最后,如果你已经有成百上千个操作记录,你可以在Filter输入框中输入字符来查找某个操作。比如输入remove或者rem就能够定位到第3步和第5步。
要点6:导出项目
本点中,我们将学习如何将修改后的数据用到其他项目中,包括将导出的格式定制为模板。
虽然你可能已经移动、重命名或者删除了列,但其实原始数据并没有被修改(也就是要点1:安装OpenRefine中的文件chapter1.tsv并没有被修改)。事实上,不像有些电子表格软件直接将改动写进文件,OpenRefine只是对数据文件的一份拷贝进行操作。因为存在这个保险措施,所以你在需要将数据导出分享或者嵌入其他应用程序时,你只需要在界面右上角点击Export按钮进行操作:
大部分弹出的选项能够让你将数据导出为常用格式,比如csv、tsv、excel和open document格式、还有不常用的RDF格式。让我们往下看:
• Export project: 这个选项能让你导出OpenRefine格式的压缩包,你可以用来和其他人共享或者仅仅用来备份。
• HTML table: 这个选项可以让你方便的将文件发布到互联网。
• Triple loader 和MQLWrite: 这个选项有一些扩展功能,能够让你将数据转换成支持Freeebase规则的样式(参照附录:正则表达式和GREL)
• Custom tabular exporter and templating:可能这是最吸引你的部分。OpenRefine可以让你对你的数据导出有更精细的控制,比如对列进行选择和排序、忽略空白行、正确选择日期格式以得到更有效的数据(参见附录:正则表达式和GREL)。如下图所示:
• Templating...为了获得更多的控制,你可以使用你自己的代码来限定格式,其会作用到所有的单元格。如代码cells["Record ID"].value表示Record ID列的值,下面的代码表示将列值转换成JSON格式:
{
"Record ID" : {{jsonize(cells["Record ID"].value)}},
"Object Title" : {{jsonize(cells["Object
Title"].value)}},
"Registration Number" : {{jsonize(cells["Registration
Number"].value)}},
"Description. " : {{jsonize
(cells["Description. "].value)}},
"Marks" : {{jsonize(cells["Marks"].value)}},
"Production Date" : {{jsonize(cells["Production
Date"].value)}},
}