気象庁(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
添付ファイル