首頁 > 軟體

Python繪製交通流折線圖詳情

2022-06-15 14:02:14

一、資料集下載

加州高速公路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(每五分鐘統計一次流量資料),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繪製折線圖內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com