サッカーを通じて観戦力と分析力を上げていくブログ

基本的にはサッカー×データに関して試してみたことをまとめています。最近はもっぱらPythonを使った可視化中心。時々自分の好きなガジェットも。

【データ可視化×Python】foliumを使って福島県の統計データを地図上に可視化してみる(コロプレス図)

今回はfoliumというPythonのライブラリを使ってコロプレス図を作成してみたいと思います。コロプレス図は、選挙の時などに使用される「データを元に区域毎に色分けされた地図」のことです。地域毎の統計データは豊富にありますし、何より可視化することで直感的に分かるようになるので、有用性は高いと思われます。今回はいわきFCのある福島県の統計データを題材にしてやっていきます。

f:id:virgilvd:20190317204122p:plain

▲こんな感じのアウトプットになります。

準備するデータ

福島県の市町村別人口を可視化してみたいと思います。この場合に必要になる情報は下記の3つです。

・市町村別の人口データ

福島県市町村で区切られたGeoJsonデータ

・各市町村の行政区分コードのデータ

それぞれどういったデータなのか、どうやって入手するのか個別に解説していきます。

・市町村別の人口データ

まずは当然ですが、可視化したいデータが必要になります。今回の場合は、福島県の公式サイトに統計情報が公開されていましたのでそのまま使っていきます。pdfファイルのままではPythonで扱えない(扱いづらい)ので、下記のようなcsvに変換/整形しておきます。

f:id:virgilvd:20190317193515p:plain

福島県市町村で区切られたGeoJsonデータ

国土交通省GISホームページによると、GeoJsonとはGeoJSON とは、

GIS 関連データの一つで、様々な地理的データを記述するためのフォーマット

のことだそうです。県や市区町村の境界線の緯度経度の情報がJson形式でまとめられており、これを元にfoliumは塗り分けの境目を認識します。

f:id:virgilvd:20190317194725p:plain

▲GeoJsonの中身

日本地図に関するGeoJsonに関しては、国土交通省が「国土数値情報 ダウンロードサービス」という形で無償で提供してくれています。行政区域から福島県を選択し、利用用途などのアンケートを答えることでダウンロードすることが出来ます。

f:id:virgilvd:20190317195411p:plain

ダウンロードしたファイルを解凍すると、.geojson形式のファイルがあることを確認出来るはずです。

・各市町村の行政区分コードのデータ

最後にGeoJsonデータと可視化したい統計データを紐付けるため、行政区分コードなるものを準備する必要があります。(先にダウンロードしたGeoJsonは、行政区分コードとが既に振られています)

福島県の場合は、公式サイトに地方公共団体コードをまとめたページがあり、この番号から下一桁を除いたものが市区町村コードに当たるとの記載があります。これが行政区分コードと一致するので、この情報を先に準備した市区町村別の人口データに結合しておきます。

コロプレス図を作ってみる

使用する環境

今回も使用する環境はGoogle Colabになります。準備したファイルを事前にGoogleドライブ上にあげておきます。

データの整形

foliumではPandas形式のデータを使用します。 Google Colabを使ってPandas形式でデータを読み込む方法は、下記の過去記事を参考にしてみて下さい。

96lovefootball.hatenablog.com

データを取り込んだら、地方公共団体コードを行政区分コードへ変換する処理をする必要があります。元データの時点で直しても良いのですが、折角なのでPythonで処理してみます。また、データを取り込む際に先頭の0が消えてしまうので、そこも足していきます。

まずは数値として読み込まれた地方公共団体コード列を文字列に変換します。

fukushima_data['行政区分コード'] = fukushima_data['地方行政団体コード'].astype('str')

続いてチェックデジットとして付いている下一桁を削除します。

fukushima_data['行政区分コード'] = fukushima_data['行政区分コード'].str[:4]

最後に先頭に0を付けたらデータの整形は完了です。

fukushima_data['行政区分コード'] = fukushima_data['行政区分コード'].str.zfill(5)

f:id:virgilvd:20190317201945p:plain

foliumのインストール

Google Colabではfoliumをいきなりインポートすることも可能なのですが、何故か古いバージョンがインストールされているようなので、最新バージョンをインストールし直します。(2019年3月時点での最新は0.8.3)

!pip install folium==0.8.3
コロプレス図の作成

foliumは、まず基準となる地図を呼び出し、そこにコロプレス図などの情報を付与していくイメージで使用します。基準となる地図の中心を指定する必要があるので、Geocodingというサイトなどでその座標を取得しておきます。今回は福島県の座標を中心にしてみます。

fukushima_location = [37.750299, 140.467551]

GeoJsonファイルも読み込んでおきます。

fukushima_geojson = '/content/gdrive/My Drive/Colab Notebooks/data/N03-18_07_180101.geojson'

後は、下記公式ドキュメントを参考にしながら、各種引数を指定していきます。今回何故かGoogle Colab上に地図が表示されなかったので、最後はHtml形式でGoogleドライブに保存します。東京23区ではちゃんと表示できたのですが。。。何か原因が分かる方がいらっしゃいましたら教えて頂けると助かります。。。

python-visualization.github.io

m = folium.Map(location=fukushima_location,tiles='cartodbpositron',zoom_start=10) 

folium.Choropleth(
    geo_data=fukushima_geojson,
    name='choropleth',
    data=fukushima_data,
    columns=['行政区分コード', '日本人世帯数'],
    key_on='feature.properties.N03_007',
    fill_color='YlGnBu'
).add_to(m)

folium.LayerControl().add_to(m)

m.save('/content/gdrive/My Drive/Colab Notebooks/data/fukushima.html')

保存されたhtmlを開くとこのようになります。いわき市福島市郡山市に人口が集中していることが一発で分かります。

f:id:virgilvd:20190317204122p:plain

自分がJsonに関して詳しくないために少しハマったのですが、上記コードの「key_on」という引数は、GeoJson内の「行政区分コード」の場所を指定しています。

f:id:virgilvd:20190317204438p:plain

fill_colorは、下記サイトと同じ色に対応しているとのことです。

colorbrewer2.org

f:id:virgilvd:20190317204818p:plain

以上がfoliumを使ったコロプレス図の作成方法でした。今度はこれを使った分析をしてみたいと思います。

戦術や分析に関して、こういう見方もあるよ、こうして見た方がいいよ、などご意見等ありましたら、コメントで教えていただけると幸いです。ぜひよろしくお願いいたします!