使用python执行变量关联

2024-06-28 15:18:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用python执行相关测试(相当于R中的corr.test(x,y)

我的输入是一个数据帧。如下所示:

df1:

  Column1  Column2   Column3   Column4 Column5 Column6
0    ab1       bc1   6.843147     NaN     5.12   NaN
1    ab2       ab5   NaN          5.6789  6.666  54.72
2    ab3       bc4   11.45        NaN     12.765 5.12 
3    ab4       ab5   328.880123   NaN     0.50  88.44
4    ab5       ab1   72.142790    55.89   NaN   18.12

如何对数据执行关联(第3列-第6列)

注意:原始数据中有50多列用于关联


Tags: 数据testnandf1column1corrcolumn2column4
1条回答
网友
1楼 · 发布于 2024-06-28 15:18:28

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.corr.html


或者同时做任何一对列(记住每列都是一个系列)。。。与

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.corr.html

例如,根据上述数据,列5和列6之间的相关性如下所示:

In [10]: df
Out[10]:
  Column1 Column2     Column3  Column4  Column5  Column6
0     ab1     bc1    6.843147      NaN    5.120      NaN
1     ab2     ab5         NaN   5.6789    6.666    54.72
2     ab3     bc4   11.450000      NaN   12.765     5.12
3     ab4     ab5  328.880123      NaN    0.500    88.44
4     ab5     ab1   72.142790  55.8900      NaN    18.12

In [11]: df.loc[:,'Column5'].corr(df.loc[:,'Column6'])
Out[11]: -0.9936504010065057

或在所有列中循环(不是最优雅的,但这很有效)…

In [12]: for c1 in df.columns[0:-1]:
    ...:   for c2 in df.loc[:,c1:].columns:
    ...:     if c2 != c1:
    ...:       print('Correlation',c1,c2,'=',df.loc[:,c1].corr(df.loc[:,c2]))
    ...:
...function_base.py:2551: RuntimeWarning: Degrees of freedom <= 0 for slice 
    c = cov(x, y, rowvar)
...function_base.py:2480: RuntimeWarning: divide by zero encountered in true_divide 
    c *= np.true_divide(1, fact)

Correlation Column3 Column4 = nan
Correlation Column3 Column5 = -0.779129
Correlation Column3 Column6 = 0.999368
Correlation Column4 Column5 = nan
Correlation Column4 Column6 = -1.000000
Correlation Column5 Column6 = -0.993650

对于整个相关矩阵:

In [36]: df
Out[36]:
  Column1 Column2     Column3  Column4  Column5  Column6
0     ab1     bc1    6.843147      NaN    5.120      NaN
1     ab2     ab5         NaN   5.6789    6.666    54.72
2     ab3     bc4   11.450000      NaN   12.765     5.12
3     ab4     ab5  328.880123      NaN    0.500    88.44
4     ab5     ab1   72.142790  55.8900      NaN    18.12

In [37]: df.corr()
Out[37]:
          Column3  Column4   Column5   Column6
Column3  1.000000      NaN -0.779129  0.999368
Column4       NaN      1.0       NaN -1.000000
Column5 -0.779129      NaN  1.000000 -0.993650
Column6  0.999368     -1.0 -0.993650  1.000000

请注意对于DataFrame.corr(),它给出了一个相关矩阵,任何两列的交集显示的相关性与使用Series.corr()在列之间循环时得到的相关性相同。因此DataFrame.corr()方法在代码方面更简单,因为您不必编写自己的循环

p.S.我刚刚意识到您也需要p值(不仅仅是相关系数),因为R函数cor.test()同时返回系数和显著性。我不知道如何处理熊猫。我翻了翻,发现this:在那页的一半处,它说,“熊猫没有计算p值的函数,所以最好使用SciPy来计算相关性,因为它会同时给出p值和相关系数”,然后展示了如何做到这一点

相关问题 更多 >