1.NetCDF 文件介绍

  • Network Common Data Form (NetCDF),采用二进制格式;可以用来存储一系列的数组;
  • files contain a header and file metadata in the form of name/value
    attributes;


2.文件存储方式
netCDF文件中的数据以数组的形式存储。存储在数组中的数据需要具有相同的类型。如:
(1)一维数组
在一个位置上随时间变化的温度被存储为一维阵列。
(2)二维数组
给定时间内某一区域上的温度被存储为二维数组/阵列。注意:Pandas DataFrame也是一个二维的数据结构,但是它不同于数组:DataFrame可以存储异构的数据元素。
dataframe 存储结构:

(3)三维数组
如一个区域的温度随时间变化。

3.文件组成
netCDF文件包含维度、变量和属性。
(1)维度
维度可以用来表示实际的物理维度,例如,时间、纬度、经度或高度;或更抽象的数量,如车站或模型运行ID。
(2)变量
变量表示同一类型值的数组。变量用于在netCDF文件中存储大量数据。变量的名称、数据类型和形状由创建变量时指定的维度列表来描述。
(3)属性
NetCDF属性用于存储辅助数据或元数据。大多数属性提供关于特定变量的信息。这些属性由变量的名称和属性的名称标识。

图片转载自https://adyork.github.io/python-oceanography-lesson/17-Intro-NetCDF/index.html

4.数据读取与可视化
python中常用xarray读取nc数据。
(1)读取数据:

import xarray as xrnc_file = r"./file.nc" nc_data= xr.open_dataset(nc_file)
print(nc_data)

(2)查看变量

print(nc_data["variable1"].data[0])#查看第一个变量,data将variable1变量转换成numpy数组

(3)绘图

print(nc_data["variable1"][0].plot(x='lon',y='lat'))

举例:

nc数据可视化:

import xarray as xr
import matplotlib.pyplot as plt
import cartopy.crs as ccrs #加载地图信息
import numpy as npaccess_pr_file = './file.nc'
#读取数据
dset = xr.open_dataset(access_pr_file)#读取Dataset类型数据,即能读取多个物理量
#时间平均处理
clim = dset['pr'].mean('time', keep_attrs=True)
#转换时间单位
clim.data = clim.data * 86400
clim.attrs['units'] = 'mm/day'
#创建画布
fig = plt.figure(figsize=[12,5])
#设置空间投影
ax = fig.add_subplot(111, projection=ccrs.PlateCarree(central_longitude=180))
clim.plot.contourf(ax=ax,levels=np.arange(0, 13.5, 1.5),extend='max',transform=ccrs.PlateCarree(),cbar_kwargs={'label': clim.units},cmap='viridis_r')
ax.coastlines()
plt.show()

5.实例
https://adyork.github.io/python-oceanography-lesson/22-defensive/index.html

