• 数据说明

NetCDF(network Common Data Form)网络通用数据格式是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作 NetCDF 数据集。

NetCDF全称为network Common Data Format,中文译法为“网络通用数据格式”;netcdf文件开始的目的是用于存储气象科学中的数据,现在已经成为许多数据采集软件的生成文件的格式。

•从数学上来说,netcdf存储的数据就是一个多自变量的单值函数。用公式来说就是f(x,y,z,…)=value;
•函数的自变量x,y,z等在netcdf中叫做维(dimension) 或坐标轴(axix),
•函数值value在netcdf中叫做变量(Variables).
一个Netcdf文件的结构包括以下对象:
•变量(Variables) :变量对应着真实的物理数据。
•维(dimension):一个维对应着函数中的某个自变量,或者说函数图象中的一个坐标轴,在线性代数中就是一个N维向量的一个分量。
•属性(Attribute) :属性对变量值和维的具体物理含义的注释或者说解释。
(原文链接:CSDN-专业IT技术社区-登录)

  • Python读取:使用netCDF4的Dataset方法读入文件
# -*- coding: utf-8 -*-
from netCDF4 import Dataset
import numpy as np
import sys
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.basemap import Basemap
from pandas import DataFrame
#数据读入
nc=Dataset('bj2016_18pm.nc')print(nc.variables.keys())#该文件是辐射资料,来自ECMWF网站

odict_keys(['longitude', 'latitude', 'time', 'ssrd', 'ssr', 'fdir', 'strd', 'str'])

#取出各variable的数据看看,数据格式为numpy数组
for var in nc.variables.keys():data=nc.variables[var][:].dataprint(var,data.shape)
#     np.save(var+'.npy',data)

longitude (1,)
latitude (2,)
time (4392,)
ssrd (4392, 2, 1)
ssr (4392, 2, 1)
fdir (4392, 2, 1)
strd (4392, 2, 1)
str (4392, 2, 1)

#time variable查看,时间戳变换
#看出是逐时数据
import datetime
time=nc.variables['time'][:].data
print(time[:10])
for i in range(3):tstamp=(time[i]-613608)*3600 #1900年1月1日零时距离1970年1月1日零时有613608个小时date= datetime.datetime.utcfromtimestamp(tstamp)print (date.strftime("%Y-%m-%d %H:%M:%S"))

[1016851 1016852 1016853 1016854 1016855 1016856 1016857 1016858 1016859
1016860]
2016-01-01 19:00:00
2016-01-01 20:00:00
2016-01-01 21:00:00

#查看longitude和 latitude这两个variable
#这个数据比较小,只包含两个格点,所以直接输出了
print(nc.variables['longitude'][:].data,nc.variables['latitude'][:].data)

[116.5] [39.875 39.75 ]

#查看辐射数据&数据切片
ssrd=nc.variables['ssrd'][:].data
#numpy数组切片,取数
ssrd_timeseq=ssrd[:,1,0]#取出某个格点所有时间的ssrd值
ssrd_timei=ssrd[0,:,:]#取出某个时间点所有格点的ssrd值

  • Python作图:使用matplotlib和Basemap
nc=Dataset('sfc_201803_2mt.nc')#数据来自ECMWF,为2018年3月份的全球温度的格点数据
print(nc.variables.keys())data=nc.variables['t2m'][:]
print(data.shape)
#d1=data[0,:,:].data##取出某个时刻的温度
#输出结果表明有744个时间序列,经度、纬度的取值有720、361个

odict_keys(['longitude', 'latitude', 'time', 't2m'])
(744, 361, 720)

#查看数据经纬度范围,经度0-360,其中0~180为西经0~180,180~360为东经0~180;纬度正为北纬,负为南纬
#格点分辨率为0.5度
long= nc.variables['longitude'][:]
lati= nc.variables['latitude'][:]
print(long[0],long[-1],lati[0],lati[-1])
print(long.shape,lati.shape)

0.0 359.5 90.0 -90.0
(720,) (361,)

