Python实战项目——餐厅订单数据分析(一)

简介: Python实战项目——餐厅订单数据分析(一)

项目背景

餐厅经营的好坏需要用数据来说明,如果一个餐厅生意惨淡,那么应该先收集最近的数据,然后进行数据分析,再对应相应出现的问题进行解决和做出对应的商业调整。今天开始我们分析一来家餐厅的数据。

认识数据并预处理

拿到一个数据,第一步就是要进行数据预处理。我们经常遇见的数据存在噪声、冗余、关联性、不完整性等。

数据预处理的常见方法

(1)数据清理:将数据中缺失的值补充完整、消除噪声数据、识别或删除离群点并解决不一致性。

(2)数据集成:将多个数据源中的数据进行整合并统一存储

(3)数据变换:通过平滑聚集、数据概化、规范化等方式将数据转换成适用于数据挖掘的形式

(4)数据归约:数据挖掘经常数据量很大,通过对数据集进行规约或简化,可以保持元数据的完整性,且数据归约后的结果与规约前的结果几乎相同。


这里我们简单介绍,不做深入解释。这不是我们今天的主要内容。

数据介绍

我们的数据是一个餐厅订单,其中包括detail_id,order_id,dishes_id等一系列餐厅数据。拥有3个sheet,数据项大约1w左右。还有各种各样的美食和酒水,看的我流口水(蒜蓉生蚝,蒙古烤羊腿,桂圆枸杞鸽子汤,38度剑南春 ,美妙绝伦之白莲花,姜葱炒花蟹)

导入数据

现在我们开始导入数据到notebook

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei' ## 设置中文显示
%matplotlib inline
# 加载数据
data1 = pd.read_excel('D:\\meal_order_detail.xlsx',sheet_name='meal_order_detail1')
data2 = pd.read_excel('D:\\meal_order_detail.xlsx',sheet_name='meal_order_detail2')
data3 = pd.read_excel('D:\\meal_order_detail.xlsx',sheet_name='meal_order_detail3')

数据预处理

# 数据预处理(合并数据,NA等处理),分析数据
data = pd.concat([data1,data2,data3],axis=0)  #按照行进行拼接数据
# data.head(5)
data.dropna(axis=1,inplace=True) #按照列删除na列,并且修改源数据
data.info()

简单统计

接下来我们进行数据的简单统计

统计卖出菜品的平均价格

round(data['amounts'].mean(),2)  #方法一:pandas自带函数
round(np.mean(data['amounts']),2)  #方法二:numpy函数处理

两种方法都可以,但我自己习惯第一种。

频数统计,什么菜最受欢迎 (对菜名进行频数统计,取最大前10名)

dishes_count = data['dishes_name'].value_counts()[:10]
• 1

结果如图所示,果然大家都爱吃白饭。。

数据可视化matplotlib

既然大家都爱吃白饭,那我们就直接可视化上面那个结果好了。

dishes_count.plot(kind='line',color=['r'])
dishes_count.plot(kind='bar',fontsize=16)
for x,y in enumerate(dishes_count):
    print(x,y)
    plt.text(x,y+2,y,ha='center',fontsize=12)

8月份餐厅订单点菜种类前10名,平均点菜25个菜品

data_group = data['order_id'].value_counts()[:]
data_group.plot(kind='bar',fontsize=16,color=['r','m','b','y','g'])
plt.title('订单点菜的种类Top10')
plt.xlabel('订单ID',fontsize=16)
plt.ylabel('点菜种类',fontsize=16)

8月份订单点菜数量前10名

这一步首先我们的进行简单操作,我们求订单ID点菜数量Top10,因此分组order_id,counts求和,排序,前十。

统计单道菜消费总额

data['total_amounts'] =data['counts']*data['amounts'] 

分组求和

sort_counts =Group_sum.sort_values(by='counts',ascending=False)
sort_counts['counts'][:10].plot(kind='bar',fontsize=16)
plt.xlabel('订单ID')
plt.ylabel('点菜数量')
plt.title('订单ID点菜数量Top10')

哪个订单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')

哪个订单ID平均消费最贵

