Xarray

Python 中的 Dask 并行编程

James Fulton

Climate Informatics Researcher

Xarray:像 pandas,但维度更多

 

pandas
  • 为表格数据应用索引标签

 

Xarray
  • 为高维数组应用索引标签
Python 中的 Dask 并行编程

DataFrame

一个由四列组成的 DataFrame。

Python 中的 Dask 并行编程

DataSet

一个由三个 DataArray 组成的 DataSet

Python 中的 Dask 并行编程

从 Zarr 加载 DataSet

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), ... >
Python 中的 Dask 并行编程

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']
Python 中的 Dask 并行编程

DataFrame vs. DataSet

pandas DataFrame
# 执行数学运算
df.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'))


# 分组并取均值 ds.groupby(ds['time'].dt.year).mean()
# 滚动均值 rolling_mean = ds.rolling(dim1=5).mean()
rolling_mean.compute()
Python 中的 Dask 并行编程

绘图

ds['variable'].plot()
  • 1D 时绘制折线图
  • 2D 时绘制热力图
  • 3D+ 时绘制直方图

示例 示例折线图展示了芬兰北部某地在"大寒潮"前后几年的气温变化。

Python 中的 Dask 并行编程

绘图

ds['variable'].plot()
  • 1D 时绘制折线图
  • 2D 时绘制热力图
  • 3D+ 时绘制直方图

示例 示例热力图展示了欧洲一月的平均气温分布。

Python 中的 Dask 并行编程

绘图

ds['variable'].plot()
  • 1D 时绘制折线图
  • 2D 时绘制热力图
  • 3D+ 时绘制直方图

示例 示例直方图展示了欧洲各地测得气温的分布。

Python 中的 Dask 并行编程

Vamos praticar!

Python 中的 Dask 并行编程

Preparing Video For Download...