xarray를 사용하여 NetCDF 파일에 압축 추가
패키지를 NetCDF사용하여 압축 수준이 9 인 형식으로 압축 하고 변환하려는 래스터가 xarray있습니다. 압축이 인코딩 매개 변수를 dict로 사용하여 추가되었다고 가정하지만 여기에 무엇을 완전히 추가해야하는지 이해하는 방법을 잘 모르겠습니다.
f = directory + "/D_Passaic_F02_NBR_E0001_WGS84_comp"
t = xarray.open_rasterio(f)
encode = {'zlib': True, 'complevel': 9}
t.to_netcdf(output_dir+"/Test2.nc", encoding=encode)
기본적으로 오류가 발생합니다 : KeyError: 'zlib',하지만 여기서 무엇을 사용해야할지 잘 모르겠습니다. 제안? 데이터 배열은 단일 밴드와 다음과 같은 x 및 y 변수를 보여줍니다.
<xarray.DataArray (band: 1, y: 9635, x: 14564)>
or, in more detail:
<bound method ImplementsArrayReduce._reduce_method.<locals>.wrapped_func of
<xarray.DataArray (band: 1, y: 9635, x: 14564)>
[140324140 values with dtype=float32]
Coordinates:
* band (band) int32 1
* y (y) float64 41.06 41.06 41.06 41.06 ... 40.74 40.74 40.74 40.74
* x (x) float64 -74.45 -74.45 -74.45 -74.45 ... -73.97 -73.97 -73.97
Attributes:
transform: (3.2670488250568696e-05, 0.0, -74.447024371179...
crs: +init=epsg:4326
res: (3.2670488250568696e-05, 3.2670488250568696e-05)
is_tiled: 1
nodatavals: (-9999.0,)
scales: (1.0,)
offsets: (0.0,)
AREA_OR_POINT: Area
HISTOGRAM: 9090|9307|9097|9209|8729|8864|8744|8864|9181|9...
TIFFTAG_ARTIST: HEC-RAS
TIFFTAG_IMAGEDESCRIPTION: Depth (Max)>
답변
데이터에서 "zlib"라는 변수를 찾으려고하는 xarray의 오류 힌트입니다. 인코딩 dict의 올바른 구조는 다음과 같습니다.
encode = {"precipitation": {'zlib': True, ...}}
그러나 데이터가로드 된 방식 때문에 이것은 까다 롭습니다.
를 사용하여 파일을로드 한 후 가지고 open_rasterio있는 것은 DataArray. A DataArray에는 변수가있는 구조가 없습니다. NetCDF에 쓸 때 데이터는 DataSet.
당신이 호출하면 to_netcdfA의 DataArray, 그것은 자동으로 생성됩니다 DataSet"라는 데이터의 변수로 __xarray_dataarray_variable__". 따라서 이것은 작동하지만 결과 파일은 다음과 같은 이름으로 추악 할 것입니다 ... :
encode = {"__xarray_dataarray_variable__": {'zlib': True, ...}} # yuck!
데이터 세트를 수동으로 빌드 할 때 변수 이름을 지정할 수 있습니다. 예를 들어 밴드에 DEM 데이터가 포함 된 경우 다음과 같은 것이 의미가있을 수 있습니다.
dem = t.to_dataset(name="dem")
나중에 인코딩 사전을 지정하고 결과에 적절한 이름을 가질 수 있습니다.
encoding = {"dem": {'zlib': True, ...}}
dem.to_netcdf("dem.nc", encoding=encoding)
슬프게도 xarray를 사용한 압축은 RAM이 매우 많이 소모됩니다. 시스템 OOM이 발생할 경우를 대비하여 실행하기 전에 저장되지 않은 작업을 조심하십시오.
참조 :
- https://xarray.pydata.org/en/stable/generated/xarray.open_rasterio.html
- https://xarray.pydata.org/en/stable/generated/xarray.DataArray.to_netcdf.html#xarray.DataArray.to_netcdf
- https://xarray.pydata.org/en/stable/generated/xarray.Dataset.to_netcdf.html