专栏首页MeteoAIGrib格式数据处理

Grib格式数据处理

上次我们说到了如何使用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所有安装配置

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

conda install pygrib

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

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


本文分享自微信公众号 - MeteoAI(meteoai),作者:Hero

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Numpy基本用法介绍

    我们在以前的文章中已经介绍了如何安装python及其python的一些特性,现在将介绍数据分析过程中经常用到的Numpy库。

    zhangqibot
  • 还在用matplotlib画图?你out啦

    进行数据处理的时候,可视化是非常重要的数据分析方式,但是有时候在处理大批量的数据时,由于数据量过多,数据往往会非常密集,而不能发现有效信息,而我们经常使用的ma...

    zhangqibot
  • 基于Python Shapely的几何集合操作

    shapely是基于笛卡尔坐标的几何对象操作和分析Python库,底层基于GEOS和JTS库。

    zhangqibot
  • Python从零开始第三章数据处理与分析:三个简单但强大的函数

    本文博客:柳叶刀与小鼠标 - 简书 https://www.jianshu.com/u/619b87e54936 =====================...

    用户1359560
  • 手把手教你用Python实现分布式爬虫(四) - scrapy爬取技术文章网站

    搭建scrapy的开发环境,本文介绍scrapy的常用命令以及工程目录结构分析,本文中也会详细的讲解xpath和css选择器的使用。然后通过scrapy提供的s...

    JavaEdge
  • numpy.log

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    于小勇
  • 反手来个K8S入门到跑路(腾讯云版本)

    放假前一两天发现腾讯云托管K8S集群上线好一阵子了, 还支持把原有主机迁入k8s集群, 索性开始搞事了.

    李国宝
  • 如何选择合适的PaaS

    正如我在博客文章“PaaS对企业的7大好处”中所写的一样,“平台即服务”解决方案是企业快速构建应用程序并对其进行适当维护的最佳方案。但是,为企业选择合适的Paa...

    siffis
  • 选择合适的PaaS

    正如我在博客文章“ 7大顶级PaaS(平台即服务)对组织的益处“中写到的那样,“平台即服务”是企业快速构建及合理维护应用程序的最佳解决方式。但是,要为组织选择一...

    ffann
  • 从技术平台到aPaaS平台

    aPaas是衍生在云平台之上的,如果开发一款应用,需要涉及大量基础技术或者基础设施。

    春哥大魔王

扫码关注云+社区

领取腾讯云代金券