9.5

import pandas as pd
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm

定义列名

column_names = ['城市1', '城市2', '城市3', '城市4']

生成因子组合

factor_combinations = [
f"位置{i+1}广告形式{j+1}高档" for i in range(3) for j in range(2)
] + [
f"位置{i+1}广告形式{j+1}低档" for i in range(3) for j in range(2)
]

读取Excel文件

df_raw = pd.read_excel('9.5.xlsx', header=None, names=column_names, index_col=0)

设置索引为因子组合

df_raw.index = factor_combinations

提取位置、广告形式和装饰档次因子

location_factor = [int(x.split('位置')[1].split('广告')[0]) for x in df_raw.index]
ad_factor = [int(x.split('广告形式')[1].split('高档')[0]) if '高档' in x else int(x.split('广告形式')[1].split('低档')[0]) for x in df_raw.index]
decoration_factor = ['高档' if '高档' in x else '低档' for x in df_raw.index]

准备数据

data = {
'销售量': df_raw.values.flatten(),
'位置': location_factor * 4,
'广告形式': ad_factor * 4,
'装饰档次': decoration_factor * 4
}

创建DataFrame

df = pd.DataFrame(data)

生成城市因子

city_factor = [f'城市{i+1}' for i in range(4) for _ in range(3 * 2)]
df['城市'] = city_factor

构建模型并进行方差分析

model = ols('销售量 ~ C(位置) + C(广告形式) + C(装饰档次) + C(城市)', data=df).fit()
anova_table = anova_lm(model, typ=2)

打印方差分析表

print(anova_table)

找出显著因素

significant_factors = anova_table[anova_table['PR(>F)'] < 0.05]['source']

打印显著因素

print("在显著水平0.05下,以下因素对销售量有显著差异:")
print(significant_factors)

输出学号

print("学号后两位: 08")

posted @ 2024-12-09 17:11  方~~  阅读(15)  评论(0)    收藏  举报