美文网首页中国R语言社区
新加坡地铁故障频发 数据分析找出肇事元凶

新加坡地铁故障频发 数据分析找出肇事元凶

作者: 黄小伟Yeah | 来源:发表于2017-10-13 22:39 被阅读38次

新加坡地铁环线近几个月来发生了一系列不明原因的故障,给上千名乘客造成了困扰和麻烦。和我的大多数同事一样,我每天早上都要搭乘环线去上班。前不久,当我们组被任命调查故障原因时,我毫不犹豫地报名参与其中。

从地铁运营方SMRT和道路管理局之前的调查中,我们已经知道这些故障是由于会引发信号丢失的信号干扰所导致的。信号丢失会触发列车的紧急制动安全系统从而致使列车不规律地停止行驶。但是这些发生自八月份的故障看起来都是随机发生的,这给调查组的原因排查带来了不小的困难。

我们从SMRT获得的数据可以提供如下信息:

·每一起故障的日期和时间

·每一起故障的发生地点

·故障列车的编号

·故障列车的行驶方向

我们从清理原始数据入手。我们使用的软件是Jupyter Notebook,它是一款非常流行的用于编写和归档Python代码的工具。

—— 最基本的可视化 ——

从如下这些基本的分析处理中,我们无法确定故障的明确原因:

1.故障发生的时间遍及全天,并且早晚高峰的故障发生次数呈镜像对称。

2.故障发生在环线沿线多处地点,在西部发生的次数略多。

3.信号干扰影响到多列列车。“PV**”代表列车编号。

—— Marey图:对时间、地点、行驶方向的可视化 ——

分析处理的下一步是综合考虑多个维度的信息。我们受到Marey图的启发,Marey图是Edward Tufte在1983年经典的“量化信息的可视化表达”一文中提出的。最近,Marey图被Mike Barry和Brian Card用于波士顿地铁系统的可视化项目中:

在这幅图中,纵轴代表时间——从上到下按照时间顺序——横轴代表地铁沿线各个站点。其中对角线代表地铁的行进状态。

我们先按照我们要研究的问题画好坐标轴:

在正常情况下,一列从港湾站行驶至多美歌站的列车将会按照下图的路线运行,每一趟单程仅需一小时。我们研究的目的是在该图中用点而非直线来描绘故障的发生状况。

—— 准备用于可视化的数据 ——

首先,我们把由三个字母代表的站名转化为数字:

·滨海湾至宝门廊:0至1.5

·多美歌至港湾:2至29

如果故障发生在两站之间,我们将用0.5加上两站中较小的数字来表示故障地点。举例来说,如果故障发生在港湾(29)和直落布兰雅(28),那么故障发生地点为“28.5”。这使我们在横轴上的标注变得简单明了。

基于处理之后的数据,我们在图中绘制出了所有紧急制动故障的散点图。每一个点代表一起故障。然而,我们还是无法归纳出明确的故障发生原因。

接下来,我们加入列车行驶方向这一因素。我们用指左或指右的三角形符号来代表列车的行驶方向:

然而,它看起来还是相当随机。但是当我们放大至一些局部细节,一些规律似乎浮出水面:

如果你仔细研究这幅图,你会发现:列车故障是依序发生的。当某一列车发生信号干扰,紧随其后开往同一方向的列车将会很快也遭遇相同的干扰。

—— 信号干扰是如何发生的? ——

至此,我们仍然不清楚是否某一列车是肇事元凶。我们能够确定的是在时间和地点的分布上一些规律有迹可循:故障是依次交替在相反方向上发生。会不会是一些无法在数据集中体现的原因导致这些故障呢?

这些假想的连接各点的虚线看起来与Marey图中的直线很相似。那些沿相反方向行驶的列车会不会是造成信号干扰的原因呢?我们决定去测试一下“肇事列车”这一假设。

我们已经知道环线每两站之间的时间间隔大约是2-4分钟。这意味着我们可以把四分钟之内发生的紧急制动故障归为一组。

然后,我们使用不相交的数据结构将所有的故障事件对组合成较大的集合。这使我们能够将可能与同一列肇事列车挂钩的故障进行分组。

我们把这一算法运用在数据集上,如下是我们找出的一些归类的集群及相应结果:

这一结果表明:在数据集中包括的259起故障中,189起——或73%的故障——可以用“肇事列车”这一假设来解释。这让我们觉得我们的分析方向是正确的。

我们根据聚类结果对故障点进行着色。同一颜色的三角形来自同一集群。

—— 有多少列肇事列车? ——

