系列文章:
一、引言:从理论到实战
在前面的课程中,我们学习了随机网络、小世界网络、无标度网络等理论模型的生成,也探讨了鲁棒性、社团结构等分析方法。然而,在实际科研或工程应用中,我们往往需要处理真实的实体网络(Entity Networks),例如:
- 交通网络:地铁、公交、航空线路;
- 基础设施:电网、水网;
- 社交网络:基于真实交互数据的网络。
这些网络不像 BA 无标度网络那样可以通过几行代码直接生成,而是需要从原始数据(如 Excel 台账、数据库记录)中提取节点和连边,构建出邻接矩阵。
本节课将以地铁/公交网络为例,手把手教你如何从 0 到 1 构建一个实体网络的 Space L 模型,并解决最令人头疼的数据预处理问题。
二、建模方法:Space L 模型
在构建交通类实体网络时,最常用的建模方法是 Space L 法。
2.1 什么是 Space L?
Space L 模型的规则非常直观:如果两个站点在同一条线路上相邻,则认为它们之间存在连边。
- 节点:车站/站点。
- 连边:线路上的物理连接。
这种模型最能反映网络的物理拓扑结构,是计算平均路径长度、网络效率等指标的基础。
2.2 建模的挑战
看似简单,但在实际操作中(例如面对一个拥有 300 条线路、3000 个站点的公交网络)会遇到巨大挑战:
- 节点编号困难:站点名称是字符串(如“北京南站”),计算机只能处理数字编号。
- 重复统计:换乘站出现在多条线路中,人工统计容易重复或遗漏。
- 工作量巨大:手工输入邻接矩阵几乎是不可能的,且极易出错。
因此,我们需要一套自动化的数据预处理流程。
三、MATLAB 实现:自动化数据预处理
我们将流程分为三步:读取数据 -> 映射编号 -> 生成矩阵。
3.1 数据准备
假设我们有一个 Excel 文件 lines.xlsx,存储了线路的连接关系。每一行代表一条边(两个相邻站点):
- 第一列:站点 A 名称
- 第二列:站点 B 名称
- (可选)第三列:权重(距离或时间)
3.2 核心代码:字符串转编号
我们需要编写程序自动识别所有唯一的站点名称,并分配 ID。
1 | % 1. 读取数据 |
3.3 邻接表转邻接矩阵
得到数字化的邻接表 test 后,我们需要将其转换为 $N \times N$ 的邻接矩阵。这里我们封装一个通用的函数 ainc2adj:
1 | function A = ainc2adj(edge_list) |
调用方法:
1 | A = ainc2adj(test); |
四、数据校验与可视化 (Gephi)
代码跑通了不代表模型是对的。实体网络建模最容易出现的问题是孤立节点或拼写错误导致的断连(例如“人民广场”和“人民广场站”被识别为两个点)。
我们需要使用 Gephi 进行可视化校验。
4.1 导入 Gephi
- 将生成的邻接矩阵
A保存为 CSV 格式,或使用 Gephi 支持的边列表格式。 - 导入 Gephi,在“概览”界面可以看到初步的拓扑图。
4.2 使用 Force Atlas 布局检查
初始图形往往是一团乱麻。我们需要使用 Force Atlas(力引导布局)算法:
- 在左下角“布局”面板选择
Force Atlas。 - 点击“运行”。
观察重点:
- 孤立节点群:如果网络分裂成几个互不相连的岛屿,说明数据可能有缺失,或者某些换乘站的名称在不同线路中写得不一样(导致没连上)。
- 飞出的节点:如果有单个节点远离主体结构,检查它是否是真正的孤立站点,还是数据录入错误。
4.3 快速定位问题
在 Gephi 的“预览”界面:
- 勾选“显示标签”。
- 刷新预览。
- 找到那些异常的节点,看它的名字,然后回到 Excel 中修正数据。
五、小结与作业
本节课我们打通了从原始数据到仿真模型的关键链路:
- Space L 建模:理解了实体网络最基础的拓扑构建规则。
- 自动化预处理:利用 MATLAB 解决了大规模站点编号映射的难题。
- 可视化校验:学会了用 Gephi 快速诊断网络连接问题。
延伸阅读
最后:给大家推荐一个在线复杂计算平台
如果你不想写代码,或者想快速验证你的邻接表数据:
👉 复杂网络分析平台
支持:
- 直接上传 Excel/CSV 邻接表;
- 自动生成邻接矩阵与拓扑图;
- 一键计算网络效率、聚类系数等指标。