如何用Python统计类别共现并生成关联矩阵(是否为heat map?)
问题解答
嗨,我来帮你理清这两个问题并给出简洁的Python实现方案:
1. 关于矩阵类型的疑问
你提到的这个统计类别间同时为1次数的矩阵,叫做类别共现矩阵(co-occurrence matrix)。而热力图(heatmap)是将这种矩阵用颜色深浅来可视化的一种图表形式——简单说,共现矩阵是你要计算的目标数据,热力图是它的可视化展示方式,两者不能直接划等号,但你完全可以把这个共现矩阵绘制成热力图,直观观察类别间的关联强弱。
2. Python简便实现方法
最简洁的方式是利用矩阵乘法的特性:因为你的原始数据是二进制(0/1)矩阵,共现矩阵其实就是原始矩阵的转置矩阵与原矩阵的乘积——每一个位置的元素会自动计算对应两列同时为1的次数,完美匹配你的需求。
下面用pandas结合numpy来实现,步骤清晰且代码简洁:
步骤1:加载原始数据
先把你的原始数据转换成DataFrame:
import pandas as pd # 原始数据对应你给出的表格 data = { 'cat1': [0, 1, 0, 0], 'cat2': [1, 0, 0, 1], 'cat3': [1, 0, 1, 1], 'cat4': [0, 0, 1, 1] } df = pd.DataFrame(data, index=['a', 'b', 'c', 'd'])
步骤2:计算共现矩阵
直接一行代码搞定矩阵乘法:
# 转置矩阵点乘原矩阵,得到共现矩阵 co_occurrence = df.T.dot(df) print(co_occurrence)
运行后输出的结果完全符合你的预期:
cat1 cat2 cat3 cat4 cat1 1 0 0 0 cat2 0 2 2 1 cat3 0 2 3 2 cat4 0 1 2 2
额外:绘制热力图(可选)
如果你想把这个矩阵做成热力图来直观展示,可以用seaborn库快速实现:
import seaborn as sns import matplotlib.pyplot as plt sns.heatmap(co_occurrence, annot=True, cmap='Blues', fmt='d') plt.title('Category Co-occurrence Heatmap') plt.show()
这样就能生成一张热力图,颜色越深代表对应类别对的共现次数越多,标注的数字也能让你直接看到具体次数。
内容的提问来源于stack exchange,提问作者borkbork
相关产品推荐
相关产品推荐

