地球環境観測

実習2: 降水量(雨量計による観測)を見る

データ

GAMEプロジェクトの一部である GAME-T (GAME-Tropics)で収集されたデータのうち、GAME-Tデータセンター (http://hydro.iis.u-tokyo.ac.jp/GAME-T/GAIN-T/) で整理され形式が統一された 各国現業機関による日降水量のデータを使う。 1997--2002年の、 ミャンマー、タイ(気象局)、ラオス、カンボジア、ベトナムのデータを用意した。 その他諸国およびタイ王立灌漑局のデータは実習用としては省略する。

地点一覧表は /pub/sfc/earthobs/data/gamet/precip/st_list/ の下に station_???.txt のような名前になっている。 ???のところはデータ提供機関を示し、 MYAはミャンマー気象水文局、 TMDはタイ気象局、 LAOはラオス気象水文局、 CAMはカンボジア気象局、 VIEはベトナム水文気象庁。 データはタブ区切りテキストファイルで、 改行コードはUnix式のLFである[注]。 1行が1地点を示し、4列で、左から順に地点ID、地点名、緯度[度]、経度[度] (5列めとして標高[m]がはいるファイルがあるかもしれない)。 地点名のうちには空白文字(タブではない)が含まれることがあるので、 AwkではFS="\t"を指定してタブだけを列区切りとして読む。

[注]: テキストファイルの改行コードの標準はOSによって違い、 MS DOSやMS WindowsではCR+LF、MacintoshではCRがふつうである。 例文のプログラムには、現在は必要がないが、 地点表ファイルがMS Windowsのテキストファイルである場合の、 行末についたCRコード(16進0D、Awkでは \r と表記、 一部のソフトウェアでは^Mと表示される)を取り除く処理が含まれている。

降水量データは、 /pub/sfc/earthobs/data/gamet/precip/daily????/ (????は年、たとえば1998) の下に、1地点・1年ごとに1ファイルで、たとえば rain_d_1998_LAO170203_mm.txt のような名前のファイルになっている。 データはタブ区切りテキストファイルで、 改行コードはUnix式のLFのみで統一されているようである。 1行が1つの観測時刻(この場合、日)に対応し、 2列で、左から順に日付、観測値。 日付は1998年1月1日ならば「1998/01/01」のような文字列になっている。 観測値は降水量(mm/日)だが、 観測値が欠けている場合はそれを示す特別な数値(-9999.0)が入っている。 また、原データで微量(trace)降水が無降水と区別されていた場合は、 微量降水は「+0.0」、無降水は「0.0」として収録されている。 なお、「#」で始まる行(年合計値などの情報が書かれている)は この形式にしたがっていない。 このファイルを読む処理では、「#」で始まる行以外を対象とする。 Awkプログラム中の「!($1 ~ /#/)」はそのためのものである。

ちなみに、「#」で始まる行はAwk言語やシェルスクリプトでも、 コメント(実行対象でない部分)である。 ただしシェルスクリプトの1行めの「#!」で始まる部分は意味がある。 どのプログラム言語でも「#」がコメントの記号というわけではない (たとえばC言語やFortranでは違う)ので注意。

地点IDを地図上に表示したものを /pub/sfc/earthobs/example/precip/work03/mapstnid.ps として置くので、地点の位置を確認したい場合は ggv, ghostviewなどでこのファイルを見てほしい。


GMTを使う例文に共通する注意

[別ページ]参照。


必要となるおもな操作

(左端の「%」はcshが出すプロンプトの代表的な形を示したもので、 キーボードから入力する文字ではない。)


作業1: 地点ごとの時系列グラフ

時間変化する量を見るには、時間をひとつの軸(たとえば横軸)にとったグラフにするのが有効なことが多い。 GMTを使ってPostScriptファイルを作るシェルスクリプトの例文を /pub/sfc/earthobs/example/precip/work01/ に用意した。 graph1.csh, graph4.csh, graph5.csh がそれぞれ、1ページに1, 4, 5 地点・年のグラフを表示するものである。 (ただしgraph5では題目を表示する余裕がない)。 中でAwkプログラムを使っているが、このディレクトリの例文では Awkプログラムがどこにあるかを「絶対パス」で指定し、 Awkプログラムを自分のところにコピーしなくても動くようにしてある。 実行は
% csh graph1.csh LAO 170203 1998
のような形で、cshを呼び出してシェルスクリプト名を指定し、 続いてシェルスクリプトに渡す「引き数」として データ提供機関略称、地点ID(機関内)、年を指定する。 graph4, graph5の場合は この3つの組を順に4組または5組ならべて指定する。

今の例文では日降水量220 mmまで表示できるようにしてあるが、 もっと多い場合は縦軸の尺度を変える必要があるかもしれない。 基本的には psbasemapの -R0/366/-20/220 の220を変えればよいのだが、 目盛りのうちかた(psbasemapの-Bオプション内で指定)や 文字を表示する位置(現状では、地点名などの文字のy座標はAwkプログラムst_title.awk内で200と指定している)も変更が必要になる。


作業2: 地点ごとのデータの月ごとの集計やヒストグラム

データを集計することや、データのとりうる数値の頻度分布を見ることも重要である。 ここでは、結果を(図形ではなく)テキスト形式で出す例文を /pub/sfc/earthobs/example/precip/work02/ に用意した。

monthly.awkは、日降水量を月ごとに集計して月降水量の値を標準出力に書き出す。 これを呼び出すシェルスクリプトmonthly.cshを用意したので、
% csh monthly.csh LAO 170203 1998
のような形で使うことができる。 monthly.awkが作業ディレクトリにあることを想定して書いてあるので、 実行前にこれも各自のところにコピーしておいてほしい。 標準出力を「>」や「>>」でファイルにredirectしておけば、 その後の作業に使うことができる。 (例文を用意していないが、グラフにすることもできる。) 結果は空白区切りのテキストファイルとして見て左から、 1=年、2=月、3=月降水量、4=データ欠損の日数、 5=機関略称、6=地点ID(機関内)。 (地点IDを入れたのは、複数の地点のデータを同じファイルに続けて入れることを 想定したため。)

monhist.awkは、月ごとに、日降水量を階級わけしてそれぞれの回数を表にして 標準出力に書き出す。 同様に
% csh monhist.csh LAO 170203 1998
のような形で使うことができる。 結果は左から、1=年、2=月、3=データがファイルに存在しなかった日数、 4=欠損を示す値が入っていた日数、 5=無降水の日数(原データによっては微量降水を含む可能性がある)、 6=微量降水の日数、 7=0をこえて1 mm未満の日数、 8=1mm以上2mm未満の日数(以下「1..2」のように書く)、 9=2..4、10=4..8、11=8..16、12=16..32、13=32..64、14=64..128、15=128..256、 16=256mm以上の日数、 17=機関略称、18=地点ID(機関内)。


作業3: 日降水量の分布地図

地球上に空間分布する量を見るには、地図に重ねてみることが有効な場合が多い。 GMTを使ってPostScriptファイルを作るシェルスクリプトの例文を /pub/sfc/earthobs/example/precip/work03/ に用意した。 中でAwkプログラムを使っているが、このディレクトリの例文では Awkプログラムがどこにあるかを「絶対パス」で指定し、 Awkプログラムを自分のところにコピーしなくても動くようにしてある。

mapstnpstr.cshが各観測点の位置(+印)の下に降水量の値を数字で示すもので、
% csh mapstnpstr.csh 1998 05 17
のように実行する(この例は1998年5月17日の場合)。

mapstnpsym.cshが各観測点の位置に降水量の階級ごとに色分けした記号を 示すもので、実行のしかたはシェルスクリプト名が違う以外は同じ。 なお、実習とは別に、これとほぼ同様なシェルスクリプトで、さらに多数の地点を表示した図を作ったので、 [別ページ (/browse/gamet/prec_daily_map/html/index_ja.html) 2011-03-01 消去しました] から選択表示できるようにした (GMTで作ったPostScriptファイルを別のプログラムでPNG画像に変換したものである。)

mapstnpstr.cshとmapstnpsym.cshからは
No such file or directory [このあとにファイル名が続く]
または、それに対応する日本語のエラーメッセージが出ることがある。 これは実際にはAwkプログラム中から出している。 今年度の例文では、このメッセージは画面ではなく errorlog.txtというファイルに書かれるようにした。 メッセージは、そこに示されたファイルがないことを示しており、その限りではたぶん正しい。 しかし、シェルスクリプト全体はいくつかの地点のデータがなくてもさしつかえない ように作ってあるので、あまり気にしないで結果を見てほしい。

2004年度のシェルスクリプトも、ファイルがなくても止まらないように作ったつもりだったのだが、 意図と違って、見つからないファイルがあるとそこでその(機関別)地点グループの処理を打ち切ってしまっていた。 2005年度用への改訂の過程でAwkプログラムにまちがいを発見して訂正した。

mapstn.cshは地点の位置に記号だけを、 mapstnid.cshは地点ID番号を、mapstnna.cshは地名を、 いずれも機関別(ここでは実質的に国別)に色分けして示すものである。 これは日付によって変わらないので、
% csh mapstn.csh
のような形で実行する。 比較的狭い範囲に複数の地点があると、文字が重なってよく読めない。 そのような場合は、一部の地域だけを拡大した地図を作るか、 あらかじめ地点リストから必要性の低い地点を除いておくべきだろう。 その場合プログラムをどう修正するかについては、質問があれば説明する。


このページの(HTML)ファイル名についての注釈

雨量計は英語ではraingauge (レインゲイジ)である。 Gaugeということばは広く測定に使う道具をさすのに使われる。 ところが、英語のつづりと発音の関係は一般に不規則だが、 この単語の読みかたは例外的である (発音とつづりが別々の方言から採用されたのだろう)。 発音に忠実にgageと書く人もいる。 しかし原稿にgageと書くとgaugeとなおす人もいる。 一種の妥協として、わたしは出版される原稿の文章ではgaugeと書き、 ファイル名やプログラム中の変数名などではgageも使うことにしている。
(2004-10-23), 2005-10-20, 2006-11-08, 2006-11-18, 2011-03-01
増田 耕一 (2001-2006年度 環境情報学部 非常勤講師)
[地球環境観測2006教材目次へ] [日程へ]