Quantcast
Channel: pandas - よちよちpython
Viewing all articles
Browse latest Browse all 30

【foliumのPlugins】HeatMap(ヒートマップ)の使い方

$
0
0

今回は、地図作成ライブラリfoliumの数あるPluginsの中の1つHeatMapを使ってみる。

HeatMap(ヒートマップ)とは

二次元データの数値の高低を、色やその濃淡で表したもの。「マップ」と付いてますが必ずしも地図で表現する訳ではなく、テーブルを値で色分けしたものなどもヒートマップと呼ぶ。色んな種類のヒートマップがある。

地図を色分けする方法として、他に似たものでは コロプレス図(階級区分図)がある。例えば地図を都道府県ごとに境界線で別けて、なにかの統計データによって色分けする。アメリカ大統領選州ごとに赤と青で色分けされた地図など。



使い方

HeatMapクラスの引数と、デフォルト値。

folium.plugins.HeatMap(
    data,
    name=None,
    min_opacity=0.5,
    max_zoom=18,
    radius=25,
    blur=15,
    gradient=None,
    overlay=True,
    control=True,
    show=True,
    **kwargs,
)


     
Heatmapのレイヤー(層)を作ります。



  • パラメータの説明
引数形式説明
data[ lat, lng ] か [ lat, lng, weight ]の、2次元のリストかNumpy配列この座標群に点が置かれる
namestring型。デフォルトはNoneレイヤー(層)に名前をつける。LayerControlで表示する用
min_opacityint型。 デフォルトは1ヒートの色をスタートする時の不透明度。
max_zoomint型。 デフォルトは18ズームレベルが最大強度 (ズームのしかたの強弱)
radiusint型。 デフォルトは25ヒートマップの点の半径。
blurint型。 デフォルトは15ブラー(ぼかし)の程度。
gradientdict型。 デフォルトは None色のグラデーションの設定。 例 {0.4: 'blue', 0.65: 'lime', 1: 'red'}
overlaybool型。 デフォルトはTrueオプションとして、層を追加する。overlay層(True) または base層(False)
controlbool型。 デフォルトはTrueレイヤー(層)を LayerControlに含めるかどうか。
showbool型。 デフォルトはTrueレイヤー(層)を開いて表示するかどうか。 (overlay のみ)。



  • HeatMapのヘルプ

以下を実行で表示されます。

# ヘルプhelp(folium.plugins.HeatMap)


# または (Jupyter上で
?folium.plugins.HeatMap



ヒートマップ地図作成

引数がたくさんあるが、簡単なものだけを。



座標のみ指定

複数の座標のみ指定します。

HeatMap()の引数の座標は2次元で!さもないとエラーが出ます。

import folium
from folium import plugins

# 中心座標(適当
center = [32, 131]

# ベースの地図作成
m = folium.Map(center, zoom_start=12)

# ヒートマップ層を地図に追加
folium.plugins.HeatMap(
    data=[center] # 注意! 2次元にして渡す
).add_to(m)


# 表示
m

Make this Notebook Trusted to load map: File -> Trust Notebook

ただ座標を置いただけのHeatMapレイヤーを生成し、ベースの地図に追加させたもの。



都道府県庁の座標と何かのデータ

都道府県ごとの何かのデータを、都道府県庁の座標と結合させた自作のデータを使ってプロットしてみます。

# 保存済みの変数読み込み
%store -r
# 緯度、経度、何かの数
df_ll
12何かの数
0
愛知県庁35.180319136.90610755523
秋田県39.718600140.1023341044
青森県40.824229140.7401062793
千葉県庁35.604977140.12305153284
愛媛県33.841658132.7656603048
福井県36.065094136.2217541759
福岡県庁33.606314130.41802942183
福島県37.750046140.4677696223
岐阜県35.391149136.7221999785
群馬県36.390642139.0603159451
広島県34.396563132.45962812516
北海道庁43.064309141.34683245830
兵庫県34.690972135.18331845908
茨城県庁36.341807140.44721013516
石川県庁36.594783136.6258395519
岩手県39.703327141.1529202078
香川県34.340297134.0433262424
鹿児島県庁31.560183130.5579684159
神奈川県庁35.447771139.64254290931
高知県33.559497133.5311362144
熊本県32.789826130.7414787467
東京都庁35.689634139.69210119371
京都府庁35.020934135.7553116030
三重県34.730421136.50883510241
宮城県38.268672140.8721703358
宮崎県庁31.910908131.4238985539
長野県庁36.651282138.1809723630
長崎県32.750336129.8679089261
奈良県34.685311135.8329084317
新潟県37.902242139.0235113791
大分県33.238200131.6126748627
岡山県34.661847133.93467927085
沖縄県26.212523127.680771118923
大阪府34.686401135.5201292877
佐賀県33.249439130.29880462131
埼玉県庁35.857315139.6487226404
滋賀県35.004461135.868534780
島根県35.472679133.05072511613
静岡県34.977156138.3831268919
栃木県庁36.565806139.8836151834
徳島県34.065955134.559303236119
鳥取県35.504091134.237919917
富山県36.695565137.2112492434
和歌山県34.225808135.1674913145
山形県38.240320140.3635742259
山口県34.185893131.4707253370
山梨県35.664140138.5685562673

HeatMap()の引数dataは、[緯度, 経度, weight]を2次元のリストかNumpy配列で渡すこともできるとなっているので、このまま使います。

↑のデータフレームをvaluesでNumpy配列に変換して渡した例が次。

import folium
from folium import plugins
import pandas as pd

# 中心座標(平均値を列で出す
center = df_ll.iloc[:,0:2].mean(axis=0).values
center
array([ 35.38254685, 136.03995172])
# ベースの地図作成
m = folium.Map(location=center, zoom_start=5)

# ヒートマップ層を地図に追加
folium.plugins.HeatMap(
    data = df_ll.values, # 2次元を渡す
    radius=15,    
).add_to(m)

# 保存
m.save('pcr_positive.html')

# 表示
m
Make this Notebook Trusted to load map: File -> Trust Notebook

実はコロナの陽性者数のデータを都道府県庁の座標と結合させたデータだったのですが、結合をミスったみたいでw徳島が熱い地区になってしまっている。

おわりに

ヒートマップの作り方とかより、座標とデータを集めたり整形するのが大変。

昔、原爆を積んだ米軍の輸送機が墜落したことがあった。核兵器は容易に核爆発しない構造らしく、そこは免れたのだけど、爆弾が行方不明で見付からない。そこで地図をメッシュ状に分割して、航空機の残骸などから爆弾の落ちているポイントを確率計算して探したのだと。確率をヒートマップで表せば、濃淡の濃いメッシュをピンポイントで探索するとき分かりやすい図になる。

他にどんな使い方があるだろう?



今回は以上。


Viewing all articles
Browse latest Browse all 30

Trending Articles