前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NCAR放弃PyNGL后又入新坑?

NCAR放弃PyNGL后又入新坑?

作者头像
bugsuse
发布2022-09-23 14:54:03
8150
发布2022-09-23 14:54:03
举报
文章被收录于专栏:气象杂货铺

最近在NCAR的GitHub官方源中又出现了一个新的小项目:

A lightweight interface for reading in output from the Weather Research and Forecasting (WRF) model into xarray Dataset

利用Python进行WRF模式后处理的应该都知道,wrf-python用来处理WRF模式结果比较方便,但又太笨重了,经常需要编写很多代码。xarray是目前地球科学领域使用非常多的库,集成度非常高,使用非常方便。

由于一些原因,xarray直接处理WRF模式结果一直是痛点

  • WRF输出的nc格式文件不是CF兼容的
  • wrf-python 需要和 netCDF4-python 和 xarray 接口交互
  • wrf-python 中缺乏接口以充分利用dask的并行能力

salem 库可以处理WRF模式结果,然后和 xarray 对象整合,但是 salem 库在处理诊断量方面不是很方便。

为了充分利用 xarray 的强大功能,NCAR近期发起了名为 xwrf 的小项目。

可视化实例

目前这个库正处于试验开发阶段,可以直接通过如下命令安装:

代码语言:javascript
复制
python -m pip install git+https://github.com/NCAR/xwrf.git

在官方说明以及示例中可以看到 xwrf 可以更方便的进行批量处理,并且可以和交互式可视化库(比如hvplot)协同工作,进一步简化数据处理和分析的流程。

示例

以下是官方提供的简单示例,可以进行批量处理并且进行交互式可视化:

代码语言:javascript
复制
import glob

import holoviews as hv
import hvplot
import hvplot.xarray
import xarray as xr
import xwrf
from distributed import Client
from ncar_jobqueue import NCARCluster

hv.extension('bokeh')

# 创建集群实例
cluster = NCARCluster()
cluster.scale(10)
client = Client(cluster)
client

files = sorted(glob.glob('/glade/scratch/bruyerec/IAG/METGRID/*.nc'))

# 选择文件
file_subset = files[-80:]

# 变量名
variables = ["PRES", "TT", "RH"]

# 预处理函数
def preprocess(ds):
    return ds[variables]

# 批量处理,选择了 xwrf 后端引擎
ds = xr.open_mfdataset(
    file_subset,
    engine="xwrf",
    parallel=True,
    concat_dim="Time",
    combine="nested",
    preprocess=preprocess,
    chunks={'Time': 1},
)

读取好数据之后,剩下的数据处理和可视化操作与常规使用 xarray 的方式类似,比如查看文件内容:

然后可以选择指定变量指定维度的数据:

代码语言:javascript
复制
ds.PRES.isel(num_metgrid_levels=0, south_north=0, west_east=0).values

也可以选择指定气压层的数据:

代码语言:javascript
复制
ds = ds.isel(num_metgrid_levels=range(1, 21))

可以重命名气压层,并进行计算:

代码语言:javascript
复制
ds_to_plot = ds.rename({'num_metgrid_levels': 'plev'})

plevs = ds_to_plot.PRES.isel(south_north=0, west_east=0).values[0, :]
ds_to_plot['plev'] = plevs / 100
ds_to_plot['plev'].attrs['units'] = 'hPa'

重命名及处理后Dataset

最后可以结合 hvplot 进行交互式绘图:

代码语言:javascript
复制
plot = ds_to_plot.hvplot.quadmesh(
    x='XLONG_M',
    y='XLAT_M',
    z=['TT', 'RH'],
    groupby=['Time', 'plev'],
    widget_location='bottom',
    rasterize=True,
    coastline=True,
    cmap='inferno',
)
plot

交互式可视化示例

xwrf 使用起来还是比较方便的,并且可以直接利用 xarray 的强大功能,尤其是可以利用 dask 进行并行处理。但是很多诊断变量可能无法直接处理,这也是目前的问题。如果能够集合 wrf-python 的诊断量计算,以及各种剖面绘图功能,就完美了。

就介绍到这,感兴趣的可以安装测试一下。出现问题可以直接在官方的Github源提issue。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气象汇 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档