【餐厅订单数据分析】

背景:当评估餐厅经营状况时,数据分析至关重要。如果一家餐厅业绩不佳,首要步骤是收集最新的经营数据,并进行深入分析。通过数据分析,可以准确识别出现的问题,并有针对性地进行商业调整和优化。接下来我们会分析一家餐厅的数据,以期发现并解决当前的经营挑战。

1.认识数据并预处理

如下图所示(该数据为2016年8月某餐厅的一个营业数据,在该份数据中包含三份excel内置表格,其中包括detail_id,order_id,dishes_id等一系列餐厅数据,同时观察表格当中也存在一些空值,所以我们需要对其进行处理)。

 对数据进行预处理(代码如下):

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family']='SimHei' #设置中文字体
%matplotlib inline
#1.加载数据
data1=pd.read_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail1')
data2=pd.read_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail2')
data3=pd.read_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail3')
#2.数据预处理(合并数据,NA等处理),分析数据
data=pd.concat([data1,data2,data3],axis=0) #按照行连接数据
#data.head(5)
#data.info() 查询类型
data.dropna(axis=1,inplace=True) #按列查找,将空列删除,inplace是对原数据进行处理

知识点: 

  • pd_read_excel :读取 Excel 文件
  • pd.concat :数据合并,由于我们在该excel当中内置三份表格,所以我们需要对其进行合并操作
  • data.dropna: 表中含有大量的空的数据,需对其进行处理。

2.最受欢迎的菜并可视化分析

代码如下:

#频数统计,什么菜最受欢迎(对菜名进行频数统计,取最大的前10名)
dishes_count=data['dishes_name'].value_counts()[:10]
#dishes_count
#3.数据可视化matplotlib
dishes_count.plot(kind='line',color='red')
dishes_count.plot(kind='bar',fontsize=16)
for x,y in enumerate(dishes_count):
    plt.text(x,y+2,y,ha='center',fontsize=12) #第一个x代表绘制的位置,y代表高度,第三个y代表绘制文本

结果如下:

根据结果,我们可以知道该餐厅当中最受欢迎的菜是白饭/大碗,在该月份的订单量中,白饭/大碗竟高达323份左右,也符合人们日常生活的满足需求。

知识点:

  • enumerate(dishes_count) 返回一个迭代对象,每次迭代会返回一个元组 (x, y),其中 x 是索引,y 是值。
  • plt.text(x, y + 2, str(y), ha='center', fontsize=12) 在位置 (x, y + 2) 添加文本 y。这里 y + 2 是为了将文本稍微向上移动,以避免与条形图重叠。
  • ha='center' 表示水平居中对齐。

3.订单点菜种类最多并可视化分析(这里我么选择订单点菜种类的top10)

#订单点菜种类最多
data_group=data['order_id'].value_counts()[:10]
data_group.plot(kind='bar',fontsize=16)
data_group.plot(kind='line',color='red')
plt.title('订单点菜种类的Top10')
plt.xlabel('订单ID',fontsize=16)
plt.ylabel('点菜种类',fontsize=16)
for x,y in enumerate(data_group):
    plt.text(x,y,y,ha='center',fontsize=12) 

结果如下:

根据结果,可知8月份餐厅订单点菜种类的前10名,订单id398的点菜种类最多为36种,总体来看平均点菜25个菜品

4.订单id点菜数量top10

#订单id点菜数量top10(分组order_id,counts求和,排序,前10)
data['total_amounts']=data['counts']*data['amounts'] #统计单道菜消费总额
dataGroup=data[['order_id','counts','amounts','total_amounts']].groupby(by='order_id')
Group_sum=dataGroup.sum() #分组求和
sort_counts=Group_sum.sort_values(by='counts',ascending=False)
sort_counts['counts'][:10].plot(kind='bar',fontsize=16)
plt.title('订单id')
plt.xlabel('点菜数量')
plt.ylabel('订单ID点菜数量top10')

结果如下:

知识点:

  •   sort_counts['counts'][:10]:对其进行切片操作,取前10个数据

5.那个订单id消费的金额最多


sort_total_amounts=Group_sum.sort_values(by='total_amounts',ascending=False)
sort_total_amounts['total_amounts'][:10].plot(kind='bar')
plt.xlabel('订单ID')
plt.ylabel('消费金额')
plt.title('消费金额前10')

结果如下:

6.那个订单id平均消费最贵

#那个订单id平均消费最贵
Group_sum['average']=Group_sum['total_amounts']/Group_sum['counts']
sort_average=Group_sum.sort_values(by='average',ascending=False)
sort_average['average'][:10].plot(kind='bar')
plt.xlabel('订单id')
plt.ylabel('消费单价')
plt.title('订单消费单价前10')

结果如下:

7.在一天中什么时间段,点菜量比较集中(hour)

#一天中什么时间段,点菜量比较集中(hour)
data['hourcount']=1 #新列,用做计数器
data['time']=pd.to_datetime(data['place_order_time']) #将时间转换成日期类型存储
data['hour']=data['time'].map(lambda x:x.hour)
gp_by_hour=data.groupby(by='hour').count()['hourcount']
gp_by_hour.plot(kind='bar')

plt.xlabel('小时')
plt.ylabel('下单数量')
plt.title('下单量与小时的关系图')

结果如下:

8.那一天的订餐数量最多

#那一天的订餐数量最多
data['daycount']=1 #新列,用做计数器
data['day']=data['time'].map(lambda x:x.day)
gp_by_day=data.groupby(by='day').count()['daycount']
gp_by_day.plot(kind='bar')

plt.xlabel('8月份日期')
plt.ylabel('点菜数量')
plt.title('点菜量与号的关系图')

结果如下:

9.星期几的人数最多,订餐数最多

#星期几的人数最多,订餐数最多,映射数据列到星期
data['weekcount']=1 #新列,用做计数器
data['weekday']=data['time'].map(lambda x:x.weekday())
gp_by_weekday=data.groupby(by='weekday').count()['weekcount']
gp_by_weekday.plot(kind='bar')
plt.xlabel('星期')
plt.ylabel('点菜数量')
plt.title('点菜量与星期的关系图')

结果如下:(这里的0代表星期一,后续依次递增)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值