import argparse #argparse模块是命令行选项、参数和子命令解析器;适用于代码需要频繁地修改参数的情况。import numpy as np
import matplotlib.pyplot as plt
import xarray as xr
import cartopy.crs as ccrs
import cmocean#定义转换单位函数
def convert_pr_units(darray):"""Convert kg m-2 s-1 to mm day-1.Args:darray (xarray.DataArray): Precipitation data"""darray.data = darray.data * 86400darray.attrs['units'] = 'mm/day'return darray#定义mask函数
def apply_mask(darray, sftlf_file, realm):"""Mask ocean or land using a sftlf (land surface fraction) file.Args:darray (xarray.DataArray): Data to masksftlf_file (str): Land surface fraction filerealm (str): Realm to mask"""dset = xr.open_dataset(sftlf_file)if realm == 'land':masked_darray = darray.where(dset['sftlf'].data < 50)else:masked_darray = darray.where(dset['sftlf'].data > 50)   return masked_darray#定义绘图软件
def create_plot(clim, model_name, season, gridlines=False, levels=None):"""Plot the precipitation climatology.Args:clim (xarray.DataArray): Precipitation climatology datamodel_name (str): Name of the climate modelseason (str): SeasonKwargs:gridlines (bool): Select whether to plot gridlineslevels (list): Tick marks on the colorbar    """if not levels:levels = np.arange(0, 13.5, 1.5)fig = plt.figure(figsize=[12,5])ax = fig.add_subplot(111, projection=ccrs.PlateCarree(central_longitude=180))clim.sel(season=season).plot.contourf(ax=ax,levels=levels,extend='max',transform=ccrs.PlateCarree(),cbar_kwargs={'label': clim.units},cmap=cmocean.cm.haline_r)ax.coastlines()if gridlines:plt.gca().gridlines()title = '%s precipitation climatology (%s)' %(model_name, season)plt.title(title)#定义main函数
def main(inargs):"""Run the program."""dset = xr.open_dataset(inargs.pr_file)clim = dset['pr'].groupby('time.season').mean('time', keep_attrs=True)clim = convert_pr_units(clim)if inargs.mask:sftlf_file, realm = inargs.maskclim = apply_mask(clim, sftlf_file, realm)create_plot(clim, dset.attrs['model_id'], inargs.season,gridlines=inargs.gridlines, levels=inargs.cbar_levels)plt.savefig(inargs.output_file, dpi=200)if __name__ == '__main__':description='Plot the precipitation climatology for a given season.'parser = argparse.ArgumentParser(description=description)parser.add_argument("pr_file", type=str, help="Precipitation data file")parser.add_argument("season", type=str, help="Season to plot")parser.add_argument("output_file", type=str, help="Output file name")parser.add_argument("--gridlines", action="store_true", default=False,help="Include gridlines on the plot")parser.add_argument("--cbar_levels", type=float, nargs='*', default=None,help='list of levels / tick marks to appear on the colorbar')parser.add_argument("--mask", type=str, nargs=2,metavar=('SFTLF_FILE', 'REALM'), default=None,help="""Provide sftlf file and realm to mask ('land' or 'ocean')""")args = parser.parse_args()main(args)

参考资料:
Introduction to netCDF:https://adyork.github.io/python-oceanography-lesson/17-Intro-NetCDF/index.html

https://adyork.github.io/python-oceanography-lesson/22-defensive/index.html

气象数据处理:https://zhuanlan.zhihu.com/p/129351199

python的netCDF4库读取.nc文件:https://blog.csdn.net/weixin_43718675/article/details/102158535

https://www.cnblogs.com/shoufengwei/p/9068379.html

GitHub:https://github.com/Unidata/netcdf4-python

