foliumで首都圏の9月の地震の震源地を地図上にプロットする

9月に入ってから、何回か地震のような微震を感じ、地震だと思って天気サイトの地震情報を見ても地震は発生していないという現象を経験している。自分が揺れているだけなのか、それとも本当に自分の家の近辺でtenki.jpに載らない地震が発生しているのかを知るために、9月に入ってからの全ての地震をプロットして検証してみることにした。

スポンサーリンク

地震データの準備

このサイトを使えば、ウェブ上のテーブルをそのままpandasのdataframeに引っ張ってこれるのだが、震度1以上の地震しか載っていないので、このサイトから地震情報をスクレイピングするしかない。先ず、必要なモジュールのインポートとスクレイピングした地震データをロードする。

import folium
import pandas as pd

df = pd.read_csv('sep_2019_earthquakes.csv',encoding='utf-8')

ロードしたデータをチラ見する。

df.head()
経度 緯度 深さ マグニチュード 地名
0 2019/9/1 00:00:20.9 30.083611 130.951667 30 1.0 種子島近海
1 2019/9/1 00:00:21.7 37.085556 140.534444 7 0.3 福島県中通り
2 2019/9/1 00:00:42.7 37.785278 140.016667 7 0.2 山形県置賜地方
3 2019/9/1 00:06:53.7 23.983889 122.835278 11 1.9 与那国島近海
4 2019/9/1 00:07:42.7 35.868889 138.118611 11 -0.5 長野県南部
df.tail()
経度 緯度 深さ マグニチュード 地名
10204 2019/9/21 23:52:43.6 40.216667 142.385556 21 1.9 岩手県沖
10205 2019/9/21 23:53::1.8 36.752500 137.885278 4 0.1 長野県北部
10206 2019/9/21 23:55:10.8 37.017500 139.866944 12 0.2 栃木県北部
10207 2019/9/21 23:56:44.7 35.866944 137.351111 247 1.8 岐阜県飛騨地方
10208 2019/9/21 23:58:39.2 35.650833 137.300000 9 -0.1 岐阜県美濃東部

9月1日〜9月21日の3週間で10209回も地震が発生しているようである。マグニチュードがマイナスって何なのかを調べてみたらこのサイトにて以下のように説明されていた。

(梅田):そうです。マグニチュードマイナス2ですと、1.6m=160cmくらいの断層が動いたことになります。

マイナスマグニチュードは非常に微小な地震だということらしい。

スポンサーリンク

foliumで震源地を地図上にプロット

foliumはデータがでか過ぎるとプロットできない、さらに、ワードプレスで投稿するためにデータを細かく分割してやる必要がある。

df1 = df[9609:10209]
m = folium.Map(location=[35.658099,139.741357],tiles="OpenStreetMap",zoom_start=5)
for i in range(0,len(df1)):
    if df1.iloc[i]['マグニチュード']>=-1 and df1.iloc[i]['マグニチュード']<1.0:
        folium.CircleMarker([df1.iloc[i]['経度'],df1.iloc[i]['緯度']],
        radius=10*df1.iloc[i]['マグニチュード']+1,
        popup=folium.Popup('<div style="font-size: 18pt; color : black">'
        +"発生日:"+df1.iloc[i]['日']+"<br>"+"発生時刻:"+df1.iloc[i]['時']+
        "<br>"+"震源地:"+df1.iloc[i]['地名']+"<br>"+"マグニチュード:"+
        df1.iloc[i]['マグニチュード'].astype(str)+"<br>"+"震源の深さ:"+
        df1.iloc[i]['深さ'].astype(str)+"km"+'</div>',max_width=330,min_width=330,
        parse_html=False),color='purple',fill_color='purple',).add_to(m)

    if df1.iloc[i]['マグニチュード']>=1.0 and df1.iloc[i]['マグニチュード']<3.0:
        folium.CircleMarker([df1.iloc[i]['経度'],df1.iloc[i]['緯度']],
        radius=9.5*df1.iloc[i]['マグニチュード']+1,
        popup=folium.Popup('<div style="font-size: 18pt; color : black">'
        +"発生日:"+df1.iloc[i]['日']+"<br>"+"発生時刻:"+df1.iloc[i]['時']+
        "<br>"+"震源地:"+df1.iloc[i]['地名']+"<br>"+"マグニチュード:"+
        df1.iloc[i]['マグニチュード'].astype(str)+"<br>"+"震源の深さ:"+
        df1.iloc[i]['深さ'].astype(str)+"km"+'</div>',max_width=330,min_width=330,
        parse_html=False),color='darkyellow',fill_color='darkyellow',
        ).add_to(m)

    if df1.iloc[i]['マグニチュード']>=3.0 and df1.iloc[i]['マグニチュード']<4.0:
        folium.CircleMarker([df1.iloc[i]['経度'],df1.iloc[i]['緯度']],
        radius=9*df1.iloc[i]['マグニチュード']+1,
        popup=folium.Popup('<div style="font-size: 18pt; color : black">'
        +"発生日:"+df1.iloc[i]['日']+"<br>"+"発生時刻:"+df1.iloc[i]['時']+
        "<br>"+"震源地:"+df1.iloc[i]['地名']+"<br>"+"マグニチュード:"+
        df1.iloc[i]['マグニチュード'].astype(str)+"<br>"+"震源の深さ:"+
        df1.iloc[i]['深さ'].astype(str)+"km"+'</div>',max_width=330,min_width=330,
        parse_html=False),color='green',fill_color='green',).add_to(m)

    if df1.iloc[i]['マグニチュード']>=4.0 and df1.iloc[i]['マグニチュード']<5.0:
        folium.CircleMarker([df1.iloc[i]['経度'],df1.iloc[i]['緯度']],
        radius=8.5*df1.iloc[i]['マグニチュード']+1,
        popup=folium.Popup('<div style="font-size: 18pt; color : black">'
        +"発生日:"+df1.iloc[i]['日']+"<br>"+"発生時刻:"+df1.iloc[i]['時']+
        "<br>"+"震源地:"+df1.iloc[i]['地名']+"<br>"+"マグニチュード:"+
        df1.iloc[i]['マグニチュード'].astype(str)+"<br>"+"震源の深さ:"+
        df1.iloc[i]['深さ'].astype(str).astype(str)+"km"+'</div>',max_width=330,min_width=330,
        parse_html=False),color='violet',fill_color='violet',).add_to(m)

    if df1.iloc[i]['マグニチュード']>=5.0:
        folium.CircleMarker([df1.iloc[i]['経度'],df1.iloc[i]['緯度']],
        radius=8*df1.iloc[i]['マグニチュード']+1,
        popup=folium.Popup('<div style="font-size: 18pt; color : black">'
        +"発生日:"+df1.iloc[i]['日']+"<br>"+"発生時刻:"+df1.iloc[i]['時']+
        "<br>"+"震源地:"+df1.iloc[i]['地名']+"<br>"+"マグニチュード:"+
        df1.iloc[i]['マグニチュード'].astype(str)+"<br>"+"震源の深さ:"+
        df1.iloc[i]['深さ'].astype(str)+"km"+'</div>',max_width=330,min_width=330,
        parse_html=False),color='blue',fill_color='blue',).add_to(m)
