【大数据】城市公交网络分析与可视化(一):基于Python爬取公交车行驶路径等基本信息

  • Post author:
  • Post category:python




博客内容介绍

借助高德地图API,爬取指定公交线路(国内绝大多数线路,给定城市名和路线名即可)的始发站、终点站、行驶路径(行车轨迹)、

站点名称和坐标

、行驶距离等与公交车有关的基本信息,并将其保存到Execl表格中!



说明


考虑到个人最近精力有限,不做知识点详细介绍!

但可以告诉大家有哪些关键点:


1、高德开放平台|高德地图API


注册账号->获取Key!

(密钥Key是url中的一个关键参数,具体获取细节见后文补充部分,但我把自己申请的密钥直接放到代码中了,所以不申请问题也行)

2、啥是API?

API(Application Programming Interface,应用程序接口)

有兴趣就去了解一下,知不知道与本课题关系不大

3、啥是URL?

URL(Uniform Resource Locator,统一资源定位符)

同样,有兴趣就去了解一下,与本博客关系不是非常大~

4、了解requests、json库简单应用

同上,还是有兴趣就去了解一下,一点也不知道是啥其实也行,问题不大



可直接运行的Python程序


1、接口URL介绍

参数设置和返回参数内容,具体可参考:

路径规划-API文档-开发指南

(关于具体参数细节问题有待进一步探究)

url = 'https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=a5b7479db5b24fd68cedcf24f482c156&output=json&city={}&offset=1&keywords={}&platform=JS'.format(cityname,line)


2、完整代码


选取内容以青岛110路公交举例,可根据实际需求自己调整

import requests
import json
import pandas as pd
#0、在这里设置城市和线路名!(应确保有这条线路)
cityname='青岛'
line='110路'
url = 'https://restapi.amap.com/v3/bus/linename?s=rsv3&extensions=all&key=a5b7479db5b24fd68cedcf24f482c156&output=json&city={}&offset=1&keywords={}&platform=JS'.format(cityname,line)
#1、获取数据
r = requests.get(url).text
rt = json.loads(r)
#2、读取公交线路部分信息(可参考rt变量中的内容,按需获取)
dt = {}
dt['line_name'] = rt['buslines'][0]['name'] #公交线路名字
dt['start_stop'] = rt['buslines'][0]['start_stop'] #始发站
dt['end_stop'] = rt['buslines'][0]['end_stop'] #终点站
#3、获取沿途站点站名和对应坐标并保存在“公交基本信息”表格中
station_name = []
station_coords = []
for st in rt['buslines'][0]['busstops']:
    station_name.append(st['name'])
    station_coords.append(st['location'])
dt['station_name'] = station_name
dt['station_coords'] = station_coords
dm = pd.DataFrame(dt)
dm['latitude'], dm['longitude'] = dm['station_coords'].str.split(',', 1).str#将坐标拆解为经度和纬度
dm.to_csv('表格1_{}{}公交基本信息.csv'.format(cityname,line),encoding='utf-8-sig') 

#4、获取沿途路径坐标(行驶轨迹)并保存在“公交路线轨迹表格中”
tmp={}
polyline=rt['buslines'][0]['polyline']
tmp['station_coords']=polyline.split(";")
path=pd.DataFrame(tmp)
path['latitude'], path['longitude'] = path['station_coords'].str.split(',', 1).str#将坐标拆解为经度和纬度
path.to_csv('表格2_{}{}公交路线轨迹.csv'.format(cityname,line),encoding='utf-8-sig')



分析


1、运行结果:


(1)两个表格:

在这里插入图片描述

(2)表格1内容:

①第1遍打开:乱码?

原因分析:此时读入表格中参数encoding=‘utf-8’,应修改为encoding=‘utf-8-sig’

在这里插入图片描述

②:改正后内容:

在这里插入图片描述

(3)表格2内容:

说明:station_coords为经纬度,latitude和longitude分别为拆分后的经纬度,目的是根据方便不同使用场合应用,可根据实际情况调整。

在这里插入图片描述

(4)轨迹可视化

将表格1和表格2中坐标结合使用,采用高德地图可视化平台,绘制轨迹图

本部分在后续文章中还会涉及,这里不做详细介绍

在这里插入图片描述

部分绘制细节:

在这里插入图片描述


2、关键爬取数据变量rt分析


(1)打开Spyder中的Variable explorer(变量探测器)

在这里插入图片描述

(2)点击关键变量buslines

在这里插入图片描述

这些变量什么意思?有的可以直接判断出来,有的可以参照刚推荐的链接,就是这个:

路径规划-API文档-开发指南

,有的或许需要查阅别的文档了~



补充


1、如何获取密钥Key


(1)进入控制台,在左上角找到“我的应用”

在这里插入图片描述

(2)点击右上角“创建新应用”

在这里插入图片描述

(3)填写创建应用相关信息

在这里插入图片描述

(4)选择添加“Key”

在这里插入图片描述

(5)按选择Web端
在这里插入图片描述

(6)申请成功,下图红线内容即为Key
在这里插入图片描述



参考链接


CSDN博客:公交信息爬取01


知乎文章:城市路网实时路况爬取与ArcGIS可视化


CSDN博客:pd.read_csv()中encoding=’utf-8’和’utf-8-sig’的区别



版权声明:本文为qq_41856733原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。