如何找到斯皮尔曼';在python中,仅针对特定值的关联?
我有一个五列的数据矩阵如何找到斯皮尔曼';在python中,仅针对特定值的关联?,python,python-3.x,pandas,scipy,correlation,Python,Python 3.x,Pandas,Scipy,Correlation,我有一个五列的数据矩阵 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
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%,则从查找相关性中排除整个列
任何资源或参考都会有所帮助
谢谢1)如果您设置了nan\u policy==“ommit”
则计算中将忽略nan。看
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)
1) 如果其中一对缺失,nan_策略是否会忽略排除这两对关联?2) 我想计算nan值的总和(datamatrix和fvector中的特定列)1是的,如果该对中的两个值之一缺失,则在计算中忽略该对。2) 检查更新的答案。在fvector中,缺少5个值。因此,我所做的是为df中的每列添加5到Nan的量。然后,将百分比计算为该和*100并除以df的长度*2。*2是因为我假设你想要列和向量中NaN的百分比。如果不是这样,只需删除If条件中的*2即可。