世界銀行が公開しているオープンデータ(World Bank Open Data)があって、データ取得用のAPIも用意されている。Pythonでこのオープンデータを取得してバブルチャートを作成してみる。
環境
APIで世界銀行のオープンデータを取得
オープンデータの取得にはWBGAPIを使う。WBGAPIでは世界銀行のAPIを利用してPythonでオープンデータにアクセスできる。インストールはpipでできる。
世界銀行のオープンデータには人口や所得、消費電力などいろいろなデータがある。WBGAPIで「power」という語を含むデータを検索してみる。
import wbgapi as wb display(wb.series.info(q='power'))
以下のような結果が得られる。データを取得するときにはこの結果にあるidを使う。
次にオープンデータに含まれる国や地域を確認してみる。オープンデータには国別データの他にいくつかの国をまとめた地域ごとのデータもある。
import wbgapi as wb display(wb.economy.info())
次のような国IDや地域などの情報が確認できる。
![]() |
先の結果にあるregionの情報は以下のようにして確認できる。
import wbgapi as wb display(wb.region.info())
データを取得するときにはデータの種類、国または地域、年を指定できる。以下では2019年のアメリカの人口を取得できる。
import wbgapi as wb display(wb.data.DataFrame(['SP.POP.TOTL'], ['USA'], [2019]))
オープンデータをもとにバブルチャートを作成する
WBGAPIで取得したデータをもとにバブルチャートを作成してみる。まずは必要なPythonライブラリのインストール。
続いて4種類のデータを取得してバブルチャートを作成する。すべての国だと数が多すぎて見づらくなるので人口上位50にしぼってある。使用した4種類のデータは以下の通り。
- SP.POP.TOTL: 人口
- NY.GDP.PCAP.CD: ひとりあたりGDP
- SP.DYN.LE00.IN: 出生時平均寿命
- BN.GSR.FCTY.CD: 一次純所得
%matplotlib inline
import pandas as pd
import wbgapi as wb
import matplotlib.pyplot as plt
import seaborn as sns
# 地域を除いた国のリストを作成
# regionが空白になっていないidのみにする
economy_info = wb.economy.info().items
countries = [ei['id'] for ei in economy_info if ei['region'] != '']
# 2019年の国別の以下のデータを取得する
# SP.POP.TOTL: 人口
# NY.GDP.PCAP.CD: ひとりあたりGDP
# SP.DYN.LE00.IN: 出生時平均寿命
# BN.GSR.FCTY.CD: 一次純所得
df=wb.data.DataFrame(
['SP.POP.TOTL', 'NY.GDP.PCAP.CD', 'SP.DYN.LE00.IN', 'BN.GSR.FCTY.CD'],
countries,
[2019]
)
# データがない国を省いて人口上位50にしぼる
df = df.dropna().sort_values('SP.POP.TOTL', ascending=False).head(50)
plt.figure(figsize=(18, 12))
# バブルチャート作成
# NY.GDP.PCAP.CD: Y軸
# SP.DYN.LE00.IN: X軸
# SP.POP.TOTL: 円の大きさ
# BN.GSR.FCTY.CD: 色
ax = sns.scatterplot(
data=df,
x='NY.GDP.PCAP.CD',
y='SP.DYN.LE00.IN',
size='SP.POP.TOTL',
c=df['BN.GSR.FCTY.CD'],
cmap='autumn_r',
alpha=0.9,
edgecolors='grey',
linewidth=1,
legend=False,
sizes=(20, 5000)
)
# 各円に国IDを表示する
def put_label(x, y, labels, ax):
a = pd.concat({'x': x, 'y': y, 'label': labels}, axis=1)
for i, point in a.iterrows():
ax.text(point['x']+.02, point['y'], str(point['label']))
put_label(df['NY.GDP.PCAP.CD'], df['SP.DYN.LE00.IN'], df.index.to_series(), plt.gca())
plt.show()
次のようなバブルチャートが作成された。





0 件のコメント:
コメントを投稿