Python繪制交通流折線圖詳情
一、數據集下載
加州高速公路PEMS數據集
這里繪制PEMS04中的交通流量數據。該數據集中包含舊金山2018年1月1日至2月28日的29條道路上307個探測器每五分鐘收集的數據。
二、折線圖繪制
1、解壓npz文件
npz是一種numpy文件存儲的壓縮格式,可使用numpy進行讀取。
allow_pickle=True用于防止numpy版本過高帶來的錯誤。
data.files查看壓縮文件下的所有文件。
import numpy as np data = np.load(數據集存放地址, allow_pickle=True) print(data.files)
可以看到壓縮文件下只有data一個文件:
通過 data['data'] 即可對該數據集進行讀取。我們也可以查看一下該數據的維度。
print(data['data'].shape)
其維度如下:
16992 = 59天×24小時×12(每五分鐘統(tǒng)計一次流量數據),307為探測器數量,3為特征數。
2、折線圖繪制
數據中包含的三個特征為(交通流量,平均速度,平均占用率),取出繪圖需要的第一個特征(這里只繪制其中一個探測器的)。
flow = data['data'][:, 0, 0]
導入matplotlib包,通過pyplot來繪制最簡單的折線圖。
import matplotlib.pyplot as plt
由于希望觀測到工作日的流量變化,我們將橫坐標替換為周一至周日。舊金山2018年1月1日為周一。
繪制的全部代碼如下:
import numpy as np import matplotlib.pyplot as plt data = np.load(文件路徑, allow_pickle=True) flow = data['data'][:, 0, 0] print(len(flow)) week = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'] x = [] for i in range(59): x.append(week[(i + 1) % 7]) y = [] sum = 0 for i in range(len(flow)): if i == 0 or (i + 1) % 288 != 0: sum += flow[i] else: y.append(sum) sum = 0 fig = plt.figure(figsize=(15, 5)) # 圖片寬度設置的大一些 plt.title('traffic flow in San Francisco') plt.xlabel('day') plt.ylabel('flow') plt.xticks(np.arange(59), x) plt.plot(np.arange(59), y, linestyle='-') fig.autofmt_xdate(rotation=45) # x軸的刻度標簽逆時針旋轉45度 plt.show()
繪制結果如下:
文章所以大部分的KPI都會遵循“Mary's Peak”模式,比如說使用公共交通工具出行的情況、外賣點餐情況。從上圖可以看出,這里的交通流量是遵循這一模式的。
到此這篇關于Python繪制交通流折線圖詳情的文章就介紹到這了,更多相關Python繪制折線圖內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解Python3 中hasattr()、getattr()、setattr()、delattr()函數及示例代碼數
本文通過示例代碼給大家詳細介紹了Python3 中hasattr()、getattr()、setattr()、delattr()函數,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2018-04-04