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+이면 히스토그램 생성

예시 예시 히트맵은 1월 유럽 전역의 평균 기온을 보여 줍니다.

Python에서 Dask로 병렬 프로그래밍

시각화

ds['variable'].plot()
  • 1D이면 선 그래프 생성
  • 2D이면 히트맵 생성
  • 3D+이면 히스토그램 생성

예시 예시 히스토그램은 유럽 전역 모든 지점에서 측정한 기온 분포를 보여 줍니다.

Python에서 Dask로 병렬 프로그래밍

Ayo berlatih!

Python에서 Dask로 병렬 프로그래밍

Preparing Video For Download...