はじめに
2022年1月22日に九州で大きな地震が発生しました。地震といえば、僕は2011年の東日本大震災を思い出します。今回は東日本大震災が発生した2011年3月11日の地震情報をfolium
を使って可視化してみたいと思います。
2011年3月11日に起きた地震情報を可視化してみた
実現したいこと
LeafletをPythonで使えるようにしたPythonライブラリのfolium
を使って、震央の位置とマグニチュードを円の大きさで表現したいと思います。
使用するデータ
今回使用するデータは、気象庁が提供している震度データベース検索からダウンロードしたものを使わせていただきました。
ここから、2011年3月11日に発生した最大震度1以上をどこかしらで観測した地震を集計しています。
実際のコード
# 必要なライブラリ
import folium
import pandas as pd
import geopandas as gpd
import numpy as np
import datetime as dt
import re
# ダウンロードしたCSVを読み込む
# データの整形が必要なので、もろもろ修正していく
df_tmp = pd.read_csv('./earthquake.csv')
# マグニチュードが不明なところは除く
df_tmp = df_tmp[df_tmp['Magnitude'] != '不明']
# 使用するために空のデータフレームを作成しておく
df = pd.DataFrame(index=[], columns=['datetime','lat','lon','magnitude'])
# 緯度経度が六十進法で保存されるので、それを十進法に変更する関数を用意する
# 緯度
def Sixty2TenOfLat(row):
lat_splited = re.split('\D+', row['lat'])
lat = float(lat_splited[0]) + float(lat_splited[1]) / 60 + float(lat_splited[2]) / 60 / 60
return lat
# 経度
def Sixty2TenOfLon(row):
lon_splited = re.split('\D+', row['lon'])
lon = float(lon_splited[0]) + float(lon_splited[1]) / 60 + float(lon_splited[2]) / 60 / 60
return lon
# 緯度経度を六十進法から十進法に変更して、使用するデータフレームに格納
df['lat'] = df_tmp.apply(Sixty2TenOfLat, axis=1)
df['lon'] = df_tmp.apply(Sixty2TenOfLon, axis=1)
# マグニチュードは文字列で保存されていたので、`float`に変更して使用するデータフレームに格納
df['magnitude'] = df_tmp['Magnitude'].map(lambda x: float(x))
# 使用する元の地図を作成
# 地図の中心は、震央の緯度経度の平均にしている
map = folium.Map(location=[df['lat'].mean(), df['lon'].mean()], zoom_start=5, tiles='cartodbdark_matter')
# 震央の位置に、マグニチュードの大きさを円の大きさとして描画
# 円の半径は、描画の関係で大きくしている
for i, row in df.iterrows():
folium.CircleMarker(
location=[row['lat'], row['lon']],
radius=row['magnitude']*5,
color='#0000ff',
fill_color='#000055'
).add_to(map)
# 地図を描画
map
実際の結果
上記のコードを実行すると、このような結果が得られました。東北ではたくさんの地震が発生していることがわかります。僕もたくさんの地震が発生したのを直で経験していたので、すごく覚えています。
さいごに
今回は気象庁のデータとLeafletをPythonで使えるようにしたPythonライブラリのfolium
を使って、2011年3月11日に起きた地震情報を可視化してみました。folium
を使うと簡単に、インタラクティブな地図を描画することができます。