从前文可知,环线每一单程大约耗时一小时。我们按照正常运行的列车Marey图中的直线来拟合故障散点图。从下图可以清晰地看出只有一列肇事列车。

我们还可以得出:那列未知的肇事列车自身并没有出现任何信号故障,因为它并没有出现在我们的散点图中。

—— 找出肇事列车 ——

日落之后,我们前往金泉地铁车辆段试图找出肇事列车。由于SMRT需要更多时间来导出当日数据,我们无法查看列车日志的详细记录。所以我们决定用老式的方法,通过审查故障发生时到达和离开各车站的列车的录像记录。终于在凌晨三点钟,团队发现了头号嫌疑犯:PV46,一列从2015年起投入运行的列车。

—— 验证假设 ——

11月6日(周日),道路管理局和SMRT在非高峰期时段进行测试来判定PV46是否是故障的源头。测试结果表明我们是正确的——PV46确实引起了邻近车辆的信号丢失从而触发了那些车辆的紧急制动系统。在PV46运行之前,并没有相关故障发生。

11月7日(周一),我们团队分析处理了PV46的所有关于地点的记录数据,发现从八月至十一月的95%的故障可以用我们的假设来解释。剩下的一些案例可能是由于在正常状况下偶发的信号丢失导致。

这一规律在某些日子特别明显,例如9月1日。从下图可以清晰地看出故障均发生在PV46运行的时间区间内。

—— 总结 ——

当我们刚开始调查故障原因时,我的同事和我都希望能找到使跨机构调查组感兴趣的原因,这包括道路管理局,SMRT和国防科技局。由SMRT和道路管理局提供的清晰明了的故障日志给我们的调查铺平了道路,因为我们不需要在分析数据之前花费时间和精力来清理原始数据。我们也对道路管理局和国防科技局的后续调查表示满意,他们证实了故障确实是来自PV46的硬件问题。

从数据科学的角度来看,我们非常幸运,因为故障发生的时间和地点很接近。这使我们能够在很短的时间内确定问题和罪魁祸首。如果这些故障更加孤立,其中的规律和关联就不那么明显了,我们将需要更多的时间和数据来解决这个谜题。

*本文用到的Python源代码请点击阅读原文获取。全文翻译自新加坡GovTech发布在Medium上的官方博客How the Circle Line rogue train was caught with data.

相关文章

  • 新加坡地铁故障频发 数据分析找出肇事元凶

    新加坡地铁环线近几个月来发生了一系列不明原因的故障,给上千名乘客造成了困扰和麻烦。和我的大多数同事一样,我每天早上...

  • SALUS 寒暄:一家电车公司办的杂志

    地铁是大都市重要的交通工具,新加坡的MRT可以说是交通动脉,每次有个什么故障,肯定是当天重大新闻。 新加坡地铁的职...

  • 12.19日精进

    维修故障时一定要严谨,找到故障点,根据故障各项数据去诊断,不能单独的依靠经验去维修,用数据流分析故障,确定故障点更...

  • 案例分析:数据计算系统频发fullgc

    一、背景 数据计算系统,日处理数据量在上亿的规模; 简单来说就是不停的从各种存储中读取大量数据在内存中进行计算处理...

  • 2021。  1.12

    体验,维修故障时一定要严谨,探底。找到故障点,根据故障各项数据去诊断。不能单独的依靠经验去维修。总结,用数据分析故...

  • python实战总结 - 草稿

    1数据分析项目实战-用户消费行为分析数据分析实战,混泥土机器故障预测2数据分析项目实战-数据分析师的招聘薪资3电脑...

  • python实战总结

    1数据分析项目实战-用户消费行为分析数据分析实战,混泥土机器故障预测2数据分析项目实战-数据分析师的招聘薪资3电脑...

  • 地铁故障

    今天周一,同时也是进博会的第一天,因此决定提早20分钟出门。 本来想到已经有部分企业是调休今天不上班了,地铁应该还...

  • 地铁故障

    早上,我正悠闲的吃着早饭,手机消息提醒地铁六号线故障。脑海中迅速呈现出地铁进站、站台人挨人的场景,开始紧张盘算如何...

  • 地铁故障

    晚上6点半,北京地铁5号线故障停运。 5号线在下班时间是高峰期,平时上车都挤不上去。停运之后,一批平时坐地铁的人,...

网友评论

本文标题:新加坡地铁故障频发 数据分析找出肇事元凶

本文链接:https://www.haomeiwen.com/subject/bpvtuxtx.html