Python读取excel数据做韦恩图

excel

在这里插入图片描述

具体代码

# 导入必要的库
import pandas as pd  # 数据处理库,用于读取和分析Excel数据
import matplotlib.pyplot as plt  # 可视化库,用于创建图表
from venn import venn  # 专业维恩图库,支持多集合可视化(需安装:pip install venn)

# 定义Excel文件路径(Windows路径建议使用原始字符串或双反斜杠)
file_path = 'C:\\Users\\Administrator\\Desktop\\t1\\2.xlsx'  # 推荐改为:r'C:\Users\...\2.xlsx'

try:
    # ----------------- 数据读取模块 ----------------- 
    # 使用pandas读取Excel文件
    # 参数说明:
    # - engine='openpyxl':强制使用openpyxl引擎处理.xlsx文件
    # - 对于.xls文件需要改为engine='xlrd'并安装xlrd库
    df = pd.read_excel(file_path, engine='openpyxl')

    # 验证数据列完备性
    required_columns = ['YP_id', 'EP_id', 'MP_id', 'BSA_99']  # 必需的数据列
    if not all(col in df.columns for col in required_columns):
        missing = [col for col in required_columns if col not in df.columns]
        raise KeyError(f"缺少必要列: {missing}")  # 发现缺失列时抛出明确错误

    # ----------------- 数据预处理模块 -----------------
    # 构建集合字典(关键数据结构)
    sets_dict = {
        # 对每个列进行处理:
        # 1. dropna():移除空值(NaN)
        # 2. astype(str):转换为字符串,避免混合数据类型问题
        # 3. set():转换为集合,自动去重
        'YP_id': set(df['YP_id'].dropna().astype(str)),
        'EP_id': set(df['EP_id'].dropna().astype(str)),
        'MP_id': set(df['MP_id'].dropna().astype(str)),
        'BSA_99': set(df['BSA_99'].dropna().astype(str))
    }

    # 空数据校验(防御性编程)
    if all(len(s) == 0 for s in sets_dict.values()):
        raise ValueError("所有数据集均为空,请检查Excel数据内容")  # 防止生成无意义图表

    # ----------------- 可视化模块 ----------------- 
    # 创建画布(设置图像参数)
    plt.figure(
        figsize=(12, 10),  # 图像尺寸(英寸):宽12,高10
        dpi=100,  # 分辨率
        facecolor='white'  # 画布背景色(默认白色,此处显式声明)
    )

    # 绘制四集合维恩图(核心可视化操作)
    venn(
        sets_dict,  # 传入集合字典
        cmap='tab10',  # 使用预设颜色映射(可选)
        fontsize=12,  # 区域数字字号
        legend_loc="best"  # 图例自动选择最佳位置
    )

    # ----------------- 样式美化模块 -----------------
    plt.title(
        "Four-Way Venn Diagram",  # 主标题文本
        fontsize=16,  # 标题字号
        pad=20  # 标题与图表间距(像素)
    )
    plt.gca().set_facecolor('#f5f5f5')  # 设置图表区域背景色(浅灰色)
    plt.grid(False)  # 禁用网格线(维恩图通常不需要网格)

# ----------------- 异常处理模块 -----------------
except FileNotFoundError:
    # 文件路径错误处理
    print(f"错误:文件未找到,请检查路径是否存在:{file_path}")
    print("建议:")
    print("1. 检查路径中的反斜杠是否正确转义")
    print("2. 确认文件名是否包含隐藏字符(如多余空格)")

except PermissionError:
    # 文件权限问题处理
    print(f"错误:无权限访问文件,请尝试:")
    print("1. 关闭Excel软件后重试")
    print("2. 将文件复制到非系统目录(如D盘)")

except Exception as e:
    # 全局异常捕获(最后防线)
    print(f"发生未预期错误:{str(e)}")
    print("建议排查步骤:")
    print("1. 检查Excel文件是否损坏")
    print("2. 运行 pip install --upgrade venn pandas openpyxl 更新库")

else:
    # 无异常时执行的代码块
    plt.tight_layout()  # 自动调整子图参数(显示更紧凑)
    plt.show()  # 显示图像(阻塞式操作,窗口关闭后代码继续执行)

具体效果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值