欢迎光临散文网 会员登陆 & 注册

餐厅订单数据分析(源码自用)

2023-03-17 19:44 作者:无真凡尘  | 我要投稿

import pandas as pd

import numpy as np

from matplotlib import pyplot as plt

plt.rcParams['font.sans-serif'] = 'SimHei'   # 设置中文



'''

分析可得信息

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

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

3.什么菜最受欢迎

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

......

'''


# 1 加载数据

data1 = pd.read_excel("meal_order_detail.xls",sheet_name="meal_order_detail1")

data2 = pd.read_excel("meal_order_detail.xls",sheet_name="meal_order_detail2")

data3 = pd.read_excel("meal_order_detail.xls",sheet_name="meal_order_detail3")


# 2 数据预处理(合并数据,NA处理),分析数据

data = pd.concat([data1,data2,data3],axis=0)  # 上下拼接

data.dropna(axis=1,inplace=True)  # 按列删除na列,并且修改源数据


# 统计8月卖出菜品的平均价格

average1 = round(data['amounts'].mean(),2)   # 方法一:pandas自带函数

average2 = round(np.mean(data['amounts']),2)   # 方法二:numpy函数处理


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

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

'''

# 3 数据可视化matplotlib

dishes_count.plot(kind='line',color='r')  #顶部显示折线

dishes_count.plot(kind='bar',fontsize=16)

for x,y in enumerate(dishes_count):    #顶部显示数字

    plt.text(x,y+2,y,ha='center',fontsize=12)

plt.show()


# 订单点菜的种类最多

data_group = data['order_id'].value_counts()[:10]

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)

plt.show()

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


# 订单ID点菜数量Top10(分组order_id,counts求和,排序,前10)

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')

# plt.show()

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


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

# plt.show()


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

# plt.show()


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

# plt.show()


# 8月份哪一天订餐数量最多

data['daycount'] = 1

data['day'] = data['time'].map(lambda x:x.day)  # 解析出天

gp_by_day = data.groupby(by='day').count()['daycount']

# rank = gp_by_day.sort_values(ascending=False)[:5]

# rank.plot(kind='bar')

gp_by_day.plot(kind='bar')

plt.xlabel('8月份日期')

plt.ylabel('点菜数量')

plt.title('点菜数量与日期的关系图')

plt.show()

# 拓展:排序,取点菜量最大的前5天(Done)


# 查看星期几人数最多,订餐数最多,映射数据到星期

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('点菜数量与星期的关系图')

plt.show()

'''


'''

不同维度进行数据分析:

针对订单order_id:

        什么菜最受欢迎

        点菜的种类

        点菜的数量

        消费金额最大

        平均消费

针对时间日期进行分析:

        点菜量比较集中的时间

        哪一天订餐数量最大

        星期几就餐人数最多

技术点:

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

        分组统计(求和)

        排序,切片Top10

        绘制柱状图走势和高度

        

'''


餐厅订单数据分析(源码自用)的评论 (共 条)

分享到微博请遵守国家法律