2022-12-11 气象数据基础处理方法

BY郭曦

模拟实战任务描述:

1.CDO按照行政区矢量边界批量裁剪多个NC文件并做多模型平均

2.对上述模型平均文件进行多年平均操作

0 CDO环境配置:linux子系统+windows下CONDA环境

CDO简介

Climate Data Operators (CDO) 是用来处理气候数据软件可以linux环境直接数据文件进行处理通过筛选删除修改等操作从原始数据文件中得到自己所需的资料格式,它提供了600多个常见的操作,能够数据进行快速的操作和分析能够快速处理ncgrid常见数据常见功能包括:
1、数据提取合并(提取定时间、空间经纬度等等)
2、数据简单运算(加减乘除、方差、均方差、和、最值、滑动均值滑动方差、滑动最值、区域平均、区域方差、区域最值等等)
3、数据的统计运算(相关线性回归、EOF、滤波、水平插值垂直插值等等)
4、数据的转换(binarync、HDF转nc等等)
5、各种气候指数的运算(极端有关的指数等等)
有很多软件可以处理气象数据,常见的向Matlab、Python和NCL等,除此之外也有快速处理气象数据的软件如Cdo、NCO等。那么如果把Cdo传统气象软件NCL做对比,它有如下优缺点
优点:

数据处理速度极快
文件很小,基本上不占空间
缺点:
1.与NCL一样都是的基于linux系统才能操作
不能中途查看数据,而且是交互式命令,不利于查错【但是可以命令批量写在bash脚本里面然后执行】。
参考资料官网信息没有NCL丰富

原文链接https://blog.csdn.net/Blue_wjh/article/details/117338249

如何windows环境配置CDO,参考csdn和B站视频,此处不再赘述

(94条消息) 超详细Anaconda安装教程_极小白的博客-CSDN博客_anaconda安装教程

【教程】在Windows10系统上启用linux子系统,配置nc数据处理神器cdo并安装ncl_哔哩哔哩_bilibili

1.数据批量裁剪:单个处理解析

1.使用制作裁剪区域的NC文件

conda环境,首先下载GDAL包

conda install -c conda-forge gdal

然后制作裁剪区域的NC文件,分辨率为0.25*0.25,填充值为1

gdal_rasterize -of netCDF -burn 1 -tr 0.25 0.25 beifang.shp bfmask.nc

2.将裁剪区域和待裁剪文件对齐栅格

linux系统,乌班图环境,首先构建对齐目标栅格的TXT文件

cdo griddes tas.nc > targetgrid.txt

然后运用CDO进行对齐

cdo remapbil,targetgrid.txt infile outfile

3.运用CDO进行不规则裁剪裁剪到相应区域可以开始批处理

cdo ifthen maskout.nc input.nc output.nc
#这个裁剪不会改变区域大小,只是做了一个提取工作
cdo sellonlatbox,lon1,lon2,lat1,lat2 infile outfile

67,137,27,55(中国北方的外接矩形)如何获取?(通过GIS软件)

2.数据批量裁剪:批处理代码

切换到待处理文件的路径

cd /mnt/h/exampledata

只要做好remap_bf.nc(掩膜文件)就可以批量执行处理文件目录下所有文件。(cdo连锁命令)

for i in $(ls) ;do cdo sellonlatbox,67,137,27,55 -ifthen remap_bf.nc ${i} bf_${i} ;done

结果bf开头的文件

参考linux – 在具有多个netCDF文件的目录上同时执行shell和cdo操作 – IT工具网 (coder.work)

3 多模型平均

按照不同模型合并文件

cdo mergetime *.nc BF_pr_CMCC2015-2034.nc

多模型平均(不同模型的文件在一起)

cdo ensmean -selname,pr *.nc ofile

做多年日平均

cdo ydaymean ifile.nc ofile.nc

使用20年的气象数据完成实践

4 插值操作

目前实现栅格处理-栅格细分(0.25°转化为10‘)可以使用内插方法,这其实同样也是降尺度的方法之一

[外链图片转存失败,源站可能防盗链机制,建议图片保存下来直接上传(img-HbpaCneu-1670829177163)(I:code sourcecdo学习成果图片1)]

修改目标栅格,使用双线性内插

cdo griddes bf_avepr2014_2034.nc > targetgrid.txt

在此修改栅格大小

#
# gridID 1
#
gridtype  = lonlat
gridsize  = 196000
xsize     = 700
ysize     = 280
xname     = lon
xlongname = "longitude"
xunits    = "degrees_east"
yname     = lat
ylongname = "latitude"
yunits    = "degrees_north"
xfirst    = 67.125
xinc      = 0.10
yfirst    = 27.125
yinc      = 0.10
scanningMode = 64
cdo remapbil,targetgrid.txt bf_avepr2014_2034.nc bf_avepr2014_2034_010.nc

测试数据输出了5个G的数据结果,这还是数据量最小的降水数据。

可以使用其他算法插值。To interpolate your data from an existing horizontal field to a finer or coarse grid or another grid type CDO provides
a set of operators starting with remap.
Available grid interpolation types:

bilinear, bicubic, nearest neighbor, distance-weighted average, first order conservative second order conservative, 
and larget area fraction
(remapbil, remapbic, remapnn, remapdis, remapycon, remapcon, remapcon2, remaplaf)

5 高级玩法:bash编写

科普自学

如果处理特定的年份

for ((yr=1982; yr<=1985; yr++))  ##数据名带有年份,进行循环

## 写循环

do
    echo "merge $yr"    ## 可以写也可以不写,打印处理的年份命令行
    cdo mergetime  data.$yr*.nc  "/Users/data$yr.nc" ## 使用cdo命令进行合并,并保存指定路径

## 下面同理

	echo "remap $yr"
	cdo remapbil,r144x73 data$yr.nc "/Users/data_cdo_interp.2.5.$yr.nc"

done

原文链接https://blog.csdn.net/weixin_44237337/article/details/122483542

通配符

四个文件,分别为1850年1月至1900年12月,1901年1月至1950年12月,1951年1月至2000年12月,2001年1月至2014年12月。cdo对此提供了mergetime命令,处理过程如下

img

其中”sfcWind“是一个匹配字符串表示所有包含sfcWind这个字符串的文件都要合并,所以合并文件之前请务必确认哪些文件需要合并,否则就出错了。

【CDO常见操作参考网站

CDO简介及常用语法 | ZSYXY Meteorological workshop (yxy-biubiubiu.github.io)基础教学小白扫盲用

CDO学习2 CDO 入门教程Tutorial – chinagod – 博客园 (cnblogs.com)

完整,包括链式操作,单位转换,缺省值处理等

其他请参考CDO官方文档

原文地址:https://blog.csdn.net/qq_42671556/article/details/128287604

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_37390.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注