PythonとWorld Bankデータで世界の産業構造を可視化する方法
はじめに 世界の国々の経済は、どのように変化しているのでしょうか?今回は、World Bank(世界銀行)が提供するオープンデータを使って、各国の産業構造の変化を可視化してみました。 この記事では、Pythonのpandasとmatplotlibを使って、1997年から2024年までの約30年間の産業構造の変化をグラフにする方法を紹介します。 産業構造とは? 経済学では、産業を3つに分類します: 第一次産業:農業、林業、漁業など(自然から直接資源を得る産業) 第二次産業:製造業、建設業など(原材料を加工する産業) 第三次産業:サービス業、金融、小売など(形のないサービスを提供する産業) 国が経済発展すると、第一次産業から第二次産業へ、そして第三次産業へとシフトしていく傾向があります。これを「産業構造の高度化」と呼びます。 使用したデータ World Bankが提供している以下のデータを使用しました: 第一次産業: Agriculture, forestry, and fishing, value added (% of GDP) 第二次産業: Industry (including construction), value added (% of GDP) 第三次産業: Services, value added (% of GDP) これらは各産業がGDP(国内総生産)に占める割合を示しています。 分析対象国 今回は、経済発展段階や地域が異なる10カ国を選びました: 日本(JPN): 先進国・アジア 中国(CHN): 新興国・急成長 アメリカ(USA): 先進国・北米 ドイツ(DEU): 先進国・欧州 インド(IND): 新興国・南アジア 韓国(KOR): 先進国・アジア インドネシア(IDN): 新興国・東南アジア ベトナム(VNM): 新興国・急成長 シンガポール(SGP): 先進国・都市国家 タイ(THA): 新興国・東南アジア ポーランド(POL): 中所得国・欧州 Pythonコード 以下が実際に使用したコードです。 # 第一次: https://data.worldbank.org/indicator/NV.AGR.TOTL.ZS # 第二次: https://data.worldbank.org/indicator/NV.IND.TOTL.ZS # 第三次: https://data.worldbank.org/indicator/NV.SRV.TOTL.ZS # 産業付加価値GDP import pandas as pd import matplotlib.pyplot as plt # CSVデータ取得 df_1 = pd.read_csv('1.csv', skiprows=3) df_2 = pd.read_csv('2.csv', skiprows=3) df_3 = pd.read_csv('3.csv', skiprows=3) # 国名のマッピング country_names = { 'JPN': 'Japan', 'CHN': 'China', 'USA': 'United States', 'DEU': 'Germany', 'IND': 'India', 'KOR': 'South Korea', 'IDN': 'Indonesia', 'VNM': 'Vietnam', 'SGP': 'Singapore', 'THA': 'Thailand', 'POL': 'Poland', } def to_chart(df, codes, begin, end, title, filename): plt.figure(figsize=(14, 9)) for code in codes: data = df[df['Country Code'] == code] years = [str(year) for year in range(begin, end)] dict_data = data[years].iloc[0].to_dict() years = list(dict_data.keys()) values = list(dict_data.values()) line = plt.plot(years, values, marker='o', linewidth=2, markersize=4) # 線の最初(スタート地点)に国名ラベルを表示 plt.text(years[0], values[0], f'{country_names.get(code, code)} ', verticalalignment='center', horizontalalignment='right', fontsize=9, color=line[0].get_color(), fontweight='bold') plt.xlabel('Year', fontsize=11) plt.ylabel('Value (%)', fontsize=11) plt.title(f'{title} ({begin}-{end})', fontsize=13) plt.grid(True, alpha=0.3) plt.xticks(rotation=45) plt.tight_layout() # 画像として保存 plt.savefig(filename, dpi=300, bbox_inches='tight') plt.close() # 3つのグラフを生成 to_chart(df_1, list(country_names.keys()), 1997, 2024, "第一次産業 (Agriculture, forestry, and fishing)", "chart_primary.png") to_chart(df_2, list(country_names.keys()), 1997, 2024, "第二次産業 (Industry including construction)", "chart_secondary.png") to_chart(df_3, list(country_names.keys()), 1997, 2024, "第三次産業 (Services)", "chart_tertiary.png") 分析結果 第一次産業(農業・林業・漁業) ...