気象庁(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つ同じデータがあるので、次回それを取り除きます。

今回はここまでになります。
お疲れ様でした。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2011年06月20日 17:27
添付ファイル