【python】DataReaderで経済データを取得する


twitterで下記チャートを紹介しました。

このチャートは、

横軸はVIX(恐怖指数)、縦軸はその後100日(約半年)騰落率。VIXの水準とその後の騰落率には正の相関がありランダムウォークではない。今のVIXが40程度なので、過去ケースから見ると半年後のリターンがマイナスになることはなさそう(投資は自己責任!)

ということを意味しています。

このチャートは、Pythonのpandas_datareaderを使ってセントルイス連銀ウェブサイトからVIX(恐怖指数)とS&P500株価指数を取得して作りました。

ここにそのコードを保存しておきます。

まずライブラリの読み込み。

import pandas as pd
import numpy as np
import pandas_datareader.data as web

import datetime
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()

1.DataReaderでデータを取得

#取得するデータの開始日と最終日を指定
start = datetime.datetime(2010, 1, 1)
end = datetime.datetime(2020, 5, 1)


#S&P500のデータを取得
# 'SP500'がS&P500のティッカーシンボル。
# 'fred'が、データソースとしてセントルイス連銀を指定する。
#あとは開始日と最終日。
eq = web.DataReader('SP500', 'fred', start, end)

#VIXのデータを取得
# 'VIXCLS'がVIXのティッカーシンボル。
vix = web.DataReader('VIXCLS','fred', start, end)

#取得したデータを1つのデータフレームにまとめる
df = pd.DataFrame(index = eq.index)
df['Equity'] = eq
df['VIX'] = vix
df.dropna(inplace = True)

セントルイス連銀からは様々な経済・金融データを取得できます。
セントルイス連銀ウェブサイト各データのURLの、一番最後がシンボルティッカーです。

例:VIXの場合は下記アドレスの最後、VIXCLSとなります。
https://fred.stlouisfed.org/series/VIXCLS

2. グラフを作成

#グラフを作る関数
def chart(days):
    dfd = df.copy()
    dfd['Return'] = (dfd['Equity'].shift(-days) /  dfd['Equity'] -1)
    dfd.dropna(inplace = True)
    plt.figure(figsize = (8,4))
    plt.scatter(x = dfd['VIX'], y = dfd['Return'], alpha = 0.6, c = dfd['VIX'])
    plt.xlabel('VIX')
    plt.ylabel(str(days)+' days Return')
    plt.title('VIX and S&P500 '+str(days)+' days Returns (USD base)')
    plt.savefig('VIX_SP500rtn',bbox_inches="tight")

#何日間のリターンを計算するかを指定して関数実行
chart(100)

↓このグラフが作られます。

plt.scatter(x = dfd['VIX'], y = dfd['Return'], alpha = 0.6, c = dfd['VIX'])
↑このコードのc = dfd['VIX']によって、VIXの値に応じてグラフ内の点の色を変えて、グラデーション効果を出しています。

おまけ1:VIXチャート

df['VIX'].plot(title = 'VIX', figsize = (8,4))

おまけ2:SP500チャート

df['Equity'].plot(title = 'S&P500', figsize = (8,4))

おわりに

DataReaderでは、セントルイス連銀の経済データだけでなく、株価や為替など、様々なデータを取得することができます。詳しくはDataReaderのドキュメントをご参照ください。