「Noah Veltman的午餐会」避免数据清理时的失误

分享给朋友:

在BBC工作期间,Noah Veltman 为编辑人员和设计师们组织了一系列午餐小会。这些小型讲座的内容不是关于如何写代码或者完成某个具体项目,而是让这些非工程人员了解在新闻实践中经常会遇到的技术话题,让技术问题不再那么高深莫测。当非工程人员对基础的技术有所了解后,“这个项目要花多长时间?”、“我们如何做出这样的东西?”、“我们要如何妥协才能在技术上实现它?”如此这般的问题就会被有效率的双向对话所替代。

出于这样的目标,这个系列中将不太涉及真正的写代码的教学。但对那些想好好钻研开发的人来说,这个系列将提供非常值得尝试的努力方向。这些都是真实发生在午餐会上的讨论,所以也许变成文字后少了一些临场感,但无论是对于程序员、记者还是设计师来说,这些都仍然是很有帮助的、值得学习的材料。

Noah Veltman现任纽约WNYC电台数据新闻团队的开发人员,擅长交互图表、地图和基于数据的新闻应用开发。此前他曾获得Knight-Mozilla开放新闻奖学金并在伦敦BBC NEWS工作。数据新闻网将陆续推出Noah Veltman午餐会的其他资源。

【Noah Veltman的午餐会】系列由数据新闻网独家授权编译,更多该系列文章:
【Noah Veltman的午餐会】Excel vs. Database
【Noah Veltman的午餐会】制作在线地图
【Noah Veltman的午餐会】网页抓取

 

做数据新闻项目中,一个非常重要但常常被遗忘的步骤就是清理原始数据。当你拿到刚出锅的数据(或者你觉得勉强接受的数据),数据常常还不能用。这些数据里盘根错节了很多不连贯的内容而且不会体现你想要分析的数据关系。你还没办法弄清数据里的参数。在你把它变得有趣之前,你得拆分这些数据,然后再把数据还原。

过程很危险。错的姿势很多,你摆了可能都没意识到。如果你在数据清理过程中搞砸了你的数据,浪费许多时间都还算好的,常常最坏的场景是你的最终分析会有误,因为你没有意识到你改变了数据本身。

下面是一些你在开始清理数据和重建原始数据时需要考量的准则。

不要改动原文件

要是你有一个需要清理的的大型Execl文件或者MySQL表格,别一脚踏进去开始大海捞针。保存个备份然后在备份文件上动手脚。这样你就算要重来也简单一些,而且更重要的是你可以比较在不同阶段清理、变动的数据来保证数据和你之前的清理步骤对应,而且和刚开始的数据对应。

由此可见,别在你以为不需要的情况下删除数据。脑袋灵光一点。把东西存好了,标记清楚,这样你就不会混淆文件。

抽查每个角落

一旦数据包够大,你又没办法一行一行看(其实几乎每个数据包都不能一行行去看),你就得抽查数据。所有关于数据本质和连贯性的假设都只是揣测,而且这些假设有可能是错的。SELECT * FROMTABLE(表格)ORDER BY RAND() LIMIT 5是我最常用的结构性查询语言的用句之一(对于不用非结构性查询语言的人来说就是:“show me 5 random rows from the table” 随机抽查5行数据)。百试不爽。一次好好仔细抽查一些随机的记录。看看有没有什么不对劲。抽查要尽早而且尽量频繁,才能避免低级错误。这样还有大好处:你会更加深入了解你的数据。

检查奇怪的函数

注意空值,特别是那些看上去是空值的函数。政府机构的Excel文件在奇形怪状的占位符上绝不乏创造力,而且你会拿到用- or * or ~去填补空格的数据。另外,注意那些特别长的函数。如果你的数据中绝大多数街名大概占了75个字符数,有一个占450字符,证明有奇怪的东西混进来了。

每一个分类栏,检查在数据里的函数表。保证该出现的在,不该出现的不在。 GROUP BY (或者它的孪生 SELECT DISTINCT)应该常常放在手边。对于每一个数据栏,至少合理性检查一下极值。看看每一组特别的数据的范围(比如说邮编)。别臆想所有的数据都会以同一个格式被储存,就算是日期。当你在GROUPing(分组)内容时,用COUNT() 看看每个类别里有多少项。弄清楚是不是所有的数字都能通过你基本直觉检测。如果没通过,你可能弄砸了,但是如果运气好,这也可能就是新闻故事存在的地方。但是不论怎样,你都会想去弄清楚。

文字数据最扯。要注意空格,大小写,以及在文字栏里的字符排列。有些莫名其妙的空格会阻止你进行分组或者数据比较。你知道”Paris”和”Paris “是一个东西,但是你的数据库不知道。在该用TRIM()的地方TRIM()。且谨记Veltman字符集法则。

Veltman的字符集法则:一颗老鼠屎“é”,只有坏了一锅粥后你才找到它。

对栏类别要上心

不论你是在用Excel还是关系型数据库,或是其他软件,确保你栏的类别正确,所有的数据都和类别对应。否则,当你导入了数据后你的数据(candy cane integers?)会被挤进一个精心打造的模子,xxxx 都会在你毫无意识的情况下变成雪花状文字。这点尤其重要,特别是当你要导出数据,用以支撑更加炫酷的应用,你的数据又要经历多功能榨干机一次。

随堂测验:不论什么开发语言,以下哪些操作被视为false。

0, “0”, 0.0, “0.0”, [], {}, [{}], null, undefined

答案:别让这问题出现

在改动以前测试一下

你要用一串很复杂的 UPDATE 代码改动5万条数据吗?试着先更新几条然后测试一下结果。保证你集成五条内嵌的 REPLACE() 句和一条不可理喻的 WHERE 句的聪明才智能药到病除。或者也许你照着自己写的漂亮模板自动生成一千条数据库查询。别忙着执行,先测试一下看看结果。自由SELECT(选择),保守INSERT(插入)和UPDATE(更新)。

简单优于耍小聪明

写全世界最漂亮的JOIN和最“有内涵”的公式是有代价的,所以还是算了吧。如果你只是想把一些数据整成型的记者,多做些重复没关系。你没有和大数据(Big Data)打交道。电脑处理便宜,储存也不贵,但是你的时间很珍贵。耍小聪明会让你的内容更难被你自己或他人理解,而且你更可能做更多傻事。耍小聪明的失误来得阴(说的就是你,正则表达式)。保持操作的简便,逐步递进。把复杂的操作简单拆分。它创造一个更好的串联,这样的话就算所有的结果都混乱了(放心绝对会),你至少还能知道为什么。

保留记录

在这个列表里所有的建议中,这是我最难坚持的一项。别像我一样。保留你所有针对数据操作的纪录。可以是笔记本,或者聪明的自动查询记录器,或者文件版本控制,都行。知道你自己对数据做了些什么对于解决难题和撤销错误步骤抖很重要,对于高质量新闻更是必须。

 

本文译者: 平可

作者简介

平可

卡迪夫大学国际新闻硕士,全职数字营销,追求的是关上浏览器还能读读写写没完没了。