Group_sum['average'] = Group_sum['total_amounts']/Group_sum['counts']
sort_average = Group_sum.sort_values(by='average',ascending=False)
sort_average['average'][:].plot(kind='bar')
plt.xlabel('订单ID')
plt.ylabel('消费单价')
plt.title('订单消费单价前10')

一天当中什么时间段,点菜量比较集中(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('点菜数与小时的关系图')

哪一天订餐数量最多

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('点菜数量与日期的关系图')
#拓展:排序,取点菜量最大的前5天

查看星期几人数最多,订餐数最多,映射数据到星期
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('点菜数量与星期关系图')

总结

以上就是对数据的简单认识和处理,通过作图让我们能够更加清晰的认识数据,加深了解数据之间的联系和区别

不同维度进行数据分析:

针对订单order_id:

什么菜最受欢迎

点菜的种类

点菜的数量

消费金额最大

平均消费

针对时间日期进行分析:

点菜量比较集中的时间

哪一天订餐量最大

星期几就餐人数最多

技术点:

拼接数据:pd.concat([列1,…])

分组进行统计(分组求和)

排序,切片Top10

绘制柱状图走势和高度


目录
打赏
0
1
0
0
6
分享
相关文章
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
使用Python进行数据分析的入门指南
本文将引导读者了解如何使用Python进行数据分析,从安装必要的库到执行基础的数据操作和可视化。通过本文的学习,你将能够开始自己的数据分析之旅,并掌握如何利用Python来揭示数据背后的故事。
Python装饰器实战:打造高效性能计时工具
在数据分析中,处理大规模数据时,分析代码性能至关重要。本文介绍如何使用Python装饰器实现性能计时工具,在不改变现有代码的基础上,方便快速地测试函数执行时间。该方法具有侵入性小、复用性强、灵活度高等优点,有助于快速发现性能瓶颈并优化代码。通过设置循环次数参数,可以更准确地评估函数的平均执行时间,提升开发效率。
112 61
Python装饰器实战:打造高效性能计时工具
通义灵码2.0实现数据分析小项目
本文介绍了使用通义灵码2.0实现一个数据分析小项目的全过程。从数据清洗、特征分布可视化到构建和评估多个机器学习模型,详细展示了每一步的操作和结果。通过简单的描述和提问,通义灵码2.0能够自动生成并优化代码,极大地简化了开发流程。最终,项目成功完成了数据的分析和预测模型的构建,验证了通义灵码2.0的强大功能和易用性。
通义灵码2.0实现数据分析小项目
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
129 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
基于 DIFY 的自动化数据分析实战
本文介绍如何使用DIFY搭建数据分析自动化流程,实现从输入需求到查询数据库、LLM分析再到可视化输出的全流程。基于经典的employees数据集和DIFY云端环境,通过LLM-SQL解析、SQL执行、LLM数据分析及ECharts可视化等模块,高效完成数据分析任务。此方案适用于人力资源分析、薪酬管理等数据密集型业务,显著提升效率并降低成本。
101 3
Python爬虫实战:股票分时数据抓取与存储
Python爬虫实战:股票分时数据抓取与存储
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
62 20
|
2月前
|
课程设计项目之基于Python实现围棋游戏代码
游戏进去默认为九路玩法,当然也可以选择十三路或是十九路玩法 使用pycharam打开项目,pip安装模块并引用,然后运行即可, 代码每行都有详细的注释,可以做课程设计或者毕业设计项目参考
80 33
这份Excel+Python飞速搞定数据分析手册,简直可以让Excel飞起来
本书介绍了如何将Python与Excel结合使用,以提升数据分析和处理效率。内容涵盖Python入门、pandas库的使用、通过Python包操作Excel文件以及使用xlwings对Excel进行编程。书中详细讲解了Anaconda、Visual Studio Code和Jupyter笔记本等开发工具,并探讨了NumPy、DataFrame和Series等数据结构的应用。此外,还介绍了多个Python包(如OpenPyXL、XlsxWriter等)用于在无需安装Excel的情况下读写Excel文件,帮助用户实现自动化任务和数据处理。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等