#1.始めに#
店舗の出店計画時に人の動線を確認したりと何かと活躍の場の多い位置情報。
SNSやIoT機器の普及により、位置情報を分析に活用する機会は増々多くなると思います。
今回は直近で位置情報を地図上にプロットして可視化したいな、という機会があり、
調べてみるとpythonで実に簡単に可視化できるらしいとの事。
今回は国勢調査データを使って以下を試してみました。
- Jupyter Notebook上への地図表示
- 位置情報のプロット
- ヒートマップの作成
#2.参考サイトなど#
- ・地図表示用ライブラリ(今回は「Folium(v0.10.1)」というライブラリを使用)
- https://python-visualization.github.io/folium/index.html
- ※「Folium」はOpenStreetMapで呼び出した地図上で動作するようなので、扱うデータに気をつけてください※
- ・e-Stat:政府統計の総合窓口 (国勢調査データ取得)
- http://nlftp.mlit.go.jp/isj/index.html
- ・国土交通省位置参照情報ダウンロードサービス (緯度経度情報取得)
- https://www.e-stat.go.jp/
- folium.Map(params):地図を作成する。
- folium.Popup(params):ポップアップを表示する。
- folium.Marker(params):地図上にピンをプロットする。
- folium.plugins.HeatMap(params):ヒートマップ表示用のレイヤーを作成する。
#3.主なアイテム#
#4.サンプルコード#
● 最初にライブラリをインポートします。
import pandas as pd
import folium
● 事前に作成したデータセットをロードします。
df = pd.read_csv('my_data.csv', encoding='shift_jis')
df.head(10)
● foliumの基本的な用途である、
・地図の表示
・位置情報のプロット
・ポップアップの表示
を試してみます。
# 地図オブジェクト作成
map = folium.Map(location=[35.710402, 139.810668], zoom_start=18)
# ポップアップの作成(「show=True」で常に表示)
p_up = folium.Popup('東京スカイツリー', min_width=0, max_width=1000, show=True)
# 地図オブジェクトにプロット
folium.Marker(location=[35.710402, 139.810668], popup=p_up).add_to(map)
# 地図表示
map
● いよいよ、ヒートマップを表示してみましょう。ヒートマップ表示用のプラグインをインポートします。
from folium.plugins import HeatMap
● 引数として緯度経度情報を渡すことで、ヒートマップが表示できます。各ポイントの半径(radius)とぼかし量(blur)を調整して多少見栄え良くします。
# 地図オブジェクト作成
map = folium.Map(location=[35.710402, 139.810668], zoom_start=5)
# ヒートマップレイヤを地図オブジェクトに追加
HeatMap(df[['緯度', '経度']], radius=5, blur=5).add_to(map)
# 地図表示
map
● 現状、ただレコード数が多くて密度が濃い場所が赤くなっているだけでデータとしての意味は薄いので、「H22-H27の人口増減数」で重みをつけてみましょう。
# 地図オブジェクト作成
map = folium.Map(location=[35.710402, 139.810668], zoom_start=5)
# 引数に人口増減数を追加してヒートマップレイヤを地図オブジェクトに追加
HeatMap(df[['緯度', '経度', '平成22年〜27年の人口増減数【人】']], radius=5, blur=5).add_to(map)
# 地図表示
map
人口増減数の多い地域の赤みが強くなりましたね。
#5.最後に#
どうでしたか?位置情報データを扱うイメージがついたでしょうか。
レンタサイクル業者がユーザーの乗車距離と乗車形態を分析してバイクレンタル事業に踏み込む判断をしたり、行政がイベント時に動線分析をして避難誘導経路を確保したりと、位置情報データはとても活用領域の広いデータです。
ぜひ、色々と試してもらえればと思います!