餐厅订单数据分析:订单维度和时间维度

1. 针对不同维度进行数据分析:

针对订单order_id:

  • 什么菜最受欢迎
  • 点菜的种类
  • 点菜的数量
  • 消费金额最大
  • 平均消费

针对时间日期进行分析:

  • 点菜量比较集中的时间
  • 哪一天订餐数量最大
  • 星期几就餐人数最多

2. 技术点

  • 导入数据:pd.read_excel()
  • 拼接数据:pd.concat([列1,…],axis=0)
  • 删除空值:data.dropna(axis=1,inplace=True)
  • 分组进行统计(分组求和):.groupby(by=‘str’)
  • 排序,切片Top10
  • 绘制柱状图走势和高度
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'  #设置中文显示

加载数据、数据预处理

# 1.加载数据
data1 = pd.read_excel('./Data/cooking_data1/meal_order_detail.xlsx',sheet_name='meal_order_detail1')
data2 = pd.read_excel('./Data/cooking_data1/meal_order_detail.xlsx',sheet_name='meal_order_detail2')
data3 = pd.read_excel('./Data/cooking_data1/meal_order_detail.xlsx',sheet_name='meal_order_detail3')
# 2.数据预处理(合并数据,NA处理),分析数据
data = pd.concat([data1,data2,data3],axis=0)  #按照行进行拼接数据;列连接axis=1
#data.head(5)
#data.info()
#这里我们需要的数据是:order_id counts  amounts  place_order_time
#一些空值列需要删除
data.dropna(axis=1,inplace=True)    #按照列删除na列,并且修改源数据
data.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 10037 entries, 0 to 3610
Data columns (total 11 columns):#   Column            Non-Null Count  Dtype
---  ------            --------------  -----         0   detail_id         10037 non-null  int64         1   order_id          10037 non-null  int64         2   dishes_id         10037 non-null  int64         3   dishes_name       10037 non-null  object        4   itemis_add        10037 non-null  int64         5   counts            10037 non-null  int64         6   amounts           10037 non-null  int64         7   place_order_time  10037 non-null  datetime64[ns]8   add_inprice       10037 non-null  int64         9   picture_file      10037 non-null  object        10  emp_id            10037 non-null  int64
dtypes: datetime64[ns](1), int64(8), object(2)
memory usage: 941.0+ KB
# 统计8月份卖出菜品的平均价格
round(data['amounts'].mean(),2)     #方法一:pandas自带的mean()函数
round(np.mean(data['amounts']),2)   #方法二:numpy函数处理(更快)
44.82

一、订单维度

(1)频数统计:什么菜最受欢迎? (对菜名进行频数统计:value_counts() 计数,取最大的前10名:切片)

dishes_count = data['dishes_name'].value_counts()[:10]
dishes_count
# 3.数据的可视化matplotlib——将菜名作为横轴,销量作为纵轴
dishes_count.plot(kind='line',color=['r'])
dishes_count.plot(kind='bar',fontsize=16,alpha=0.5)               #设置字体大小为16
for x,y in enumerate(dishes_count):print(x,y)plt.text(x,y+2,y,ha='center',fontsize=12)   #plt.text(位置,高度+偏移量,内容,横轴位置)
0 323
1 269
2 239
3 216
4 189
5 188
6 187
7 186
8 178
9 173

(2)哪个订单点菜的种类最多(非数量)

# data.groupby(by='order_id').value_counts()            #前面的知识
data_group = data['order_id'].value_counts()
data_group = data['order_id'].value_counts()[:10]        #取前10:订单id 种类数
data_group.plot(kind='bar',fontsize=16,color=['r','m','b','y','g'],alpha=0.5)
plt.title('订单点菜的种类Top10')
plt.xlabel('订单ID',fontsize=16)
plt.ylabel('点菜种类',fontsize=16)
for x,y in enumerate(data_group):#print(x,y)plt.text(x,y+3,y,ha='center',fontsize=12)
# 8月份餐厅订单点菜种类前10名,平均点菜25个菜品

(3)哪个订单ID点菜的数量最多Top10 (分组order_id, counts()求和, 排序, 前10) SQL也可

data['total_amounts'] = data['counts']*data['amounts'] #统计单道菜品的消费总额,给表中增加一列total_amounts
dataGroup = data[['order_id','counts','amounts','total_amounts']]    #取出其中四列作为新的表dataGroup
dataGroup = dataGroup.groupby(by='order_id')    #取出含有这四列的表并按order_id分组
Group_sum = dataGroup.sum( )   #分组后的数据表求和 counts、amounts、total_amounts列
sort_counts = Group_sum.sort_values(by='counts',ascending=False)   #按照求和后的counts排序,降序
#sort_counts  #查看数据
#sort_counts['counts']  #查看counts这一列数据(分组#排序后的)
sort_counts_10 = sort_counts['counts'][:10]   #取Top10
sort_counts_10.plot(kind='bar',fontsize=16,color=['g'],alpha=0.6)
plt.title('订单ID点菜数量Top10',fontsize=12)
plt.xlabel('订单ID',fontsize=12)
plt.ylabel('点菜数量',fontsize=12)
for x,y in enumerate(sort_counts_10):plt.text(x,y+1,y)
# 八月份订单点菜数量前十名,平均30道菜

