各国の名目GDPデータをWorld Bankから取得してグラフ化するpythonプログラムがとりあえずできたので、備忘録として保存。
データの取得はwbdataを使いたかったが、どうしてもうまくいかなかったので、それは別の機会に。
グラフは、matplotlib.pyplotを使った静的なグラフ。plotlyを使ったインタラクティブなグラフも別の機会に。
import requests
import json
from datetime import datetime
import pandas as pd
import matplotlib.pyplot as plt
def fetch_gdp_data(country_code):
gdp_data = {}
for page in range(1, 3): # ページを指定してデータを取得
url = f"https://api.worldbank.org/v2/country/{country_code}/indicator/NY.GDP.MKTP.CD?format=json&page={page}"
response = requests.get(url)
data = json.loads(response.text)
for entry in data[1]:
date = datetime.strptime(entry["date"], "%Y")
value = entry["value"]
if value is not None:
gdp_data[date] = value
return pd.Series(gdp_data)
# 国のISOコードを設定(G7+中印)
countries = {
'USA': 'United States',
'CHN': 'China',
'JPN': 'Japan',
'DEU': 'Germany',
'IND': 'India',
'GBR': 'United Kingdom',
'FRA': 'France',
'ITA': 'Italy',
'CAN': 'Canada',
}
# データフレームの作成
gdp_data = pd.DataFrame({code: fetch_gdp_data(code) for code in countries.keys()})
# インデックスを datetime 型に変換
gdp_data.index = pd.to_datetime(gdp_data.index)
# 欠損値の処理
gdp_data_filled = gdp_data.fillna(method='ffill').fillna(method='bfill')
# グラフを描画
plt.figure(figsize=(14, 8))
for country in countries:
plt.plot(gdp_data_filled[country], label=countries[country])
plt.title('Nominal GDP (current USD) of G7 countries, China, and India (1960-2021)')
plt.xlabel('Year')
plt.ylabel('GDP (current USD)')
plt.legend()
plt.grid()
plt.show()
Google Colabでこのコードを実行すると、以下のグラフが出来上がった。