この広告は、90日以上更新していないブログに表示しています。
RubyやRでスクリプトを書いて可視化してみた.
以下は2011/3/11 0:00から現在時刻までのtenki.jpの地震情報を取得するRubyスクリプト.Nokogiriを使ってスクレイピングする.
#!/usr/bin/env ruby# -*- coding: utf-8 -*-require"open-uri"require"nokogiri"puts"datetime\tplace\tmagnitude"i =1cont =truestop =Time.parse(ARGV[0] ||"2011/03/11 0:00")while cont doc =Nokogiri::HTML(URI("http://tenki.jp/earthquake/entries?p=#{i}").read) first =true doc.search("table#seismicInfoEntries/tr").eachdo |row|# skip the first rowif first first =falsenextend entry = row.search("td").map{|e| e.text} entry[0].gsub!("年","/"); entry[0].gsub!("月","/"); entry[0].gsub!(/日.+/,"") entry[1].gsub!("時",":"); entry[1].delete!("分") entry[2].gsub!("時",":"); entry[2].delete!("分")# datetime datetime =Time.parse("#{entry[0]}#{entry[2]}")if datetime < stop cont =falsebreakend# place place = entry[3].gsub("---","不明")# magnitude magnitude = entry[4][0] ==?M ? entry[4][1..-1].to_f :nil puts [datetime, place, magnitude].join("\t")end i +=1end
以下のように実行すれば,2011/3/11 0:00から現在時刻までの地震情報を取得することができる.Ruby 1.9で動作確認済み.
$ ruby fetch_quake_info.rb > quake.tsv$ head quake.tsvdatetimeplacemagnitude2011-03-19 19:41:00 +0900茨城県南部3.02011-03-19 18:57:00 +0900不明2011-03-19 18:56:00 +0900茨城県北部6.12011-03-19 16:24:00 +0900長野県中部2.92011-03-19 16:14:00 +0900長野県北部2.32011-03-19 13:07:00 +0900新潟県上越地方3.32011-03-19 12:58:00 +0900長野県北部2.32011-03-19 12:08:00 +0900福島県会津2.92011-03-19 10:59:00 +0900新潟県中越地方2.0
なお,スクリプトを実行するとtenki.jpへのアクセスが発生するため,何度も実行して負荷をかけ過ぎたりしないように注意する必要がある.
Rを起動してデータの読み込みと整形を行う.
library(ggplot2)# タブ区切りデータなのでread.delim関数を使うd<- read.delim("quake.tsv")# マグニチュードが欠損している行を取り除くd<- d[!is.na(d$magnitude),]# 日時の文字列をPOSIXctオブジェクトに変換するd$datetime<- as.POSIXct(d$datetime)
qplot関数をgeom = "bar", stat = "identity", position = "identity"で呼び出し,ヒストグラムライクな垂線プロットで可視化する.地震の発生時刻,マグニチュードの大きさ,発生頻度がひと目で分かって便利.
qplot(datetime, magnitude, data= d, color= I("red"), main="Earthquakes in Japan (3/11 0:00 ~ 3/19 20:00)", geom="bar", stat="identity", position="identity")+ scale_x_datetime(format="%m/%d")
震源地の情報を無視しているため,余震以外の地震もプロットされているので注意.
Rubyによるスクレイピングやggplot2による可視化の例として参考になれば幸いです.
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。