首页 > 解决方案 > python - 如何仅针对特定值在python中找到spearman的相关性?

问题描述

我有一个五列的数据矩阵

 0     1     2     3     4 

nan    34    23    34     11

43    34   123     4     44

45    12     4   nan     66

89    78    43   435     23

nan   89   nan   12     687

 6    232    34    4     nan

24    56    34   121     56

nan    9    nan   54     12

 24   nan    54    12    nan

 76    11   123    76     78

 43   nan    65    23     89

 68   233    34   nan     89

 65    53    nan    7     78

 34    65     12    8     12

 56    98     43    nan   43

我也有一个 fvector

fvector
23

67

23

nan

nan

87

323

nan

78

32

78

112

nan

56

nan

56

直到现在我才能够根据整列找到相关性

for i in datamatrix:
    coef,p=spearmanr(datamatrix[i],fvector)
    print(coef,p,"for column ",i)

我想实现两件事:

1)。我想找到 fvector 和 datamatrix 的每一列之间的 spearman 的相关性,但是如果两个变量之一或两个变量都是 nan ,那么我想删除特定对的相关性。例如。第 1 列中的第 4 个值是 78,fvector 中的第 4 个值是 nan,所以我想从相关过程中排除特定对(不是​​整列)。我不知道如何使用特定变量来查找相关性。

2)。如果 fvector 和 datamatrix 列中的 nan 值的总数 > 30%,则排除整列查找相关性。

任何资源或参考都会有所帮助

谢谢

标签: pythonpython-3.xpandasscipycorrelation

解决方案


1) 如果你设置nan_policy == "omit"了 Nan 将在计算中被忽略。见scipy.stats.spearmanr

2)您可以通过这种方式计算每列中 Nan 的百分比:(df[i].isna().sum()*100)/df.shape[0]

全部一起:

nan_fvectr = int(vector.isna().sum())
for i in df:
    if ((df[i].isna().sum()+nan_fvectr)*100)/(df.shape[0]*2) >= 30:
        continue
    coef,p=stats.spearmanr(df[i],vector, nan_policy="omit")
    print(coef,p,"for column ",i)

推荐阅读