NetCDF文件是自描述的二进制数据格式。所谓自描述就是自带属性信息,这和一般的雷达基数据格式不同,一般的雷达数据也是二进制的,但不是自描述的,而是需要额外的数据格式文档来说明数据格式,而NetCDF文件中包含了描述变量和维度的元数据信息。通常包含以下三个部分:

维度

变量

属性

维度部分记录的是每个变量的维度名及长度,而变量包含了维度,属性(如数据单位)信息及变量的值。属性部分包含了一些额外信息,比如文件创建者等。

很多工具都可以处理NetCDF文件,比如MATLAB,Python,NCL,GrADS,CDO,NCO,Panoply等等。这里主要讲一下如何利用MATLAB,Python,NCL处理NetCDF文件。

Python

python中有多个库提供了处理NetCDF文件的功能,比如专门处理nc数据的netCDF4-python,scipy,osgeo,PyNIO(Linux)等。

netCDF4-python

使用 netCDF4-python处理nc数据是非常方便的,而且其提供了非常多的功能,并且正在不断的完善。关于netCDF4-python库的介绍,之前已经提到了 netcdf4-python 模块详解,还有这里这里使用 Cartopy 和 netCDF4 可视化 WRF 模式数据

下面以一个例子来讲述一下如何处理nc数据:

# 加载库

import netCDF4 as nc

data = nc.Dataset('wrfout_v2_Lambert.nc', 'r')

# 输出文件中变量

print(data.variables.keys())

# 读取变量

lon = data.variables['XLONG']

lat = data.variables['XLAT']

sst = data.variables['SST']

## 通过指定索引获取变量部分数据

# lon = data.variables['XLONG'][1, :, :]

# lat = data.variables['XLAT'][1, :, :]

# sst = data.variables['SST'][1, :, :]

scipy

scipy 库中的io模块同样提供了 netcdf 文件处理方法,其所使用的外部模块和 netCDF4-python 使用的相同,都不需要使用 Unidata 提供的 netcdf C库。

import scipy.io as spio

data = spio.netcdf_file('wrfout_v2_Lambert.nc', 'r')

# data = spio.netcdf.netcdf_file('wrfout_v2_Lambert.nc', 'r')

# 输出文件中变量信息

data.variables.keys()

Out[95]: dict_keys(['SFROFF', 'DN', 'SH2O', 'TMN', 'UDROFF', 'RDY', 'ITIMESTEP', 'HGT', 'RDX', 'PSFC', 'W', 'V', 'MU', 'QVAPOR', 'SMOIS', 'CF1', 'MAPFAC_U', 'HFX', 'DNW', 'SINALPHA', 'QFX', 'SNOWC', 'PB', 'CFN1', 'VEGFRA', 'MAPFAC_V', 'EPSTS', 'XLONG', 'F', 'XICE', 'COSALPHA', 'E', 'P_TOP', 'ZNW', 'QRAIN', 'SST', 'TSLB', 'RDNW', 'XLAND', 'RAINC', 'SNOW', 'U', 'FNM', 'LANDMASK', 'MAPFAC_M', 'ZNU', 'ZETATOP', 'PHB', 'SNOWH', 'TH2', 'Q2', 'RDN', 'QCLOUD', 'DZS', 'V10', 'RESM', 'TSK', 'CF3', 'RAINNC', 'XLAT', 'GLW', 'ISLTYP', 'P', 'PH', 'T', 'CANWAT', 'IVGTYP', 'CFN', 'CF2', 'MUB', 'LU_INDEX', 'Times', 'FNP', 'SWDOWN', 'PBLH', 'GRDFLX', 'T2', 'U10', 'LH', 'ZS'])

# 读取变量数据,获取变量数据的方式和 netCDF4-python 相同

lon = data.variables['XLONG']

lat = data.variables['XLAT']

sst = data.variables['SST']

osgeo.gdal 模块

