gsw的包装器,向xarray结果添加CF标准名称和单位属性
项目描述
gsw-xarray是gsw python的包装器,它将CF属性添加到xarray.DataArray输出。它旨在作为上游GSW-Python库的嵌入式包装器,并且只有当函数的一个参数是xarray.DataArray时,才会添加这些属性。
您可以在gsw-xarray.readthedocs.io上找到文档。
使用方法
简单使用
import gsw_xarray as gsw
# Create a xarray.Dataset
import numpy as np
import xarray as xr
ds = xr.Dataset()
id = np.arange(3)
ds['id'] = xr.DataArray(id, coords={'id':id})
ds['CT'] = ds['id'] * 10
ds['CT'].attrs = {'standard_name':'sea_water_conservative_temperature'}
ds['SA'] = ds['id'] * 0.1 + 34
ds['SA'].attrs = {'standard_name':'sea_water_absolute_salinity'}
# Apply gsw functions
sigma0 = gsw.sigma0(SA=ds['SA'], CT=ds['CT'])
print(sigma0.attrs)
输出
{'standard_name': 'sea_water_sigma_t', 'units': 'kg/m^3'}
不用担心与非xarray数组对象的使用,只需在上游库的所有位置使用即可
sigma0 = gsw.sigma0(id * 10, id * 0.1 + 34)
print(type(sigma0), sigma0)
输出
<class 'numpy.ndarray'> [-5.08964499 2.1101098 9.28348219]
使用Pint
我们支持(并在必要时进行单位转换)使用 pint 单位和 xarray 封装的 Quantities 的使用。支持 pint 需要安装两个可选依赖项:pint 和 pint-xarray。如果 gsw 函数的所有输入都是 Quantities,返回的对象也将是一个属于相同 UnitRegistry 的 Quantity。
import pint_xarray
import gsw_xarray as gsw
# Create a xarray.Dataset
import numpy as np
import xarray as xr
ds = xr.Dataset()
id = np.arange(3)
ds['id'] = xr.DataArray(id, coords={'id':id})
ds['CT'] = ds['id'] * 10
# make sure there are unit attrs this time
ds['CT'].attrs = {'standard_name':'sea_water_conservative_temperature', 'units': 'degC'}
ds['SA'] = ds['id'] * 0.1 + 34
ds['SA'].attrs = {'standard_name':'sea_water_absolute_salinity', 'units': 'g/kg'}
# use the pint accessor to quantify things
ds = ds.pint.quantify()
# Apply gsw functions
sigma0 = gsw.sigma0(SA=ds['SA'], CT=ds['CT'])
# outputs are now quantities!
print(sigma0)
输出
<xarray.DataArray 'sigma0' (id: 3)> <Quantity([27.17191038 26.12820162 24.03930887], 'kilogram / meter ** 3')> Coordinates: * id (id) int64 0 1 2 Attributes: standard_name: sea_water_sigma_t
使用 xarray 封装的 Quantities 不是必需的,您可以直接使用 pint(尽管仍然需要安装 pint-xarray 依赖项)。
import gsw_xarray as gsw
import pint
ureg = pint.UnitRegistry()
SA = ureg.Quantity(35, ureg("g/kg"))
CT = ureg.Quantity(10, ureg.degC)
sigma0 = gsw.sigma0(SA=SA, CT=CT)
print(sigma0)
输出
26.824644457868317 kilogram / meter ** 3
由于 gsw-xarray 在使用 Quantities 时将参数转换为适当的单位,因此我们可以使用开尔文温度,例如。
CT = ureg.Quantity(10, ureg.degC).to('kelvin')
sigma0 = gsw.sigma0(SA=SA, CT=CT)
print(sigma0)
输出
26.824644457868317 kilogram / meter ** 3
Xarray 访问器
gsw-xarray 为 xarray 提供了一个新的访问器,允许直接在数据集上调用 gsw 函数。
ds.gsw.sigma0(CT="CT", SA="SA")
# or
ds.gsw.sigma0(CT=ds.CT, SA=ds.SA)
# or even, if CT and SA have the proper standard names
ds.gsw.sigma0()
与 dataArrays、数字、字符串或与标准名称自动解析的任何类型的混合使用都是可能的。
如果数据集包含具有适当标准名称的所有参数,则可以使用括号使用访问器,就像它是一个字典一样。
ds.gsw["sigma0"]
# Or if you want to get a list of multiple variables
ds.gsw[["sigma0", "alpha"]]
如果数据集包含具有相同标准名称的多个变量(例如,从瓶或 CTD 得到的实际盐度),则可以设置一个选项来告诉 gsw_xarray 获取哪个变量。
# Globally
gsw_xarray.set_cf_name_preference(standard_name="variable_in_dataset")
# Or in a context, e.g.
with gsw_xarray.set_non_cf_name(sea_water_pressure="pres_adjusted"):
# write code here
pass
如果您想使用带有自动检测参数的访问器,但函数的参数没有标准名称,也是可以的。您需要在 gsw-xarray 中设置一个选项,无论是上下文还是全局。
# Globally
gsw_xarray.set_non_cf_name(argument="argument_name_in_dataset")
# Or in a context, e.g.
with gsw_xarray.set_non_cf_name(Rt="Rt_in_ds"):
ds.gsw.SP_salinometer(t=0)
在这种情况下,函数 gsw.SP_salinometer 使用没有标准名称的参数 Rt。
当使用用户设置的选项时,自动获取变量的优先级顺序是:1) 由 gsw_xarray.set_cf_name_preference 设置的变量,2) 具有标准名称的变量(内部映射),以及 3) 由 gsw_xarray.set_non_cf_name 设置的变量。
安装
Pip
pip install gsw-xarray
Conda
在 conda 环境内: conda install -c conda-forge gsw-xarray。
引用
如果您使用 gsw-xarray,请引用上游 gsw 库的参考论文:McDougall, T.J. 和 P.M. Barker,2011:入门 TEOS-10 和 Gibbs 海水(GSW)海洋学工具箱,28pp,SCOR/IAPSO WG127,ISBN 978-0-646-55621-5
@book{mcdougall2011getting,
author = {McDougall, T. J. and Barker, P. M.},
title = {Getting Started with TEOS-10 and the Gibbs Seawater (GSW) Oceanographic Toolbox},
year = {2011},
pages = {28},
publisher = {SCOR/IAPSO WG127},
isbn = {978-0-646-55621-5}
}
贡献指南
所有贡献、错误报告、错误修复、文档改进、增强功能和想法都受欢迎。如果您发现错误或缺少功能,请自由地在GitHub问题页面中打开一个问题。
为了向gsw-xarray做出贡献,请fork存储库并提交一个pull请求。有关如何开始使用git的好的分步教程,请参考xarray贡献指南。主要区别是我们不使用conda作为Python环境,而是使用poetry。
设置环境
首先,您需要安装poetry。然后转到您本地的gsw-xarray副本并启动安装。
cd /path/to/your/gsw-xarray
poetry install --with dev
然后,您可以通过在虚拟环境中启动shell来激活环境。
poetry shell
您可以在本地检查测试是否通过。
pytest gsw_xarray/tests
您可以使用pre-commit在每次提交时自动运行linting。
发布(仅限维护者)
待办事项…
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。