如何使用Python进行数据分析之方差分析详解
前言
大家好,方差分析可以用来判断几组观察到的数据或者处理的结果是否存在显著差异。本文介绍的方差分析(Analysis of Variance,简称ANOVA)就是用于检验两组或者两组以上样本的均值是否具备显著性差异的一种数理统计方法。
根据影响试验条件的因素个数可以将方差分析分为:单因素方差分析、双因素方差分析、多因素方差分析;双因素方差分析则是分析两个因素对试验指标的影响;多因素方差分析则是分析更多因素指标的分析方法。本文是以不同城市的月薪收入在每个月的水平上是否存在差异就是多组数据是否存在差异的示例:
一、单因素方差分析
单因素方差分析只考虑单一因素对试验指标的影响是否显著:
import pandas as pd from statsmodels.formula.api import ols from statsmodels.stats.anova import anova_lm data= pd.read_excel('D:/shujufenxi/jpt.xlsx',index_col=0) # 先来看下从城市因素开始分析, df_city=data.melt(var_name='城市',value_name='月薪')#使用melt()函数将读取数据进行结构转换,以满足ols()函数对数据格式的要求,melt()函数能将列标签转换为列数据
使用melt()函数对数据结构,并可视化,我们可以以肉眼观察出差异性明显:
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['KaiTi', 'SimHei', 'FangSong'] # 汉字字体,优先使用楷体,如果找不到楷体,则使用黑体 plt.rcParams['font.size'] = 12 # 字体大小 plt.rcParams['axes.unicode_minus'] = False # 正常显示负号 import pandas as pd import seaborn as sns data= pd.read_excel('D:/shujufenxi/jpt.xlsx',index_col=0) data_melt = data.melt() data_melt.columns = ['城市', '月薪'] sns.boxplot(x = '城市', y = '月薪', data = data_melt) plt.show()
进行方差分析:
import pandas as pd from statsmodels.stats.multicomp import pairwise_tukeyhsd from statsmodels.formula.api import ols from statsmodels.stats.anova import anova_lm data= pd.read_excel('D:/shujufenxi/jpt.xlsx',index_col=0) # 先来看下从城市因素开始分析, df_city=data.melt(var_name='城市',value_name='月薪')#使用melt()函数将读取数据进行结构转换,以满足ols()函数对数据格式的要求,melt()函数能将列标签转换为列数据 model_city=ols('月薪~C(城市)',df_city).fit()# ols()创建一线性回归分析模型 anova_table=anova_lm(model_city)# anova_lm()函数创建模型生成方差分析表 print(anova_table) # 进行事后比较分析 print(pairwise_tukeyhsd(df_city['月薪'], df_city['城市']))
在结果图上半部分中df为自由度,sum_sq为误差平方和,mean_sq为平均平方,F代表统计量F值,PR(>F)代表显著性水平P值;下半部分为多重比较,进行事后分析,group1以及group2表示的是因子的不同水平,然后分析他们两个组是否有显著性差异,最后面的reject表示是否拒绝原假设,True表示的是拒绝原假设,说明两组均值有显著性差异。
二、双因素方差分析
双因素方差分析对数据结构的要求和单因素方差分析不同,代码如下:
import pandas as pd from statsmodels.stats.multicomp import pairwise_tukeyhsd from statsmodels.formula.api import ols from statsmodels.stats.anova import anova_lm data= pd.read_excel('D:/shujufenxi/jpt.xlsx',index_col=0) df_twoway=data.stack().reset_index() df_twoway.columns=['月份','城市','月薪'] model_twoway=ols('月薪~C(月份)+C(城市)',df_twoway).fit() anova_table=anova_lm(model_twoway) print(anova_table
总结
到此这篇关于如何使用Python进行数据分析之方差分析的文章就介绍到这了,更多相关Python方差分析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
这篇文章主要介绍了Python多线程操作之互斥锁、递归锁、信号量、事件,结合实例形式详细分析了Python多线程操作互斥锁、递归锁、信号量、事件相关概念、原理、用法与操作注意事项,需要的朋友可以参考下2020-03-03
最新评论