Python數(shù)據(jù)分析與可視化教案6.3 餐飲數(shù)據(jù)分析與可視化_第1頁
Python數(shù)據(jù)分析與可視化教案6.3 餐飲數(shù)據(jù)分析與可視化_第2頁
Python數(shù)據(jù)分析與可視化教案6.3 餐飲數(shù)據(jù)分析與可視化_第3頁
Python數(shù)據(jù)分析與可視化教案6.3 餐飲數(shù)據(jù)分析與可視化_第4頁
Python數(shù)據(jù)分析與可視化教案6.3 餐飲數(shù)據(jù)分析與可視化_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、3餐飲數(shù)據(jù)分析與可視化餐飲行業(yè)是一個歷史悠久的行業(yè),在每一位經(jīng)理的腦袋里,都無時不刻不在盤算著門 店的運營情況,但絕大局部只把情況存在存在腦海里,這也是為什么在餐飲行業(yè)里,一直 會聽到這樣的困惑:“一家店盈利,三家店打平,再開下去就虧了”。只憑一人的腦力,很 難計算統(tǒng)籌如此多門店的利潤。一、數(shù)據(jù)源不同視角可能會得到不同答案,為了能全面了解和分析經(jīng)營情況,可以對菜品、就餐 人數(shù)、銷售金額等多種分析視角進(jìn)行分析。本案例以某餐飲店2019年7月數(shù)據(jù)為例,對其 進(jìn)行數(shù)據(jù)分析與可視化,數(shù)據(jù)文件為如圖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,李達(dá)明,8/490,14,511,2016/8/1 13:38,2016/8/1 13:50,1圖6-*數(shù)據(jù)源其中,各個字段的意義如下:info_id :表示訂單編號。name :表示訂餐客戶姓名。number_consumers :表示就餐人數(shù)。dining_table_id :表示桌號。dishes_count :表示菜品數(shù)量。payable :表示消費金額。sta

4、rt_time :表示下單時間。lock_time :表示結(jié)賬時間。ordejstatus :表示訂單狀態(tài),T表示訂單結(jié)算成功,表示缺少結(jié)賬時間,即 O表示沒有結(jié)賬成功。二、目標(biāo).數(shù)據(jù)中有些數(shù)據(jù)缺少結(jié)賬時間,將這些數(shù)據(jù)去除。.為了分析就餐時間,從下單時間和結(jié)賬時間中提取就餐時間。.統(tǒng)計雙休日訂單占比。.統(tǒng)計大桌(就餐人數(shù)在8到10人之間)訂單占比。.計算平均銷售金額、平均就餐人數(shù)、平均菜品數(shù)量、平均就餐時間等總體指標(biāo)。.統(tǒng)計不同就餐人數(shù)的訂單數(shù)量頻數(shù),并加以比擬,分析哪些就餐人數(shù)的訂單較多。.分析不同星期和不同就餐人數(shù)對于銷售金額的影響。.統(tǒng)計消費金額總和排名最高前5個客戶。.計算周一到周日的

