对比多个序列的相同元素占比并绘制热力图-Python

该博客实现了一个Python脚本,用于比较不同排序方法在前k个元素上的相似度。它读取包含多种排序结果的数据,计算每一对方法之间的相同元素占比,并将结果存储为混淆矩阵。此外,还绘制了热力图以直观展示这些方法的相似性。用户可以自定义k值来观察不同排名情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

'''
对比两个数组前k个元素的相同元素占比
'''
def getArraySame(array1, array2, k):
    length = len(array1)
    if k > length:
        k = length
    # 统计两个数组相同元素个数
    count = len(set(array1[0:k]) & set(array2[0:k]))
    # 除以总元素数,转为占比
    return count / k


if __name__ == '__main__':
    '''
    数据准备
    '''
    methods = pd.read_csv('data.csv')  # 多种方法的排序结果
    # 文件中第一列为排名,因此方法名从索引1至n
    methods_name = np.array(methods.columns)[1: len(methods.columns)]  
    m = len(methods_name) # 共多少个方法

    '''
    计算
    '''
    a = np.zeros((m, m)) # 初始化混淆矩阵
    k = int(input("请输入您想要对比的排名情况(截止至k):"))  # 前k个元素
    for i in range(m):
        for j in range(m):
            # 调用对比方法,比较2个序列的相同元素占比
            a[i][j] = getArraySame(methods[methods_name[i]].tolist(), methods[methods_name[j]].tolist(), k)
    
    '''
    存储至文件
    '''
    df = pd.DataFrame(a, index=methods_name, columns=methods_name)  
    print(df)
    df.to_csv('Top-' + str(k) + ' 序列 相同元素占比.csv', index=False)
    print("已输出到文件!")

    '''
    画热力图
    '''
    sns.heatmap(df, cmap="YlGnBu_r", annot=True, annot_kws={'size': 9, 'weight': 'bold', 'color': 'black'})
    plt.title(" Top-" + str(k))
    plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值