NetCDF文件介绍相关推荐

  1. 微信小程序-01-项目组成文件介绍(入门篇)

    自古开篇先说两句,写这些笔记不是学习用的,主要是后续分享一些遇到的坑,碰到过什么样的问题,怎么去解决,如果你不是一个很耐心无看文章的人,建议去 网易云课堂找一些课程,跟着别人的脚步或许会更有动力,我的 ...

  2. Android下HelloWorld项目的R.java文件介绍

    R.java文件介绍 HelloWorld工程中的R.java文件 package com.android.hellworld; public final class R {     public s ...

  3. Vue.js-Day03-AM【超级详细:Node.js环境安装、安装淘宝镜像(Win、Mac)、安装Vue脚手架、初始化Vue项目-命令解释(Vscode、命令行窗口)、目录介绍、Vue文件介绍】

    Vue.js实训[基础理论(5天)+项目实战(5天)]博客汇总表[详细笔记] 目   录 1.Node.js-环境安装 1.1.Node.js-详细安装步骤 2.vue-cli脚手架安装 2.1.安装 ...

  4. Mxnet的.lst文件介绍

    Mxnet的.lst文件介绍 mxnet的lst文件有两种格式.一种是通过官方的im2rec.py脚本文件直接生成的,一种是用于目标检测用的数据格式. lst第一种格式 比较简单,是直接通过im2re ...

  5. python包的中 _init _.py文件介绍

    python包的中 _init _.py文件介绍 我们新建python包时常常会看到一个__init _.py文件. 作用介绍: ​ 一:这个文件是属于python包的,这个文件用作于标识python ...

  6. Netcdf 文件多属性,按照时间段导出代码示例

    由于个人即是java初学者,又是netcdf文件小白,所以为了实现最终效果,可以对一个初始nc文件进行筛选指定变量,并且可以设定时间区间,花得时间比想象的要多,最终实现了效果,代码示例如下: @Get ...

  7. wince中的BSP工程的相关文件介绍

    一.pbcxml分析         每一个BSP都有一个工程文件,比如MyBSP.pbcxml,里面描述了BSP的信息.下面就来介绍一下BSP的pbcxml文件. 文件的大致格式应该是这样的: &l ...

  8. 内存问题排查手段及相关文件介绍

    [-] 内存问题排查手段及相关文件介绍重点 1 procsysvmmin_free_kbytes 2 procsysvmdrop_caches 3 procsysrq-trigger 31对echo ...

  9. linux源码acl,Linux自主访问控制机制模块详细分析之posix_acl.c核心代码注释与acl.c文件介绍...

    原标题:Linux自主访问控制机制模块详细分析之posix_acl.c核心代码注释与acl.c文件介绍 2.4.4.6 核心代码注释 1 posix_acl_permission() int(stru ...

  10. IOS-项目中常见文件介绍

    一.项目文件结构示意图 二.文件介绍 1.products文件夹:主要用于mac电脑开发的可执行文件,ios开发用不到这个文件 2.frameworks文件夹主要用来放依赖的框架 3.test文件夹是 ...

最新文章

  1. 用flex进行网易云音乐界面构建和布局解析(2)
  2. APUE读书笔记-03文件输入输出(2)
  3. PHP Memcached + APC + 文件缓存封装
  4. 1.VMwareTools的安装,vmware启动的时候,虚拟机黑屏,解决办法
  5. modelandview使用过程_深入源码分析SpringMVC执行过程
  6. Mendix宣布推出低代码人工智能与机器学习功能
  7. 学习 TList 类的实现[6]
  8. Bailian1017 装箱问题【贪心】
  9. 每天学一点Scala之 take、takeRight、takeWhile 与 filter
  10. Win64下通过JNI(C++)创建jvm
  11. IDEA从零到精通(29)之chinese中文汉化插件
  12. Endnote 导出英文、中文(知网)参考文献进入Word
  13. ps怎么缩放图层大小_PS怎么快速修改图层大小|Adobe Photoshop CS6图层大小尺寸调整--系统之家...
  14. mysql外码参照_mysql外键约束的参照我是来充字数的
  15. 视频编辑转换 ViscomSoft SDK ActiveX 19.0
  16. 使用kmean进行图像分割 使用CRFs进行分割后处理
  17. Kubernetes 报错小结
  18. 用Python调用OpenAI API进行文本创作
  19. 25个例子学会Pandas Groupby 操作(附代码)
  20. IDBDatabase的数据库操作

热门文章

  1. oracle 表 队列,如何将复制队列表移出系统(SYSTEM)表空间
  2. 尼尔机械纪元 机器人博士_还记得章鱼博士吊打蜘蛛侠的炫酷机械臂吗?现实版已经研发出来了...
  3. 怎么高速旋转_洗衣机怎么选比较好,滚筒洗衣机和波轮洗衣机哪种更好?
  4. 正高职称 程序员_我985毕业33岁正高,职称评审哪里难?轻轻松松过职称
  5. 属性绑定v-bind指令
  6. mysql 秀出两个相关联的表中满足条件的内容_深入挖掘MySQL底层数据结构
  7. java mq5.15,ActiveMQ 5.15.x Release安装和配置--Linux篇
  8. 服务器win10系统开机慢,Win10系统开机慢怎么办 windows10开机慢的解决方法
  9. 论文笔记_S2D.61_2019-CVPR-DeepLiDAR:基于稀疏激光雷达数据和单张彩色图像的户外场景的表面法线引导的深度预测
  10. 机器学习笔记【一】- 线性回归(末):统计学推导以及局部加权线性回归算法实例