【餐厅订单数据分析】

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

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代表星期一,后续依次递增)

### 餐厅订单数据分析项目实践方法 #### 数据收集与预处理 为了有效开展餐厅订单数据分析,需先完成数据的收集工作。此阶段涉及顾客订单记录、消费金额以及就餐时间等多项指标的信息采集,并对其进行必要的清洗和整理以确保后续分析的质量[^2]。 #### 客户行为模式探索 利用所获得的数据集,可以通过多种方式来解析客户的购买倾向及其背后隐藏的行为特征。例如,借助聚类算法识别不同类型消费者群体;或是运用序列模式挖掘技术揭示特定时间段内的高频交易路径等手段深入理解目标受众的需求特点[^1]。 #### 价格敏感度评估 针对不同价位区间内产生的销售量差异展开研究,以此衡量潜在买家对于成本变动的态度反应。此类测试通常会设计对照实验来进行对比观察,从而得出更加精准可靠的结论用于指导未来的营销决策制定过程中的定价环节优化方向的选择。 #### 菜品关联规则学习 采用Apriori或其他相似项集挖掘工具对历史点餐明细加以剖析,旨在找出那些经常被一同选购的商品组合形式。这些洞察不仅有助于提升菜单布局合理性,还能为促销活动策划提供更多创意灵感来源。 #### 市场竞争态势监测 定期搜集同行业内其他品牌的相关情报资料并建立相应的数据库档案库,以便随时跟踪其最新动态和发展趋势。通过对竞品优势劣势进行全面剖析评价之后再结合自身实际情况作出相应调整措施,力求在市场上占据有利地位。 ```python import pandas as pd from mlxtend.frequent_patterns import apriori, association_rules # 加载虚构餐饮企业订单详情数据集 data = pd.read_csv('restaurant_orders.csv') # 应用 Apriori 算法寻找频繁项集 frequent_itemsets = apriori(data, min_support=0.05, use_colnames=True) # 计算关联规则 rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1) print(rules.head()) ``` #### 销售额周期性分析实例展示 基于已有记录绘制出每周各日总营业额走势图表后可直观看出存在明显规律性的波动现象。进一步通过分组聚合操作计算每星期具体哪几天贡献较大份额收入,进而辅助管理层合理安排运营计划和服务资源配置[^4]。 ```python import matplotlib.pyplot as plt # 对星期销售额情况进行分组聚合统计 data_gb = data[['weekday_name', 'price']].groupby(by='weekday_name') number = data_gb.agg(np.sum).sort_values(by=['price'], ascending=False) # 可视化结果 plt.figure(figsize=(8,6)) plt.bar(number.index, number['price']) plt.title('Weekly Sales Distribution') plt.xlabel('Weekday Name') plt.ylabel('Total Price (USD)') plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值