WHAT' CHA GONNA DO FOR ME?

Python、統計、機械学習、R、ファイナンスとか

pandasで日次リターンを月次リターンに変換する②

日次リターンを月次リターンに変換する技、第2弾。

今回もこちらのありがたい本で紹介されている方法を踏襲する。

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

以下の2つの方法が紹介されているが、

①日次の累積リターンから計算する方法
②日次のリターンから計算する方法

今回は②の方法で、日次リターンを月次リターンに変換する。

いま、stock_retという変数に日次のリターンがすでに入っているとする。

stock_ret.plot()
Out[12]: <matplotlib.axes._subplots.AxesSubplot at 0x150de850>

f:id:lofas:20150219161511p:plain

これを使って日次リターンを月次リターンに変換するが、コードは次のようにするだけでOK。

ret_m=(1+stock_ret).resample("M",how="prod",kind="period")-1
ret_m.plot()
Out[13]: <matplotlib.axes._subplots.AxesSubplot at 0x15309b70>

f:id:lofas:20150219161432p:plain

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()