0

0

Python中循环内高效执行统计比较的方法

DDD

DDD

发布时间:2025-09-09 16:58:49

|

233人浏览过

|

来源于php中文网

原创

Python中循环内高效执行统计比较的方法

本教程旨在解决Python中对大量配对数据集进行重复统计比较的效率问题。通过将相关数据向量组织成列表或字典,结合循环结构,可以自动化地执行如Wilcoxon符号秩检验等统计测试,避免冗余代码,提高代码的可维护性和扩展性。

在数据分析和科学研究中,我们经常需要对多组数据进行相似的统计比较。例如,可能需要对多个配对样本(如治疗前后、不同区域的测量值)进行非参数检验。当数据集数量庞大时,手动为每一对数据编写统计测试代码将变得极其繁琐且容易出错。本文将介绍如何利用python的循环结构和数据组织策略,高效地实现这一目标。

场景描述

假设我们有两组相关的数值向量,每组包含多个子类别。例如,hc_mcp, hc_pct, ..., 和 tw_mcp, tw_pct, ...。我们希望对每个对应的向量对(如 hc_mcp 与 tw_mcp,hc_pct 与 tw_pct 等)执行Wilcoxon符号秩检验,并收集每个测试的P值。

原始数据示例如下:

hc_mcp = [0.45, 0.43, 0.46, 0.46, 0.45, 0.39, 0.48, 0.47, 0.50, 0.45, 0.47, 0.47, 0.46]
hc_pct = [0.44, 0.48, 0.45, 0.46, 0.47, 0.37, 0.56, 0.46, 0.49, 0.53, 0.46, 0.47, 0.48]
hc_gcc = [0.51, 0.56, 0.57, 0.54, 0.55, 0.58, 0.51, 0.54, 0.55, 0.54, 0.55, 0.53, 0.54]
hc_bcc = [0.56, 0.62, 0.64, 0.63, 0.60, 0.65, 0.60, 0.64, 0.64, 0.61, 0.63, 0.58, 0.63]
hc_scc = [0.68, 0.73, 0.74, 0.71, 0.72, 0.73, 0.70, 0.72, 0.72, 0.72, 0.71, 0.67, 0.73]

tw_mcp = [0.47, 0.46, 0.44, 0.48, 0.45, 0.45, 0.46, 0.44, 0.47, 0.46, 0.50, 0.49, 0.48]
tw_pct = [0.46, 0.48, 0.45, 0.48, 0.47, 0.45, 0.46, 0.43, 0.43, 0.49, 0.49, 0.47, 0.44]
tw_gcc = [0.56, 0.56, 0.55, 0.57, 0.52, 0.56, 0.53, 0.55, 0.55, 0.55, 0.56, 0.55, 0.56]
tw_bcc = [0.62, 0.63, 0.60, 0.63, 0.61, 0.63, 0.62, 0.63, 0.63, 0.62, 0.63, 0.61, 0.65]
tw_scc = [0.71, 0.70, 0.70, 0.71, 0.68, 0.74, 0.72, 0.73, 0.70, 0.68, 0.69, 0.70, 0.71]

如果采用手动方式,代码会是这样:

from scipy.stats import wilcoxon

# 手动执行,代码冗余
# res_mcp = wilcoxon(hc_mcp, tw_mcp)
# p_mcp = res_mcp.pvalue

# res_pct = wilcoxon(hc_pct, tw_pct)
# p_pct = res_pct.pvalue
# ...以此类推,当有几十甚至上百对数据时,这种方式不可取。

解决方案:使用列表组织数据并循环

最直接且推荐的方法是将相关的向量组织到列表中。关键在于确保在不同的列表中,对应进行比较的向量位于相同的索引位置。

