如何使用Python進(jìn)行數(shù)據(jù)分析之方差分析詳解
前言
大家好,方差分析可以用來判斷幾組觀察到的數(shù)據(jù)或者處理的結(jié)果是否存在顯著差異。本文介紹的方差分析(Analysis of Variance,簡稱ANOVA)就是用于檢驗(yàn)兩組或者兩組以上樣本的均值是否具備顯著性差異的一種數(shù)理統(tǒng)計(jì)方法。
根據(jù)影響試驗(yàn)條件的因素個(gè)數(shù)可以將方差分析分為:單因素方差分析、雙因素方差分析、多因素方差分析;雙因素方差分析則是分析兩個(gè)因素對試驗(yàn)指標(biāo)的影響;多因素方差分析則是分析更多因素指標(biāo)的分析方法。本文是以不同城市的月薪收入在每個(gè)月的水平上是否存在差異就是多組數(shù)據(jù)是否存在差異的示例:
一、單因素方差分析
單因素方差分析只考慮單一因素對試驗(yàn)指標(biāo)的影響是否顯著:
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()函數(shù)將讀取數(shù)據(jù)進(jìn)行結(jié)構(gòu)轉(zhuǎn)換,以滿足ols()函數(shù)對數(shù)據(jù)格式的要求,melt()函數(shù)能將列標(biāo)簽轉(zhuǎn)換為列數(shù)據(jù)

使用melt()函數(shù)對數(shù)據(jù)結(jié)構(gòu),并可視化,我們可以以肉眼觀察出差異性明顯:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['KaiTi', 'SimHei', 'FangSong'] # 漢字字體,優(yōu)先使用楷體,如果找不到楷體,則使用黑體
plt.rcParams['font.size'] = 12 # 字體大小
plt.rcParams['axes.unicode_minus'] = False # 正常顯示負(fù)號
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()
進(jìn)行方差分析:
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()函數(shù)將讀取數(shù)據(jù)進(jìn)行結(jié)構(gòu)轉(zhuǎn)換,以滿足ols()函數(shù)對數(shù)據(jù)格式的要求,melt()函數(shù)能將列標(biāo)簽轉(zhuǎn)換為列數(shù)據(jù)
model_city=ols('月薪~C(城市)',df_city).fit()# ols()創(chuàng)建一線性回歸分析模型
anova_table=anova_lm(model_city)# anova_lm()函數(shù)創(chuàng)建模型生成方差分析表
print(anova_table)
# 進(jìn)行事后比較分析
print(pairwise_tukeyhsd(df_city['月薪'], df_city['城市']))
在結(jié)果圖上半部分中df為自由度,sum_sq為誤差平方和,mean_sq為平均平方,F(xiàn)代表統(tǒng)計(jì)量F值,PR(>F)代表顯著性水平P值;下半部分為多重比較,進(jìn)行事后分析,group1以及group2表示的是因子的不同水平,然后分析他們兩個(gè)組是否有顯著性差異,最后面的reject表示是否拒絕原假設(shè),True表示的是拒絕原假設(shè),說明兩組均值有顯著性差異。
二、雙因素方差分析
雙因素方差分析對數(shù)據(jù)結(jié)構(gòu)的要求和單因素方差分析不同,代碼如下:
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
總結(jié)
到此這篇關(guān)于如何使用Python進(jìn)行數(shù)據(jù)分析之方差分析的文章就介紹到這了,更多相關(guān)Python方差分析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)基于樸素貝葉斯的垃圾分類算法
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)基于樸素貝葉斯的垃圾分類算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
python 列表元素左右循環(huán)移動(dòng) 的多種解決方案
這篇文章主要介紹了python 列表元素左右循環(huán)移動(dòng) 的多種解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
pandas DataFrame 交集并集補(bǔ)集的實(shí)現(xiàn)
這篇文章主要介紹了pandas DataFrame 交集并集補(bǔ)集的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Python語法學(xué)習(xí)之進(jìn)程的創(chuàng)建與常用方法詳解
本文我們將學(xué)習(xí)一下在?Python?中去創(chuàng)建并使用多進(jìn)程的方法,可以通過創(chuàng)建多個(gè)進(jìn)程來幫助我們提高腳本執(zhí)行的效率,感興趣的可以了解一下2022-04-04
Python實(shí)現(xiàn)根據(jù)文件后綴統(tǒng)計(jì)文件大小并找出文件位置
這篇文章主要和大家分享了一個(gè)Python腳本,主要用于統(tǒng)計(jì)指定文件夾內(nèi)特定后綴文件的數(shù)量、大小及路徑,并支持多種格式導(dǎo)出,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2026-05-05
從零學(xué)python系列之淺談pickle模塊封裝和拆封數(shù)據(jù)對象的方法
這個(gè)系列也發(fā)了幾篇文章了,都是個(gè)人的一些學(xué)習(xí)心得的記錄,今天在學(xué)習(xí)文件數(shù)據(jù)處理的時(shí)候了解到有pickle模塊,查找官方文檔學(xué)習(xí)了一些需要用到的pickle內(nèi)容。2014-05-05
Python輕量級ORM框架Peewee訪問sqlite數(shù)據(jù)庫的方法詳解
這篇文章主要介紹了Python輕量級ORM框架Peewee訪問sqlite數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了ORM框架的概念、功能及peewee的安裝、使用及操作sqlite數(shù)據(jù)庫的方法,需要的朋友可以參考下2017-07-07

