pandasで日次リターンを月次リターンに変換する②
日次リターンを月次リターンに変換する技、第2弾。
今回もこちらのありがたい本で紹介されている方法を踏襲する。
Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理
- 作者: Wes McKinney,小林儀匡,鈴木宏尚,瀬戸山雅人,滝口開資,野上大介
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/12/26
- メディア: 大型本
- この商品を含むブログ (7件) を見る
以下の2つの方法が紹介されているが、
①日次の累積リターンから計算する方法
②日次のリターンから計算する方法
今回は②の方法で、日次リターンを月次リターンに変換する。
いま、stock_retという変数に日次のリターンがすでに入っているとする。
stock_ret.plot() Out[12]: <matplotlib.axes._subplots.AxesSubplot at 0x150de850>
これを使って日次リターンを月次リターンに変換するが、コードは次のようにするだけでOK。
ret_m=(1+stock_ret).resample("M",how="prod",kind="period")-1 ret_m.plot() Out[13]: <matplotlib.axes._subplots.AxesSubplot at 0x15309b70>
Mは、month frequencyのことで、これでデータの頻度を日次から月次に変換する。
prodは、サマリー対象のレコード全てを掛け算した値を使う、という意味で、ここまでで各月の月次のグロスリターン系列ができることとなる。
最後に1を引くことで、ネットの月次リターンとなる。
timestampかperiodかを選べるが、今回はperiodを選択。
コード全体はこちら。
# -*- coding: utf-8 -*- import pandas.io.data as web import numpy as np import seaborn as sns import pandas as pd import pandas.io.data as web import datetime start = datetime.datetime(2000, 1, 1) end = datetime.datetime(2014, 12, 31) #データ取得 all_data = {} for ticker in ['AAPL', 'IBM', 'MSFT', 'YHOO']: all_data[ticker] = web.DataReader(ticker,'yahoo',start,end) #データ結合(concatでもOK) #stock_price=all_data['AAPL'].ix[:,['Adj Close']] #for ticker in ['IBM', 'MSFT', 'YHOO']: # stock_price = pd.concat((stock_price,all_data[ticker].ix[:,['Adj Close']]),axis=1) #データ結合 stock_price=all_data['AAPL'].ix[:,['Adj Close']] for ticker in ['IBM', 'MSFT', 'YHOO']: stock_price = pd.merge(stock_price,all_data[ticker].ix[:,['Adj Close']], left_index=True, right_index=True) #列名変更 stock_price.columns=['AAPL', 'IBM', 'MSFT', 'YHOO'] stock_price.plot() #リターンデータに変換 stock_ret=stock_price.pct_change() stock_ret.plot() #月次リターンに変換 ret_m=(1+stock_ret).resample("M",how="prod",kind="period")-1 ret_m.plot()