数据分析:餐厅订单数据分析
作者:i阿极
作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页
😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!👍👍👍
📜📜📜如果有小伙伴需要数据集和学习交流,文章下方有交流学习区!一起学习进步!💪
文章目录
- 数据分析:餐厅订单数据分析
- 一、前言
- 二、数据预处理
- 三、统计卖出菜品的平均价格
- 四、对菜名进行频数统计(取最大前10名)并可视化
- 五、订单ID点菜数量Top10
- 六、统计消费最多的订单ID
- 七、统计中午11点-晚上22点订单量
- 八、统计一个星期中哪一天订单量最多
- 总结
一、前言
目前我国餐饮行业已进入成熟阶段,增长势头不减,整体水平逐年提升,综合水平和发展质量不断提高,发展步伐加快。同时经历多年的发展与市场竞争,中国餐饮业发展已经进入了投资主体多元化、经营业态多样化、经营模式连锁化和行业发展产业化的新阶段,中国餐饮业的发展势头持续强劲,发展前景更加看好。
改革开放以来,随着中国经济的快速发展,生产能力和人民收入水平的不断提高,中国从七八十年代的“吃饭难”到九十年代的“吃饱”,再到二十一世纪以来的不断追求吃特色、吃健康、吃营养、吃便捷、吃文化、吃休闲。中国餐饮行业伴随经济发展,不仅成为人民生活水平和消费能力提升的见证,也逐步成为扩内需、促销费、稳增长、惠民生的支柱产业。
同时随着互联网突飞猛进的发展和普及,“互联网+”已成为一个时代趋势,餐饮行业成为线上互联网连接线下的最大入口。整个餐饮行业包括餐饮食材供应领域,互联网餐饮行业一站式交易平台的进入改变了传统的餐饮行业的发展,将传统的线下交易搬到了线上,加快了行业的流通和服务的普及。
餐饮行业作为传统行业,为了提高订单量和降低成本。对某餐厅现有的数据进行可视化分析。
二、数据预处理
1.前期导入需要准备的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
2.加载数据
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')
3.按照行对数据合并
data = pd.concat([data1,data2,data3],axis=0)
data.head(5)
4.按照列删除na列,并且修改源数据
data.dropna(axis=1,inplace=True)
data.info()
三、统计卖出菜品的平均价格
round(data['amounts'].mean(),3) #方法一:pandas自带函数
round(np.mean(data['amounts']),3) #方法二:numpy函数处理
结果:
44.821
四、对菜名进行频数统计(取最大前10名)并可视化
1.首先,统计出前十的菜名
dishes_count = data['dishes_name'].value_counts()[:10]
print(dishes_count)
2.将前十的菜名进行可视化
dishes_count.plot(kind='bar',fontsize=16)
for x,y in enumerate(dishes_count):plt.text(x,y+2,y,ha='center',fontsize=12)#显示出数量并在中心点
五、订单ID点菜数量Top10
1.对订单ID进行分组求和
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
2.对订单ID前十点菜数量进行可视化
sort_counts['counts'][:10].plot(kind='bar',fontsize=16)
plt.xlabel('订单ID')
plt.ylabel('点菜数量')
plt.title('订单ID点菜数量Top10')
六、统计消费最多的订单ID
1.将订单ID进行排序
sort_total_amounts = Group_sum.sort_values(by='total_amounts',ascending=False)
sort_total_amounts
2.可视化
sort_total_amounts['total_amounts'][:10].plot(kind='bar')
plt.xlabel('订单ID')
plt.ylabel('消费金额')
plt.title('消费金额前10')
七、统计中午11点-晚上22点订单量
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
2.可视化
gp_by_hour.plot(kind='bar')
plt.xlabel('小时')
plt.ylabel('点菜数量')
plt.title('点菜数与小时的关系图')
八、统计一个星期中哪一天订单量最多
data['weekcount'] = 1
data['weekday'] = data['time'].map(lambda x:x.weekday())
gp_by_weekday = data.groupby(by='weekday').count()['weekcount']
gp_by_weekday
gp_by_weekday.plot(kind='bar')
plt.xlabel('星期')
plt.ylabel('点菜数量')
plt.title('点菜数量与星期关系图')
总结
为什么纸上谈兵不行?纸上谈兵太理想化了,把自己没有发现的问题隐藏了,当成了不存在的问题。只有实际多多亲自动手,才会发现有太多的问题是书上没提到的,也是自己没想到的。才会发现,一个小小的问题也要搞上半天。当然,如果你基础巩固的话,那这些问题应该都是可以被你解决的。熟练后,就不认为这些问题了。
不要看代码不难就感觉会了,只有自己的手打一遍,没有错误,编程的严谨些决定了,你错一个字母都不行。所以大家一定要注意,编程是自己打出来的,不是复制,粘贴你就会了,以后碰到了,还是不会。