世界銀行が公開しているオープンデータ(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 件のコメント:
コメントを投稿