BY郭曦
模拟实战任务描述:
1.CDO按照行政区矢量边界批量裁剪多个NC文件并做多模型平均
2.对上述多模型平均文件进行多年平均操作
CDO简介
Climate Data Operators (CDO) 是用来处理气候数据的软件,可以在linux环境下直接对数据文件进行处理,通过筛选,删除,修改等操作从原始数据文件中得到自己所需的资料格式,它提供了600多个常见的操作,能够对数据进行快速的操作和分析,能够很快速的处理nc、grid等常见的数据。常见的功能包括:
1、数据的提取合并(提取特定时间、空间、经纬度等等)
2、数据的简单运算(加减乘除、方差、均方差、和、最值、滑动均值、滑动方差、滑动最值、区域平均、区域方差、区域最值等等)
3、数据的统计运算(相关、线性回归、EOF、滤波、水平插值、垂直插值等等)
4、数据的转换(binary转nc、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.使用制作裁剪区域的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软件)
切换到待处理文件的路径下
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)
按照不同模型合并文件
cdo mergetime *.nc BF_pr_CMCC2015-2034.nc
多模型平均(不同模型的文件在一起)
cdo ensmean -selname,pr *.nc ofile
做多年日平均
cdo ydaymean ifile.nc ofile.nc
使用20年的气象数据完成实践
目前实现:栅格处理-栅格细分(0.25°转化为10‘)可以使用内插方法,这其实同样也是降尺度的方法之一
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HbpaCneu-1670829177163)(I:\code source\cdo学习成果\图片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)
仅科普,自学
如果处理特定的年份
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命令,处理过程如下:
其中"sfcWind"是一个匹配字符串,表示所有包含sfcWind这个字符串的文件都要合并,所以合并文件之前请务必确认哪些文件需要合并,否则就出错了。
CDO简介及常用语法 | ZSYXY Meteorological workshop (yxy-biubiubiu.github.io)基础教学,小白扫盲用
CDO学习2 CDO 入门教程Tutorial - chinagod - 博客园 (cnblogs.com)
很完整,包括链式操作,单位转换,缺省值处理等
其他请参考CDO官方文档