xarray.Dataset(Dataarray).resample
参考:https://xarray.pydata.org/en/stable/generated/xarray.Dataset.resample.html
xarrayのDataset, Dataarrayのnp.datetime64型時間座標を異なるスケールの時間座標に変換できる。
例えば、
monthly から seasonal
6 hourly から daily
使い方
da.resample(time=freq).(変換後の値を計算するメソッド)
# time: daの時間座標名
# freq: 変換後の時間座標間隔
resampleメソッド実行例
用いるデータ
2000-01-01から10年間のmonthlyデータ
import numpy as np
import pandas as pd
import xarray as xr
da = xr.DataArray(np.arange(12*10),dims='time',
coords={'time':pd.date_range('2000-01-01',periods=12*10, freq='M')})
データ詳細
>>> da
xarray.DataArraytime: 120
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
117, 118, 119])
Coordinates:
* time (time) datetime64[ns] 2000-01-01 ... 2000-04-29
monthlyからyearlyに変換(平均)
その年の値を12ヶ月分の平均で代表する場合
>>> da.resample(time='Y').mean()
array([ 5.5, 17.5, 29.5, 41.5, 53.5, 65.5, 77.5, 89.5, 101.5,
113.5])
Coordinates:
* time (time) datetime64[ns] 2000-12-31 ... 2009-12-31
monthlyからdailyに変換(線型近似)
線型近似の場合はinterpolate('linear')
>>> da.resample(time='D').interpolate('linear')
xarray.DataArraytime: 3623
array([0.00000000e+00, 3.44827586e-02, 6.89655172e-02, ...,
1.18935484e+02, 1.18967742e+02, 1.19000000e+02])
Coordinates:
* time (time) datetime64[ns] 2000-01-31 ... 2009-12-31
より下位の時間座標に変換する際、存在しない値を参照するようなメソッド(sumなど)を指定すると、そのような位置の値はNaNになる。
>>> da.resample(time='D').sum()
<xarray.DataArray (time: 337)>
array([ 0., 0., nan, ..., nan, 11., 11.])
Coordinates:
* time (time) datetime64[ns] 1999-12-15 1999-12-16 ... 2000-11-15
freqの文法について
このページに簡単にまとめられている
xarray.Dataarray.shift()
座標を指定した単位幅ずらせる。時間軸以外でも可能。
ずらして座標値が存在しなくなった位置の値はNaNとなる。
実行例
参照:https://docs.xarray.dev/en/latest/generated/xarray.DataArray.shift.html
arr = xr.DataArray([5, 6, 7], dims="x")
arr.shift(x=1)
<xarray.DataArray (x: 3)>
array([nan, 5., 6.])
Dimensions without coordinates: x