世界銀行が公開しているオープンデータ(World Bank Open Data)があって、データ取得用のAPIも用意されている。Pythonでこのオープンデータを取得してバブルチャートを作成してみる。
環境
APIで世界銀行のオープンデータを取得
オープンデータの取得にはWBGAPIを使う。WBGAPIでは世界銀行のAPIを利用してPythonでオープンデータにアクセスできる。インストールはpipでできる。
世界銀行のオープンデータには人口や所得、消費電力などいろいろなデータがある。WBGAPIで「power」という語を含むデータを検索してみる。
1 2 3 | import wbgapi as wb display(wb.series.info(q = 'power' )) |
以下のような結果が得られる。データを取得するときにはこの結果にあるidを使う。
次にオープンデータに含まれる国や地域を確認してみる。オープンデータには国別データの他にいくつかの国をまとめた地域ごとのデータもある。
1 2 3 | import wbgapi as wb display(wb.economy.info()) |
次のような国IDや地域などの情報が確認できる。
![]() |
先の結果にあるregionの情報は以下のようにして確認できる。
1 2 3 | import wbgapi as wb display(wb.region.info()) |
データを取得するときにはデータの種類、国または地域、年を指定できる。以下では2019年のアメリカの人口を取得できる。
1 2 3 | 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: 一次純所得
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | % 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 件のコメント:
コメントを投稿