课题名称:餐饮业数据分析
班 级: 18 级统计学 1 班
1234567
______
学 号:
姓 名:
成 绩:
啊
啊
目录
1.前言:
2.餐饮企业数据分析的步骤与流程
4、 使用 K-MEANS 聚类算法进行客户价值分析
5 客户流失预测:
6. 总结
2
3
9
14
18
1
一、项目需求
1.前言:
俗话说的民意食为天,随着科技的发展和人们生活水平的提高。餐饮行业作
为我国第三产业中的一个传统服务性行业,始终保持着旺盛的增长势头,取得了
突飞猛进的发展,展现出繁荣兴旺的新局面。与此同时,我国餐饮业发展的质量
和内涵也发生了重大变化。根据国家统计局数据显示,餐饮行业餐费收入从 2006
到 2015 年都处于增长的趋势,同比增长率有很大的波动,如图所示。
2
2.餐饮企业数据分析的步骤与流程
通过对某餐饮企业的数据进行分析,最终为餐饮企业提出改善的建议。主要步
骤如下图所示。
(1)从系统数据库中迁移与分析相关的数据到分析数据库中,包括客户信息、
菜品详情、订单表和订单详情等。
(2)对数据进行预处理,统计每日用餐人数、每日销售额并进行数据清洗等。
(3)进行特征工程,构建 RFM 特征和客户流失特征。
(4)使用 K-means 算法,对客户进行聚类分析,并基于聚类结果进行客户价值
分析。
(5)个人总结。
3
3.数据预处理
订单表(meal_order_info.csv)和客户信息表(users.csv)中包含 2016 年 8
月份的订单和对应客户的数据,将使用该部分数据进行客户价值聚类分析。历史
订单表(info_new)和历史客户信息表(user_loss)包含 2016 年 1~7 月份的订
单和对应客户的数据,将使用该部分数据构建客户流失预测模型,统计每日用餐
人数与销售额。
1.统计订单和历史订单中每日用餐人数和销售额。如下展示:
2. 统计用餐人数与销售额
import pandas as pd
import matplotlib.pyplot as plt
info = pd.read_csv('../data/meal_order_info.csv', sep=',', encoding='gbk')
info_before = pd.read_csv('../data/info_new.csv' ,sep=',' ,encoding='utf-8')
info_all = pd.concat([info_before,info])
print('查看数据\n',info.shape,info_before.shape,info_all.shape)
#查看订单数据 为 1 的数据
info = info_all[info_all['order_status'].isin(['1'])]
info = info.reset_index(drop = True)
#统计每日用餐数 和 营业额度
for i,k in enumerate(info['use_start_time']):
y = k.split()
y = pd.to_datetime(y[0])
info.loc[i,'use_start_time'] = y
groupbyday =
info[['use_start_time','number_consumers','accounts_payable']].groupby(by='use_
start_time')
sale_day = groupbyday.sum()
4
sale_day.columns = ['人数','销量']
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(12,6))
plt.title('每日销售额折线图 作者:唐郁昕 学号:1710225039')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.plot(sale_day['销量'])
plt.show()
plt.close
3.统计每日用餐人数与销售额
#新建面板
plt.figure(figsize=(12,6))
plt.title('每日销售额折线图 作者:唐郁昕 学号:1710225039')
plt.xlabel('日期')
plt.ylabel('销售额')
plt.plot(sale_day['销量'])
plt.show()
plt.close
5
3.客户价值分析处理
info_august = pd.read_csv('../data/meal_order_info.csv', encoding = 'gbk')
users_august = pd.read_csv('../data/users.csv', sep=',' ,encoding='GBK')
info_august_new = info_august[info_august['order_status'].isin(['1'])]
info_august_new = info_august_new.resetindex(drop=True)
print('提取的订单数据维数:' ,info_august_new.shape)
info_august_new.to_csv('../tmp/info_new.csv',index=False,encoding ='utf-8')
for i in range(1,len(info_august_new)):
num = users_august[users_august['USER ID'] ==
info_august_new.iloc[i - 1, 1]].index.tolist()
users_august.iloc[num[0], 14] = info_august_new.iloc[i - 1, 9]
users_august.iloc[num[0],14] = info_august_new.iloc[i-1,9]
user = users_august
user['LAST VISITS'] = user['LAST VISITS'].fillna(999)
6
user = user.drop(user[user['LAST VISITS'] == 999].index.tolist())
user = user.iloc[:,[0,2,12,14]]
print(user.head())
user.to_csv('../tmp/users_loss.csv', index=False, encoding='utf-8')
4.合并订单表和客户信息表
users = pd.read_csv('../temp/user_loss.csv', encoding='gbk')
info = pd.read_csv('../data/info_new.csv', encoding = 'utf-8')
print("历史客户信息表的维数: ", users.shape)
print('历史订单表的维数:' , info.shape)
#将时间转为时间格式
users['CREATED'] = pd.to_datetime(users['CREATED'])
info['use_start_time'] = pd.to_datetime(info['use_start_time'])
info['lock_time'] = pd.to_datetime(info['lock_time'])#匹配用户的最后一次用餐时间
for i in range(len(users)):
infol = info.iloc[info[info['name']==users.iloc[i,2]].index.tolist(),:]
if sum(info['name']==users.iloc[i,2]) != 0:
users.iloc[i,14]= max(infol['use_start_time'])
#特征选取
#提取有效订单
info = info.loc[info['order_status'] ==
1, ['emp_id','number_consumers','expenditure']]
info = info.rename(columns = {'emp_id':"USER ID"})
5.对空值进行处理
7