好的視覺化圖表可以讓人迅速掌握資料的特性及重要意涵,是在資料處理中相當重要的一環!
前面分別介紹過台銀即時匯率資料及股票交易資料的抓取操作範例!
也介紹過將資料儲存至sqlite資料庫的方法,當資料日積月累的儲存一段時間後,也就可以進行資料的分析及圖表繪製工作了!
這次我們延續之前台灣股票套件(twstock)的操作,利用其套件進行抓取指定股票(本次操作以「廣達(2382)」為例)前31天的股價資料,並將其資料利用python視覺化圖表工具:Matplotlib,進行圖表繪製操作,作為練習Matplotlib及資料視覺化的入門。
首先確定你已經安裝本次操作所需的套件:twstock, matplotlib
若尚未安裝或不確定,可以透過以下指令進行安裝或檢測:
pip install -U twstock
pip install -U matplotlib
想對Matplotlib有更完整的認識,可以到這裡逛逛!
這次的操作練習我們分成二個層次進行操作:
第一階段:我們著重將資料抓取後,迅速繪製出圖表並加以儲存、呈現。
第二階段:我們則進一步,將重點放在圖表的設定操作上,讓圖表呈現更具個性化!
好囉~~現在就先看第一階段目標如何達成囉...........
from matplotlib import pyplot as plt
from twstock import Stock
tw2382 = Stock("2382") # 設定指定的股票(代號)
x = list(range(-31, 0)) # 產生一組[-31~-1]的列表(list)作為對應
y1 = tw2382.price # 抓取指定股票前31天收盤價
y2 = tw2382.high # 抓取指定股票前31天最高價
y3 = tw2382.low # 抓取指定股票前31天最低價
plt.title("廣達(2382)前31天交易價格變動趨勢圖") # 設定圖表標題
plt.xlabel(f"日期區間") # 設定x軸標籤
plt.ylabel("價格(元)") # 設定y軸標籤
plt.plot(x, y1) # 繪製第一組數線
plt.plot(x, y2)
plt.plot(x, y3)
plt.savefig('tw2382_o.png')
plt.show() # 顯示圖表
執行結果,會將繪製的圖表以檔名:tw2382_o.png儲存於程式目錄下,如下圖所示:(驚不驚喜~~意不意外...簡單吧?!呵~~)
基本上,這樣就可以完成將資料視覺化的初步工作!
在第一階段中~~你唯一可能遇到的問題,就是中文無法正常顯示(變成亂碼)的狀況,這問題我在之前就有先描述談論過了,有中文無法正常顯示困擾的請看這裡參考!
假如你已經滿意以上的結果,就可以打完收工~~吃飯睡覺去了!
========== ******************* ============
若是你跟我一樣有點「龜毛」~~想要對圖表進行一些個人化的設定工作,那就歡迎繼續看下去~~~
第二階段:我們會進一步設定包括~~標題格式、X,Y軸標籤設定、折線線條設定、圖例等相關操作設定。
目標是將上圖透過相關設定產生以下視覺效果:
如何讓醜小鴨變天鵝呢~~~我們直接貼上第二階段程式碼來看~~~
from matplotlib import pyplot as plt
from twstock import Stock
from datetime import timedelta, date
n_date = date.today()
tw2382 = Stock("2382")
# x = []
# for i in range(31, 0, -1):
# x.append((n_date - timedelta(days=i)).strftime("%m/%d"))
x = list(map(lambda i: (n_date - timedelta(days=i)).strftime("%m/%d"), range(31, 0, -1)))
y1 = tw2382.price # 抓取指定股票前31天收盤價
y2 = tw2382.high # 抓取指定股票前31天最高價
y3 = tw2382.low # 抓取指定股票前31天最低價
plt.figure(figsize=(9, 7)) # 設定圖表尺寸(9, 5)→900*500
plt.title("廣達(2382)前31天交易價格變動趨勢圖", color = 'blue', fontsize=20) # 設定圖表標題
plt.xlabel(f"日期區間({x[0]}~{x[-1]})", fontsize=14) # 設定x軸標籤
plt.ylabel("價格(元)", fontsize=14) # 設定y軸標籤
plt.plot(x, y1) # 繪製第一組數線
plt.plot(x, y2, marker='o', linestyle = '-.') # 設定折點圖示符號、線條樣式
plt.plot(x, y3, marker='x', linestyle = '--')
# 設定圖表示例
plt.legend(("收盤價", "最高點", "最低點"), loc="best", framealpha=0.25, prop={'size': 'medium'})
plt.ylim(70, 78) # 設定y軸數值區間範圍
plt.xticks(rotation=60, color = (0.3, 0, 0)) # 設定x軸標籤型式
plt.savefig('tw2382_f.png') # 命名儲存圖檔於同目錄下
plt.show() # 顯示圖表
其中有一些涉及到日期操作及其格式化、lambda(匿名函示)操作的部分,這裡就不花篇幅說明了~~有困擾或有興趣的朋友,我們後續有緣再見囉~~~哈!
主要說明一點:程式中第8~10行,有關日期的操作及格式化,可以透過第11行的lambda及相關函式的操作一行就完成!(在這裡只是記錄二種操作方式供自己紀錄及有興趣的朋友參考!)
至於二階段在程式操作上的差異,就請各位自行參照比對囉!
基本上,參考每行程式的註釋說明,應該都能掌握才是!
想要對折線圖數線樣式設定有更多認識的朋友,可以參考以下這篇文章!
最後,附上兩階段成果的對照圖供參囉~~!
我想請問一下,我用了您提供的第二段程式碼,圖框有跑出來,但是折線條沒有出來@@
回覆刪除想跟您請教一下