立即学习Python免费学习笔记(深入)”;

  1. 导入必要的库: 我们将使用scipy.stats中的wilcoxon函数。

    from scipy.stats import wilcoxon
  2. 组织数据向量: 将属于同一组(例如所有hc_开头的向量)的向量放入一个列表,另一组(所有tw_开头的向量)放入另一个列表。确保它们的顺序是对应的。

    # 假设这些向量已经定义如上
    # hc_mcp, hc_pct, ..., tw_mcp, tw_pct, ...
    
    list_hc = [hc_mcp, hc_pct, hc_gcc, hc_bcc, hc_scc]
    list_tw = [tw_mcp, tw_pct, tw_gcc, tw_bcc, tw_scc]
  3. 循环进行统计比较: 使用for循环遍历列表的索引,每次迭代取出对应位置的两个向量进行统计测试。

    PPT.AI
    PPT.AI

    AI PPT制作工具

    下载
    # 用于存储P值的列表
    p_values = []
    statistic_values = [] # 可以同时存储统计量
    
    # 遍历列表索引
    for i in range(len(list_hc)):
        # 从两个列表中取出对应的向量
        data_hc = list_hc[i]
        data_tw = list_tw[i]
    
        # 执行Wilcoxon符号秩检验
        result = wilcoxon(data_hc, data_tw)
    
        # 存储P值和统计量
        p_values.append(result.pvalue)
        statistic_values.append(result.statistic)
    
    print("计算得到的P值列表:", p_values)
    print("计算得到的统计量列表:", statistic_values)

这种方法的核心优势在于其简洁性和可扩展性。即使有上百对向量,代码结构也保持不变,只需确保初始列表的正确构建。

进阶:使用字典进行更灵活的数据管理

如果数据对的命名规则更复杂,或者需要根据名称而不是严格的顺序来匹配数据,可以使用字典来组织数据。这提供了更大的灵活性。

  1. 组织数据向量到字典: 使用一个共同的标识符(如'mcp', 'pct'等)作为字典的键。

    data_hc_dict = {
        'mcp': hc_mcp,
        'pct': hc_pct,
        'gcc': hc_gcc,
        'bcc': hc_bcc,
        'scc': hc_scc
    }
    
    data_tw_dict = {
        'mcp': tw_mcp,
        'pct': tw_pct,
        'gcc': tw_gcc,
        'bcc': tw_bcc,
        'scc': tw_scc
    }
  2. 循环进行统计比较: 遍历其中一个字典的键,然后使用这些键从两个字典中提取对应的向量。

    p_values_dict = {} # 存储P值的字典,键为子类别名称
    
    for key in data_hc_dict.keys():
        if key in data_tw_dict: # 确保在另一个字典中也存在对应的键
            data_hc = data_hc_dict[key]
            data_tw = data_tw_dict[key]
    
            result = wilcoxon(data_hc, data_tw)
            p_values_dict[key] = result.pvalue
        else:
            print(f"警告: '{key}' 在 data_tw_dict 中未找到对应数据。")
    
    print("计算得到的P值字典:", p_values_dict)

    字典方法在数据项不总是按固定顺序排列,或需要更明确的命名关联时特别有用。

注意事项

  • 数据对齐的准确性: 无论是使用列表的索引还是字典的键,确保进行比较的两个向量确实是逻辑上配对的,这是统计分析有效性的基石。
  • 变量命名与动态访问: 避免使用字符串格式化(如 globals()['hc_%s' % rois])来动态访问全局变量。这种做法通常被认为是糟糕的编程习惯,因为它降低了代码的可读性、可维护性,并可能引入安全风险。将数据组织到列表或字典中是更Pythonic且安全高效的解决方案。
  • 统计测试的选择: 本教程以Wilcoxon符号秩检验为例,但原理适用于任何需要对配对数据进行操作的统计函数(如scipy.stats.ttest_rel进行配对t检验)。请根据您的数据特性和研究问题选择合适的统计方法。
  • 结果存储与后续分析: 将P值或其他统计结果存储在列表或字典中,便于后续的数据处理、多重比较校正(如Bonferroni校正、FDR校正)和结果报告。

总结

通过将相关的数值向量组织成列表或字典,并结合Python的循环结构,我们可以优雅且高效地处理大量配对数据的统计比较任务。这种方法不仅避免了冗余代码,提高了开发效率,还增强了代码的可读性和可维护性,是进行大规模数据统计分析的推荐实践。正确的数据组织是实现自动化和可扩展统计分析的关键。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

210

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

323

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

293

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

178

2025.08.07

全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

95

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

106

2025.09.18

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

25

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号