劉馨澤 張雷 趙玉雪
摘要: 該文選取“摩拜杯官方挑戰(zhàn)賽”的300萬條數(shù)據(jù),運用python及SQL語言對獲取的300萬條數(shù)據(jù)進行數(shù)據(jù)處理,并利用JAVA進行原有數(shù)據(jù)解碼轉(zhuǎn)換,得出摩拜單車在5月10日至5月24日的北京全范圍內(nèi)所有用戶訂單信息,連接百度地圖API標記北京范圍的POI點。選取北京工商大學阜成路及其周圍共8個POI點作為研究范圍??芍绺叻鍟r間出現(xiàn)在7時至9時;晚高峰時間出現(xiàn)在17時至19時,且非工作日與工作日存在著明顯的單車使用差異特征。與此同時,以阜成路校區(qū)為起點的摩拜單車訂單中,有近4/5終點進入其他7個POI點,發(fā)現(xiàn)了高峰后阜成路校區(qū)單車供給不足的情況。根據(jù)考察的規(guī)律,建立線性規(guī)劃模型,運用MATLAB軟件求解,以運送5輛單車每次為例,以盡量少的運送次數(shù)和運送距離為目標,對運輸用電動車的路線進行優(yōu)化,最終得出優(yōu)化調(diào)度方案。
關(guān)鍵詞:線性規(guī)劃模型; SQL; MATLAB
中圖分類號:TP311? ? ? ? 文獻標識碼:A? ? ? ? 文章編號:1009-3044(2019)02-0249-03
1 引言
共享單車的存在解決了城市里“最后一公里”的難題,目前共享單車品牌開始多起來,并且紛紛加入免費騎行的燒錢大戰(zhàn)。對于消費者來說,在使用共享單車的時候,最大的煩惱就是需要用車的時候卻找不到車,當然希望車輛的投放數(shù)量越多越好; 而對于共享單車企業(yè)來說,他們在為大家的出行提供便利條件的同時, 更關(guān)注的是自身的生存和發(fā)展。本文以北京工商大學阜成路校區(qū)為例,進行單車用戶特征與調(diào)度方案的研究。
2 數(shù)據(jù)獲取與處理
2.1 數(shù)據(jù)的獲取
通過網(wǎng)絡下載2017摩拜杯算法挑戰(zhàn)賽的數(shù)據(jù)作為數(shù)據(jù)源。該數(shù)據(jù)由兩個csv文件組成,一個為比賽的測試集,一個為比賽的訓練集,選取訓練集數(shù)據(jù)作為研究數(shù)據(jù)。
該訓練數(shù)據(jù)集包括2017年5月10日至2017年5月24日兩個星期的共三百萬條摩拜單車運營數(shù)據(jù)。其每一條元組包括7個數(shù)據(jù)項,分別為orderid(訂單編號),userid(用戶編號),bikeid(單車編號),biketype(單車類型),starttime(訂單的起始時間),geohashed_start_loc(訂單起始地點的geohash編碼),geohashed_end_loc(訂單終止地點的geohash編碼)。
數(shù)據(jù)的獲取和處理分為數(shù)據(jù)導入,數(shù)據(jù)計算,數(shù)據(jù)篩選,以及數(shù)據(jù)統(tǒng)計四個方面。
2.1.1 數(shù)據(jù)導入
為獲取需要的數(shù)據(jù),先使用SQL Sever Management創(chuàng)建數(shù)據(jù)庫以及數(shù)據(jù)表,之后用BULK語句將train.csv文件導入數(shù)據(jù)表。
2.1.2 數(shù)據(jù)篩選
將geohash編碼轉(zhuǎn)化為經(jīng)緯度坐標后,為選取北京作為研究區(qū)域,將其中經(jīng)度大于116,緯度大于39的數(shù)據(jù),使用SQL語言篩選出,并存入一個新的表,作為去除異常數(shù)據(jù)后的數(shù)據(jù)集。
在IDEA繼承開發(fā)環(huán)境下,創(chuàng)建JAVA WEB工程項目。在主頁文件index.jsp中,使用HTML5標簽語言,JSP,JavaScript語言,構(gòu)筑頁面,調(diào)用百度地圖開放平臺的應用程序接口。
先創(chuàng)建ActiveXObject對象,實現(xiàn)JavaScript對數(shù)據(jù)庫的連接。從數(shù)據(jù)庫中讀取出并篩選出起始訂單數(shù)量以及終止訂單數(shù)量大于200的點的經(jīng)緯度數(shù)據(jù)后,使用Map類,Point類,Marker類在頁面的地圖上標點,并且使用BMap.InfoWindow創(chuàng)建信息窗口以及其響應的響應事件。
從而獲得所有滿足條件的數(shù)據(jù)點被標識在地圖上的圖像,通過放大地圖可以獲取北京工商大學附近滿足條件的點的圖像。
使用JavaScript,連接數(shù)據(jù)庫,從中篩選出所有與北京工商大學相關(guān)聯(lián)的元組,即起始點geohash編碼為北京工商大學的訂單數(shù)據(jù)。再選取訂單數(shù)大于5的點,標在地圖上。
根據(jù)北京工商大學作為起點高關(guān)聯(lián)點圖,圈出由北京工商大學作為起點的單車流向范圍,在單車流向范圍內(nèi),篩選出8個訂單數(shù)大于200的代表性POI點,作為本次研究的廣義研究點。同樣使用JavaScript調(diào)用百度地圖開放平臺的API接口的方式在地圖上標識出研究點。
在確定研究點后,通過之前設(shè)置的信息窗口得到所有點的geohash編碼,使用SQL語言,從去除異常數(shù)據(jù)后的數(shù)據(jù)集中篩選出他們的數(shù)據(jù),存入多個數(shù)據(jù)表。
2.1.3 數(shù)據(jù)統(tǒng)計
使用SQL語言統(tǒng)計研究點作為起始點的訂單數(shù)量和作為終止點的訂單數(shù)量,并將其存入一個表。統(tǒng)計各個研究點在兩個星期中每一天的總訂單數(shù)量,每一天不同時段的訂單數(shù)量以及每兩個研究點之間發(fā)生的訂單數(shù)量。
將上述統(tǒng)計結(jié)果導出為csv文件,根據(jù)以上結(jié)果使用MatLab作圖,運用樣條曲線擬合方法獲取由散點擬合后的光滑圖像。使用JavaScript調(diào)用百度地圖開放平臺的API接口,在地圖上繪制車輛流向圖。以研究點間訂單的數(shù)量num為參數(shù)變量,設(shè)置線條顯示寬度的為1+0.1*num,設(shè)置線條的透明度為0.2*num,以標識車輛流向數(shù)量的不同。線條越寬、越不透明的線條代表該線路車輛的流動量越多。
2.2 數(shù)據(jù)處理
2.2.1 將geohash編碼轉(zhuǎn)換為經(jīng)緯度
該數(shù)據(jù)集所提供的地址信息為geohash編碼的格式,該編碼將二維的經(jīng)緯度坐標點轉(zhuǎn)換為一維的字符串,某一個字符串表示了某一個矩形區(qū)域,也就是說在這個矩形區(qū)域中的所有經(jīng)緯度點都共享一個字符串。
內(nèi)部的實現(xiàn)采用的是geohash算法,其實質(zhì)其實是二分法。
由于緯度范圍在[-90,90],經(jīng)度范圍在[-180,180],拿到一組經(jīng)緯度location(x,y)時,先對緯度區(qū)間[-90,90]二分,[-90,0]及[0,90],判斷緯度在哪個區(qū)間,如在[0,90]區(qū)間內(nèi)記結(jié)果為1,否則為0,以此類推多次使用二分法,在到達選取的最大長度時停止。對經(jīng)度進行相同的操作,獲得兩個二進制串,之后偶數(shù)位放經(jīng)度,奇數(shù)位放緯度,把2串編碼組合生成新串。最后采用base32進行編碼,獲取geohash編碼。