简介
这是社会网络管理与分析的作业。老师要求每组各举一个小世界网络的例子。因为以前刚好下载过武汉公交路线的数据,因此我们组讲的是这个示例。
小世界网络的定义和性质可以参考wiki百科:小世界网络
如果一个网络满足:
- 其平均聚集系数远大于在同一个顶点集合中构造的随机图的平均聚集系数;
- 并且,其平均最短路径长度和这个随机图基本相同
那么这个网络便可以称为小世界网络。
公交信息通过百度地图API获取,包括公交路线的坐标的经纬度坐标(可以生成GIS中的线要素),每个公交站点的经纬度坐标和名称。武汉公交站点的名称基本上都是以该站点所在街道开头命名,很有规律,例如建设大道双墩,解放大道中山公园等,这为数据处理和网络分析提供了很大方便。
将真实的地理路网映射到抽象的网络有好几种方法,每种方法都有一定的优缺点。这里用到的方法类似于路名对偶法,将一条道路作为网络中的结点,道路与道路的交叉路口作为相连的边。如下图所示。
但是手头上的数据只是公交路网的数据,毕竟和真实的道路交通网络还有差别,而且身边缺少一些工具,因此采用了简化的路名对偶法来映射公交道路网络。当然这样的映射会造成一些问题。
公交路网映射方法
基本上,武汉公交站点名称的前缀都是该站点所在道路名称,且该名称都是以道、路、街结尾,因此用这三个字将每条公交路线的站点名称截断,得到该公交路线经过的街道名称,然后再删除重复的道路名称。
映射时基于如下假设:在同一条公交线路中,相邻的两条道路必是相连的。因此遍历所有公交线路的所有站点,按顺序将公交线路中的站点两两相连。这样就将公交路网映射到了网络图中。
但是这样简化的映射方法会产生一些问题:
- 无法完全反应真实的道路信息
- 会产生一个非连通图(因为道路交通网应该是一个连通图)
在这个作业中通过取网络图中结点最多的连通子图来解决。
数据处理
python的网络分析库Networkx功能强大好用。因为python对中文支持不太好,所以用anjuke库将结点名称全部转为拼音。Networkx可以从这里下载:Networkx
Networkx的基本操作如下:
import networkx as nx
import matplotlib.pyplot as plt
G = nx.Graph() # 定义一个图
vertex1 = 1 # 结点可以是字符串,也可以是数字
vertex2 = 2
G.add_node(vertex1) # 添加一个结点
G.add_node(vertex2)
G.add_edge(vertex1, vertex2) #