はじめに
MetPyは,xarray(多次元データ解析ライブラリ)とpint(単位の概念を付与するライブラリ)を組み合わせた,気象系計算ツールの豊富な大変ありがたいPythonライブラリである.
xarrayに基づいているので,netcdfとの相性はとても良く,使いやすい.
事前処理として,次元のある変数には単位(metpy.units.units)を定義する仕様となっているが,単一変数であってもxarray.Datasetには単位を定義できない,という落とし穴?がある.(複数変数を保持しうるので,考えれば当たり前のこと,,)
import xarray as xr
from metpy.units import units
f = 'file_name.nc'
v = 'variable'
u = 'unit'
# xarray.open_dataset()を使う場合
v = xr.open_dataset(f)[v] * units(u)
# xarray.open_dataarray()を使う場合
v = xr.open_dataarray(f) * units(u)
例えば,'vaiable'
に'temperature'
,'unit'
に'kelvin'
などを入れる.
xarray.open_dataset()を使う場合
そのままだとxarray.Datasetを返すので,['variable']
を右につけることで,xarray.DataArrayを取り出す.
さらに右にunits('unit')
もしくはunits.unit
を掛けることでmetpy.unitsを適用する.
xarray.open_dataarray()を使う場合
もし単一変数のnetcdfを読み込んだ場合に限り,open_dataarray()を使える.もちろんxarray.DataArrayが返ってくるので,そのままmetpy.unitsを適用できる.
xr.DataArray.metpy.quantifyを使う場合
自分は使ったことがないが,チュートリアルにはnetcdfのattrsからうまいこと単位を読み込める,ようなことが書いてある.
(骨の髄からunit-awareの精神でデータ整備すれば幸せになれる..?)