Xarray

Паралельне програмування з Dask у Python

James Fulton

Climate Informatics Researcher

Xarray — як pandas у більше вимірах

 

pandas
  • Застосовує мітки індексу до табличних даних

 

Xarray
  • Застосовує мітки індексу до багатовимірних масивів
Паралельне програмування з Dask у Python

DataFrame

DataFrame, що складається з чотирьох стовпців.

Паралельне програмування з Dask у Python

DataSet

DataSet, що складається з трьох DataArray

Паралельне програмування з Dask у Python

Завантаження DataSet із 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), ... >
Паралельне програмування з Dask у Python

DataFrame vs. DataSet

pandas DataFrame
# Вибрати конкретну дату
df.loc['2020-01-01']

# Вибрати за номером індексу
df.iloc[0]

# Вибрати стовпець
df['column1']
Dask DataSet
# Вибрати конкретну дату
ds.sel(time='2020-01-01')

# Вибрати за номером індексу
ds.isel(time=0)

# Вибрати змінну
ds['variable1']
Паралельне програмування з Dask у Python

DataFrame vs. DataSet

pandas DataFrame
# Виконати математичні операції
df.mean()




# Groupby і mean df.groupby(df['time'].dt.year).mean()
# Ковзне середнє rolling_mean = df.rolling(5).mean()
Dask DataSet
# Виконати математичні операції
ds.mean()
ds.mean(dim='dim1')
ds.mean(dim=('dim1', 'dim2'))


# Groupby і mean ds.groupby(ds['time'].dt.year).mean()
# Ковзне середнє rolling_mean = ds.rolling(dim1=5).mean()
rolling_mean.compute()
Паралельне програмування з Dask у Python

Побудова графіків

ds['variable'].plot()
  • Створює лінійний графік, якщо 1D
  • Створює теплову мапу, якщо 2D
  • Створює гістограму, якщо 3D+

Приклад Приклад лінійного графіка показує температуру в одній локації на півночі Фінляндії за кілька років навколо Великого хвилі холоду.

Паралельне програмування з Dask у Python

Побудова графіків

ds['variable'].plot()
  • Створює лінійний графік, якщо 1D
  • Створює теплову мапу, якщо 2D
  • Створює гістограму, якщо 3D+

Приклад Приклад теплової мапи показує середню температуру по Європі в січні.

Паралельне програмування з Dask у Python

Побудова графіків

ds['variable'].plot()
  • Створює лінійний графік, якщо 1D
  • Створює теплову мапу, якщо 2D
  • Створює гістограму, якщо 3D+

Приклад Приклад гістограми показує розподіл температур, виміряних у всіх локаціях по Європі.

Паралельне програмування з Dask у Python

Давайте потренуємось!

Паралельне програмування з Dask у Python

Preparing Video For Download...