芝加哥为解决警察渎职官司在两年中花费了纳税人多少钱?答案是5300万美元。本着对公共资金负责的目的,《芝加哥记者报》在2016年发表了题为《为渎职买单》的系列报道。他们的团队整理了数百份法院文件信息,调查每笔钱到底是怎么花的,花在了哪位警员身上。不仅如此,为了方便公众获得相关信息,他们与非营利新闻机构INN(Institute for Nonprofit News)合作,建立了一个网页应用程序来呈现数据。在这个过程中,他们积累了更有效处理大量信息的经验。以下,深度网为你编译《芝加哥记者报》数据编辑与INN设计主管的分享。
研究
这个想法源于2012年的一份调查,该调查着眼于芝加哥警察卷入的多起官司。我们认为,通过公布警方接收的投诉、达成庭外和解的案子数量以及被告情况,可以帮助公众监督警察和民选官员,让他们对警方渎职行为负责。
对于《芝加哥记者报》而言,这是一个很合适的项目,毕竟自1972年起,这份报纸就采用数据驱动的方式,调查芝加哥的种族和贫穷问题。我们怀疑警方渎职情况在黑人或拉丁裔为多数的社区中尤其突出,后来通过数据证实了这一猜测。
在研究的早期阶段,我们发现查找案件并非难事。通过芝加哥法律部门发布的案件裁决和庭外和解所涉及的赔款清单,我们找到了2012至2015年间关于警察渎职的官司,最后筛选出655件官司,可以用来查找投诉信和其他文件。
我们专门雇佣了三名研究员来通读每一宗官司的材料,再将关键信息按照以下四个类别制成表格:案件、警察、受害者、款项。
这个项目展示了数据库规范化的好处。由于每起诉讼可以有多个被告,涉及多名官员和数笔款项,我们将各类数据划分在不同的表格中,并建立链接,来避免录入冗余信息。这个方法不仅为我们省下来大量时间,而且保证了一致性和准确性。
最后,我们得找出投诉所提及的具体警官姓名,从而查找到他们涉及的案件和相关赔款。这一步很棘手,因为法律投诉中的姓名常常要么不完整,要么拼错,并且不一定会有警察编号。
《芝加哥记者报》本来可以利用信息杂乱的被告人名单获得一份规范化的警员名单,如果你曾经使用过数据清洗工具,比如说OpenRefine的话,就知道该如何操作。但是因为以下种种原因我们并未这么做:我们需要切断姓、名、中间名或其组合;警察在其职业生涯中可能有许多个编号;我们想要把服役日期也纳入考察。
所以我们采取了另外一种方法:《芝加哥记者报》根据《美国资讯自由法案》向芝加哥警察局索取了几十年来完整的警员名单。我们将数据上传到“Django对象关系行数据映射组件(object-relational mapper)”中,并编写算法,根据被告的姓名、编号以及服役日期等信息匹配涉案警员。如果算法可以高度确定性地锁定被告人,那么它就为记录警察信息的表格建立起外键关系。
我们能够自动完成85%的匹配,并建立起一个简洁的网页让人们去了解余下的信息。我们没有更改任何源数据,并仔细审核每一次数据库更新,这样我们就可以返回并手动验证我们建立的每个关系。
我们把这一份警察匹配表上传到了GitHub网站上,以便其他记者或者研究员查看。
开发过程
当《芝加哥记者报》的团队在努力将警察与具体官司相匹配、最终确定数据库的结构时,非营利新闻研究所(INN)的技术团队则忙于构建一个独立的新闻应用程序,将数据公开。
我们开发的应用程序有两个部分。一部分是介绍性的叙述页面,展示记者拍摄的照片和调查的主要发现;另一部分则是应用程序的主要功能,允许用户过滤655条诉讼,搜索个别警察的名字或编号。
最初,我们将注意力放在更加复杂的独立应用软件上,而且我们在设计的时候还设立了几个目标。我们希望:
1.显示市财政为处理警察渎职案件所支付的费用。
2.使用户能够简单地识别涉案人员,以及每宗案件的指控罪名。
3.允许人们轻松地运用这项程序,并分享信息。
4.确保更新数据的过程简单直接。
我们与记者报团队合作完成线框图,在进行视觉设计期间,我们开始为应用程序开发自己的JSON模式和后端进程。
我们使用Tarbell(《芝加哥论坛报》静态网站生成器)进行快速启动及运行。通过利用简单的谷歌表格整合功能,Tarbell提供了简易的内容管理系统,并且有一个内置的发布工作流程,将准备好的文件上传到Amazon S3(“亚马逊简易储存服务”)。我们决定用Backbone作为前端的数据绑定框架。
在开发过程中还要解决一些有趣的技术问题。第一个是,我们希望用户能够通过社区位置而不是特定地址过滤诉讼案件,以便他们识别在住址或工作地点附近发生的警察渎职事件。现有数据没有一个“社区”字段,因此项目的主要开发人员Ryan Nagle根据《芝加哥先驱报》的Django边界服务编写了一个自定义脚本,将个人地址与芝加哥市地理信息系统中的社区和区域相匹配。
另一个具有挑战性的部分是具有Mad-Lib风格搜索的结果区域(译注:Mad-Libs是一种计算机算法,其方法是在预先设计好的句子架构中填入名词、动词等来产生有意义的内容),它需要一个复杂的Underscore.js模板,以确保每个搜索选择组合的语法和标点符号都是正确的。
我们开始通过写句子来开发这个功能。第一步是造一个基本句子,使其能描述每个可能结果:
Example: “A case resulted from an incident.”
下一步是往这个句子中添加一个用户可以选择的所有可能字段:邻域、主因、赔款金额和一些标签。
使用上面的范句,并使字段保持它们在用户界面(UI)的顺序,我们得到的第一个完整句子是:
“One case in South Deering resulted from an incident of excessive force that cost Chicago $0-$3000 and was tagged traffic stop and false report.”
(译:“发生在South Deering(译注:芝加哥市最大社区)的一个案件涉及执法暴力,芝加哥政府为此花了0到3000美元。案件被标记为交通中断和虚假报道。”)
这样的句子不清楚,难以理解,且不够灵活。我们需要重新排列字段,以便利用标签和开支金额来描述案例,用主要原因和所涉社区来描述事件。我们还必须考虑不同数量的结果,并相应地调整措辞。在我们对完整句子结构的灵活性感到满意后,我们开始一次删除一个选项,并调整模板中的逻辑,使句子格式说得通。
当然会有一个更加程序化的方法来处理这个问题,但在上述事例中,我们主要依靠人工测试来确保句子结构在尽可能多的案例中都适用。
发布
2016年6月,《芝加哥记者报》发表了《为渎职买单》的完整系列报道,同时我们仍在继续收集芝加哥警察渎职行为的数据。我们希望这个应用程序可以成为芝加哥民众、记者、项目支持者乃至所有对治安管理问题感兴趣人群的一个重要信源。
编译/梁晨昱
编辑/Ivan Zhai,梁思然
相关阅读:
本文首刊于Source网站,深度网获授权转载。
Matt Kiefer是《芝加哥记者报》(The Chicago Reporter)的数据编辑,该非营利性报纸“自1972起调查种族和贫穷议题”。他之前是Better Government Association的《美国资讯自由法》研究员。该机构同样位于芝加哥,在使用调查技术问责领域表现突出。
Julia Smith是非营利新闻机构INN(Institute for Nonprofit News)的设计主管。她负责为本机构的成员组织制定采编项目,并帮助新闻网站搭建与维护开源博客WordPress框架下的Largo系统。在此之前,她曾获2015年Knight-Mozilla研究基金,在调查性报道中心(Center for Investigative Reporting)任研究员。