nwpc-data 库简介
nwpc-data 是为 GRAPES 系列模式开发的 GRIB 2 数据访问 python 工具库,提供检索要素场的便捷方法,支持气象局 CMA-PI 高性能计算机和二级存储。
nwpc-data 内部使用 eccodes-python 解码 GRIB 2 文件。
目前 nwpc-data 提供以下功能:
- 获取业务系统产品文件路径
- 从 GRIB 2 文件中检索要素场
nwpc-data 库正处于开发之中,后续会增加更多功能
安装
从 Github 中下载最新的源代码:
https://github.com/nwpc-oper/nwpc-data
使用 pip
命令安装:
pip install .
CMA-PI
本项目已在中国气象局 CMA-PI 高性能计算机上进行测试,使用如下环境:
module load apps/eccodes/2.17.0/intel
# module load compiler/intel/composer_xe_2018.1.163
module load apps/python/3.6.3/gnu
安装 nwpc-data 前需要单独安装依赖库 eccodes-python,可以使用下面的命令安装。
pip install --user /g11/wangdp/lib/python/attrs-19.3.0-py2.py3-none-any.whl
pip install --user /g11/wangdp/lib/python/eccodes_python-0.9.7-py2.py3-none-any.whl
CMA-PI 上已保存 nwpc-data 的最新版本,使用下面的命令将软件包安装到用户目录。
pip install --user /g11/nwp_xp/wangdp/project/data/nwpc-data/nwpc-data
准备
首先导入需要使用的一些库。
import numpy as np
import pandas as pd
import eccodes
获取业务系统产品文件路径
可以使用内置的配置文件获取 CMA-PI 或二级存储中业务系统产品文件路径。
下面的示例获取 GRAPES GFS GMF 系统 2020 年 4 月 22 日 00 时次 024 时效的原始分辨率 GRIB 2 文件路径。
from nwpc_data.data_finder import find_local_file
file_path = find_local_file(
"grapes_gfs_gmf/grib2/orig",
start_time="2020042200",
forecast_time="24h",
)
file_path
PosixPath('/sstorage1/COMMONDATA/OPER/NWPC/GRAPES_GFS_GMF/Prod-grib/2020042121/ORIG/gmf.gra.2020042200024.grb2')
使用 number
参数指定集合预报的成员编号。
下面示例获取 GRAPES GEPS 系统第 20 个成员 2020 年 4 月 22 日 12 时次 048 时效的原始分辨率 GRIB 2 文件路径。
file_path = find_local_file(
"grapes_geps/grib2/orig",
start_time=pd.to_datetime("2020-04-22 12:00:00"),
forecast_time=pd.Timedelta(hours=48),
number=20,
)
file_path
PosixPath('/sstorage1/COMMONDATA/OPER/NWPC/GRAPES_GEPS/Prod-grib/2020042212/grib2/gef.gra.020.2020042212048.grb2')
nwpc-data 还内置了共享数据集的部分数据。
获取 FNL 资料。
file_path = find_local_file(
"glob/fnl",
start_time="2019122000",
data_class="cm",
)
file_path
PosixPath('/sstorage1/COMMONDATA/glob/fnl/2019/fnl_20191220_00_00.grib2')
内置的配置文件请查看 nwpc_data/data_finder/conf
目录
检索 GRIB 2 消息
nwpc-data 使用 eccodes-python 从 GRIB 2 文件中检索需要的要素场,并返回 GRIB 2 消息。
下面的示例从文件中检索 850hPa 温度场。
data_path = find_local_file(
"grapes_gfs_gmf/grib2/orig",
start_time="2020042200",
forecast_time="24h",
)
data_path
PosixPath('/sstorage1/COMMONDATA/OPER/NWPC/GRAPES_GFS_GMF/Prod-grib/2020042121/ORIG/gmf.gra.2020042200024.grb2')
from nwpc_data.grib.eccodes import load_message_from_file
t850 = load_message_from_file(
data_path,
parameter="t",
level_type="pl",
level=850,
)
t850
94734264112368
可以使用 eccodes-python 的 API 接口获取 GRIB 2 消息的属性和数据。
print("shortName: ", eccodes.codes_get(t850, "shortName"))
print("typeOfLevel: ", eccodes.codes_get(t850, "typeOfLevel"))
print("level: ", eccodes.codes_get(t850, "level"))
shortName: t
typeOfLevel: isobaricInhPa
level: 850
values = eccodes.codes_get_double_array(t850, "values")
values = values.reshape([720, 1440])
values
array([[258.75289063, 258.76289063, 258.76289063, ..., 258.75289063,
258.76289063, 258.75289063],
[258.47289062, 258.48289062, 258.46289062, ..., 258.46289062,
258.47289062, 258.44289063],
[258.27289063, 258.26289063, 258.27289063, ..., 258.25289063,
258.26289063, 258.26289063],
...,
[227.68289062, 227.68289062, 227.72289062, ..., 227.62289062,
227.75289062, 227.63289063],
[227.90289062, 227.90289062, 227.90289062, ..., 227.90289062,
227.88289063, 227.91289063],
[228.12289062, 228.18289062, 228.19289063, ..., 228.09289062,
228.23289063, 228.20289063]])
注意:需要手动调用 eccodes.codes_release
释放消息对象。
eccodes.codes_release(t850)
加载 GRIB 2 要素场
nwpc-data 还提供对上述检索得到 GRIB 2 消息的封装,返回 xarray.DataArray
对象,类似 cfgrib 库。
from nwpc_data.grib.eccodes import load_field_from_file
t850 = load_field_from_file(
data_path,
parameter="t",
level_type="pl",
level=850,
)
t850
t850
对象已对 GRIB 2 消息进行解码,包含两个维度:纬度(latitude
)和经度(longitude
)。
可以使用 xarray 库提供的一系列工具对数据进行处理。比如,求纬向平均值。
t850.mean(dim="longitude")
参考
nwpc-data 项目源代码:
https://github.com/nwpc-oper/nwpc-data
本文来自 nwpc-data-guide 项目,更多说明请访问:
https://github.com/perillaroc/nwpc-data-guide
相关文章
应用示例:
《GRIB笔记:使用eccodes-python加载垂直剖面图数据》
实现细节: