Python读取grib数据获取变量推荐姿势

前情提要

最近使用的EC和GFS预报数据给的都是grib2格式的,之前用惯nc格式的,python读取grib2数据的时候还走了些弯路,看到很多博客上给的教程其实不能满足我的需求,现在搞明白了分享一下

pygrib安装

第一个问题就是我电脑上pygrib安装都折腾了一阵子
我电脑上直接pip是装不上去的

pip3 install pygrib

使用conda的时候最好使用的是conda-forge源的,用这个装成功了

conda install -c conda-forge pygrib

pygrib使用

遍历一下查看数据

以一个GFS的预报数据为例,我们使用pygrib读取之后,得到的是一个可迭代对象,可以拿来循环

import pygrib
grbs = pygrib.open('gfs.t00z.pgrb2.0p25.f024')
for grb in grbs:print(grb)

我们来看一下遍历出的grbmessage对象打印出来是什么

1:Pressure reduced to MSL:Pa (instant):regular_ll:meanSea:level 0:fcst time 24 hrs:from 202407210000
2:Cloud mixing ratio:kg kg**-1 (instant):regular_ll:hybrid:level 1:fcst time 24 hrs:from 202407210000
3:Ice water mixing ratio:kg kg**-1 (instant):regular_ll:hybrid:level 1:fcst time 24 hrs:from 202407210000

可以发现,每一个grbMessage对象可以是二维格点数据,同时单位,气压层等维度信息也是有的
以“510:Temperature:K (instant):regular_ll:isobaricInhPa:level 95000 Pa:fcst time 24 hrs:from 202407210000”为例,表示的意思如下

  1. 510: 这是记录的索引或序号。它标识这是文件中的第 510 个记录。

  2. Temperature: 这是变量的名称。在这里,它表示“温度”。

  3. K (instant): 这是变量的单位和时间类型。

    • K 表示开尔文,是温度的单位。
    • instant 表示这是瞬时值。
  4. regular_ll: 这是网格类型,regular_ll 表示规则的纬度/经度网格。

  5. isobaricInhPa: 这是变量所属的层。在这里,它表示等压面。

  6. level 95000 Pa: 这是变量的层次信息。这里表示95000帕斯卡 (Pa) 等压面(950 hPa 等压面)。

  7. fcst time 24 hrs: 这是预报时间。这里表示从初始时间起 24 小时后的预报。

  8. from 202407210000: 这是初始时间,表示 2024 年 7 月 21 日 00:00。

获取变量

我下载的明明有41个高度层的信息,但是这样便利出来每一条数据都只是一个二维变量,我最终想获得的温度数据应该是三维数据,这意味着我需要将遍历的数据中为Temperature的调出来将他们拼成三维数组,这样才获取了一个变量完整的数据

在这里插入图片描述
可以看到,遍历出的数据以Temperature开头的就有56个,这是将非等压面的一些奇怪的Temperature也算上的总数

因此我们需要从中获取grbs中真正是气压层的Temperature

import pygrib
import numpy as npdef select_variable(filepath, variable, typeOfLevel):# 打开GRIB2文件grbs = pygrib.open(filepath)for grb in grbs:print(grb)temperature_records = grbs.select(name='Temperature', typeOfLevel='isobaricInhPa')# 获取记录数量num_records = len(temperature_records)# 假设所有记录的维度相同,获取第一个记录的维度# 这里使用第一个记录来确定数据的维度first_record = temperature_records[0].valuesdata_shape = first_record.shape# 创建一个三维数组来存储温度数据select_data = np.zeros((num_records, *data_shape))# 提取每个记录的数据并存储到三维数组中for i, record in enumerate(temperature_records):select_data[i, :, :] = record.valuesreturn select_datafilepath = '../download_res/ncep/20240721/gfs.t00z.pgrb2.0p25.f024'
variable = 'Temperature'
typeOfLevel='isobaricInhPa'
T = select_variable(filepath, variable, typeOfLevel)
print(np.shape(T))

