Xarray

Programmation parallèle avec Dask en Python

James Fulton

Climate Informatics Researcher

Xarray : comme pandas, mais en plus de dimensions

 

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

 

Xarray
  • Applique des étiquettes d'index à des tableaux de grande dimension
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 depuis 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 puis moyenne df.groupby(df['time'].dt.year).mean()
# Moyenne glissante 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 puis moyenne ds.groupby(ds['time'].dt.year).mean()
# Moyenne glissante rolling_mean = ds.rolling(dim1=5).mean()
rolling_mean.compute()
Programmation parallèle avec Dask en Python

Visualisation

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

Exemple Un exemple de courbe montre la température en un point du nord de la Finlande sur quelques années autour du Great Cold Outbreak.

Programmation parallèle avec Dask en Python

Visualisation

ds['variable'].plot()
  • Produit une courbe 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 une courbe 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 en tous points d'Europe.

Programmation parallèle avec Dask en Python

Passons à la pratique !

Programmation parallèle avec Dask en Python

Preparing Video For Download...