網路城邦
上一篇 回創作列表 下一篇  字體:
Python練習- 台鐵車站分類
2019/10/06 23:08:00瀏覽1178|回應0|推薦6

<>台鐵車站分類>>

*練習緣由

以圖一地圖視覺化形式,按台鐵各車站營運情形,進行分類概況分析

 

*練習過程

#資料蒐集

#車站營運分類指標

#資料整理

#分類模型及資料學習

#分析結果視覺化

 

#資料蒐集

>資料來源為政府Open Data平台上的台鐵每日各站進出站人數”JSON格式檔案,下載當時的資料期間為今年的4/23~8/31.

>資料內容有

. 進站人數(gateInComingCnt)

. 出站人數(gateOutGoingCnt)

. 車站代碼(staCode)

. 日期(trnOpDate)

 

#車站營運分類指標

嘗試以各站進出人數為基準,按以下二個面向,作為車站的分類指標

>車站各月進出站人數的波動程度

>最近進出站人數趨勢

人數是增加還是減少?其增減幅度是高或低?

 

#資料整理

>利用pandas套件的read_json()函式讀入資料檔案並轉為DataFrame物件

>利用DataFrame.groupby()函式,求出今年5~8,各車站各月的總進出站人數之和

>計算車站各月進出站人數的波動程度

. 利用DataFrame.mean()函式計算出5~8月各站每月進出站人數的平均數

. 利用DataFrame.std()函式計算出5~8月各站每月進出站人數的”標準差”

. 車站進出站人數波動程度 = (標準值 / 平均數)

>最近進出站人數趨勢

各站今年8月進出站人數,與其5~8平均數的差異幅度

 

#分類模型及資料學習

>本次練習以k-平均集群法(k-means clustering)為分類模型

>分類群組數目問題

. 既然是對車站進行分類,那麼要對分析對象分成幾類群組,是進行此類分析時的最基本問題.k-平均集群法,分類群組是個事先設定的外生變數,它沒辦法從資料中自身內生求出最佳群組數目.

. 我們可利用所謂的手肘法則(elbow method)來決定分類群組數目.k-平均集群法的原理是最小化各群組內的變異加總(total within-cluster sum of squqre,wcss).我們可將群組數目由2依序遞增至10,分別算出不同群組數目下的群內wcss,其結果我們可畫出如圖二類似手肘的曲線圖,橫軸為群組數目,縱軸為wcss.隨著群組數目增加,wcss一路遞減,但群組數目並不是愈多愈好,因分類群組太多,會有資料模型過度擬合(overfitting)問題,我們將以圖二曲線彎曲處所對應的群組數目,即各群內wcss值趨於收斂的轉折點,作為最佳的分群數目,此例我們選擇分類群組數目為4.

>群組數目為4情形下的k-平均集群法的分類結果如圖三,橫軸代表各車站進出站人數的波動大小,縱軸代表最近人數增減幅度,分組結果以不同顏色代表:

. 紅色點為cluster 0 ,其人數波動幅度偏高,且近期人數在增加中

. 藍色點為cluster 1,其人數波動幅度不大,且近期人數增減幅度小.大多數的車站都被歸類為cluser1,台北車站(圖三中的x)也是屬cluster1

. 綠色點為cluster2,其人數波動幅度及近期人數減幅,二者皆大

. 橘色點為clustter3,其近期人數雖同cluster2一樣呈減少之勢,但其波動及減幅比cluster2.

>從分類結果來看,我們對cluster0(進出站人數明顯變多)cluster2(進出站人數明顯變少)比較感興趣

. cluster0,近期人數增幅的前五名車站: 海科館(深澳線),合興(內灣線),新馬(北廻線),富里(花東線),太麻里(南廻線)

. cluster2,近期人數減幅的前五名車站:加祿(南廻線),長榮大學(沙崙線),八斗子(深澳線),崁頂(屏東線),平和(花東線)

. 我們發現cluster0cluster2, 近期人數增幅或減幅前五名的車站,都不在西部主幹線路線上

 

#分析結果視覺化

我們按下列順序,依序堆疊畫出地理資訊視覺效果,結果如圖一

>台灣地圖

. 從政府Open Data平台下載台灣地圖shp, 並利用geopanda套件的read_file()函式讀入shp檔並轉為GeoDataFrame物件

. 原台灣地圖的經緯度範圍,包含金門,馬祖,太平島,釣魚台等離島,利用GeoDataFrame.drop()函式將這些離島經緯度範圍刪除

. 利用matplotlib.pyplot模組畫出台灣地圖

>台鐵路網圖

. 從政府Open Data平台下載台鐵路網圖shp, 並利用geopanda套件的read_file()函式讀入shp檔並轉為GeoDataFrame物件

. 利用matplotlib.pyplot模組,將台鐵路網圖套在台灣地圖上

>車站分類視覺效果

. 從政府Open Data平台下載台鐵的”車站基本資料集”JSON格式檔案

. 利用pandas套件的read_json()函式讀入車站資料檔案並轉為DataFrame物件

. 利用geopandas.GeoDataFrame()函式,將車站的DataFrame物件轉為GeoDataFrame物件

. 利用matplotlib.pyplot模組,將分類後的車站結果畫在台鐵路網圖上

-          紅色點代表分類為cluster0車站

-          藍色點代表分類為cluste1車站

-          綠色點代表分類為cluster2車站

-          橘色點代表分類為cluster3車站

( 知識學習其他 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=gwogo&aid=129891935