Windows下xarray+cfgrib读取grib文件

news/2024/12/5 5:54:10/

在Windows下读取grib文件,在我上一篇博客Windows上python读取grib2文件(不用Linux)学习了使用wgrib2处理grib2文件,可以直接读,也可以转化为nc文件(转化后python就容易处理了)。而对于grib文件,下载wgrib处理可以,但不能转化为nc文件。本博客学习使用xarray和cfgrib读取及转化grib数据

一、气象数据常用格式

常用的数据格式包括普通的二进制格式、文本数据、NetCDF、HDF4/5以及GRIB1/2数据。这里简单介绍一下NetCDF和GRIB1/2数据。

1.NetCDF(Network Common Data Form)

NetCDF数据是常用的气象和卫星数据存储的数据格式,结构形式包含维数、变量、属性和数据四个子域。这里介绍一下如何使用python处理NetCDF数据:

pip install netCDF4  #安装处理NetCDF的依赖库
from netCDF4 import Dataset
import numpy as npnc_obj = Dataset('C:\\wgrib2\\test.nc')
#查看nc文件
print(nc_obj)
print('---------------------------------------')#查看nc文件中的变量
print(nc_obj.variables.keys())
for i in nc_obj.variables.keys():print(i)
print('---------------------------------------')# 查看每个变量的信息
for i in nc_obj.variables.keys():print("---------------------------------")print(nc_obj.variables[i])
print('---------------------------------------')# 查看每个变量的所有属性
for i in nc_obj.variables.keys ():print(nc_obj.variables[i].ncattrs())
print('---------------------------------------')# 查看每个变量的单位
for i in nc_obj.variables.keys():print(nc_obj.variables[i].units)
print('---------------------------------------')# 查看每个变量的维数
for i in nc_obj.variables.keys():print(nc_obj.variables[i].ndim)
print('---------------------------------------')

2.GRIB1和GRIB2文件

GRIB(GRIdded Binary)和GRIB2(General Regularly-distributed Information in Binary Form)是与计算机无关的压缩的二进制编码,主要用来存放数值天气分析和预报产品资料。处理grib文件的常用工具包pygrib,Grib格式数据处理有详细介绍,gribapi也自带python接口,可以通过ECMWF提供的ecCodes或cgrib安装包进行安装使用。此外利用wgrib以及wgrib2命令行工具也可以高效处理grib文件。

###wgrib2命令行
wgrib2 -d 56 a.grb2 -netcdf a.nc ###将grib文件转位nc文件
wgrib2 a.grb2 -d 1 -s -lon 249 39 -lon 255 33 ###提取过后经纬度点的数值

可以参考Windows上python读取grib2文件(不用Linux)

###利用xarray和cfgrib直接读取为数组
import xarray as xr
ds = xr.open_dataset('era5-levels-members.grib', engine='cfgrib')

这是本博客主要介绍的内容。

二、xarray+cfgrib读取grib文件

1.安装

首先我们这里主要使用2个Python库:

  1. xarray
  2. cfgrib

这里安装推荐使用conda安装,可以参考Windows下Anaconda的下载,安装与使用。

建议:Anaconda创建新的环境,在新的环境下安装以下依赖库,在新的环境下执行python文件。

conda install xarray
conda install cfgrib

如果想使用xarray读取grib文件,还需要一个解码库"eccodes":

conda install -c conda-forge eccodes

如果安装完ecodes库,提示找不到,则需要先引入这个库,请参考安装eccodes运行代码出错解决

2.xarray介绍

数据结构 :xarray有两大数据类型:DataArray、Dataset。

DataArray

一个带有标签的多维数组,它有如下几个重要的属性:

  1. values 获取数组的具体数值
  2. dims 获取维度的名字,如(‘x’, ‘y’, ‘z’)
  3. coords 获取一个类似于字典的结果,里面包含各个坐标
  4. attrs 获取原始数据的属性,比如变量的名字、单位等

Dataset

Dataset可以简单的理解为由多个DataArray组成的集合,它有如下几个重要的属性:

  1. dims 获取维度的名字,结果类似于字典,如{‘x’: 6, ‘y’: 6, ‘time’: 8}
  2. data_vars 获取物理量的名字
  3. coords 获取一个类似于字典的结果,里面包含各个坐标
  4. attrs 获取原始数据的属性,比如变量的名字、单位等

数据类型的使用

读取数据:

 xarray.open_dataset()读取Dataset类型数据,即能读取多个物理量。xarray.open_dataarray()读取DataArray类型数据,即只能读取单个物理量。

