Xarray engine: ensemble data¶
Get input GRIB ensemble forecast data.
[1]:
import earthkit.data as ekd
ds_fl = ekd.from_source("sample", "ens_cf_pf.grib").to_fieldlist()
The data contains 3 ensemble members: 1 control and 2 perturbed members.
[2]:
ds_fl.ls()
[2]:
| parameter.variable | time.valid_datetime | time.base_datetime | time.step | vertical.level | vertical.level_type | ensemble.member | geography.grid_type | |
|---|---|---|---|---|---|---|---|---|
| 0 | t | 2024-06-03 00:00:00 | 2024-06-03 | 0 days 00:00:00 | 500 | pressure | 0 | regular_ll |
| 1 | t | 2024-06-03 06:00:00 | 2024-06-03 | 0 days 06:00:00 | 500 | pressure | 0 | regular_ll |
| 2 | t | 2024-06-03 00:00:00 | 2024-06-03 | 0 days 00:00:00 | 500 | pressure | 1 | regular_ll |
| 3 | t | 2024-06-03 00:00:00 | 2024-06-03 | 0 days 00:00:00 | 500 | pressure | 2 | regular_ll |
| 4 | t | 2024-06-03 06:00:00 | 2024-06-03 | 0 days 06:00:00 | 500 | pressure | 1 | regular_ll |
| 5 | t | 2024-06-03 06:00:00 | 2024-06-03 | 0 days 06:00:00 | 500 | pressure | 2 | regular_ll |
When we convert GRIB data to Xarray with to_xarray() the ensemble dimension is defined by the “member” dimension role. By default, this role is using the “ensemble.member” metadata key.
[3]:
ds_fl.to_xarray()
[3]:
<xarray.Dataset> Size: 33kB
Dimensions: (member: 3, step: 2, latitude: 19, longitude: 36)
Coordinates:
* member (member) <U1 12B '0' '1' '2'
* step (step) timedelta64[ns] 16B 00:00:00 06:00:00
* latitude (latitude) float64 152B 90.0 80.0 70.0 60.0 ... -70.0 -80.0 -90.0
* longitude (longitude) float64 288B 0.0 10.0 20.0 30.0 ... 330.0 340.0 350.0
Data variables:
t (member, step, latitude, longitude) float64 33kB ...
Attributes:
Conventions: CF-1.8
institution: ECMWFThis default behaviour can be overridden by specifying custom dim_roles. E.g. to get the ensemble member number from the “perturbationNumber” GRIB key we can use:
[4]:
ds_fl.to_xarray(dim_roles={"member": "metadata.perturbationNumber"})
[4]:
<xarray.Dataset> Size: 33kB
Dimensions: (member: 3, step: 2, latitude: 19, longitude: 36)
Coordinates:
* member (member) int64 24B 0 1 2
* step (step) timedelta64[ns] 16B 00:00:00 06:00:00
* latitude (latitude) float64 152B 90.0 80.0 70.0 60.0 ... -70.0 -80.0 -90.0
* longitude (longitude) float64 288B 0.0 10.0 20.0 30.0 ... 330.0 340.0 350.0
Data variables:
t (member, step, latitude, longitude) float64 33kB ...
Attributes:
Conventions: CF-1.8
institution: ECMWF[ ]: