Python气象数据处理与绘图(2):常用数据计算方法

对于气象绘图来讲,第一步是对数据的处理,通过各类公式,或者统计方法将原始数据处理为目标数据。
按照气象统计课程的内容,我给出了一些常用到的统计方法的对应函数:

import numpy as np
平均值

在计算气候态,区域平均时均要使用到求均值函数,对应NCL中的dim_average函数,在python中通常使用np.mean()函数
numpy.mean(a, axis, dtype)
假设a为[time,lat,lon]的数据,那么

·axis 不设置值,对 timelatlon 个值求均值,返回一个数
·axis = 0:压缩时间维,对每一个经纬点求均值,返回 [lat, lon] 数组(如求一个场的N年气候态)
·axis =1,2 :压经度纬度,对每个时间求平均值,返回 [time] 矩阵(如求某时间序列,或指数)

需要特别注意的是,气象数据中常有缺测,在NCL中,使用求均值函数会自动略过,而在python中,当任意一数与缺测(np.nan)计算的结果均为np.nan,比如求[1,2,3,4,np.nan]的平均值,结果为np.nan
因此,当数据存在缺测数据时,通常使用np.nanmean()函数,用法同上,此时[1,2,3,4,np.nan]的平均值为(1+2+3+4)/4 = 2.5
同样的,求某数组最大最小值时也有np.nanmax(), np.nanmin()函数来补充np.max(), np.min()的不足。
其他很多np的计算函数也可以通过在前边加‘nan’来使用。
另外,

a[np.isnan(a)] = 0

也可以直接将a中缺失值全部填充为0。

标准差

np.std(a, axis, dtype)
用法同np.mean()

标准化

在NCL中有直接求数据标准化的函数dim_standardize()

我目前并未找到python中可以直接求数据标准化的函数(sklearn库中有标准化,但感觉不如公式直接计算方便)。根据公式,

x = (x - np.mean(x)) / np.std(x)

其实也就是一行的事,根据需要指定维度即可。

相关系数

皮尔逊相关系数:


相关可以说是气象科研中最常用的方法之一了,numpy函数中的np.corrcoef(x, y)就可以实现相关计算。但是在这里我推荐scipy.stats中的函数来计算相关系数:

from scipy.stats import pearsonr
r,p = pearsonr(x, y)

这个函数缺点和有点都很明显,优点是可以直接返回相关系数R及其P值,这避免了我们进一步计算置信度。而缺点则是该函数只支持两个一维数组的计算,也就是说当我们需要计算一个场和一个序列的相关时,我们需要循环来实现。

r = np.zeros((a.shape[1],a.shape[2]))
p = np.zeros((a.shape[1],a.shape[2]))
for i in range(sic.shape[1]):
    for j in range(sic.shape[2]):
            r[i,j], p[i,j] = pearsonr(b , a[:,i,j])

其中a[time,lat,lon],b[time]

线性回归系数

(NCL中为regcoef()函数)
同样推荐Scipy库中的stats.linregress(x,y)函数:

slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)

slop: 回归斜率
intercept:回归截距
r_value: 相关系数
p_value: P值
std_err: 估计标准误差
直接可以输出P值,同样省去了做置信度检验的过程,遗憾的是仍需同相关系数一样循环计算。

https://www.jianshu.com/p/be28d2073436

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论