一、前言
打开手机‘北京地铁’APP,输入起始点:霍营,终点:北京南站,发现系统给我们推荐了两条路线。
最短时间路线与最少换乘路线,并且分别给出了耗时与乘坐里程费。看到这里,不禁开启了靓仔疑问,假如给你地铁站相关数据,如何构建这样的关系网络呢?(尽量少写代码,毕竟我这个人懒的不行,花最少的功夫,整最炫的效果,咦)
1.整理地铁站点数据,处理成echarts图表所需要的结构
2.整理地铁站点数据,自己写代码实现,能实现(好累啊…)
3.整理地铁站点数据,导入 Neo4j 中,点击查看
分析:方案一,不仅要处理数据还要搞echarts样式,算了吧。方案二,直接PASS,还是方案三省力,正好我的电脑上之前安装过 Neo4j 图数据库,哈哈哈,开搞开搞!
软件下载地址:http://doc.we-yun.com:1008/neo4j-chs
软件安装教程:https://www.cnblogs.com/jstarseven/p/9546555.html
二、数据准备
既然需要展示地铁关系,那么首先需要的就是北京所有地铁站的信息,以及站点之间的关系,距离,耗时。搜索了一圈,最后在北京地铁官方网站,发现了全部地铁线路,站点名称,站点与站点之间距离等信息。但是缺少了具体站点与站点之间的乘车耗时,行吧,先将就着用吧!具体数据样例如下:
数据来源地址:https://www.bjsubway.com/station/zjgls/#
站点关系
一共18条线路,一顿复制粘贴和 Notepad++ 文本替换之后,我们得到了一个 Excel文件,包含了所有站点之间的关系数据,如下:
获取站点
复制所有站点进入Excel文件的某一个sheet,选择数据去重,得到所有站点名称。
处理CSV
将站点关系与站点数据处理成CSV文件格式,方便导入 Neo4j 数据库中,建立图节点与关系。操作也就是 notepad++ 替换‘ ’为‘,’,另存为 .CSV 文件,具体得到下列文件。(因为方便 Neo4j 数据库不同的路线显示不同的颜色,我特地将站点关系数据拆解成了多个地铁线的CSV文件,如果不考虑显示,可以一个CSV文件,导入站点关系即可)
备注:将所有CSV文件,放入 Neo4j 安装目录下的 import 文件夹中(没有就新建),如下:
文件下载地址:https://files-cdn.cnblogs.com/files/jstarseven/subway.zip
三、建立地铁关系网
Neo4j 支持导入本地以及网络资源中的 CSV 文件数据,并且可以从CSV文件数据中,直接建立图形节点以及节点关系。具体 cypher 语句,如下:
建立地铁站点
LOAD CSV WITH HEADERS FROM "file:///station.csv" AS line
MERGE (p:Station{id:line.id,name:line.name});
建立站点连接
LOAD CSV WITH HEADERS FROM "file:///line1.csv" AS line1
match (from1:Station{name:line1.sn}),(to1:Station{name:line1.en})
merge (from1)-[r1:一号线{jl:line1.jl,xl:line1.xl}]->(to1);
LOAD CSV WITH HEADERS FROM "file:///line2.csv" AS line2
match (from2:Station{name:line2.sn}),(to2:Station{name:line2.en})
merge (from2)-[r2:二号线{jl:line2.jl,xl:line2.xl}]->(to2)