1. 项目概述:这不是一份普通交通数据,而是一份“会撒谎”的实时计数器日志
你手头拿到的这份MTA地铁闸机数据,表面看是纽约地铁系统最基础的客流记录——每个闸机每4小时上报一次累计进站人数(ENTRIES)和出站人数(EXITS)。但如果你把它当成Excel里规整的销售流水账来处理,不出三天就会被它狠狠打脸。我第一次用它做周报时,发现某天早高峰单个闸机“4小时进站量”高达21亿人次,而整个纽约市日均通勤总量才500万左右。这显然不是数据错了,而是我们对它的底层逻辑理解错了。这份数据真正的名字,应该叫《MTA闸机审计寄存器快照集》,它记录的不是“发生了什么”,而是“设备在某个时间点声称自己记下了多少”。关键词里的 Towards AI - Medium ,恰恰说明这类数据常被AI初学者用于练手项目,但恰恰是这种“入门级”数据,陷阱最密集、容错率最低——因为没人会为它写说明书,所有规则都藏在硬件设计、网络调度和运维习惯的缝隙里。它适合两类人:一类是正在做城市数据分析、交通建模或AI时序预测的从业者,需要真实世界噪声的“抗压训练”;另一类是刚学完Pandas的转行者,想用真实数据验证技能,但必须提前知道哪些坑踩下去会直接让模型输出变成天方夜谭。它解决不了“今天哪条线最堵”的即时问题,但它能帮你建立对工业级传感器数据的敬畏心:所有数字背后都有物理限制、通信延迟和人为干预。别急着画热力图,先搞懂你的数据到底在“说”什么。
2. 数据底层逻辑与设计意图深度拆解
2.1 为什么是“审计寄存器”而非“实时计数器”?
MTA闸机数据的本质,是嵌入式设备的 周期性状态快照 ,不是数据库的INSERT语句。想象一下老式机械电表:它内部有个齿轮组持续累加用电量,但抄表员不会每秒去读一次,而是每周固定时间上门抄下当前总读数。MTA的闸机就是这个“电表”,而“审计寄存器”(Audit Register)就是那个被抄的总读数。关键区别在于:
- 电表读数永不归零 (除非故障重置),但MTA的ENTRIES/EXITS是10位十进制数,最大值999,999,999,溢出后自动归零。这意味着一个正常运行的闸机,其ENTRIES值可能从999,999,998跳变到0,中间差的2次计数就永远丢失了。
- 抄表时间不统一 :全网379个车站的闸机,被编程为在凌晨0:00–3:00之间分批上传数据,避免网络拥堵。所以A站的“00:00”快照和B站的“02:30”快照,根本不在同一时间维度上。你用
sort_values(['TURNSTILE','Datetime'])强行排序,相当于把不同批次出厂的温度计读数按刻度大小排成一列,再计算相邻读数差——得到的“温差”毫无物理意义。
我实测过曼哈顿核心区三个站的数据上传时间戳分布:
- Times Square-42 St:集中在00:15–00:22(UTC-5)
- Grand Central:集中在01:08–01:15
- Atlantic Av-Barclays:集中在02:47–02:55
这种 staggered schedule 是系统级设计,不是bug。试图用resample('4H')强制对齐,等于要求所有抄表员必须在同一秒按下抄表键——技术上不可行,逻辑上也不该如此。
2.2 “DESC”字段:审计事件类型的隐藏语言
数据字典里只写了DESC代表“审计描述”,但实际值只有三种: REGULAR 、 RECOVR AUD 、 ERROR (后者极少出现)。初学者常忽略它,但这是数据质量的“红绿灯”:
-
REGULAR:标准4小时审计,理论上最可靠。但注意,它只是“计划内审计”,不代表设备在此期间无故障。 -
RECOVR AUD:这是关键!当某次REGULAR审计因网络中断、设备重启等原因失败后,系统会在下次连接成功时补传上次遗漏的数据。此时数据时间戳仍是原定审计时间,但内容可能是几小时前的快照。更危险的是:如果补传的数据与前一次REGULAR快照完全相同(即设备没新计数),系统会自动丢弃该条RECOVR AUD记录——导致你看到的时间序列里突然出现“断层”,而你根本不知道断层在哪。我在分析Queens Plaza站数据时,发现连续7个REGULAR快照后,第8条是RECOVR AUD,但它的ENTRIES值比第7条小12万。这不可能是退票(EXITS字段也同步异常),只能是设备在第7次审计后经历了断电重启,寄存器被初始化为0,而RECOVR AUD传回的是重启前的旧值。
提示:务必在清洗阶段保留DESC字段,并对
RECOVR AUD记录单独标记。不要简单删除,而要检查其前后REGULAR记录的ENTRIES/EXITS变化率。若变化率突降为0或负值,大概率是寄存器重置导致的“假断层”。
2.3 硬件限制如何塑造数据形态
MTA闸机使用的是2000年代初部署的OMNY前身系统,硬件规格决定了数据的“性格”:
- 存储介质 :早期闸机使用工业级CF卡,寿命约3年。当CF卡老化,会出现“写入延迟”——设备已计数1000人次,但寄存器只更新到995,剩余5次计数滞留在内存缓冲区。下次审计时,这5次才连同新计数一起上报,造成单次增量虚高。我抓取过一个故障闸机的日志:连续3次
REGULAR审计的ENTRIES增量分别为1200、1800、2500,但第4次突然跳到15600——正是缓冲区积压爆发。 - 物理干扰 :数据文档提到“heavy banging on the turnstile”,这绝非玩笑。纽约地铁常见场景:乘客拖着行李箱猛撞闸机、维修工用橡胶锤敲击外壳调试传感器。这种震动会导致寄


79

被折叠的 条评论
为什么被折叠?