# 加载模块

from osgeo import gdal

# 读取方式略有不同

#  'NETCDF:'' + filename + '':Varname'

lon = gdal.Open('NETCDF:''+ 'wrfout_v2_Lambert.nc' + '':XLONG')

lat = gdal.Open('NETCDF:''+ 'wrfout_v2_Lambert.nc' + '':XLAT')

sst = gdal.Open('NETCDF:''+ 'wrfout_v2_Lambert.nc' + '':SST')

但是按照上述方式读取出变量之外,无法直接用于绘图和其他处理,因为变量类型和之前的方法输出的变量类型不同:

type(lon)

Out[106]: osgeo.gdal.Dataset

获取数据可以通过以下方式:

# 获取变量数据

lon_value = lon.ReadAsArray()

lon_value.shape

Out[111]: (13, 60, 73)

type(lon_value)

Out[112]: numpy.ndarray

获取变量数据后,得到的数组同样是 numpy.ndarray 数组。

MATLAB

matlab中提供了处理netcdf文件的包,但是只有2011年之后的版本内置了改包。

读取数据之前,可以先查看以下文件中包含了哪些信息:

ncinfo('F:\wrfout_v2_Lambert.nc');

数据信息为结构体,其中包含了各维度信息,包含的变量及属性等信息。Format 表示文件格式为 classic netcdf文件。

知道变量信息之后就可以读取变量了:

lon = ncread('F:\wrfout_v2_Lambert.nc', 'XLONG');

lat = ncread('F:\wrfout_v2_Lambert.nc', 'XLAT');

sst = ncread('F:\wrfout_v2_Lambert.nc', 'SST');

读取数据之后,在变量空间可以查看关于变量的一些信息,比如维度大小。

NCL

ncl处理netcdf文件的方法同样非常简单,这里仅简单介绍一下:

data = addfile('wrfout_v2_Lambert.nc', 'r')

lon = data->XLONG

lat = data->XLAT

sst = data->SST

; 当然也可以通过索引获取部分数据

lon = data->XLONG(1, :, :)

lat = data->XLAT(1, :, :)

sst = data->SST(1, :, :)

以上三种方法均可以处理netcdf文件,根据不同的需要使用不同的方法。此节仅记录了怎么读netcdf文件,关于如何写netcdf文件下次再说。

除了上述三种工具之外,CDO和NCO在处理netcdf文件时有时会非常有用,关于这两部分的介绍有空再说。

