Gfdnavi (Geophysical fluid data navigator) では、 所定のディレクトリ以下に置かれた地球流体データおよび そのメタデータファイルを自動スキャンし、データベースに登録しています。 以下ではユーザが自身の地球流体データをデータベースに登録する方法を 解説します。
この資料は 第6回地球流体電脳davis/rubyワークショップ&チュートリアルセミナー の際の発表資料であり、情報が古くなっている可能性があります。最新の資料は Gfdnavi ドキュメント においてメンテナンスされています。
スキャンするディレクトリは config/gfdnavi.yml
ファイルで
指定されています。このファイルのデフォルトは以下のように記述されて
います。
data: RAILS_ROOT/public/data diagram: RAILS_ROOT/public/diagrams user: RAILS_ROOT/usr work: RAILS_ROOT/tmp/work ignored_dirs: - !ruby/regexp /^CVS$/i - cvsroot
最上部に記述される data: RAILS_ROOT/public/data
にてスキャンする
トップディレクトリを指定しています。
RAILS_ROOT
は、現在いるはずの gfdnavi ディレクトリです。
例えば gfdnavi ディレクトリが /home/davis/gfdnavi
である場合には、
/home/davis/gfdnavi/public/data
ディレクトリ以下のデータがスキャン
されます。
※ data: 以下は閲覧者にダウンロードを許可するデータの置き場です. 将来的には user: 以下のデータ (ダウンロード不可) もスキャン予定です.
スキャンされるデータの形式は以下の通りです。
これらのデータ形式では、ファイル内にはいくつかの座標変数 (例えば緯度、経度、高度) といくつかの物理量変数 (例えば風速、温度) が格納されています。 Gfdnavi はこれらのデータ内の物理量変数をデータとしてスキャンします。 座標変数に関しても物理量変数のメタデータとしてスキャンします。 詳しくは 座標変数と物理量変数の区別 を参照してください。
メタデータファイルとして、YAML ファイル を使用することができます。これらのファイルにデータに関する付加情報を 記述することで、データベースに登録されるデータに情報を付加したり、 複数のファイルに分割されているデータを一つに統合した仮想データ をデータベースに登録することが 可能です。詳細は YAML ファイルの書き方 を参照ください。
他にもメタデータファイルとして SIGEN ファイル を使用することも可能です。SIGEN ファイルの場合は、 データベースに登録されるデータへの情報の付加のみを行うことが可能です。 詳細は SIGEN ファイルの書き方 を参照ください。
上記の データファイル、メタデータファイル を
Gfdnavi がスキャンするディレクトリ に置いた後、RAILS_ROOT
ディレクトリに移動して以下のコマンドを実行することでデータベースが
更新されます。
% rake setup
※ コマンドの通り、現在はデータベースを一旦全部クリアした後にもう一度 全てのディレクトリ、データファイル、メタデータファイルを解析して データベースへの登録を行っています。 将来的には、更新されたファイルのみを追記登録する形にしていく予定です。
座標変数と物理量変数との区別はデータ形式によって異なります。
netCDF (network Common Data Form)
座標変数として登録されるのは、netCDF データにおいて 次元 として 定義される変数 (下記の例では、lon、lat、time が該当します) です。 これら以外の変数 (スカラー変数も含む) は全て物理量変数として登録されます。 (下記の例では、temp、scalar が該当します)。
netcdf data { dimensions: lon = 192 ; lat = 96 ; time = UNLIMITED ; // (120 currently) variables: float lon(lon) ; lon:long_name = "longitude" ; lon:units = "degree_east" ; float lat(lat) ; lat:long_name = "latitude" ; lat:units = "degree_north" ; float time(time) ; time:long_name = "time" ; time:units = "seconds" ; float temp(time, sigma, lat, lon) ; temp:long_name = "Temperature" ; temp:units = "K" ; float scalar ; scalar:long_name = "scalar quantity" ; scalar:units = "1" ; :
GrADS (The Grid Analysis and Display System)
座標変数として登録されるのは、ctl ファイルに記述されている xdef、ydef、tdef などの変数です。それ以外の変数は物理量変数として 登録されます。
座標変数として登録されるのは、GRIB ファイル内の Grid Description Section (GDS) に記述される変数です。 それ以外の変数は物理量変数として登録されます。
YAML ファイルは Gfdnavi がスキャンするディレクトリ 以下に 置きます。ファイル名は
<情報の付加先であるディレクトリ名>.yml <情報の付加先であるデータファイル名>.yml
とします。例えば、jmadata
というディレクトリに情報を付加する場合には、
そのディレクトリと同じ場所にjmadata.yml
という名前の
ファイルを作成します。UV.jan.nc
というデータファイルに情報を付加する
場合には、UV.jan.nc.yml
という名前のファイルを作成します。
メタデータを付加する場合、YAML ファイルには以下のように ハッシュのリストを記述してください。
title: starndard pressure level data creator: N. Hashiguchi, RISH, Kyoto Univ. description: The raw data obtained from NCEP were screened with an algorithm suitable for the tropical conditions. The files archived here contains data only at the standard pressure levels. See http://dss.ucar.edu/datasets/ds353.4/ for more info on the original data.
言語の設定に関しては 言語設定 を参照してください。
データ形式の制約、描画ユーティリティが扱えるファイルサイズの限界、 ファイルの可搬性の都合から、本来 1 つのデータが複数ファイルに分割 されているということは多々あります。Gfdnavi では YAML メタデータファイル によってそれら分割されているデータを 1 つの仮想データに統合して 取り扱うことが可能です。
例えば、MSM-P/2006 というディレクトリ以下に、0101.nc、0102.nc、... 1231.nc というファイルが存在し、これらに u (東西風)、v (南北風)、 temp (温度) のデータが時間方向に分割されているとします。
MSM-P `-- 2006 |-- 0101.nc # 2006-01-01 の u、v、temp のデータを格納 |-- 0102.nc # 2006-01-02 の 〃 | : | : `-- 1231.nc # 2006-12-31 の 〃
ここで、MSM-P ディレクトリ以下に 2006.yml ファイルを作成し、 以下のように記述します。
contains: 010[1-3].nc/u: remark: This variable is united data 02??.nc/v in ../2006-02_v.nc: remark: This variable is united data (aliased) *.nc@temp: in ../2006_temp.nc: remark: This variable is united data (aliased)
これにより、MSM-P/2006 以下に 010[1-3].nc/u、MSM-P 以下に 2006-02_v.nc、2006_temp.nc という仮想データが作成され、 データベースに登録されます。
MSM-P |-- 2006 | |-- 010[1-3].nc/u # 仮想データ | |-- 0101.nc | | : | `-- 1231.nc | |-- 2006-02_v.nc # 仮想データ `-- 2006_temp.nc # 仮想データ
それぞれの仮想データは以下のデータを統合したものです。
YAML ファイル内の記法の説明を説明します。ハッシューのキーには 複数ファイルを指定します。複数のファイルを指定する際には 以下のメタキャラクタを使用してください。
? (クエスチョンマーク) :: 任意の 1 文字 * (アスタリスク) :: 0 個以上の文字からなる任意の文字列 [] :: 指定範囲内、または一連の指定文字の任意の 1 文字
仮想データの名前にはキーの表記がそのまま使用されます。
変更したい場合は、下記のように複数ファイルの後ろに
in <ファイル名>
を記述してください。ファイル名は相対パスで
指定してください。
02??.nc/v in ../2006-02_v.nc:
仮想データに情報を付加したい場合には以下の remark: ... のように ハッシュを記述してください。
02??.nc/v in ../2006-02_v.nc: remark: This variable is united data (aliased)
この例では時間方向に分割されたデータを統合しましたが、緯度や経度方向に 分割されたデータも統合することが可能です。
座標軸の判定については 時間・緯度・経度座標の判定基準 を参照して ください。
以下では、データファイル内の変数にメタデータを付加する方法を
紹介します。
例えば、UV.jan.nc
というデータファイル内の変数に情報を付加する
場合には、UV.jan.nc.yml
という名前のファイルを作成し、
以下のように contains キーを使用して情報を記述します。
値にはさらにハッシュのリストを記述します。
値には変数名、キーには付加すべき情報をこれまたハッシュで与えます。
contains: U: long_name: zonal wind missing_value: 999.0e+0 V: long_name: merional wind %: remark: number of grid points are significantly reduced by thinning.
最後の変数が "%" になっていますが、これはファイル内に存在する 全ての変数を表す SQL 文のメタキャラクタです。他にも以下の文字が使用できます。
_ (アンダースコア) :: 任意の 1 文字 % (パーセント記号) :: 0 個以上の文字からなる任意の文字列 [] :: 指定範囲内、または一連の指定文字の任意の 1 文字 [^] :: 指定範囲外、または一連の指定文字以外 の任意の 1 文字
SIGEN ファイルは Gfdnavi がスキャンするディレクトリ 以下に 置きます。ファイル名は
<情報の付加先であるディレクトリ名>.SIGEN <情報の付加先であるデータファイル名>.SIGEN
とします。例えば、jmadata
というディレクトリに情報を付加する場合には、
そのディレクトリと同じ場所にjmadata.SIGEN
という名前の
ファイルを作成します。UV.jan.nc
というデータファイルに情報を付加する
場合には、UV.jan.nc.SIGEN
という名前のファイルを作成します。
SIGEN ファイルの書き方は mksigen ページの mksigen-sigen(5) に従ってください。 ただし、フィールド名は mksigen-sigen(5) で記述されているもの以外でも 有効です。例えば、Subject や Description ではなく、
Title: operation radiosonde data archive Comments: Archive of operational radiosonde data transmitted originally through WMO's GTS network.
のように記述してもデータベースへと登録されます。
言語の設定に関しては 言語設定 を参照してください。
複数のファイルに分割されたデータを統合して仮想データを作成する際、 個々のデータの時間、緯度、経度といった座標は連結されます。
以下には、連結される時間、緯度、経度座標の判定方法を記します。
86400 s @ 2002-01-01T00:00:00.00 +00:00
のようなフォーマット
となっていること。NumRu::Units#reduce5 については
NumRu::Units
を参照のこと。YAML ファイルもしくは SIGEN ファイルによって付加される情報には 言語の設定を行うことが可能です。
言語ごとに別々のメタデータファイルを用意する場合には、
jmadata.yml.ja
、UV.jan.nc.yml.en
のように拡張子の末尾に .ja
、.en
を付加します。
現在対応している言語設定はこの2つのみです。
各フィールドごとに言語設定する場合は、以下のように
フィールド名の末尾に -ja
、-en
を付加します。
Title-en: operation radiosonde data archive Title-ja: ラジオゾンデデータアーカイブ
なお、言語設定が無い場合でも、フィールドもしくはフィールド内の文字列が 日本語である場合には自動的に言語設定が日本語に設定されます。