已經對DataFrame有了基礎認識的我們,今天要更進一步的了解如何用DataFrame處理簡單的股價資料。在本篇文章中,我們以台灣市值最大的股票台積電當範例,來看如何用python處理這些資料。
股價資料可自行下載,或按此取得。
(一) 資料讀取
在Pandas中,讀取資料相當容易,若我們已經將檔案跟python檔放在同一個資料夾,則直接使用pd.read_檔案型態(‘檔案名稱’)即可讀取。舉例來說,想我們這次的檔案是csv檔,則我們可以用pd.read_csv(‘檔案名稱’)即可讀取。
另外,若檔案放在不同的資料夾,則我們可以透過pd.read_檔案型態(‘檔案路徑’)來讀取資料。
我們可以看到,這是台積電從2000/1/4至2019/1/30的股價資料。細心的讀者會發現到,我們用head()來顯示前5筆資料,用tail()來顯示最後5筆資料。這是大數據非常好用的一個方法,可以藉由頭尾資料的顯示來檢驗資料是否有問題。另外,我們也可以在括號裡加數字,即可控制想要顯示的筆數。
(二)將日期設定為索引
在上例中我們可以看到,讀取進來資料的index為預設的,從0開始。然而,在金融資料處理中,很多時候,我們都希望可以將資料日期設定為index。這時,就可以透過.set_index(pd.to_datetime(資料[‘Date’],inplace=True)來達成啦!
從上圖我們可以看到,index已經由數字轉換成日期了!然而,原始的Date欄位還是存在,我們可以透過drop(‘欄位名稱’,axis=1)把該欄位刪除。
我們可以用.index取出日期索引,另外我們也可以看到,索引的型態為時間。
(三) 繪圖
在DataFrame中,我們可以直接挑選某個欄位來繪圖,如:
我們也可以挑選某個欄位的某段時間來繪圖,如:
(四)周資料、月資料與年資料
在我們有了日資料後,該如何從裡面抓取周資料、月資料與年資料呢? 很簡單,用resample(‘資料頻率’)就對了!
資料頻率代號:
周資料(Weekly): W
月資料(Monthly): M
年資料(Yearly):Y
我們來看看用年資料畫圖的結果,資料點數變少,相對平滑:
(五) 報酬計算
在金融資料處理中,變化不大的情況下,log return通常會趨近於傳統的報酬(百分比變化),而因為log函數在數學上有許多良好的性質,如可直接累加,在金融計算上會更為方便。因此,我們很多時候都會採取直接計算log return。
回顧一下numpy單元,我們學到np.log(data)就可以直接對資料取log,而np.diff(data)可以直接對資料後減前。以我們這邊要計算的log return來說,就是要對股價取log後再相減。以下範例我們以周資料來進行。
到這邊,細心地讀這會發現到,時間軸已經不是我們先前設置的日期index了!為什麼會這樣呢?因為當我們在用numpy模組的diff與log做計算時,資料格式已經自動轉換成numpy的array了!
那麼,該如何將日期index設定回來呢?
因為這筆資料為一維度的資料,我們可以將它轉換成先前學過的Series。在index設定方面,因報酬從第二筆資料才開始有,因此我們的index會從1開始取,範例如下:
到這邊,相信大家已經對於DataFrame在金融應用上有了初步的認識。下次,我們將介紹更多實用的功能給大家唷!
好期待看到下集啊~辛苦你們了!很喜歡你們的文章
感謝!! 希望有幫助~~