python处理wrf气象数据_气象数据处理:NetCDF文件处理相关推荐

  1. 机器学习与气象数据_气象大数据与机器学习联合实验室 大数据和气象的“联姻”...

    气象大数据与机器学习联合实验室 大数据和气象的"联姻" 来源:<中国科学报> 时间:2017-02-13 13:36:28 作者:沈春蕾 我们每天都在看天气预报,大家会 ...

  2. python处理wrf气象数据_利用python-cdo处理气象数据

    如果你不喜欢命令行的操作方式,那么你可以尝试使用python-cdo,利用python脚本语言的优势来处理气象数据.命令行的方式有其优势,比如简单易操作,可扩展性更强等,利用CDO的python接口也 ...

  3. 输出nc数据_气象数据处理的火箭加速器—CDO

    happy科研 关注 Hi-新朋友,记得点蓝字关注我们哟 科研到头秃(7) 学渣 今天碰到了一个科研难题,想想都头大 学霸 学渣 模式运行得到了360个逐月输出的文件,NCL处理起来慢爆了,想哭 学霸 ...

  4. 合并多个nc数据_气象数据处理的火箭加速器—CDO

    happy科研 关注 Hi-新朋友,记得点蓝字关注我们哟 科研到头秃(7) 学渣 今天碰到了一个科研难题,想想都头大 学霸 学渣 模式运行得到了360个逐月输出的文件,NCL处理起来慢爆了,想哭 学霸 ...

  5. cimiss数据_气象现代化成果汛期应用系列报道_中国气象网

    中国气象报记者刘钊 编者按:2016年12月20日,由国家气象信息中心牵头建设的全国综合气象信息共享平台(CIMISS)正式业务化运行,标志着以CIMISS为核心的国省统一数据环境正式建立,标准.统一 ...

  6. mysql气象数据分析_气象行业 - 解决方案 - MySQL分布式数据库_开源数据库解决方案_数据处理技术提供商-爱可生...

    1.数据源 新一代CIMISS系统所收集的结构化信息包括了28个类别:中国地面逐小时资料(新Z自动站),中国地面逐小时资料(一体化区域站),中国地面逐小时资料(无人站),中国地面分钟资料(新Z自动站) ...

  7. 利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析...

    数据挖掘入门与实战 公众号: datadw 本文讲述如何利用Python模拟淘宝的搜索过程并对搜索结果进行初步的数据可视化分析. 搜索过程的模拟:淘宝的搜索页面有两种形式, 一种形式是, 2019/2 ...

  8. python玩转大数据_【小旭学长】大数据博士教你用python玩转时空大数据

    好消息!好消息!手把手教你用python玩大数据 小旭学长的python大数据教程完结撒花,共26P录制完毕,总时长4小时.每10分钟的视频的录制加剪辑时间加起来都要两小时以上,讲得很细但是节奏也很快 ...

  9. python 删除特定行数据_怎么用 Python 做数据分析实例

    01 生成数据表 第一部分是生成数据表,常见的生成方法有两种,第一种是导入外部数据,第二种是直接写入数据. Excel 中的文件菜单中提供了获取外部数据的功能,支持数据库和文本文件和页面的多种数据源导 ...

  10. python爬取餐饮数据_使用 Python 分析全国所有必胜客餐厅

    本文原创发布于微信公众号「极客猴」,欢迎关注第一时间获取更多原创分享 在之前的一篇文章中,我讲到如何爬取必胜客官网中全国各大城市餐厅的信息.虽然餐厅数据信息被抓取下来,但是数据一直在硬盘中" ...

最新文章

  1. ZZ:new/delete 和malloc/free 的区别
  2. 如果张东升是个程序员
  3. 登录mysql报错2059_navicat连接mysql报错2059的解决方法
  4. memc_nginx+srcache_nginx+memcached构建透明的动态页面缓存
  5. Blazor 数据绑定开发指南
  6. 初创公司5大Java服务困局,阿里工程师如何打破?
  7. (转载)委托与函数指针辨析
  8. python面试题37道(附答案)看完面试不愁了
  9. 【jQuery笔记Part4】02-jQuery微博案例
  10. Ubuntu构建ARM交叉编译器
  11. element-ui表单中的文本域 调整高度
  12. 电脑系统安装失败无法启动服务器,Windows2008R2安装补丁后系统无法启动
  13. $(dirname $0)
  14. Properties 文件中字符串加了引号
  15. Javafx顶级容器Stage(舞台)
  16. 9个最佳的大数据处理编程语言
  17. 解决中国菜刀连接失败问题
  18. android statusbar背景,Android踩坑记之沉浸式StatusBar
  19. 函数凹凸性与黑塞矩阵
  20. 直播预告 | 低代码+数据分析,驱动企业数智化运营

热门文章

  1. camera常见问题和调试方法
  2. Charles使用笔记
  3. Micropython——L298N电机驱动模块
  4. OSGEARTH三维地形开源项目
  5. java jsp实验设计心得_jsp课程设计心得_课程设计总结心得
  6. 【Android】Android签名:pem和pk8转化为keystore,jks
  7. pdg转pdf的正确方法!!
  8. 《高性能mysql》之MySQL高级特性(第七章)
  9. 一个很有趣的游戏(看谁的名字打架厉害)
  10. 易语言钩子DLL注入源码及源码说明