Pythonのmatplotlibでドル円と景気循環の関係を可視化

こんにちは、たくろー(@takuro_data )です!

matplotlibはPythonでよく使われるグラフ描画ライブラリです。matplotlibを使って、ドル円と景気循環の関係を可視化してみます。

景気循環

(注)囲みの中の数値は、各期間の山から谷までの下降率、( )内は月平均下降率。
(出所)内閣府 経済社会総合研究所「第 15 循環の景気の谷以降の状況について(概要)」

図は、景気動向指数のコンポジット・インデックス(CI)一致指数の推移で、網掛け部分が景気後退期です。日本の景気については、内閣府経済社会総合研究所が、「景気動向指数」をもとに、事後的に「景気基準日付」を設定しており、これが公式の景気循環となっています。景気の谷から山を経て谷に至るサイクルを1循環とされています。

Pythonのmatplotlibモジュールを用いて、景気循環とドル円の関係をみるため、考察しやすいグラフを作成します。

matplotlibでグラフを作成

1985年から2017年のデータをpandas-datareaderを用いてダウンロードします。

# ドル円データ取得
import pandas_datareader.data as pdr
import datetime
start = datetime.datetime(1985,1,4)
end = datetime.datetime(2017,12,31)
JPY_USD = pdr.DataReader('DEXJPUS', 'fred', start, end)
JPY_USD = JPY_USD.resample('M', loffset='1d').last() #日次データから月次データ(月初)へ変換
JPY_USD.columns=['JPUS'] #項目名をJPUSに変更

matplotlibモジュールを使って、グラフ表示してみます。

%matplotlib inline
import matplotlib.pyplot as plt
JPY_USD.plot(color='darkblue')
plt.ylabel('JPY_USD')

1984年から1987年ごろに、250円から125円へ大きく円高に変化していることが目立ちます。これは、1985年の為替レートをより実体経済を反映させたものにする(ドル高を是正する)プラザ合意があったからです。背景には、米国のドル高による輸出競争力の低下と保護貿易主義の高まりがありました。

1987以降の変化に着目したいので、ylimメソッドを使って、y軸の範囲を指定し、景気後退期をaxvspanメソッドを使って、網掛けしてみます。

JPY_USD.plot(color='darkblue')
plt.ylabel('JPY_USD')
plt.ylim(75,175) #y軸の範囲を指定

#網掛け
plt.axvspan('1985/6/1', '1986/11/1',color='lightgray')
plt.axvspan('1991/2/1', '1993/10/1',color='lightgray')
plt.axvspan('1997/5/1', '1999/1/1',color='lightgray')
plt.axvspan('2000/11/1', '2002/1/1',color='lightgray')
plt.axvspan('2008/2/1', '2009/3/1',color='lightgray')
plt.axvspan('2012/3/1', '2012/11/1',color='lightgray')

網掛けの景気後退期でも、円高に動いてれば、円安に動いているときもあります。網掛けなしの景気拡大期でも一方向に動いている訳ではないようにみえます。景気循環と為替のドル円のは連動していないようです。

そこで、景気循環と連動しそうな日経平均株価について、みてみます。網掛け部分をスッキリさせるため、日付をリストに格納してfor文を使って書き換えています。

n225 = pdr.DataReader('NIKKEI225', 'fred', start, end)
n225 = n225.resample('M', loffset='1d').first() #日次データから月次データ(月初)へ変換
n225.plot(color='darkblue')
plt.ylabel('NIKKEI225')

#網掛け
dates = [('1985/6/1', '1986/11/1'), ('1991/2/1', '1993/10/1'),('1997/5/1', '1999/1/1'),('2000/11/1', '2002/1/1'),('2008/2/1', '2009/3/1'),('2012/3/1', '2012/11/1')]
for sdate, edate in dates:
    plt.axvspan(sdate, edate,color='lightgray')

日経平均株価は、概ね景気拡大期に上昇し、景気後退期に下落しているようにみえ、景気循環と連動していそうです。

最後に、ドル円と日経平均株価を2軸のグラフに描いてみます。twinxメソッドを使って、1軸と2軸を関連づけます。

fig, ax1 = plt.subplots()
 
# 第1軸と第2軸を関連づける
ax2 = ax1.twinx()
 
#第1軸にドル円、第2軸に日経平均株価を描く
ax1.plot(JPY_USD,  color='darkblue', label='JPUS')
ax2.plot(n225, color='violet', label='n225')

#第1軸、第2軸の凡例を取得し、まとめて出力する
h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

#第1軸のy軸の範囲と、y軸のラベル
ax1.set_ylim([75, 175])
ax1.set_ylabel('JPUS')
ax2.set_ylabel('NIKKEI225')

#網掛け
for sdate, edate in dates:
    ax1.axvspan(sdate, edate,color='lightgray')

日経平均株価構成銘柄は、ハイテク産業や自動車産業といった輸出企業の割合が多く、円安になると日経平均株価は上昇し、円高になると下落しやすく、グラフも概ね、その通りになっていることがわかります。

ただ、1997年から2002年にかけては逆の動きをしています。1997年からは、アジア通貨危機から、通貨安がタイからはじまり日本まで波及した結果です。

2002年にかけては米国ITバブルが崩壊し、日本経済が悪化した結果です。景気後退で円が売られ、円安になることもあります。

matplotlibのTips

matplotlibのグラフ構造

2軸グラフを描くとき、「変数名.plot」ではなく「ax.plot(変数名)」としました。これは、どのグラフに操作を行うか明記するためです。matplotlibは下記の階層構造となっています。

(出所)matplotlib公式サイト

Excelでいうと、Figureはグラフエリア、Axesがプロットエリアです。1つのグラフを描くときは、「変数名.plot」で問題ないですが、2つ以上のグラフを描くときは、プロットエリアを宣言して、「ax.plot(変数名)」としたほうがいいでしょう。使い分けに関して、下記が参考になります。

参考 matplotlib基礎 | figureやaxesでのグラフのレイアウトQiita

matplotlibのカラー一覧

グラフのカラーとして、darkblueとvioletを使用しました。他にも指定できるカラーが豊富にあります。Matplotlibで使用できる公式サイトのカラー一覧です。

(出所)matplotlib公式サイト

以下コマンドでも確認できます。

import matplotlib
matplotlib.colors.cnames

さいごに

今回は、Pythonの描画ライブラリのmatplotlibを用いて、ドル円と景気循環の関係を可視化しました。matplotlibは、折れ線だけでなく、棒グラフや3Dグラフなども描くことができ、便利です。平均値や標準偏差など統計量を算出する前に、直感的にデータを把握しましょう。

次回は、収益率のヒストグラムと要約統計量について学びます。

Pythonでドル円変化率のヒストグラムと要約統計量