sammi@DataScience

Python, Machine Learning, Deep Leaning, Data Science, Kaggle.

スポンサーリンク

python foliumで時系列ヒートマップ(time series heatmap)描く

目次:


はじめに

foliumはpythonの地図描画ライブラリーとしてよく知られています。foliumを使用することよりヒートマップやコロプレス図など様々なグラフを地図上に描くことが可能です。以前はfoliumを使用したことがありますけれども、ほとんどは静的なグラフです。

今回は地図上に時系列ヒートマップで都道府県別の人口がどんなふうに変化するかをプロットしてみようと思います。

ちなみに、実行環境はPython3+JupyterNotebookです。

ライブラリー用意

今回はpandasとfoliumが必要です。

!pip install pandas
!pip install folium

インストール完了したら、ライブラリを導入します:

import pandas as pd
import folium
from folium import plugins

データ準備

一方、データ準備としては、都道府県別の人口は国勢調査サイト(e-stat)から入手できます:

平成29年10月1日現在人口推計 都道府県,男女別人口-総人口

population_df = pd.read_csv("population.csv",encoding="shift-JIS")
population_df.head()

f:id:sammi_baba:20181225063026p:plain

そして、都道府県別のGeocodeいわゆる緯度と経度の情報も必要なので、以下のGithubからダウンロードします:

都道府県庁の所在する緯度と経度(CSV形式)

geo_df = pd.read_csv("prefecturalCapital.csv", encoding="utf-8")
geo_df.head()

f:id:sammi_baba:20181225063028p:plain

フォーマットを揃え

紐付けのために、データのフォーマットを揃えないといけない。

population_df["id"] = population_df.index+1
prefecture_df = pd.merge(population_df,geo_df,on=["id"])
prefecture_df = prefecture_df.drop(["nam_ja","id"],axis=1)
prefecture_df.head()

f:id:sammi_baba:20181225070803p:plain

そして、タイムインデックスを作ります。

time_series = ["17","22","27","28","29"]

それぞれに対して割合を計算します。

for year in time_series:
    prefecture_df["平成"+year+"年"] = prefecture_df["平成"+year+"年"]/max(prefecture_df["平成"+year+"年"])
prefecture_df.head()

f:id:sammi_baba:20181225070807p:plain

foliumで時系列ヒートマップをプロット

プロット用の3Dデータリストを作成します。

heat_data = [[[row['lat'],row['lon'], row["平成"+year+"年"]] for index, row in prefecture_df.iterrows()] for year in time_series]

そのデータリストを地図の上に追加:

japan_map = folium.Map(location=[35, 135], zoom_start=6)
hm = plugins.HeatMapWithTime(heat_data,index=["平成"+year+"年" for year in time_series],auto_play=False,radius=40,max_opacity=1,gradient={0.1: 'blue', 0.25: 'lime', 0.5:'yellow',0.75: 'red'})
hm.add_to(japan_map)
japan_map

可視化の結果:

f:id:sammi_baba:20181225065010g:plain

よく見ると二つの結論が得られます:

  • 日本の人口は関西と関東に集中しています
  • 東京は一極集中しつつ、地方の人口が減少しています

スポンサーリンク