先日結構大きな地震が有ったので
気になってしまいました。
地震のデータを集めてみたので
可視化することにしました。
解説動画はこちら
さて今回参考にしたのは
気象庁のデータです。
地震データベースがあるので
そこからCSVでダウンロードできるようです。
観測当時からのデータがありますが
震度1とかにしてしまうと
データが多すぎて全件は無理そうでした。
今回は震度5弱以上で抽出し
地震リスト.tsvに保存しています。
早速データを読み込みします。
中身はこんな感じになっています。
つい最近までの震度5弱以上の震源地が記載されています。
これを可視化してみます。
可視化にはFoliumを使用します。
これはデータを地図上にプロットして
見やすくしてくれるものです。
マッピングには緯度経度を使用します。
データだと緯度経度の値などが
文字列かつ形式も違うので
そのままではマッピングに適していません。
DMS形式の緯度経度を
Degree形式の緯度経度に直します。
その他数値であるデータもデータ型を直す
前処理を行うコードがこれです。
これで下処理ができました。
出来上がりはこんな感じです。
早速このデータを使って
Foliumでマッピングしたいと思います。
今回は震度別で色で分けられるように
マッピングしました。
データは前処理したdf1をそのまま使用します。
実行するとHTMLファイルが出来上がります。
それを開くとこんな感じです。
地図の右上から震度別で
表示を切り替えできるようになっています。
震度6以上だとこんな感じに
震度7だけだとこうなります。
先日地震のあった場所は
千葉県の北西部で震度5強を観測しています。
こんな感じでうまくマッピング出来て
いろいろ切り替えながら眺められるので
面白いと思います。
50年以上の観測データのようですが
関東圏では震度6強より大きな地震の発生がなさそうですね。
ただ、ここ最近の大地震を線で結ぶと
きれいに一直線でつながるのが
少し怖いですねーー
無理くりつなげてみましたが
このライン上には何か有るのかも・・・
いつ地震が来ても良いような
備は考えておくべきですね!!!!
今回は地震データを
Folium可視化してみました。
やりたい方はコピペして
試してみてくださいね。
それでは。
気になってしまいました。
地震のデータを集めてみたので
可視化することにしました。
解説動画はこちら
さて今回参考にしたのは
気象庁のデータです。
地震データベースがあるので
そこからCSVでダウンロードできるようです。
観測当時からのデータがありますが
震度1とかにしてしまうと
データが多すぎて全件は無理そうでした。
今回は震度5弱以上で抽出し
地震リスト.tsvに保存しています。
早速データを読み込みします。
import pandas as pd import matplotlib.pyplot as plt %matplotlib inline data1_path = '地震リスト.tsv' df1 = pd.read_table(data1_path)
中身はこんな感じになっています。
つい最近までの震度5弱以上の震源地が記載されています。
これを可視化してみます。
可視化にはFoliumを使用します。
これはデータを地図上にプロットして
見やすくしてくれるものです。
マッピングには緯度経度を使用します。
データだと緯度経度の値などが
文字列かつ形式も違うので
そのままではマッピングに適していません。
DMS形式の緯度経度を
Degree形式の緯度経度に直します。
その他数値であるデータもデータ型を直す
前処理を行うコードがこれです。
# 不明データの削除 df1 = df1[~(df1['緯度']=='不明') | ~(df1['経度']=='不明')] df1 = df1[~(df1['M']=='不明')] df1 = df1.reset_index(drop = True) # 震度データの整理 df1['最大震度'][df1['最大震度']=='震度5'] = '震度5弱' df1['最大震度'][df1['最大震度']=='震度6'] = '震度6弱' # 数値データの整形 df1['緯度2'] = df1['緯度'].str.replace('′N','').str.replace('°','.').str.split('.') df1['経度2'] = df1['経度'].str.replace('′E','').str.replace('°','.').str.split('.') df1['深さ'] = df1['深さ'].str.replace(' km','') # 緯度経度をDegree形式へ変換 import math from decimal import Decimal, ROUND_HALF_UP # DMS形(度分秒)からDegree形式(度)への変換 def dms_to_degree(d): h,m,s = int(d[0]),int(d[1]),int(d[1]) return Decimal(str(h + (m / 60) + (s / 3600))).quantize(Decimal('0.0001'), rounding=ROUND_HALF_UP) # 緯度経度の変換 df1['longitude'] = df1['緯度2'].apply(dms_to_degree) df1['latitude'] = df1['経度2'].apply(dms_to_degree) # データ型変換 df1['longitude'] = df1['longitude'].astype('float') df1['latitude'] = df1['latitude'].astype('float') df1['M'] = df1['M'].astype('float') df1['深さ'] = df1['深さ'].astype('int')
これで下処理ができました。
出来上がりはこんな感じです。
早速このデータを使って
Foliumでマッピングしたいと思います。
今回は震度別で色で分けられるように
マッピングしました。
データは前処理したdf1をそのまま使用します。
import folium from folium.features import CustomIcon import pandas as pd # マーカーの指定 def make_maker(r,color): rad = r['M'] * 1000 name = r['地震の発生日'] + ' ' + r['地震の発生時刻'] +' : ' + r['震央地名'] tmp = folium.Circle( location = [r['longitude'],r['latitude']], popup = name , tooltip = '{0} , 深さ : {1}km , M{2} , {3}'.format(name,r['深さ'],r['M'],r['最大震度']), radius = rad , color = color , fill = True ) return tmp plot_map = folium.Map(location=[適当な緯度,適当な経度] , zoom_start=5) s5j_group = folium.FeatureGroup(name="震度5弱").add_to(plot_map) s5k_group = folium.FeatureGroup(name="震度5強").add_to(plot_map) s6j_group = folium.FeatureGroup(name="震度6弱").add_to(plot_map) s6k_group = folium.FeatureGroup(name="震度6強").add_to(plot_map) s7_group = folium.FeatureGroup(name="震度7").add_to(plot_map) for i, r in df1[df1['最大震度']=='震度5弱'].iterrows(): s5j_group.add_child(make_maker(r,'#99FFFF')) for i, r in df1[df1['最大震度']=='震度5強'].iterrows(): s5k_group.add_child(make_maker(r,'#66FF00')) for i, r in df1[df1['最大震度']=='震度6弱'].iterrows(): s6j_group.add_child(make_maker(r,'#FFFF00')) for i, r in df1[df1['最大震度']=='震度6強'].iterrows(): s6k_group.add_child(make_maker(r,'#FF00FF')) for i, r in df1[df1['最大震度']=='震度7'].iterrows(): s7_group.add_child(make_maker(r,'#FF0000')) folium.LayerControl().add_to(plot_map) plot_map.save("HTMLファイル名")
実行するとHTMLファイルが出来上がります。
それを開くとこんな感じです。
地図の右上から震度別で
表示を切り替えできるようになっています。
震度6以上だとこんな感じに
震度7だけだとこうなります。
先日地震のあった場所は
千葉県の北西部で震度5強を観測しています。
こんな感じでうまくマッピング出来て
いろいろ切り替えながら眺められるので
面白いと思います。
50年以上の観測データのようですが
関東圏では震度6強より大きな地震の発生がなさそうですね。
ただ、ここ最近の大地震を線で結ぶと
きれいに一直線でつながるのが
少し怖いですねーー
無理くりつなげてみましたが
このライン上には何か有るのかも・・・
いつ地震が来ても良いような
備は考えておくべきですね!!!!
今回は地震データを
Folium可視化してみました。
やりたい方はコピペして
試してみてくださいね。
それでは。
コメントする