numpy的COV函数,究竟是什么计算

Python018

numpy的COV函数,究竟是什么计算,第1张

cov函数计算的是协方差。

如果输入参数为两个随机变量,则计算二者之间的协方差。

如果输入参数为随机变量组成的矩阵并指定表示随机变量的维度,返回值是随机变量的协方差矩阵。

有些Python小白对numpy中的常见函数不太了解,今天小编就整理出来分享给大家。

Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。

数组常用函数

1.where()按条件返回数组的索引值

2.take(a,index)从数组a中按照索引index取值

3.linspace(a,b,N)返回一个在(a,b)范围内均匀分布的数组,元素个数为N个

4.a.fill()将数组的所有元素以指定的值填充

5.diff(a)返回数组a相邻元素的差值构成的数组

6.sign(a)返回数组a的每个元素的正负符号

7.piecewise(a,[condlist],[funclist])数组a根据布尔型条件condlist返回对应元素结果

8.a.argmax(),a.argmin()返回a最大、最小元素的索引

改变数组维度

a.ravel(),a.flatten():将数组a展平成一维数组

a.shape=(m,n),a.reshape(m,n):将数组a转换成m*n维数组

a.transpose,a.T转置数组a

数组组合

1.hstack((a,b)),concatenate((a,b),axis=1)将数组a,b沿水平方向组合

2.vstack((a,b)),concatenate((a,b),axis=0)将数组a,b沿竖直方向组合

3.row_stack((a,b))将数组a,b按行方向组合

4.column_stack((a,b))将数组a,b按列方向组合

数组分割

1.split(a,n,axis=0),vsplit(a,n)将数组a沿垂直方向分割成n个数组

2.split(a,n,axis=1),hsplit(a,n)将数组a沿水平方向分割成n个数组

数组修剪和压缩

1.a.clip(m,n)设置数组a的范围为(m,n),数组中大于n的元素设定为n,小于m的元素设定为m

2.a.compress()返回根据给定条件筛选后的数组

数组属性

1.a.dtype数组a的数据类型

2.a.shape数组a的维度

3.a.ndim数组a的维数

4.a.size数组a所含元素的总个数

5.a.itemsize数组a的元素在内存中所占的字节数

6.a.nbytes整个数组a所占的内存空间7.a.astype(int)转换a数组的类型为int型

数组计算

1.average(a,weights=v)对数组a以权重v进行加权平均

2.mean(a),max(a),min(a),middle(a),var(a),std(a)数组a的均值、最大值、最小值、中位数、方差、标准差

3.a.prod()数组a的所有元素的乘积

4.a.cumprod()数组a的元素的累积乘积

5.cov(a,b),corrcoef(a,b)数组a和b的协方差、相关系数

6.a.diagonal()查看矩阵a对角线上的元素7.a.trace()计算矩阵a的迹,即对角线元素之和

以上就是numpy中的常见函数。更多Python学习推荐:PyThon学习网教学中心。

1. person correlation coefficient(皮尔森相关性系数)

皮尔逊相关系数通常用r或ρ表示,度量两变量X和Y之间相互关系(线性相关)

(1)公式

皮尔森相关性系数的值等于它们之间的协方差cov(X,Y)除以它们各自标准差的乘积(σX, σY)。

(2)数据要求

a.正态分布

它是协方差与标准差的比值,并且在求皮尔森相关性系数以后,通常还会用t检验之类的方法来进行皮尔森相关性系数检验,而t检验是基于数据呈正态分布的假设的。

b.实验数据之间的差距不能太大

比如:研究人跑步的速度与心脏跳动的相关性,如果人突发心脏病,心跳为0(或者过快与过慢),那这时候我们会测到一个偏离正常值的心跳,如果我们把这个值也放进去进行相关性分析,它的存在会大大干扰计算的结果的。

(3)实例代码

import pandas as pd

import numpy as np

#原始数据

X1=pd.Series([1, 2, 3, 4, 5, 6])

Y1=pd.Series([0.3, 0.9, 2.7, 2, 3.5, 5])

X1.mean() #平均值# 3.5

Y1.mean() #2.4

X1.var() #方差#3.5

Y1.var() #2.9760000000000004

X1.std() #标准差不能为0# 1.8708286933869707

Y1.std() #标准差不能为0#1.725108692227826

X1.cov(Y1) #协方差#3.0600000000000005

X1.corr(Y1,method="pearson") #皮尔森相关性系数 #0.948136664010285

X1.cov(Y1)/(X1.std()*Y1.std()) #皮尔森相关性系数 # 0.948136664010285

2. spearman correlation coefficient(斯皮尔曼相关性系数)

斯皮尔曼相关性系数,通常也叫斯皮尔曼秩相关系数。“秩”,可以理解成就是一种顺序或者排序,那么它就是根据原始数据的排序位置进行求解

(1)公式

首先对两个变量(X, Y)的数据进行排序,然后记下排序以后的位置(X’, Y’),(X’, Y’)的值就称为秩次,秩次的差值就是上面公式中的di,n就是变量中数据的个数,最后带入公式就可求解结果。

(2)数据要求

因为是定序,所以我们不用管X和Y这两个变量具体的值到底差了多少,只需要算一下它们每个值所处的排列位置的差值,就可以求出相关性系数了

(3)实例代码

import pandas as pd

import numpy as np

#原始数据

X1=pd.Series([1, 2, 3, 4, 5, 6])

Y1=pd.Series([0.3, 0.9, 2.7, 2, 3.5, 5])

#处理数据删除Nan

x1=X1.dropna()

y1=Y1.dropna()

n=x1.count()

x1.index=np.arange(n)

y1.index=np.arange(n)

#分部计算

d=(x1.sort_values().index-y1.sort_values().index)**2

dd=d.to_series().sum()

p=1-n*dd/(n*(n**2-1))

#s.corr()函数计算

r=x1.corr(y1,method='spearman')

print(r,p) #0.942857142857143 0.9428571428571428

3. kendall correlation coefficient(肯德尔相关性系数)

肯德尔相关性系数,又称肯德尔秩相关系数,它也是一种秩相关系数,不过它所计算的对象是分类变量。

分类变量可以理解成有类别的变量,可以分为:

(1) 无序的,比如性别(男、女)、血型(A、B、O、AB);

(2) 有序的,比如肥胖等级(重度肥胖,中度肥胖、轻度肥胖、不肥胖)。

通常需要求相关性系数的都是有序分类变量。

(1)公式

R=(P-(n*(n-1)/2-P))/(n*(n-1)/2)=(4P/(n*(n-1)))-1

注:设有n个统计对象,每个对象有两个属性。将所有统计对象按属性1取值排列,不失一般性,设此时属性2取值的排列是乱序的。设P为两个属性值排列大小关系一致的统计对象对数

(2)数据要求

类别数据或者可以分类的数据

(3)实例代码

import pandas as pd

import numpy as np

#原始数据

x= pd.Series([3,1,2,2,1,3])

y= pd.Series([1,2,3,2,1,1])

r = x.corr(y,method="kendall") #-0.2611165