Xarray

Programmation parallèle avec Dask en Python

James Fulton

Climate Informatics Researcher

Xarray : comme pandas, mais en plusieurs dimensions

 

pandas
  • Applique des étiquettes d'index aux données tabulaires

 

Xarray
  • Applique des étiquettes d'index aux tableaux multidimensionnels
Programmation parallèle avec Dask en Python

DataFrame

Un DataFrame composé de quatre colonnes.

Programmation parallèle avec Dask en Python

DataSet

Un DataSet composé de trois DataArray.

Programmation parallèle avec Dask en Python

Charger un DataSet à partir de Zarr

import xarray as xr
ds = xr.open_zarr("data/era_eu.zarr")


print(ds)
<xarray.Dataset>
Dimensions:  (lat: 30, lon: 45, time: 504)
Coordinates:
  * lat      (lat) float64 35.5 36.5 37.5 38.5 39.5 ... 60.5 61.5 62.5 63.5 64.5
  * lon      (lon) float64 -14.5 -13.5 -12.5 -11.5 -10.5 ... 26.5 27.5 28.5 29.5
  * time     (time) datetime64[ns] 1979-05-31 1979-06-30 ... 2021-04-30
Data variables:
    precip   (time, lat, lon) float32 dask.array<chunksize=(12, 15, 15), ... >
    temp     (time, lat, lon) float32 dask.array<chunksize=(12, 15, 15), ... >
Programmation parallèle avec Dask en Python

DataFrame vs DataSet

pandas DataFrame
# Sélectionner une date précise
df.loc['2020-01-01']

# Sélectionner par numéro d'index
df.iloc[0]

# Sélectionner une colonne
df['column1']
Dask DataSet
# Sélectionner une date précise
ds.sel(time='2020-01-01')

# Sélectionner par numéro d'index
ds.isel(time=0)

# Sélectionner une variable
ds['variable1']
Programmation parallèle avec Dask en Python

DataFrame vs DataSet

pandas DataFrame
# Effectuer des opérations mathématiques
df.mean()




# Groupby et moyenne df.groupby(df['time'].dt.year).mean()
# Moyenne mobile rolling_mean = df.rolling(5).mean()
Dask DataSet
# Effectuer des opérations mathématiques
ds.mean()
ds.mean(dim='dim1')
ds.mean(dim=('dim1', 'dim2'))


# Groupby et moyenne ds.groupby(ds['time'].dt.year).mean()
# Moyenne mobile rolling_mean = ds.rolling(dim1=5).mean()
rolling_mean.compute()
Programmation parallèle avec Dask en Python

Visualisation

ds['variable'].plot()
  • Produit un tracé linéaire si 1D
  • Produit une carte thermique si 2D
  • Produit un histogramme si 3D+

Exemple Un exemple de tracé linéaire montre la température à un endroit du nord de la Finlande sur quelques années autour du Grand épisode de froid.

Programmation parallèle avec Dask en Python

Visualisation

ds['variable'].plot()
  • Produit un tracé linéaire si 1D
  • Produit une carte thermique si 2D
  • Produit un histogramme si 3D+

Exemple Un exemple de carte thermique montre la température moyenne en Europe en janvier.

Programmation parallèle avec Dask en Python

Visualisation

ds['variable'].plot()
  • Produit un tracé linéaire si 1D
  • Produit une carte thermique si 2D
  • Produit un histogramme si 3D+

Exemple Un exemple d'histogramme montre la distribution des températures mesurées à tous les emplacements en Europe.

Programmation parallèle avec Dask en Python

Passons à la pratique !

Programmation parallèle avec Dask en Python

Preparing Video For Download...