(4)哪个订单ID吃的钱最多、消费最多的ID(排序) Group_sum中已经分组求和了,只需要排序即可

sort_total_amounts = Group_sum.sort_values(by='total_amounts',ascending=False)   #降序
# sort_total_amounts
sort_total_amounts_10 = sort_total_amounts['total_amounts'][:10]
sort_total_amounts_10.plot(kind='bar',fontsize=16,color=['r','g','b'],alpha=0.3)
plt.xlabel('订单ID',fontsize=12)
plt.ylabel('消费金额',fontsize=12)
plt.title('消费金额Top10',fontsize=15)
Text(0.5, 1.0, '消费金额Top10')

取中间数据,不是Top10,怎么使用索引

# 消费总额排序后,取中间第100到110之间:
sort_total_amounts_mi=sort_total_amounts['total_amounts'][100:110]
sort_total_amounts_mi
order_id
764     830
846     829
1079    829
1120    827
1125    826
777     824
716     824
833     823
783     823
728     823
Name: total_amounts, dtype: int64

(5)哪个订单ID平均消费最贵 = 消费总额/菜总数量

Group_sum['average'] = Group_sum['total_amounts']/Group_sum['counts']
# Group_sum 现在一共5列,增加了average列  在按照average进行排序,降序
Group_sum.sort_values(by='average',ascending=False)
sort_average = Group_sum.sort_values(by='average',ascending=False)
sort_average['average']    #排序后取出average列
sort_average['average'][:10]
sort_average['average'][:10].plot(kind='bar',fontsize=16,color=['r'],alpha=0.3)
plt.title('订单ID每个菜品的平均消费',fontsize=16)
plt.xlabel('订单ID')
plt.ylabel('菜品平均单价')
for x,y in enumerate(sort_average['average'][:10]):#print(x,y)plt.text(x,y+1,round(y,2),ha='center')
sort_average['average'].plot(kind='bar')
<AxesSubplot:title={'center':'订单ID每个菜品的平均消费'}, xlabel='order_id', ylabel='菜品平均单价'>

二、时间维度

(1)点菜数和小时关系图:一天当中什么时间段,点菜量比较集中(hour)

data['hourcount'] = 1   #新列,用作计数器
data['time'] = pd.to_datetime(data['place_order_time']) #将时间转换为日期类型存储
data['hour'] = data['time'].map(lambda x: x.hour)
# data   #到这里一共增加了3列数据,计数列hourcount、日期类型time列、时间hour列
gp_by_hour = data.groupby(by='hour').count()['hourcount']
# gp_by_hour
gp_by_hour.plot(kind='bar',fontsize=16,alpha=0.3)
plt.title('下单数与小时的关系图')
plt.xlabel('小时',fontsize=15)
plt.ylabel('点菜数量',fontsize=15)
Text(0, 0.5, '点菜数量')

(2)哪一天订餐数量最多

data['daycount'] = 1 #新列,计数列
data['day'] = data['time'].map(lambda x:x.day)   #新列,天的表示
# data
gp_by_day = data.groupby(by='day').count()['hourcount']
#gp_by_day
gp_by_day.plot(kind='bar',fontsize=15,color=['r'],alpha=0.3)
plt.xlabel('8月份日期',fontsize=14)
plt.ylabel('点菜数量',fontsize=14)
plt.title('每天的订餐数量',fontsize=14)
Text(0.5, 1.0, '每天的订餐数量')

(3)星期几人数最多? 订餐数最多? 映射数据到星期

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',alpha=0.3)
plt.xlabel('星期')
plt.ylabel('订餐数')
plt.title('点菜数量与星期关系图')
Text(0.5, 1.0, '点菜数量与星期关系图')

针对不同维度进行数据分析:

针对订单order_id:

  • 什么菜最受欢迎
  • 点菜的种类
  • 点菜的数量
  • 消费金额最大
  • 平均消费

针对时间日期进行分析:

  • 点菜量比较集中的时间
  • 哪一天订餐数量最大
  • 星期几就餐人数最多

技术点

  • 导入数据:pd.read_excel()
  • 拼接数据:pd.concat([列1,…],axis=0)
  • 删除空值:data.dropna(axis=1,inplace=True)
  • 分组进行统计(分组求和):.groupby(by=‘str’)
  • 排序,切片Top10
  • 绘制柱状图走势和高度

