使用MapReduce創建直方圖
使用MapReduce創建直方圖
這個例子展示了如何可視化大型數據集中的模式,而無需同時將所有觀察數據載入到內存中。它演示如何計算足以生成圖形的數據的較低卷摘要。
直方圖是一種常見的可視化技術,它給出了變數的概率密度函數(pdf)的經驗估計。直方圖非常適合大數據環境,因為它們可以將原始輸入數據的大小減少到計數向量。每個計數是落在一組連續的數字區間或分區中的每個觀測值的觀測值的數量。
該MapReduce的功能是分別計算對數據的多個塊計數。然後mapreduce從所有塊中計數總和。在這個例子中,map函數和reduce函數都非常簡單。不過,您可以使用他們收集的摘要信息來構建靈活的可視化。
內容
準備數據
運行MapReduce
組織結果
可視化結果
準備數據
使用airlinesmall.csv數據集創建數據存儲。這個12兆位元組的數據集包含了幾個航空公司的29個航班信息欄,包括到達和離開時間。在本例中,選擇ArrDelay(航班到達延遲)作為感興趣的變數。
ds = tabularTextDatastore("airlinesmall.csv","TreatAsMissing","NA");ds.SelectedVariableNames ="ArrDelay";
數據存儲區將「NA」值視為缺失,並默認使用NaN值替換缺失的值。此外,SelectedVariableNames屬性允許您僅使用所選的感興趣變數,您可以使用預覽進行驗證。
預覽(DS)
運行MapReduce
該映射精簡功能需要的映射函數和減小函數作為輸入。該映射程序接收大量數據並輸出中間結果。減速器讀取中間結果併產生最終結果。
在此示例中,映射器通過將到達延遲累計到分箱中來收集具有各種到達延遲量的航班計數。倉通過第四輸入參數映射函數定義的,邊緣。
顯示地圖功能文件。
函數visualizationMapper(data,?,intermKVStore,edges)%%計算在EDGES向量指定的每個區間%中有多少航班有到達延遲,並將這些計數添加到INTERMKVSTORE。%counts = histc(data.ArrDelay,edges);添加(intermKVStore,"Null",計數);
直方圖的bin大小很重要。數據集中的重要細節可能會掩蓋太寬的分區。過窄的倉可能導致噪音直方圖。處理非常大的數據集時,最好避免對數據進行多次掃描以嘗試不同的bin寬度。避免進行多次傳球的一個簡單方法是收集狹窄垃圾箱的計數。然後,為了獲得更大的箱子,您可以聚合相鄰的箱子數量,而無需重新處理原始數據。航班到達延誤以1分鐘為單位進行報告,因此定義1分鐘的艙位,從-60分鐘到599分鐘。
邊緣= -60:599;
創建一個匿名函數來配置地圖功能以使用垃圾桶邊緣。匿名函數允許您通過為其第四個輸入參數指定特定值來專門化映射函數。然後,您可以通過匿名函數調用map函數,僅使用mapreduce函數期望的三個輸入參數。
ourVisualizationMapper =...@(data,info,intermKVstore)visualizationMapper(data,info,intermKVstore,edges);
顯示縮小功能文件。減速器將映射器存儲的計數相加。
函數visualizationReducer(?,intermValList,outKVStore)%從中間存儲獲取所有中間結果如果hasnext(intermValList)outVal = getnext(intermValList);其他outVal = [];結束而hasnext(intermValList)outVal = outVal + getnext(intermValList);結束添加(outKVStore,"Null",outVal);
使用mapreduce將映射和減少函數應用於數據存儲區ds。
result = mapreduce(ds,ourVisualizationMapper,@visualizationReducer);
********************************* MAPREDUCE進展*********************************地圖0%減少0%地圖16%減少0%地圖32%減少0%地圖48%減少0%地圖65%減少0%地圖81%減少0%地圖97%減少0%地圖100%減少0%地圖100%減少100%
mapreduce返回輸出數據存儲,結果和當前文件夾中的文件。
組織結果
從輸出數據存儲讀取最終的箱數結果。
r = readall(result);counts = r.Value ;
可視化結果
使用整個數據範圍繪製原始垃圾箱計數(除了映射器排除的幾個異常值外)。
欄(邊緣,計數,"hist");標題("航班延誤分布")xlabel("Arrival Delay(min)")ylabel("Flight Counts")
直方圖有很長的尾巴。查看受限的垃圾桶範圍,以便更好地觀察大多數航班的延誤分布情況。放大顯示有一個報告工件;通常會將延遲整理為5分鐘的增量。
XLIM([ - 50,50]);電網對電網未成年人
使用移動平均濾鏡平滑計數,以消除5分鐘記錄偽影。
smoothCounts = filter((1/5)* ones(1,5),1,counts);數字bar(邊緣,smoothCounts,"hist")XLIM([ - 50,50]);標題("航班延誤分布")xlabel("Arrival Delay(min)")ylabel("Flight Counts")電網對電網未成年人
為了使圖形更加平衡,請不要顯示大多數延遲航班的前1%。假設您在完整傳遞數據的過程中收集了適當的信息,則可以通過多種方式調整可視化效果,而無需重新處理完整的數據集。
經驗CDF = cumsum(計數);經驗CDF =經驗CDF /經驗CDF(結束);quartile99 = find(經驗CDF> 0.99,1,"first");low99 = 1:quartile99;數字empiricalPDF = smoothCounts(low99)/ sum(smoothCounts);bar(邊緣(low99),empiricalPDF,"hist");XLIM([ - 60,邊緣(quartile99)]);ylim([0,max(empiricalPDF)* 1.05]);標題("航班延誤分布")xlabel("Arrival Delay(min)")ylabel("概率密度")
※絕地求生:天美剛上線吃雞就搞事,10分鐘快速模式?藍洞瞬間懵B
※新干詩人詠桃紅
TAG:全球大搜羅 |