對于氣象繪圖來講一也,第一步是對數(shù)據(jù)的處理,通過各類公式喉脖,或者統(tǒng)計方法將原始數(shù)據(jù)處理為目標數(shù)據(jù)。
按照氣象統(tǒng)計課程的內(nèi)容树叽,我給出了一些常用到的統(tǒng)計方法的對應函數(shù):
import numpy as np
平均值
在計算氣候態(tài)舆蝴,區(qū)域平均時均要使用到求均值函數(shù),對應NCL中的dim_average函數(shù)题诵,在python中通常使用np.mean()函數(shù)
numpy.mean(a, axis, dtype)
假設a為[time,lat,lon]的數(shù)據(jù)洁仗,那么
·axis 不設置值,對 timelatlon 個值求均值性锭,返回一個數(shù)
·axis = 0:壓縮時間維赠潦,對每一個經(jīng)緯點求均值,返回 [lat, lon] 數(shù)組(如求一個場的N年氣候態(tài))
·axis =1,2 :壓經(jīng)度緯度草冈,對每個時間求平均值她奥,返回 [time] 矩陣(如求某時間序列,或指數(shù))
需要特別注意的是怎棱,氣象數(shù)據(jù)中常有缺測哩俭,在NCL中,使用求均值函數(shù)會自動略過拳恋,而在python中携茂,當任意一數(shù)與缺測(np.nan)計算的結果均為np.nan,比如求[1,2,3,4诅岩,np.nan]的平均值讳苦,結果為np.nan
因此,當數(shù)據(jù)存在缺測數(shù)據(jù)時吩谦,通常使用np.nanmean()函數(shù)鸳谜,用法同上,此時[1,2,3,4式廷,np.nan]的平均值為(1+2+3+4)/4 = 2.5
同樣的咐扭,求某數(shù)組最大最小值時也有np.nanmax(), np.nanmin()函數(shù)來補充np.max(), np.min()的不足。
其他很多np的計算函數(shù)也可以通過在前邊加‘nan’來使用滑废。
另外蝗肪,
a[np.isnan(a)] = 0
也可以直接將a中缺失值全部填充為0。
標準差
np.std(a, axis, dtype)
用法同np.mean()
標準化
在NCL中有直接求數(shù)據(jù)標準化的函數(shù)dim_standardize()
x = (x - np.mean(x)) / np.std(x)
其實也就是一行的事俺陋,根據(jù)需要指定維度即可豁延。
相關系數(shù)
皮爾遜相關系數(shù):
相關可以說是氣象科研中最常用的方法之一了昙篙,numpy函數(shù)中的np.corrcoef(x, y)就可以實現(xiàn)相關計算。但是在這里我推薦scipy.stats中的函數(shù)來計算相關系數(shù):
from scipy.stats import pearsonr
r,p = pearsonr(x, y)
這個函數(shù)缺點和有點都很明顯诱咏,優(yōu)點是可以直接返回相關系數(shù)R及其P值苔可,這避免了我們進一步計算置信度。而缺點則是該函數(shù)只支持兩個一維數(shù)組的計算袋狞,也就是說當我們需要計算一個場和一個序列的相關時焚辅,我們需要循環(huán)來實現(xiàn)。
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]
線性回歸系數(shù)
(NCL中為regcoef()函數(shù))
同樣推薦Scipy庫中的stats.linregress(x,y)函數(shù):
slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)
slop: 回歸斜率
intercept:回歸截距
r_value: 相關系數(shù)
p_value: P值
std_err: 估計標準誤差
直接可以輸出P值同蜻,同樣省去了做置信度檢驗的過程,遺憾的是仍需同相關系數(shù)一樣循環(huán)計算倔毙。