來用PYTHON製作EXCEL股價圖表
✨看完這篇文章你會學到…
載入套件
首先,先載入yfinance股價歷史資料套件和openpyxl與圖表等相關套件
建立一個工作表實體
創建一個 wb 實體,這等同於開一個excel檔案,再存取active屬性來操作工作表
獲取台積電歷史股價(14天)
接著使用 yfinance.Ticker 下載台積電歷史股價,本文以14天資料做範例,period屬性可填寫哪些時間,可以參考下列資訊與連結。
# valid periods: 1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max
另外,股利相關的資訊欄位不需要,使用Dataframe.drop()丟掉,就會得到以下的數據表格。
數據整理
為了將數據寫入到excel的檔案中,需要將資料處理一下。因為dataframe的index(0, 1, 2, 3…)對我們來說不重要,所以使用Dataframe.reset_index()重置索引,再將其資料轉換成list。接著,插入一列中文的標頭進去,就產生以下資料。
資料寫入工作表
寫入資料的方法非常簡單,使用for迴圈把數據用append的方法插入列表。
建立高-低-收圖表
c1 = StockChart()
labels = Reference(ws, min_col=1, min_row=2, max_row=len(rows))
data = Reference(ws, min_col=3, max_col=5, min_row=1, max_row=len(rows))
c1.add_data(data, titles_from_data=True)
c1.set_categories(labels)
使用StockChart()建立一個圖表的實體,labels和data是定義資料範圍與標籤,再透過add方法加入到c1實體。
for s in c1.series:
s.graphicalProperties.line.noFill = True # marker for close
s.marker.symbol = "dot"
s.marker.size = 5
c1.title = "最高價-最低價-收盤價"
c1.hiLowLines = ChartLines()
對圖表marker做設定,以及設定圖表標題,並新增一個折線圖。
# Excel is broken and needs a cache of values in order to display hiLoLines :-/
from openpyxl.chart.data_source import NumData, NumVal
pts = [NumVal(idx=i) for i in range(len(data) - 1)]
cache = NumData(pt=pts)
c1.series[-1].val.numRef.numCache = cachews.add_chart(c1, "G10")
因為excel圖表的設定關係,需要加入暫存的的數據才能正常。
建立開高低收(OHLC)圖表
建立長條圖
建立量高低收圖表
建立量開高低收圖表
儲存成excel檔案
成果
👀 如果你想知道更多關於python與excel的操作…
推薦閱讀這本 Python操作Excel — — 最強入門邁向辦公室自動化之路 — — 王者歸來》。
本書編排由基本用例到深度的結合應用都有非常詳細的程式碼範例,像是讀取寫入、公式計算函數到樞紐分析圖表…等等 ,書內除了有全彩印刷範例之外,也會針對函數帶有的屬性進行講解,相當實用與親民,適合完全沒有程式經驗的新手使用。