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