m

全国ではなく、自宅近辺だけに絞って震源地を表示させる。

df2 = df[df['地名'].str.contains("東京|埼玉|神奈川|山梨|千葉|栃木")]
len(df2)
617
m = folium.Map(location=[35.658099,139.741357],tiles="OpenStreetMap",zoom_start=5)
for i in range(0,len(df2)):
    if df2.iloc[i]['マグニチュード']>=-1 and df2.iloc[i]['マグニチュード']<1.0:
        folium.CircleMarker([df2.iloc[i]['経度'],df2.iloc[i]['緯度']],
        radius=10*df2.iloc[i]['マグニチュード']+1,
        popup=folium.Popup('<div style="font-size: 18pt; color : black">'
        +"発生日:"+df2.iloc[i]['日']+"<br>"+"発生時刻:"+df2.iloc[i]['時']+
        "<br>"+"震源地:"+df2.iloc[i]['地名']+"<br>"+"マグニチュード:"+
        df2.iloc[i]['マグニチュード'].astype(str)+"<br>"+"震源の深さ:"+
        df2.iloc[i]['深さ'].astype(str)+"km"+'</div>',max_width=330,min_width=330,
        parse_html=False),color='purple',fill_color='purple',).add_to(m)

    if df2.iloc[i]['マグニチュード']>=1.0 and df2.iloc[i]['マグニチュード']<3.0:
        folium.CircleMarker([df2.iloc[i]['経度'],df2.iloc[i]['緯度']],
        radius=9.5*df2.iloc[i]['マグニチュード']+1,
        popup=folium.Popup('<div style="font-size: 18pt; color : black">'
        +"発生日:"+df2.iloc[i]['日']+"<br>"+"発生時刻:"+df2.iloc[i]['時']+
        "<br>"+"震源地:"+df2.iloc[i]['地名']+"<br>"+"マグニチュード:"+
        df2.iloc[i]['マグニチュード'].astype(str)+"<br>"+"震源の深さ:"+
        df2.iloc[i]['深さ'].astype(str)+"km"+'</div>',max_width=330,min_width=330,
        parse_html=False),color='darkyellow',fill_color='darkyellow',
        ).add_to(m)

    if df2.iloc[i]['マグニチュード']>=3.0 and df2.iloc[i]['マグニチュード']<4.0:
        folium.CircleMarker([df2.iloc[i]['経度'],df2.iloc[i]['緯度']],
        radius=9*df2.iloc[i]['マグニチュード']+1,
        popup=folium.Popup('<div style="font-size: 18pt; color : black">'
        +"発生日:"+df2.iloc[i]['日']+"<br>"+"発生時刻:"+df2.iloc[i]['時']+
        "<br>"+"震源地:"+df2.iloc[i]['地名']+"<br>"+"マグニチュード:"+
        df2.iloc[i]['マグニチュード'].astype(str)+"<br>"+"震源の深さ:"+
        df2.iloc[i]['深さ'].astype(str)+"km"+'</div>',max_width=330,min_width=330,
        parse_html=False),color='green',fill_color='green',).add_to(m)

    if df2.iloc[i]['マグニチュード']>=4.0 and df2.iloc[i]['マグニチュード']<5.0:
        folium.CircleMarker([df2.iloc[i]['経度'],df2.iloc[i]['緯度']],
        radius=8.5*df2.iloc[i]['マグニチュード']+1,
        popup=folium.Popup('<div style="font-size: 18pt; color : black">'
        +"発生日:"+df2.iloc[i]['日']+"<br>"+"発生時刻:"+df2.iloc[i]['時']+
        "<br>"+"震源地:"+df2.iloc[i]['地名']+"<br>"+"マグニチュード:"+
        df2.iloc[i]['マグニチュード'].astype(str)+"<br>"+"震源の深さ:"+
        df2.iloc[i]['深さ'].astype(str).astype(str)+"km"+'</div>',max_width=330,min_width=330,
        parse_html=False),color='violet',fill_color='violet',).add_to(m)

    if df2.iloc[i]['マグニチュード']>=5.0:
        folium.CircleMarker([df2.iloc[i]['経度'],df2.iloc[i]['緯度']],
        radius=8*df2.iloc[i][