Python x MySQL — 建立自己的台股資料庫:歷年營收

PHIL
Stock Analysis
Published in
3 min readJun 16, 2019

程式交易是 python 的一個熱門應用,而在建立一個宇宙無敵厲害的模型前,首先要先確認的自然是「資料從哪來」,畢竟巧婦難為無米之炊!如果你口袋麥克麥克,這自然不是問題,直接用買的就好了,不過大部分人就是沒錢才要搞交易賺錢嘛。好在大多數的財務資料都是公開可取得的,如果你夠有毅力也可以用複製貼上在 excel 慢慢拉,但這篇文章是要介紹怎麼用幾十行代碼把這件事自動化。

不管是財報分析還是程式交易,營收(Revenue)絕對是不可或缺的變量,故這個系列就從營收作開始。台股個股的營收可以用爬蟲的方式取得,根據「公開資訊觀測站」公佈的資訊,個股的營收會合併成一張大表,並以產業別分類,如下圖。

我們的目的是把它寫入MySQL,轉為以下的形式

Talk is cheap. 接下來就是刻代碼啦!

0. 準備動作 Former Preparation

程式會使用到的 module :pandas / numpy / requests / sqlalchemy / matplotlib,當然請先安奘 MySQL (若使用其他資料庫的話要在 sqlalchemy 的代碼中改設定)

[y_m_generator] 這個函式是為了批次寫入歷年的資料而設計,在接下來的代碼中會用到。

1. 建立表格 Create Table

[connect_sql] 這邊使用 sqlalchemy 連結 MySQL 資料庫,請輸入你自己的資料才連得上。

[text_create] 這段在建立 table schema,pandas 雖然在寫入時可自動生成表格,但欄位對應的資料型態通常非最佳化,會浪費很多空間,故建議把資料寫入前就把表格建好。另可以看到「SII_REV_{}」這邊留了一個空格,要在執行迴圈時,把時間變數塞進去。

執行完後進資料庫看看是否成功,順利的話會有 2010 – 2018 的表格。

2. 設計爬蟲 Web Scraping

這段代碼修改自超簡單用python抓取每月營收,為了符合資料庫的規範,在格式上做了一些調整,例如去除掉重複值。為便利批次寫入,把代碼設計成函式,並以年、月作為參數。

3. 寫入資料庫

這邊相對單純,呼叫寫好的爬蟲,用 pandas 內建的 .to_sql() 寫入資料庫,name=’SII_REV_{}’ 這邊同樣是先挖一個洞把時間變數塞進去。

執行完畢後任意找一個表格驗證一下。

如果讀得到資料就成功囉!

實務上,會希望在一個表格能看到「單一個股」的「歷年營收」,但目前的情況是「全部個股」的營收包在同一個表格,且分散在各個「單一月份」。怎麼讓表格長成想要的樣子?這個下一期(如果還會有的話)將會談到。

感謝你閱讀完這篇文章,如果你覺得這些文章對你有幫助請在底下幫我拍個手(長按最多可以拍50下手)。

--

--