使用Python抓取台股證交所每日股價資料與使用pandas進行分析

2023/09/08更新

本程式放置於Google Colab,網址如下。https://colab.research.google.com/drive/1_5h44VcNopbQOYXSbR8PieNbTO449glD?usp=sharing

使用網址「http://www.twse.com.tw/exchangeReport/STOCK_DAY?date=20180817&stockNo=2330」,由證交所所提供的網址,可以經由stockNo指定股票編號,date指定股票日期,以json格式回傳一個月的股價與交易量,以下為回傳結果。

{"stat":"OK","date":"20180817","title":"107年08月 2330 台積電           各日成交資訊","fields":["日期","成交股數","成交金額","開盤價","最高價","最低價","收盤價","漲跌價差","成交筆數"],"data":[["107/08/01","29,777,161","7,375,488,342","247.00","248.00","246.50","248.00","+2.00","11,667"],["107/08/02","22,775,110","5,611,725,541","249.00","249.50","243.50","244.50","-3.50","10,343"],["107/08/03","25,165,097","6,205,758,662","246.00","248.00","245.00","247.00","+2.50","9,585"],["107/08/06","22,364,568","5,487,396,854","245.00","247.00","244.00","245.50","-1.50","9,732"],"notes":["符號說明:+/-/X表示漲/跌/不比價","當日統計資訊含一般、零股、盤後定價、鉅額交易,不含拍賣、標購。","ETF證券代號第六碼為K、M、S、C者,表示該ETF以外幣交易。"]}

使用request.get擷取指定日期與股票編號的網頁資料,使用request的函式json進行json格式的解碼成Python的資料結構,取出data所對應的值就是當月該股票的交易資料,使用函式transform進行格式轉換。

函式transform呼叫函式transform_data轉換每一列資料,函式transform_data呼叫函式transform_date將民國轉成西元。

使用pandas將資料轉換成DataFrame,新增股票代碼欄位才能不同股票都放入同一個DataFrame,將列索引改成日期,才能依照日期分析,新增月份欄位就能夠依照月份分析。

使用DataFrame以groupby設定month欄位群組資料,close表示收盤價,函式count計算個數,獲得每個月的交易日個數。

使用DataFrame以groupby設定month欄位群組資料,shares表示成交股數,函式sum計算加總,獲得每個月的成交股數總和。

完整程式碼如下