前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Grib格式数据处理

Grib格式数据处理

作者头像
MeteoAI
发布2019-07-22 18:22:01
5.7K0
发布2019-07-22 18:22:01
举报
文章被收录于专栏:MeteoAIMeteoAI

上次我们说到了如何使用Python处理NetCDF格式文件,这次我们说一下如何使用python处理grib格式数据。

Grib格式是一种应用于气象领域的简明数据格式,由世界气象组织进行标准化。通常用来存储历史气象数据。当前有3个版本的grib格式,版本0已经不再使用,版本1仍在广泛使用,主要用于存储数值天气输出结果。版本2的变化较小,目前也已经得到应用。

很多工具都可以处理grib格式数据,比如matlab中nctoolbox工具箱,python中的pygrib,ncepgrib2,PyNIO等。此外还有专门用于处理grib格式的命令行工具,比如wgrib,wgrib2分别用于读取grib和grib2格式。跨平台工具zyGrib可用于grib数据的可视化。还有NCL,MeteoInfo等等。

此次仅介绍如何使用Python处理grib格式数据,关于其他工具或编程语言的应用以后可能会单独讲解。由于pygrib,ncepgrib2和PyNIO等工具没有Windows版本,因此本文仅适用于Unix系统(Win10中的Linux子系统),不适用于Windows系统。

安装

安装之前需要对Anaconda第三方源进行一些配置,关于Anaconda的配置看这里:一文教你解决Python所有安装配置

配置完成之后可以使用如下命令安装

代码语言:javascript
复制
conda install pygrib

如果未进行第三方源配置,可使用如下方式安装

代码语言:javascript
复制
conda install -c conda-forge pygrib

安装完成之后即可进行grib数据处理

数据读取

首先导入库

import pygrib

然后读取grib格式数据

data = pygrib.open('fnl_20181214_00_00.grib2')

获取文件中相关信息

data.messages ## 表示文件中总共有多少条数据

打印文件中所有记录信息

for d in data: print(d)

pygrib所提供的处理方式类似二进制数据处理,其提供了一些处理二进制数据的方法,比如.seek .tell .rewind .read等方法。

  • .seek 跳到第几条记录
  • .tell 当前所在记录位置
  • .rewind 回到第一条记录
  • .read 读取指定个数记录

除了上述方式外,还可以使用索引的方式获取文件中的记录,比如,想要获取第10条记录,可使用如下命令:

data[10]

pygrib还提供一些方法通过变量名称和一些参数来获取相关记录信息,比如:

## 指定获取层的类型,可以选择获取指定类型层的数据,这对应了不同压力层的的数据 data.select(name='Temperature', typeOfLevel='isobaricInhPa')

比如获取地面温度:

temp = data.select(name='Temperature', typeOfLevel='surface', level=0)[0]

返回的 temp 变量包含了一些方法和属性,比如 temp.data() 包含了温度数据以及经纬度信息,temp.latlons() 则包含了经纬度信息,temp.projparams 则包含了文件中的投影信息。还有一些其他属性和方法,具体见文末Jupyter Notebook。

绘图

以上述读取的温度数据为例,绘制中国及周边地区的温度分布:

import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap fig, ax = plt.subplots(figsize=(12, 9)) lons = temp.data()[2][0,:] lats = temp.data()[1][:,0] tc = np.array(temp.data()[0]) #- 273.15 lons, lats = np.meshgrid(lons, lats) m = Basemap(projection=temp.projparams.get('proj'), lon_0=180, llcrnrlat=0, llcrnrlon=70, urcrnrlat=60, urcrnrlon=140, ax=ax)x, y = m(lons, lats) con = m.contourf(x, y, tc, np.arange(220, 321), cmap=plt.cm.RdBu_r) _ = m.ax.set_xlim([70, 140]) _ = m.ax.set_ylim(0, 60) _ = m.drawparallels(np.arange(0, 61, 10), labels=[1,0,0,0], linewidth=0.1, fontsize=16, fmt=lat2str, dashes=[2,2]) _ = m.drawmeridians(np.arange(70, 141, 15), labels=[0,0,0,1], linewidth=0.1, fontsize=16, fmt=lat2str, dashes=[2,2]) _ = m.readshapefile('中国行政区_包含南海九段线', 'china', linewidth=1.5)

cb = fig.colorbar(con, pad=0.02, shrink=0.95) cb.set_ticks(np.arange(220, 321, 20)) cb.set_ticklabels(np.arange(220, 321, 20)) cb.ax.tick_params(labelsize=16) ## 控制colorbar ticklables字体大小 cb.ax.set_ylabel('Temperature($\circ$C)', fontdict=dict(family='Times New Roman', fontsize=24)) # set colorbar yaxis label font

文末链接中提供了所使用的数据和shp文件,其中也包含了Notebook,Notebook中包含了更多的命令说明和绘图示例。

数据处理及可视化下期:HDF格式数据处理及可视化


链接: https://pan.baidu.com/s/12hIIO_2UJzBhSKAhEhrIrw 提取码: yudh


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

本文分享自 MeteoAI 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档