1. 数値データの取り扱いの初歩
[1.1] 簡単なグラフを書く
まずは gnuplot を使って sin(x) のグラフを書いてみましょう.
$ gnuplot
gnuplot> sin(x)
|
この他にも自分で好きなグラフを書いてみましょう.
gnuplot の詳しい使い方は
gnuplot のホームページ
などを参照してください.
ruby のスクリプトを作成してグラフを書くこともできます.
以下のスクリプトをダウンロードして実行してみましょう.
[1.2] ruby
ruby はまつもとひろゆき氏によって開発されているオブジェクト指向
のスクリプト言語です.
ruby を使ったスクリプトの例としてシェルスクリプトの課題を
解決する ruby スクリプトを挙げます.
こちらを見て
各自で作成したシェルスクリプトと比較してみてください.
メソッドとは
オブジェクトとは
GPhys については
GPhys のホームページを参照してください.
[1.3] netCDF ファイルの中身を見る
まずは netCDF ファイルの中身を見てみましょう.
実験を行なったディレクトリに行き, ファイルの中身を見ます.
これで, メタデータには何が書かれているかを確認してください.
- long_name は温度を表すものになっていますか?
- 単位は正しいでしょうか?
- 意図した時刻まで積分が実行できるているでしょうか? (time の値を見てみましょう)
このようにして netCDF ファイルの中身を確認することができます.
中身がわからなくなってしまった netCDF データについては,
メタデータを確認するようにしましょう.
では, 次に温度のデータの軸を確認しましょう.
温度が
- lon : 経度
- lat : 緯度
DCPAM はスペクトル法だけど, 格子点値に変換されたものが出力される.
格子点の間隔はおよそ何km になっているかわかりますか?
- sig : σ=p/ps (ps は地表面気圧). DCPAM の鉛直座標は気圧に基づいた
ものになっている.
対流圏界面は σ=0.15 付近にあります. 対流圏 (高さおよそ 10km) の
中に鉛直格子点はいくつあるでしょうか?
- time : 時刻
[1.4] 作図スクリプトを作成して大気の状態を眺める
前回, irb を使って図を 1 枚かきました.
ここではその内容をスクリプトに保存して同じことができるようにしましょう.
やり方は簡単です.
- 「結果の可視化」の項目にあった irb で入力したものを ruby スクリプト
に保存する. 更にファイルの1 番先頭に
"#!/usr/bin/env ruby" というおまじないを入れる.
スクリプトの名前は snapshot.rb にする.
- snapshot.rb を実行できるようにパーミッションの設定を行なう.
- 実行してみる.
スクリプトの簡単な解説です.
- 1 行目 おまじない
- 4 行目がデータ入力です.
Temp.nc 中の Temp という変数を
gphys オブジェクトに読みこむことを指定しています.
- 5 行目では図の出力先の設定を行なっています.
DCL.gropn(1) とすると画面に出力されます.
DCL.gropn(2) とすると pdf ファイルに出力されます.
- 7 行目では軸の設定を行なっています.
'itr'=> 2 は縦軸が対数軸・横軸が線形軸となる指定を表します.
縦軸・横軸ともに線形軸にするには 'itr'=> 1 とします.
- 8 行目が色塗りの図を描く部分です.
gphys のメソッドを使ってこの行を書き換えると色々な種類の
図を描くことができます. 例えば,
gphys.mean('lon') とすると経度平均の図を描くことができます.
gphys.mean('lon').cut('time'=>2) とすると 2 日目の経度平均の図を描くことが
できます.
snapshot.sh で3 年計算のデータの図を書こうとすると
エラーが出るかもしれません.
その場合は open の箇所で
gphys = GPhys::IO.open('Temp.nc', 'Temp').cut('time'=>730..1095)
|
などと時間範囲を指定してください.
上記の例では, 730 日目から 1095 日目 (3 年目の 1 年間) のデータ
を gphys オブジェクトに読みこみます.
ここまでは瞬間値の図 (スナップショットと言います) を書いてきましたが
時間範囲を指定して時間平均の図も作ってみましょう.
スクリプトを使って他の物理量の図も書いてみる.
画像ファイルの保存方法.
作成した図をファイルに保存するには, スクリプト中において
と変更します.
これでスクリプトを走らせると, 画像の pdf ファイルが生成されます.
ただし, この pdf ファイルは画像が横倒しになってしまって
いますので, 回転させる必要があります.
画像を回転させ, 更に png 形式に変換するには以下のようにします.
$ convert -rotate 90 dcl.pdf Temp_zonalmean.png
|
[1.5] 水に関する量をいくつかかいてみる
降水量と蒸発量のデータを使って簡単なデータ処理をやってみましょう.
snapshot.rb を改変して, 降水 (PRCP.nc) と地表面蒸発フラックス
(SurfH2OVapFlux.nc) それぞれの 1 年平均の水平分布図を作ってみましょう.
snapshot.rb を更に改変します. 降水を gphys_prcp
オブジェクトに, 蒸発を gphys_h2ovapflux オブジェクトに読みこむように
しましょう.
その上で降水と蒸発の差 gphys_prcp - gphys_h2ovapflux の
平面分布の図を描くように変更してください.
次に東西平均の図を作りましょう. snapshot.rb を壊変して,
降水, 蒸発, 降水と蒸発の差の東西平均グラフを描いてみましょう.
最後に全球平均値の計算もやる (これは時間が足りないかも).
PRCP を全球平均するスクリプトを渡す (まだスクリプトできてない).
そのスクリプトを以下のように改編する.
- 蒸発の全球平均値も出すようにする.
- 2 つの差をとる
[1.6] 課題に向けて
季節ごとの図を作ってみる?
説明はもっと丁寧に.
それぞれのスクリプトを渡すぐらいの方が良いかも.
意味はわからせないと.
できるかどうかは VTA にやってもらうしか無いのでは
>> 次ページへ