Pandaspython学习工作专题

Python数据处理从零开始----第三章(pandas)⑥相关

2018-12-25  本文已影响207人  柳叶刀与小鼠标

目录

第三章(pandas)

Python数据处理从零开始----第三章(pandas)①删除列
Python数据处理从零开始----第三章(pandas)②处理缺失数据
Python数据处理从零开始----第三章(pandas)③数据标准化(1)
Python数据处理从零开始----第三章(pandas)④数据合并和处理重复值
Python数据处理从零开始----第三章(pandas)⑤pandas与R
Python数据处理从零开始----第三章(pandas)⑥相关性分析

===============================================
相关性是两个变量之间关联的度量。当两个变量都有正太分布时,很容易计算和解释。而当我们不知道变量的分布时,我们必须使用非参数的秩相关(Rank Correlation,或称为等级相关)方法。

秩相关

相关性是指两个变量的观测值之间的关联。变量可能有正相关,即当一个变量的值增加时,另一个变量的值也会增加。也可能有负相关,意味着随着一个变量的值增加,其他变量的值减小。变量也可能是中立的,也就是说变量不相关。相关性的量化通常为值-1到1之间的度量,即完全负相关和完全正相关。计算出的相关结果被称为“ 相关系数”。然后可以解释该相关系数以描述度量。

可以使用诸如Pearson相关这样的标准方法来计算每个具有正太分布的两个变量之间的相关性。而秩相关是指使用变量之间序数的关联(而不是特定值)来量化变量之间的关联的方法。有序数据是具有标签值并具有顺序或秩相关的数据;例如:’ 低 ‘,’ 中 ‘和’ 高 ‘。

可以为实值变量计算秩相关。这是通过首先将每个变量的值转换为等级数据来完成的。值在这里被排序并指定整数排名值。然后可以计算秩相关系数以量化两个排序变量之间的关联。

由于没有假设值的分布,所以秩相关方法被称为自由分布相关(distribution-free correlation)或非参数相关(nonparametric correlation)。有趣的是,秩相关的度量通常被用作其他统计假设检验的基础,例如确定两个样本是否可能来自相同(或不同)的群体分布。

在接下来的部分中,我们将仔细研究两种更常见的秩相关方法:Spearman和Kendall。

测试数据集

在我们演示秩相关方法之前,我们必须首先定义一个测试问题。这一次使用的是diamond数据集。下面是这个数据集的属性介绍

carat : ”Carat weight of the diamond
cutDescribe : cut quality of the diamond. Quality in increasing order Fair, Good, Very Good, Premium, Ideal
color :Color of the diamond, with D being the best and J the worst
clarity :How obvious inclusions are within the diamond:(in order from best to worst, FL = flawless, I3= level 3 inclusions) FL,IF, VVS1, VVS2, VS1, VS2, SI1, SI2, I1, I2, I3
depth :depth % :The height of a diamond, measured from the culet to the table, divided by its average girdle diameter  
table :table%: The width of the diamond's table expressed as a percentage of its average diameter
price :the price of the diamond
x :length mm
y :width mm
z :depth mm
# -*- coding: utf-8 -*-
"""
Created on Tue Dec 25 20:44:45 2018

@author: czh
"""

%reset -f
%clear
# In[*]
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
import lifelines as ll
from IPython.display import HTML
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.plotly as py
import plotly.tools as tls   
from plotly.graph_objs import *
import os
from scipy import stats
os.chdir("D:\\Rwork\\third\\Fig2")

# In[*]
data =pd.read_csv('https://vincentarelbundock.github.io/Rdatasets/csv/ggplot2/diamonds.csv',index_col=0)

cor_matrix = data.corr()
# In[*]
data.corr()    
#可以直接给出数据框的相关系数矩阵
data.corr()['price']  
#给出'price'变量与其他变量之间的相关系数
data['price'].corr(data["x"])    
#计算'price'与"x"之间的相关系数
data.corr(method='pearson')                             
data.corr(method='pearson')['price']                    
data['price'].corr(method='pearson',data["x"])  
method也可以指定spearman法和kendall法计算相关系数。

Spearman秩相关

Spearman秩相关以Charles Spearman命名。它也被称为Spearman相关系数,通常用小写希腊字母rho (p)表示。因此,它也被称为Spearman’s rho。这个统计方法量化了等级变量与单调函数相关联的程度,即递增或递减的关系。作为统计假设检验,该方法假设样本是不相关的。

Spearman等级顺序相关是一种旨在度量序数测量尺度上两个变量之间关系的统计过程。

Spearman秩相关使用秩值而不是实际值来计算Pearson相关。Pearson相关性由两个变量中每个变量的方差或分布的标准化的协方差计算。Spearman的秩相关可以在Python中使用SciPy函数spearmanr()计算。该函数需要两个实值样本作为参数,并返回介于-1和1之间的相关系数以及用于解释系数意义的p值。我们可以在测试数据集上证明Spearman秩相关。我们知道数据集中的变量之间存在很强的关联,我们希望Spearman能够找到这种关联。

from numpy.random import rand
from numpy.random import seed
from scipy.stats import spearmanr
# seed random number generator
seed(1)
# prepare data
data1 = data['x']
data2 = data['price']
# calculate spearman's correlation
coef, p = spearmanr(data1, data2)
print('Spearmans correlation coefficient: %.3f' % coef)
# interpret the significance
alpha = 0.05
if p > alpha:
    print('Samples are uncorrelated (fail to reject H0) p=%.3f' % p)

else:
    print('Samples are correlated (reject H0) p=%.3f' % p)

Spearmans correlation coefficient: 0.963
Samples are correlated (reject H0) p=0.000

统计检验返回的值为0.9(强正相关)。p值接近于零,这意味着观察到数据给出的样本不相关的可能性极小(例如95%置信度),并且我们可以驳回样本不相关的零假设。

Kendall秩相关

Kendall秩相关以Maurice Kendall命名。它也被称为Kendall相关系数,通常用小写希腊字母tau(t)表示。所以,它也被称为Kendall’s tau。这种检验是计算两个样本之间匹配或一致排名的标准化分数。因此,也称为Kendall’s concordance test。在Python中,Kendall秩相关系数可以使用SciPy函数kendalltau()计算。它将两个数据样本作为参数,并返回相关系数和p值。作为统计假设检验,该方法假设(H0)两个样本之间没有关联。我们可以在测试数据集上演示计算结果,我们预计会报告强正相关。下面列出了完整的示例:

from numpy.random import rand
from numpy.random import seed
from scipy.stats import kendalltau
# seed random number generator
seed(1)
# prepare data
data1 = data['x']
data2 = data['price']
# calculate kendall's correlation
coef, p = kendalltau(data1, data2)
print('Kendall correlation coefficient: %.3f' % coef)
# interpret the significance
alpha = 0.05
if p > alpha:
    print('Samples are uncorrelated (fail to reject H0) p=%.3f' % p)
else:
    print('Samples are correlated (reject H0) p=%.3f' % p)
Kendall correlation coefficient: 0.831
Samples are correlated (reject H0) p=0.000

运行该示例,Kendall相关系数为 0.8,这是高度相关。与Spearman一样,p值接近零(打印为零),这意味着我们可以放心地驳回样本不相关的零假设。

最后面是经典的皮尔森相关分析

from numpy.random import rand
from numpy.random import seed
from scipy.stats import spearmanr
# seed random number generator
seed(1)

# prepare data
data1 = data['x']
data2 = data['price']
# calculate spearman's correlation
coef, p = spearmanr(data1, data2)
print('Spearmans correlation coefficient: %.3f' % coef)
# interpret the significance

alpha = 0.05

if p > alpha:
    print('Samples are uncorrelated (fail to reject H0) p=%.3f' % p)
else:
    print('Samples are correlated (reject H0) p=%.3f' % p)
Spearmans correlation coefficient: 0.963
Samples are correlated (reject H0) p=0.000
上一篇下一篇

猜你喜欢

热点阅读