気象庁(AMeDAS)の月降水量データ取得(1)
データの説明
最終的にほしいデータは下のURLのようになっています。(例は1978年の松阪です。)
しかし、先程のURLは以下のように省略できます。
なので、月降水量を得るために必要なのは、block_noとyearの値ですが、block_noを得るためには、prec_noが必要となるので、
今回はprec_noを取得してから、block_noを取得していきます。
※block_noは各観測点固有の番号で、prec_noは基本的には都道府県のことです(例外あり)
Rubyを用いてprec_noの取得
下のURLから、prec_noを得ます。
Rubyを用いてデータを加工する
では、エディターを立ち上げ以下のように入力します。ファイル名は「get_prec_no.rb」として保存してください。
out_file = "c:/ronbun/data/prec_no.txt"
out = open(out_file,"w")
require 'open-uri' #"open-uri"はHPのソースを読み込むもの
open("http://www.data.jma.go.jp/obd/stats/etrn/select/prefecture00.php?prec_no=&prec_ch=&block_no=&block_ch=&year=&month=&day=&elm=&view=") {|f|
f.each_line {|line|
if line.scan(/prec_no=\d+/){|matche|
matching = matche.delete('prec_no=')
puts matching
out.printf "%s\n",matching
}
end
}
}
加工データの表示
では、コマンドプロンプトを立ち上げて下さい。
cd というコマンドで、「get_prec_no.rb」が存在するディレクトリまで移動します。
ここで、
ruby get_prec_no.rb
と打つと以下の様になっています。
Rubyを用いてblock_noの取得
エディターを立ち上げ以下のように入力します。ファイル名は「get_csv.rb」として保存してください。
out_file = "c:/ronbun/data/csv_all.txt"
out = open(out_file,"w")
v = [] # 配列の初期化
file = "c:/ronbun/data/prec_no.txt"
open(file).each do |liner|
require 'open-uri'
open("http://www.data.jma.go.jp/obd/stats/etrn/select/prefecture.php?prec_no=" + liner.to_s) {|f|
f.each_line {|line|
if %r|'.','\d+','.+','.+','\d\d','\d\d.\d','\d\d\d','\d\d.\d','\d+'| =~ line
line.scan(%r|'.','\d+','.+','.+','\d\d','\d\d.\d','\d\d\d','\d\d.\d','\d+'|){|matche|
matching = matche.delete("'")
v = matching.chop.split(",")
puts matching
#####degreeをddmmに変更する#####################################################
a = (v[7].to_f / 60).to_f
degree_lon = (v[6].to_f + a)
b = (v[5].to_f / 60).to_f
degree_lat = (v[4].to_f + b)
################################################################################
out.printf "%s,%.5f,%.5f\n",matching,degree_lon,degree_lat }
elsif %r|'.','\d+','.+','.+','\d\d','\d\d.\d','\d\d\d','\d\d.\d','\d+.\d+'| =~ line
line.scan(%r|'.','\d+','.+','.+','\d\d','\d\d.\d','\d\d\d','\d\d.\d','\d+.\d'|){|matche|
matching = matche.delete("'")
v = matching.chop.split(",")
a = (v[7].to_f / 60).to_f
degree_lon = (v[6].to_f + a)
b = (v[5].to_f / 60).to_f
degree_lat = (v[4].to_f + b)
out.printf "%s,%.5f,%.5f\n",matching,degree_lon,degree_lat }
end
}
}
end
#####配列の要素#################################################################
=begin
v[0] = a or s
v[1] = block_no
v[2] = 漢字名
v[3] = カナ名
v[4] = 緯度(度)
v[5] = 緯度(分)
v[6] = 経度(度)
v[7] = 経度(分)
v[8] = 標高
=end
################################################################################
加工データの表示
コマンドプロンプトを立ち上げて下さい。
cd というコマンドで、「get_csv.rb」が存在するディレクトリまで移動します。
ここで、
ruby get_csv.rb
と打つと以下の様になっています。
ただし、このままだと上のように2つ同じデータがあるので、次回それを取り除きます。
今回はここまでになります。
お疲れ様でした。
最終更新:2011年06月20日 17:27