上一篇的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就會是以下的樣子:

我們觀察一下這張表,有一行真的詭異:”合計:共 808 家” ,這行完全沒有任何可以用的資料,所以我們將它刪除:
刪除其中一行
df = df.drop(['合計:共 808 家'], axis=1)
接下來我們發現 index (每一列)的命名很怪,怎麼用 1,2,3… 來命名呢,應該要用公司名稱!?
我們將股票的名稱當成新的 index:
將index換成公司名稱
df = df.set_index(['公司名稱'])
最後一步,我們希望資料欄位中,所有的元素都是 float ,所以要做一次轉換:
轉換成數值
df = df.astype(float)

資料處理一行版
這樣就沒問題了!其實有個更快速的寫法,將以上三件事情寫成一行:
一行直接處理
df = df.drop(['合計:共 808 家'], axis=1).set_index(['公司名稱']).astype(float)
這樣就可以一次處理好!
簡單的取出行列:
我想單選出毛利率:
取得毛利率
df['毛利率(%)(營業毛利)/(營業收入)']

假如今天我只想看 台積電 表現如何:
取得台積電資料
df.loc['台積電']

假如我想同時看 台積電 跟 聯發科:
取得TSMC跟MTK的資料
df.loc[['台積電', '聯發科']]

數值分析
接下來我們稍微分析一下這個表中的數字:
數值分析
df.describe()
這樣簡單一行,就可以得到每一欄的數值分析,當初我知道這個 df.describe() 也覺得很神。

毛利率分佈圖
只要簡單一行,我們就可以看到全台灣的上市公司,毛利率分佈圖:
%matplotlib inline
df['毛利率(%)(營業毛利)/(營業收入)'].hist(bins=range(-100,100))

選股
選股也很簡單,只要寫成以下條件:
cond1 = df['毛利率(%)(營業毛利)/(營業收入)'].astype(float) > 20
cond2 = df['營業利益率(%)(營業利益)/(營業收入)'].astype(float) > 5
就是說 第一個欄位:毛利率,我們希望找出大於20的 股票
另外呢 第二個欄位:營業利益率,我們希望找出大於5的 股票
那我們就可以用這兩個條件來選股:
df[cond1 & cond2]

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