2 如何用Python进行数据计算

Python011

2 如何用Python进行数据计算,第1张

numpy计算平均数 标准差 相关系数等基本知识

NumPy 是python 语言的一个第三方库,其支持大量高维度数组与矩阵运算。此外,NumPy 也针对数组运算提供大量的数学函数

#导入Numpy库,并命名为np

import numpy as np

#创建一维数组

a = np.array([1, 2, 3])

# NumPy可以很方便地创建连续数组,比如我使用arange或linspace函数进行创建:

b = np.arange(1,5,1) // 返回一个有终点和起点、固定步长的排列,如起点是1,终点是4,步长为1,即【1,2,3,4】,

c = np.linspace(1,9,5) 返回一个有终点和起点、元素个数的的排列,如起点是1,终点是9,元素个数为5,即【1,3,5,7,9】

#通过NumPy可以自由地创建等差数组,同时也可以进行加、减、乘、除、求n次方和取余数。

求和:np.sum(a)

求取平均值:np.mean(a)

求取中位数:np.median(a)

求取加权平均数:np.average(a)

求取方差:var() np.var(a)

求取最小值:np.amin(a)

求取最大值:np.amax(a)

将两个数相加:np.add(x1, x2)

将两个数相减:np.subtract(x1, x2)

将两个数相乘:np.multiply(x1, x2)

将两个数相除:np.divide(x1, x2)

立方:np.power(x1, x2)

除余:np.remainder(x1, x2)

相关系数计算:np.corrcoef(a1, a2) (a1、a2都是矩阵)

Python中将算式称为表达式。数学上算式是用数学语言、数学符号来表达某种关系、某种运算、某种性质的,同样的,在Python中,表达式也是用运算符将各种数据类型的数据连接起来。

数据的类型在前面已经介绍过了,下面介绍一些最常用到的运算符。

6.1算术运算

算术运算符是用于处理四则运算的运算符,常用的算术运算符如下表所示。

算术表达式就是用算术运算符将各种类型的数据连接起来,算术运算的规则和数学中一致。除了数学中用到的四则运算符“ 、-、*、/ ”外,要特别注意“取模(%)”、“幂(**)”、“整除(//)”的用法。

6.2给变量赋值

最常用的赋值运算符是“=”,“a=b”的意思就是将值b赋值给变量a。

Python中还一些带有运算功能的赋值方法,含义为“先计算,后赋值”如:

以下假设变量:a=10,b=20

“+=”,读作“加赋值”,如a+=b,相当于a=a+b, 则a被赋值为30;

“-=”,读作“减赋值”,如a-=b,相当于a=a-b, 则a被赋值为-10;

“*=”,读作“乘赋值”,如a*=b,相当于a=a*b, a被赋值为200;

“/=”,读作“除赋值”,如a/=b,相当于a=a/b, a被赋值为0.5;

“%=”,读作“取余数赋值”,如a%=b,相当于a=a%b, a被赋值为10;

“**=”,读作“幂赋值”,如a**=b,相当于a=a**b, a被赋值为100000000000000000000;

“//=”,读作“取整数赋值”,如a//=b,相当于a=a//b, a被赋值为0;

6.3关系运算

关系运算符,也叫比较运算符,用于比较两个变量或表达式运算结果之间的大小关系。关系表达式是用关系运算符将变量或表达式连接起来的表达式,其运算结果为一个布尔值,即True或False。

Python3.0的关系运算符有:“大于>”、“小于=”、“小于或等于<=”。

还有一个特殊的关系运算符“值1变量值2”,如:

>>>a=10

>>>b=20

>>>c=15

>>>print(a<b<c) p=""></b<c)>

False

>>>print(a<c<b) p=""></c<b)>

True

6.4逻辑运算

逻辑运算符包括“逻辑与and”、“逻辑或or”、“逻辑非not”,具体用法见下表。

以下假设变量 a 为 10, b为 20:

在上表中,变量a和变量b都是非0的数,被当做值为True的变量参与逻辑运算。

对于气象绘图来讲,第一步是对数据的处理,通过各类公式,或者统计方法将原始数据处理为目标数据。

按照气象统计课程的内容,我给出了一些常用到的统计方法的对应函数:

在计算气候态,区域平均时均要使用到求均值函数,对应NCL中的dim_average函数,在python中通常使用np.mean()函数

numpy.mean(a, axis, dtype)

假设a为[time,lat,lon]的数据,那么

需要特别注意的是,气象数据中常有缺测,在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中缺失值全部填充为0。

np.std(a, axis, dtype)

用法同np.mean()

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

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

皮尔逊相关系数:

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

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

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

(NCL中为regcoef()函数)

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

slop: 回归斜率

intercept:回归截距

r_value: 相关系数

p_value: P值

std_err: 估计标准误差

直接可以输出P值,同样省去了做置信度检验的过程,遗憾的是仍需同相关系数一样循环计算。