はじめに
各国の名目GDP推移をplotlyを使ってインタラクティブなグラフにした。
データはWorldBankデータベースから取得。
import requests
import json
from datetime import datetime
import pandas as pd
import plotly.graph_objs as go
from plotly.subplots import make_subplots
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')
# データの最初の年と最後の年を取得
start_year = gdp_data_filled.index.min().year
end_year = gdp_data_filled.index.max().year
# 最新年のデータを取得して並べ替え
latest_year = gdp_data_filled.index.max()
latest_data = gdp_data_filled.loc[latest_year].sort_values(ascending=False)
# 並べ替えた順に国名を取得
sorted_countries = latest_data.index.tolist()
# インタラクティブなグラフを作成
fig = make_subplots(specs=[[{'secondary_y': True}]])
for country in sorted_countries:
fig.add_trace(go.Scatter(x=gdp_data_filled.index, y=gdp_data_filled[country], mode='lines', name=countries[country]))
fig.update_layout(
title=f'Nominal GDP (current USD) of G7 countries, China, and India ({start_year}-{end_year})',
xaxis_title='Year',
yaxis_title='GDP (current USD)',
hovermode='x unified',
legend_title_text='Country',
legend=dict(x=0.01, y=0.99, xanchor='left', yanchor='top', orientation='v'),
xaxis=dict(
tickformat='%Y' # 年のみを表示
)
)
fig.show()
描かれたグラフをGoogleDriveに保存する。
from google.colab import drive
import plotly.io as pio
import os
# Google ドライブをマウント
drive.mount('/content/drive')
# 保存先ディレクトリの設定
save_directory = '/content/drive/MyDrive/'
# HTML ファイル名の設定
html_filename = 'gdp_chart.html'
# グラフを HTML ファイルとしてエクスポートし、Google ドライブに保存
pio.write_html(fig, file=os.path.join(save_directory, html_filename), auto_open=False)
出力結果をここに貼り付けたいが、やり方がよくわからない(あるいは、無理なのか)ので、今後の課題。