大数据,成就未来餐饮企业综合分析2大数据挖掘专家1数据准备目录餐饮企业分析需求2使用K-means算法进行客户价值分析3使用决策树算法实现餐饮客户流失预测4小结53大数据挖掘专家餐饮行业作为我国第三产业中的一个传统服务性行业,始终保持着旺盛的增长势头,取得了突飞猛进的发展,展现出繁荣兴旺的新局面。与此同时,我国餐饮业发展的质量和内涵也发生了重大变化。根据国家统计局数据显示,餐饮行业餐费收入从2006到2015年都处于增长的趋势,但是同比增长率却有很大的波动,如右图所示。某餐饮企业正面临着房租价格高、人工费用高、服务工作效率低等问题。企业经营最大的目的就是盈利,而餐饮企业盈利的核心是其菜品和客户,也就是其提供的产品和服务对象。如何在保证产品质量的同时提高企业利润,成为某餐饮企业急需解决的问题。餐饮企业现状与需求4大数据挖掘专家某餐饮企业的系统数据库中积累了大量的与客户用餐相关的数据,包括客户信息表、菜品详情表、订单表和订单详情表,其中客户信息表(users)的数据说明如下表所示。餐饮企业数据基本状况名称含义名称含义USER_ID客户IDDESCRIPTION备注MYID客户自编码QUESTION_ID问题代码ACCOUNT账号ANSWER回复NAME姓名ISONLINE是否在线ORGANIZE_ID组织代码CREATED创造日期ORGANIZE_NAME组织名称LASTMOD修改日期DUTY_ID称位代码CREATER创建人TITLE_ID职等代码MODIFYER修改人5大数据挖掘专家餐饮企业数据基本状况名称含义名称含义PASSWORD密码TEL电话EMAIL电子邮箱stuNo学号LANG语言qqQQTHEME样式weixin微信FIRST_VISIT第一次登录meal_arithmetic_id算法IDPREVIOUS_VISIT上一次登录arithmetic_name算法名称LAST_VISITS最后一次登录sex性别LOGIN_COUNT登录次数poo籍贯ISEMPLOYEE是否是职工address地址STATUS状态age年龄IPIP地址6大数据挖掘专家订单表(meal_order_info)的数据说明如下表所示。餐饮企业数据基本状况名称含义名称含义info_id订单IDlock_time锁单时间emp_id客户IDcashier_id收银IDnumber_consumers消费人数pc_id终端IDmode消费方式order_number订单号dining_table_id桌子IDorg_id门店IDdining_table_name桌子名称print_doc_bill_num打印doc账单的编码expenditure消费金额lock_table_info桌子关闭信息dishes_count总菜品数order_status0:未结算;1:结算;2:已锁单accounts_payable付费金额phone电话use_start_time开始时间name名字check_closed支付结束7大数据挖掘专家通过对某餐饮企业的数据进行分析,最终为餐饮企业提出改善的建议。主要步骤如下图所示。餐饮企业数据分析的步骤与流程结果分析业务系统特征工程模型训练&调优构建RFM特征数据准备K-means决策树构建客户流失特征模型重构与寻优训练集测试集模型评价需求分析数据收集数据预处理统计日用餐人数统计日销售额客户价值分析性能度量8大数据挖掘专家从系统数据库中迁移与分析相关的数据到分析数据库中,包括客户信息、菜品详情、订单表和订单详情等。对数据进行预处理,统计菜品数据中的每日用餐人数、每日销售额并进行数据清洗等。进行特征工程,构建RFM特征和客户流失特征。使用K-means算法,对客户进行聚类分析,并基于聚类结果进行客户价值分析。使用决策树算法构建客户流失预测模型,并对模型性能进行评价。餐饮企业数据分析的步骤与流程9大数据挖掘专家1数据准备目录餐饮企业分析需求2使用K-means算法进行客户价值分析3使用决策树算法实现餐饮客户流失预测4小结510大数据挖掘专家订单表(meal_order_info.csv)和客户信息表(users.csv)中包含2016年8月份的订单和对应客户的数据,将使用该部分数据进行客户价值聚类分析。历史订单表(info_new)和历史客户信息表(user_loss)包含2016年1~7月份的订单和对应客户的数据,将使用该部分数据构建客户流失预测模型。数据准备11大数据挖掘专家统计订单表和历史订单表中每日用餐人数与销售额,其中订单状态为1的记录才是完成订单的记录,所以只统计订单状态为1的数据,如下代码所示。统计每日用餐人数与销售额In[1]:importpandasaspdimportmatplotlib.pyplotasplt#导入数据info=pd.read_csv('./data/meal_order_info.csv',encoding='utf-8')info_before=pd.read_csv('./data/info_new.csv',encoding='utf-8')#合并数据info_all=pd.concat([info_before,info])print('查看各表的维数:\n',info.shape,info_before.shape,info_all.shape)Out[1]:查看各表的维数:(945,21)(6611,21)(7556,21)12大数据挖掘专家统计每日用餐人数与销售额In[2]:#提取订单状态为1的数据info=info_all[info_all['order_status'].isin(['1'])]info=info.reset_index(drop=True)#统计每日用餐人数与营业额fori,kinenumerate(info['use_start_time']):y=k.split()y=pd.to_datetime(y[0])info.loc[i,'use_start_time']=ygroupbyday=info[['use_start_time','number_consumers','accounts_payable']].groupby(by='use_start_time')sale_day=groupbyday.sum()sale_day.columns=['人数','销量']#每日用餐人数折线图#解决中文显示问题plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falseplt.figure(figsize=(12,6))plt.title('每日用餐人数折线图')plt.xlabel('日期')plt.ylabel('用餐人数')plt.plot(sale_day['人数'])plt.close13大数据挖掘专家统计每日用餐人数与销售额Out[2]:14大数据挖掘专家统计每日用餐人数与销售额In[3]:#画出每日销售额的折线图#新建画板plt.figure(figsize=(12,6))plt.title('每日销售额的折线图')plt.xlabel('日期')plt.ylabel('销售额')plt.plot(sale_day['销量'])plt.close15大数据挖掘专家统计每日用餐人数与销售额Out[3]:16大数据挖掘专家原始数据中的客户信息表(users.csv)没有直接给出客户最后一次消费的时间,订单表(meal_order_info.csv)中存在未完成的订单,如订单状态为0或2,且存在其不相关、弱相关或冗余的特征,所以需要先对原始数据进行预处理,如下代码所示。数据预处理1.客户价值分析预处理In[1]:importpandasaspdimportnumpyasnpinfo_august=pd.read_csv('../data/meal_order_info.csv',encoding='utf-8')users_august=pd.read_csv('../data/users.csv',encoding='gbk')#提取订单状态为1的数据info_august_new=info_august[info_august['order_status'].isin(['1'])]info_august_new=info_august_new.reset_index(drop=True)print('提取的订单数据维数:',info_august_new.shape)info_august_new.to_csv('../tmp/info_august_new.csv',index=False,encoding='utf-8')Out[1]:提取的订单数据维数:(933,21)17大数据挖掘专家数据预处理1.客户价值分析预处理In[2]:#匹配用户的最后一次用餐时间foriinrange(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_augustuser['LAST_VISITS']=user['LAST_VISITS'].fillna(999)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_august.csv',index=False,encoding='utf-8')18大数据挖掘专家数据预处理1.客户价值分析预处理Out[2]:USER_IDACCOUNTFIRST_VISITLAST_VISITS2982叶亦凯2014/8/1821:41:572016/8/2613:53:463983邓彬彬2015/8/2313:47:172016/8/2117:16:004984张建涛2014/12/2419:26:302016/8/2511:32:596986莫子建2014/9/1111:38:102016/8/2011:15:067987易子歆2015/2/2421:25:342016/8/2812:34:5919大数据挖掘专家在选取的历史客户信息表(user_loss.csv)中,客户最后一次登录时间需要结合历史订单表(info_new.csv)进行统计。此外,在原始数据中,有很多特征并没有用到,所以在合并客户信息表和订单表之前需要选取与本案例中相关的特征,如下代码所示。数据预处理2.客户流失预测预处理In[1]:importpandasaspdimportnumpyasnp#读取数据users=pd.read_csv('../data/user_loss.csv',encoding='gbk')info=pd.read_csv('../data/info_new.csv',encoding='utf-8')print('历史客户信息表的维数:',users.shape)print('历史订单表的维数:',info.shape)Out[1]:历史客户信息表的维数:(2431,38)历史订单表的维数:(6611,21)20大数据挖掘专家数据预处理2.客户流失预测预处理In[2]:#将时间转为时间格式users['CREATED']=pd.to_datetime(