陈国强,张道文,周 凯
(1.西南交通大学交通运输与物流学院,四川 成都 610031;2.西华大学汽车与交通学院,四川 成都 610039;3.大连工业大学外国语学院,辽宁 大连 116000)
在城市快速发展过程中,交通拥堵问题日益严重,仅通过“粗放式”修建基础设施来缓解拥堵问题存在诸多局限,而利用有效地组织路网交通流来缓解拥堵是智能交通系统研究的主要内容。交通诱导是智能交通系统的关键组成部分,而准确的交通状态预测是有效地进行交通诱导的前提和依据。大量的研究人员对交通状态预测模型进行了研究,使预测精度得到了极大的提升,如KNN 模型[1]、神经网络模型[2−4]、支持向量回归[5−6]、旋转网络模型[7]等。但是如何让这些预测模型能够供非专业人员使用(如驾驶员选择路线),这方面的应用研究较少。
此外,交通数据获取也是一大难点,不仅数据源之间存在“信息孤岛”,而且数据源和需求方也不能有效连接,许多交通研究者有心无力,望而兴叹。即使有文献中提出采用爬虫方法获取交通数据[8−9],但也只是直接给出数据获取结果,没有给出具体实施步骤,导致后续研究人员需要用大量的时间研究怎么获取数据。
本研究拟基于高德地图API,开发一套操作简单、界面友好的程序,实现路段车速数据采集、处理、分析、预测和发布过程的集成化、简便化。该方法让研究人员可以根据需求快速获取指定路段车速数据,给出ARIMA 模型预测案例,为出行者提供“拥堵预报”,为之后的应用研究做铺垫。
进入高德开发平台[10],查看态势数据开发指南,通过该平台能够获取矩形区域、圆形区域和指定线路的交通态势数据。根据“使用说明”可知,获取数据分为3 个步骤:1)申请“Web 服务API 接口”密钥(Key);2)拼接HTTP 请求URL;3)接收HTTP 请求返回的数据(JSON 或XML 格式),解析数据。
高德地图态势数据2 min 更新一次。若采集时间间隔太短,则数据量太大;若采集时间间隔过长,则可能错过一些重要信息。综合考虑后,本文将采集时间间隔定为5 min,采集时间为2019 年12 月21 日—2020 年1 月10 日,采集流程如图1所示。
为确定采集区域的坐标参数,可以利用“高德地图坐标拾取器”获取[11]。根据开发指南给出的“使用限制”可知,矩形对角线不能超过10 km,故只能采用网格切分的思想,先将采集区域进行切割,划分为几个较小的采集区域,最后根据实际需求合并为较大的采集区域。因为普通用户调用量上限为2 000 次/日,并发量上限为20 次/秒,所以每次采集最多构造6 个小格,才能不超过每天的调用量(以5 min 为时间间隔,一个区域每天需要调用288 次,每次采集由于区域融合需要调用6 次,共计1 728 次)。为了观察横贯成都市的道路情况,本研究采用如图2 所示的分割方法。将数据采集结果通过arcgis 绘制出来,如图3 所示。此外,为解决爬取实时数据及代码运行时间过长的问题,可以采用云服务器托管运行的方法。
图2 矩形区域分割示例
图3 矩形区域分割示例
由于高德地图态势数据为实时数据而非历史数据,所以编写爬虫代码将不同时间点的采集结果放在不同的CSV 文件中,利用Python 编程实现文件的批量处理。首先,利用groupby()函数将每个文件内的同一路段车速数据求平均并存储到另一个文件中,再利用Pandas 库从这些文件中提取出需要的路段数据,并赋予对应的时间,然后存储归类到一个文件中,形成指定路段平均速度的时间序列数据。
打开存储采集数据的文件,发现有部分路段车速数据缺失,有以下两方面的原因:1)交通态势数据的来源是用户和浮动车的GPS 点数据,在定位、传输、采集的过程中,难免会出现一些错误;2)由于长时间、密频次调用高德地图API,会造成服务器排名ID 靠后,导致采集出来的数据不完整。交通态势数据中最关键的部分是路段平均行程速度,如果一条道路长时间缺失平均行程速度数据,则应该放弃此条道路的研究[8]。
如果发现一条道路的车速数据并非长时间缺失,而是在某个时间点缺失,则可以采用数据填充的方法修复。这类情况发生的原因是没有车辆在道路上行驶,导致在该时刻无法采集到该路段内的速度信息。数据少量缺失的情况与道路等级有关,如快速路和主干道上,很少出现数据缺失,而在支路上较为常见。这是因为支路的车流量较少,且行驶的车辆不一定使用高德地图或者该车辆不一定是浮动车,不能向高德地图发送数据。
以“213 国道”为例,将前20 天的数据作为训练集,最后一天的数据作为测试集,分解数据如图4 所示。
图4 “213 国道”数据分解
将分解后的“剩余部分”进行adfuller 检验,如图5(a)所示。结果显示:P-value<0.05,拒绝原假设,数据稳定;Test Statistic=−26.742366 将分解后的“趋势部分”进行adfuller 检验,如图5(b)所示。结果显示:Test Statistic=−3.204048>Critical Value(1%)=−3.431553,Test Statistic=−3.204048 图5 平稳性检验 图6 的(a)、(b)分别是一阶差分和二阶差分的ACF/PACF 图,都呈现出拖尾的现象,数据都稳定,但二阶差分数据的稳定性明显优于一阶差分数据。为保证精度,选择二阶差分数据作为预测数据,确定ARIMA 模型中的d=2。 图6 ACF/PACF 图 利用Python 的statsmodels 库中的acorr_ljungbox()函数进行白噪声检验,结果显示延迟6 阶的P值为6.08*10-298<0.05,因此可以拒绝原假设,认为该序列是非白噪声序列,可以进行ARIMA 模型预测。 绘制AIC 的热力图,如图7 所示。颜色由浅到深,AIC 逐渐减小,MA4、AR2 对应的AIC 最小,确定ARIMA 模型的参数p=5,q=3。 图7 AIC 热力图 用残差来检验模型的好坏。从图8 中可以看出残差基本满足正态分布。再进行D-W 检验,发现D-W 检验值接近于2,表明不存在自相关性,说明模型较好。 图8 qq 图 对“趋势部分”进行预测,再将“季节部分”和“剩余部分”按平均的方式融合在一起得到车速数据的预测结果,进行MAE 计算,结果为1.6564,绘制预测结果如图9 所示,其中黑色实线表示预测值,灰色虚线表示实际值。可以看出预测值较实际值更为保守,车速变化不明显,而实际值的尖峰(异常值)较多,相邻时间点的车速变化较大。 图9 ARIMA 预测结果 根据车速平均值,将时段划分为高峰期和非高峰期,如图10 所示。其中灰色虚线为平均值1,是对所有天数按照每天的时间点进行分组再求车速平均值;黑色实线为平均值2,是所有车速的平均值。对于“213 国道”(一个远离城区的高速路),小于车速均值的时间为00:20—07:40 和17:15—23:30,这个是高峰期,7:40—17:15 是非高峰期。不同道路的高峰期和非高峰期不同,不能以平常上下班时间作为划分典型时段的依据,故以平均值作为划分依据。图11 为非高峰期(7:40—17:15)的预测结果,MAE=1.3732,有显著提升。图12 为高峰期1(00:20—07:40)的预测结果,MAE=1.5442,MAE 提 升。图13 为高峰期2(17:15—23:30)的预测结果,MAE=1.8515,MAE降低。 图10 “213 国道”时段划分 图11 “213 国道”非高峰期预测结果 图12 “213 国道”高峰期1 预测结果 图13 “213 国道”高峰期2 预测结果 上述步骤需人工建立ARIMA 模型,过程复杂。为实现ARIMA 模型预测的自动化,拟采用以结果(MAE)为导向的运算方法,将“模型定阶”“模型检验”的部分去掉,利用计算机的优势,将6 以内的p、q值都计算一遍,找出MAE 最小的ARIMA模型。 以Python3.6 作为开发语言,PyCharm 作为集成开发工具,PyQt5 作为界面开发框架。用PyInstaller 打包,使程序能在Windows 操作环境下运行。 打开软件,弹出主界面,如图14 所示,共有4 个模块。点击模块3 的“数据处理”按钮,按需求选择,点击“运行”,如图15 所示。 图14 主界面 图15 数据处理示例 返回主界面,点击模块4 的“数据预测”按钮,在弹出的窗口中选择“3 周”的数据量,在“指定目标路段”后的文本框中输入“人民南路三段”,点击“相关性可视化”按钮,软件绘制出“人民南路三段”在工作日和休息日的日均车速数据分布情况,如图16所示。其中,灰色虚线表示工作日,黑色实线表示休息日,工作日与休息日有明显的不同,工作日存在两个峰值,而休息日的峰值只有一个。这表明工作日的出行是刚需,大部分居民必须在指定时间出行(朝九晚六的上下班时间),而休息日居民可以按照自己的意愿选择出行时间。 图16 “人民南路三段”工作日与休息日的日均车速分布情况 以“213 国道”为例,滚动“数据预测”窗口右边的滑轮,直到出现ARIMA 预测版面,点击“预测按钮”,将出现预测结果和计算过程,如图17 所示。其中,灰色虚线表示实际值,黑色实线表示预测值,实际值的变化幅度较大,预测值比较保守,预测结果MAE=1.6394,相较于图9(以AIC 值最小作为判定模型参数的方法)的预测结果1.6564 有所提升。 图17 “213 国道”预测结果 以Django 作为开发框架,设计了一个能够发布预测结果的网页。其中“输入页面”如图18 所示,默认值为“大件路”。输入“成都绕城高速”,点击“预测”按钮,出现“输出页面”,如图19 所示。图19的右下角是预测报告,粉红色虚线表示预测值,蓝色实线表示平均值。报告显示1 月10 日的预测值总是高于平均值,表明1 月10 日(星期五)的“成都绕城高速”较平常而言更通畅。 图18 输入页面 图19 输出页面 1)以高德地图态势数据为数据来源,运用Python 语言编写爬虫代码,通过云服务器托管运行,经过数据转换、清洗和修复,获得成都市部分区域3 周的车速数据。 2)采用ARIMA 模型,完成了时间序列预测工作。 3)以Python 语言为基础,通过PyCharm 和Qt Designer 等工具,实现了指定路段车速数据采集、处理、分析和预测的自动化、程序化。 4)以Django 为Web 开发框架,实现了指定路段车速预测结果的发布功能。 论文的研究成果可以帮助交通研究者快速获取车速数据,为出行者提供指定路段的拥堵预测结果。在以后的工作中,可以尝试完善“拥堵预报”的Web 开发,为导航软件添加“预报”功能,当输入驾驶目的地后,系统将为用户提供途经路段的预测报告,包括途经路段的最通畅出行时间和最拥堵出行时间。3.3 “趋势部分”白噪声检验
3.4 模型定阶
3.5 模型检验
3.6 数据预测
3.7 分时段预测
3.8 方法改进
4 软件设计
4.1 技术实现工具
4.2 效果展示
5 拥堵预报的Web 开发
6 结论