気象庁(AMeDAS)の月降水量データ取得(4)
Rubyを用いてs(測候所あり)の降水量データの取得
エディターを立ち上げ以下のように入力します。ファイル名は「get_prec_s.rb」として保存してください。
out_file = "c:/ronbun/data/month_prec_all_s.txt"
out = open(out_file,"w")
v = []
out.printf "statioin_number,name,year,Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec,longitude,latitude,altitude\n"
printf "statioin_number,name,year,Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec,longitude,latitude,altitude\n"
b = "c:/ronbun/data/p_new_csv_all_s.txt"
open(b).each do |liner|
v = liner.chop.split(",")
b_n = v[1].to_s
file = "http://www.data.jma.go.jp/obd/stats/etrn/view/monthly_s3.php?block_no=" + b_n + "&view=a13"
require 'open-uri'
open(file) {|f|
f.each_line {|line|
if %r|<tr class="mtx" style="text-align:right;"><th style="white-space:nowrap"><div id="a_print">| =~ line
line.scan(%r|\d\d\d\d.+|){|matche|
matching = matche.delete('[A-Za-z_"/=)]|<>]')
printf "%s,%s,",v[1],v[2]
out.printf "%s,%s,",v[1],v[2]
print matching.to_s
out.printf "%s,",matching.to_s
}
printf "%.5f,%.5f,%.1f\n",v[9].to_f,v[10].to_f,v[8].to_f
out.printf "%.5f,%.5f,%.1f\n",v[9].to_f,v[10].to_f,v[8].to_f
end
}
}
end
##########配列の要素############################################################
=begin
v[0] = a or s
v[1] = block_no
v[2] = name
v[3] = longitude
v[4] = latitude
v[5] = altitude
##########再配列################################################################
[0] = station_number
[1] = name
[2] = year
[3] = jan
[4] = feb
[5] = mar
[6] = apr
[7] = may
[8] = jun
[9] = jul
[10] = aug
[11] = sept
[12] = oct
[13] = nov
[14] = dec
[15] = lon
[16] = lat
[17] = alt
=end
加工データの表示
コマンドプロンプトを立ち上げて下さい。
「get_prec_s.rb」が存在するディレクトリまで移動します。
ここで、
ruby get_prec_s.rb
と打つと以下の様になっています。
このままでは、0000などの余分なものがあるので、それを取り除きます。
Rubyを用いて余分なものの除去
エディターを立ち上げ以下のように入力します。ファイル名は「get_prec_s_csv.rb」として保存してください。
out_file = "c:/ronbun/data/prec_all_s.csv"
out = open(out_file,"w")
v = []
out.printf "statioin_number,name,year,Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec,annual,longitude,latitude,altitude\n"
printf "statioin_number,name,year,Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sept,Oct,Nov,Dec,annual,longitude,latitude,altitude\n"
file = "c:/ronbun/data/month_prec_all_s.txt"
open(file) {|f|
f.each_line {|line|
if %r|\d\d\d\d\d| =~ line
shift1 = line.gsub(/\s\s/, " ")
shift2 = shift1.gsub(/\s0000/, ",")
shift3 = shift2.gsub(/\s1000/, ",")
shift4 = shift3.gsub(/\s0010/, ",")
shift5 = shift4.gsub(/\s0001/, ",")
shift6 = shift5.gsub(/\s1010/, ",")
shift7 = shift6.gsub(/\s1001/, ",")
shift8 = shift7.gsub(/\s1110/, ",")
liner = shift8.delete(" ")
v = liner.chop.split(",")
out.printf "%s,%s,%s,", v[0],v[1],v[2]
if %r|[^\d+.\d+]| =~ v[3]
v[3] = 0; out.printf "%s,", v[3]
else
out.printf "%s,", v[3]
end
if %r|[^\d+.\d+]| =~ v[4]
v[4] = 0; out.printf "%s,", v[4]
else
out.printf "%s,", v[4]
end
if %r|[^\d+.\d+]| =~ v[5]
v[5] = 0; out.printf "%s,", v[5]
else
out.printf "%s,", v[5]
end
if %r|[^\d+.\d+]| =~ v[6]
v[6] = 0; out.printf "%s,", v[6]
else
out.printf "%s,", v[6]
end
if %r|[^\d+.\d+]| =~ v[7]
v[7] = 0; out.printf "%s,", v[7]
else
out.printf "%s,", v[7]
end
if %r|[^\d+.\d+]| =~ v[8]
v[8] = 0; out.printf "%s,", v[8]
else
out.printf "%s,", v[8]
end
if %r|[^\d+.\d+]| =~ v[9]
v[9] = 0; out.printf "%s,", v[9]
else
out.printf "%s,", v[9]
end
if %r|[^\d+.\d+]| =~ v[10]
v[10] = 0; out.printf "%s,", v[10]
else
out.printf "%s,", v[10]
end
if %r|[^\d+.\d+]| =~ v[11]
v[11] = 0; out.printf "%s,", v[11]
else
out.printf "%s,", v[11]
end
if %r|[^\d+.\d+]| =~ v[12]
v[12] = 0; out.printf "%s,", v[12]
else
out.printf "%s,", v[12]
end
if %r|[^\d+.\d+]| =~ v[13]
v[13] = 0; out.printf "%s,", v[13]
else
out.printf "%s,", v[13]
end
if %r|[^\d+.\d+]| =~ v[14]
v[14] = 0; out.printf "%s,", v[14]
else
out.printf "%s,", v[14]
end
if %r|[^\d+.\d+]| =~ v[15]
v[15] = 0; out.printf "%s,", v[15]
else
out.printf "%s,", v[15]
end
puts liner
out.printf "%s,%s,%s\n", v[16],v[17],v[18]
end
}
}
##########配列の要素############################################################
=begin
[0] = station_number
[1] = name
[2] = year
[3] = jan
[4] = feb
[5] = mar
[6] = apr
[7] = may
[8] = jun
[9] = jul
[10] = aug
[11] = sept
[12] = oct
[13] = nov
[14] = dec
[15] = annual
[16] = lon
[17] = lat
[18] = alt
=end
加工データの表示
コマンドプロンプトを立ち上げて下さい。
「get_prec_s_csv.rb」が存在するディレクトリまで移動します。
ここで、
ruby get_prec_s_csv.rb
と打つと以下の様になっています。
今回はここまでになります。
お疲れ様でした。
最終更新:2011年05月18日 15:12