シェルスクリプト課題

問題

このファイルには, 1990 年から 2019 年までの, 北半球の各経度緯度点における 海面更生気圧 (sea level pressure; slp (hPa)) と 700 hPa 圧力面のジオポテンシャル高度 (z700 (m)) の 月平均値が保存されたファイルが含まれている.

このファイルに含まれるデータを用いて, 2 地点 (20W,70N), (165W,50N) の海面更生気圧の差の月平均気候値からの偏差と, 北半球の各経度緯度点における 700 hPa 圧力面のジオポテンシャル高度の月平均気候値からの偏差との 相関係数を求めるシェルスクリプトを作成しなさい. (結果として得られる結果は, 相関係数の経度緯度分布となる.)

必要であれば, 演算のために下に示す ruby スクリプトを用いても良い.

(シェルスクリプト課題としてはスクリプトを作ればよいが, せっかくなので相関係数の空間分布を確認して, その意味を考えてみると良いでしょう.)

注意: W は西経, N は北緯を表す.

用語説明

  • 気候値 (climatology)
    • 長期間の平均値. 平均期間に決まりはないが, 30 年以上の平均値を表すことが多い (と思う).
    • ここでの「月平均気候値」は, 30 年間の 1 月の平均値, 2 月の平均値, ... を表す.
  • 気候値からの偏差
    • 各値の気候値からのずれ.
    • ここでは, 各年, 各月の平均値の月平均気候値からのずれを考えるため, 1990 年 1 月の 1 月気候値からのずれ, 1990 年 2 月の 2 月気候値からのずれ, ... を用いることになる.
    • なお, このような気候値からの偏差を anomaly という (日本語では「アノマリ」とカタカナで表記されることもある).
      • anomaly には「異常」という意味があるが, 日本語で「異常値」と表現することはない (と思う).

データファイルの説明

<URL:data.tgz> は, tar と gzip で複数のファイルをまとめて圧縮してある. 適切に解凍し, 展開すること. 展開すると data という名前のディレクトリが作られる. このディレクトリには, 下の名前のファイルが含まれている.

  • slp_MMM_NNN.txt : 地点 MMM, NNN の海面更生気圧
  • z700_MMM_NNN.txt : 地点 MMM, NNN の 700 hPa 圧力面ジオポテンシャル高度

MMM, NNN はそれぞれ経度方向と緯度方向の格子点番号である. 格子点は経度, 緯度ともに 2.5 度間隔で,

  • MMM = 000, 001, 002, ... はそれぞれ経度 0 度, 2.5 度, 5 度,
  • NNN = 000, 001, 002, ... はそれぞれ緯度 0 度, 2.5 度, 5 度,

に対応する. また, それぞれのファイルには, 下のように値が保存されている.

$ cat ../data/slp_000_000.txt
   0   1010.6754150390625
   1   1011.0782470703125
   2   1010.8497314453125
   3   1009.8889770507812
   4   1011.52685546875
   ...
  • 1 カラム目 : 1990 年 1 月からの月 (0, 1, 2, ... が 1990 年 1 月, 2 月, 3 月, ... に対応)
  • 2 カラム目 : 物理量 (上の例では経度番号 000, 緯度番号 000 の格子点における海面更生気圧)

データについて

データは, NCEP/NCAR Reanalys (Kalnay et al., 1996) から取得したものを加工して用意した.

参考文献

演算用 ruby スクリプト

シェルスクリプトのみでは, 気候値からの偏差や相関係数を求めることは難しいかもしれない. (正直なところ, 自分にはどうやれば良いかわからない. Fortran を用いれば簡単.) 必要であれば, 下の ruby スクリプトを用いると良い.

なお, 特に記述のない場合は入出力時系列データファイルの形式は, 上に述べた data.tgz 内のファイルと同じである.

結果の確認方法

相関係数の空間分布は,

1 カラム : 経度
2 カラム : 緯度
3 カラム : 相関係数

として,

0       0    0.18961137153695992
2.5     0    0.18368970680129787
5.0     0    0.17578998512336388
...
355.0   0    0.17609242569770553
357.5   0    0.1704328932998691
                                             <= 空行
0       2.5  0.18961137153695992
2.5     2.5  0.18368970680129787
5.0     2.5  0.17578998512336388
...

(ただし, 緯度が変わるときには空行を入れる) の形式でファイルに保存すれば, gnuplot で描画できる.

または, 下の ruby (GPhys) スクリプトを用いれば, 上の形式のファイルを 読ませることで経度緯度分布の図を描くことができる (海岸線付き).

おまけ

上に説明してあるように, ここで用意したデータは NCEP/NCAR Reanalys から取得したものであり, 元々は netcdf 形式で提供されている. そして, ここではシェルスクリプトの練習のために, わざわざ netcdf 形式の時空間データを各緯度経度点の時系列データに分割し, テキストデータに変換したものを入力ファイルとして用意している. しかし, データ処理だけを目的にするならばテキスト形式を経る必要はなく, 元々の netcdf ファイルを GPhys と ruby で処理すれば良い.

興味があれば, netcdf データを用いて, GPhys および ruby で相関係数の空間分布を描画してみると良いでしょう.

(それではシェルスクリプトの練習にはならないけれど.)