利用Pandas輕鬆選股 – Python實作教學

上一篇的Python教學中,我們學會了怎麼用爬蟲抓取財報,但是爬完的資料要怎麼運用呢?這篇會教大家如何利用一個實用的Pyton package:Pandas,整理爬下來的資料,並且輕鬆運用 Python 選股!

上一篇有點不好意思,好像有兩個package沒有import,下次發現的話,可以在下方留言告訴我,我會盡快更正。

今天這篇的前置作業,請參考連結把當中的function給copy過來,然後就開始吧!

資料處理

首先,我們要先使用這個function,可以直接在jupyter視窗內輸入,來取得爬取今天的主角:”營益分析彙總表”

利用上次的爬蟲取得資料

df = financial_statement(107, 2, '營益分析彙總表')
df

第一行,我們將 “營益分析彙總表” 儲存在 df 這個變數之中,
第二行,我們希望將 df 給顯示出來,看一下它長什麼樣子
第二行的功能是只有在jupyter 這個IDE才看的到喔~假如是寫在python script的話,就要用 print(df) 。
假如一切OK就會是以下的樣子:

df

我們觀察一下這張表,有一行真的詭異:”合計:共 808 家” ,這行完全沒有任何可以用的資料,所以我們將它刪除:

刪除其中一行

df = df.drop(['合計:共 808 家'], axis=1)

接下來我們發現 index (每一列)的命名很怪,怎麼用 1,2,3… 來命名呢,應該要用公司名稱!?
我們將股票的名稱當成新的 index:

將index換成公司名稱

df = df.set_index(['公司名稱'])

最後一步,我們希望資料欄位中,所有的元素都是 float ,所以要做一次轉換:

轉換成數值

df = df.astype(float)
processed

資料處理一行版

這樣就沒問題了!其實有個更快速的寫法,將以上三件事情寫成一行:

一行直接處理

df = df.drop(['合計:共 808 家'], axis=1).set_index(['公司名稱']).astype(float)

這樣就可以一次處理好!

簡單的取出行列:

我想單選出毛利率:

取得毛利率

df['毛利率(%)(營業毛利)/(營業收入)']
series

假如今天我只想看 台積電 表現如何:

取得台積電資料

df.loc['台積電']

取每一欄,跟取每一列,語法不太一樣喔!要小小注意一下。

tsmc

假如我想同時看 台積電 跟 聯發科:

取得TSMC跟MTK的資料

df.loc[['台積電', '聯發科']]
tsmcmtk

數值分析

接下來我們稍微分析一下這個表中的數字:
數值分析

df.describe()

這樣簡單一行,就可以得到每一欄的數值分析,當初我知道這個 df.describe() 也覺得很神。

describe

毛利率分佈圖

只要簡單一行,我們就可以看到全台灣的上市公司,毛利率分佈圖:

%matplotlib inline
df['毛利率(%)(營業毛利)/(營業收入)'].hist(bins=range(-100,100))
dis 2

選股

選股也很簡單,只要寫成以下條件:

cond1 = df['毛利率(%)(營業毛利)/(營業收入)'].astype(float) > 20
cond2 = df['營業利益率(%)(營業利益)/(營業收入)'].astype(float) > 5

就是說 第一個欄位:毛利率,我們希望找出大於20的 股票
另外呢 第二個欄位:營業利益率,我們希望找出大於5的 股票

那我們就可以用這兩個條件來選股:

df[cond1 & cond2]
select

搭啦!其實外面的選股軟體也就這樣而已啦!還收費這麼貴XDD 如果你覺得觀賞這個blog有點收穫,記得存到我的最愛定期觀看喔!我每個禮拜都會有一些更新。

FinLab - 韓承佑

嗨大家好,我是韓承佑,FinLab創辦人,畢業於巴黎薩克雷大學資工博士,目前擔任臺灣量化交易協會 學術顧問、台北商業大學 創新育成中心 創業技術顧問與上市科技公司 量化交易顧問。當初,我喜歡寫程式、無意間因為軟體比賽接觸Fintech,從此開始了財經跟程式的學習之路。我們成立 FinLab 量化投資部落格,用自己研發的軟體,對台灣股市做大量快速的實驗。希望可以在量化投資的路上,當大家的「武器製造商」!