城市公交网络分析与可视化

以青岛市为例 | 高德地图 API + Python | 874 条线路 · 5,616 个站点

大数据分析课程设计 · 实例 1
2026年6月
Python 3.12
高德 API
plotly
folium
networkx
matplotlib
01

工具与技术栈

类别工具 / 库用途
编程语言Python 3.12全部代码实现,约 800 行
API 数据源高德地图 Web API公交线路查询、站点详情、行驶轨迹
HTTP 通信requests构造 URL → 发送请求 → 获取 JSON 响应
数据解析json解析 API 返回的 JSON 结构为 Python 字典
数据工程pandas清洗、去重、统计分析、Excel 读写
统计图表matplotlib7 张 PNG 统计图(直方图、散点图、柱状图)
地图可视化plotly交互式地图(Scattermap + 自定义瓦片)
地图增强版folium (Leaflet.js)站点聚合、点击高亮、悬停弹窗
网络分析networkx无向图建模、度/路径/聚类系数计算
坐标系说明:高德 API 返回 GCJ-02 坐标,地图底图直接使用高德瓦片(同为 GCJ-02)→ 无需任何坐标转换,线路自动精准贴合道路,国内秒加载,零 VPN 依赖。
02

数据爬取与处理

高德地图 Web API · 模糊搜索策略 · 三阶段 pipeline

API 调用

GET /v3/bus/linename?key=xxx&keywords=1&city=青岛&offset=100

高德 API 的 keywords 参数天然支持模糊匹配——搜索 "6" 一次返回 6路、16路、26路、66路、606路…等全部含"6"的线路 ID。

爬取流程

🔍
模糊搜索
"0"~"9"
"10"~"999"
"隧道""黄岛"…
📋
收集线路ID
1,779 个
唯一 ID
📡
ID 批量查询
lineid API
5000次/天
🗺️
边界过滤
排除平度/莱西
保留核心城区
874
有效公交线路 (核心城区全覆盖)
5,616
唯一公交站点
22,198
站点行程记录
310,411
轨迹坐标点 (polyline)
03

城市公交网络可视化

双方案 · 按需渲染 · 高德瓦片免坐标转换

方案一:plotly Scattermap

直接 Python 生成 HTML,Tab 切换站点/线路/路网三视图。默认 20 条按需渲染,支持 20/50/100/200/全部 一键切换,内置搜索定位。

方案二:folium (Leaflet.js)

Canvas 渲染引擎,874 条线流畅叠加。MarkerCluster 站点聚合、点击线路高亮飞至、悬停弹窗显示线路名+方向。

关键设计:底图统一使用高德瓦片 webrd01.is.autonavi.com(GCJ-02 坐标系),与 API 返回的公交坐标完全一致 → 无需 WGS-84 ↔ GCJ-02 坐标转换,线路自动精准贴合道路,且在国内直连加载,不依赖 VPN。
🎯 坐标对齐
GCJ-02 数据 + GCJ-02 底图 = 零偏移
⚡ 按需渲染
默认 20 条,一键切至 874 条
🔍 搜索定位
站名/线路名 → 飞至 + 高亮
📱 交互增强
聚合/弹窗/高亮/图层开关
04

公交路线基本特征分析

基于 874 条线路的统计分析
指标数值解读
平均线路长度19.61 km中位数 15.93 km,大部分 8~22 km
平均站点数25.4 站/线中位数 24 站,与长度正相关
平均站距803.6 米总里程/(总站点-线路数),反映郊区+丘陵特征
非直线系数(中位数)1.61棋盘式 1.2~1.4,放射式≈2.6,青岛居中

线路长度分布

5-10 km
33%
10-15 km
42%
15-20 km
28%
20-30 km
19%
> 30 km
7%
丘陵+海岸线双重约束:青岛依山傍海,公交需绕行海湾和山体,非直线系数 1.61 显著高于平原棋盘式城市。站距 804 米略高于平原城市(500-700 米),体现了地形对规划的客观制约。
05

公交换乘网络搭建

networkx 无向图建模 · 381,501 对线路比较

建模规则 (Space-L 模型)

节点 = 公交线路
每条线路一个独立节点 (L = Line)

边 = 换乘关系
两条线路共享 ≥1 个站点 → 连边
公共站点数 = 边的权重

图类型 = 无向图
换乘是双向的

构建过程

① 遍历 874 条线路,建立站点集合
② 双重循环:874×873÷2 = 381,501
③ 检查交集 → nx.add_edge()
④ 导出 GEXF → 可用 Gephi 打开
874
节点 (线路数)
25,929
边 (换乘关系)
0.068
网络密度
06

公交换乘网络分析

指标数值含义
节点数 / 边数874 / 25,929网络规模
最大度176 地铁1号线地铁成为绝对网络枢纽
平均度59.3每条线路平均可换乘约 59 条其他线路
最大连通分量98.5%几乎全部线路互联互通
★ 平均路径长度2.57任意两线平均仅需 2.6 次换乘
网络直径6最远两线 6 次换乘
聚类系数0.553随机网络≈0.0013 → 小世界特性

度分布可视化

0-30 (低度)
16%
30-60 (中度)
46%
60-100 (高度)
26%
100+ (超级枢纽)
12%
核心发现:青岛公交网络具有显著的"小世界"特性——聚类系数 0.553 是随机网络的 400+ 倍,局部换乘密集、全局高效连通。地铁 1 号线以 176 的枢纽度成为绝对核心,平均 2.6 次换乘可达全网任意位置。
07

总结与收获

✅ 完成的工作

  • 爬取 874 条青岛核心城区公交线路
  • 提取 5,616 个站点 + 310K 轨迹点
  • Plotly + Folium 双版交互地图
  • 7 张 matplotlib 统计图表
  • networkx 复杂网络建模分析
  • 自动生成 Word 课程设计报告

📚 掌握的技术

  • 高德 Web API 调用与配额管理
  • requests + json 数据获取解析
  • pandas 数据处理与分析
  • plotly / folium 地图可视化
  • networkx 复杂网络分析
  • GCJ-02 坐标系与地图投影
核心收获:独立完成了"API 调用 → 数据爬取 → 清洗处理 → 可视化 → 网络分析 → 报告撰写"的全流程数据科学实践,掌握了从数据获取到成果交付的完整技能链。

感谢聆听

实例1:地方城市公交网络分析与可视化(以青岛市为例)
874 条线路
5,616 站点
平均度 59.3
路径长度 2.57
聚类系数 0.55
小世界特性