Python:利用Pandas輕鬆選股

上一篇的Python教學中,我們學會了怎麼爬財報,但是爬完的資料要怎麼運用呢?這篇會給大家一些方向。
那篇有點不好意思,好像有兩個package沒有import,下次發現的話,可以在下方留言告訴我,我會盡快更正。

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

資料處理

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

利用上次的爬蟲取得資料
1
2
df = financial_statement(107, 2, '營益分析彙總表')
df

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

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

刪除其中一行
1
df = df.drop(['合計:共 808 家'], axis=1)

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

將index換成公司名稱
1
df = df.set_index(['公司名稱'])

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

轉換成數值
1
df = df.astype(float)

資料處理一行版

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

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

這樣就可以一次處理好!

簡單的取出行列:

我想單選出毛利率:

取得毛利率
1
df['毛利率(%)(營業毛利)/(營業收入)']

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

取得台積電資料
1
df.loc['台積電']

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

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

取得TSMC跟MTK的資料
1
df.loc[['台積電', '聯發科']]

數值分析

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

數值分析
1
df.describe()

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

毛利率分佈圖

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

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

選股

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

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

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

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

選股
1
df[cond1 & cond2]

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

這次教學的檔案:notebook.ipynb檔

假如覺得文章不錯,那更不能錯過我們的影音課程喔!
或我們按個 鼓勵一下吧!