天天看點

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

實驗

github倉庫:

https://github.com/zx4321/BigDataVisualization

https://github.com/zx4321/BigDataSpark

1. 問題描述

題号:(選修)15号

題目名稱:紐約市計程車乘客的出行特征

複制你的問題描述:資料集:http://chriswhong.com/open-data/foil_nyc_taxi/為2013年紐約市計程車出行記錄,請你基于spark平台,分析一下乘客的出行特征。

介紹你要解決的問題

  1. 問題的背景/意義

這是紐約市2013年計程車的出行資料。通過資料分析,可以得到計程車出行的路程分布、路程長度、上車中心點等。比如獲得上車的中心點,就可以判斷計程車在這附近能夠最大可能載客。

  1. 問題的技術難點

對大資料架構的熟悉,大資料可視化,大資料海量資料處理。

2. 基于的系統/算法

介紹你使用的主要的系統或者算法庫

  1. 系統架構/算法原理

軟體開發系統:

  1. Intellij專業版
  2. Spark4.0
  3. JDK8.0
  4. scala2.11.12
  5. hadoop-2.7.7
  6. Tomcat9.0
  7. Echart4.0

算法原理:

  1. Kmean算法:

b. 你為什麼選擇使用這個系統/算法

Spark2.4.0 、scala2.11.12 、hadoop-2.7.7這是一個典型的大資料處理架構,能夠快速的對大批量的大資料進行分析。

Tomcat9 、   Echart4.0 主要是用于java web程式可視化,其中Echart4.0能夠對千萬級的資料進行網頁渲染。

Kmean算法能夠獲得一批資料的中心點,可以得到某個地區的上車中心點,那麼計程車在中心點資料能夠最大可能獲得乘客。

  1. 你是如何使用這個系統/算法的

首先使用spark進行大資料的處理,得到自己想得到的資料,并儲存為對應格式的檔案,然後使用java web程式對檔案進行展示分析。

(誤區:之前認為大資料可視化,就應該使用spark對應的可視化工具,比如Apache Zepplin 、 Spark Notebook , 我認為在這個實驗上面是一個誤區,導緻我花費一兩天時間查這兩個架構(也有可能我菜,不會用),但是采用這兩個架構也能成功,但是我覺得費時費力,還不如采用web技術的架構,比如Echart4等。我目前采用的方案是,Spark分析資料,得到自己想要的資料,儲存為檔案(也可以是資料庫檔案),然後采用java web 程式進行結果展示, java程式需要另外編寫,不應該在spark架構下寫)

3. 實驗流程

詳細介紹你完成實驗的主要流程

3.1 資料格式分析

實驗資料壓縮包(tripData2013.zip):11GB

實驗資料儲存目錄:

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

實驗資料儲存格式(CSV):

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

3.2 spark代碼編寫和運作結果

3.2.1 初始化spark

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

3.2.2 讀取檔案(小技巧:設定大小不一樣的檔案,友善測試檔案,資料為一月份資料)

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

3.2.3 删除第一行,并将資料集緩存

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

3.2.4 統計資料行數

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

運作結果:

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

3.2.5 統計每次乘車的乘客數量,并儲存為txt檔案

說明:通過生成一個新的RDD(passengerCountRDD),格式為(乘客數量:1),比如(1人:1);采用了reduceByKey這個算子,統計所有的資料,得到結果,比如(1人:1萬次)。然後儲存資料為TXT檔案,用于後期java web程式可視化。

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

儲存資料為:

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

3.2.6 計算每次乘車的乘客平均數量

說明: 通過3.2.5處理的得到資料passengerCount,通過 乘客數量* 乘以乘客乘車次數 得到所有的乘客數量,然後除以資料總數(dataLength)得到平均每次乘車的乘客數量。

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

運作結果:

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

3.27 擷取某月中每天的打車的人數

說明: 通過SimpleDateFormat函數,格式化時間(例如:2013/1/1  15:11:48),再通過formatter.parse(“2013/1/1  15:11:48”).getDate 擷取這是幾号,得到RDD資料,格式為(1号,一次),最後通過reduceByKey算子,得到所有的資料,例如(1号, 一萬次),代表在2013年1月1号這天有一萬個人打車。最後儲存為TXT檔案。

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

運作結果:

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

3.2.8 擷取一天中各個時間段打車的人數

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

運作結果:

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

3.2.9 擷取乘車的平均時間

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

運作結果:

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

3.2.10 擷取乘車的時間的分布(每100S)

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

運作結果:(0S 代表計程車載客運作時間小于50S)

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

3.2.11 擷取乘車的距離的分布(每1KM)

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

運作結果:

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

3.2.12 Kmean 聚類分析載客中心點

将地圖坐标資料儲存為單獨的檔案,用于可視化分析

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

  調用Kmean函數,訓練資料的中心點

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

運作結果:

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

3.3 可視化及其乘客的出行特征分析

Echart官網:http://www.echartsjs.com/index.html

Github:引用了https://github.com/lihaogm/spark-echarts-log的java web程式

3.3.1 完成每個HttpServlet的編寫

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

3.3.2  配置<web-app>

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

3.3.3  每次乘車時間長度可視化

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

分析:可以看出乘客乘車時間最多在400S 左右,其中50S以下的也有78817次,最長的時間也有10800S。

3.3.4  每次乘車距離可視化

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

分析:乘客乘車距離大多在1KM左右,500M以下的也有667477次,最長的有100KM.

3.3.5  每天各個時間段乘車資料可視化

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

分析:可以看出淩晨5點鐘打車的人最少,晚上18-19點鐘打車的人最多。

3.3.6  每月每天乘車資料可視化

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

分析:可以看出乘客的乘車的資料呈現周期性變化。

3.3.7  每次乘車乘客資料可視化

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

分析:乘客大多數在一人,最多的有9人

3.3.8 上車地點可視化(千萬級資料渲染)

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論

分析:通過大資料渲染,可以清晰的看到乘客乘車的中心點。

4. 實驗過程分析

測試你設計實作的系統/算法的效果

  1. 測試環境:CPU、記憶體、磁盤、網絡(如有)、GPU(如有)

CPU:I5-7th

記憶體:8G

磁盤:機械1T

  1. 資料集:資料集的來源(是自己生成的還是下載下傳的,生成程式是如何編寫的,下載下傳的資料是選取了一部分還是全部使用了)、資料檔案或資料庫占用磁盤空間大小、包含的記錄個數(行數)、包含的屬性及其意義

通過http://chriswhong.com/open-data/foil_nyc_taxi/資料集下載下傳得到的資料,一共11G

紐約計程車 spark分析 Echart可視化2. 基于的系統/算法3. 實驗流程4. 實驗過程分析5. 結論
  1. 測試算法/系統的效果,如誤差大小,準确率等随參數的變化情況,用圖表展示并作較長的描述

Kmean 随着疊代的次數正确率而上升。

5. 結論

 通過這次大資料實驗,我學會了spark+scala的基本使用,同時了解大資料可視化的困難。也了解了大資料可視化的特點,同時明白了大資料的重要性,和可視化對資料分析的重要性。也寫了web程式在可視化中的重要特點。

繼續閱讀