如果nc文件中含有多个物理量,用open_dataarray()读取会报错,因此建议统一都用open_dataset()来读取文件。

提取物理量

从文件中读取数据ds = xarray.open_dataset()

假如数据中含有一个名为var的物理量可以通过ds.var或ds[var]来获取。

3.实例使用

直接读取grib文件:

import xarray as xr
filein = 'F:/Zhu/download/2000-2015/FNL/FNL2000/fnl_20000505_00_00'
data = xr.open_dataset(filein, engine='cfgrib')
print(data)

运行出错:

在这里插入图片描述
可以看到:

cfgrib.dataset.DatasetBuildError: multiple values for key 'typeOfLevel'

这是因为目前cfgrib库无法同时读取多个typeOfLevel,因此我们只需要根据提示筛选我们需要的数据就行了。原程序添加所需数据为:

data = xr.open_dataset(filein, engine='cfgrib', backend_kwargs={'filter_by_keys':{'typeOfLevel': 'isobaricInhPa'}})

选择需要的typeOfLevel即可。
在这里插入图片描述
可以看到气压层有很多,这里也可以指定气压层:

data = xr.open_dataset(filein, engine='cfgrib', backend_kwargs={'filter_by_keys':{'typeOfLevel': 'isobaricInhPa','level':500}})

指定level为500,即读取500hpa气压层的数据。

在这里插入图片描述
同时,还可以直接将grib数据转化为nc文件:

data.to_netcdf('output.nc')

这里需要下载新的依赖库,根据提示缺少哪个库下载哪个库。

转化为nc文件后,可以继续使用读取nc文件的方法处理。

希望本博客对需要的同学有帮助,有问题的话可以互相讨论。


http://www.ppmy.cn/news/867414.html

相关文章

grib2 文件结构

GRIB是一种二进制编码的名称,用于加工资料的传输和交换,GRIB编码的分析或预报产品是由一系列八位组构成的连续比特流组成。在GRIB2中编码资料主要分为9段, 0段——指示段 八位组序号 内容 1—4 G…

grib文件

一、grib文件简介 WMO是世界气象组织,world meteorology organization。 GRIB是WMO开发的一种用于交换和存储规则分布数据的二进制文件格式。最初GRIB表示“二进制格点”(GRIdded Binary),后来扩展为“二进制的通用规则分布信息”(General Regularly-distributed Informat…

转载:grib文件说明

原文链接:https://www.cnblogs.com/weiyinfu/p/9975257.html grib文件 一、grib文件简介 WMO是世界气象组织,world meteorology organization。 GRIB是WMO开发的一种用于交换和存储规则分布数据的二进制文件格式。最初GRIB表示“二进制格点”&#x…

【线程概念和线程控制】

目录 1 :peach:线程概念 :peach:1.1 :apple:什么是线程?:apple:1.2 :apple:线程的优点和缺点:apple:1.3 :apple:页表的大小:apple:1.4 :apple:线程异常和用途:apple:1.5 :apple:进程VS线程:apple: 2 :peach:线程控制:peach:2.1 :apple:POSIX线程库:apple:2.2 :apple…

elasticsearch学习入门+实战

学习链接1 基础概念 官网学习:地址 基本命令 PS:使用Apifox测试 查询所有索引库 添加索引库 添加时,加入分词器 添加时,加入记录属性值 查询获取索引库 删除索引库 添加文档 必须要在添加文档值的时候用【_doc】&a…

一种解决sketchup导出fbx格式后再次导入到sketchup材质丢失的解决方案

在sketchup中为物体添加纹理。 2 导出fbx格式,会存在一个fbx文件和同名的保存纹理图片的文件夹。 3 再次导入到sketchup中会发现纹理不显示(具体原因未知) 4 我们可以将fbx导入到3ds Max软件中,可以看到纹理是存在的。&#xf…

如何将SketchUp的模型导入PPT?

作者:Tutorials Up 作者为你完整演示如何将SketchUp模型导出成FBX格式的三维模型,又如何正确地将三维模型插入PPT。 将为你方案的演示汇报增加另一种可能! 特别提示: 此功能仅限在Office 2016、2019及Office365中实现 【视频学…

sketchup 图片转模型_3d模型转su模型(如何将3D模型转化为sketchup)

3D导入草图大师的模型怎样才能带贴图 草图大师导出成3DS格式时在选项里把贴图选项也勾上,然后最导出到一个新文件夹里,这样贴图和模型就在同一文件夹里了。3D导入后可能直接不显示贴图,材质编辑器里用吸管工具把材质吸上,点显示贴…