#plt对某个时刻的全球温度作图。左半部分为西半球,右边是东半球
#选了某个时间点116作图
plt.contourf(long,lati,data[116,:,:]-273) #转为摄氏度
plt.colorbar()
<matplotlib.colorbar.Colorbar at 0x2b48e65ebe0>

  • 用Basemap画地图
#用Basemap画地图
def graph(lon,lat,target,levelT,colorT,title): b_map=Basemap(resolution='l', area_thresh=10000, projection='cyl', llcrnrlon=min(lon), urcrnrlon=max(lon), llcrnrlat=min(lat),urcrnrlat=max(lat))#llcrnrlon=0, urcrnrlon=360, llcrnrlat=-90,urcrnrlat=90print(type(target))fig=plt.figure(figsize=(9, 6))  #plt.figure(figsize=(12, 8))ax=fig.add_axes([0.1,0.1,0.8,0.8])lon,lat=np.meshgrid(lon,lat)x,y=b_map(lon,lat)print(x.shape,y.shape,target.shape)cs=b_map.contourf(x,y,target,levels=levelT,colors=colorT) #target[0,:,:]  b_map.colorbar(cs)b_map.drawcoastlines(linewidth=1)b_map.drawcountries(linewidth=1.5)plt.title(title,size=20)#plt.savefig('Rainf_0.png',dpi=300)plt.show()plt.close()

  • 截取中国范围来作图:
#首先查找中国四至范围对应的索引
#4,54为北纬4,54;73+180,133+180为东经73,133
print(np.argwhere(lati==4),np.argwhere(lati==54),
np.argwhere(long==73+180),np.argwhere(long==133+180))
#可以看到,中国范围 对应的纬度索引为72:172,,经度索引为506:626

[[172]] [[72]] [[506]] [[626]]

#对中国范围的温度作图,设定graph的参数
title='2m_temperature'
level_Tair= [-20,-10,0,5,10,15,20,25,30,1000] #[0,2.6,5,8,16,50,100,120,1000]  #[0,2.6,5,8,10,20,25,300,1000]   [0,210,225,240,255,260,300,305,310,1000]
colors = ['#FFFFFF', '#AAF0FF', '#C8DC32',  '#FFBE14', '#FF780A','#FF5A0A', '#F02800',  '#780A00', '#140A00']#注意这里要对经度做变换,原来东半球经度在180~360区间,现在减去180,转为0~180
long=nc.variables['longitude'][506:630]-180#lati= np.flip(nc.variables['latitude'][72:172])
lati= nc.variables['latitude'][62:152]  #[60:164]#datai=np.flipud(data[30,72:172,506:630])-274 #转换为摄氏度
datai=data[30,62:152,506:630]-274 #温度数据切片,选择第30个时间点的温度;将原温度转换为摄氏度graph(long,lati,datai,level_Tair,colors,title)

<class 'numpy.ma.core.MaskedArray'>
(90, 124) (90, 124) (90, 124)

  • 全球温度作图
#全球温度作图,设定graph的参数
title='2m_temperature'
level_Tair= [-20,-10,0,5,10,15,20,25,30,1000] #[0,2.6,5,8,16,50,100,120,1000]  #[0,2.6,5,8,10,20,25,300,1000]   [0,210,225,240,255,260,300,305,310,1000]
colors = ['#FFFFFF', '#AAF0FF', '#C8DC32',  '#FFBE14', '#FF780A','#FF5A0A', '#F02800',  '#780A00', '#140A00']#注意这里要对经度做变换,原来东半球经度在180~360区间,现在减去180,转为0~180
long=nc.variables['longitude'][:]-180#lati= np.flip(nc.variables['latitude'][72:172])
lati= nc.variables['latitude'][:]  #[60:164]#datai=np.flipud(data[30,72:172,506:630])-274 #转换为摄氏度
datai=data[30,:,:]-274 #将原温度转换为摄氏度graph(long,lati,datai,level_Tair,colors,title)

<class 'numpy.ma.core.MaskedArray'>
(361, 720) (361, 720) (361, 720)

