気象庁(2002年)の出版物 「気候系監視報告・別冊第8号」の付録CD-ROMから、 世界の地上気温と降水量の月ごとの平年値 (原則として1971-2000年の平均)のデータを取り出して、CNSに持ってきました。
気象庁で作成された形のままのデータを
/pub/sfc/earthobs/data/jma/norm2002/origdata/
の下に置きました。
データファイルの形式はCSV (値がコンマ区切りで含まれたテキストファイル)で、 日本語コードはShift-JIS、改行コードはCR+LF (DOS・Windows式)です。 ファイル名と意味は次のとおりです。 (気温の標準偏差、降水量の5分位値のファイルは省略しました。)
list.csv
: 地点リスト(日本を除く世界の地点)。normtemp.csv
: 地上気温平年値(日本を除く世界の地点)。normprec.csv
: 降水量平年値(日本を除く世界の地点)。jp_list.csv
: 地点リスト(日本の地点)。jp_ntemp.csv
: 地上気温平年値(日本の地点)。jp_nprec.csv
: 降水量平年値(日本の地点)。また、気象庁によるドキュメントファイルのうちこのデータを理解するために必要なものを
/pub/sfc/earthobs/data/jma/norm2002/origdoc/
に置きました。
jreadme.htm
: CD-ROM全体の説明。著作権に関する注意を含む。HTML形式。jwrdnorm.pdf
: 世界の平年値についての説明文書。PDF形式。
データファイルの各列の説明も書いてあります。外国と日本の両方を含め、気温と降水量がそろっている地点に限って、
増田が作業に使っている固定幅空白区切りのテキストファイル
[この形式を選択する理由説明(英語)]に変換したものを
/pub/sfc/earthobs/data/jma/norm2002/work1/
に置きました。
(ただし、空白区切りとして見たときの23列め以降は固定幅ではありません。)
日本語文字を含まないASCIIデータです。
改行コードはLFのみ (Unix式)です。
normtemp.txt
が気温、normprec.txt
が降水量のファイルで、
空白区切りとして見たそれぞれの列の意味は次のとおりです
(昨年度用意したものと少し変更しました)。
jp_list.csv
の中の通し番号に90000をたしたものを(増田が)入れました。-999
が入れてあります。
(陸地の標高は海面下400mくらいまであるが海面下999mという値はありえないことを
前提とした、この変数専用の欠損値記号です。)list.csv
に収録された文字列のままですが、空白はアンダースコアに、「!」はコロンに変えました)。ここまでの編集に使ったプログラム(Awk)も置いてありますが、説明は省略します。 Awkの教材は [別ページ]、 とくにAwkによるコンマ区切りのデータの扱いについては [別ページ]を見てください。 編集作業の手順は次のとおりです。
list.csv
の国名の部分を手作業で編集する(結果はwork1
ディレクトリにあるlist.csv
)。edlist.awk
、結果はedlist.txt
)。edlist.txt
を参照しながら気温または降水量のデータをCSVから空白区切りに変換する(プログラムはednorm.awk
)。jp
がついているものを使って処理する。この過程で作られた地点リストファイル
edlist.txt
, edlistjp.txt
の各列の意味は次のとおりです。
edlistjp.txt
のみ): 地点名 (日本語EUCコード)。ここで採用した国名コードと国・地域名との対応を示したファイルを
country.txt
として追加しました。
ここで採用した国名コードは原則としてISO 3166の2文字コードですが、
WMO・気象庁が採用している地域区分を反映して補助情報をつけたものもあります。
気象庁の2002年のCD-ROMのほかに、
WMOの地点番号表(Publication 9 Vol. A, 2003年4月現在。わざと最新でなく気象庁CD-ROMと時期の近いものを使った)と、
GNUのmiscfiles (2004年10月の1.4.2版およびそれ以前のもの)に含まれたcountries
ファイル(ISO 3166コードが示されている)
を参照して増田が編集したものです。
2002年に作成されたファイルの国名を尊重したので、
cs (Serbia and Montenegro)ではなくyu (Yugoslavia)が含まれています。
しかし、東チモールの国名コードは独立後のtlにしました。
WMO地点番号表の地域区分は、
とくに独立国でない島々については、ISOよりも大きくくくられています。
個別に調べてISOのコードを入れましたが、
正確でないところがあるかもしれません。
ファイルの縦の列は、長い補助情報がある行があるため、 必ずしもそろいませんが、 空白区切りとして見たとき1列めがコード、2列めが地域名です。 WMOのファイルにある地域名を採用した場合は地域名は大文字になっています。 変更した場合、2列めの地域名は小文字まじりになっていて、 3列めにWMOの地域名がかっこつきで入れてあります。
また編集後のデータを使うプログラム例として、
selwmost.awk
を置きました。
自分の作業するディレクトリにcd
したうえで、
次のようにしてコピーしてください。
cp /pub/sfc/earthobs/data/jma/norm2002/work1/selwmost.awk .
awk -v wmoid=48940 -f selwmost.awk /dev/null > 48940.txt
>
"によるredirectionを使います。
ただし、このプログラムは
入力となるnormtemp.txt
とnormprec.txt
が
/pub/sfc/earthobs/data/jma/norm2002/work1/
というディレクトリにあることを前提として書いてあります。
入力となるデータファイルを自分のところにコピーする必要はありません。
ただし、もし入力データを自分のところに持って作業したい場合は、
プログラム中のファイル名を書きかえれば動くはずです。なお、このプログラムはAwkの使いかたとしては邪道なこと(BEGIN部で全部の処理をし、からっぽのファイルを読ませる)をやっており、 他のプログラム言語で書いたほうがすっきりすると思います。 これでも目的は達しますし他に迷惑をかけるわけでもないので、 邪道を承知でAwkを使ってしまうのがわたしの流儀ですが、 みなさんはそれぞれ自分の納得のゆく方法を見つけてください。
上の実行例で、抽出する地点番号と結果をしまうファイル名とは対応させてあるのですが、手で入力するとまちがえてしまうおそれがあります。 必ず同じ文字列が使われるようにするには、
awk -v wmoid=$1 -f selwmost.awk /dev/null > $1.txt
selwmost.sh
とする)を作り、sh selwmost.sh 48940
csh
でもsh
でも同じ形でよいので、
名前が短いほうのsh
を使う形で示しました。)データをまちがいなく扱ううえで、 データを、関係(relational)データベースの分野でいう「正規化」された表の形に 整理するのが望ましいと言われます ([別ページ(英語)], 柴田(2001)[参考書]の「組織化」のところ, あるいは関係データベースの教科書参照)。 定義としては不完全ですが簡単に言うと、一定の列数かける一定の行数の、論理的な意味で長方形型の表です。
ここで扱うデータの場合、 気象庁オリジナルのデータの(論理的)形式は、 個々のファイルについて見ると、列の名前を示す見出し行を別とすれば、正規化された表とみなせます。 しかし、ファイルの組み合わせとしてみると、正規化は不完全です。 地点リストが別の表として用意されているので、 気温・降水量データには地点を同定する項目は1列だけあればよいはずで、 外国の地点のデータについて、このデータセット中の地点番号とWMO地点番号の両方が含まれているのは冗長です。 また、変数の意味に立ち入って考えてみると、 月ごとの値がそれぞれ別々の列になっていますが、 これは時間座標値は違うが本来は同じ変数なので、 列は同じにし、月ごとのデータをそれぞれ別の行にしたほうが筋が通っています。 ただし、そのように正規化することが実用的な意味でよいかどうかは別の問題です。
一方、増田が編集したデータのほうは、 気温・降水量データファイルに、2種類の地点番号に加えて緯度・経度・標高も含めているので、正規化からはオリジナルデータよりも遠ざかっています。 この形式は、地点リストのファイルを読まなくても 気温・降水量のファイルだけを読めば 地点の属性もわかるようにしたいという便宜的理由で採用したものです。 ([別ページ(英語)] でも書いたように、わたしはときどき意識的に正規化しない表を使います。)
1点の気温・降水量を抽出したファイルは、 月、気温、降水量の3列からなる、正規化された表になっています。 関係データベースで使うことを想定したわけではありませんが、 12か月のデータを時系列として GMT ([別ページ])あるいは gnuplot ([別ページ])で 作図するために、時系列を列として縦にならべたのです。 構造がきれいな代わり、 この数値がなんであるかという情報(metadata)が全く含まれていないという弱点があります。 上の実行例では、ファイル名にWMO地点番号を含めるようにしましたが、 そういう注意をしないで実行すると、たとえ列の意味はわかったとしても、 どの地点のものかわからないので役にたたないファイルができてしまいます。 この形式は、抽出をどのようにしたかを覚えているうちに使う臨時のファイルの形式であり、もし忘れたら抽出からやりなおせばよい、 また地点の情報が知りたければ地点リストのファイルを見ればよい、 という考えで採用したものです。
もう少しまちがいに対して安全にするためには、 metadataをデータの表と簡単に区別できる形で同じファイルに含めたほうがよいでしょう。 たとえば、gnuplotではデータファイルの「#」で始まる行は数値でなくコメントとみなすので、metadata情報はこの形にしておき、 GMTで作図する場合はシェルスクリプト内であらかじめAwkを通して「#」で始まる行を取り除いてから作図プログラムに渡すことが考えられます。 GAME-Tの降水量データの作図のシェルスクリプト[別ページ参照]は そのように作りました。