实战项目:餐厅订单数据分析:订单维度和时间维度相关推荐

  1. python大数据实战项目_商业数据分析比赛实战,内附项目代码

    如果你对商业数据分析感兴趣.想要积累更多项目经验,那么就来看看下面这项目吧. 数据竞赛平台和鲸社区最近正在举办一场数据分析大赛,不仅带来了22w奖金和30w创业基金支持,更是提供了统一的在线比赛环境, ...

  2. 数据分析项目实战项目一:CPC广告优化以及bilibili订单分析(下)

    第一章:电商平台数据分析思路与bilibili会员购介绍 1.1互联网电商平台数据分析的一般思路 互联网电商平台数据分析的一般思路一般分为以下三步:找出问题,分析问题,解决问题.其中,找出问题包括描述 ...

  3. python项目--餐厅订单数据分析

    导入包,加载数据 数据是网上获取的,数据见链接: 餐厅订单数据分析的数据. 通过分析之后我们要用到以下三个包,分别是numpy.pandas.matplotlib.加载数据我们采用pandas中的re ...

  4. Python数据分析实战 —— 天猫订单数据分析

    文章目录 项目介绍 数据介绍 导入部分库 数据预处理 数据格式整理 异常值分析 数据分析 描述性统计 周趋势.日趋势分析 产品价格分析 地区分析 转化率分析 总结 项目介绍 本项目将对2020年2月份 ...

  5. python 京东_Python数据分析-京东订单数据分析实战

    本次数据来源于京东,类目为大家电-家用电器-冰箱,抽取2020年5月25日10%数据,数据量为 70k+,在 jupyer notebook 内进行分析. 数据文件: 链接:迅雷云盘:提取码:ezQq ...

  6. 数据分析:餐厅订单数据分析

    数据分析:餐厅订单数据分析 作者:i阿极 作者简介:Python领域新星作者.多项比赛获奖者:博主个人首页

  7. UNIAPP实战项目笔记45 订单页面布局完成和数据渲染

    UNIAPP实战项目笔记45 订单页面布局完成和数据渲染 实际案例图片 订单页面 具体内容图片自己替换哈,随便找了个图片的做示例 具体位置见目录结构 通过 模拟数据list 来实现数据渲染 完善布局页 ...

  8. 在线教育数据分析实战项目案例

    数据分析实战项目案例 数据分析概览 数据分析经常遇到的问题 解决思路 常规产品指标 在线教育产品指标 市场效果广告指标 搭建指标系统流程 渠道的分类 针对搜索引擎,信息流广告如何稳定提高ROI 利用M ...

  9. 什么是互联网大厂_仅限今天!大厂最热数据分析经典实战项目大公开!

    原标题:仅限今天!大厂最热数据分析经典实战项目大公开! 如今,全球早已步入数据时代,随着行业的高速发展,相关岗位缺口已超150万,且薪资超同行业50%.未来十年,数据细分岗位将扩张5倍,各行业数据人才 ...

最新文章

  1. docker 安装oracle_Windows系统下安装Docker,包你满意!
  2. 直播回顾 | 关于Apollo 5.0控制在环仿真技术的分享
  3. pythonsklearn乳腺癌数据集_使用sklearn的样本数据集
  4. CVPR!你凭什么收录我3篇论文!?
  5. 微量元素重塑新生态-农业大健康·李喜贵:谋定功能性农业
  6. 利用Mybatis写第一个数据库操作的程序
  7. 当云原生遇到混合云:如何实现“求变”与“求稳”的平衡
  8. Open3d之非阻塞可视化
  9. English Resources
  10. 口令破解(概述、暴力破解、字典破解、Hydra)
  11. python星号倒金字塔结构_Python语言应用2020智慧树章节测试答案
  12. 免费的天气API相关编码(中国城市代码检索)
  13. CSAPP家庭作业答案7 8 9章
  14. 计算机一级单元格填充,电脑Excel表格怎么对不连续的单元格进行批量填充
  15. oracle expdp parallel,关于EXPDP中的PARALLEL参数
  16. Spring 第二篇 注解+ xml 配置 与 纯注解开发 与集成 junit测试
  17. mysql存储指纹_保存图片指纹(一串乱码)到mysql, 求分析
  18. PMOS与NMOS场效应管相关知识点
  19. 假设检验(显著性检验)
  20. 创业过程中的63个技术问题

热门文章

  1. bandit(21-25)
  2. Lab 0: Setting up a productive workflow
  3. window镜像制作
  4. Android 学习之垂直切换的圆角 Banner 和垂直指示器
  5. GAMES101笔记_Lec07~09_着色 Shading
  6. matlab中set的用法,set函数(set函数的使用方法)
  7. 基于AT89C51单片机的智能浇花系统设计
  8. 五月集训总结——来自阿光
  9. 【speach】语音信号基础
  10. 如何选相应的尺寸码数