arcgis批量处理nc文件_气象数据处理——nc文件相关推荐

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

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

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

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

  3. java批量删除日志文件_日志清理与文件批量删除

    工具下载地址:小工具 作为一个开发人员,一个一线的码农,我们在写程序的时候往往会给自己的程序添加很多的日志输出,这是一个好习惯,但是很多程序员却没有在程序里面增加日志定期清除的好习惯,从事IT领域十多 ...

  4. python怎么运行ipynb文件_如何运行.ipynb文件的图文讲解

    如何运行.ipynb文件的图文讲解 首先cmd下面输入: pip install jupyter notebook,安装慢的改下pip的源为国内的源 然后cmd中输入: jupyter noteboo ...

  5. c#如何通过ftp上传文件_定时上传文件到ftp,如何使用工具定时上传文件到ftp

    IIS7服务器管理工具-FTP客户端 作为FTP客户端,它支持批量管理FTP站点 具体功能: 1.自动重连:2.自动重传:3.定时任务(定时上传.定时下载):4.自定义传输模式.线程.编码:5.删除到 ...

  6. fs react 使用 保存文件_使用FS进行文件同步和备份

    FoldersSynchronizer是一款Mac平台上的文件同步和备份工具,它可以完全同步或备份文件,文件夹和磁盘,支持批量处理.FoldersSynchronizer允许您指定全局设置,例如FS是 ...

  7. cmd 将文件夹下文件剪切到另外一个文件_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇...

    本文是Java IO总结系列篇的第5篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  8. python解压文件_使用Python实现文件压缩和解压

    大家可能都熟悉.zip格式的文件.它可以把多个文件,压缩成一个文件.这在网络上传输时很有用,而且节省硬盘空间. 接下来,我们使用Python实现压缩和解压. 读取ZIP文件信息 要读取ZIP文件的内容 ...

  9. hosts文件_电脑修改hosts文件屏蔽网站方法

    说起hosts文件我想有很多电脑用户都不会感到陌生,因为利用它我们可以屏蔽一些网站,但是有很多电脑用户都不知道电脑如何修改hosts文件屏蔽网站,那么电脑如何修改hosts文件屏蔽网站呢?下面为大家带 ...

最新文章

  1. 你必须知道的.Net 读书笔记----new 关键字 和const readonly
  2. tftp的c语言实现,GitHub - ideawu/tftpx: TFTP server and client implementation in C
  3. ExtJS入门之一 类与继承
  4. vscode设置键盘快捷键
  5. oracle正确维护归档,转载:ORACLE正确删除归档日志的方法
  6. seo优化闲了吧----第一回目
  7. ---WebCam网络摄像头6 编译WebCam
  8. 使用document.ElementByTagName获取input元素并添加事件
  9. delphi 参数化sql
  10. iphone打字怎么换行_iPhone电池保养指南
  11. 织梦响应式教育机构官网网站模板
  12. CCF201812-2 小明放学(100分)【序列处理】
  13. avalon2 非必填项的表单验证规则
  14. Windows下Xelatex的使用
  15. java奖学金课设系统_java毕业设计_springboot框架的基于奖学金评定系统
  16. Matlab导入数据(一定有用!!)
  17. Cesium隐藏版权信息
  18. Java面试突击(6):分库分表
  19. python 处理异常_Python异常处理:
  20. R语言(The R Programming Language)

热门文章

  1. 关于.NET Core是否应该支持WCF Hosting的争论
  2. AspNetCore 中使用 InentityServer4(2)
  3. Centos7 amp;amp; Docker amp;amp; Jenkins amp;amp; ASP.NET Core
  4. .NET Core 2.0 特性介绍和使用指南
  5. 10月15日 2016中国开源年会期待您的参与
  6. 微软开源PowerShell并支持Linux
  7. [转]2020年排名前20的基于SpringBoot搭建的开源项目,帮你快速进行项目搭建!
  8. linux之systemctl设置自定义服务
  9. Android之build.gradle配置签名
  10. linux之使用md5sum命令比较两个文件是否一样