栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python实现均值类指标差异分析-Mann-Whitney U-test(完整代码+实现效果)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python实现均值类指标差异分析-Mann-Whitney U-test(完整代码+实现效果)

实现功能:

对于均值类指标的差异分析,采用单因素方差分析,若指标分布服从正态分布,对于2个独立样本采用T检验或者Z检验,对于多个(大于2个)独立样本采用F检验,若分布不服从正态分布,对于2个独立样本采用Mann-Whitney U-test。python实现均值类指标差异分析-Mann-Whitney U-test。

实现代码:

# 导入需要的库
from warnings import simplefilter
simplefilter(action='ignore', category=FutureWarning)
import pandas as pd
import numpy as np
import scipy.stats as stats

# =============读取数据===========
def Read_data(file):
    dt = pd.read_csv(file)
    dt.columns = ['age', 'sex', 'chest_pain_type', 'resting_blood_pressure', 'cholesterol', 'fasting_blood_sugar','rest_ecg', 'max_heart_rate_achieved', 'exercise_induced_angina', 'st_depression', 'st_slope','num_major_vessels', 'thalassemia', 'target']
    data = dt
    return data

# ===========数据清洗==============
def data_clean(data):
    # 重复值处理
    print('存在' if any(data.duplicated()) else '不存在', '重复观测值')
    data.drop_duplicates()
    # 缺失值处理
    print('不存在' if any(data.isnull()) else '存在', '缺失值')
    data.dropna()  # 直接删除记录
    data.fillna(method='ffill')  # 前向填充
    data.fillna(method='bfill')  # 后向填充
    data.fillna(value=2)  # 值填充
    data.fillna(value={'resting_blood_pressure': data['resting_blood_pressure'].mean()})  # 统计值填充
    # 异常值处理
    data1 = data['resting_blood_pressure']
    # 标准差监测
    xmean = data1.mean()
    xstd = data1.std()
    print('存在' if any(data1 > xmean + 2 * xstd) else '不存在', '上限异常值')
    print('存在' if any(data1 < xmean - 2 * xstd) else '不存在', '下限异常值')
    # 箱线图监测
    q1 = data1.quantile(0.25)
    q3 = data1.quantile(0.75)
    up = q3 + 1.5 * (q3 - q1)
    dw = q1 - 1.5 * (q3 - q1)
    print('存在' if any(data1 > up) else '不存在', '上限异常值')
    print('存在' if any(data1 < dw) else '不存在', '下限异常值')
    print(data)
    return data

#=============mannwhitneyu检验======================
def mannwhitneyu_age(data):
    data1=data[['age','target']]
    print(data1['age'].values)
    print(np.mean(data1['age'].values), np.std(data1['age'].values))
    data_age_Y=data1[(data1['target'] ==1)]
    print(len(data_age_Y))
    print(data_age_Y['age'].values)
    print(np.mean(data_age_Y['age'].values), np.std(data_age_Y['age'].values))
    data_age_N=data1[(data1['target'] ==0)]
    print(len(data_age_N))
    print(data_age_N['age'].values)
    print(np.mean(data_age_N['age'].values), np.std(data_age_N['age'].values))
    MWU=stats.mannwhitneyu(data_age_Y['age'].values, data_age_N['age'].values, alternative='two-sided')
    print(MWU)

#============主函数==============
if __name__=="__main__":
    data1=Read_data("F:数据杂坛\0504heartdiseaseHeart-Disease-Data-Set-main\UCI Heart Disease Dataset.csv")
    data1=data_clean(data1)
    mannwhitneyu_age(data1)

实现效果:

 

 

 

喜欢记得点赞,在看,收藏,

关注V订阅号:数据杂坛,获取数据集,完整代码和效果,将持续更新!

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/950141.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号