5、菜品數(shù)量,并分析最高出現(xiàn)在周幾。.計算周一到周日的消費金額平均值。.根據(jù)不同就餐人數(shù)統(tǒng)計頻數(shù)繪制柱形圖,分析哪些就餐人數(shù)的出現(xiàn)的情況較多。.根據(jù)周一到周日的消費金額(“payable”)的平均值繪制折線圖。三、步驟步驟1 :導(dǎo)入庫,設(shè)置參數(shù)。(1)導(dǎo)入所需要的庫 pandas、matplotlib.pyploto(2)利用pd.set_option解除顯示寬度的顯示,設(shè)置數(shù)據(jù)對齊。(3)利用reParams設(shè)置相關(guān)參數(shù),將顯示字體設(shè)置為黑體,字體大小設(shè)置為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 :導(dǎo)入數(shù)據(jù)并查看。利用read_csv導(dǎo)入meal_info.csv (meal_info.csv存放在c:data路徑中),將讀入的數(shù)據(jù) 命名為data。查看data的行數(shù)與列數(shù)以及數(shù)據(jù)的前5行。步驟2代碼如下:data = pd.read_csv(nc:datameal_info.csv,encoding=,gbk)print(數(shù)據(jù)的行數(shù)二 %dn 數(shù)據(jù)的

7、列數(shù)=%dn%(data.shapeO,data.shape 1 )print(數(shù)據(jù)的前 5 行為:n”,data.head。)輸出結(jié)果如圖6-*所示。Run:6-1圖6-*步驟2輸出結(jié)果C:UsersliliangAnaconda3python.exeC:/Users/liliang/PycharProjects/sjfx/6-l.py5B(據(jù)的行政 依據(jù)的列數(shù)= 依據(jù)的前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 :數(shù)據(jù)去空。(1)查看含有空值的列名及對應(yīng)的空值個數(shù)。和ulock_t

9、ime兩列中均(2)刪除沒有消費金額或沒有結(jié)賬時間的數(shù)據(jù),“payable”出現(xiàn)空值的行(即),結(jié)果在原數(shù)據(jù)中顯示,并查看數(shù)據(jù)的行數(shù)。步驟3代碼如下:null_result = data.isnull().sum()null_result 二 null_result.loc null_result0 null_result = null_result.sort_values(ascending=False)print(數(shù)據(jù)空值情況為:nnull_result)data 二 data.dropna(axis=0,subset=|payable,lock-timehowny1) print(去空后

10、的數(shù)據(jù)的行數(shù)=n,data.shapeO)輸出結(jié)果如圖6-*所不。 TOC o 1-5 h z Run:6-1AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-1.py數(shù)據(jù)空值情況為: payable18二=lock_time9number_consumers 7.dtype: int64去空后的數(shù)據(jù)的行數(shù)=918Process finished with exit code 0圖6-*步驟3輸出結(jié)果步驟4 :時間序列處理。(1)將下單時間(startjime)和結(jié)賬時間(lock_time)轉(zhuǎn)

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(數(shù)據(jù)的前 5 行為:n”,data.head。)輸出結(jié)果如圖6-*所不。Run:6-1C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-l.py 數(shù)據(jù)的前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 :數(shù)據(jù)篩選。149924704.0 2019-07-01 12:58:00 2019-07-01圖6-*步驟4輸出結(jié)果13:07:00100:09:00 Monday(1)篩選雙休日的訂單數(shù)據(jù)(Saturday和Sunday),計算篩選結(jié)果的行數(shù),并計算其 比例。(2)篩選就餐人數(shù)在8到10人之間的訂單數(shù)據(jù),計算篩選結(jié)果的行數(shù),并計算其比 例。步驟5 (1)代碼如下:loc_resultl = data.loc(dataweekday,=Saturday,) | (data,weekday=,Sunday,)print。雙休

15、日的訂單數(shù)據(jù)的比例為:.2f%”%(loc_resultl .shapeO/data.shapeO* 100)步驟5 (2)代碼如下:loc_result2 = data.k)c(datanumber_consumers=8) & (data,number_consumers,= 10)print(就餐人數(shù)在8到10人之間的訂單數(shù)據(jù)的比例為:.2f%”%(loc_result2.shape0/data.shape0J:1:100)輸出結(jié)果如圖6-*所不。Run:6-1AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProje

16、cts/sjfx/6-l.py雙休日的訂單數(shù)據(jù)的比例為:57.95%就卷人數(shù)在8到10人之間的訂單數(shù)據(jù)的比例為:24.18%;示Process finished with exit code 0 ;圖6-*步驟5輸出結(jié)果步驟6 :描述性統(tǒng)計分析。(1)計算平均銷售金額、平均就餐人數(shù)、平均菜品數(shù)量、平均就餐時間。(2)統(tǒng)計不同就餐人數(shù)的訂單數(shù)量頻數(shù),并按降序排序。步驟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(平均就餐人數(shù)為 print(平均菜品數(shù)量為 print(平均就餐時間為輸出結(jié)果如圖6-*所不。Run:6-1AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-l.py平均銷售金額為:491.54平均就餐人數(shù)為:5.21* 5 平均菜品數(shù)量為:11.

18、78平均就替時間為:0 days 00:48:17.189542X -、 Process finished with exit code 0圖6-*步驟6 (1)輸出結(jié)果步驟6 (2)代碼如下:count_result = data,number_consumers,.value_counts(ascending=False)print(不同就餐人數(shù)的訂單數(shù)量頻數(shù):n”,count_result)輸出結(jié)果如圖6-*所不。 TOC o 1-5 h z Run:6-1C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects

19、/sjfx/6-l.py 不同就餐人數(shù)的訂單數(shù)量頻數(shù):6.018352.016528.01654.01613.0805.07110.0497.0289.081.01Name: number_consumers, dtype: int64Process finished with exit code 。圖6-*步驟6 (2)輸出結(jié)果步驟7 :交叉透視表分析。(1)制作數(shù)據(jù)交叉表,統(tǒng)計不同星期的不同就餐人數(shù)的頻數(shù)。(2)制作數(shù)據(jù)透視表,統(tǒng)計不同星期不同就餐人數(shù)的銷售金額平均值。步驟7 (1)代碼如下:tab_resultl = pd.crosstab(index = data,number_con

20、sumers, columns = datatweekday*, margins=True)print(不同星期的不同就餐人數(shù)的數(shù)據(jù)交叉表為:n”,tab_resultl) 輸出結(jié)果如圖6-*所示。Run6-1 x5C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-l.py 不同星期的不同就餐人數(shù)的數(shù)據(jù)交叉表為: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)輸出結(jié)果步驟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(不同星期的不同就餐人數(shù)的銷售金額的平均值的數(shù)據(jù)透視表為:nabesult2) 輸出結(jié)果如圖6-*所示。Run:6-1AC:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-1.py不同星期不同就餐人數(shù)的銷售金額平均值的數(shù)據(jù)透視表為: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)輸出結(jié)果步驟8 :分類匯總。(1)按客戶姓名統(tǒng)計消費金額的和,查看消費金額總和排名最高前5個客戶。(2)按星期統(tǒng)計菜品數(shù)量的和,按降序方式查看不同星期菜品數(shù)量和。(3)按星期統(tǒng)計消費金額的平均值,查看不同星期的消費金額平均值,結(jié)果四舍五入 保存整數(shù)。步驟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()輸出結(jié)果如圖6-*所不。Run:6-1A 個 C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-l.py 消費金額總和排名最高前10個客戶name 習(xí)有汐 3497.0余江濤3091.0R卓永梅3074.0才.王錦鵬3025.0王柯萌 2950.0 Name: payable, dtype: float64Process finished with exit code 0圖6-*步驟8 (1)輸出結(jié)果步驟8 (2)代碼如下:group_result2

27、 = data.groupby(by=,weekday,),dishes_count,.sum()group_result2 = group_result2.sort_values(ascending=False)print(不同星期菜品數(shù)量和”,group_result2)輸出結(jié)果如圖6-*所不。Run:- 6-1 xA C:UsersliliangAnaconda3python.exe C:/Users/liliang/PycharmProjects/sjfx/6-1.py 不同星期菜品數(shù)量和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)輸出結(jié)果如圖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)輸出結(jié)果步驟9 :繪制柱形圖。(1)統(tǒng)計不同就餐人數(shù)統(tǒng)計頻數(shù)。(2)根據(jù)不同就餐人數(shù)統(tǒng)計頻數(shù)繪制柱形圖,柱形顏色為天藍(lán)色,柱形邊緣色未棕 色,柱形寬度為0.3。圖標(biāo)標(biāo)題設(shè)為“不同

30、就餐人數(shù)頻數(shù)統(tǒng)計”,x軸名稱設(shè)為“就餐人 數(shù)”,y軸名稱設(shè)為“統(tǒng)計頻數(shù)”。步驟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(不同就餐人數(shù)頻數(shù)統(tǒng)計”,color=T)plt.show()輸出結(jié)果如圖6-*所示。Figure 1- X今G今 +Q三上 0圖6-*步驟9輸出結(jié)果步驟10:繪制折線圖。(1)將繪圖窗口設(shè)為(8, 8),統(tǒng)計周一到周日的消費金額(“payable”)的平均值, 并保存整數(shù)。(2)繪圖樣式采用“ggplot”,根據(jù)周一到周日的消費金額(“payable”)的平均值繪 制折線圖,線型的顏色為紅色。圖標(biāo)標(biāo)題設(shè)為“周一到周日平均消費金額”,x軸名稱設(shè)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論