科技改变生活 · 科技引领未来
import numpy as np
import pandas as pd
import sklearn
import scipy.stats as stats
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm
import warnings
warnings.filterwarnings(&34;ignore&34;)
dic_t1=[{&39;行业&39;:&39;A&39;,&39;次数&39;:57},
{&39;行业&39;:&39;A&39;,&39;次数&39;:66},
{&39;行业&39;:&39;A&39;,&39;次数&39;:49},
{&39;行业&39;:&39;A&39;,&39;次数&39;:40},
{&39;行业&39;:&39;A&39;,&39;次数&39;:34},
{&39;行业&39;:&39;A&39;,&39;次数&39;:53},
{&39;行业&39;:&39;A&39;,&39;次数&39;:44},
{&39;行业&39;:&39;B&39;,&39;次数&39;:68},
{&39;行业&39;:&39;B&39;,&39;次数&39;:39},
{&39;行业&39;:&39;B&39;,&39;次数&39;:29},
{&39;行业&39;:&39;B&39;,&39;次数&39;:45},
{&39;行业&39;:&39;B&39;,&39;次数&39;:56},
{&39;行业&39;:&39;B&39;,&39;次数&39;:51},
{&39;行业&39;:&39;C&39;,&39;次数&39;:31},
{&39;行业&39;:&39;C&39;,&39;次数&39;:49},
{&39;行业&39;:&39;C&39;,&39;次数&39;:21},
{&39;行业&39;:&39;C&39;,&39;次数&39;:34},
{&39;行业&39;:&39;C&39;,&39;次数&39;:40},
{&39;行业&39;:&39;D&39;,&39;次数&39;:44},
{&39;行业&39;:&39;D&39;,&39;次数&39;:51},
{&39;行业&39;:&39;D&39;,&39;次数&39;:65},
{&39;行业&39;:&39;D&39;,&39;次数&39;:77},
{&39;行业&39;:&39;D&39;,&39;次数&39;:58}]
df_t1 = pd.Dataframe(dic_t1,columns=[&39;行业&39;,&39;次数&39;])
def f_oneway(df,col_fac,col_sta):
list_fac = df[col_fac].unique() 分组标签取出
k = len(list_fac) 分组标签个数
n = len(df)
x_bar = df[col_sta].mean() 总均值
SSA = []
for i in list_fac:
series_i = df[df[col_fac]==i][col_sta]
r = len(series_i)
xi_bar = series_i.mean()
SSA.append(r*(xi_bar-x_bar)**2)
SST = round(((df[col_sta]-x_bar)**2).sum(),4)
df_res = pd.Dataframe(columns=[&39;方差来源&39;,&39;平方和&39;,&39;自由度&39;,&39;均方&39;,&39;F值&39;,&39;P-value&39;])
SSA = sum(SSA)
SSE = SST - SSA
MSA = SSA/(k-1)
MSE = SSE/(n-k)
sig = stats.f.sf(MSA/MSE,k-1,(k-1)*(n-1))
df_res[&39;方差来源&39;] = [col_fac,&39;组内(误差)&39;,&39;总和&39;]
df_res[&39;平方和&39;] = [SSA,SSE,SST]
df_res[&39;自由度&39;] = [k-1,n-k,n-1]
df_res[&39;均方&39;] = [MSA,MSE,&39;-&39;]
df_res[&39;F值&39;] = [MSA/MSE,&39;-&39;,&39;-&39;]
df_res[&39;P-value&39;] = [sig,&39;-&39;,&39;-&39;]
return df_res
f_oneway(df_t1,&39;行业&39;,&39;次数&39;)
马阳明