netCDFデータを扱ってみよう
1.netCDFデータについて
(netCDFデータとは?)
その中でも,今回は
NCEP-DOEの再解析データⅡの「air.mon.mean.nc」(※重いデータなので要注意!)というnetCDFデータを処理していきます.
(※本研究室内では,このデータはhome/kaoru/Climate/NCEP/のディレクトリに置いてありますので,ここからコピーすると良いかと思います.)
(netCDFデータの様々な処理方法)
netCDFデータを処理する方法は,rubyでデータを取り出す方法,grads(※描画ソフトです)で直に描画する方法など様々あります.
今回は,Linux上でrubyを動かし,且つ,NArrayという配列処理に適したソフトを介してデータ処理をおこなう手法をご紹介します.
そのために必要なソフトが以下になります.
RubyNetCDF の 「ruby-netcdf-0.6.3.tar.gz」 :Linux上でnetCDFデータをrubyで処理するために開発されたソフト
NArray の 「narray-0.5.9p7.tar.gz」 :その名の通り,配列処理に特化したソフト(Rubyよりも優れた配列処理機能を持つ)
( ↑ いずれのサイトも日本語解説ページがあります.分かりにくい方は,そちらをご参照ください.)
netCDFデータを処理する前に,その前段階として,上で紹介している RubyNetCDF と NArray が扱える環境にする必要があります.
まずは,その方法から説明していきます.
2.RubyNetCDF と NArray のインストール方法
まず,上記の「ruby-netcdf-0.6.3.tar.gz」と「narray-0.5.9p7.tar.gz」というファイルをLinux上(Xming)のディレクトリに落としてきてください.
(※このようなファイルの転送には,
FFFTPというソフトが役立ちます.これは,Linuxサーバーと各マシーンとをつなぐソフトです.サーバーから各マシーンへ,または,各マシーンからサーバーへファイルを転送できます.)
以下が,RubyNetCDFとNArrayのインストール手順になります.
(RubyNetCDF のインストール)
- tar xvfz ruby-netcdf-0.6.3.tar.gz
- cp *rb test (←マシーンに合わせたかたちで使用していきたいので,testというディレクトリにRubyスクリプトをコピーします.)
- cd test
- ruby extconf.rb
- make
- sudo make site-install
(NArray のインストール)
- tar xvfz narray-0.5.9p7.tar.gz
- nkf -w README.ja | less
- ruby exconf.rb
- ruby exconf.rb --with -netcdf-dir = /usr/local/netcdf
- make test
- sudo make site-install
<コマンドの解説>
tar …tarファイルを解凍するコマンド
xvfz …x:出力する,v:途中経過をみる,f:fileを後ろに持ってくる,z:gzファイル
extconf.rb …「extconf.rb」は,Makefileを作成するRubyスクリプト,rubyを走らせることでMakefileができる
make …インストールする
sudo make site-install …管理者権限(sudo)を持って,インストールする
nkf -w …「nkf」は,文字コード変換コマンド,「-w」は,UTFに変換するコマンド,ここでは,README.jaファイルを日本語で表示している
3.RubyNetCDF・NArrayを使用したデータ処理
データ処理をおこなうスクリプトを作るために,まずemacsを立ち上げます.
そこで,以下のようなスクリプトを作ります.
スクリプトは,使用するデータと同じディレクトリ内で作成します.
スクリプト名 「nc_read.rb」
require 'numru/netcdf'
include NumRu
file = NetCDF.open("air.mon.mean.nc") # NetCDFのファイル "air.mon.mean.nc" を開いて(open),fileと定義
=begin
p file # ファイル名を表示(p:paste)
p ["ndims",file.ndims] # 次元の数を返して表示
p ["nvars",file.nvars] # 変数の数を返して表示
p ["natts",file.natts] # 属性の数を返して表示
#p file.vars
p file.var_names # 変数の名前を返して表示
p file.dim_names # 次元の名前を返して表示
p file.att_names # 属性の名前を返して表示
p file.var("level").get # ファイルに存在する "level(変数名)" の変数を開いて,取り出し(get)て表示
=end # 「=begin」 と 「=end」 の間は読み飛ばされる
temp = file.var("air") # ファイルに存在する "air(変数名)" の変数を「temp」と定義
p temp.get # temp を表示
スクリプトが出来上がったら,Rubyを走らせます.
すると,Xmingの画面上に以下のように表示されます.
NArray.sint(144,73,17,360):
[ [ [ [ -21990, -21990, -21990, -21990, -21990, -21990, -21990, ... ],
[ -22013, -22015, -22017, -22019, -22020, -22022, -22023, ... ],
[ -22017, -22025, -22033, -22040, -22048, -22055, -22061, ... ],
[ -21877, -21897, -21918, -21940, -21964, -21990, -22015, ... ],
[ -21453, -21459, -21473, -21496, -21528, -21568, -21618, ... ],
[ -20805, -20749, -20711, -20697, -20706, -20739, -20794, ... ],
[ -20146, -20003, -19897, -19831, -19809, -19828, -19882, ... ],
[ -19610, -19425, -19296, -19229, -19223, -19270, -19357, ... ],
[ -19209, -19063, -18992, -18999, -19076, -19210, -19377, ... ],
[ -18959, -18908, -18937, -19048, -19224, -19445, -19684, ... ],
<解説>
NArray.sint … 2バイトで整数の配列
[ [ [ [ -21990,… … 変数名「air」の値
スクリプト「nc_read.rb」の「=begin」「=end」を取り除いてRubyを走らせると以下のように表示されます.
NetCDF:air.mon.mean.nc
["ndims", 5]
["nvars", 6]
["natts", 8]
["level", "lat", "lon", "time", "time_bnds", "air"]
["lon", "lat", "level", "nbnds", "time"]
["Conventions", "title", "history", "comments", "platform", "source", "institution", "references"]
NArray.sfloat(17):
[ 1000.0, 925.0, 850.0, 700.0, 600.0, 500.0, 400.0, 300.0, 250.0, 200.0, ... ]
NArray.sint(144,73,17,360):
[ [ [ [ -21990, -21990, -21990, -21990, -21990, -21990, -21990, ... ],
[ -22013, -22015, -22017, -22019, -22020, -22022, -22023, ... ],
[ -22017, -22025, -22033, -22040, -22048, -22055, -22061, ... ],
[ -21877, -21897, -21918, -21940, -21964, -21990, -22015, ... ],
[ -21453, -21459, -21473, -21496, -21528, -21568, -21618, ... ],
[ -20805, -20749, -20711, -20697, -20706, -20739, -20794, ... ],
[ -20146, -20003, -19897, -19831, -19809, -19828, -19882, ... ],
[ -19610, -19425, -19296, -19229, -19223, -19270, -19357, ... ],
[ -19209, -19063, -18992, -18999, -19076, -19210, -19377, ... ],
[ -18959, -18908, -18937, -19048, -19224, -19445, -19684, ... ],
<解説>
NetCDF:air.mon.mean.nc … ファイル名
["ndims", 5] … 次元の数が5個
["nvars", 6] … 変数の数6個
["natts", 8] … 属性の数8個
["level", "lat"… … 変数の名前
["lon", "lat", … … 次元の名前
["Conventions", … … 属性の名前
NArray.sfloat(17): … (小数点第一位までの)小数17個の配列
[ 1000.0, 925.0, … … 変数名「level」の値
以上で,今回は終わりにします.
最終更新:2009年12月10日 02:58