葉奕,黃檢寶,唐斌斌,肖波雄,賀紫月
(1.南華大學(xué)計算機學(xué)院,衡陽421000;2.南華大學(xué)經(jīng)濟(jì)管理與法學(xué)學(xué)院,衡陽421000)
自21世紀(jì)起,在中國智慧城市建設(shè)持續(xù)推進(jìn)、城鎮(zhèn)化速度不斷加快等條件的推動下,國內(nèi)的城市交通系統(tǒng)行業(yè)以及透過城市交通帶動的其他產(chǎn)業(yè)逐漸從前期走向快速發(fā)展、產(chǎn)業(yè)化發(fā)展階段??萍籍a(chǎn)業(yè)鏈及信息產(chǎn)業(yè)鏈在帶動了城市GDP高速增長的同時,也相應(yīng)地為城市的交通監(jiān)管帶來了一系列應(yīng)戰(zhàn)。如何更加合理地調(diào)控和配置交通資源呢?如何優(yōu)化一個城市的交通部署,在規(guī)劃資源有限的情況下最大程度地減少人力和物力的投入,減少交通運輸?shù)木S護(hù)成本呢?如何減少能源消耗與廢氣廢物排放,打好綠色生態(tài)發(fā)展的“城市攻堅戰(zhàn)”呢?
基于上述考慮,越來越多的城市依靠大數(shù)據(jù)技術(shù)等新興科技技術(shù)手段,開發(fā)建設(shè)城市交通數(shù)據(jù)分析系統(tǒng),挖掘交通數(shù)據(jù)背后隱藏的價值,分析問題所在來管理和規(guī)劃城市交通。針對本文,我們需要做的是通過挖掘分析城市一天的人流交通出行數(shù)據(jù),復(fù)現(xiàn)城市一天的交通規(guī)劃管理。
我們以遼寧省沈陽市為例,通過對沈陽市各縣(市)、區(qū)一天的人群軌跡移動數(shù)據(jù),分析其每個區(qū)域的人群密度變化,人群的出行方式變化,得到人群的駐留分析。除此之外,基于挖掘分析的交通數(shù)據(jù),進(jìn)一步進(jìn)行預(yù)測分析,通過預(yù)測人群密度,得出人群對出行方式的傾向性。
在進(jìn)行數(shù)據(jù)的預(yù)處理之前,我們需要安裝使用Ha?doop平臺的Linux操作系統(tǒng)、搭建Hadoop平臺偽分布式集群模式及處理好相應(yīng)的配置文件。本文使用的Linux系統(tǒng)版本為Ubuntu 18.04,Hadoop版本為2.7.1。
預(yù)處理的數(shù)據(jù)需要以文件的模式先上傳至Hadoop分布式文件系統(tǒng)(簡稱HDFS),通過輸出控制臺指令,對數(shù)據(jù)實行增添、刪減、修正和下載的操作。指令代碼如下所示:
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
從HDFS讀取的數(shù)據(jù)中,存在一些噪點干擾,也就是常說的“臟數(shù)據(jù)”。我們需要根據(jù)自定義的清洗規(guī)則對數(shù)據(jù)進(jìn)行篩選清理。對于數(shù)據(jù)項中存在的特殊字符,例如‘#’、‘*’、‘^’,對此條數(shù)據(jù)進(jìn)行剔除操作。對于信息殘缺的一整條數(shù)據(jù),也需要刪除。
圖1 部分噪點數(shù)據(jù)展示
當(dāng)原始數(shù)據(jù)中存在時間數(shù)據(jù)(如20190603000000)時,需要將時間轉(zhuǎn)換為易讀的格式(如2019-06-03 00:00:00)。這里可以借助java.util.Data包進(jìn)行時間轉(zhuǎn)換,具體代碼如下所示:
當(dāng)原始數(shù)據(jù)中存在具體的空間定位信息時,我們需要進(jìn)行合并操作。例如需要將緯度和經(jīng)度合并成坐標(biāo)表示,將定位基站的唯一標(biāo)識id和基站信息碼進(jìn)行關(guān)聯(lián)等??刹扇?shù)據(jù)庫語言進(jìn)行簡單的表連接操作,關(guān)聯(lián)效果如圖2所示。
圖2 部分?jǐn)?shù)據(jù)關(guān)聯(lián)效果展示
通過數(shù)據(jù)預(yù)處理,原始數(shù)據(jù)中存在的噪點和無價值的數(shù)據(jù)已經(jīng)被取代,但此時的數(shù)據(jù)僅僅代表了一個人在某一個時刻駐留的定位信息和其選擇的何種出行方式。我們需要將冗余的數(shù)據(jù)信息通過唯一標(biāo)識id進(jìn)行歸類操作(標(biāo)簽化),即將同一個人在一天當(dāng)中所有時刻的定位信息進(jìn)行合并,得到此人當(dāng)天出行的數(shù)據(jù)集合。
MapReduce框架技術(shù)對數(shù)據(jù)采取分而治之的思維,通過構(gòu)建抽象模型函數(shù)(Map映射和Reduce歸類),并行自動化處理數(shù)據(jù)。
圖3 MapReduce并行詞頻執(zhí)行流程
(1)重寫Hadoop框架函數(shù)類。readFields類和write類可以將存儲數(shù)據(jù)的自定義類通過定義的變量名在集群模式上讀寫。這里的變量名包括id、時間、經(jīng)緯度和出行方式標(biāo)簽值等,代碼如下所示:
(2)key值排序和組合。通過對key值進(jìn)行排序和再次組合達(dá)到二次排序的效果。第一次排序,繼承Writ?ableComparator類,重寫compare方法將key值按照自定義類的id進(jìn)行升序排序。第二次排序,在key值有序的情況,將id相同的數(shù)據(jù)合并,并按時間進(jìn)行升序排序。
(3)Map階段。Map讀入HDFS文件每一行內(nèi)容,然后對數(shù)據(jù)進(jìn)行處理,創(chuàng)建自定義類為key鍵,在二次排序中,主要是對key進(jìn)行排序與組合處理,所以可將鍵值對中的value設(shè)置為null。
(4)Reduce階段。接受處理過的鍵值對,遍歷集合列表獲取key鍵排序結(jié)果,然后自定義輸出格式后輸出到HDFS中。
(5)結(jié)果分析。通過圖4展示,的確實現(xiàn)了二次排序的效果,將id歸類,并且對每個人的經(jīng)緯度按照時間順序進(jìn)行了排序,利用此結(jié)果可以進(jìn)一步得出個人的交通出行軌跡。
圖4 處理效果展示
長短期記憶神經(jīng)網(wǎng)絡(luò)(Long Short Term Memory,LSTM)是一種循環(huán)時間神經(jīng)網(wǎng)絡(luò),設(shè)計的目的是為了處理在傳統(tǒng)RNN神經(jīng)網(wǎng)絡(luò)中存在的神經(jīng)單元依賴問題,可以在一定程度上解決RNN的梯度爆炸或梯度消失等問題。LSTM適宜應(yīng)用于處理和預(yù)測時間序列中間隔和延遲比較長的場景。
(1)符號說明
表1 符號含義
(2)模型結(jié)構(gòu)
圖5 LSTM模型結(jié)構(gòu)
模型計算過程為:在上一個時刻的外部狀態(tài)ht-1和當(dāng)前時刻輸入xt的基礎(chǔ)上,計算it,ft,ot和c?t,根據(jù)遺忘門ft和輸入門it來更新記憶單元ct,再根據(jù)輸出門ot,將內(nèi)部狀態(tài)的信息傳遞給外部狀態(tài)ht。
模型首先添加兩層的LSTM網(wǎng)絡(luò)結(jié)構(gòu),其中每一層有128個記憶單元,通過對每一層dropout隨機失活來抑制過擬合,由于預(yù)測數(shù)據(jù)呈線性分布,最終的全連接輸出層激活函數(shù)設(shè)為sigmoid函數(shù),用均方差衡量預(yù)測值與真實值之間的差距,并通過adam優(yōu)化器來更新梯度。具體結(jié)構(gòu)如圖6所示。
圖6 模型具體結(jié)構(gòu)圖
(1)求解思路
為了實現(xiàn)對某種出行方式(地鐵和公交)的人流預(yù)測,得出人群對出行方式的傾向性,我們需要對單一出行方式的人流進(jìn)行統(tǒng)計。以每個車站為原點,百米為半徑,對每個車站附近的流動人口計數(shù),基于車站面積的一致性,可以用人流數(shù)量來代替人群密度;再對每個時刻每種出行方式的人群數(shù)量進(jìn)行統(tǒng)計,出于對數(shù)據(jù)的正則化效率的考慮,我們以分鐘為基本單位統(tǒng)計。
(2)正則化和歸一化
歸一化就是將大范圍的離散數(shù)據(jù),放縮到某個單位區(qū)間內(nèi),這樣能加快模型的收斂速度。而正則化是采取一系列的措施限制,來避免模型過擬合,以提高模型的泛化能力。
首先對數(shù)據(jù)進(jìn)行歸一化,將數(shù)據(jù)標(biāo)本縮小到0和1之間,這里用到的歸一化公式為:
然后對歸一化的數(shù)據(jù)進(jìn)行正則化,優(yōu)化問題可以寫為:
其中L為損失函數(shù),N為訓(xùn)練樣本,f為待學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò),θ為其參數(shù),lp為范數(shù)函數(shù),λ為正則化系數(shù)。
(3)訓(xùn)練過程
將滑動區(qū)間設(shè)置為15分鐘,以前15分鐘的數(shù)據(jù)統(tǒng)計預(yù)測后1分鐘的走向,對數(shù)據(jù)集拆分為輸入數(shù)據(jù)和label標(biāo)簽值數(shù)據(jù),由于只有一天的數(shù)據(jù)集,將訓(xùn)練集和測試集的劃分比例設(shè)置為9:1,迭代次數(shù)為30次較適宜。
圖7 部分訓(xùn)練過程
通過比較公交和地鐵兩種出行方式的真實值和預(yù)測值,可以直觀地發(fā)現(xiàn)模型訓(xùn)練效果較好,但由于訓(xùn)練樣本有限,模型過擬合的幾率也就不可估量,泛化能力也有待提高。在人群密度波動比較大的情況下,該模型還是能夠達(dá)到較好的監(jiān)控交通人流變化的效果。
Echarts作為當(dāng)前被開發(fā)者極力推崇的前端框架,它提供了豐富的可高度自制、性能優(yōu)異、交互體驗良好的數(shù)據(jù)可視化組件及模板。我們在前面處理的各種數(shù)據(jù)需要通過類似于Echarts一類的數(shù)據(jù)可視化框架展示在前端網(wǎng)頁中。依托Echarts中的折線圖、扇形圖、柱狀圖、城市地圖等響應(yīng)式交互組件,配以JavaScript語言編寫代碼完成異步加載數(shù)據(jù)和地圖的series視覺映射,我們的城市交通系統(tǒng)實現(xiàn)了對沈陽市地圖輪廓的復(fù)現(xiàn)、各縣(市)區(qū)實時流量比對和人群選擇出行方式的統(tǒng)計等功能。
圖8 地鐵預(yù)測結(jié)果圖
圖9 公交預(yù)測結(jié)果圖
圖10 系統(tǒng)主界面展示
基于Hadoop平臺并行詞頻化技術(shù),我們實現(xiàn)了對交通數(shù)據(jù)的批處理,將無用的數(shù)據(jù)剔除,把有價值的數(shù)據(jù)進(jìn)行進(jìn)一步挖掘歸類。通過深度學(xué)習(xí)領(lǐng)域中的LSTM模型,我們實現(xiàn)了對選擇不同出行方式的人群密度預(yù)測,根據(jù)結(jié)果展示,在絕大多數(shù)時刻,人群傾向于選擇公交的基數(shù)比傾向于選擇地鐵的多,并且預(yù)測效果良好,與真實情況大體一致。針對挖掘分析的數(shù)據(jù),之所以能發(fā)現(xiàn)數(shù)據(jù)背后潛在的價值,離不開直觀的可視化數(shù)據(jù)展示。我們在進(jìn)行數(shù)據(jù)處理、挖掘和分析的同時,同樣要兼顧系統(tǒng)開發(fā)的架構(gòu),在開發(fā)前端界面時,要考慮圖表、視圖制作所引用數(shù)據(jù)的規(guī)范性、合理性和可行性,如此才能更好地實現(xiàn)數(shù)據(jù)可視化。在系統(tǒng)展示中,和平區(qū)、鐵西區(qū)和沈河區(qū)人群流量的波動最大,這一點可以從實現(xiàn)24小時實時輪播的人群密度比對的扇形圖表中發(fā)掘,于是我們重點提取了人群密度最大的和平區(qū)進(jìn)行更加細(xì)致的監(jiān)控,以達(dá)到交通資源進(jìn)一步合理分配的效果。