基于Hadoop平台及LSTM模型的城市交通出行数据挖掘
2020-02-01叶奕黄检宝唐斌斌肖波雄贺紫月
叶奕,黄检宝,唐斌斌,肖波雄,贺紫月
(1.南华大学计算机学院,衡阳421000;2.南华大学经济管理与法学学院,衡阳421000)
0 引言
自21世纪起,在中国智慧城市建设持续推进、城镇化速度不断加快等条件的推动下,国内的城市交通系统行业以及透过城市交通带动的其他产业逐渐从前期走向快速发展、产业化发展阶段。科技产业链及信息产业链在带动了城市GDP高速增长的同时,也相应地为城市的交通监管带来了一系列应战。如何更加合理地调控和配置交通资源呢?如何优化一个城市的交通部署,在规划资源有限的情况下最大程度地减少人力和物力的投入,减少交通运输的维护成本呢?如何减少能源消耗与废气废物排放,打好绿色生态发展的“城市攻坚战”呢?
基于上述考虑,越来越多的城市依靠大数据技术等新兴科技技术手段,开发建设城市交通数据分析系统,挖掘交通数据背后隐藏的价值,分析问题所在来管理和规划城市交通。针对本文,我们需要做的是通过挖掘分析城市一天的人流交通出行数据,复现城市一天的交通规划管理。
我们以辽宁省沈阳市为例,通过对沈阳市各县(市)、区一天的人群轨迹移动数据,分析其每个区域的人群密度变化,人群的出行方式变化,得到人群的驻留分析。除此之外,基于挖掘分析的交通数据,进一步进行预测分析,通过预测人群密度,得出人群对出行方式的倾向性。
1 数据预处理
在进行数据的预处理之前,我们需要安装使用Ha⁃doop平台的Linux操作系统、搭建Hadoop平台伪分布式集群模式及处理好相应的配置文件。本文使用的Linux系统版本为Ubuntu 18.04,Hadoop版本为2.7.1。
1.1 HDFS文件操作
预处理的数据需要以文件的模式先上传至Hadoop分布式文件系统(简称HDFS),通过输出控制台指令,对数据实行增添、删减、修正和下载的操作。指令代码如下所示:
hdfs dfs-mkdir/myTask
hdfs dfs-put/mydata/test.txt/myTask/input
hdfs dfs-rmr/myTask/wordcount.txt
hdfs dfs-get/myTask/input/wordcount.txt/test
1.2 数据清洗
从HDFS读取的数据中,存在一些噪点干扰,也就是常说的“脏数据”。我们需要根据自定义的清洗规则对数据进行筛选清理。对于数据项中存在的特殊字符,例如‘#’、‘*’、‘^’,对此条数据进行剔除操作。对于信息残缺的一整条数据,也需要删除。
图1 部分噪点数据展示
1.3 时间戳处理
当原始数据中存在时间数据(如20190603000000)时,需要将时间转换为易读的格式(如2019-06-03 00:00:00)。这里可以借助java.util.Data包进行时间转换,具体代码如下所示:
1.4 部分数据关联
当原始数据中存在具体的空间定位信息时,我们需要进行合并操作。例如需要将纬度和经度合并成坐标表示,将定位基站的唯一标识id和基站信息码进行关联等。可采取数据库语言进行简单的表连接操作,关联效果如图2所示。
图2 部分数据关联效果展示
2 并行词频化统计批处理
通过数据预处理,原始数据中存在的噪点和无价值的数据已经被取代,但此时的数据仅仅代表了一个人在某一个时刻驻留的定位信息和其选择的何种出行方式。我们需要将冗余的数据信息通过唯一标识id进行归类操作(标签化),即将同一个人在一天当中所有时刻的定位信息进行合并,得到此人当天出行的数据集合。
2.1 MapReduce并行词频框架
MapReduce框架技术对数据采取分而治之的思维,通过构建抽象模型函数(Map映射和Reduce归类),并行自动化处理数据。
图3 MapReduce并行词频执行流程
2.2 具体过程
(1)重写Hadoop框架函数类。readFields类和write类可以将存储数据的自定义类通过定义的变量名在集群模式上读写。这里的变量名包括id、时间、经纬度和出行方式标签值等,代码如下所示:
(2)key值排序和组合。通过对key值进行排序和再次组合达到二次排序的效果。第一次排序,继承Writ⁃ableComparator类,重写compare方法将key值按照自定义类的id进行升序排序。第二次排序,在key值有序的情况,将id相同的数据合并,并按时间进行升序排序。
(3)Map阶段。Map读入HDFS文件每一行内容,然后对数据进行处理,创建自定义类为key键,在二次排序中,主要是对key进行排序与组合处理,所以可将键值对中的value设置为null。
(4)Reduce阶段。接受处理过的键值对,遍历集合列表获取key键排序结果,然后自定义输出格式后输出到HDFS中。
(5)结果分析。通过图4展示,的确实现了二次排序的效果,将id归类,并且对每个人的经纬度按照时间顺序进行了排序,利用此结果可以进一步得出个人的交通出行轨迹。
图4 处理效果展示
3 LSTM预测分析
3.1 模型简介
长短期记忆神经网络(Long Short Term Memory,LSTM)是一种循环时间神经网络,设计的目的是为了处理在传统RNN神经网络中存在的神经单元依赖问题,可以在一定程度上解决RNN的梯度爆炸或梯度消失等问题。LSTM适宜应用于处理和预测时间序列中间隔和延迟比较长的场景。
3.2 模型阐述
(1)符号说明
表1 符号含义
(2)模型结构
图5 LSTM模型结构
模型计算过程为:在上一个时刻的外部状态ht-1和当前时刻输入xt的基础上,计算it,ft,ot和c͂t,根据遗忘门ft和输入门it来更新记忆单元ct,再根据输出门ot,将内部状态的信息传递给外部状态ht。
3.3 模型建立
模型首先添加两层的LSTM网络结构,其中每一层有128个记忆单元,通过对每一层dropout随机失活来抑制过拟合,由于预测数据呈线性分布,最终的全连接输出层激活函数设为sigmoid函数,用均方差衡量预测值与真实值之间的差距,并通过adam优化器来更新梯度。具体结构如图6所示。
图6 模型具体结构图
3.4 模型求解和训练
(1)求解思路
为了实现对某种出行方式(地铁和公交)的人流预测,得出人群对出行方式的倾向性,我们需要对单一出行方式的人流进行统计。以每个车站为原点,百米为半径,对每个车站附近的流动人口计数,基于车站面积的一致性,可以用人流数量来代替人群密度;再对每个时刻每种出行方式的人群数量进行统计,出于对数据的正则化效率的考虑,我们以分钟为基本单位统计。
(2)正则化和归一化
归一化就是将大范围的离散数据,放缩到某个单位区间内,这样能加快模型的收敛速度。而正则化是采取一系列的措施限制,来避免模型过拟合,以提高模型的泛化能力。
首先对数据进行归一化,将数据标本缩小到0和1之间,这里用到的归一化公式为:
然后对归一化的数据进行正则化,优化问题可以写为:
其中L为损失函数,N为训练样本,f为待学习的神经网络,θ为其参数,lp为范数函数,λ为正则化系数。
(3)训练过程
将滑动区间设置为15分钟,以前15分钟的数据统计预测后1分钟的走向,对数据集拆分为输入数据和label标签值数据,由于只有一天的数据集,将训练集和测试集的划分比例设置为9:1,迭代次数为30次较适宜。
图7 部分训练过程
3.5 结果分析
通过比较公交和地铁两种出行方式的真实值和预测值,可以直观地发现模型训练效果较好,但由于训练样本有限,模型过拟合的几率也就不可估量,泛化能力也有待提高。在人群密度波动比较大的情况下,该模型还是能够达到较好的监控交通人流变化的效果。
4 Echarts可视化数据
Echarts作为当前被开发者极力推崇的前端框架,它提供了丰富的可高度自制、性能优异、交互体验良好的数据可视化组件及模板。我们在前面处理的各种数据需要通过类似于Echarts一类的数据可视化框架展示在前端网页中。依托Echarts中的折线图、扇形图、柱状图、城市地图等响应式交互组件,配以JavaScript语言编写代码完成异步加载数据和地图的series视觉映射,我们的城市交通系统实现了对沈阳市地图轮廓的复现、各县(市)区实时流量比对和人群选择出行方式的统计等功能。
图8 地铁预测结果图
图9 公交预测结果图
图10 系统主界面展示
5 结语
基于Hadoop平台并行词频化技术,我们实现了对交通数据的批处理,将无用的数据剔除,把有价值的数据进行进一步挖掘归类。通过深度学习领域中的LSTM模型,我们实现了对选择不同出行方式的人群密度预测,根据结果展示,在绝大多数时刻,人群倾向于选择公交的基数比倾向于选择地铁的多,并且预测效果良好,与真实情况大体一致。针对挖掘分析的数据,之所以能发现数据背后潜在的价值,离不开直观的可视化数据展示。我们在进行数据处理、挖掘和分析的同时,同样要兼顾系统开发的架构,在开发前端界面时,要考虑图表、视图制作所引用数据的规范性、合理性和可行性,如此才能更好地实现数据可视化。在系统展示中,和平区、铁西区和沈河区人群流量的波动最大,这一点可以从实现24小时实时轮播的人群密度比对的扇形图表中发掘,于是我们重点提取了人群密度最大的和平区进行更加细致的监控,以达到交通资源进一步合理分配的效果。