01 引
我們手里有一份餐廳統(tǒng)計(jì)的用餐信息隐圾,包括餐費(fèi)困食、小費(fèi)、性別翎承、吸煙習(xí)慣硕盹、用餐時(shí)段、用餐人數(shù)等信息叨咖。下面讓我們用這份數(shù)據(jù)表練手python吧瘩例。
本次練習(xí)主要圍繞一下幾點(diǎn):
- groupby方法
- plot箱線圖
- plot散點(diǎn)圖
來(lái)吧,讓我們開(kāi)始吧甸各!
目的:分析小費(fèi)比例與其他因素的關(guān)系垛贤,出手最闊綽的人群長(zhǎng)什么樣?
02 實(shí)操
其實(shí)根據(jù)這份數(shù)據(jù)可以分析出很多好玩的東西趣倾,比如:
- 餐費(fèi)高低與性別聘惦、用餐時(shí)段、用餐日期的關(guān)系
- 吸煙顧客的畫像儒恋、不吸煙顧客的畫像
- 小費(fèi)比例與性別善绎、吸煙習(xí)慣、用餐時(shí)段等因素的關(guān)系
篇幅有限诫尽,舉一反三禀酱,今天我們就來(lái)看看小費(fèi)比例與性別、吸煙習(xí)慣牧嫉、用餐時(shí)段等因素的關(guān)系吧剂跟。
2.1 數(shù)據(jù)結(jié)構(gòu)
首先我們來(lái)看看這份數(shù)據(jù)長(zhǎng)什么樣
import pandas as pd
%matplotlib inline
%config InlineBackend.figure_format="retina"
tips=pd.read_csv("/Users/dengsudden/Documents/python_course/tips.csv",sep=";")
tips.head()
其中减途,各字段意義如下:
- total_bill:賬單總額
- tip: 所付小費(fèi)
- sex: 性別
- smoker:是否吸煙
- day:周一至周日的一天
- time:晚餐(dinner)還是午餐(lunch)
- size: 用餐人數(shù)
我們還可以通過(guò)一個(gè)散點(diǎn)圖更直觀地感受數(shù)據(jù)情況。
tipa.plot(kind="scatter",x="total_bill",y="tip",color="blue",label="bill_tip",figsize=(10,6))
橫軸表示消費(fèi)額曹洽,縱軸表示小費(fèi)鳍置,可以大致看到一個(gè)趨勢(shì)——小費(fèi)隨消費(fèi)額的增加而增加。(不過(guò)后面的分析我們會(huì)發(fā)現(xiàn)送淆,小費(fèi)比例隨消費(fèi)額的增加而減少)
2.2 分析思路
- 首先計(jì)算出小費(fèi)比例
- 提出假設(shè):小費(fèi)比例與消費(fèi)額成正比墓捻,與用餐人數(shù)成正比,有吸煙習(xí)慣的人小費(fèi)比例更高坊夫,男性比女性小費(fèi)比例高砖第,晚餐比午餐小費(fèi)比例高,周末小費(fèi)比例更高
- 驗(yàn)證假設(shè)
2.3 數(shù)據(jù)清洗
首先來(lái)看看離群值是否是異常值环凿,思路如下:
- 畫出整體數(shù)據(jù)小費(fèi)比例的箱線圖梧兼,可以看到離群值
- 根據(jù)箱線圖中離群值范圍,找出離群值具體數(shù)據(jù)情況智听,判別是否為異常值
- 使用df.drop([index1,index2,])去除數(shù)據(jù)中的異常值
# 計(jì)算小費(fèi)比例
tips["pct"]=tips.tip/tips.total_bill*100
tips.head()
#整體數(shù)據(jù)的小費(fèi)比例箱線圖
tips.pct.plot(kind="box",label="tips pct%",figsize=(10,6))
從整體數(shù)據(jù)來(lái)看羽杰,小費(fèi)比例最小在3%左右,最大在70%左右到推,中位數(shù)在15%左右考赛,均值為16%,這是一個(gè)很大的范圍莉测,我們需要深入到各個(gè)緯度去研究小費(fèi)比例的關(guān)聯(lián)因素颜骤。小費(fèi)比例高于30%被認(rèn)為是離群值,下面我看來(lái)看看這幾個(gè)離群值是否是異常值捣卤。
tips[tips.pct>30]
可以看到忍抽,小費(fèi)比例較高的這幾個(gè)離群值,小費(fèi)總額都不到10美元董朝,而小費(fèi)比例就超出一半鸠项,可以認(rèn)為這是異常值,因此我們剔除掉這些異常值子姜。然后再開(kāi)始數(shù)據(jù)挖掘祟绊。
# 去除異常值
tipa=tips.drop([67,172,178])
tipa[tipa.pct>30]
2.4 正題來(lái)了:數(shù)據(jù)挖掘
- 小費(fèi)比例與性別、日期哥捕、吸煙習(xí)慣牧抽、用餐時(shí)段的關(guān)系
#按男女分組,繪制小費(fèi)比例箱線圖
tipa[["pct","sex"]].boxplot(grid=False,by="sex",figsize=(10,6))
#按星期幾分組扭弧,繪制小費(fèi)比例箱線圖
tipa[["pct","day"]].boxplot(grid=False,by="day",figsize=(10,6))
# 是否吸煙與小費(fèi)比例關(guān)系
tipa[["pct","smoker"]].boxplot(grid=False,by="smoker",figsize=(10,6))
# 按性別分組阎姥,尋找吸煙與否與小費(fèi)比例關(guān)系
tipsm=tipa[tipa.sex=="Male"]
tipsf=tipa[tipa.sex=="Female"]
tipsm[["pct","smoker"]].boxplot(grid=False,by="smoker",figsize=(10,6))
tipsf[["pct","smoker"]].boxplot(grid=False,by="smoker",figsize=(10,6))
#小費(fèi)比例與用餐時(shí)段的關(guān)系
tipa[["pct","time"]].boxplot(grid=False,by="time",figsize=(10,6))
輸出如下(僅挑選有意義的輸出):
按性別分組來(lái)看,男女性的中位數(shù)接近鸽捻,男性的小費(fèi)比例分布非常均勻,女性的小費(fèi)比例下四分位數(shù)更加靠上,說(shuō)明女性更容易給出更高的小費(fèi)御蒲。
按日期分組來(lái)看衣赶,周四到周天的小費(fèi)比例中位數(shù)區(qū)別不大,節(jié)假日的周六周天人們給小費(fèi)更加隨意一點(diǎn)厚满,特別是周六府瞄,小費(fèi)比例范圍跨度達(dá)到了25%,原因可能在于周末人們擁有更加輕松愉快的心情(說(shuō)不定周末相親的人也更多碘箍,小費(fèi)比例高呢)遵馆。而這兩天也更容易出現(xiàn)高到離譜的小費(fèi)比例,我猜猜是不是周末喝高了丰榴,小手一抖货邓,小費(fèi)出手。
按吸煙習(xí)慣來(lái)看四濒,吸煙的人出手更加隨意换况,小費(fèi)比例范圍更廣,而不吸煙的人出手更加謹(jǐn)慎盗蟆。我想其中的原因可能在于吸煙者覺(jué)得自己帶給了別人更多不方便戈二,當(dāng)然,也可能和吸煙者的經(jīng)濟(jì)狀況喳资、付費(fèi)習(xí)慣有關(guān)觉吭。
將數(shù)據(jù)按性別分組,男性中的不吸煙群體的小費(fèi)比例比吸煙群體要高仆邓,其中的原因可能是不吸煙的男性可能擁有更高的教育水平和經(jīng)濟(jì)能力亏栈。女性中的吸煙群體的小費(fèi)比例明顯高于不吸煙群體,中位數(shù)超過(guò)女性不吸煙群體3%左右宏赘,分布范圍也更廣绒北。
從用餐時(shí)段來(lái)看,午餐的小費(fèi)比例范圍較窄察署,晚餐時(shí)段的小費(fèi)比例隨意性較大闷游,這可能是由于晚餐時(shí)段用餐時(shí)長(zhǎng)更長(zhǎng)、餐費(fèi)更高贴汪、很可能用了酒類飲料脐往,使得小費(fèi)比例較高。
接下來(lái)我們?cè)賮?lái)看看小費(fèi)比例和用餐人數(shù)的關(guān)系扳埂。
#小費(fèi)比例與用餐人數(shù)的關(guān)系
tipa.groupby("size").mean()
可以看到业簿,小費(fèi)比例隨用餐人數(shù)的增加而降低。
小費(fèi)狂魔畫像
基于上述分析阳懂,我們現(xiàn)在可以給出一個(gè)小費(fèi)狂魔的畫像了梅尤。
*小費(fèi)狂魔:給小費(fèi)比例較高的群體
周六單獨(dú)來(lái)餐廳吃晚餐的吸煙男性
03 結(jié)語(yǔ)
今天我們通過(guò)一張餐廳用餐信息表柜思,針對(duì)python的groupby和可視化函數(shù)進(jìn)行了實(shí)操練習(xí),給出了小費(fèi)狂魔的畫像巷燥。
其中涉及到數(shù)據(jù)清洗以及groupby赡盘、散點(diǎn)圖、箱線圖等方法的調(diào)用缰揪,希望對(duì)你有幫助陨享。