Pandas 多标签数据到热图

Pandas multi labeled data to heatmap

我有以下数据结构:

每一行代表一个注释。如果用户用标签 2 和 3 标记数据(参见第二行,也就是行索引 1),则数据集将为 1 1 0 0 0 0 0.

我想从中制作一个热图,以便查看哪些标签被密切注释。我认为生成的 df 应该是 7x7。(我试过 np.corrcoef,我试过旋转数据,可能只是我问的问题不对。)

感谢任何帮助,谢谢!

前5行数据:

df = [{'L3': 1},
 {'L2': 1, 'L3': 1},
 {'L7': 1},
 {'L1': 1, 'L4': 1},
 {'L1': 1, 'L2': 1}]
df = pd.DataFrame(df)

在用 0 替换 nan 之后使用 corr 否则你会得到一个填充有 nan:

的矩阵
corr = df.fillna(0).corr()
print(corr)
plt.colormesh(corr)
plt.show()

# Output
          L1        L2        L3        L4        L5        L6        L7
L1  1.000000  0.010929 -0.011707 -0.000469 -0.024428 -0.004918  0.033066
L2  0.010929  1.000000 -0.028859 -0.012876 -0.000667  0.009042 -0.017563
L3 -0.011707 -0.028859  1.000000 -0.033609  0.017446  0.036202  0.018763
L4 -0.000469 -0.012876 -0.033609  1.000000 -0.035363 -0.009639  0.038593
L5 -0.024428 -0.000667  0.017446 -0.035363  1.000000  0.007565 -0.045324
L6 -0.004918  0.009042  0.036202 -0.009639  0.007565  1.000000 -0.009466
L7  0.033066 -0.017563  0.018763  0.038593 -0.045324 -0.009466  1.000000

为了快速查看,您可以使用matplotlib but if you want to produce beautiful output, I recommend you to install and use seaborn

设置一个MRE

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

N = 2000

np.random.seed(2022)
df = pd.DataFrame(np.random.choice([np.NaN, 1], (N, 7), p=[.7, .3]),
                  columns=[f'L{i}' for i in range(1, 8)])