为什么 np.corrcoef(x) 和 df.corr() 得出的结果不同?

9
为什么使用 np.corrcoef(x) 和 df.corr() 时,numpy相关系数矩阵和pandas相关系数矩阵会有不同呢?
x = np.array([[0, 2, 7], [1, 1, 9], [2, 0, 13]]).T
x_df = pd.DataFrame(x)
print("matrix:")
print(x)
print()
print("df:")
print(x_df)
print()

print("np correlation matrix: ")
print(np.corrcoef(x))
print()
print("pd correlation matrix: ")

print(x_df.corr())
print()

给我输出结果

matrix:
[[ 0  1  2]
 [ 2  1  0]
 [ 7  9 13]]

df:
   0  1   2
0  0  1   2
1  2  1   0
2  7  9  13

np correlation matrix: 
[[ 1.         -1.          0.98198051]
 [-1.          1.         -0.98198051]
 [ 0.98198051 -0.98198051  1.        ]]

pd correlation matrix: 
          0         1         2
0  1.000000  0.960769  0.911293
1  0.960769  1.000000  0.989743
2  0.911293  0.989743  1.000000

我猜它们是不同类型的相关系数?

5
np.corrcoef(x.T)==x_df.corr() 或者 print(np.corrcoef(x, rowvar=False)) 的意思是计算x的相关系数。如果x为二维数组,则np.corrcoef(x.T)和x_df.corr()将返回相同的结果,它们计算每一列之间的相关性。另外,使用print(np.corrcoef(x, rowvar=False))可以计算x所有元素之间的相关性。 - Alex Alex
1个回答

6

@AlexAlex 是正确的,你在相关系数中使用了不同的数字集合。

可以将其想象成一个 2x3 的矩阵。

x = np.array([[0, 2, 7], [1, 1, 9]])
np.corrcoef(yx)

提供

array([[1.        , 0.96076892],
       [0.96076892, 1.        ]])

x_df = pd.DataFrame(yx.T)
print(x_df)
x_df[0].corr(x_df[1])

提供

   0  1
0  0  1
1  2  1
2  7  9

0.9607689228305227

0.9607等数字与NumPy计算的输出相匹配。

如果按照你的计算方法进行比较,相当于比较行之间的相关性而不是列之间的相关性。您可以使用.T或参数rowvar=False来修复NumPy版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接