陳國強,張道文,周 凱
(1.西南交通大學交通運輸與物流學院,四川 成都 610031;2.西華大學汽車與交通學院,四川 成都 610039;3.大連工業(yè)大學外國語學院,遼寧 大連 116000)
在城市快速發(fā)展過程中,交通擁堵問題日益嚴重,僅通過“粗放式”修建基礎設施來緩解擁堵問題存在諸多局限,而利用有效地組織路網(wǎng)交通流來緩解擁堵是智能交通系統(tǒng)研究的主要內(nèi)容。交通誘導是智能交通系統(tǒng)的關鍵組成部分,而準確的交通狀態(tài)預測是有效地進行交通誘導的前提和依據(jù)。大量的研究人員對交通狀態(tài)預測模型進行了研究,使預測精度得到了極大的提升,如KNN 模型[1]、神經(jīng)網(wǎng)絡模型[2?4]、支持向量回歸[5?6]、旋轉(zhuǎn)網(wǎng)絡模型[7]等。但是如何讓這些預測模型能夠供非專業(yè)人員使用(如駕駛員選擇路線),這方面的應用研究較少。
此外,交通數(shù)據(jù)獲取也是一大難點,不僅數(shù)據(jù)源之間存在“信息孤島”,而且數(shù)據(jù)源和需求方也不能有效連接,許多交通研究者有心無力,望而興嘆。即使有文獻中提出采用爬蟲方法獲取交通數(shù)據(jù)[8?9],但也只是直接給出數(shù)據(jù)獲取結(jié)果,沒有給出具體實施步驟,導致后續(xù)研究人員需要用大量的時間研究怎么獲取數(shù)據(jù)。
本研究擬基于高德地圖API,開發(fā)一套操作簡單、界面友好的程序,實現(xiàn)路段車速數(shù)據(jù)采集、處理、分析、預測和發(fā)布過程的集成化、簡便化。該方法讓研究人員可以根據(jù)需求快速獲取指定路段車速數(shù)據(jù),給出ARIMA 模型預測案例,為出行者提供“擁堵預報”,為之后的應用研究做鋪墊。
進入高德開發(fā)平臺[10],查看態(tài)勢數(shù)據(jù)開發(fā)指南,通過該平臺能夠獲取矩形區(qū)域、圓形區(qū)域和指定線路的交通態(tài)勢數(shù)據(jù)。根據(jù)“使用說明”可知,獲取數(shù)據(jù)分為3 個步驟:1)申請“Web 服務API 接口”密鑰(Key);2)拼接HTTP 請求URL;3)接收HTTP 請求返回的數(shù)據(jù)(JSON 或XML 格式),解析數(shù)據(jù)。
高德地圖態(tài)勢數(shù)據(jù)2 min 更新一次。若采集時間間隔太短,則數(shù)據(jù)量太大;若采集時間間隔過長,則可能錯過一些重要信息。綜合考慮后,本文將采集時間間隔定為5 min,采集時間為2019 年12 月21 日—2020 年1 月10 日,采集流程如圖1所示。
為確定采集區(qū)域的坐標參數(shù),可以利用“高德地圖坐標拾取器”獲取[11]。根據(jù)開發(fā)指南給出的“使用限制”可知,矩形對角線不能超過10 km,故只能采用網(wǎng)格切分的思想,先將采集區(qū)域進行切割,劃分為幾個較小的采集區(qū)域,最后根據(jù)實際需求合并為較大的采集區(qū)域。因為普通用戶調(diào)用量上限為2 000 次/日,并發(fā)量上限為20 次/秒,所以每次采集最多構(gòu)造6 個小格,才能不超過每天的調(diào)用量(以5 min 為時間間隔,一個區(qū)域每天需要調(diào)用288 次,每次采集由于區(qū)域融合需要調(diào)用6 次,共計1 728 次)。為了觀察橫貫成都市的道路情況,本研究采用如圖2 所示的分割方法。將數(shù)據(jù)采集結(jié)果通過arcgis 繪制出來,如圖3 所示。此外,為解決爬取實時數(shù)據(jù)及代碼運行時間過長的問題,可以采用云服務器托管運行的方法。
圖2 矩形區(qū)域分割示例
圖3 矩形區(qū)域分割示例
由于高德地圖態(tài)勢數(shù)據(jù)為實時數(shù)據(jù)而非歷史數(shù)據(jù),所以編寫爬蟲代碼將不同時間點的采集結(jié)果放在不同的CSV 文件中,利用Python 編程實現(xiàn)文件的批量處理。首先,利用groupby()函數(shù)將每個文件內(nèi)的同一路段車速數(shù)據(jù)求平均并存儲到另一個文件中,再利用Pandas 庫從這些文件中提取出需要的路段數(shù)據(jù),并賦予對應的時間,然后存儲歸類到一個文件中,形成指定路段平均速度的時間序列數(shù)據(jù)。
打開存儲采集數(shù)據(jù)的文件,發(fā)現(xiàn)有部分路段車速數(shù)據(jù)缺失,有以下兩方面的原因:1)交通態(tài)勢數(shù)據(jù)的來源是用戶和浮動車的GPS 點數(shù)據(jù),在定位、傳輸、采集的過程中,難免會出現(xiàn)一些錯誤;2)由于長時間、密頻次調(diào)用高德地圖API,會造成服務器排名ID 靠后,導致采集出來的數(shù)據(jù)不完整。交通態(tài)勢數(shù)據(jù)中最關鍵的部分是路段平均行程速度,如果一條道路長時間缺失平均行程速度數(shù)據(jù),則應該放棄此條道路的研究[8]。
如果發(fā)現(xiàn)一條道路的車速數(shù)據(jù)并非長時間缺失,而是在某個時間點缺失,則可以采用數(shù)據(jù)填充的方法修復。這類情況發(fā)生的原因是沒有車輛在道路上行駛,導致在該時刻無法采集到該路段內(nèi)的速度信息。數(shù)據(jù)少量缺失的情況與道路等級有關,如快速路和主干道上,很少出現(xiàn)數(shù)據(jù)缺失,而在支路上較為常見。這是因為支路的車流量較少,且行駛的車輛不一定使用高德地圖或者該車輛不一定是浮動車,不能向高德地圖發(fā)送數(shù)據(jù)。
以“213 國道”為例,將前20 天的數(shù)據(jù)作為訓練集,最后一天的數(shù)據(jù)作為測試集,分解數(shù)據(jù)如圖4 所示。
圖4 “213 國道”數(shù)據(jù)分解
將分解后的“剩余部分”進行adfuller 檢驗,如圖5(a)所示。結(jié)果顯示:P-value<0.05,拒絕原假設,數(shù)據(jù)穩(wěn)定;Test Statistic=?26.742366 將分解后的“趨勢部分”進行adfuller 檢驗,如圖5(b)所示。結(jié)果顯示:Test Statistic=?3.204048>Critical Value(1%)=?3.431553,Test Statistic=?3.204048 圖5 平穩(wěn)性檢驗 圖6 的(a)、(b)分別是一階差分和二階差分的ACF/PACF 圖,都呈現(xiàn)出拖尾的現(xiàn)象,數(shù)據(jù)都穩(wěn)定,但二階差分數(shù)據(jù)的穩(wěn)定性明顯優(yōu)于一階差分數(shù)據(jù)。為保證精度,選擇二階差分數(shù)據(jù)作為預測數(shù)據(jù),確定ARIMA 模型中的d=2。 圖6 ACF/PACF 圖 利用Python 的statsmodels 庫中的acorr_ljungbox()函數(shù)進行白噪聲檢驗,結(jié)果顯示延遲6 階的P值為6.08*10-298<0.05,因此可以拒絕原假設,認為該序列是非白噪聲序列,可以進行ARIMA 模型預測。 繪制AIC 的熱力圖,如圖7 所示。顏色由淺到深,AIC 逐漸減小,MA4、AR2 對應的AIC 最小,確定ARIMA 模型的參數(shù)p=5,q=3。 圖7 AIC 熱力圖 用殘差來檢驗模型的好壞。從圖8 中可以看出殘差基本滿足正態(tài)分布。再進行D-W 檢驗,發(fā)現(xiàn)D-W 檢驗值接近于2,表明不存在自相關性,說明模型較好。 圖8 qq 圖 對“趨勢部分”進行預測,再將“季節(jié)部分”和“剩余部分”按平均的方式融合在一起得到車速數(shù)據(jù)的預測結(jié)果,進行MAE 計算,結(jié)果為1.6564,繪制預測結(jié)果如圖9 所示,其中黑色實線表示預測值,灰色虛線表示實際值。可以看出預測值較實際值更為保守,車速變化不明顯,而實際值的尖峰(異常值)較多,相鄰時間點的車速變化較大。 圖9 ARIMA 預測結(jié)果 根據(jù)車速平均值,將時段劃分為高峰期和非高峰期,如圖10 所示。其中灰色虛線為平均值1,是對所有天數(shù)按照每天的時間點進行分組再求車速平均值;黑色實線為平均值2,是所有車速的平均值。對于“213 國道”(一個遠離城區(qū)的高速路),小于車速均值的時間為00:20—07:40 和17:15—23:30,這個是高峰期,7:40—17:15 是非高峰期。不同道路的高峰期和非高峰期不同,不能以平常上下班時間作為劃分典型時段的依據(jù),故以平均值作為劃分依據(jù)。圖11 為非高峰期(7:40—17:15)的預測結(jié)果,MAE=1.3732,有顯著提升。圖12 為高峰期1(00:20—07:40)的預測結(jié)果,MAE=1.5442,MAE 提 升。圖13 為高峰期2(17:15—23:30)的預測結(jié)果,MAE=1.8515,MAE降低。 圖10 “213 國道”時段劃分 圖11 “213 國道”非高峰期預測結(jié)果 圖12 “213 國道”高峰期1 預測結(jié)果 圖13 “213 國道”高峰期2 預測結(jié)果 上述步驟需人工建立ARIMA 模型,過程復雜。為實現(xiàn)ARIMA 模型預測的自動化,擬采用以結(jié)果(MAE)為導向的運算方法,將“模型定階”“模型檢驗”的部分去掉,利用計算機的優(yōu)勢,將6 以內(nèi)的p、q值都計算一遍,找出MAE 最小的ARIMA模型。 以Python3.6 作為開發(fā)語言,PyCharm 作為集成開發(fā)工具,PyQt5 作為界面開發(fā)框架。用PyInstaller 打包,使程序能在Windows 操作環(huán)境下運行。 打開軟件,彈出主界面,如圖14 所示,共有4 個模塊。點擊模塊3 的“數(shù)據(jù)處理”按鈕,按需求選擇,點擊“運行”,如圖15 所示。 圖14 主界面 圖15 數(shù)據(jù)處理示例 返回主界面,點擊模塊4 的“數(shù)據(jù)預測”按鈕,在彈出的窗口中選擇“3 周”的數(shù)據(jù)量,在“指定目標路段”后的文本框中輸入“人民南路三段”,點擊“相關性可視化”按鈕,軟件繪制出“人民南路三段”在工作日和休息日的日均車速數(shù)據(jù)分布情況,如圖16所示。其中,灰色虛線表示工作日,黑色實線表示休息日,工作日與休息日有明顯的不同,工作日存在兩個峰值,而休息日的峰值只有一個。這表明工作日的出行是剛需,大部分居民必須在指定時間出行(朝九晚六的上下班時間),而休息日居民可以按照自己的意愿選擇出行時間。 圖16 “人民南路三段”工作日與休息日的日均車速分布情況 以“213 國道”為例,滾動“數(shù)據(jù)預測”窗口右邊的滑輪,直到出現(xiàn)ARIMA 預測版面,點擊“預測按鈕”,將出現(xiàn)預測結(jié)果和計算過程,如圖17 所示。其中,灰色虛線表示實際值,黑色實線表示預測值,實際值的變化幅度較大,預測值比較保守,預測結(jié)果MAE=1.6394,相較于圖9(以AIC 值最小作為判定模型參數(shù)的方法)的預測結(jié)果1.6564 有所提升。 圖17 “213 國道”預測結(jié)果 以Django 作為開發(fā)框架,設計了一個能夠發(fā)布預測結(jié)果的網(wǎng)頁。其中“輸入頁面”如圖18 所示,默認值為“大件路”。輸入“成都繞城高速”,點擊“預測”按鈕,出現(xiàn)“輸出頁面”,如圖19 所示。圖19的右下角是預測報告,粉紅色虛線表示預測值,藍色實線表示平均值。報告顯示1 月10 日的預測值總是高于平均值,表明1 月10 日(星期五)的“成都繞城高速”較平常而言更通暢。 圖18 輸入頁面 圖19 輸出頁面 1)以高德地圖態(tài)勢數(shù)據(jù)為數(shù)據(jù)來源,運用Python 語言編寫爬蟲代碼,通過云服務器托管運行,經(jīng)過數(shù)據(jù)轉(zhuǎn)換、清洗和修復,獲得成都市部分區(qū)域3 周的車速數(shù)據(jù)。 2)采用ARIMA 模型,完成了時間序列預測工作。 3)以Python 語言為基礎,通過PyCharm 和Qt Designer 等工具,實現(xiàn)了指定路段車速數(shù)據(jù)采集、處理、分析和預測的自動化、程序化。 4)以Django 為Web 開發(fā)框架,實現(xiàn)了指定路段車速預測結(jié)果的發(fā)布功能。 論文的研究成果可以幫助交通研究者快速獲取車速數(shù)據(jù),為出行者提供指定路段的擁堵預測結(jié)果。在以后的工作中,可以嘗試完善“擁堵預報”的Web 開發(fā),為導航軟件添加“預報”功能,當輸入駕駛目的地后,系統(tǒng)將為用戶提供途經(jīng)路段的預測報告,包括途經(jīng)路段的最通暢出行時間和最擁堵出行時間。3.3 “趨勢部分”白噪聲檢驗
3.4 模型定階
3.5 模型檢驗
3.6 數(shù)據(jù)預測
3.7 分時段預測
3.8 方法改進
4 軟件設計
4.1 技術實現(xiàn)工具
4.2 效果展示
5 擁堵預報的Web 開發(fā)
6 結(jié)論