Awkによる2次元格子点データの処理

序論

格子点データとは

地球上に分布する数量は、 緯度経度の格子点のデータとして扱われることが多い。 地球上にM本の経線とN本の緯線がひかれており、 i番め(i=1, ..., M)の経線とj番め(j=1, ..., N)の緯線の交点の位置に 対応して値が与えられているような構造である。 線の交点ではなく、線で囲まれたマス目に対応して値があるデータセットもある。 ただしここでは、そのような場合は、位置をマス目の中心で代表させて 格子点データに含めて扱うことにする。

プログラム言語の選択

Awkは、テキストファイル形式のデータの フィルター型処理[別記事参照]のために 作られたプログラム言語である。 変数の宣言を必要としないなど、 プログラムを少ない文字数で作ることができるように くふうされているため、 比較的単純な操作には適しているが、 複雑な処理のプログラミングには適していない [プログラム言語の議論参照]

格子点データを扱うとき、 実行効率がよい(実行処理の時間が短い、 あるいはデータ量の割りに計算機の記憶容量の消費が少ない)方法を 求めるならば、FortranやCなどの言語を使うほうがよい [その場合の注意は別記事参照]。 Awkを使う方法は、計算機上の実行効率はよくないが、 人がプログラムを作成するのにかかる手間が重要な場合、 総合的な作業効率はよいこともある。 また、言語表現がCと似ているため、 本格的処理のためのプログラムをCで書くための 原型(prototype)を作るためにも便利である。 このような理由で、ここではAwkによる処理を中心に扱う。

データファイルの形式: xyvファイル

Awkで読み書きできるのは、基本的にテキストファイル、 つまり、改行コードで行に分かれており、 各行は、端末画面上(あるいはエディタ上)で目で見られ、プリントもできる文字 だけで構成されているものである。

各行は、空白(複数の空白文字がつながってもひとつの空白として扱う)で フィールド(欄)に分かれている。 以下、同じ番号のフィールドを各行にまたがって続けて見たものを 「列」と呼ぶことにする。各フィールドの桁数は一定とは限らないので、 端末画面上で列が縦にそろって見えるとは限らない。

この教材で扱う格子点データは、原則として、次のような形で テキストファイルに書かれているとする。

地球上の位置を示すには緯度を先にすることが多いのに、 ここでは経度が先になっているのは、 地図をx-y平面と見て横軸をx、縦軸をyと見ているからである。 GMTでは、 この形式を「xyzファイル」と呼んでいる。 しかし、GrADSでは zは鉛直座標という意味をもってしまい、まぎらわしいため、 ここでは「xyvファイル」と呼んでおく。 Vはvariableまたはvalueの略と思ってほしい。 xyvファイルは、格子点データに限らず、 地球上の不規則な位置に分布するデータ(地点データ)を表現することもできる。 以下に紹介する方法の一部は、地点データにも適用できるが、 一部(緯線上の集計など)は、内容が格子点データであることを前提としている。

座標位置が一致している場合に限ること

この教材では、複数のファイルを読んで処理する場合、 どのファイルも同じ格子点網でのデータを与えていることを前提とする。 データの座標位置が違う場合は、 なんらかの方法で、同じ位置での値を推定する必要がある。 つまり、広い意味の内挿が必要となる。 内挿の方法は目的によって使い分ける必要がある [別記事参照]。 方法にもよるが、内挿の計算をAwkでやるのはむずかしく、 CやFortranでプログラムしたほうがよい。 したがって、この教材には、内挿が必要な問題は含めないことにする。


この教材メモは、筆者が東京都立大学 理学部 地理学教室在職中 (特に1999年度, 2000年度)に、卒業研究を 指導する過程で使ったデータ処理のノウハウを文書化したものである。

2000-08-19, 2002-04-08, 2004-01-23, 2004-07-03
増田 耕一 (MASUDA Kooiti)
[目次へ]