脏数据,那里逃

“多亏美国有着总体来说完善的公共档案法规,得到数据并不像在某些国家一样是个很大的问题。但是我们得到这些数据后,仍然面临着处理数据的一些麻烦,这些麻烦并非分析技巧上的,而是官僚系统带来的。这些数据往往是‘脏’的,大部分都是不标准的。有几次我得到的数据和它应该有的数据格式并不相符,也没有数据字典可供参考。有些机构仍然坚持发布尴尬的类似PDF格式的数据,还需要重新转换格式。这些问题让你在偶尔得到一些干净整洁的数据时会十分欣喜。”
——史蒂夫·多伊格(Steve Doig) ,沃尔特·克朗凯特新闻和大众传播学院,亚利桑那州立大学
在调查采访时,我们希望适当地运用提问技巧和方法,得到访问对象提供的正确信息。在数据新闻制作过程中,我们要诠释数据,通过数据分析得到结论。数据正确与否对结论起着决定性的作用。
在制作数据新闻时,一个非常重要但常常被遗忘的步骤就是清理原始数据。当我们通过多种方式和渠道获取数据时,这些数据往往是不能直接分析和使用的,需要进行预处理,即清理数据。因为原始数据存在各种各样的问题,如篡改数据、数据不完整、数据不一致、数据重复、数据存在错误、异常数据等,这些情况我们通称为存在“脏数据”。“脏数据”的存在不仅浪费时间,而且可能导致最终分析有误。
“脏数据”的成因
篡改数据。 这是“脏数据”中最糟糕的一种形式,因为篡改数据是非常难以发现的。有些时候为了一些特定的利益,人们甚至会主动弄“脏”数据。例如,淘宝网卖家的相关数据,“刷信用”和“刷钻”等,导致淘宝网后台统计的是卖家篡改后的数据。
数据不完整。 有些时候,数据的获取是比较困难的,如获取某个山区的PM2.5值,可能由于没有相关设备而导致该山区的数据缺失。我们期望数据符合完整性(Data Integrity)要求,即数据符合精确性(Accuracy)和可靠性(Reliability) 。数据完整性包括实体完整性(Entity Integrity) 、域完整性 (Domain Integrity) 、参照完整性 (Referential Integrity) 和用户自定义完整性 (User-defined Integrity) 。实体完整性是指一个关系中所有主属性 (主码属性或标识性属性)不能取空值, 即不能存在 “空值”。域完整性是保证表中不能输入无效的值,如年龄是90.5,这不符合常识(一般年龄是整数) 。参照完整性一般应用于两个或两个以上的表,当在一个表中更新、删除或插入数据时,通过参照引用相互关联的另一个表中的数据,来检查对表的数据操作是否正确。用户自定义完整性是针对用户自定义的约束条件,如学生成绩范围是[0,100],若存在某位学生的成绩是120的情况,则不符合用户自定义完整性。
数据不一致。 数据的获取可能来自于不同的渠道,从而出现两份数据不一致的问题。如2013年12月2日,广州市政协委员韩志鹏分别向广东省卫计委、省财政厅和省审计厅快递了《关于公开广东省2012年度社会抚养费收支及审计情况的申请》。12月4日,广东省卫计委公布,2012年度广东省社会抚养费征收总金额是14.56亿元。12月25日,广东省财政厅答复,2012年广东各地征收社会抚养费总额是26.13亿元。不同部门的审计结果相差了11.57亿元1。数据的不一致也可能是由于重复存放的数据未能进行一致性地更新造成的。如各地最低工资标准在不同年代是不同的,如果来自不同渠道的数据存在重复且不一致的情况,可能是数据来源时间不同,也有可能是某个部门的数据调整而另一个部门没有及时更新导致的,如教师工资的调整,可能人事处的数据已经更新,而财务处的数据没有更新,就会产生矛盾的数据。
数据重复。 由于数据来源的问题,可能存在一个数据记录两次的情况。 要删除冗余的备份数据,确保同样的数据信息只被保存一次。数据存在错误。 这是“脏数据”中最糟糕的一种形式,主要是人为原因错误记录了信息,如工资是6500.00元,误记为5600.00元。2006年美国国会选举期间,政府工作志愿者通过电话让已登记的选民来投票的过程中发现,有已经去世的选民依旧存在于登记表中,这也是数据存在错误的一种表现。
异常数据。 异常数据是指某个数据与其他数据相比特别大或特别小,如获取的数据中教师的月薪大部分是几千元左右,若有某位教师的工资是100万元,则可以认为这是异常数据,可能这个异常数据是正确的,但对分析整体数据而言意义不大。
“脏数据”的表现形式
拼写问题。 数据来源复杂,我们获得的数据可能存在数据格式不对的情况。如“性别”字段,可能包含各种各样的数值信息,如“男性”、“女性”、“男”、“女”、“1”、“0”、“男人”、“女人”、“F”、“M”、“Female”和“Male”等,甚至可能存在“男姓”或“Femal”这样的错误拼写。再如,职业字段中可以使用“Lawyer”、“Attorney”、“Atty”、“Counsel”或“Trial Lawyer”表示律师。类似的同一个名字可能有不同的拼写方式, 如我国经常使用“中国”、“中华人民共和国”、“China”、“china”、“the People's Republic of China”或“PRC”等表示。这类问题的解决方法是统一成一种数值表示,如统一用“男”、“女”、“Lawyer”和“中国”表示。如果数据预处理时没有发现这类问题,在统计时带来的后果是计数错误。
数据格式问题。 如“200”、“200.00”、“$200”、“20billion”、“20million”、“USD200”和“¥200”均表示金额,但是数据分析时有些数据是不合格的,如“20billion”、“20million”和“USD200”可能被计算机理解为字符而非数字。“$200”和“¥200”单位不同,一个是美金,另一个是人民币,应统一格式。“200”和“200.00”的精确度不一致,前者是整数,后者有两位小数,应统一精度。
数据清理/分析工具
“脏数据”的成因和表现形式多种多样,我们必须要先清理“脏数据”,再做数据分析。数据清理(data cleaning) ,也称数据清洗,是指发现并纠正数据中的错误,要按照一定的规则“洗掉”存在的“脏数据”,包括检查数据一致性、处理无效值和缺失值、修改拼写问题和统一数据格式等。数据清理是一个反复的过程,不可能在短时间内完成,在一个数据新闻项目里,通常一半以上的时间都会被用在清理数据上,好数据是好新闻的基础。清理“脏数据”的方式主要分为两种,一是手动清理,二是借助工具清理。前者适用于数据量较小的情况,后者适用于数据量较大的情况。合理选择数据清理和分析工具可以快速地修改或删除“脏数据”,多个工具的共同使用能发挥每个工具的优势,更好地节省时间。常见的数据清理及分析工具如下。
1.Excel
Excel功能较强,简单易学。内嵌的各种函数帮助用户快速清除并修改数据,而且可以使用筛选、排序、分类汇总、数据透视表和图表等工具快速查看数据规律。Excel还支持VBA编程,可以编写代码实现复杂的数据运算和清理工作。
2.OpenRefine
OpenRefine(以前的名称为Google Refine)是一个免费、开源的数据清理工具,是谷歌公司专门为数据新闻工作者而开发的。它专注于清理杂乱数据,即使数据不太结构化也可以轻松快速探索大型数据集。OpenRefine可以清理掉不必要的HTML代码、移除多余的符号和空格、连接多组数据和大小写转换等,并且可以输出为多种格式(如CSV和XLS等) 。OpenRefine界面与Excel类似,但工作方式更接近于数据库,这意味着它的功能比Excel更强大。作为一个强大的数据处理和分析工具,OpenRefine易学易用,而且数据可以保留在本地计算机上,这是敏感数据的福音。
3.R语言
R是用于数据处理和绘图的语言。它是属于GNU1计划的一个自由、免费而且源代码开放的软件。它优秀的统计制图功能,以及可操纵数据的输入和输出、分支、循环和用户可自定义功能使其逐渐被应用到数据新闻中, 比如《纽约时报》的“512条通往白宫的路”, 就是利用统计里的决策树模型。
4.Data Wrangler
Data Wrangler(网址http://vis.stanford.edu/wrangler/)是由斯坦福大学开发的一个在线的数据清理和转换工具,可以减少用户格式化数据的时间。Data Wrangler免费而且简单易学,但它是基于网络的服务,数据必须上传到外部网站,不适合清理敏感数据。
5.Python
Python是数据获取、数据清理和数据挖掘时经常使用的语言。Python是免费的,而且以语法简捷著称,代码易读而且可扩展性强,数据挖掘包多且安装方便,常见库包括Python标准库、Numpy与Scipy、Matplotlib和Scikit Learn等。如果使用数据收集工具无法获得需要的数据,则许多记者使用Python编写爬虫程序获取数据。
(本文节选自《数据新闻实战》)