目录
0、前言
1、wgrib软件
2、matlab中的nctoolbox工具箱
3、使用python中的pygrib模块
4、使用python中的xarray、cfgrib模块
5、使用cdo工具
之前接触的数据格式大都是nc格式,使用matlab和python都比较熟悉怎么读取,进行数据处理工作。最近发现气象数据中格式很多采用grib\grib2格式。以下是对grib\grib2格式数据处理进行的总结。
首先是windows下的wgrib软件。下载软件解压缩,将其添加至环境变量中。下载地址【链接:https://pan.baidu.com/s/1JReRhtB3PgfpqYVtV9PS2Q 提取码:1111】。
打开命令行窗口,输入wgrib2查看,结果如下,表明加载成功。
使用wgrib2 gribfilename -netcdf ncfilename,将数据全部转换为nc格式进行处理。
当grib文件中数据过多,而我们只需要其中部分数据时,可以通过wgirb2 gribfilename -v查看文件中变量信息,通过wgrib2 gribfilename -match varname -netcdf ncfilename匹配变量并进行格式转换。或者 通过wgrib2 gribfilename -match varname -csv csvfilename将文件转换为csv格式。
习惯使用matlab的,可以下载nctoolbox第三方工具箱,【地址:https://code.google.com/archive/p/nctoolbox/downloads】。这里可能出现的问题时版本不匹配,我下载了最新的nctoolbox版本,matlab版本如下,会出现错误使用ncdataset的报错信息。
改用nctoolbox-20121106版本后,运行成功。读取的数据存储在结构体中,用{}索引后即可使用切片提取所需要区域、高度的数据。
安装、导入pygrib模块。使用data = pygrib.open(gribfilename)打开文件,使用var = data.select(name=" ",typeOfLevle=" ",level=" ")获取想要的特定层的变量数据。
最后使用 data,lats,lons = var.data(lat1=min(lat),lat2=max(lat),lon1=min(lon),lon2=max(lon))切取特定区域的数据。
使用以下代码进行变量读取和选择操作
import pygrib as pg
grbs = pg.open(r'D:\My_Document\Code\S2S\data\sh-20150105.grib')# 所有变量
for grb in grbs:
print(grb)
使用以下代码对数据经纬度范围以及值进行查看
value = data.values
lat, lon = data.latitudes, data.longitudes
使用以下代码对特定区域进行裁切
z1 = data.select(name='Geopotential Height', typeOfLevel='isobaricInhPa', level=100)[0]
z1, lat1, lon1 = z1.data(lat1=min(lat_era), lat2=max(lat_era), lon1=min(lon_era), lon2=max(lon_era))
使用方法与pygrib模块类似。
使用ncl中的cdo工具切取指定区域、高度、的变量信息。
可能数据量太大了?在服务器采用cdo工具对获取变量信息写入nc文件,速度比较慢。处理ECMWF的7天降水预报数据,[3:3:72,78:6:168],共40个时刻,差不多两天能处理一个月,40*30=1200个文件。