数据分析实战——城市餐饮店铺选址分析(1)
2019-03-30 本文已影响63人
勤奋的土豆鹿鹿
项目目标: 城市餐饮店铺选址
第一部分:从三个维度“口味”、“人均消费”、“性价比”对不同菜系进行比较,并筛选出可开店铺的餐饮类型
要求:
①计算出三个维度的指标得分
②评价方法:
口味→ 得分越高越好
性价比→ 得分越高越好
人均消费→ 价格适中即可
③制作散点图,x轴为“人均消费”,y轴为“性价比得分”,点的大小为“口味得分”
绘制柱状图,分别显示“口味得分”、“性价比得分”
(1)导入数据
相应库的导入
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')
from bokeh.io import output_notebook
output_notebook()
from bokeh.plotting import figure, show
from bokeh.models import ColumnDataSource
数据导入(关注文末公众号,回复:城市餐饮店铺,即可获得数据)
df1 = pd.read_excel('上海餐饮数据.xlsx')
(2) 计算出三个维度的指标得分
1) 口味指标计算方法 → 口味评分字段,按照餐饮类别分组算均值,再做标准化处理
2)人均消费指标计算方法 → 人均消费字段,按照餐饮类别分组算均值,再做标准化处理
3)性价比指标计算方法 → 性价比 = (口味 + 环境 + 服务)/人均消费,按照餐饮类别分组算均值,再做标准化处理
data1 = df1[['类别','口味','环境','服务','人均消费']]
筛选数据,清除空值、为0的数据
data1.dropna(inplace=True)
data1 = data1[(data1['口味']>0)&(data1['环境']>0)&(data1['服务']>0)&(data1['人均消费']>0)]
构造性价比指数
data1['性价比'] = (data1['口味']+data1['环境']+data1['服务'])/data1['人均消费']
查看异常值,通过箱形图
fig, axes = plt.subplots(1,3,figsize=(10,4))
data1.boxplot(column=['口味'],ax=axes[0])
data1.boxplot(column=['人均消费'],ax = axes[1])
data1.boxplot(column=['性价比'],ax=axes[2])
去除上下四分位数(异常值处理)剩下每个指标的非异常值
注意,这里先分别计算三个指标,再合并数据(merge)作图,目的是指标之间的噪音数据不相互影响
def f1(data,col):
q1 = data[col].quantile(q = 0.25)
q3 = data[col].quantile(q = 0.75)
iqr = q3 - q1
t1 = q1 - 3 * iqr
t2 = q3 + 3 * iqr
return data.loc[((data[col]>t1)&(data[col]<t2)),['类别',col]]
data_kw = f1(data1,'口味')
data_rj = f1(data1,'人均消费')
data_xjb = f1(data1,'性价比')
按照餐饮类别分组算均值,算出均值后,对所有类的均值做标准化处理再做标准化处理
def f2(data,col):
col_name = col + '_norm'
data_gp = data.groupby('类别').mean()
data_gp[col_name] = (data_gp[col] - data_gp[col].min())/(data_gp[col].max() - data_gp[col].min())
return data_gp
data_kw_score = f2(data_kw,'口味')
data_rj_score = f2(data_rj,'人均消费')
data_xjb_score = f2(data_xjb,'性价比')
合并数据
data_final_q1 = pd.merge(data_kw_score,data_rj_score,left_index=True,right_index=True)
data_final_q1 = pd.merge(data_final_q1,data_xjb_score,left_index=True,right_index=True)
(3)制作散点图,x轴为“人均消费”,y轴为“性价比得分”,点的大小为“口味得分
结论:人均消费越高,性价比越低;人均消费越低,性价比越高;
口味好的食物一般人均消费和性价比都属于中档或者中档偏上的位置。
plt.scatter(x = data_final_q1['人均消费'], y = data_final_q1['性价比'], s=data_final_q1['口味_norm']*500,alpha=0.4)
image.png
绘制柱状图,分别显示“口味得分”、“性价比得分”
蟹煲,本菜、火锅等口味和性价比都比较高
data_final_q1['口味_norm'].sort_values().plot(kind='bar')
image.png
data_final_q1['人均消费_norm'].sort_values().plot(kind='bar',)
image.png
qrcode_for_gh_8341e75b58d6_258.jpg