前期cost733安装完成后,开始正式利用该软件和下载的数据开展天气分型。注意到使用NC数据分型前需要对数据进行处理(处理过程见后文),因此还需要安装一个名为CDO的软件,该软件全名是Climate Data Operator,即气候数据处理器,该软件可以对NC数据进行合并,修改,裁剪等操作,功能非常强大。安装方法有下载源码编译安装,但是我在编译安装的时候总是有各种报错,因此迫不得已选择了一条比较简单的安装方法,使用conda,命令如下:
conda create --prefix=/home/*****/**** -c conda-forge cdo python=3.9
其中*是你自己安装的目录,这里create是创建一个conda虚拟环境,--prefix是创建该环境的目录,-c conda-forge是conda安装时指定channel为conda-forge ,cdo即为想要安装的软件,同时由于在该虚拟环境下我还需要使用python3.9,因此同时安装了python3.9。安装完成后,激活该环境,即可进入cdo的虚拟环境,对NC数据进行操作。
说完上述安装准备的环节,开始进入正题,即如何使用处理NC数据使其能够达到cost733呢个够识别运行的标准,根据我短时间的分析并参考气象家园几位大神总结的经验,需要注意的点有以下几方面:
1.对于ERA5数据,其time 的unit是‘hours since 1900-01-01 00:00:00.0’,意思是说,NC数据中的时间参考的基准时间是这个时间,意思是比较容易理解的,但是最后这个.0是多余的,cost733软件不识别,会报错time units unsupported,那在这种情况下,就需要将所有NC数据中的.0去掉。我编写了一个简单脚本,后边有时间会附上。
完成上一步后,关于time unit unsupport的报错就解决了。
2.在cost733用户手册中,关于数据输入有相关描述,但是本人按照其描述进行操作的时候老会有各种各样的报错,可能是本人太菜了。最后试了一种方法成功了,就是把多个时间点的NC数据合并到一个NC数据中(比如说有2000-01-01 00:00:00 ,2000-01-03 03:00:00等等,这些数据的时间可以连续也可以不连续,没有关系)。使用命令
cdo -b F64 mergetime *.nc test.nc
在这里记得加上-b F64,看了某位大神的解释是说按照时间顺序进行NC数据的合并时会出现整数和浮点数的什么转换问题。
如果合并的NC文件中,时间序列是不连续的,则需要将其修改为连续的时间,比如说(2000-01-01 00:00:00 ,2000-01-02 00:00:00 ,2000-01-03 00:00:00,诸如此类,当然不修改为连续的会出现什么问题我也不知道,我是为了避免出问题就乖乖修改了)。
-------------------------------------------------------------------------------------------------------------------------------
自此,完成了数据的预处理,虽然看着挺简单,但是参考资料较少,本人还是摸索了5天左右的时间。现在开始使用cost733软件,利用SOM法进行天气分型。关于SOM法,中文名称叫做自组织映射,是机器学习的一类方法,具体的思想和方法大家可以参考一下相关文献,网上有很多,本人是气象学方向,看了半天也是一知半解,但是大概意思就是说这个方法对天气进行分型前,并不会加入主观的干预,算法会根据你要分型的变量进行无监督学习。使用命令也很简单
./cost733class -dat pth:data/test_sellat_lon.nc var:t sle:700 -met SOM -nrun 100 -ncl 16 -niter 10000 -cool 0.99 -cla ./data/t_700hpa.cla
上述命令的意思就是读取test_sellat_lon.nc文件,选取的变量是t,高度是700百帕,方法是SOM,跑100次,将天气分成16型,最后给出的分型文档是t_700hpa.cla。输入完成后如果看到类似这种的界面,那就表明开始进行计算分型了
待计算结束后,会显示计算完成的界面,此时进入***.cla的文档,查看每一天分成哪一型了,最后将每一型的天气提取出来求平均绘图即可。