假设我有一个这样的数据框:
df['A'] = 1 or 0
df['B'] = 1 or 0
df['C'] = 1 or 0
我想像这样在 X 轴和 Y 轴上生成具有相同标签的特征之间的重叠图
A 1 .4 .2 .1
B .1 1 .3 .4
C .4 .2 1 .5
D .1 .3 .7 1
A B C D
显然,对角线将为 100%。对于 A B 和 B A,这些数字会有所不同,因为分母是那些有 A 的人,有多少人有 B 有多少人有 B 有多少人有 A.
我想我知道如何在视觉上制作这个,但不确定如何通过计算实际创建系列。
这是矩阵乘法,然后除以列的总和:
# sample data
np.random.seed(1)
df = pd.DataFrame(np.random.randint(0,2, (10,4)), columns=list('ABCD'))
df.T.dot(df).div(df.sum())
输入:
A B C D
0 1 1 0 0
1 1 1 1 1
2 1 0 0 1
3 0 1 1 0
4 0 1 0 0
5 0 1 0 0
6 1 0 0 0
7 1 0 0 0
8 1 1 1 1
9 1 0 0 0
输出:
A B C D
A 1.000000 0.500000 0.666667 1.000000
B 0.428571 1.000000 1.000000 0.666667
C 0.285714 0.500000 1.000000 0.666667
D 0.428571 0.333333 0.666667 1.000000