数据分析实例-餐饮行业分析

简介: 数据分析实例-餐饮行业分析

本次数据分析案例共有8道题

开发工具:jupyter bootbook

话不多说,首先导入本次案例需要用到的包

# 导包
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import warnings
warnings.filterwarnings('ignore')
plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示
plt.rcParams['axes.unicode_minus'] = False   #解决符号无法显示

1. 读取“餐饮订单”表格数据命名为order,并查看第5行到第10行数据。

order = pd.read_excel('餐饮订单.xlsx')
order.head(11).tail(6)

巧妙的利用head()和tail()来实现读取任意区间的数据

2. 读取”就餐人数”表格数据命名为customer,并按就餐人数进行升序排序,并查看第5行到第10行数据。

customer = pd.read_excel('就餐人数.xlsx')
customer.sort_values(by='就餐人数')
customer.head(11).tail(6)

3.为order表增加一列“时间段”,将16点及之前的订单标记为午餐,16点后的订单标记为晚餐。并根据数量和单价计算出销售额。并查看前5行数据。

order['下单时间'] = order['下单时间'].astype(dtype='str')
order['时间段'] = order['下单时间'].apply(lambda x:'晚餐' if int(x.split()[-1][0:2]) > 16 else '午餐')
order['销售额'] = order['数量'] * order['单价']
order.head()


这里就需要利用字符串函数将下单时间提取出小时数,再跟16比较得出时间段


4.将order与customer表按照订单id合并,获得一张新表customer_order,表中包含“订单id”、“就餐人数”、“销售额”、“时间段”4个字段,查看前5行数据。(注意order表中,一个订单会有多条记录,销售额不能直接合并)

order1 = order[['订单id','时间段']]
order1.drop_duplicates(inplace=True)
data1 = order.groupby('订单id').sum()['销售额']
new_order = pd.merge(data1,order1,on='订单id')
customer_order = pd.merge(customer,new_order,on='订单id')
customer_order.head()

这个题就需要动脑筋思考一下了,巧妙利用删除重复值将order1中的数据唯一化再进行合并

5.占菜品销售额前80%的菜品是哪些?(除开酒水饮料和白饭,酒水饮料从菜品大类中找,白饭从菜品名中找)

num = len(order.groupby('菜品名').sum()['销售额'].sort_values(ascending=False))
all_list = order.groupby('菜品名').sum()['销售额'].sort_values(ascending=False).head(int(np.floor(num*0.8))).index.to_list()
table = order.pivot_table(index=['菜品大类','菜品名'])
except_list = [item[1] for item in table.index.to_list() if item[0] == '酒类' or item[0] == '饮料']
result = [x for x in all_list if x not in except_list and x[0:2] != '白饭']
result


这道题难度就又增大了一截,需要用到分组函数,交叉表,当然这里我为了简化代码,用到了三元列表推导式

6.使用order表画一个折线图,展示出1-15日每一天的订单数量,订单数量按降序排列,并在折线图上标记出对应的订单数。(注意order表中订单id有重复值)


order['日期'] = order['下单时间'].apply(lambda x:int(x.split()[0].split('-')[-1]))
data2 = order[['订单id','日期']]
data2.drop_duplicates(inplace=True)
data3 = data2.groupby('日期').count()['订单id']
data4 = data3[data3.index < 16]
plt.figure(figsize=(15,8))
plt.plot(data4.index,data4.values,color='blue')
for a,b in zip(data4.index,data4.values):
    plt.text(a,b,'%d'%b,ha='center',va='bottom',fontsize=15)
plt.xticks()
plt.yticks(fontsize=15)
plt.xlabel('日期',fontsize=14)
plt.ylabel('订单数',fontsize=14)
plt.title('每日订单数',fontsize=14)
plt.show()

这个题就中规中矩,画个折线图并加上数值,当然前面你还得将1-15的数据提取出来

7.  通过order表计算出各个菜品大类的销量和销售额,命名为type_data。注意:白饭不属于任何菜品大类,需要在菜品中先剔除白饭再做计算.

order1 = order[order['菜品名'] != '白饭/大碗']
order2 = order1[order1['菜品名'] != '白饭/小碗']
type_data = order2.groupby('菜品大类').sum()[['数量','销售额']]
type_data

8.通过type_data采用子图方式画出食物和酒水的销量占比和销售额占比情况。饮料和酒类属于酒水,其他属于食物。

