Python数据分析与可视化教案6.3 餐饮数据分析与可视化_第1页
Python数据分析与可视化教案6.3 餐饮数据分析与可视化_第2页
Python数据分析与可视化教案6.3 餐饮数据分析与可视化_第3页
Python数据分析与可视化教案6.3 餐饮数据分析与可视化_第4页
Python数据分析与可视化教案6.3 餐饮数据分析与可视化_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、3餐饮数据分析与可视化餐饮行业是一个历史悠久的行业,在每一位经理的脑袋里,都无时不刻不在盘算着门 店的运营情况,但绝大局部只把情况存在存在脑海里,这也是为什么在餐饮行业里,一直 会听到这样的困惑:“一家店盈利,三家店打平,再开下去就亏了”。只凭一人的脑力,很 难计算统筹如此多门店的利润。一、数据源不同视角可能会得到不同答案,为了能全面了解和分析经营情况,可以对菜品、就餐 人数、销售金额等多种分析视角进行分析。本案例以某餐饮店2019年7月数据为例,对其 进行数据分析与可视化,数据文件为如图6-*所示。inf。id,name,number_consumers,dining_table_id,di

2、shes_count,payable,start_time,lock_time,order_status417 港宇怡 4150151%5,2016/8/1 11:05,2016/8/1 11:11,1301,赵颖31430,6,321,2016/8/1 11:15,2016/8/1 11:31,1413,徐毅凡,6/488,15,854,2016/8/1 12:42,2016/8/1 12:54,1415,张大鹏,4/502/0,466,2016/8/1 12:51,2016/8/1 13:08,1392,孙熙凯,10,1499,24,704,2016/8/1 12:58,2016/8/1

3、13:07,1381,沈晓雯,4/487,7,239,2016/8/1 13:15,2016/8/1 13:23,1429,苗泽坤,4/501,15,699,2016/8/1 13:17,2016/8/1 13:34,1433,李达明,8/490,14,511,2016/8/1 13:38,2016/8/1 13:50,1图6-*数据源其中,各个字段的意义如下:info_id :表示订单编号。name :表示订餐客户姓名。number_consumers :表示就餐人数。dining_table_id :表示桌号。dishes_count :表示菜品数量。payable :表示消费金额。sta

4、rt_time :表示下单时间。lock_time :表示结账时间。ordejstatus :表示订单状态,T表示订单结算成功,表示缺少结账时间,即 O表示没有结账成功。二、目标.数据中有些数据缺少结账时间,将这些数据去除。.为了分析就餐时间,从下单时间和结账时间中提取就餐时间。.统计双休日订单占比。.统计大桌(就餐人数在8到10人之间)订单占比。.计算平均销售金额、平均就餐人数、平均菜品数量、平均就餐时间等总体指标。.统计不同就餐人数的订单数量频数,并加以比拟,分析哪些就餐人数的订单较多。.分析不同星期和不同就餐人数对于销售金额的影响。.统计消费金额总和排名最高前5个客户。.计算周一到周日的

5、菜品数量,并分析最高出现在周几。.计算周一到周日的消费金额平均值。.根据不同就餐人数统计频数绘制柱形图,分析哪些就餐人数的出现的情况较多。.根据周一到周日的消费金额(“payable”)的平均值绘制折线图。三、步骤步骤1 :导入库,设置参数。(1)导入所需要的库 pandas、matplotlib.pyploto(2)利用pd.set_option解除显示宽度的显示,设置数据对齐。(3)利用reParams设置相关参数,将显示字体设置为黑体,字体大小设置为15。步骤1代码如下:import pandas as pdimport matplotlib.pyplot as pitpd.set_op

