apolinario/urnas-tardias

数据

一个一次性脚本,解析巴西电子投票机日志,统计 17 点后到底投进了多少票。

137
20
Python
今天创建

这是一个只回答单个问题的分析项目,不是可复用的选举数据工具集:它要核实 2026 年 10 月 25 日第二轮投票在 STF 延长至 19 点后,究竟有多少票是 17 点后录入的。先看 README 里的结论表;只有当你想检查方法或换一个截止时间重跑时,代码才有意义。

解决什么问题

有争议的决选之后,出现了“17 点后录入的票可能改变结果”的说法。要核实它,不能只看汇总票数,得深入每台投票机的日志:每个投票区一个文件,藏在由哈希命名的目录里,路径要先从 TSE 的配置和辅助文件里查出来。对着约五十万个投票区手工做不现实,真正要解决的是如何大规模关联开机、关机和计票时间戳,得出一个站得住脚的数字。

项目最终产出两个 CSV:一台投票机一行,包含时区、开机、关机、最后一票,以及 17 点后和 17:20 后的票数;另一个是按市镇汇总的延时关闭投票机清单。

有什么不同

它不统计上报的总票数,而是读取每个 .jez 压缩包里的原始 logd.dat,以三条事件文本为锚点:投票机就绪、选票已计算、关闭程序确认。这样得到的是可独立复核的“迟到票”定义,而不是二手推算。时区处理方式是按各市镇最常见的开机时间推断其所属时区,假定当地 8 点开机,再换算成巴西利亚时间。这个推断是核心的方法权衡:对多时区国家算合理,但终究是假设,任何审计这个数字的人都应检查时区边界附近市镇的归属。

结论本身刻意不戏剧化:默认 17:45 截止时,有 7,352 台机器延后关闭,其中的 5,052 张 17 点后选票占 1.276 亿张记录票的 0.004%,相当于 Lula 对 Flávio 443 万票优势的 0.11%。README 还给出其他截止时间的对照:即便统计所有 17 点后的票,也只到优势的 0.77%。海外投票区因按当地时间投票被排除,另有 72 个投票区缺少日志。

谁值得试

适合:想复现或质疑上述数字的记者、研究者或普通公民,或者想把爬取逻辑改到其他选举、其他截止时间的人。代码短到一次能读完,CSV 输出可直接放进表格软件或 pandas 继续分析。

不适合:想要通用 TSE 数据客户端的人。这是针对单次选举的定向脚本,不是持续维护的抓取库,而且没有声明许可证,复用条款不明确。如果只需要结论,README 的表格已经给出。

使用条件与边界

完整爬取约有 100 万次请求,默认限速 10 次/秒,家庭宽带要跑几个小时;爬虫支持断点续爬,这对中途中断的长任务很重要。环境上只需要 Python 和 uv,但持续成本是带宽和时间,而不是配置。数据源本身是特定日期和特定选举的:链接指向 2026 年决选的发布页面,日志格式的假设也只适用于这次发布。单次选举的日志也回答不了机器为何延迟关闭,或迟到票是否来自 17 点前已在排队的人;README 指出这在任何选举中都是允许的。

HotRepo 点评

HotRepo 唯一记录到的观察是:2026-10-27 的 python 新项目榜(不是总榜)第 25 名,共 137 个 star。这只是单日快照,不构成增长序列,因此无法判断关注度能否持续。若要采信结论,请先对照项目说明,检查时区推断和截止时间定义,并直接查看 TSE 的配置文件与日志压缩包。

本文由 AI 根据项目 README 生成,更新于 2026年10月27日,以项目官方文档为准。