Pandas 的 DataFrame 可以很方便的幫我們處理時間序列,只需要短短幾行,就能達到在其他程式語言要寫數十行的功能。
但是DataFrame就夠了嗎?
當我們在處理財務金融時,常常會需要分析時間序列(例如股價),雖然我們可能都知道什麼是maximum dropdown、什麼是sharp ratio,什麼是daily
return,但是有時候用dataframe來計算,還是免不了寫一些數學計算,增加程式碼的複雜度,讓閱讀程式碼變得比較辛苦。
救星:ffn (Financial Functions for Python)
所以這時候,你的救星就出現了,叫做 ffn,ffn是一個分析時間序列的package,只要 import ffn,你的 dataframe 就會瞬間多了很多能力!接下來我們就來看看是什麼能力吧!
這次的程式碼都會在google colab上,大家可以直接打開網頁就開始跟我們一起玩耍吧!
首先,我們必須要先安裝ffn,安裝的方式非常的直覺:
!pip install ffn
這樣就安裝好囉!上式中的驚嘆號代表我們將這段command line語法,輸入在jupyter來安裝,這又就不需要額外再開啟terminal了!
安裝好了之後我們就可以開始寫程式囉!
利用ffn取得股價
有了ffn我們可以很輕易的取得多檔股票的股價,ffn的底層是使用yahoo api,所以同樣也可以抓台股或其他國際股市喔!
import ffn
prices = ffn.get('2330.TW, 1101.TW')
prices.head()
可以發現這個股價的格是就是我們熟悉的dataframe耶!所以我們一樣可以使用一些dataframe既有的功能,例如「.plot」來繪圖:
prices.plot()
繪完圖後發現,雖然我們可以比較「2330」台積電,跟「1101」台泥的股價,但是他們的起始股價是不一樣的,所以無從比較報酬率。
想要比較報酬率,我們可以用「ffn」新增的額外功能「rebase」:
ffn提供的functions
prices.rebase().plot()
這樣就可以讓股價的起始值相同囉!這是ffn提供的眾多功能之一,但你不用額外學一個新的資料表示法,而是直接對dataframe操作就可以了!所以說ffn有點像是dataframe的補充包,讓我們來看看還有哪些好用的功能吧!
下跌幅度
我們可以藉由ffn來計算並比較dropdown,也就是比較虧損的幅度:
prices.to_drawdown_series().plot()
或是我們之前教過的heatmap,也一行就搞定了
prices.plot_corr_heatmap()
最後我們也可以來計算這兩檔股票的歷史數據分析:
stats = prices.calc_stats()
stats.display()
這個輕量級的package有很多簡單的語法,可以快速幫助我們進行報酬率的分析
而且所有的功能都是使用dataframe擴增,所以不用擔心要學新的結構,滿小巧可愛的!大家可以安裝起來玩玩看喔!