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笔记:使用cfgrib加载垂直剖面图数据

GRIB笔记:使用eccodes-python加载垂直剖面图数据

GRIB笔记:使用Matplotlib绘制剖面图

实现细节:

从ecCodes的GRIB2消息构建xarray对象

GRIB笔记:从GRIB 2文件中加载单个要素场

GRIB笔记:获取并加载GRIB 2消息字节流