餐店订单数据分析实战

数据源:

有用数据字段:

# 加载数据
# 1.订单的长度,shape,columns
# 2. 统计菜名的平均价格(amounts)
# 3.什么菜最受欢迎
# 4.那个订单ID点的菜最多
import pandas as pd
import numpy as np
import xlrd
import matplotlib.pyplot as plt

pd.options.display.max_rows = 100000
data1 = pd.read_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail1',nrows= 100)
data2 = pd.read_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail2',nrows= 100)
data3 = pd.read_excel('meal_order_detail.xlsx',sheet_name='meal_order_detail3',nrows= 100)

# 数据预处理(合并数据,NA的处理),分析数据
data = pd.concat([data1,data2,data3],axis=0)#将文件中的三个sheet按照行进行拼接在一起
# data.head(5)
data.dropna(axis=1,inplace=True)#按照列删除na值,inplace=True在原始的data上进行修改
data.info()#查看数据信息
# 统计八月份卖出菜品的平均价格
df1=round(data['amounts'].mean(),2) #方法一:pandas自带函数mean()平均值函数
df2=round(np.mean(data['amounts']),2) # 方法二:numpy函数处理比pandas快
print(df1)
# 频数统计,什么菜最受欢迎,(对菜名进行频数统计,取最大的前十名)
dishes_count = data['dishes_name'].value_counts() #value_counts统计频次
print(dishes_count)
plot.rcParams['font.sans-serif'] = 'SimHei' #设置中文显示

dishes_count = data['dishes_name'].value_counts()[:10]#默认已经进行降序排数了
print(dishes_count)

# 数据可视化matplotlib

dishes_count = data['dishes_name'].value_counts()[:10]#默认已经进行降序排数了
print(dishes_count)
# 数据可视化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)
    plot.text(x,y+2,y,ha='center',fontsize=12)
#点菜种类最多的订单
data 
plot.show()

plot.text(x,y+2,y,ha='center',fontsize=12)
- x 和 y 是文本标签的位置坐标,其中 x 表示横坐标, y 表示纵坐标。
- y+2 表示在纵坐标上向上偏移 2 个单位,这样可以让文本标签稍微上移一些,避免与数据点重叠。
- y 是要显示的文本内容,即菜品数量的值。
- ha='center' 表示文本水平对齐方式为居中,即文本内容在指定的坐标位置水平居中显示。
- fontsize=12 表示文本的字体大小为 12。
#点菜种类最多的订单
detail_group = data['order_id'].value_counts()[:10]
detail_group.plot(kind= 'bar',fontsize = 16,color=['r','m','b','y','g'])
plot.title('订单点菜的种类Top10')
plot.xlabel('订单ID',fontsize=16)
plot.ylabel('点菜种类',fontsize=16)
for x1,y1 in enumerate(detail_group):
    plot.text(x1,y1+2,y1,ha='center',fontsize=16)
print(detail_group)
plot.show()

color除了 'r' (红色)、 'm' (品红色)、 'b' (蓝色)、 'y' (黄色)、 'g' (绿色)之外,常用的颜色还包括: - 'c' :青色 - 'k' :黑色 - 'w' :白色 - 'orange' :橙色 - 'purple' :紫色 - 'brown' :棕色 - 'pink' :粉色

在 plot() 函数中, kind 参数用于指定绘图的类型。除了'line' 之外,常用的绘图类型还包括: 1. 'line' :绘制折线图(默认) 2. 'bar' :绘制垂直柱状图 3. 'barh' :绘制水平柱状图 4. 'hist' :绘制直方图 5. 'box' :绘制箱线图 6. 'scatter' :绘制散点图 7. 'pie' :绘制饼图

#订单id点菜数量top10(按照order_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['counts'][:10].plot(kind = 'bar',fontsize = 16)
print(sort_counts)
plot.title('订单ID点菜数量top10')
plot.xlabel('订单ID')
plot.ylabel('点菜数量')
plot.show()

#那个订单ID吃的钱最多(排序,前十)
sort_total_amounts = Group_sum.sort_values(by='total_amounts',ascending=False)
sort_total_amounts['total_amounts'][:10].plot(kind='bar')
plot.title('订单ID消费最多top10')
plot.xlabel('订单ID')
plot.ylabel('消费金额')
plot.show()

# 平均消费最贵
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')
plot.title('订单ID消费均单价top10')
plot.xlabel('订单ID')
plot.ylabel('消费均单价')
plot.show()

lambda arguments: expression

其中,

lambda 

是关键字,

arguments 

是函数的参数(可以有多个参数,用逗号分隔),

expression 

是函数的返回值表达式。 以下是一个简单的示例,演示了如何使用lambda函数来定义一个函数并调用它:

# 定义一个简单的lambda函数,实现两数相加
add = lambda x, y: x + y

# 调用lambda函数,并输出结果
result = add(3, 5)
print(result)  # 输出:8
# 一天当中什么时间段点菜量比较集中(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']
print(gp_by_hour)
gp_by_hour.plot(kind = 'bar')
for x,y in enumerate(gp_by_hour):
    plot.text(x,y+2,y,ha='center',fontsize = 16)
plot.title('下单数与小时的关系图')
plot.xlabel('小时')
plot.ylabel('下单数量')
plot.show()



#八月份那天订餐数量较多
data['daycount'] = 1
data['day']=data['time'].map(lambda x:x.day)
gp_by_day = data.groupby(by = 'day').count()['daycount']
print(gp_by_day)
gp_by_day.plot(kind = 'bar')
plot.title('八月日期点餐')
plot.xlabel('日期')
plot.ylabel('点参数')
for x1,y1 in enumerate(gp_by_day):
    plot.text(x1,y1+2,y1,ha='center',fontsize=16)
plot.show()


#星期几订餐数量较多
data['weekcount'] = 1
data['weekday'] = data['time'].map(lambda x2:x2.weekday())
gp_by_weekday=data.groupby(by='weekday').count()['weekcount']
gp_by_weekday.plot(kind='bar')
plot.show()

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值