数据分析项目——餐厅订单数据分析

提升自己,掌握数据分析的能力,最快的方式就是实践! 

这里是一个经典的数据分析项目——餐厅订单数据分析,有需要项目配套数据集的可以关注私信我免费获取(●'◡'●)

PS:本文中全部代码都在Jupyter Notebook中编写完成,可以使用Jupyter Notebook或者Jupyter Lab直接运行。

第一步我们要理清数据分析需要做些什么,首先呢是加载数据,然后是数据的预处理 分析数据,最后呢是数据的可视化。

第二步我们要梳理一下获取到的有用信息,列举几个,比如: 

1.订单表的长度,shape,columns

2.统计菜名的平均价格(amounts)

3.什么菜最受欢迎

4.哪个订单ID点的菜最多

......

数据集图例:

然后就是紧张刺激的代码编写环节啦!

数据分析代码展示

一、数据预处理及最受欢迎的菜可视化分析

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt #导入所需软件包

# 1.加载数据(分别获取excel表格三个工作表的数据)
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) #按列删除na列,并修改原数据
data.info()

# 统计卖出菜品的平均价格
round(data['amounts'].mean(),2) #方法一:pandas自带函数
round(np.mean(data['amounts']),2) #方法二:numpy函数处理

# 频数统计,什么菜最受欢迎 (对菜名进行频数统计,取最大的前十名)
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):
    print(x,y)
    plt.text(x,y+2,y,ha='center',fontsize=12) #在每个柱状图上加对应数字

二、订单消费维度可视化分析

# 订单点菜的种类最多
data_group = data['order_id'].value_counts()[:10]
data_group.plot(kind='bar',fontsize=16)
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+1,y,ha='center',fontsize=12)
# 计算平均值
average_y = np.mean(data_group.values)
print("y的平均值:", average_y)
# 8月份餐厅订单点菜种类前10名,平均点菜27个菜品

#订单ID点菜数量Top10(分组order_id,counts求和,排序,前十)
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.xlabel('订单ID')
plt.ylabel('点菜数量')
plt.title('订单ID点菜数量Top10')
#8月份订单点菜数量前十名

#消费金额最大的订单有哪些(排序)
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'][: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'][:10].plot(kind='bar')
plt.xlabel('订单ID')
plt.ylabel('消费单价')
plt.title('消费单价前10')

average_y = np.mean(sort_average['average'].values) #全部订单的平均消费 
print("y的平均值:", average_y)

三、日期与时间维度进行点菜量分析

#一天当中什么时间段点菜量比较集中
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('下单数与小时的关系图')
for x,y in enumerate(gp_by_hour):
    plt.text(x,y+1,y,ha='center',fontsize=12) 

#哪一天订餐数量最多
data['daycount'] = 1 #新列,用作计数器
data['day'] = data['time'].map(lambda x:x.day) #解析出天
gp_by_day = data.groupby(by='day').count()['daycount'] #按天分组并计数
top_five_days = gp_by_day.sort_values(ascending=False).head(5) #按点菜数量排序并取前五天
top_five_days.plot(kind='bar',color='blue')  
plt.xlabel('8月份日期')
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.plot(kind='bar')
plt.xticks(range(7),['1','2','3','4','5','6','7']) # 设置 x 轴的刻度位置和标签
plt.xlabel('8月份星期')
plt.ylabel('点菜数量')
plt.title('点菜数量与星期关系图')

OK,我们的代码部分到这里就展示完毕了,那么最后我们简单做个总结,本次餐厅订单数据分析都通过哪些维度去分析思考呢,主要是分为两个维度:

针对订单order_id:
    什么菜最受欢迎
    点菜的种类
    点菜的数量
    消费金额最大
    平均消费

针对时间日期进行分析:
    点菜量比较集中的时间
    哪一天订餐量最大
    星期几就餐人数最多

最后的最后呢,有想练习的朋友可以找我要数据集亲手实践一下!

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值