外国為替レートと実質実効為替レートを調べてグラフ化してみた
2022年7月、円安が騒がれている今日このごろです。私はFXをやっているわけでも株をやってるわけでもないのですが、気になりますよねドル円。輸入品の値上がりに直結するところですから、生活にも影響がありますもの。
前回の 物価上昇しらべてみた - 2020年基準、消費者物価指数、品目別価格指数 に引き続き、今回は外国為替レートと実質実効為替レートを調べてみました。オープンデータを利用してPythonでグラフ化にしてみました。グラフ生成に使ったPythonプログラムも掲載してます。
外国為替相場のオープンデータ
実は外国為替相場のオープンデータ選びに一苦労しました。日銀が出している為替相場のオープンデータは、ドル円だけなんですよね。これだと、他の国の状況がまったくわかりません。 主要時系列統計データ表
Google先生に聞いてようやく見つかりました! BISのオープンデータ です。ちなみにBIS(Bank for International Settlements)は、国際決済銀行で、スイスのバーゼルに本部があります。
世界各国のUSドル為替レートや実質実効為替レートのデータをダウンロードできます。しかもなんと1949年から記録されているではありませんか!これはグラフ化できたら面白そうと思い、早速Pythonでプログラミングです。
USドル為替レート
ここではUSドル為替レートのグラフを紹介します。 こちらのページ から「US dollar exchange rates → CSV vertical」のデータを使用してます。
United Arab Emirates, Albania, Argentina, Austria
Australia, Bosnia and Herzegovina, Belgium, Bulgaria
Bahrain, Brunei, Brazil, Canada
Switzerland, Chile, China, Colombia
Cyprus, Czechia, Germany, Denmark
Algeria, Estonia, Spain, Finland
France, United Kingdom, Greece, Hong Kong SAR
Croatia, Hungary, Indonesia, Ireland
Israel, India, Iran, Iceland
Italy, Japan, Korea, Kuwait
Kazakhstan, Sri Lanka, Lithuania, Luxembourg
Latvia, North Macedonia, Malta, Mauritius
Mexico, Malaysia, Netherlands, Norway
Nepal, New Zealand, Oman, Peru
Philippines, Pakistan, Poland, Portugal
Qatar, Romania, Serbia, Russia
Saudi Arabia, Sweden, Singapore, Slovenia
Slovakia, Thailand, Tunisia, Turkey
Trinidad and Tobago, Chinese Taipei, Ukraine, United States
Uruguay, Venezuela, Euro area, World
USドル為替レートをグラフ化するPythonプログラム
USドル為替レートのグラフ化に使ったPythonプログラムです。ExcelやCSVデータも、Pandasのデータフレームを使えば簡単に整形できてグラフ化できちゃいます。Pandasの基本的な使い方は Excelなどの表データをゴリゴリ加工する【Python x Pandas】 をご覧ください。
'''
US Dollor Exchange Rate
'''
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import matplotlib.dates as mdates
filename = 'WS_XRU_D_csv_row.csv'
#header = 'Reference area'
header = 'Title'
df = pd.read_csv(filename, header=7)
df = df.drop(index=[0,1,2,3,4,5,6])
df["date"] = mdates.date2num(df[header])
df = df.set_index("date")
df = df.drop(columns=[header])
df = df.astype(float) # TypeError: no numeric data to plot対策
print(len(df)) # データの件数
print(df.columns.values) # ヘッダー(項目名一覧)
print(df)
index = 0
titles = []
for column in df.columns.values.tolist():
if index % 4 == 0:
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(18, 12))
fig.suptitle("USドル為替レート")
titles = []
fig.tight_layout() # 余白調整
ax = df[column].plot(ax=axes[0, 0])
elif index % 4 == 1:
ax = df[column].plot(ax=axes[0, 1])
elif index % 4 == 2:
ax = df[column].plot(ax=axes[1, 0])
elif index % 4 == 3:
ax = df[column].plot(ax=axes[1, 1])
arr = column.split(' - ')
title = arr[0] + ' - ' + arr[1]
country = title.replace('Exchange rates against USD ','').split(' - ')[0].strip()
titles.append(country)
ax.set_ylabel('')
ax.set_xlabel(title)
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y"))
if index % 4 == 3:
png_path = 'usder-{}.png'.format(int(index/4))
t = 'USドル為替レート - {}'.format(', '.join(titles))
print('### {}'.format(t))
print('![{}]({})'.format(t, png_path))
plt.savefig(png_path)
plt.close('all')
index = index + 1
実質実効為替レート
円とドルの為替レートだけを見ても、物価の要素が入っていないため本当の意味での通貨の価値を知ることができません。そこで実質実効為替レートの登場です。 外国為替市場において各国の通貨の実力を測るための指標として使われているそうです。これは中央銀行や国際決済銀行などが算定し、公表されたものです。
私も詳しくは分からないのですが、とりあえずグラフ化してみました。
実質実効為替レートのグラフ
実質実効為替レートのグラフです。 BIS Effectivve exchange rates / Monthly data: Broad indices のXLSXファイルを使用しました。
2010年を100として比較してます。日本は右肩下がりですね。
他の国も調査したい場合は、次のプログラムを改造してみてください。
実質実効為替レートをグラフ化するPythonプログラム
'''
実質実効為替レート
The real effective exchange rate (REER)
'''
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
import matplotlib.dates as mdates
if __name__ == "__main__":
filename = 'broad.xlsx'
target_column = ['Euro area', 'China', 'Germany', 'Japan', 'Korea', 'United States', 'United Kingdom']
# https://ja.wikipedia.org/wiki/%E5%90%8D%E7%9B%AE%E3%81%A8%E5%AE%9F%E8%B3%AA_(%E7%B5%8C%E6%B8%88%E5%AD%A6)
# 名目: Nominal 実質: Real
df = pd.read_excel(filename, header=3, sheet_name='Real')
df = df.drop(index=[0])
df["date"] = mdates.date2num(df["EER for:"])
df = df.set_index("date")
print(df)
df = df.drop(columns=["EER for:"])
df = df.astype(float) # TypeError: no numeric data to plot対策
print(len(df)) # データの件数
print(df.columns.values) # ヘッダー(項目名一覧)
print(df)
fig, axes = plt.subplots(figsize=(14, 10))
fig.tight_layout() # 余白を少なく表示
for column in target_column:
ax = df[column].plot()
# ax.set_ylabel(column)
# ax.set_xlabel('')
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y"))
plt.legend(loc='lower left') # upper left
# plt.legend() # 凡例
plt.title('BIS effective exchange rate - Nominal, Broad Indices')
#plt.show()
plt.savefig('reer.png')
plt.close('all')