前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Herbie:轻松获取多家数值天气预报模型数据

Herbie:轻松获取多家数值天气预报模型数据

作者头像
用户11172986
发布2025-02-12 15:44:24
发布2025-02-12 15:44:24
14100
代码可运行
举报
文章被收录于专栏:气python风雨气python风雨
运行总次数:0
代码可运行

Herbie:轻松获取多家数值天气预报模型数据 🌦️

摘要

Herbie 是一个 Python 包,用于从不同的云存档源下载最近和存档的数值天气预报(NWP)模型输出。NWP 数据以 GRIB2 格式分发,Herbie 使用 xarraycfgrib 读取这些数据。Herbie 还提供了一些额外的功能,帮助用户可视化和提取数据。

下面将展示简单介绍该库功能,并实战下载HRRR数据与可视化

环境设置

安装依赖

代码语言:javascript
代码运行次数:0
复制
!pip install herbie-data  -i https://pypi.mirrors.ustc.edu.cn/simple/

支持的数据源

Herbie 可以帮助你发现、下载和读取以下模型的数据:

  • 高分辨率快速刷新(HRRR)| HRRR-阿拉斯加
  • 快速刷新(RAP)
  • 全球预报系统(GFS)
  • 全球集合预报系统(GEFS)
  • ECMWF 开放数据预报(IFS 和 AIFS)
  • 海军全球环境模型(NAVGEM)
  • 北美中尺度模型(NAM)
  • 国家模型混合(NBM)
  • 快速刷新预报系统(RRFS)原型
  • 实时/无限制中尺度分析(RTMA/URMA)
  • 飓风分析和预报系统(HAFS)
  • 高分辨率确定性预测系统(HRDPS)

这些数据大多通过 NOAA 开放数据传播(NODD)计划提供,使得天气数据比以往任何时候都更容易获取。

安装

使用 Conda 安装

最简单的安装方式是通过 conda-forge 安装 Herbie 及其依赖项:

代码语言:javascript
代码运行次数:0
复制
conda install -c conda-forge herbie-data  

使用环境文件安装

你也可以使用提供的 Conda 环境文件 environment.yml 来创建环境:

代码语言:javascript
代码运行次数:0
复制
# 下载环境文件  
wget https://github.com/blaylockbk/Herbie/raw/main/environment.yml  

# 创建环境  
conda env create -f environment.yml  

# 激活环境  
conda activate herbie  

使用 pip 安装

Herbie 也可以通过 PyPI 安装,但需要手动安装一些依赖项:

  • Python 3.9+
  • cURL
  • eccodes(cfgrib 的依赖项)
  • 可选:wgrib2

安装依赖项后,可以使用 pip 安装 Herbie:

代码语言:javascript
代码运行次数:0
复制
# 安装最新发布版本  
pip install herbie-data  

# 或者安装最新开发版本  
pip install git+https://github.com/blaylockbk/Herbie.git  

# 安装额外功能的依赖项  
pip install herbie-data[extra]  

功能

  • 从不同数据源搜索模型输出。
  • 下载完整的 GRIB2 文件。
  • 下载子集 GRIB2 文件(按 grib 字段)。
  • 使用 xarray 读取数据。
  • 使用 Pandas 读取索引文件。
  • 额外功能(Herbie xarray 访问器):
    • 提取某一点的数据
    • 获取 Cartopy 坐标参考系统
    • 使用 Cartopy 绘制数据(早期开发阶段)。

示例代码

代码语言:javascript
代码运行次数:0
复制
from herbie import Herbie  

# 创建 HRRR 模型 6 小时地面预报产品的 Herbie 对象  
H = Herbie(  
'2021-01-01 12:00',  
  model='hrrr',  
  product='sfc',  
  fxx=6
)  
# 查看文件内容  
H.inventory()  

# 下载完整的 GRIB2 文件  
H.download()  

# 下载子集,例如所有 500 mb 的字段  
H.download(":500 mb")  

