FoliumでE-statの人口増地域をヒートマップ表示

やりたいこと

日頃、GoogleAnalyticsや会社独自のデータを取り扱う機会が多い。そうした情報を地図上にプロット。営業・広告戦略立案に役立てたい。ということで冒頭に乗ってる地図情報がサンプル。ヒートマップにて表示されていて「なんか凄いんじゃないか?」感がでていて非常によい。できれば、こういうもので会社の偉い人らを立て続けに殴打したい。

用意するもの

Jupyter notebook
Folium
pandas
json
requests
matplotlib
EstatのAPIアカウント
https://www.e-stat.go.jp/api/apiuser/provisional/

ライブラリ系は全てpipしておけばよいです。

Githubにて

https://github.com/kerion546/folium_estat
今回のコードはここからダウンロードできます。

考えながら作っていく

1. E-statからのデータ取得

会社データ使うわけにはいかないので、オープンデータ探していたら、あるらしい。Estatというらしい。

「政府統計の総合窓口(e-Stat)」は、各府省が公表する統計データを一つにまとめ、統計データの検索をはじめとした、さまざまな機能を備えた政府統計のポータルサイトです。各府省が公表している統計表をExcel・CSV・PDF形式でダウンロードすることが可能です。

とのことなので、ここを使うことにした。APIではアカウント登録をすることで、JSONやXMLでGETすることができて簡単に情報が収集できる。今回は練習を兼ねてJSONでの取得を行った。

2. E-statからのデータ整形

json_resでJupyter Notebookの場合取得データが表示される。非常に汚い。なんだこれはという感じ。paramidである程度情報を絞ってますが、全体像を見たい人は、パラメータ削除の上、データを見てね。ここからもう少しデータをわかりやすく整形していく。
※「こんくらいのデータなら、最初からエクセルで整形した方がいいだろ」と思われた方。正解だと思います。

ここでデータフレームの最初を確認すると・・・


とでてくる。データ確認!よかった(小保方感

3. データ整形-ロケーション情報をデータフレームに入れ込む

これで、都道府県と人口増減データがデータフレーム化できた。ただ、これにロケーションデータが紐づいていないと、ヒートマップ表示ができない。誰か、僕じゃない誰かが「都道府県と緯度経度のデータ」なんかをCSV化してくれてないかなと思ったが、見つけられなかった。仕方なく、色々なコピーなどを行ってCSVを自分で作成。

CSVデータはGithubに同じくあげてるので、なんかの機会あれば使ってください。

都道府県の人口増減数と緯度経度のデータがひもづきました。データ確認!よかった。

地図上に何かしらを表示してみる

まずJupyter用に%matplotlib inline宣言して、インライン表示できるように。foliumもインポート。さっきのデータフレーム上の緯度経度それぞれの平均値をfolium.Mapの引数に、zoom_startを5に設定してみます。

なんもない地図が表示されました。デザイン的にもこなれてていい感じ。

寄り道①県庁所在地にマーカーを表示

folium.Makerにcoordinatesっていう緯度経度のリストを渡して、add_toメソッドでtodohuken_mapへ渡してます。GoogleMapとはまた違う風合いのマーカー表示でできあがりました。

寄り道②県庁所在地をヒートマップ表示

もう少し寄り道するとして、マーカー表示でなくて、ヒートマップ表示ならどうなるのか?

ヒートマップの意味を考えると「?」ですが、情報が密(=県庁所在地同士が近い)な地域は赤くなってます。

人口増減を元にヒートマップ化

緯度、経度、人口増減をそれぞれリスト化。またその数値群をタプル化して、リストに入れてきます。FoliumのHeatMapクラスをインスタンス化する際の1つ目、2つ目を緯度・経度に、3つ目をヒートマップ色が紐づくデータにするようです。(自信ない、誤読してるかも)

最後に、ヒートマップ化。日本の政令指定都市がかろうじて赤いか?というような地図ができました。東京だけ真っ赤ですね。今回指定してないですが、[gradient(色のグラデーション)][min_opacity][max_val]などなどパラメータがあるようです。最後のデザイン気にする場合は指定するとよいかと思います。

できたヒートマップ

この記事に関連する記事