6、tion(display.width,None)pd.seCoptionCdisplay.unicode.easLasiari-WidthTrue)plt.rcParams,font.sans-serif=Simhei,1 =15步骤2 :导入数据并查看。利用read_csv导入meal_info.csv (meal_info.csv存放在c:data路径中),将读入的数据 命名为data。查看data的行数与列数以及数据的前5行。步骤2代码如下:data = pd.read_csv(nc:datameal_info.csv,encoding=,gbk)print(数据的行数二 %dn 数据的

7、列数=%dn%(data.shapeO,data.shape 1 )print(数据的前 5 行为:n”,data.head。)输出结果如图6-*所示。Run:6-1图6-*步骤2输出结果C:UsersliliangAnaconda3python.exeC:/Users/liliang/PycharProjects/sjfx/6-l.py5B(据的行政 依据的列数= 依据的前5行为 info_id9459namenumber.consumersdining_table_iddishes_countpayablestart.timelock_ti(neorder_statusw0417苗宇怡4.

8、015015165.02019/7/111:052019/7/111:1111301赵旗3.014306321.02019/7/111:152819/7/111:3112413博被凡6.0148815854.02019/7/112:422019/7/112:5413415张大朋4.0150210466.02019/7/112:512019/7/113:0814392孙熙泰10.0149924704.02019/7/112:582019/7/113:071Process finished withexit code 0步骤3 :数据去空。(1)查看含有空值的列名及对应的空值个数。和ulock_t

9、ime两列中均(2)删除没有消费金额或没有结账时间的数据,“payable”出现空值的行(即),结果在原数据中显示,并查看数据的行数。步骤3代码如下:null_result = data.isnull().sum()null_result 二 null_result.loc null_result0 null_result = null_result.sort_values(ascending=False)print(数据空值情况为:nnull_result)data 二 data.dropna(axis=0,subset=|payable,lock-timehowny1) print(去空后

10、的数据的行数=n,data.shapeO)输出结果如图6-*所不。 TOC o 1-5 h z Run:6-1AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-1.py数据空值情况为: payable18二=lock_time9number_consumers 7.dtype: int64去空后的数据的行数=918Process finished with exit code 0图6-*步骤3输出结果步骤4 :时间序列处理。(1)将下单时间(startjime)和结账时间(lock_time)转

11、换成时间格式。(2)生成新列 “meal_time,表示就餐时间,其公式为:meal_time=lock_time-start_time。(3)从开始时间(“staruime”)中抽取出“星期”,生成新变量“weekday”(“星 期,)。步骤4 (1)代码如下:datastart_time = pd.to_datetime(data,start_time,)datalock_time二 pd.to_datetime(data lock_time) 步骤4 (2)代码如下:dataldeaLtime1= datalock_time - datastait_time步骤4 (3)代码如下:dat

12、aweekday* = datastart_time.dt.weekday_nameprint(数据的前 5 行为:n”,data.head。)输出结果如图6-*所不。Run:6-1C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-l.py 数据的前5行为:info_idname number_consumersdining_table_id dishes.countpayablestart.timelock.timeorder_statu$ deal.time weekday0417苗宇怡4.0

13、15015165.0 2019-07-0111:05:00 2019-07-0111:11:00100:06:00 Monday13013.814306321.0 2019-87-0111:15:00 2019-07-0111:31:00100:16:00 Monday二2413徐股凡6.0148815854.0 2019-07-0112:42:00 2019-07-0112:54:00100:12:00 Monday3415张大IK4.0150210466.0 2019-07-0112:51:00 2019-07-0113:08:00100:17:00 Monday4392孙熙凯10.0Pr

14、ocess finished with exit code 0步骤5 :数据筛选。149924704.0 2019-07-01 12:58:00 2019-07-01图6-*步骤4输出结果13:07:00100:09:00 Monday(1)筛选双休日的订单数据(Saturday和Sunday),计算筛选结果的行数,并计算其 比例。(2)筛选就餐人数在8到10人之间的订单数据,计算筛选结果的行数,并计算其比 例。步骤5 (1)代码如下:loc_resultl = data.loc(dataweekday,=Saturday,) | (data,weekday=,Sunday,)print。双休

15、日的订单数据的比例为:.2f%”%(loc_resultl .shapeO/data.shapeO* 100)步骤5 (2)代码如下:loc_result2 = data.k)c(datanumber_consumers=8) & (data,number_consumers,= 10)print(就餐人数在8到10人之间的订单数据的比例为:.2f%”%(loc_result2.shape0/data.shape0J:1:100)输出结果如图6-*所不。Run:6-1AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProje

16、cts/sjfx/6-l.py双休日的订单数据的比例为:57.95%就卷人数在8到10人之间的订单数据的比例为:24.18%;示Process finished with exit code 0 ;图6-*步骤5输出结果步骤6 :描述性统计分析。(1)计算平均销售金额、平均就餐人数、平均菜品数量、平均就餐时间。(2)统计不同就餐人数的订单数量频数,并按降序排序。步骤6 (1)代码如下:pay_mean = round(datarpayable.mean(),2)con_mean = round(datanumber_consumers.mean(),2)dish_mean = round(da

17、tadishes_count.mean(),2)time_mean = datadeal_time .mean。n,pay_mean) H,con_mean) n,dish_mean) n,time_mean)print(”平均销售金额为 print(平均就餐人数为 print(平均菜品数量为 print(平均就餐时间为输出结果如图6-*所不。Run:6-1AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-l.py平均销售金额为:491.54平均就餐人数为:5.21* 5 平均菜品数量为:11.

18、78平均就替时间为:0 days 00:48:17.189542X -、 Process finished with exit code 0图6-*步骤6 (1)输出结果步骤6 (2)代码如下:count_result = data,number_consumers,.value_counts(ascending=False)print(不同就餐人数的订单数量频数:n”,count_result)输出结果如图6-*所不。 TOC o 1-5 h z Run:6-1C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects

19、/sjfx/6-l.py 不同就餐人数的订单数量频数:6.018352.016528.01654.01613.0805.07110.0497.0289.081.01Name: number_consumers, dtype: int64Process finished with exit code 。图6-*步骤6 (2)输出结果步骤7 :交叉透视表分析。(1)制作数据交叉表,统计不同星期的不同就餐人数的频数。(2)制作数据透视表,统计不同星期不同就餐人数的销售金额平均值。步骤7 (1)代码如下:tab_resultl = pd.crosstab(index = data,number_con

20、sumers, columns = datatweekday*, margins=True)print(不同星期的不同就餐人数的数据交叉表为:n”,tab_resultl) 输出结果如图6-*所示。Run6-1 x5C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-l.py 不同星期的不同就餐人数的数据交叉表为:weekdayFriday Monday Saturday Sunday Thursday Tuesday Wednesday Allnumber_consumers 1.00010000

21、12.0121441451425141653.091020203117804.01617474798171615.0642226823716.0181059591012151837.01675234288.012175841108191659.00122201810.056151133649All7985272256617286911Process finished with exit code 0图6-*步骤7 (1)输出结果步骤7 (2)代码如下:import numpy as nptab_result2 = pd.pivot_table(data,index = number_consu

22、mers,columns = weekday:values=payable,aggfunc二np.mean,margins=True)tab_result2 = round(tab_result2,2)print(不同星期的不同就餐人数的销售金额的平均值的数据透视表为:nabesult2) 输出结果如图6-*所示。Run:6-1AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-1.py不同星期不同就餐人数的销售金额平均值的数据透视表为:weekdayFridayMondaySaturdaySun

23、dayThursdayTuesdayWednesdayAll=5number_consumers1.0NaNNaN404.00NaNNaNNaNNaN404.002.0349.25294.36421.78391.47453.86303.64274.93369.793.0398.56351.10410.15351.10332.00301.36308.29359.904.0359.19390.65408.19507.02526.56376.12384.12432.805.0403.33336.00573.77498.35452.62432.00469.67496.316.0596.22658.50

24、498.90600.27545.80530.92533.33557.367.0752.00492.50627.43721.60723.00461.00461.50585.078.0589.75557.35571.40658.34480.90637.00682.74603.419.0NaN255.00340.50579.00721.50NaN301.00479.7510.0502.40767.50704.00609.27736.00804.00447.83646.65All468.58464.61499.69528.52509.41417.24462.23492.42Process finish

25、edwith exit code 0图6-*步骤7 (2)输出结果步骤8 :分类汇总。(1)按客户姓名统计消费金额的和,查看消费金额总和排名最高前5个客户。(2)按星期统计菜品数量的和,按降序方式查看不同星期菜品数量和。(3)按星期统计消费金额的平均值,查看不同星期的消费金额平均值,结果四舍五入 保存整数。步骤8 (1)代码如下:group_resultl = data.groupby(by=,name,) payable* .sum()group_resultl = group_result 1 .sort_values(ascending=False)print(消费金额总和排名最高前10

26、个客户,group_resultl.head()输出结果如图6-*所不。Run:6-1A 个 C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-l.py 消费金额总和排名最高前10个客户name 习有汐 3497.0余江涛3091.0R卓永梅3074.0才.王锦鹏3025.0王柯萌 2950.0 Name: payable, dtype: float64Process finished with exit code 0图6-*步骤8 (1)输出结果步骤8 (2)代码如下:group_result2

27、 = data.groupby(by=,weekday,),dishes_count,.sum()group_result2 = group_result2.sort_values(ascending=False)print(不同星期菜品数量和”,group_result2)输出结果如图6-*所不。Run:- 6-1 xA C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-1.py 不同星期菜品数量和weekdaySaturday3375=5Sunday3179Wednesday967Monday

28、932Friday874Thursday755Tuesday735Name: dishes_count, dtype: int64Process finished with exit code 0步骤8 (3)代码如下:group_result3 = data.groupby(by=weekday)payable.mean()group_result3 = round(group_result3,0)print(不同星期的消费金额平均值”,group_result3)输出结果如图6-*所示。Run:6-1C:UsersliliangAnaconda3python.exe C:/Users/li

29、liang/PycharmProjects/sjfx/6-l.py 不同星期的消费金额平均值weekdayFriday469.0Monday461.0Saturday497.0Sunday529.0Thursday507.0Tuesday417.0Wednesday466.0Name: payable, dtype: float64Process finished with exit code 0图6-*步骤8 (2)输出结果步骤9 :绘制柱形图。(1)统计不同就餐人数统计频数。(2)根据不同就餐人数统计频数绘制柱形图,柱形颜色为天蓝色,柱形边缘色未棕 色,柱形宽度为0.3。图标标题设为“不同

30、就餐人数频数统计”,x轴名称设为“就餐人 数”,y轴名称设为“统计频数”。步骤9代码如下:result 1 = datanumber_consumers.value_counts(ascending=False)x = result 1.indexheight = result 1width = 0.3plt.bar(x,height,width,color=,skyblue,edgecolor=brown,)pit. title(不同就餐人数频数统计”,color=T)plt.show()输出结果如图6-*所示。Figure 1- X今G今 +Q三上 0图6-*步骤9输出结果步骤10:绘制折线图。(1)将绘图窗口设为(8, 8),统计周一到周日的消费金额(“payable”)的平均值, 并保存整数。(2)绘图样式采用“ggplot”,根据周一到周日的消费金额(“payable”)的平均值绘 制折线图,线型的颜色为红色。图标标题设为“周一到周日平均消费金额”,x轴名称设

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论