在围绕美国总统是否是在外国干预的帮助下非法当选的问题上进行了四年令人难以置信的敌意讨论之后,2020年总统选举陷入类似的非法性指控也就不足为奇了。这一次,那些指责舞弊行为的人没有将选举结果归咎于俄罗斯人:他们把1982年总统大选后芝加哥63人被关进监狱的那种老式选举舞弊归咎于俄罗斯人。还有2018年北卡罗来纳州第九国会选区的舞弊事件,这起舞弊事件导致选举结果被抛诸脑后。
但已证实的选举舞弊案件比模糊的指控要罕见得多。自选举以来,社交媒体上流传着大量关于选举舞弊的含糊指控。就像社交媒体上大多数出于政治动机的言论一样,这些言论得到了广泛的信号支持,并没有太多尝试来证明它们是否属实。我看到了很多这样的东西,其中一些实际上附带了数据来源。作为一家数据共享初创公司的软件工程师,我产生了好奇。我决定深入研究一个具体的说法,亲自看看是否有任何真实性。
发表日更新:今天早上,我看到了另一份关于宾夕法尼亚州Smail-in选票的声明,并对其进行了核实。与第一个说法不同的是,这一说法得到了宾夕法尼亚州国务院提供的数据的证实。请跳至此更新。
周五晚上,我看到这条(后来被删除的)推文被分享,已经收到了数百条转发和点赞。
这位人士声称,他分析了宾夕法尼亚州国务院公布的邮寄选票的数据,发现该州85岁以上的人有100多万人退回邮寄选票。由于宾夕法尼亚州只有大约23万这样的老人,这听起来当然很可疑!所以,让我们来弄清这件事的真相吧。我以CSV文件的形式下载了PA的选票数据,然后开始工作。
Dot是数据的Git。它是一个SQL数据库,你可以分支、合并、克隆、分叉、推送和拉取,就像Git中的文件一样。它还带有一个内置的SQL引擎,可以对存储在其中的数据运行查询。我想要编写的查询非常简单:
但是要编写该查询,我必须首先导入数据。任何处理过数据的人都知道,这比应有的要难得多。
首先,我必须给数据一个主键,这是Dolt目前需要的(尽管我们正在努力解决这个问题)。要做到这一点,最简单的方法是使用快速而肮脏的Perl脚本:
脚本只是将一个递增的整数ID放在它所给出的CSV文件中每一行的前排。我是这样运行的:
这为我提供了一个Dolt可以导入的模式。为了自动创建它,我尝试使用DORT SCHEMA IMPORT命令自动预测它,这将省去我大量的输入。不幸的是,它认为所有日期列实际上都只是字符串。
%dot架构导入-c--pks=";id";PA 2020_pa.csvCREATE表`pa`(`County_name`长文本非空,`Applicant_Party_Designation`长文本非空,`Date_of_Birth`长文本非空,`Mail_Application_Type`长文本非空,`Application_Approval_Date`长文本非空,`Application_Return_Date`长文本非空,`Ballot_Mailed_Date`长文本非空,`Ballot_Return_Date`长文本非空,`State_。主键(`id`)引擎=InnoDB默认字符集=utf8mb4;
这是因为宾夕法尼亚州国务院提供的所有日期都是按照世界上许多软件都拒绝使用的独特的美国风格格式化的:MM/DD/YYYY。
(请注意,尽管美国在这一决定中很疯狂,但不知何故,加拿大却设法变得更糟。)。
因此,我不得不手动修改该模式来更改类型,并更改这些列的可空性。没什么大不了的。当然,由于同样的原因,导入数据也失败了。
已处理%DORT TABLE IMPORT-u pa 2020_pa.csvRows:0,添加:0,修改:0,无效:0移动数据时遇到错误行。错误行:County_name:";ADAMS";|申请者_Party_Designation:";R";|Date_of_Birth:";08/31/2000";|Mail_Application_Type:";OLREGV";|应用程序。2020年9月26日";|申请返回日期:";2020年9月26日";|选票邮寄日期:";10/03/2020";|选票返回日期:无|州议会选区:";第91个立法选区";|州参议院选区:";第33个参议院选区";|国会选区:";第13国会选区";价值&。09/26/2020&34;不能将时间转换为时间。可以使用';--Continue';忽略这些时间。
但是,作为开源项目的一名软件工程师,你正在尝试使用它有它的好处:我知道在哪里修改代码,以使数据处理逻辑更具容错性。我还提交了一个问题来解决所有人的问题。
%DORT TABLE IMPORT-u pa 2020_pa.csvRows Processing:3098705,Additions:3098705,Modiments:0,Not Effect:0导入已成功完成。
PA_选民&>SELECT COUNT(*)FROM PA Where Date_of_Birth<;';1935-11-05';AND_ROUTE_RETURNED_DATE不为空;+-+|COUNT(*)|+-++126766|+-+。
事实证明:在宾夕法尼亚州,有100万名极年长的人没有退回邮寄的选票。大约有12.6万人这样做了。这是这个年龄段大约50%的投票率,完全有可能(而且实际上今年的投票率有点低)。
那是怎么回事呢?很容易就能解释为什么这么多人从表面上接受了这个疯狂的说法。但是宣传它的人呢?他们只是在撒谎吗?
我不这么认为。这条推文后来被删除了,这样我就可以在推特上展示它了,但这张帖子似乎很真诚地表达了他的分析。他只是弄错了。据我所知,他弄错的一个重要原因是他使用Excel导入和分析了一个446MB、300万行的CSV文件。
Excel是一款令人惊叹的软件,它负责的业务和数据分析工作量高得令人难以置信。但它已经以一种非常随意、有时不情愿的方式成长为这些角色。当你向它抛出特定类型或大小的数据时,比如300万行的半GB文本,它并不总是能正常工作。
或者,也许我不知道我在说什么,它确实工作正常!也许那家伙只是按出生日期对电子表格进行了排序,它工作得很好,而且他读错了行号。但我的观点是,这实际上无关紧要。问题是,我们永远不能知道,因为他所做的分析是不可复制或不可分享的。它永远迷失在时间里,就像雨中的泪水。
我们创建Dolt是因为我们认为我们在互联网上分享数据的方式已经被打破了。1975年,我们一直在邮寄CSV文件的压缩文件,就像它一样。一旦你得到了这些文件中的一个,你的大部分工作仍然在你面前。一般来说,以可用形式导入重要的CSV数据并非易事。行业研究表明,专业数据科学家花了近80%的时间来查找和清理数据集。取消这项繁琐的工作,每个数据科学家的效率在一夜之间就会提高五倍。
想象一下,宾夕法尼亚州国务院的数据已经以Dolt格式分发。数据不仅是未压缩的CSV文件大小的1/3,而且是以完全可用的形式到达的:没有导入过程,没有尝试计算列的类型,它们是否可为空等。您只需运行一条命令:
..。您已经拥有了所有数据,可以立即开始查询。如果将来数据有更新,您只需多一个命令即可获得最新版本。
如果我是一名初露头角的业余选举舞弊分析师,有一条热门独家新闻想要与我的4chan Pepe伙伴分享,我可以将我的分析保存为一个查询,然后与数据库一起发送。
%dolt SQL-Q#34;SELECT COUNT(*)FROM PA Where Date_of_Birth<;';and Blot_Returned_Date不为空;";\-s";PA选民超过85";+-+|count(*)|+-+|126766|+-+。
现在,当我的选举侦探同伴调出数据库时,他们可以用一条命令来验证或扩展我的工作:
%dot SQL-x;PA投票人超过85";执行保存的查询;PA投票人超过85';SELECT COUNT(*)FROM PA WHERE Where_Date_of_Birth<;';1935-11-05';AND Vote_Returned_Date不为空;+-+|COUNT(*)|+-+|126766|+-+。
当然,如果他们懒得下载数据,他们可以自己在DoltHub上查看和查询数据。
与之前的说法不同的是,这一次似乎有一些新的东西。据报道,宾夕法尼亚州大约有2.3万张选票在邮寄给选民之前已经退回:
还有更多的人在同一天或一天后返回,就像推特上的帖子所说的那样。这是一个衡量投票效率的查询,统计每天邮寄给选民的选票数量。也就是说:邮寄后1天、邮寄2天后退回了多少张选票,等等。我们可以在推特上看到同样的模式。
PA_SELECTS&>SELECT(unix_Timestamp(Blot_Returned_Date)-unix_Timestamp(Bal_Mailed_Date))/86400作为天数,COUNT(*)FROM PA WHERE BOT_RETURN_DATE不为NULL GROUP BY 1 ORDER BY 1;+-+|天数|COUNT(*)|+-+-+|<;NULL&。|9005|-125|1||-23|1||-21|4||-20|1||-19|2||-18|9||-17|22||-16|16||-15|3||-14|48||-13|28||-12|35||-11|65||-10|166||-9|11||-8|25||-7。|374|-6|1432||-5|2349||-4|2747||-3|3833||-2|7329||-1|4804||0|34916||1|51200||2|43284||3|43866||4|40690||5|47332||6|63524||7|111638||8|119774||9|155236||10|128564|11|112363|12|108864。|15|83533||16|104865||17|112519||18|79459||19|80475||20|71984||21|72383|。。。<;剪辑>;。。。|197|2||208|1||249|1|+-+-+。
对于数据中的这种模式,有可能有一个完全良性的解释。但与之前的说法不同的是,这一说法得到了官方数据的证实,不能立即驳回。
无论如何,我已经使用这两个新的分析查询更新了DoltHubrepository,您可以下载数据库来自己运行它们。
在当今支离破碎的信息格局中,能够迅速分享有关有争议主张的数据比以往任何时候都更加重要。我们今天做这件事的工具是糟糕透顶的。它们速度慢,难以使用,很容易搞砸,很难复制,而且很难分享和协作。我们创建Dolt是因为我们认为有可能有更好的方式来共享数据。我们认为多尔特就是答案。试一试,看你是否同意。
要自己运行这篇博客文章中的示例查询,您可以在此处克隆DoltHub中的数据集。
如果您还没有准备好下载该工具,或者只是想提出问题,请在不一致上与我们聊天。我们总是很高兴听到新客户的来信!