來用PYTHON製作EXCEL股價圖表

Jian An Lin
芬鐵克 FinTech
Published in
Oct 16, 2022
Photo by m. on Unsplash

✨看完這篇文章你會學到…

  1. 使用yfinance快速獲取歷史股價資料
  2. 使用openpyxl將數據寫入excel工作表
  3. 使用openpyxl繪製excel圖表

載入套件

Fig1. 載入套件

首先,先載入yfinance股價歷史資料套件和openpyxl與圖表等相關套件

建立一個工作表實體

Fig2. 建立工作表實體

創建一個 wb 實體,這等同於開一個excel檔案,再存取active屬性來操作工作表

獲取台積電歷史股價(14天)

Fig3. 獲取歷史股價

接著使用 yfinance.Ticker 下載台積電歷史股價,本文以14天資料做範例,period屬性可填寫哪些時間,可以參考下列資訊與連結

# valid periods: 1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max

另外,股利相關的資訊欄位不需要,使用Dataframe.drop()丟掉,就會得到以下的數據表格。

Fig4. 股價歷史資料

數據整理

Fig5. 數據整理

為了將數據寫入到excel的檔案中,需要將資料處理一下。因為dataframe的index(0, 1, 2, 3…)對我們來說不重要,所以使用Dataframe.reset_index()重置索引,再將其資料轉換成list。接著,插入一列中文的標頭進去,就產生以下資料。

Fig6. 數據資料

資料寫入工作表

Fig7. 寫入工作表

寫入資料的方法非常簡單,使用for迴圈把數據用append的方法插入列表。

建立高-低-收圖表

Fig8. 建立高低收圖表
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 = cache
ws.add_chart(c1, "G10")

因為excel圖表的設定關係,需要加入暫存的的數據才能正常。

建立開高低收(OHLC)圖表

Fig9. 建立開高低收圖表

建立長條圖

Fig10. 建立長條圖

建立量高低收圖表

Fig11. 建立量高低收圖表

建立量開高低收圖表

FIg12. 建立量開高低收圖表

儲存成excel檔案

Fig13. 儲存檔案

成果

完整的程式碼在這裡

👀 如果你想知道更多關於python與excel的操作…

推薦閱讀這本 Python操作Excel — — 最強入門邁向辦公室自動化之路 — — 王者歸來》

本書編排由基本用例到深度的結合應用都有非常詳細的程式碼範例,像是讀取寫入、公式計算函數到樞紐分析圖表…等等 ,書內除了有全彩印刷範例之外,也會針對函數帶有的屬性進行講解,相當實用與親民,適合完全沒有程式經驗的新手使用。

🙌 現在博客來66折,趕快手刀搶購!!

--

--