跳转到主要内容

摘要:NetCDF数据对象,提供分析包之间快速的数据传输。

项目描述

ncdata

Python中的通用NetCDF数据。

提供分析包之间的快速数据交换,并完全控制存储格式。

特别:Ncdata 尽可能高效地交换Xarray和Iris之间的数据

"无损、无需复制和延迟保存"。

这使用户可以自由混合和匹配来自两个项目的操作,获得“两者之最佳”。

import xarray
import ncdata.iris_xarray as nci
import iris.quickplot as qplt

ds = xarray.open_dataset(filepath)
ds_resample = ds.rolling(time=3).mean()
cubes = nci.cubes_from_xarray(ds_resample)
temp_cube = cubes.extract_cube("air_temperature")
qplt.contourf(temp_cube[0])

内容

动机

主要用途

快速高效地将Xarray和Iris对象之间的数据进行转换。

这使得用户可以在代码中混合匹配这两个包的特性。

例如

from ncdata.iris_xarray import cubes_to_xarray, cubes_from_xarray

# Apply Iris regridder to xarray data
dataset = xarray.open_dataset("file1.nc", chunks="auto")
(cube,) = cubes_from_xarray(dataset)
cube2 = cube.regrid(grid_cube, iris.analysis.PointInCell)
dataset2 = cubes_to_xarray(cube2)

# Apply Xarray statistic to Iris data
cubes = iris.load("file1.nc")
dataset = cubes_to_xarray(cubes)
dataset2 = dataset.group_by("time.dayofyear").argmin()
cubes2 = cubes_from_xarray(dataset2)
  • 数据转换相当于使用一个库将数据写入文件,然后用另一个库读取它 ..
    • .. 除了实际上没有写入文件
  • 直接传输实数(numpy)和延迟(dask)变量数据数组,无需复制或计算

次要用途

精确控制文件格式

Ncdata也可以作为Iris或Xarray文件I/O和数据文件中存储的数据的确切格式之间的传输层。
例如,可以在将文件数据加载到Iris/Xarray之前对其进行调整;或者可以在将Iris/Xarray保存的输出写入文件之前进行调整。

这使用户能够绕过任何包在控制存储方面(如:数据分块;保留属性;缺失值处理;或维度控制)的限制。

例如

from ncdata.xarray import from_xarray
from ncdata.iris import to_iris
from ncdata.netcdf4 import to_nc4, from_nc4

# Rename a dimension in xarray output
dataset = xr.open_dataset("file1.nc")
xr_ncdata = from_xarray(dataset)
dim = xr_ncdata.dimensions.pop("dim0")
dim.name = "newdim"
xr_ncdata.dimensions["newdim"] = dim
for var in xr_ncdata.variables.values():
    var.dimensions = ["newdim" if dim == "dim0" else dim for dim in var.dimensions]
to_nc4(ncdata, "file_2a.nc")

# Fix chunking in Iris input
ncdata = from_nc4("file1.nc")
for var in ncdata.variables:
    # custom chunking() mimics the file chunks we want
    var.chunking = lambda: (100.0e6 if dim == "dim0" else -1 for dim in var.dimensions)
cubes = to_iris(ncdata)

数据处理

Ncdata还可以用于数据提取和修改,类似于CDO和NCO命令行操作员的范围,但没有文件操作。
然而,这种用法目前尚未开发:没有内置的数据一致性检查支持,也没有显然有用的操作(如按维度索引)。这可能会在未来添加,但也是真的,许多这样的操作(如索引)可能最好使用Iris/Xarray来完成。

原则

  • Ncdata将NetCDF数据表示为Python对象
  • Ncdata对象可以自由操作,不受任何数据文件的限制
  • Ncdata变量可以包含实数(numpy)或延迟(Dask)数组
  • Ncdata可以无损地转换为和从NetCDF文件转换
  • Iris或Xarray对象可以转换为和从ncdata转换,就像它们从和保存到NetCDF文件一样
  • 转换 Xarray和Iris基于转换为ncdata,这反过来又相当于文件I/O
    • 因此,Iris/Xarray转换相当于从一个包中保存到文件,然后在另一个包中加载该文件
  • Ncdata直接与Iris/Xarray交换变量数据,无需复制实数数据或计算延迟数据
  • Ncdata使用Dask 'streaming'与文件交换延迟数组,从而允许传输大于内存的数组

代码示例

API文档

安装

使用conda从conda-forge安装

conda install -c conda-forge ncdata

或使用pip从PyPI安装

pip install ncdata

项目状态

代码稳定性

我们打算遵循PEP 440或(较旧的)SemVer版本控制原则。

次要版本是"v0.1"
这是一个第一个完整的实现,所有公共API都功能正常。

然而,代码仍然是实验性的,API也不稳定(因此还没有主要版本)。

变更说明

v0.1.1

小的调整+错误修复。
注意:#62#59是实现预期性能目标的重要修复,即通过Dask传输任意大的数据而不会耗尽内存。

  • 阻止非numpy属性值破坏属性打印输出。#63
  • 阻止ncdata.iris.from_iris()为每个变量消耗全部数据内存。#62
  • 提供ncdata组件字典和属性值的便利API。#61
  • ncdata.netcdf4.from_nc4()中使用dask的chunks="auto"#59

v0.1.0

首次发布

Iris和Xarray兼容性

  • C.I.测试GitHub PRs和合并,针对Iris和Xarray的最新版本
  • 与iris >= v3.7.0兼容

已知限制

不支持的功能:未计划

  • 不支持用户定义的数据类型
    • 这包括复合型和可变长度类型

不支持的功能:计划在未来版本中提供

  • 组(尚未完全支持?)
  • 文件输出分块控制

已知问题

截至v0.1.1

参考文献

开发者说明

文档构建

  • 对于完整的文档构建,现在只需要简单的make html
    • docs/Makefile会清除API文档并调用sphinx-apidoc以进行完全重建
    • 结果可在docs/_build/html/index.html中找到
  • 上述内容仅用于本地测试(如有需要):我们通过ReadTheDocs提供了自动构建用于发布和PR的功能

发布操作

  1. 在GitHub上创建发布:这将触发在ReadTheDocs上的新文档版本
  2. 构建发行版
    1. 如果需要,获取build
    2. 运行python -m build
  3. 推送到PyPI
    1. 如果需要,获取twine
    2. 运行python -m twine upload --repository testpypi dist/*
      • 这会将文件上传到TestPyPI
    3. 创建一个新的环境,包含测试依赖项conda create -n ncdtmp python=3.11 iris xarray filelock requests pytest pip(注意:‘filelock’和‘requests’是iris的测试依赖项)
    4. 使用pip install --index-url https://test.pypi.org/simple/ ncdata安装新包并运行测试
    5. 如果测试检查通过,则删除 --repository testpypi 并重复 #2
      • --> 上传到“真实”PyPI
    6. 重复#4,删除 --index-url,以检查现在是否可以通过pip install ncdata找到新版本
  4. 更新conda以从PyPI获取新版本
    1. ncdata feedstock上创建PR
    2. 更新
    3. 合并PR;等待几小时;检查新版本是否出现在conda search ncdata

项目详情


下载文件

下载适用于您平台的应用程序文件。如果您不确定选择哪个,请了解有关安装包的更多信息

源分发

ncdata-0.1.1.tar.gz (436.1 kB 查看哈希值)

上传时间

构建分发

ncdata-0.1.1-py3-none-any.whl (28.2 kB 查看哈希值)

上传时间 Python 3

由以下支持