@如何使用python处理nc数据制作Mike风场文件
NetCDF(network Common Data Form)网络通用数据格式是一种面向数组型并适于网络共享的数据的描述和编码标准。nc格式文件被广泛应用于气象、海洋、环境、地质等专业。目前可下载的大气再分析风场数据,如CCMP、ERA5、NCEP等均提供此格式的数据。本次我们以ERA5再分析数据为例演示如何通过python制作mike的dfs2风场文件。

1. ERA5风场数据得下载

ERA5数据下载的网站为https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-single-levels?tab=form,变量我们选择其中的10m u-component of wind10m v-component of windSurface pressure下载,下载时间、空间范围根据实际需求自定义。

2. python读取nc数据

首先导入需要用到的模块,其中前面3个为制作Mike文件相关的模块,Dataset为读取nc文件的模块,datetime为时间处理模块。

from mikeio import Dfs2
from mikeio.eum import ItemInfo, EUMUnit
from mikeio.eum import EUMType
import numpy as np
from netCDF4 import Dataset
import datetime as dt

读取文件代码如下:

file = Dataset('.\\2015uvp.nc')  #文件路径及名称
time =file['time'][:]   #读取时间信息
lon = file['longitude'][:]   #读取经度信息
lat = file['latitude'][:]   #读取纬度信息
u = file['u10'][:]   #读取东西风速u
v = file['v10'][:]   #读取南北风速v
p = file['sp'][:]   #读取表面压强

值得注意的是,根据现有文献,在海陆交界处的ERA5风速偏小,因此研究近海的朋友们可对风场数据适当方法,例如:

u=u*1.1   #将风速放大1.1倍
v=v*1.1

3. 处理时间信息

nc文件中的时间信息往往是自某一时刻以来的多少小时(或者天、月)的形式来表达,如下图所示,此时很难直观地感受具体时间。


因此使用daatetime模块的timedelta函数对时间进行处理:

time_dt=[]   #指定一个新的列表
tstart = dt.datetime(1900,1,1,0)   #nc文件的起始时刻
for i in time:time_dt.append(tstart+dt.timedelta(hours=int(i)))  #将nc文件中的时刻转换为正常的时间格式

处理后的时间time_dt如下图所示:

4. 制作dfs2文件

接下来就是最后的dfs2的制作过程,首先做一些准备工作:

dfsfilename = '2015uvp_for_fm.dfs2'   #给定文件名#设置dfs2文件左下角的坐标原点,在ERA5文件中,经度排列方式为从东向西,纬度排列方式为从北向南,#因此原点的经度为lon的第1个点,原点的纬度为lat的最后一个点
x0=lon[0]
y0=lat[-1]
coordinate = ['LONG/LAT',x0,y0,0]   #设置原点
dx=0.25 #设置网格间距,ERA5默认网格间距均为0.25度
dy=0.25
time0 = time_dt[0]   #设置其实时间,用到了上一步的时间处理
delta_t = 3600   #设置时间间隔,ERA5数据时间间隔为1h,3600s

制作dfs2:

#创建变量, EUMType.Wind_Velocity说明变量类型为风速, EUMUnit.meter_per_sec说明变量单位为m/s
items = [ItemInfo("u", EUMType.Wind_Velocity, EUMUnit.meter_per_sec),ItemInfo("v", EUMType.Wind_Velocity, EUMUnit.meter_per_sec),ItemInfo("p", EUMType.Pressure, EUMUnit.pascal)]
d = [u,v,p]   #将要输出至dfs2的数组打包
dfs = Dfs2()   #实例化一个dfs变量
dfs.write(filename=dfsfilename,data=d,start_time=time0,dt=delta_t,items=items,coordinate=coordinate,dx=dx,dy=dy) #输出变量

最后让我们来看一下制作好的dfs2文件:

并与nc文件的数据进行一下比较:

显然,dfs2文件的数据是合理的,可以应用于Mike21、Mike3的水动力模块、谱波模块,其中,水动力模块需要u、v、p三个变量,谱波模块只需要u、v两个变量。

