张春成
2022/11/07阅读:43主题:默认主题
全国铁路站点
全国铁路站点可视化
本文尝试使用 mapbox,force graph 和 sankey diagram 对全国铁路车站进行可视化。
本文绘图代码可见我的前端库
Railway stations[1]
本文数据预处理的代码可见我的 Github 库
China-rail-way-stations-data[2]
效果看着还行。
数据绘制
铁路嘛,不用多说,直接绘图。
mapbox
用于显示站点位置和密度,大致分布如下图所示

整体分布图
为了描述细节,我提供两种染色方式,分别是按照省份染色和按照铁路局归属染色。另外,我对全国车站始发列车的数量进行可视化,用圆圈的大小来表示。也就是说,圆圈越大代表该站的始发车越多,代表车站的规模也越大。

按铁路局染色

铁路局颜色表

按省份染色
force graph
可以看到,铁路局和省份并没有一一对应关系,甚至也不是唯一包含的关系,所谓“跨省连城者不可胜数”。
因此,我采用了动态性的力模拟绘图方法。首先,用图论的方式建立铁路局网节点和车站网节点之间的关系图。为了避免数据规模过大而难以计算,我使用图的节点代表城市,用颜色表示;节点强度代表城市中的车站数量,用圆圈大小表示;节点归属用边来描述。
在这样的设计下,就可以抽象成各个点自然地相互排斥,但通过连接边相互吸引的力网络关系。使用恰当的力学参数,在网络迭代稳定后,就可以得到以铁路局为树枝节点,以城市为叶子节点的拓扑图。在拓扑图中,各个铁路局和城市之间的关系就更清晰一些。

铁路局拓扑图

省份颜色表
sankey diagram
接下来,我关心的问题是列车“一般”从哪些铁路局或省份开到哪些铁路局或省份,因此这构成了一组 2 乘 2 的选择。这种模式的数据用 sankey 图来呈现比较合适。因此我就绘制了一套。你可以选择不同的选项进行观察。如下图所示。可见,铁路车次的数量分布以省内为主,穿过多省的列车占比较少。
这其实解释了长期以来的一个疑问,那就是明明列车开行数量很多,但春运为何会出现旅客运力紧张?这是因为那个时候长途旅客激增,原本的中短途线路无法满足长程运输带来的矛盾。
这回答了一个质疑,就是总有人质疑我国的中短途省内客运多依赖城铁而国铁参与度较低,而本文的数据表明国铁的中短途客运已经规模不小了,至少在国铁线路内部,这部分的占比还是很合适的。
这也暗示了一个契机,那就是如果我国的公路网能够再密集一些,那么中短途客流可以通过公路来缓解,那么节省来下的运力既可以用于支撑长途客运,又可能为货运让路。也也许是很好的事情。
但我不是专家,只是瞎想而已。

铁路局到铁路局的 Sankey 图

铁路局到省份的 Sankey 图

广铁集团的发车分布

北京铁路局的发车分布
数据来源
本文的数据来自两个不同的地方
-
车次信息来自于 12306 -
url: 12306[3] -
path: raw/train_list.js -
parsed: src/line.csv
-
-
站点信息来自于 heywhale -
url: heywhale[4] -
path: raw/cnstation.csv -
parsed: src/station.csv
-
另外,本数据仅作为数据可视化的交流学习之用,不保证数据正确性,也不具有任何乘车参考意义。
参考资料
Railway stations: https://observablehq.com/@listenzcc/railway-stations
[2]China-rail-way-stations-data: https://github.com/listenzcc/China-rail-way-stations-data
[3]12306: https://kyfw.12306.cn/otn/resources/js/query/train_list.js?scriptVersion=1.0
[4]heywhale: https://www.heywhale.com/mw/dataset/600555c17ed5ab0015f00244/file
作者介绍