python - 如何计算两个样本之间的相关性
问题描述
我正在尝试计算 DataFrame 类型中两个样本(行)之间的相关性。我发现了一些计算特征(列)之间相关性的代码,最终,它将矩阵转换为排序列表,然后删除与自身的相关性。我想要样品也一样。
correlations_all = train_df[features].corr().abs().unstack().sort_values(kind="quicksort").reset_index()
correlations_all = correlations_all[correlations_all['level_0'] != correlations_all['level_1']]
output:
level_0 level_1 0
var_0 var_1 0.50
var_0 var_4 0.45
var_10 var_4 0.4
那么如何在python中做到这一点?
解决方案
总而言之,你的答案是
pd.concat([df,df2],axis=1).T.corr().drop(range(0,df.shape[1]),axis=1)[0:df.shape[1]+1]
详细解释:
创建一个df
df = pd.DataFrame(np.random.randint(0, high=100, size=(10, 5)),columns=list('abcde'))
df2 = pd.DataFrame(np.random.randint(0, high=100, size=(10, 5)),columns=list('fghjk'))
输出:
>>> df
a b c d e
0 47 68 60 8 27
1 52 36 50 0 46
2 21 53 55 43 0
3 32 63 42 37 38
4 91 95 28 81 55
5 68 14 16 5 27
6 51 2 73 8 49
7 2 83 54 77 61
8 44 89 87 93 42
9 75 50 78 31 80
>>> df2
f g h j k
0 40 62 68 2 24
1 55 9 64 37 39
2 18 5 11 14 79
3 36 14 39 11 66
4 63 95 87 49 81
5 29 20 76 32 90
6 19 48 13 0 81
7 79 55 32 8 17
8 93 3 33 7 53
9 85 30 50 14 2
corr()
有一个corrwith()
函数,第一个计算与另一个数据帧的相关性。
corr()
在您的情况下更有用。而是corr()
自己计算。因此,我们首先 concat 2 df。
输出:
>>>pd.concat([df,df2],axis=1)
a b c d e f g h j k
0 47 68 60 8 27 40 62 68 2 24
1 52 36 50 0 46 55 9 64 37 39
2 21 53 55 43 0 18 5 11 14 79
3 32 63 42 37 38 36 14 39 11 66
4 91 95 28 81 55 63 95 87 49 81
5 68 14 16 5 27 29 20 76 32 90
6 51 2 73 8 49 19 48 13 0 81
7 2 83 54 77 61 79 55 32 8 17
8 44 89 87 93 42 93 3 33 7 53
9 75 50 78 31 80 85 30 50 14 2
corr()
方法计算列之间的相关性。要在行之间进行计算,首先进行转置并删除 df 中您不想看到的部分。
pd.concat([df,df2],axis=1).T.corr().drop(range(0,df.shape[1]),axis=1)[0:df.shape[1]+1]
输出:
pd.concat([df,df2],axis=1).T.corr().drop(range(0,df.shape[1]),axis=1)[0:df.shape[1]]
5 6 7 8 9
0 0.154824 0.161153 -0.006838 -0.301014 -0.125625
1 -0.405248 -0.344024 0.413258 0.284815 0.367698
2 0.146049 -0.390763 0.165186 -0.358735 -0.245411
3 -0.018887 -0.084056 -0.239326 0.061516 0.488869
4 -0.338686 0.256093 0.455395 0.741626 -0.130878
提取单行
def compute_corr(df,i):
print(f"Correlation between {i}'th sample and other samples")
return df.T.corr().loc[i]
输出:
x= pd.concat([df,df2],axis=1).T.corr().drop(range(0,6),axis=1)
compute_corr(x,0)
Correlation between 0'th sample and other samples
0 1.000000
1 0.590134
2 -0.983648
3 -0.894758
4 -0.463191
Name: 0, dtype: float64
我希望这次代码是您的需要。
推荐阅读
- android - 从图库中选择图像
- azure - 将文件名从 Foreach 传递到数据流 - Azure 数据工厂
- javascript - 无法发送超过 100kb 的 base64 图像
- javascript - 是否有一个 css 选择器选择元素的属性等于其父属性?
- excel - Excel在包含单词中的文本的两张工作表之间查找和高度重复
- video-streaming - 基本点播视频流服务/应用程序所需的资源
- typescript - 打字稿和解构数组
- python - 正则表达式永远挂起
- ffmpeg - ffmpeg - 尝试转换视频文件但视频可播放时出现错误消息“处理输入时发现无效数据”
- aws-lambda - 如何解密terraform数据资源返回的ssm参数安全字符串值