数据分析实例-餐饮行业分析
本次数据分析案例共有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()
数据分析实例-餐饮行业分析相关推荐
- 【机器学习-数据科学】第三节:数据分析实例 分析MovieLens电影数据
数据分析实例 分析MovieLens电影数据 导入数据 数据合并 按性别查看各个电影的平均评分 活跃电影排行榜 电影投票数据 grouplens.org/datasets/movielens 把文件放 ...
- [数据分析实例5]使用python-pandas对历届世界杯数据进行数据分析,并用matplotlib绘图,干货满满,赶紧收藏学习起来!
目录 写在前面的话: [数据分析实例3]使用python-pandas对历届世界杯进行数据分析,并用matplotlib绘图,干货满满,赶紧收藏学习起来!https://blog.csdn.net/m ...
- 算法数据分析实例—城市气候与海洋关系数据分析—[线性回归:y=w*x+b]
算法数据分析实例-城市气候与海洋关系数据分析-[线性回归:y=w*x+b] 1. 导入包 1.1 安装 NumPy 1.2 安装 Pandas 1.3 安装数据可视化matplotlib.pyplot ...
- 数据预处理 1.5 租房数据分析实例
目录 租房数据分析实例 1 数据加载和查看 1.1 加载LJdata.csv数据集 1.2查看house_data数据的列标签 1.3重新设置house_data的行标签 1.4查看house_dat ...
- 字节跳动大佬全新开源:Python数据分析实例,建议收藏!
近几年,互联网领域进入大数据红利时代.包括腾讯.阿里.字节在内的各大巨头,依靠基于大数据的商业模式成为了当下最挣钱的公司. 所以行业对数据人才的需求量巨大,仅字节一家在本季度就有近千个数据类职位虚席以 ...
- Pandas数据分析⑥——数据分析实例(货品送达率与合格率/返修率/拒收率)
Pandas系列目录如下: Pandas数据分析①--数据读取(CSV/TXT/JSON) Pandas数据分析②--数据清洗(重复值/缺失值/异常值) Pandas数据分析③--数据规整1(索引和列 ...
- 数据分析实例(上)——DataWhale202207(kaggle泰坦尼克任务)
DataWhale课程地址:datawhalechina/hands-on-data-analysis: 动手学数据分析以项目为主线,知识点孕育其中,通过边学.边做.边引导来得到更好的学习效果 (gi ...
- python数据分析实例:客户流失预警模型
python数据分析实例:客户流失预警模型 客户流失是电信行业最重要的服务方面之一.客户流失的广义说法是因为客户自己或运营商违反服务协议而终止客户服务的行为. 流失预测流程一共分为四个步骤,分别为(1 ...
- python大数据分析实例-用Python整合的大数据分析实例
用Python进行数据分析的好处是,它的数据分析库目前已经很全面了,有NumPy.pandas.SciPy.scikit-learn.StatsModels,还有深度学习.神经网络的各类包.基本上能满 ...
最新文章
- 河南省第二届ACM程序设计大赛解题报告(置换群)
- 2014东师计算机应用基础离线作业,2014秋东师 计算机应用基础 离线作业及答案...
- 解决安卓微信浏览器中location.reload 或者 location.href失效的问题
- 谷歌浏览器翻译插件 saladict:沙拉查词
- hdu 3046(最小割最大流)
- 怎么找到项目中所有同名的类_26岁转行程序员的成长历程--Day03从内存层面理解类和对象...
- blt功能_BitBlt实现TransparentBlt
- 简单比对照片是否相同_小新说法 | 如何认定商标是否侵权?
- python playsound 音量_Win32 PlaySound:如何控制音量?
- 计算机系统日期修改吗,电脑系统时间如何修改,教你电脑系统时间如何修改
- 漫画:996的本质是什么?
- 鸿蒙OS不支持游戏,部分安卓游戏在华为鸿蒙 OS 上运行,被识别成使用 PC 端模拟器...
- 字母异位词(anagram)的不同复杂度实现
- 7.10. RASP
- 手动爬取炉石传说所有卡牌
- canvas-绘制背景
- Oracle Database 11.2.0.4.0 已在 中标麒麟Linux x86-64 NeoKylin Linux Advanced Server 6 上通过认证
- 【厚积薄发系列】C++项目总结8—全自动和半自动随机生成中文字符串
- 内网渗透_信息搜集(Linux)
- 安装 pycuda 出现 PEP517 的错误