Pythonでビックマック指数のヒートマップ世界地図を作ってみる
はじめに
最近海外の国について調べるようになり、世界の物価について気になったのでビックマック指数のヒートマップ世界地図を作ってみる。
ビッグマック指数(ビッグマックしすう、英語: Big Mac index)とは、各国の経済力を測るための指数[1]。マクドナルドで販売されているビッグマック1個の価格を比較することで得られる[1]。
wikipedia) より
Folium
サクッと作りたいのでPythonのfoliumという地図ライブラリを利用する。
まずはライブラリをインストール
pip install folium
Foliumのチュートリアル を見ると今回やりたいことに近いサンプルコードがあったため、これをベースに作る。
import pandas as pd import folium url = 'https://raw.githubusercontent.com/python-visualization/folium/master/examples/data' state_geo = f'{url}/us-states.json' state_unemployment = f'{url}/US_Unemployment_Oct2012.csv' state_data = pd.read_csv(state_unemployment) m = folium.Map(location=[48, -102], zoom_start=3) folium.Choropleth( geo_data=state_geo, name='choropleth', data=state_data, columns=['State', 'Unemployment'], key_on='feature.id', fill_color='YlGn', fill_opacity=0.7, line_opacity=0.2, legend_name='Unemployment Rate (%)' ).add_to(m) folium.LayerControl().add_to(m)
アメリカの失業率を州ごとに集計したデータを描画したものだ。
folium.Choroplethの引数となるgeo_dataにアメリカの各州の緯度経度を定義したjsonファイルを渡し、 data引数に失業率を記載したcsvを読み込ませて描画させているようだ。
アメリカの州の緯度経度定義を世界の緯度経度定義に変更、失業率情報をビックマック指数に変更したら出来そうなので実施する。
少し調べてみるとThe Economistが集計しているビックマック指数の情報と世界の緯度経度を定義したファイルがあるGithubがあったため、これを使用する。
ビックマック指数のデータは2011年以後のデータが入っており、集計日の異なる同じ国のデータが入っている。今回はデータの中にある一番集計日が新しいものだけ必要なので古いデータは削除する。
import pandas as pd # Economistが公開しているビッグマック指数のデータを読み込み url = "https://github.com/TheEconomist/big-mac-data/blob/master/output-data/big-mac-full-index.csv" df = pd.read_html(url, header=0)[0] # 1つの国で日付の異なる複数のデータがあるため、古い重複データは削除 df = df.drop_duplicates(['iso_a3'], keep='last')
世界の緯度経度を定義したjsonファイルはurl経由だとJSONDecodeErrorが発生したため、ローカルに落とした。
前準備は整ったので、チュートリアルをベースに必要な個所を変えていく。
import folium # 世界地図を作製 m = folium.Map(location=[50, 0], zoom_start=1) geojson = r'..\Data\worldJson\countries.geo.json' # 地図に色を塗る folium.Choropleth( geo_data=geojson, name='choropleth', data=df,# 描画データ columns=['iso_a3', 'dollar_price'], # ["国コード", "値の列"] key_on='feature.id', fill_color='OrRd',# 色指定 fill_opacity=0.7, # 色の透明度 line_opacity=1,#国境線の透明度 legend_name='big mac index dollar_price' #凡例 ).add_to(m) m.save("world.html")
良い感じに出来た。
黒の部分はThe Economistのビックマック指数データにないもの。
多分マクドナルドが存在しないのだろう。
最後に
ググるとビックマック指数の表は出てくるもののいまいちどの国の物価が高く、どの国が物価が安いのか掴みづらかったたため、Foliumを使い可視化した。
南米の物価が想像より高い事やヨーロッパにはマクドナルドがないなど可視化することで一目でわかるようになった。
今回使用したソースはGithubにあげているので使いたい人はどうぞ。
実行環境
Python 3.6.4 :: Anaconda, Inc. folium==0.10.1 pandas==0.22.0