drink_data = type_data[(type_data.index == '饮料') | (type_data.index == '酒类')]
drink_num = drink_data['数量'].sum()
drink_sole = drink_data['销售额'].sum()
food_data = type_data[(type_data.index != '饮料') & (type_data.index != '酒类')]
food_num = food_data['数量'].sum()
food_sole = food_data['销售额'].sum()
food_num_perc = food_num/(food_num+drink_num)
drink_num_perc = drink_num/(food_num+drink_num)
food_sole_perc = food_sole/(food_sole+drink_sole)
drink_sole_perc = drink_sole/(food_sole+drink_sole)
plt.figure(figsize=(15,8))
plt.subplot(1,2,1)
paches,texts,autotexts = plt.pie([food_num_perc,drink_num_perc],autopct='%0.1f%%',labels=['食物占比','酒水饮料占比'])
plt.title('数售占比',fontsize=24)
#设置字体大小和颜色
for text in autotexts:
    text.set_color('white')
    text.set_fontsize(24)
for t in texts:
    t.set_fontsize(24)
plt.subplot(1,2,2)
paches,texts,autotexts = plt.pie([food_sole_perc,drink_sole_perc],autopct='%0.2f%%',labels=['食物占比','酒水饮料占比'])
plt.title('销售额占比',fontsize=24)
#设置字体大小和颜色
for text in autotexts:
    text.set_color('white')
    text.set_fontsize(24)
for t in texts:
    t.set_fontsize(24)
plt.show()


目录
相关文章
|
4月前
|
数据采集 存储 数据挖掘
【优秀python数据分析案例】基于Python书旗网小说网站数据采集与分析的设计与实现
本文介绍了一个基于Python的书旗网小说网站数据采集与分析系统,通过自动化爬虫收集小说数据,利用Pandas进行数据处理,并通过Matplotlib和Seaborn等库进行数据可视化,旨在揭示用户喜好和市场趋势,为图书出版行业提供决策支持。
380 6
【优秀python数据分析案例】基于Python书旗网小说网站数据采集与分析的设计与实现
|
2月前
|
数据挖掘 UED
ChatGPT数据分析——探索性分析
ChatGPT数据分析——探索性分析
53 1
|
2月前
|
数据可视化 数据挖掘 数据处理
ChatGPT数据分析应用——热力图分析
ChatGPT数据分析应用——热力图分析
114 1
|
2月前
|
数据挖掘
ChatGPT在常用的数据分析方法中的应用(分组分析)
ChatGPT在常用的数据分析方法中的应用(分组分析)
72 1
|
2月前
|
数据挖掘 数据处理
ChatGPT在常用的数据分析方法中的应用(交叉分析)
ChatGPT在常用的数据分析方法中的应用(交叉分析)
51 1
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
如何理解数据分析及数据的预处理,分析建模,可视化
如何理解数据分析及数据的预处理,分析建模,可视化
63 0
|
2月前
|
数据挖掘
ChatGPT在常用的数据分析方法中的应用(对比分析)
ChatGPT在常用的数据分析方法中的应用(对比分析)
60 0
|
3月前
|
机器学习/深度学习 人工智能 数据挖掘
数据分析师是在多个行业中专门从事数据搜集、整理和分析的专业人员
数据分析师是在多个行业中专门从事数据搜集、整理和分析的专业人员
44 3
|
4月前
|
前端开发 Java JSON
Struts 2携手AngularJS与React:探索企业级后端与现代前端框架的完美融合之道
【8月更文挑战第31天】随着Web应用复杂性的提升,前端技术日新月异。AngularJS和React作为主流前端框架,凭借强大的数据绑定和组件化能力,显著提升了开发动态及交互式Web应用的效率。同时,Struts 2 以其出色的性能和丰富的功能,成为众多Java开发者构建企业级应用的首选后端框架。本文探讨了如何将 Struts 2 与 AngularJS 和 React 整合,以充分发挥前后端各自优势,构建更强大、灵活的 Web 应用。
63 0
|
4月前
|
SQL 数据采集 算法
【电商数据分析利器】SQL实战项目大揭秘:手把手教你构建用户行为分析系统,从数据建模到精准营销的全方位指南!
【8月更文挑战第31天】随着电商行业的快速发展,用户行为分析的重要性日益凸显。本实战项目将指导你使用 SQL 构建电商平台用户行为分析系统,涵盖数据建模、采集、处理与分析等环节。文章详细介绍了数据库设计、测试数据插入及多种行为分析方法,如购买频次统计、商品销售排名、用户活跃时间段分析和留存率计算,帮助电商企业深入了解用户行为并优化业务策略。通过这些步骤,你将掌握利用 SQL 进行大数据分析的关键技术。
243 0