如何使用python处理nc数据制作Mike风场文件--以ERA5数据为例相关推荐

  1. python气象数据可视化学习记录1——基于ERA5数据画风场和海平面气压填色叠加图

    python气象数据可视化学习记录1--基于ERA5数据画风场和海平面气压填色叠加图 1. 写在前面 2. 图片效果 3. 逐步代码解析 3.1导入库 3.2 读取NC格式数据 3.3 对数据进行加工 ...

  2. python print(len(pi_string))_Python如何从文件中读取数据

    从文件中读取数据 1. 读取整个文件 要读取文件,首先来创建一个文件: 然后打开并读取这个文件,再将其内容显示到屏幕上:file_reader.py with open('pi_digits.txt' ...

  3. abaqus python 读取文件_通过Python脚本从Abaqus中的excel文件导入幅度数据

    我在从excel文件导入幅度数据时在Abaqus中创建了以下宏.然后尝试运行此脚本以从同一个excel文件创建另一个幅度但不幸的是,我有以下错误.在这方面有人可以帮助我吗? 脚本: # Do not ...

  4. 大数据_MapperReduce_从CSV文件中读取数据到Hbase_测试---Hbase工作笔记0022

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们继续看,这里我们写完以后,一会咱们去测试一下. 可以看到上一节我们已经写了,从csv文件中 ...

  5. 数据存储在.csv文件乱码,数据写入才一部分就报错'gbk' codec can't encode character '\xee' in position 45: illegal multibyte

    使用python爬虫爬取规则数据后转化成来List格式,将其存储在.csv 文件中 使用Python写文件的时候,或者将网络数据流写入到本地文件的时候,大部分情况下会遇到:UnicodeEncodeE ...

  6. 使用Matlab对PIV数据中的dat文件进行读取数据并求平均值

    该方法是借鉴 争渡.争渡博主的文章,在他的文章上略微改动,进行求解. Matlab新手对PIV数据的大量dat文件中的某一列进行平均值计算,该方法可以对整个文件夹内的dat文件进行求平均值,对于文件名 ...

  7. POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表

    POI 简介: POI是Apache软件基金会用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能. ...

  8. python有什么库可以 从fig文件中读取数据_Python之matplotlib库学习:实现数据可视化...

    1. 安装和文档 pip install matplotlib 为了方便显示图像,还使用了ipython qtconsole方便显示.具体怎么弄网上搜一下就很多教程了. pyplot模块是提供操作ma ...

  9. 用python在csv追加数据_Python将一个CSV文件里的数据追加到另一个CSV文件

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  10. 大数据_MapperReduce_从CSV文件中读取数据到Hbase_自己动手实现Mapper和Reducer---Hbase工作笔记0021

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们先来复习一下,上一节说的,这个数据迁移,我们把 hbase中一个表的数据,迁移到另一个表中 ...

最新文章

  1. Delphi XE5 常用功具与下载
  2. 网易=4 ×(新浪 + 搜狐)
  3. java类型转换_Java类型转换
  4. 基于深度学习的图像风格转换
  5. 多表查询,自连接,子查询
  6. 【实践】强化学习在招聘推荐冷启动优化中的应用实践
  7. Python之 while循环
  8. vue对象深拷贝_JS 对象的深拷贝和浅拷贝
  9. Motion 5 for Mac(视频后期特效处理软件)
  10. 筛选DataTable数据的方法
  11. ZOJ 3077 Move to Baggage Office
  12. 威联通如何备份文件服务器上,威联通NAS提供最佳的备份解决方案
  13. dota2地区服务器延迟,DOTA2 TI8预选赛:南美服务器爆炸比赛延迟
  14. Android AVD 存放路径修改
  15. 轻量级纯CSS框架,11款最轻量级的CSS框架
  16. 【JZOJ5773】简单数学题【数论,数学】
  17. limits.conf文件_Limits.conf文件限制用户,在Linux中通过示例进行处理
  18. win7系统盘瘦身四大招:
  19. pycharm中的红色小闪电
  20. “大数据应用场景”之隔壁老王(连载四)

热门文章

  1. error:This Android SDK requires Andr...ate ADT to the latest version.
  2. 华为鸿蒙机顶盒,华为暗中放弃电视盒子业务,上百万的老用户该怎么办?
  3. 网络安全2:各种经典渗透方式合集
  4. 【过关斩将】如何制作高水平简历-原则篇
  5. 计算机社团个人简介怎么写,社团个人简历怎么写
  6. 敏感词过滤算法的实现
  7. Sqlserver2008数据库可疑文件
  8. 解决求平均值出现加和导致的溢出问题
  9. php strom 快捷键,PHPStorm常用快捷键总结
  10. 实操调试成功 基于NI-VISA的USBTMC接口程控仪器连接