100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 数据分析案例--01 城市餐饮店铺选址分析

数据分析案例--01 城市餐饮店铺选址分析

时间:2023-08-01 10:36:47

相关推荐

数据分析案例--01 城市餐饮店铺选址分析

城市餐饮店铺选址分析

数据下载链接:

链接:/s/1l2-EEMhK0-n8gFPLuOHb1g

提取码:7olt

要求:

1、从三个维度“口味”、“人均消费”、“性价比”对不同菜系进行比较,并筛选出可开店铺的餐饮类型

要求:

① 计算出三个维度的指标得分

② 评价方法:

口味 → 得分越高越好

性价比 → 得分越高越好

人均消费 → 价格适中即可

③ 制作散点图,x轴为“人均消费”,y轴为“性价比得分”,点的大小为“口味得分”(暂时未涉及)

绘制柱状图,分别显示“口味得分”、“性价比得分”

建议用bokeh做图(暂未涉及)

提示:这是现在的重心

① 数据清洗,清除空值、为0的数据

② 口味指标计算方法 → 口味评分字段,按照餐饮类别分组算均值,再做标准化处理

③ 人均消费指标计算方法 → 人均消费字段,按照餐饮类别分组算均值,再做标准化处理

④ 性价比指标计算方法 → 性价比 = (口味 + 环境 + 服务)/人均消费,按照餐饮类别分组算均值,再做标准化处理

⑤ 数据计算之前,检查一下数据分布,去除异常值(以外限为标准)这里排除了高端奢侈餐饮的数据干扰

⑥ 注意,这里先分别计算三个指标,再合并数据(merge)作图,目的是指标之间的噪音数据不相互影响

import osimport pandas as pdimport numpy as npimport matplotlib.pyplot as pltos.chdir(r"D:\项目07城市餐饮店铺选址分析")df = pd.read_excel("上海餐饮数据.xlsx")"""计算口味\单价\性价比指标"""# 数据清洗 1 删除空值 2 删除0值df1 = df[["类别","口味","环境","服务","人均消费"]]df1.dropna(inplace=True)df2 = df1[df1["人均消费"]>0][df1["口味"]>0]df2["性价比"] = (df["口味"]+df["环境"]+df["服务"])/df["人均消费"]# 查看异常值def f0(data):fig,axes = plt.subplots(1,3,figsize=(10,4))data.boxplot(column=["口味"],ax=axes[0])data.boxplot(column=["人均消费"],ax=axes[1])data.boxplot(column=["性价比"],ax=axes[2])f0(df2)# 创建函数 删除异常值def f1(data,col):q1 = data[col].quantile(q=0.25)q3 = data[col].quantile(q=0.75)iqr = q3 -q1t1 = q1 - 3*iqrt2 = q3 + 3*iqrreturn data[data[col]>t1][data[col]<t2][["类别",col]]df_kw = f1(df2,"口味")df_xf = f1(df2,"人均消费")df_xjb = f1(df2,"性价比")# 再次查看fig,axes = plt.subplots(1,3,figsize=(10,4))df_kw.boxplot(column=["口味"],ax=axes[0])df_xf.boxplot(column=["人均消费"],ax=axes[1])df_xjb.boxplot(column=["性价比"],ax=axes[2])# 按类别分组 求均值 标准化处理def f2(data,col):colName = col+"_norm"datagp = data.groupby("类别").mean() #分组 求均值datagp[colName] = (datagp[col] - datagp[col].min())/(datagp[col].max()-datagp[col].min()) #标准化处理datagp.sort_values(by=colName, inplace=True, ascending=False) # by=colName以colName排序, 降序ascending=Falsereturn datagpdf_kw_norm = f2(df_kw,"口味")df_xf_norm = f2(df_xf,"人均消费")df_xjb_norm = f2(df_xjb,"性价比")#合并数据df_final = pd.merge(df_kw_norm,df_xf_norm,left_index=True, right_index=True)df_final = pd.merge(df_final,df_xjb_norm,left_index=True, right_index=True)print("finished!")

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。