# 使用 xarray 读取子集,例如 2 米温度  
H.xarray("TMP:2 m")  
代码语言:javascript
代码运行次数:0
复制
 ╭─[48;2;255;255;255m[38;2;136;33;27m▌[0m[38;2;12;53;118m[48;2;240;234;210m▌[38;2;0;0;0m[1mHerbie[0m─────────────────────────────────────────────╮
 │ INFO: Created a default config file.                 │
 │ You may view/edit Herbie's configuration here:       │
 │ [38;2;255;153;0m       /home/mw/.config/herbie/config.toml        [0m   │
 ╰──────────────────────────────────────────────────────╯

✅ Found ┊ model=hrrr ┊ [3mproduct=sfc[0m ┊ [38;2;41;130;13m2021-Jan-01 12:00 UTC[92m F06[0m ┊ [38;2;255;153;0m[3mGRIB2 @ aws[0m ┊ [38;2;255;153;0m[3mIDX @ aws[0m
👨🏻‍🏭 Created directory: [/home/mw/data/hrrr/20210101]
代码语言:javascript
代码运行次数:0
复制

读取并可视化数据

代码语言:javascript
代码运行次数:0
复制
!ls /home/mw/data/hrrr/20210101
代码语言:javascript
代码运行次数:0
复制
hrrr.t12z.wrfsfcf06.grib2  subset_8fb2be61__hrrr.t12z.wrfsfcf06.grib2
代码语言:javascript
代码运行次数:0
复制
import xarray as xr
ds = xr.open_dataset('/home/mw/data/hrrr/20210101/hrrr.t12z.wrfsfcf06.grib2',engine ='cfgrib',
                                    filter_by_keys={'stepType': 'instant', 'typeOfLevel': 'surface'})
print(ds)
代码语言:javascript
代码运行次数:0
复制
<xarray.Dataset> Size: 305MB
Dimensions:     (y: 1059, x: 1799)
Coordinates:
    time        datetime64[ns] 8B ...
    step        timedelta64[ns] 8B ...
    surface     float64 8B ...
    latitude    (y, x) float64 15MB ...
    longitude   (y, x) float64 15MB ...
    valid_time  datetime64[ns] 8B ...
Dimensions without coordinates: y, x
Data variables: (12/36)
    vis         (y, x) float32 8MB ...
    gust        (y, x) float32 8MB ...
    sp          (y, x) float32 8MB ...
    orog        (y, x) float32 8MB ...
    t           (y, x) float32 8MB ...
    cnwat       (y, x) float32 8MB ...
    ...          ...
    cfnsf       (y, x) float32 8MB ...
    vbdsf       (y, x) float32 8MB ...
    vddsf       (y, x) float32 8MB ...
    blh         (y, x) float32 8MB ...
    lsm         (y, x) float32 8MB ...
    siconc      (y, x) float32 8MB ...
Attributes:
    GRIB_edition:            2
    GRIB_centre:             kwbc
    GRIB_centreDescription:  US National Weather Service - NCEP
    GRIB_subCentre:          0
    Conventions:             CF-1.7
    institution:             US National Weather Service - NCEP
    history:                 2025-02-09T11:34 GRIB to CDM+CF via cfgrib-0.9.1...
代码语言:javascript
代码运行次数:0
复制
import cmaps
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.io.shapereader import BasicReader
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
# 创建绘图对象
fig, ax = plt.subplots(figsize=(18, 4), subplot_kw={'projection': ccrs.PlateCarree()},dpi=200)

gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=1.2, color='gray', alpha=0.5, linestyle='--')
gl.top_labels = False
gl.right_labels = False
gl.xformatter = LONGITUDE_FORMATTER
gl.yformatter = LATITUDE_FORMATTER
# 绘制要素分布
im = ax.contourf(ds.longitude , ds.latitude , ds.sp, levels=10, cmap=cmaps.WhiteBlue,
                 transform=ccrs.PlateCarree())
# 添加标题
ax.set_title('HRRR SP')
# 增加地图
ax.coastlines(resolution='50m', lw=0.5)
ax.add_feature(cfeature.OCEAN.with_scale('50m'))
ax.add_feature(cfeature.LAND.with_scale('50m'))
#色标
cax = fig.add_axes([0.7, 0.1, 0.02, 0.6])
cbar = fig.colorbar(im,  cax=cax, orientation='vertical', shrink=0.8, pad=0.05)
cbar.set_label('sp')
plt.show()

小结

有这个库大家获取数值天气预报方便很多,就是网络不太好,下载速度比较感人

另外读取的话还是直接用xarray,Herbie转换的速度比较慢

怎么读取grib可以参考我的往期文章,去个人主页搜grib即可

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

本文分享自 气python风雨 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Herbie:轻松获取多家数值天气预报模型数据 🌦️
    • 摘要
    • 环境设置
      • 安装依赖
    • 支持的数据源
    • 安装
      • 使用 Conda 安装
      • 使用环境文件安装
      • 使用 pip 安装
    • 功能
    • 示例代码
    • 读取并可视化数据
    • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档