1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【xarray】データの時間座標の変換(resample)

Last updated at Posted at 2022-05-08

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
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?