pandasとmatplotlibでドル円と日経平均の相関を調べる

YahooファイナンスがAPIの提供を止めてしまったので pandas_datareader で Yahooファイナンスのデータが取れなくなってしまった。残念ですな。

さて、株やら為替では、ドル円と日経225の連動性がどうとか、どの通貨とどの通貨の相関性がなんとかとかいう話がよく出てくる。

そこで、相関とはなんぞやという話になるのだけど、正直よくわからん。
相関係数(wikipediaセンセー)

いわく、

  • -1から1までの値をとる
  • 2つの確率変数が独立であれば相関はゼロである
  • しかし相関がゼロであっても2つの確率変数が独立であることを意味しない

よくわからん時はとりあえず置いておくのが吉だと思う。概念を理解できていなくても使うだけなら中学生でもできるのだから。

ためしに 2006/1/1 から 2017/3/31 の期間の日経平均とドル円のグラフを並べてみると、たしかに連動しているように見える。

つまり、ドル円相場と日経平均は強い正の相関があるのではないかと思う。

まずはドル円相場

そして日経平均

まぁ、チャートの形を見ればなんとなく同じように推移していることがわかる。

せっかくなので相関係数を出してグラフ化してみる。使うだけならおっさんでもできる。

#!/usr/bin/env python3
 
import pandas as pd
import pandas_datareader.data as web
import matplotlib.pyplot as plt
 
def correlation(start, end):
    n225 = web.DataReader('NIKKEI225', 'fred', start, end)
    usdjpy = web.DataReader('DEXJPUS', 'fred', start, end)
    df = pd.concat([n225, usdjpy], axis=1).dropna()
    n225_var = df.NIKKEI225.pct_change().dropna()
    usdjpy_var = df.DEXJPUS.pct_change().dropna()
    plt.plot(usdjpy_var.rolling(window=25).corr(n225_var), 'y')
    plt.ylabel('correlation')
    plt.xlabel('DATE')
    plt.show()
 
if __name__ == "__main__":
    correlation("2006/1/1", "2017/3/31")

concat で2つのDataFrameを結合する。
pct_change で変化量に変換する。
corr で列間の相関係数を算出する。
なお、rolling の window で相関の算出に使用する営業日数を決めることができる。

まず25営業日で見てみる。

大きく行ったり来たりを繰り返しているが全体の傾向として0.0より大きい方に振れていることがわかる。

次に75営業日で見てみる。

マイナー通貨を組み合わせてサヤ取りしたい時なんかに使えるんじゃないかな。

機械学習やら統計分析っておもしろそうなんだけど数学的素養がないとつらいよね。

スポンサーリンク

フォローする

スポンサーリンク