最近海外の国について調べるようになり、世界の物価について気になったので世界地図にビックマップ指数でヒートマップ地図を作ってみる。
ビッグマック指数(ビッグマックしすう、英語: 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経由だと正常に読み込めなかったため、ローカルに落とした。
前準備は整ったので、チュートリアルをベースに必要な個所を変えていく。
# 世界地図を作製
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のビックマック指数データにないもの。多分マクドナルドが存在しないのだろう。
Choroplethの引数として場所を指定する引数が用意してあるかと思ったがFoliumのドキュメント を見る限りなさそうだ。気が向いたらFoliumのコードも追いたい。
最後に
ググるとビックマック指数の表は出てくるもののいまいちどの国の物価が高く、どの国が物価が安いのか掴みづらかったたため、Foliumを使い可視化した。
ブラジルの物価が想像より高い事やヨーロッパにはマクドナルドがないなど可視化することで一目でわかるようになった。
実行環境
Python 3.6.4 :: Anaconda, Inc.
folium==0.10.1
pandas==0.22.0