如何使用pandas将DataFrame两列数据构建为相似度矩阵?
pandas DataFrame 相似度矩阵可视化实现方案
- 前置依赖安装
执行以下命令安装需要的第三方库:pip install pandas seaborn matplotlib numpy - 数据预处理
原始数据如果是长表结构(每行存储两个实体及对应的相似度值),需要先透视为矩阵结构,行、列分别对应两组实体,单元格填充对应相似度数值:import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt # 读取本地存储的matrix.csv文件 df = pd.read_csv("matrix.csv") # 透视生成宽表矩阵,把代码里的col1、col2、similarity替换成你数据集里的实际列名 # col1/col2是你要作为矩阵行、列的两列字段名,similarity是相似度值字段名 sim_matrix = df.pivot(index="col1", columns="col2", values="similarity") # 若为对称相似度矩阵(A与B的相似度=B与A的相似度),执行以下补全逻辑 sim_matrix = sim_matrix.combine_first(sim_matrix.T) # 补全对角线值:实体与自身的相似度默认设为1 np.fill_diagonal(sim_matrix.values, 1) - 可视化绘制
直接调用seaborn的热力图接口即可生成带数值标注的矩阵图,样式匹配参考效果:# 设置画布尺寸,可根据实体数量调整大小避免标签拥挤 plt.figure(figsize=(12, 10)) # 绘制热力图 sns.heatmap( sim_matrix, annot=True, # 开启单元格数值标注 cmap="Blues", # 蓝色渐变配色 vmin=0, vmax=1, # 相似度取值范围,根据你的实际数值范围调整 square=True, # 单元格设置为正方形 linewidths=0.5 # 添加单元格分割线 ) # 调整x轴标签角度避免重叠 plt.xticks(rotation=45, ha="right") # 自动调整布局防止文字截断 plt.tight_layout() # 展示图像 plt.show()
常见问题排查:如果运行后提示透视时存在重复值报错,可将pivot步骤替换为
pivot_table,设置聚合函数比如aggfunc="mean"对重复的相似度值取平均即可。如果你的数据集本身已经是行、列、值齐全的宽表矩阵格式,直接跳过透视步骤传入heatmap即可。
内容的提问来源于stack exchange,提问作者Noob Coder
相关产品推荐
相关产品推荐

