見出し画像

Pythonライブラリのfoliumでサクッとクールなヒートマップを作ってみる

エンジニアのnaruです。こんにちは!

とうとう30度を超える暑い時期がやってきましたね。
そんな時期に皆さまいかがお過ごしでしょうか?

自分は暑がりなのにこの夏真っ盛りの時期に引越しをすることになり、なかなか無茶な計画を立ててしまったなと感じてます。(引っ越しのお兄さま達よあとは全て任せた・・・!)

さて、引っ越しといえば地図、よく見ますよね。
今回はそんな地図に関係する話題です。

最近だと何かの大量の地理的なデータを地図上にプロットしたいといった要求はちょくちょくあると思いますが、本記事ではヒートマップを例にfoliumというPythonライブラリを使えば簡単にマップビジュアライゼーションができるよ、という話を共有したいと思います!

foliumとは

JavaScriptの leaflet.js という地図ライブラリをPythonライブラリにしたもので、データを簡単に地図上にプロットし可視化をすることができます。

インストールは以下のようにコマンドで簡単に行えます。

pip install folium

# Anaconda利用の場合は以下でインストール
conda install -c conda-forge folium

実行環境

本記事は以下の環境で実行確認しています。
・macOS Big Sur 11.1
・Python 3.7.4
・Jupyter Notebook 6.0.1
・folium 0.11.0

[準備1] データの用意

今回は以下の内閣官房サイトで提供されている「全国医療機関の医療提供体制の状況」にあるオープンデータのCSVファイルを利用して、「データに含まれる医療機関のうち現在入院が制限などされていないところ」のヒートマップを作成してみることとします。
https://corona.go.jp/dashboard/

【注意】
本記事はヒートマップの作成方法についてご紹介することを目的としており、データやその分析結果について責任を持つものではありません。ご了承ください。

[準備2] Pandasで対象データのDataFrameを作成

さて、ここからはJupyter Notebook上で作業していくこととします。
まずは以下で必要なライブラリを読み込みます。

import pandas as pd
import folium
from folium.plugins import HeatMap​

用意していたCSVも読み込みます。

df_all = pd.read_csv('./covid-19_daily_survey.csv')

データの中身を覗いてみると、緯度・経度の情報が含まれていることが確認できます。foliumでヒートマップを作る上ではこちらのカラムの値を使っていくこととなります。

スクリーンショット 2021-06-10 15.23.19

DataFrameのデータを必要なものだけに絞り込みます。

df_hospitalized = df_all.query("医療区分=='入院' & 医療区分回答=='通常'").loc[:,['緯度','経度']]

スクリーンショット 2021-06-10 15.44.51

後ほど利用するHeatMapメソッドで使える形(2次元配列)に上記の緯度・経度データを変形します。

hospitalized_geo_list = df_hospitalized.values.tolist()

スクリーンショット 2021-06-10 15.49.22

[準備3] 地図の設定

foliumの地図表示設定をします。

map = folium.Map(location=[35.658034, 139.701636], zoom_start=9, tiles='cartodbdark_matter')

パラメータの意味については以下の通りとなります。

location:地図の中心とする位置(緯度・経度)
zoom_start:初期表示倍率
tiles:地図のスタイル

今回は、「渋谷駅を中心として」「関東平野全体が映るくらいの倍率で」「ダークでカッコ良さそうなスタイル」の地図を作っています。

(ちなみに余談ですが弊社は今月から渋谷に移転したので渋谷駅を中心としています!)

最後にHeatMapの設定をします。

HeatMap(hospitalized_geo_list, radius=7, blur=5).add_to(map)
radius:それぞれのポイントの半径
blur:ぼかしの総量

よし、準備はできた!地図を出力するぞ!

いよいよ表示です。どうぞ!!

map

スクリーンショット 2021-06-10 16.26.32

そして、このfoliumがすごいのは地図上で拡大・縮小・移動ができることです・・・!

画像5

以下のようにhtmlファイルとして保存しブラウザで開いてあげれば、ブラウザ内全画面で自由にみることもできます。

map.save('covid-19_hospitalized_map.html')

さらに

本記事では省略しますが、時系列のデータであれば、HeatMapWithTimeを利用することで以下のように地図上で時間ごとのヒートマップ遷移を見ることもできます。

画像6

最後に

スペースマーケットでは現在バックエンドエンジニアを募集中です!
スペースシェア文化を自分たちの手で作り広めていきたい方、ご応募お待ちしてます!!


この記事が気に入ったらサポートをしてみませんか?