CMIP6气象数据基础处理方法(裁剪、合并、插值操作)

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

BY郭曦

模拟实战任务描述:

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

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

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

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.数据批量裁剪:单个处理解析

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 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)

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官方文档

你可能感兴趣的:(GIS碎碎念,cdo,python,linux,开发语言,bash)