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)])
我有以下数据结构:
每一行代表一个注释。如果用户用标签 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)])