【大數據】城市公交網絡分析與可視化(一):基於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’的區別

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章