降水量データをステーションごとに分ける作業

今回扱う降水量データの量が多く、処理するのが大変なので、ステーションごとのファイルに分けましょ
今回のところはステーション番号と各ステーションを持つデータ数をチェックするだけです


元データを取り込む

今回扱うデータは、1961~2007年各ステーションの日降水量データ「buchashuju.txt」です。
データがある場所は、O:\学生個人用フォルダ\you\研究データです。
(データのサイズが大きいため、コピーせず、o:ドライブをつながったまま作業してください)

rubyを用いた作業

では、エディターを立ち上げ以下のように入力します。ファイル名は「buchashuju.rb」とし、新しいフォルダを作り、その中で保存してください(前回と同じフォルダでも構わない。私の場合はC:\GIS\china\buchashujuに入れました)。

「buchashuju.rb」スクリプトの内容


file = "o:/学生個人用フォルダ/you/研究データ/buchashuju.txt"   
n_line = 0; rec_number = 0                        #rec_numberはレコード番号
number_before = 0                     #number_beforeは前のステーション番号
open(file).each do |line|                         #fileを開き、各行に対して以下の作 業をおこなう
v = line.chop.split                                     #vはarray と同じ、配列の意味
 station_number = v[0]                                        # v[0]は配列の最初の列
 
 if station_number != number_before                           #"!="は"≠"
   if rec_number > 0                                         # ">"は普段通り、0より大きいの意味
   p [station_number,rec_number]                             
   #1個以上の配列を表示するするのが"[]"を使う、pはputs
   rec_number = 0                                             #rec_numberをまた0に戻る
   end
 end
 number_before = station_number  
 n_line += 1 ; rec_number += 1                 
# 1を足す方法は2つある: ①n_line = n_line + 1    ②n_line += 1 
end
puts n_line

buchashuju.rbの説明:

  1. n_line = 0; rec_number = 0; number_before = 0と定義する
  2. ファイルを開き、以下のことを一行一行でやる
  3. 行末の“Enter”を消し、“,”で分けたデータを配列Vに代入する
  4. 配列Vの最初の列をstation_numberに入れる
  5. もし、 station_number とnumber_beforeが等しくない
  6. そしてrec_number > 0の場合
  7. station_numberとrec_numberを表示する
  8. その後、rec_number が0に戻る
  9. number_before はstation_number を代入
  10. n_lineと rec_numberは行数とともに増加する

例:


では、コマンドプロンプトを立ち上げて下さい。
cd というコマンドで「buchashuju.rb」が存在するディレクトリまで移動します。
ここで、
ruby buchashuju.rb
と打つと表示されます。


途中で止めたいならCtrlを押しながらcを押してください。

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

名前:
コメント:

タグ:

+ タグ編集
  • タグ:
最終更新:2010年07月06日 21:19
添付ファイル