这个函数和案例就展示了如何从grib数据中获取需要的变量
这里需要解释的是typeOfLevel=‘isobaricInhPa’,这是因为这个数据中只要是有不同高度层的数据,他的typeOfLevel就是isobaricInhPa,因为除了高度层的Temperature可以看到这种不是描述等压面温度的Temperature,如果不加上typeOfLevel='isobaricInhPa就会把他们也筛选出来
在这里插入图片描述

推荐使用Panoply查看grib数据先大概了解数据

Panoply直接搜索Panoply去官网下载之后直接打开即可,现在需要Java11装好,也很简单,去orical官网下载Java11的非安装版本,之后配置一下环境变量,在cmd输入java -version看到是11就可以了,无脑使用

可以看到,与pygrib不一样,Panoply直接会读出一个叫Temperature isobaric的变量,表示的就是有不同气压层的温度变量,这样可以很直观地看到数据的维度,但需要注意的是panoply和pygrib读出的变量可能长得不一样,需要留意
在这里插入图片描述
在Panoply中也可以一目了然总共有什么变量,再回去python中遍历一下找到pygrib读出来的变量名,获取变量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/48557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通信原理实验六:实验测验

实验六 实验测验 一:测验内容和要求 测试需要完成以下几个步骤: 配置好以下网络图;占总分10%(缺少一个扣一分)根据下面图配置好对应的IP和网关以及路由等相关配置,保证设备之间连通正常;占总…

领略诗词之妙,发觉生活之美。

文章目录 引言落霞与孤鹜齐飞,秋水共长天一色。野渡无人舟自横。吹灭读书灯,一身都是月。我醉欲眠卿且去,明朝有意抱琴来。赌书消得泼茶香,当时只道是寻常。月上柳梢头,人约黄昏后。最是人间留不住,朱颜辞镜花辞树。山中何事?松花酿酒,春水煎茶。似此星辰非昨夜,为谁风…

用Swagger进行后端接口测试的实战操作

目录 一.什么是Swagger? 二.Swagger的使用操作流程: 1.在pom.xml配置文件导入 Knife4j 的依赖: 2.在config配置类中加入 Knife4j 的相关配置并设置静态资源映射(否则接口文档无法访问): 三.Swagger的四个…

redis构建集群时,一直Waiting for the cluster to join

redis构建集群时,一直Waiting for the cluster to join 前置条件参考 前置条件 这是我搭建的集群相关信息,三台虚拟机,分别是一主一从。在将所有虚拟机中redis服务器用到的tcp端口都打开之后,进行构建集群。但是出现上面的情况。 …

node.js包管理工具对比

1. NPM(Node Package Manager) 特点: 官方工具:由 Node.js 官方提供的默认包管理工具。命令行工具:常用命令包括 npm install、npm update、npm publish 等。NPM 注册表:提供了一个庞大的开源包生态系统&…

【llama3.1】ollama的使用--本地部署使用llama3.1模型

快速入门 安装完成ollama后,在命令行窗口输入 ollama run llama3 上图表示 Ollama 正在下载 llama3 任务所需的资源文件,并显示了当前的下载进度、速度和预计剩余时间。这是 Ollama 在准备运行 llama3 任务之前所需的步骤。 上面的步骤完成后,就可以在本地进行聊天了,…

Chart.js 环形图

Chart.js 环形图 介绍 Chart.js 是一个强大的 JavaScript 图表库,它允许开发者轻松地在网页上创建和自定义各种图表。环形图(也称为饼图或甜甜圈图)是 Chart.js 支持的一种图表类型,用于展示数据在整体中的占比关系。环形图通过…

基于 HTML+ECharts 实现的数据可视化大屏案例(含源码)

数据可视化大屏案例:基于 HTML 和 ECharts 的实现 数据可视化已成为企业决策和业务分析的重要工具。通过直观、动态的图表展示,数据可视化大屏能够帮助用户快速理解复杂的数据关系,发现潜在的业务趋势。本文将介绍如何利用 HTML 和 ECharts 实…

