Python数据分析与可视化教案6.3 餐饮数据分析与可视化.docx

上传人:太** 文档编号:86357231 上传时间:2023-04-14 格式:DOCX 页数:8 大小:111.05KB
返回 下载 相关 举报
Python数据分析与可视化教案6.3 餐饮数据分析与可视化.docx_第1页
第1页 / 共8页
Python数据分析与可视化教案6.3 餐饮数据分析与可视化.docx_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《Python数据分析与可视化教案6.3 餐饮数据分析与可视化.docx》由会员分享,可在线阅读,更多相关《Python数据分析与可视化教案6.3 餐饮数据分析与可视化.docx(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

2、,dishes_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

3、/1 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 :表示消费金额。

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

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

6、plotlib.pyplot as pitpd.set_option(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,enco

7、ding=,gbk)print(数据的行数二 %dn 数据的列数=%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.timelo

8、ck_ti(neorder_statusw0417苗宇怡4.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 :数据去空

9、。(1)查看含有空值的列名及对应的空值个数。和ulock_time两列中均(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=|paya

10、ble,lock-timehowny1) print(去空后的数据的行数=n,data.shapeO)输出结果如图6-*所不。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)和结

11、账时间(lock_time)转换成时间格式。(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

12、步骤4 (3)代码如下:dataweekday* = 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 we

13、ekday0417苗宇怡4.015015165.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 Mond

14、ay4392孙熙凯10.0Process 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=,S

15、unday,)print。双休日的订单数据的比例为:.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/lilia

16、ng/PycharmProjects/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_

17、mean = round(datadishes_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

18、* 5 平均菜品数量为:11.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-*所不。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:绘制折

31、线图。(1)将绘图窗口设为(8, 8),统计周一到周日的消费金额(“payable”)的平均值, 并保存整数。(2)绘图样式采用“ggplot”,根据周一到周日的消费金额(“payable”)的平均值绘 制折线图,线型的颜色为红色。图标标题设为“周一到周日平均消费金额”,x轴名称设为 “星期”,y轴名称设为“平均消费金额,并添加棕色数据标签。步骤10 (1)代码如下:plt.rcParamsfigure.flgsize=(8,8)result2 = data.groupby(by=,weekday,),payable,.mean()result2 = round(group_result2,0

32、)步骤10 (2)代码如下:plt.style.use(ggplot)result! = result2.reindex(,Monday7Tuesday,Wednesday,Thursday VFridayVSaturday1,Sunday*)x = result2.indexy = result2plt.plot(x,y)pit.title(周一到周日平均消费金额=color=T;size=25)for ij,k in zip(x,y,y):plt.text(i,j+2,j,color=brown,size= 16)plt.show()输出结果如图6-*所不。图6-*步骤10输出结果四、结论

33、1 .从数据空值统计的分析结果中可以看出,在945条数据,缺少消费金额的数据有18条。2 .从数据筛选的分析结果中可以看出,双休日订单数据占比拟多,该比例为57.95%。3 .就餐人数在8-10人占比拟少,该比例为24.18%,所以可适当减少8-10人桌的数 量。4 .从描述性统计的分析结果中可以看出,平均销售金额为492.54元,平均就餐人数为 5.21人,平均菜品数量为11.78个,平均就餐时间为49分钟。根据平均就餐时间可以预估 出翻桌的频率。5 .就餐人数为6人的订单数量最多,其次是2人、8人和4人,均超过了 160个订单, 远远大于其他就餐人数的订单。6 .从分类汇总的分析结果中可以看出,销售金额排名前5的重点客户为习有汐、于江 涛、卓永梅、王锦鹏、王柯萌。可以针对这些客户进行针对性营销。7 .从不同星期和不同就餐人数的交叉表可以看出,周六和周日的6人和8人较多。8 .从分类汇总的分析结果中可以看出,周一到周日的菜品数量和为:932、735、967、 755、874、3375、3179,所以周六或周日菜品数量大约是平时的3-4倍。9 .从柱形图的结果中看出,偶数就餐人数情况要远远高于奇数就餐人数的情况,所以 在设计不同人数套餐时,需要考虑到这一点。10 .从周一到周日的消费金额的平均值折线图来看,整体上是向上的,但是也有波动。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