0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

各国の名目GDPの推移(動的グラフ)

Last updated at Posted at 2023-05-08

はじめに

各国の名目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)

出力結果をここに貼り付けたいが、やり方がよくわからない(あるいは、無理なのか)ので、今後の課題。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?