区块链和数据要素融合的价值及应用

一、数据要素面临的关键障碍 在构建数据要素基石的过程中,首要任务是明确并解决产权架构的难题,特别是使用权的确立与流转机制的顺畅,此乃数字经济蓬勃发展的命脉所在。一个高效的数据流转体系对于激发数据潜能、加速经济发展及优化数据资源…

JVM系列(三) -类加载器及双亲委派模型介绍

在之前的文章中,介绍了类的加载过程中,我们有提到在加载阶段,通过一个类的全限定名来获取此类的二进制字节流操作,其实类加载器就是用来实现这个操作的。 在虚拟机中,任何一个类,都需要由加载它的类加载器…

声音克隆一键本地化部署 GPT-SoVITS

文章目录 GPT-SoVITS 介绍1:GPT-SoVITS安装2:GPT-SoVITS使用2.1 人声伴奏分离,去混响去延时工具2.2 语音切分工具2.3 语音降噪工具2.4 中文批量离线ASR工具2.5 语音文本校对标注工具GPT-SoVITS 介绍 GPT-SoVITS: 是一个由RVC变声器创始人“花儿不哭”推出的免费开源项目。…

WPF多语言国际化,中英文切换

通过切换资源文件的形式实现中英文一键切换 在项目中新建Language文件夹,添加资源字典(xaml文件),中文英文各一个。 在资源字典中写上想中英文切换的字符串,需要注意,必须指定key值,并且中英文…

DT浏览器首页征集收录海内外网址

DT浏览器首页征集收录海内外网址,要求页面整洁,内容丰富,知识性和可读性强,符合大众价值观,不含恶意代码

【机器学习】代价函数的几种误差以及代价函数的几个简单示例

引言 在机器学习中,代价函数(Cost Function)是一个评估模型性能的关键工具,它衡量了模型预测值与实际值之间的差异。代价函数通常用于监督学习,特别是在需要预测目标值的情况下,如回归问题或分类问题 文章目…

自定义时长裁切视频

人脸检测与定位: find_host_face_location:在视频的前几秒内快速检测并定位主持人的人脸,缩小帧尺寸以提高处理速度。 裁剪框计算: calculate_cropping_box:基于检测到的人脸位置,计算一个适合的裁剪框&…

c#自动关闭 MessageBox 弹出的窗口

第一种方法: 原理: 1、我们都知道,MessageBox弹出的窗口是模式窗口,模式窗口会自动阻塞父线程的,只有关闭了MessageBox的窗口后才会运行下面的代码。 2、所以可以考虑在MessageBox前先增加一个用于“杀”掉MessageBox窗口的线程。因为需要…

React好用的组件库有哪些

React好用的组件库有很多,它们各自具有不同的特点和优势,适用于不同的开发场景和需求。以下是一些受欢迎的React组件库及其特点: Material-UI(现更名为MUI) 特点:这是一个开源的React组件库,实…

学术研讨 | 区块链与隐私计算领域专用硬件研讨会顺利召开

学术研讨 添加图片注释,不超过 140 字(可选) 近日,国家区块链技术创新中心主办,长安链开源社区支持的“区块链性能优化与融合技术研讨会”顺利召开。当前,区块链与新技术之间的交叉融合和协同创新正成为显…

04 B端产品经理能力培养

B端产品经理能力模型 通用能力 学习能力 沟通能力 行业融入感主人翁精神 心态和情商 专业素养 责任心 自驱力、执行力 基础认知 产品行业认知:当前公司的产品所属细分领域、所处行业趋势、提供怎样的服务、产品和方案解决了客户哪些问题。 产品聚焦领域&a…

springboot+webSocket对接chatgpt

webSocket对接参考 话不多说直接上代码 WebSocket package com.student.config;import com.alibaba.fastjson2.JSONArray; import com.alibaba.fastjson2.JSONObject; import lombok.extern.slf4j.Slf4j; import org.springframework.http.MediaType; import org.springfram…