- 更新日: 2016年7月1日
- Ruby
熊本地震の余震が夜に多いのは本当か?Rubyプログラムで検証してみた
昨晩の23時過ぎ頃に少し大きめの余震(震度4、マグニチュード3.8)があって、ちょっと久しぶりにびっくりしました。最近は熊本も余震が減ってきていて、若干油断気味でした。
4/14、4/16の熊本地震の前震と本震発生以降、地震が夜に多いように感じていまして、Twitter などを見ていても同じように感じる熊本人の方は多そうです。ただ、夜間は昼間に比べるとじっと静かに過ごす時間が多いですし、単純に昼間より地震の揺れを体感しやすいだけという可能性も高い。
ということで、実際に熊本地震の余震は夜のほうが多いのか?を Ruby プログラムを作って軽く検証してみました。気象庁サイトなどで、1日24時間の時間帯ごとのトータルの地震発生回数のデータがないかを探したのですけど、見つけられませんでしたので。そういうデータあったら教えて下さい。
こちらのも記事もどうぞ!
熊本地震で自宅に住めなくなってやったことの記録 | EasyRamble
分析用のデータには、日本気象協会 tenki.jp の過去の地震情報をスクレイピングして利用させて頂きました。スクレイピングとは、ウェブページをプログラムで取得してデータ解析することです。検証対象のデータは、震源地が熊本県で、期間が2016/04/14の熊本地震発生日時から今日(2016/06/30)の午前中までのものです。
時間帯ごとの地震発生回数
以下早速ですけど、熊本県を震源とする4/14〜6/30に発生した地震について、1日の時間帯ごとのトータルの地震発生回数をグラフ表示した結果。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
4/14〜6/30までの総地震回数: 1112回 --- 12時〜23時&0時〜11時で表示 --- 12時: 44回 ******************************************** 13時: 38回 ************************************** 14時: 50回 ************************************************** 15時: 48回 ************************************************ 16時: 45回 ********************************************* 17時: 49回 ************************************************* 18時: 50回 ************************************************** 19時: 49回 ************************************************* 20時: 46回 ********************************************** 21時: 51回 *************************************************** 22時: 60回 ************************************************************ 23時: 33回 ********************************* 0時: 53回 ***************************************************** 1時: 52回 **************************************************** 2時: 35回 *********************************** 3時: 57回 ********************************************************* 4時: 53回 ***************************************************** 5時: 51回 *************************************************** 6時: 41回 ***************************************** 7時: 49回 ************************************************* 8時: 43回 ******************************************* 9時: 28回 **************************** 10時: 44回 ******************************************** 11時: 43回 ******************************************* |
なかなか微妙な結果。夜間の22時台と3時台の夜間の時間帯が、地震発生回数が特に多いのがすぐに分かります。しかし、23時台と2時台の地震回数がかなり少なく、夜間を頂上とする綺麗な山型のグラフにはなっていなくて実に微妙…。ただ何となくですが、22時台、3時台の他にも、夜間の0時台、1時台、4時台などは地震回数が多そうなのが分かる。
次に地震発生回数の多い時間帯の順にソートして表示してみた。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
--- 地震回数の多い時間帯の順に表示 --- 22時: 60回 ************************************************************ 3時: 57回 ********************************************************* 4時: 53回 ***************************************************** 0時: 53回 ***************************************************** 1時: 52回 **************************************************** 21時: 51回 *************************************************** 5時: 51回 *************************************************** 14時: 50回 ************************************************** 18時: 50回 ************************************************** 17時: 49回 ************************************************* 7時: 49回 ************************************************* 19時: 49回 ************************************************* 15時: 48回 ************************************************ 20時: 46回 ********************************************** 16時: 45回 ********************************************* 10時: 44回 ******************************************** 12時: 44回 ******************************************** 11時: 43回 ******************************************* 8時: 43回 ******************************************* 6時: 41回 ***************************************** 13時: 38回 ************************************** 2時: 35回 *********************************** 23時: 33回 ********************************* 9時: 28回 **************************** |
上位1位〜7位までが、夜間〜睡眠中の時間帯という結果になりました。やっぱり熊本地震の余震が夜に多いと感じるのは、気のせいではなかったのか!?
なお tenki.jp のページをスクレイピングして取得できた、4/14〜6/30の熊本県震源の地震回数はトータルで1112回で、実際に発生した総地震回数に比べると少なそうなので、情報の信頼性としてはちょっと心もとないかもしれません。有意に地震が夜に多いとは言い難い気もします。
余震2カ月1740回 昨年の国内発生数並み – 熊本のニュースくまにちコム
6月16日時点で余震が1700回を超えているらしいので、600件ほど少ないです。また、気象庁の震度データベース検索のページに以下の記述がありました。
平成28年4月14日以降、熊本県および大分県で発生した地震のうち、最大震度2以下の地震については、データベースに反映していない地震が多数あります。
震度計が壊れたなどのニュースも聞きましたし、以上を考えると、tenki.jp から取得したデータは発生した全ての地震を網羅できてはいないようです。
検証のために作成した Ruby ソースコード
ざっと書きましたけど以下のような Ruby スクリプトを作成しました。
まずは、tenki.jp の過去の地震情報100ページをローカルに保存するコード。
get_earthquake_data.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/usr/bin/env ruby require 'open-uri' entry_url = 'http://www.tenki.jp/bousai/earthquake/entries?order=&desc=0&max_level=&p=' 1.upto(100) do |i| url = entry_url + i.to_s open(url) do |input| open("./data/#{i.to_s}.html", 'w') do |output| output.write(input.read) end end end |
作成後に実行して、data ディレクトリ以下に検証対象の100ページを取得しました。
1 2 3 |
$ ./get_earthquake_data.rb |
とりあえず新しい方から100ページ取得しましたけど、実際に確認したところ4/14以降のデータは79ページほどでした。
次に取得したページを対象に nokogiri で HTML を解析して、時間帯別の地震発生回数を計算するコード。
kumamoto_earthquake.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
#!/usr/bin/env ruby require 'time' require 'nokogiri' def earthquake_data(file) doc = Nokogiri::HTML(open(file)) table = doc.css("table#earthquake_recent_entries_table") format = "%Y年%m月%d日 %H時%M分頃" data = [] table.xpath('tr').each do |tr| time = tr.xpath('td[2]').inner_text place = tr.xpath('td[3]').inner_text next if time.empty? break if Time.strptime(time, format) < Time.strptime("2016年4月14日 21時20分頃", format) next if place !~ /熊本県/ data.push({ time: time, place: place, magnitude: tr.xpath('td[4]').inner_text, scale: tr.xpath('td[5]//span').inner_text }) end data end earthquakes = [] 1.upto(100) do |i| earthquakes += earthquake_data("./data/#{i}.html") end counts = Hash.new(0) earthquakes.each do |eq| if eq[:time] =~ /([0-9]{1,2})時/ counts[$1.to_i] += 1 end end puts "4/14〜6/30までの総地震回数: #{earthquakes.size}回" puts puts '--- 12時〜23時&0時〜11時で表示 ---' 12.upto(23) do |i| printf("%2d時: ", i) puts "#{counts[i]}回 #{'*' * counts[i]}" end 0.upto(11) do |i| printf("%2d時: ", i) puts "#{counts[i]}回 #{'*' * counts[i]}" end puts puts '--- 地震回数の多い時間帯の順に表示 ---' counts.sort_by{|k, v| v}.reverse.each do |k, v| printf("%2d時: ", k) puts "#{v}回 #{'*' * v}" end |
これを実行したら、前述したグラフ表示の結果がターミナルに出力されます。
1 2 3 |
$ ./kumamoto_earthquake.rb |
magnitude(マグニチュード)や scale(震度)などの情報も取得したけど、今回の検証には利用していません。これらのデータを使って何かしら分析するのも面白そう。以上です。
- Ruby の関連記事
- Gemの作り方(Ruby Gem)
- ローカル開発中のgemをGemfileに書いてインストール
- El Capitanでgemのnative extensionビルド失敗に対応
- Rubyで親クラスから子クラスの定数を参照
- MacabをRubyで使う
- rbenv/ruby-buildでRuby最新バージョンをインストール
- Rubyでクラスインスタンス変数にインスタンスメソッドからアクセス
- 距離1kmあたりの緯度・経度の度数を計算(日本・北緯35度)
- Google Maps Geocoding APIで住所から緯度・経度を取得するRubyコード
- Yahoo地図API(YOLP)のジオコーダAPIで住所から緯度・経度を求めるRubyコード
- 初回公開日: 2016年6月30日
Leave Your Message!