iT邦幫忙

0

[Python]資料視覺化M05─運用matplotlib完成多圖同時呈現

Hi! 大家好,我是Eric,上篇教大家如何用Python畫長條圖了,這篇是Python資料視覺化的最後一篇,要來教大家如何同時呈現多張圖

後續文章會朝向機器學習的方向,請大家期待吧!!

/images/emoticon/emoticon19.gif


  • 緣起:台鐵一直以來是台灣非常重要的大眾運輸工具,雖然時常遭遇誤點,但每逢連假期間總是乘載著返鄉或出遊的大家,平時也肩負起通勤運輸的重要任務。台鐵於2017年底總計有228個車站,那各站的載客數為何呢?這次挑選載運量最高的前4個站(臺北、桃園、中壢及臺南)來分析。
  • 方法:運用 [Python]的[matplotlib] 套件。
  • 使用資料:交通部臺灣鐵路管理局 臺鐵統計資訊-各站客貨運起訖量
  • 參考來源:台灣資料科學年會-手把手打開Python資料分析大門
    https://www.slideshare.net/tw_dsconf/python-83977705

1. 載入套件。

import numpy as np                # 資料處理套件
import pandas as pd               # 資料處理套件
import matplotlib.pyplot as plt   # 資料視覺化套件

2. 載入資料。

TRA = pd.read_csv("passenger number of TRA(105-106).csv")
TRA.head(3)    # 顯示前3筆資料

https://ithelp.ithome.com.tw/upload/images/20190409/20115774ayRHfakScJ.png

3. 資料操作。
由於原資料的載客數單位為人次,為利視覺化結果簡潔,將載客數改為百萬計

pr = [None] * len(TRA["passenger"])       # 建立一個空列表,數量為載客數欄位資料的數量

# 以for迴圈逐一將載客數資料自左向右取5個字元
for i in range(len(TRA["passenger"])):     
    pr[i] = TRA["passenger"][i][:5]

# 以for迴圈逐一將載客數資料中的","替換成"."
for i in range(len(pr)):
    pr[i] = pr[i].replace(",", ".")
    
# 將原資料替換掉,並重新命名欄位名稱  
TRA["passenger"] = pr
TRA.rename(columns = {"passenger" : "passenger(million)"}, inplace = True)

4. 開始畫圖。

year = str(np.unique(TRA["year"]))   # 將年份資料單獨取出
year = year.split(" ")               # 以空白字元分隔年分資料

# 畫第一張圖,位於左上角
# 其中pd.DataFrame(資料,dtype=np.float)為將載客數字串類別更改為float類別
# 其中TRA[TRA.station == "Taipei"]["passenger(million)"]為擷取出台北站資料,再擷取出載客數欄位資料
plt.subplot(2, 2, 1)                 # plt.subplot(列數, 行數, 圖形編號)設定第一張圖位置
plt.plot(year, pd.DataFrame(TRA[TRA.station == "Taipei"]["passenger(million)"],dtype=np.float)
        ,"r")                         # plt.plot(x軸資料, y軸資料, 線顏色)
plt.title("Taipei", {'fontsize':15})  # 設定圖標題及其文字大小

# 畫第二張圖,位於右上角
plt.subplot(2, 2, 2)
plt.plot(year, pd.DataFrame(TRA[TRA.station == "Taoyuan"]["passenger(million)"],dtype=np.float)
        ,"g--")
plt.title("Taoyuan", {'fontsize':15})

# 畫第三張圖,位於左下角
plt.subplot(2, 2, 3)
plt.plot(year, pd.DataFrame(TRA[TRA.station == "Zhongli"]["passenger(million)"],dtype=np.float)
        ,"b-.")
plt.title("Zhongli", {'fontsize':15})

# 畫第四張圖,位於右下角
plt.subplot(2, 2, 4)
plt.plot(year, pd.DataFrame(TRA[TRA.station == "Tainan"]["passenger(million)"],dtype=np.float)
        ,"m:")
plt.title("Tainan", {'fontsize':15})        
        

# 儲存圖檔
plt.savefig("Passengers of the top 4 TRA station.jpg",   # 儲存圖檔
            bbox_inches='tight',               # 去除座標軸占用的空間
            pad_inches=0.0)                    # 去除所有白邊
plt.close()      # 關閉圖表      

5. 大功告成。

  • 可看出105-106年,只有臺南站的載客量成長,其它臺北、桃園及中壢站載客量皆為下降。
  • 臺北站的載客量約為第二名桃園站的2.2倍

https://ithelp.ithome.com.tw/upload/images/20190409/20115774jJTsw4NrFU.jpg

P.S. 本篇程式碼參考台灣資料科學年會-手把手打開Python資料分析大門,並利用網路實際開放資料執行


尚未有邦友留言

立即登入留言