原創|行業資訊|編輯:陳俊吉|2017-02-20 14:17:49.000|閱讀 468 次
概述:很難有機會接觸這么多的實際真實數據。通過對于這些數據的分析,初步了解大數據的處理方式。進一步掌握MongoDB的特性,熟練Excel的高級用法。這里只是做分析,不提供源代碼,畢竟是一個比賽。這里只是做分析,不提供源代碼,我也無意開發一個完整的程序。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
很難有機會接觸這么多的實際真實數據。
通過對于這些數據的分析,初步了解的處理方式。
進一步掌握MongoDB的特性,熟練Excel的高級用法。
這里只是做分析,不提供源代碼,畢竟是一個比賽。
這里只是做分析,不提供源代碼,我也無意開發一個完整的程序。
//research.xiaojukeji.com/competition/detail.action?competitionId=DiTech2016
構建一個模型,根據天氣,交通,區域里面的各種設施,以往歷史數據,預測未來的某個時間點,某個區域里,打車需求的缺口。整個算法其實就是一個有監督的機器學習的過程。
(5月20日版本)下載后的整個壓縮數據包575M,其中包括的訂單數據大約900萬條。(其他Master表數據量很小,這里忽略不計)
使用MongoDB存儲的話,大概使用2GB的空間,全部導入之后,工作用計算機十分卡頓。MongoCola管理軟件失去響應。所以,這里的訂單按照日期導入。(訓練的時候,按照天來訓練)
注意:官方的訂單數據的 訂單號 OrderID是主鍵重復的。這里以第一次出現的訂單號的數據為準。
官方對于重復訂單的解釋:
關于訂單的目標區域HashCode,這里發現一部分數據是無法找到的,可能是跨區域的。
(全部訂單:498789 ,目的地可以找到:406138,跨區域:92651)
由于數據量非常龐大,所以這里建議將中間的計算結果也放入數據庫中備用。
訂單數據整理,主要是整理出各個時段,各個地域的訂單數據。
數據整理盡量使用LINQ進行處理,MONGODB查詢是消耗時間的!!!,這里數據庫只是用作數據的存儲不做計算
private void btnImportDB_Click(object sender, EventArgs e)
{
string rootFolder = txtRootDir.Text;
//Order: Root + "\order_data"
foreach (var filename in Directory.GetFiles(rootFolder + "\\order_data"))
{
if (!filename.Contains("._"))
{
string strDate = filename.Substring(filename.LastIndexOf("_") + 1);
var colname = "Order_" + strDate;
Database.Clear(colname);
var orderlist = new List<Order>();
var read = new StreamReader(filename);
while (!read.EndOfStream)
{
var o = Order.Gernerate(read.ReadLine());
orderlist.Add(o);
}
orderlist = orderlist.Distinct(x => x.order_id).ToList();
Database.InsertRecBatch(orderlist, colname);
var orderGaplist = new List<OrderGap>();
Database.Clear("OrderGap_" + strDate);
for (int time = 1; time < 144 + 1; time++)
{
for (int area = 1; area < 66 + 1; area++)
{
var m = new OrderGap() { DistrictId = area,TimeSlient = time};
m.Total = orderlist.Count((x) => { return x.DistrictID == area && x.TimeSlient == time; });
m.Gap = orderlist.Count((x) => { return x.DistrictID == area && x.TimeSlient == time && x.driver_id == "NULL" ; });
m.GapPercent = m.Total == 0 ? 0 : Math.Round(((double)m.Gap / m.Total) * 100, 2);
orderGaplist.Add(m);
}
}
Database.InsertRecBatch(orderGaplist, "OrderGap_" + strDate);
//暫時只分析一天數據
break;
}
}
}
以下是2016-01-01的數據分析。藍色的是GAP缺口數,紅色的是Total數。
一天24個小時整體需求分布可以看個大概了。
PS 區域1 :占整體的5.1%訂單量,有一定的參考價值
區域51 :占整體的22.5%訂單量,有一定的參考價值
整體上看,所有區域的分時圖 2016-01-01的數據圖:
這里看到,整個24小時分布極不均衡。考慮到 01-01 是一個特殊的日子,大家為了跨年而在零點之后選擇打車也是可以理解的。
同樣的51區域,2016-01-02的情況則比較正常,整體的高峰出現在夜間16:50 - 17:20(評價訂單850) 左右。21:10,22:00也是兩個小高峰(平均訂單720)。
各項指標分析
以下數據為2016-01-01的數據統計
整體有效訂單數:498789(訂單ID去重復)
66個區域的訂單分布是極其不均衡的.
MAX | MIN | AVG |
---|---|---|
112023 | 71 | 7557.4 |
排名后33位的,總共只有整體的4.37%的訂單
排名前5位的,總共只有整體的50.87%的訂單
我們將POI總數/30 和訂單數一起放到柱狀圖中發現,POI總數和訂單數應該有一些聯系。
一個區域POI數越多說明這個地區越是繁華,從這里打車的需求就越多。
滴滴打車的POI分為了25個分類,我們選取了 2016-01-01 對于POI的分類和訂單之間的關系也作了研究。
按照實際來說,例如有100家KTV,則每家KTV為貢獻一些訂單。同理,如果是飯店,每家飯店也會貢獻一些訂單。
這里的圖表示了各個POI分類的數量和總體訂單的關系。
A:不是所有設施級關系都是a#b:xx的格式,有的設施只有一級,而有的設施甚至有三級,#號只是表示分割層級的關系,如果是設施只有一級則為a:xx,而如果是2級則是a#b:xx,如果是3級則是a#b#c:xx,依次類推。
Q: 關于POI數據的分類一共分多少1級類目,多少2級類目,且是否有類目示意的對照表?
A: 這個問題的答案都在數據中,參賽者可以自行統計。類目對應信息其實不是很重要,重要的是分析其和目標的關聯程度。
天氣數據庫是里面的數據分為PM2.5的值。天氣狀態編碼(編碼和實際對應關系未知),以及溫度情況。
按照道理來說,如果天氣越差,則打車的需求就越旺盛。
下面我們來分析一下天氣和訂單的關系。
選擇 2016-01-03作為分析對象。
天氣數據每個時間片測試兩次,為了方便觀察,我們選擇第一次測試結果作為考察對象。
當天全時段的PM2.5和溫度分時圖
天氣類型編號和天氣描述,請參見 滴滴算法大賽算法解決過程 - 機器學習
當天的全區域的訂單情況分時圖
從一天的時間看,在不明確天氣類型的時候,PM2.5和溫度對于整體的影響很難看到直接關聯的證據。
我們考察最繁華的51區域,周一到周日對于訂單量的關系。
這里觀察到并沒有什么規律可循
第05區域也是這樣的。
這里的交通數據是每個區域里面,不同擁擠狀況的道路條數。
2016-01-07 #51 區域分時擁堵狀態圖 (0:10 -23:50 143個數據)
大部分情況下,Level1的道路條數占據了絕大多數。(LV4最擁堵)
看一下Level4 #51區域的情況
詳情請咨詢!
客服熱線:023-66090381
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn