如何在python中计算相关性


量化两个变量之间关系的一种方法是使用Pearson 相关系数,它是两个变量之间线性关联的度量它始终采用 -1 和 1 之间的值,其中:

  • -1 表示两个变量之间完全负线性相关
  • 0 表示两个变量之间不存在线性相关
  • 1 表示两个变量之间存在完全正线性相关

相关系数离零越远,两个变量之间的相关性越强。

本教程介绍如何在 Python 中计算变量之间的相关性。

如何在Python中计算相关性

要在Python中计算两个变量之间的相关性,我们可以使用Numpy corrcoef()函数。

 import numpy as np

np.random.seed(100)

#create array of 50 random integers between 0 and 10
var1 = np.random.randint(0, 10, 50)

#create a positively correlated array with some random noise
var2 = var1 + np.random.normal(0, 10, 50)

#calculate the correlation between the two arrays
np.corrcoef(var1, var2)

[[ 1. 0.335]
[ 0.335 1. ]]

可以看出,这两个变量之间的相关系数为0.335 ,呈正相关。

默认情况下,该函数生成相关系数矩阵。如果我们只想返回两个变量之间的相关系数,我们可以使用以下语法:

 np.corrcoef(var1, var2)[0,1]

0.335

为了测试这种相关性是否具有统计显着性,我们可以使用 Scipy pearsonr()函数计算与 Pearson 相关系数相关的 p 值,该函数返回 Pearson 相关系数以及双尾 p 值。

 from scipy.stats.stats import pearsonr

pearsonr(var1, var2)

(0.335, 0.017398)

相关系数为0.335 ,双尾 p 值为0.017 。由于该 p 值小于 0.05,我们可以得出结论,两个变量之间存在统计上显着的相关性。

如果你想计算 Pandas DataFrame 中多个变量之间的相关性,你可以简单地使用.corr()函数。

 import pandas as pd

data = pd.DataFrame(np.random.randint(0, 10, size=(5, 3)), columns=['A', 'B', 'C'])
data

  ABC
0 8 0 9
1 4 0 7
2 9 6 8
3 1 8 1
4 8 0 8

#calculate correlation coefficients for all pairwise combinations
data.corr()

          ABC
A 1.000000 -0.775567 -0.493769
B -0.775567 1.000000 0.000000
C -0.493769 0.000000 1.000000

如果你只想计算DataFrame中两个特定变量之间的相关性,你可以指定变量:

 data['A'].corr(data['B'])

-0.775567

其他资源

以下教程解释了如何在 Python 中执行其他常见任务:

如何在 Python 中创建相关矩阵
如何在 Python 中计算斯皮尔曼等级相关性
如何用 Python 计算自相关

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注