【精选】Python数据分析案例 您所在的位置:网站首页 方差计算案例及分析 【精选】Python数据分析案例

【精选】Python数据分析案例

2023-10-22 08:26| 来源: 网络整理| 查看: 265

1. 前言

背景:表格为随机挑选的不同性别与受教育程度的对象的幸福指数数据,

目的:现要求分析幸福指数是否受不同的性别和受教育程度影响。

分析方法:两个自变量是分类变量,因变量是连续变量,所以选择多因素方差分析。

方差分析需要满足的条件:

1.各样本须是相互独立的随机样本;2.各样本来自正态分布总体;3.各样本方差齐性。

显著性水平:选取为0.05

工具:Jupyter Notebook(Python 3.8)

2. Python

数据查看

data = [['Male', '高中及以下', 63.0], ['Male', '高中及以下', 64.0], ['Male', '高中及以下', 60.0], ['Male', '高中及以下', 63.0], ['Male', '高中及以下', 66.0], ['Male', '高中及以下', 65.0], ['Male', '高中及以下', 61.0], ['Male', '高中及以下', 62.0], ['Male', '高中及以下', 68.0], ['Male', '大学本科', 66.5], ['Male', '大学本科', 67.0], ['Male', '大学本科', 69.5], ['Male', '大学本科', 70.0], ['Male', '大学本科', 69.0], ['Male', '大学本科', 71.5], ['Male', '大学本科', 67.0], ['Male', '大学本科', 68.5], ['Male', '大学本科', 63.5], ['Male', '研究生及以上', 88.0], ['Male', '研究生及以上', 89.0], ['Male', '研究生及以上', 86.0], ['Male', '研究生及以上', 92.0], ['Male', '研究生及以上', 90.0], ['Male', '研究生及以上', 84.0], ['Male', '研究生及以上', 91.0], ['Male', '研究生及以上', 87.0], ['Male', '研究生及以上', 88.0], ['Male', '研究生及以上', 85.0], ['Female', '高中及以下', 65.0], ['Female', '高中及以下', 66.0], ['Female', '高中及以下', 61.0], ['Female', '高中及以下', 64.0], ['Female', '高中及以下', 69.0], ['Female', '高中及以下', 70.0], ['Female', '高中及以下', 67.0], ['Female', '高中及以下', 63.0], ['Female', '高中及以下', 63.0], ['Female', '高中及以下', 66.0], ['Female', '大学本科', 70.0], ['Female', '大学本科', 71.0], ['Female', '大学本科', 66.0], ['Female', '大学本科', 69.0], ['Female', '大学本科', 74.0], ['Female', '大学本科', 73.0], ['Female', '大学本科', 72.0], ['Female', '大学本科', 68.0], ['Female', '大学本科', 65.0], ['Female', '大学本科', 64.0], ['Female', '研究生及以上', 82.0], ['Female', '研究生及以上', 83.0], ['Female', '研究生及以上', 88.0], ['Female', '研究生及以上', 91.0], ['Female', '研究生及以上', 90.0], ['Female', '研究生及以上', 86.0], ['Female', '研究生及以上', 84.0], ['Female', '研究生及以上', 80.0], ['Female', '研究生及以上', 85.0], ['Female', '研究生及以上', 76.0]] df = pd.DataFrame(data, columns = ['gender', 'education', 'Index']) df.head()

在这里插入图片描述

转换

df1 = pd.DataFrame() data_list = [] for i in df.gender.unique(): for j in df.education.unique(): data = df[(df.gender == i)&(df.education == j)]['Index'].values data_list.append(data) df1 = df1.append(pd.DataFrame(data, columns = pd.MultiIndex.from_arrays([[i],[j]])).T) df1 = df1.T df1

在这里插入图片描述

转换成更直观的形式,方便后续的操作

各组数量统计

# 查看各组数量分布 df1.count().to_frame()

在这里插入图片描述

各组数量存在差异

箱线图查看异常值

plt.figure(figsize = (12,8)) sns.boxplot(x = 'gender', y = 'Index', data = df, hue = 'education') plt.show()

在这里插入图片描述

各组数据均没有异常值

正态性检验

# Shapiro-Wilk 检验 sw_test_res = pd.DataFrame() for i in df1.columns: statistic,pvalue = stats.shapiro(df1[i].dropna()) sw_test_res[i] = [statistic, pvalue] sw_test_res.index = ['statistic', 'p_value'] sw_test_res.T.round(3)

在这里插入图片描述

以上各组p值均大于0.05,满足正态分布

方差齐性检验

# levene test print('基于中位数的levene test P值:', stats.levene(*data_list, center='median').pvalue) P值为0.286,大于0.05,即任一分类都具有等方差性

判断交互作用

计算平均值

df_mean = df1.mean().to_frame().unstack().round(1) df_mean.columns = ['大学本科', '研究生及以上', '高中及以下'] df_mean = df_mean[['高中及以下', '大学本科', '研究生及以上']] df_mean

在这里插入图片描述 绘制交互图

# 定义一个绘图函数 def draw_pics(data, feature): fig, ax = plt.subplots(figsize=(8, 6)) for i in data.index: ax.plot(data.columns, data.loc[i,], label = i, marker='o') ax.legend() ax.set_title("幸福指数平均值") ax.set_xlabel(feature, fontdict={'fontsize': 14}) ax.set_ylabel("平均值", fontdict={'fontsize': 14}) plt.show() # 绘制不同的性别在不同的教育程度下的均值变化 draw_pics(data_mean, 'education')

在这里插入图片描述

# 绘制不同的教育程度在不同的性别下的均值变化 draw_pics(data_mean.T, 'gender')

在这里插入图片描述

可以看到受教育程度与性别在对幸福指数的影响上可能存在交互作用。男性和女性的幸福指数都随受教育程度的增加而增加。但两者的增加趋势不同。男性的受教育程度在高中及以下、大学本科时幸福指数比女性低;但当男性的受教育程度达到研究生及以上时,其幸福指数比女性高。可见,在提高受教育程度增加幸福指数的过程中,男性比女性获益更大。

多因素方差分析 将交互项放入方差分析

anova = smf.ols('Index ~ C(gender) + C(education) + C(gender)*C(education)',data = df).fit() sm.stats.anova_lm(anova, typ=1)

在这里插入图片描述 结果显示:

性别P = 0.404大于0.05,表明性别对幸福指数没有影响教育P < 0.001,表明教育对于幸福指数有显著影响交互项具F(2,52)=4.148,P= 0.021,有统计学意义,表明性别和受教育程度在对幸福指数的影响上存在交互作用

事后比较 不同教育程度的事后比较

# 事后多重比较 sm.stats.multicomp.pairwise_tukeyhsd(groups = df.education, endog=df.Index).summary()

在这里插入图片描述 由事后比较可得:

大学本科学历 的幸福指数比 高中及以下学历 的人高4.13(95%CI:1.55-6.72),P=0.001;研究生及以上学历 的幸福指数比 高中及以下学历 的人高21.72(95%CI:19.17-24.28),P


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有