チュートリアル


欠損値の扱い

ここでは欠損値を持ったデータを扱う際の便利な方法について見ていきたいと思います。

NArrayMiss クラス

欠損値を持った NArray の配列を扱う場合
missing1.rb

もしくは
missing2.rb

となります。

ruby ではすべてはオブジェクトであり配列自身に欠損値情報をもたせることが出来ます。
NArrayMiss クラスは NArray の配列とマスクをあわせ持ったものです。 NArrayMiss クラスを利用すると
missing3.rb

のように、欠損のことを気にすること無く演算ができます。

四則演算以外にもいくつかのメソッドが用意されています。 ドキュメント参照のこと
NArrayMiss#%
NArrayMiss#**
NArrayMiss#sum
NArrayMiss#accum
NArrayMiss#min
NArrayMiss#max
NArrayMiss#mean
NArrayMiss#stddev
missing4.rb

DCLでお絵書き

DCLでお絵書きする際に欠損値処理を有効にするためには
require "numru/dcl"
include NumRu
rmiss = -9.99e10   # example
DCL::gllset("lmiss",true)
DCL::glrset("rmiss",rmiss)
とします。

また現時点では Ruby-DCL は NArrayMiss クラスを扱うことが出来ないため NArray に変換する必要があります。
NArrayMiss#to_na([missing_value])
簡単な例をあげます。
missing5.rb

NetCDFのデータの扱い

NetCDFのデータを扱う場合は、 まず NArray として読み出した後に NArrayMiss に変換します。
NArrayMiss#to_nam(ary [,mask])
計算機の浮動小数の扱いの誤差を考慮して、 マスクは
mask = x.eq(rmiss)
ではなく
mask = x.gt(rmiss/2)        # when rmiss<0
mask = x.le(rmiss*0.8)      # when rmiss>0
などとした方が良いでしょう。

1999年1月の1日4回31日分の200hPaでのUのデータu.199901.nc を読み込んで、 その時間平均を描く例を示します。

missing6.rb

演習問題

  1. 上記の例で風速30m/s以下のデータは欠損値とし、5m/s毎の等値線を描きましょう
  2. 上の1999年1月Uの時間方向の標準偏差を求め、図を描きましょう
  3. このとき時間方向に6割以上データが無いと欠損にしましょう


return