pd.Series.cor的三大相关性系数

相关性系数;滤除缺失值;平均值等。

统计学中的三大相关性系数:pearson, spearman, kendall:
更加准确地描述变量之间的线性相关程度,可以通过pearson, spearman计算相关系数来进行相关分析。

  • pearson(连续数据&正态分布&线性关系)

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

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

  • 实例

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
  • spearman (“连续数据,正态分布,线性关系”中任意一条不满足则不使用pearson,而使用spearman)
    斯皮尔曼相关性系数,通常也叫斯皮尔曼秩相关系数。“秩”,可以理解成就是一种顺序或者排序,那么它就是根据原始数据的排序位置进行求解
    是一种无参数(与分布无关)的检验方法
  • 与Pearson区别
    Pearson相关系数是用原来的数值计算积差相关系数, 而Spearman是用原来数值的秩次计算积差相关系数。
  • 数据要求
    因为是定序,所以我们不用管X和Y这两个变量具体的值到底差了多少,只需要算一下它们每个值所处的排列位置的差值,就可以求出相关性系数了
  • 实例代码
import pandas as pd
import numpy as np
from numpy import nan as NaN

X1=pd.Series([1, 2, NaN, 3, 4, 5, 6])
Y1=pd.Series([0.3, 0.9, NaN,  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
  1. kendall (有序离散数据)
import pandas as pd
import numpy as np

x= pd.Series([1,0,0,1,1,1])
y= pd.Series([47,12,9,89,123,144)
r = x.corr(y,method="kendall") #0.73029

原文出处:
链接: link

你可能感兴趣的:(python)