pandasを使用して2つの銘柄の日次リターンの時系列相関を求める

ここでは「1803 清水建設」と「8698 マネックスグループ」の時系列相関を求める。

移動平均ヒストリカルボラティリティを求めるのと殆ど同じ方法で求められる。
pandas.DataFrame.rollingを使用して、その結果にcorr関数を作用させるだけ。

rolling_corr = daily_pct_change['1803'].rolling(
    window=20
).corr(
    daily_pct_change['8698']
).dropna()

データ取得から可視化までのコードは次。
rolling_corr関数は将来deprecatedされる予定のようだ。

#coding:utf-8
import pandas as pd
import numpy as np
import datetime as dt
import pandas_datareader.data as pdd

######## Define Method ########
def getMultiStockData(tickerList, date_from, date_to):
    def getStockData(ticker):
        stockData = pdd.DataReader(ticker, 'yahoo', date_from, date_to)
        return stockData
    datas = map(getStockData, tickerList)
    return pd.concat(datas, keys=tickerList, names=['Ticker', 'Date'])

######### 処理 #########
# 期間設定
date_from = dt.date(2016, 1, 1)
date_to = dt.date(2016, 12, 16)

# 株価取得
tickerList = ['1803', '8698']
multiStockData  = getMultiStockData(tickerList, date_from, date_to)

######### 終値取得と日次リターン #########
# 終値を取得
adjClosingPrice = multiStockData[['Adj Close']]
adjClosingPrice = adjClosingPrice.reset_index()

# pandas.DataFrameをpivotingして終値データをticker毎に纏める
adjClosingPriceTable = adjClosingPrice.pivot(
    index='Date',
    columns='Ticker',
    values='Adj Close'
)

# 日次リターンを求める
daily_pct_change =  adjClosingPriceTable.pct_change()   # 日次リターンの計算
daily_pct_change.fillna(0, inplace=True)                # Nanを0で埋める

# 日次リターンの相関を求める
# rolling_corr = pd.rolling_corr(
#     daily_pct_change['1803'],
#     daily_pct_change['8698'],
#     window=250
# ).dropna()
rolling_corr = daily_pct_change['1803'].rolling(
    window=20
).corr(
    daily_pct_change['8698']
).dropna()

rolling_corr.plot()