外国為替レートと実質実効為替レートを調べてグラフ化してみた

外国為替レートと実質実効為替レートを調べてグラフ化してみた

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

United Arab Emirates, Albania, Argentina, Austria
United Arab Emirates, Albania, Argentina, Austria

Australia, Bosnia and Herzegovina, Belgium, Bulgaria

Australia, Bosnia and Herzegovina, Belgium, Bulgaria
Australia, Bosnia and Herzegovina, Belgium, Bulgaria

Bahrain, Brunei, Brazil, Canada

Bahrain, Brunei, Brazil, Canada
Bahrain, Brunei, Brazil, Canada

Switzerland, Chile, China, Colombia

Switzerland, Chile, China, Colombia
Switzerland, Chile, China, Colombia

Cyprus, Czechia, Germany, Denmark

Cyprus, Czechia, Germany, Denmark
Cyprus, Czechia, Germany, Denmark

Algeria, Estonia, Spain, Finland

Algeria, Estonia, Spain, Finland
Algeria, Estonia, Spain, Finland

France, United Kingdom, Greece, Hong Kong SAR

France, United Kingdom, Greece, Hong Kong SAR
France, United Kingdom, Greece, Hong Kong SAR

Croatia, Hungary, Indonesia, Ireland

Croatia, Hungary, Indonesia, Ireland
Croatia, Hungary, Indonesia, Ireland

Israel, India, Iran, Iceland

Israel, India, Iran, Iceland
Israel, India, Iran, Iceland

Italy, Japan, Korea, Kuwait

Italy, Japan, Korea, Kuwait
Italy, Japan, Korea, Kuwait

Kazakhstan, Sri Lanka, Lithuania, Luxembourg

Kazakhstan, Sri Lanka, Lithuania, Luxembourg
Kazakhstan, Sri Lanka, Lithuania, Luxembourg

Latvia, North Macedonia, Malta, Mauritius

Latvia, North Macedonia, Malta, Mauritius
Latvia, North Macedonia, Malta, Mauritius

Mexico, Malaysia, Netherlands, Norway

Mexico, Malaysia, Netherlands, Norway
Mexico, Malaysia, Netherlands, Norway

Nepal, New Zealand, Oman, Peru

Nepal, New Zealand, Oman, Peru
Nepal, New Zealand, Oman, Peru

Philippines, Pakistan, Poland, Portugal

Philippines, Pakistan, Poland, Portugal
Philippines, Pakistan, Poland, Portugal

Qatar, Romania, Serbia, Russia

Qatar, Romania, Serbia, Russia
Qatar, Romania, Serbia, Russia

Saudi Arabia, Sweden, Singapore, Slovenia

Saudi Arabia, Sweden, Singapore, Slovenia
Saudi Arabia, Sweden, Singapore, Slovenia

Slovakia, Thailand, Tunisia, Turkey

Slovakia, Thailand, Tunisia, Turkey
Slovakia, Thailand, Tunisia, Turkey

Trinidad and Tobago, Chinese Taipei, Ukraine, United States

Trinidad and Tobago, Chinese Taipei, Ukraine, United States
Trinidad and Tobago, Chinese Taipei, Ukraine, United States

Uruguay, Venezuela, Euro area, World

Uruguay, Venezuela, Euro area, World
Uruguay, Venezuela, Euro area, World

USドル為替レートをグラフ化するPythonプログラム

USドル為替レートのグラフ化に使ったPythonプログラムです。ExcelやCSVデータも、Pandasのデータフレームを使えばカンタンに整形できてグラフ化できちゃいます。Pandasの基本的な使い方はPythonでデータ解析・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')
記事に関するご質問などがあれば、
Twitter または お問い合わせ までご連絡ください。
関連記事