数据分析实战项目练习——餐厅订单数据
餐廳訂單數(shù)據(jù)分析
本文將從以下幾個方面對餐廳訂單數(shù)據(jù)進行可視化展示及剖析,旨在為營業(yè)者提供一定的決策和建議。
接下來我們查看合并后的數(shù)據(jù)信息,觀察數(shù)據(jù)的基本構(gòu)成
由基本信息可知該數(shù)據(jù)集共由10037條數(shù)據(jù)構(gòu)成,其中數(shù)據(jù)類型分別是int整型、float 浮點型、object 、datetime64[ns]四種類型。同時我們發(fā)現(xiàn)還存在non-null的缺失數(shù)據(jù),對其應(yīng)進行進一步的處理。
data.dropna(axis=1,inplace=True) # 刪除數(shù)據(jù)中的空值列,列的話是1,inplace= True 作用于源數(shù)據(jù)再次觀察數(shù)據(jù)信息,發(fā)現(xiàn)空值數(shù)據(jù)已被剔除。
接下來我們對菜品的平均價格進行計算,可用如下兩種方式實現(xiàn)。
統(tǒng)計買出菜品的平均價格
方法一:pandas 自帶函數(shù)
數(shù)據(jù)結(jié)果顯示:44.821360964431605
round(data['amounts'].mean(),2) #round 函數(shù)進行四舍五入操作,此處保留2位數(shù)據(jù)結(jié)果顯示:44.82
方法二:numpy 函數(shù) (當(dāng)數(shù)據(jù)量多的時候,建議使用此方法)
數(shù)據(jù)結(jié)果顯示:44.82
頻數(shù)統(tǒng)計 什么菜最受歡迎(對菜名進行頻數(shù)統(tǒng)計,然后取最大的前10名)
結(jié)果顯示如圖
由于我們此處只需計算前十名的數(shù)據(jù),所以對多余數(shù)據(jù)進行剔除,僅保留前十名。
結(jié)果如下:
將最受歡迎的菜品TOP10進行可視化展示
從顯示結(jié)果來看,該餐廳的熱門菜品可分為兩類:
素菜類:涼拌菠菜。
肉菜類:麻辣小龍蝦、辣炒魷魚 、芝士燴波士頓龍蝦、香酥兩吃大蝦 、燜豬手 。
其中谷稻小莊經(jīng)查詢?yōu)轱嬈奉?#xff0c;白飯/大碗、五色糯米飯(七色)、白飯/小碗為主食類不屬于菜品范疇。
對此,我們可以提出建議如下:
①熱門菜品涼拌菜類可否增加品類,以吸引顧客再次消費。
②生鮮食品能否和其他傳統(tǒng)菜品進行搭配銷售,以提高傳統(tǒng)菜品的銷售量。
③主食類價格調(diào)整策略:如小碗米飯1元,大碗米飯1.5元。
訂單ID點菜種類TOP10
data_group = data['order_id'].value_counts()[:10] data_group.plot(kind='bar',fontsize=16) plt.title('訂單點菜的種類TOP10') plt.xlabel('訂單ID',fontsize=16) plt.ylabel('點菜種類',fontsize=16) for x,y in enumerate(data_group):print(x,y)plt.text(x,y+1,y,ha='center',fontsize=12) ##ha='center'字體居中顯示 plt.title('訂單點菜的種類TOP10') plt.xlabel('訂單ID') plt.ylabel('點菜種類') 上圖總結(jié):八月份餐廳訂單點菜種類前10名,平均點菜25個菜品。該點菜種類的菜品,那個菜品利潤更高,可適當(dāng)加大宣傳力度,做好營銷工作。以提高餐廳的利潤。
訂單ID點菜數(shù)量TOP10(分組order_id,counts求和,排序,前十)
上圖總結(jié):八月份餐廳訂單點菜數(shù)量前10名,平均點菜30個菜品。餐廳經(jīng)營者可否根據(jù)點餐數(shù)量設(shè)滿足不同需求的個性化菜單,對就餐者提供合理的訂餐建議,避免菜品浪費現(xiàn)象產(chǎn)生。
訂單id消費最多的金額TOP10(排序)
上圖顯示了前10名訂單ID消費金額的分布情況,根據(jù)分布情況,餐廳經(jīng)營者可否將訂單ID者劃分為不同的等級,如VIP1、VIP2、VIP3、VIP4、VIP5。數(shù)字越大等級越高。針對VIP辦理年卡、季卡、月卡、周卡等促進顧客進行多次消費。
訂單ID平均消費最貴TOP10
Group_sum['average']=Group_sum['total_amounts']/Group_sum['counts'] sort_average = Group_sum.sort_values(by='average',ascending=False) sort_average['average'][:10].plot(kind='bar') plt.title('消費單價前10名') plt.xlabel('訂單ID') plt.ylabel('消費單價')觀察上圖可看出前十名消費單價集中在100元左右。餐廳經(jīng)營者可根據(jù)消費水平對餐廳菜品價格進行合理定價。同時幫助經(jīng)營者認清該餐廳的消費等級,通過對餐廳消費水平設(shè)置價格標(biāo)簽,來精準(zhǔn)的尋找該消費階層的人群。
** 一天當(dāng)中什么時間段,點菜量比較集中(用hour來計算)**
data['hourcount']= 1 #創(chuàng)建新列,用于計數(shù) data['time'] = pd.to_datetime(data['place_order_time']) #將時間轉(zhuǎn)換成日期類型存儲原始數(shù)據(jù)長這樣:
可以看到數(shù)據(jù)格式并不規(guī)范,我們需進行處理
pandas中的to_datetime()可獲取指定的時間和日期
將2016/8/1 11:05:36轉(zhuǎn)換成2016-8-1 11:05:36
data[‘hour’] = data[‘time’].map(lambda x:x.hour)
此處操作是將上一步中轉(zhuǎn)換了的日期類型數(shù)據(jù)進行拆分,分別將日期和時間賦予到不同的列。
可以看到原始表格新增了兩列,分別是time列和hour列。
pandas的groupby需要明確以什么維度聚合,以及聚合的方式是sum求和,抑或max求最值,還是count計數(shù)。上述代碼是用‘hour’來聚合,聚合方式是count計數(shù)。接下來繪制以小時來聚合的數(shù)據(jù),代碼展示如下:
gp_by_hour.plot(kind='bar',fontsize=16) for x,y in enumerate(gp_by_hour):print(x,y)plt.text(x,y+1,y,ha='center',fontsize=12) ##ha='center'字體居中顯示 plt.xlabel('小時',fontsize=16) plt.ylabel('下單數(shù)量',fontsize=16) plt.title('下單數(shù)與小時的關(guān)系圖',fontsize=16)- List item
從上述圖表中我們可以得到如下結(jié)論:
①14:00和22:00 下單人數(shù)最少,可以減少該時間段工作的員工人數(shù)。
②17:00-21:00 時間段,進餐人數(shù)達到了一日中的高峰期,下單數(shù)量均大于1000。可以增加該時間段員工的數(shù)量,或者雇傭該小時段的臨時工,來幫助餐廳服務(wù)的開展。
③上午的下單量約為下午下單量的三分之二,人們更傾向于下午時間段在餐廳消費。
那一天訂餐數(shù)量最多(操作同上)
查看星期幾人數(shù)最多,訂餐數(shù)最多,映射數(shù)據(jù)到日期
時間維度的餐廳訂單分析,可以幫助經(jīng)營者合理的設(shè)置員工排班時間和員工規(guī)模數(shù)量的敲定。做出更清楚、客觀的決策。
總結(jié)
以上是生活随笔為你收集整理的数据分析实战项目练习——餐厅订单数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AKKA:大数据下的并发编程模型
- 下一篇: Spring Boot 整合定时任务,可