Xarray

Pythonで学ぶDaskによる並列プログラミング

James Fulton

Climate Informatics Researcher

Xarray — 多次元でも pandas のように扱う

 

pandas
  • 表形式データにインデックスラベルを付与

 

Xarray
  • 高次元配列にインデックスラベルを付与
Pythonで学ぶDaskによる並列プログラミング

DataFrame

4 列からなる DataFrame。

Pythonで学ぶDaskによる並列プログラミング

DataSet

3 つの 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 と 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 と DataSet の比較

pandas DataFrame
# 数値演算
df.mean()




# groupby と平均 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 と平均 ds.groupby(ds['time'].dt.year).mean()
# 移動平均 rolling_mean = ds.rolling(dim1=5).mean()
rolling_mean.compute()
Pythonで学ぶDaskによる並列プログラミング

プロット

ds['variable'].plot()
  • 1 次元なら折れ線グラフ
  • 2 次元ならヒートマップ
  • 3 次元以上ならヒストグラム

北フィンランドの1地点における数年間の気温を示す折れ線グラフの例。

Pythonで学ぶDaskによる並列プログラミング

プロット

ds['variable'].plot()
  • 1 次元なら折れ線グラフ
  • 2 次元ならヒートマップ
  • 3 次元以上ならヒストグラム

1月のヨーロッパ全体の平均気温を示すヒートマップの例。

Pythonで学ぶDaskによる並列プログラミング

プロット

ds['variable'].plot()
  • 1 次元なら折れ線グラフ
  • 2 次元ならヒートマップ
  • 3 次元以上ならヒストグラム

ヨーロッパ各地で測定した気温の分布を示すヒストグラムの例。

Pythonで学ぶDaskによる並列プログラミング

練習しましょう!

Pythonで学ぶDaskによる並列プログラミング

Preparing Video For Download...