python数据分析:小费数据集描述性分析

一、项目背景

众所周知,在西方国家的服务行业中,顾客会给服务员一定金额的小费。本次项目研究对象是餐饮行业收集到的小费数据。

二、数据获取

本次项目的数据来源是python第三方库seaborn中自带的数据。数据集中含有7个字段,包括有消费总金额(totall_bill)(不含小费),小费金额(tip),顾客性别(sex),消费的星期(day),消费的时间段(time),用餐人数(size),顾客是否抽烟(smoker)

# 设置cell多行输出

from IPython.core.interactiveshell import InteractiveShell 
InteractiveShell.ast_node_interactivity = 'all' #默认为'last'
# 导入相关库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import os
# 导入数据集
tips = sns.load_dataset('tips')
tips.head()
返回数据集前5条数据.png

三、定义问题

本次研究将围绕小费数据集进行。

研究小费金额与消费总金额是否存在相关性?

小费金额与消费的日期,时间段,用餐人数以及顾客是否吸烟是否存在一定的关联?

四、数据清洗与整理

tips.info()  # 查看数据结构

# 数据结构 (244,7),也就是一共244条数据,包含7个字段的信息
# 从结构数据返回,观察不存在缺失数据,且各列的数据类型也符合实际情况
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 244 entries, 0 to 243
Data columns (total 7 columns):
total_bill    244 non-null float64
tip           244 non-null float64
sex           244 non-null category
smoker        244 non-null category
day           244 non-null category
time          244 non-null category
size          244 non-null int64
dtypes: category(4), float64(2), int64(1)
memory usage: 7.2 KB
tips.isna().sum() # 进一步判断是否存在缺失数据

# 不存在缺失数据
total_bill    0
tip           0
sex           0
smoker        0
day           0
time          0
size          0
dtype: int64

五、数据探索

1.消费总金额与小费金额的关系

# 小费金额基本情况描述
tips.describe()['tip']
count    244.000000
mean       2.998279
std        1.383638
min        1.000000
25%        2.000000
50%        2.900000
75%        3.562500
max       10.000000
Name: tip, dtype: float64
tips['tip'].hist(bins=20,figsize=(8,6))
plt.xlabel('tip')
plt.ylabel('freq')
plt.title('Basic information of tip amount',pad=12)
Basic information of tip amount.png
# 绘制散点图查看小费金额和消费总金额的关系
sns.set(style='darkgrid',color_codes=True)
sns.lmplot(x="total_bill", y="tip",data=tips,)
plt.title('Relationship between total consumption amount and tip amountt',pad=12)

# 计算两个连续变量(消费总金额和小费金额)的pearson相关系数
corr = np.corrcoef(x=tips.total_bill,y=tips.tip)[0,1]
print('消费总金额与小费金额的相关系数pearson为:%.2f'%corr)
消费总金额与小费金额的相关系数pearson为:0.68
Relationship between total consumption amount and tip amountt.png
# 计算小费金额占聚合所有费用的百分比(聚合所有费用含消费总金额+小费金额)
tips['percent'] = tips['tip']/(tips['tip']+tips['total_bill'])
tips.head()
image.png
# 描述小费百分比的分布情况
tips['percent'].hist(bins=20,figsize=(8,6))
plt.xlabel('percent',labelpad=12)
plt.ylabel('freq',labelpad=12)
plt.title('Tip percentage distribution',pad=12)
Tip percentage distribution.png

(1)从数据集所涵盖的数据中,顾客的小费金额最高达到10美金,最少为1美金,大部分小费金额集中在均值3美金附近。

(2)从散点图描述两个变量之间的关系可知,小费金额与消费总金额存在正相关的关系,表示消费的金额越多,小费给得越多。

(3)其次从直方图可看出,小费金额占聚合所有花费金额的百分比分布基本符合正态分布,大多集中在均值附近,但也有几个异常的点。

2.顾客的性别与小费金额的关系

# 男顾客的小费金额分布情况
male = tips[tips['sex']=='Male']
male['tip'].hist(bins=20,figsize=(8,6))
plt.xlabel('tip')
plt.ylabel('freq')
plt.xlim([1,10])
plt.title('Tip amount distribution of male customers',pad=12)
Tip amount distribution of male customers.png
# 女顾客小费金额分布情况
female = tips[tips['sex']=='Female']
female['tip'].hist(bins=20,figsize=(8,6))
plt.xlabel('tip')
plt.ylabel('freq')
plt.title('Tip amount distribution of female customers',pad=12)
Tip amount distribution of female customers.png
gender = tips.groupby('sex').mean()['tip']

gender.plot(kind='bar',figsize=(8,6),rot=0)
plt.title('Relationship between gender and tip amount',pad=12)
plt.ylabel('tip_for_mean',labelpad=12)
Relationship between gender and tip amount.png

(1)从男顾客和女顾客的小费金额分布情况知,男顾客的小费金额最高达到10美金,最少为1美金;而女顾客的小费金额最高为6.5美金,最少同样为1美金。

(2)从柱状图反映出,男顾客的小费金额高于女顾客的小费金额。

3.顾客的消费时间段与小费金额的关系

# 查看消费时间段time字段的分类 → 分为2个类别
tips['time'].cat.categories
Index(['Lunch', 'Dinner'], dtype='object')
# 按类别汇总计算平均小费金额
time = tips.groupby('time').mean()['tip']
time
time
Lunch     2.728088
Dinner    3.102670
Name: tip, dtype: float64
time.plot(kind='bar',figsize=(8,6),rot=0)
plt.ylabel('tip_for_mean')
plt.title('Relationship between consumption time and tip amount',pad=12)
Relationship between consumption time and tip amount.png

很显然,从柱状图的分布看出,顾客晚餐时段的小费金额比午餐时段高

4.顾客聚餐的日期与小费的关系

tips['day'].cat.categories # 查看day字段的分类  

# 返回4个分类,周四,周五,周六,周日
Index(['Thur', 'Fri', 'Sat', 'Sun'], dtype='object')
# 按星期几统计平均小费金额
day = tips.groupby('day').mean()['tip']
day
day
Thur    2.771452
Fri     2.734737
Sat     2.993103
Sun     3.255132
Name: tip, dtype: float64
day.plot(kind='bar',figsize=(8,6),rot=0)
plt.ylabel('tip_for_mean')
plt.title('The relationship between the date of the dinner party and the tip',pad=12)
The relationship between the date of the dinner party and the tip.png

周四,周五的小费金额是最少的,到了周六的小费金额开始升高,周日的小费金额则为最高的

5.顾客吸烟与否与小费金额的关系

tips['smoker'].cat.categories  # 查看吸烟字段的分类
Index(['Yes', 'No'], dtype='object')
smoker = tips.groupby('smoker').mean()['tip']
smoker=smoker.rename(index={'Yes':'yes_smoker','No':'no_smoker'})
smoker
smoker
yes_smoker    3.008710
no_smoker     2.991854
Name: tip, dtype: float64
smoker.plot(kind='bar',figsize=(8,6),rot=0)
plt.ylabel('tip_for_mean')
plt.title('The relationship between smoking and tip amount',pad=12)
The relationship between smoking and tip amount.png

从上图看出,吸烟和不吸烟的顾客的小费金额基本相同,因此,顾客吸烟与否与小费的金额高低没有直接关系

6.聚餐人数与小费金额的关系

size = tips.groupby('size').mean()['tip']
size
size
1    1.437500
2    2.582308
3    3.393158
4    4.135405
5    4.028000
6    5.225000
Name: tip, dtype: float64
size.plot(figsize=(8,6))
plt.ylabel('tip_for_mean')
plt.title('The relationship between the number of diners and the amount of tips',pad=12)
The relationship between the number of diners and the amount of tips.png

从数据集涵盖的数据看出,1人用餐时小费金额最少,随着聚餐人数的增多,小费的金额也随之上升。

但当聚餐人数达至5人时,小费金额略有下降,而聚餐人数达至6人小费金额达到最高。

六、总结

1.从数据集所涵盖的数据而言,顾客的小费最低金额为1美元,最高金额可达到10美元。而小费金额与消费总金额成正相关关系,即小费金额会随着消费金额升高而升高。

2.其次,小费金额也与性别和用餐时段、日期有关。从数据集所涵盖的数据而言,男性顾客的小费金额会比女性顾客的高,并且晚餐时段的小费金额会高于午餐时段的小费金额,而且周六日的小费金额更高,尤其是周日的时间。

3.另外,小费金额还和聚餐人数有关,1人用餐时小费金额最少,然而随着聚餐人数的增多,小费随之上升;但当聚餐人数达至5人时,小费金额略有下降,聚餐人数达至6人小费金额达到最高。

4.最后,顾客吸烟与否对小费金额的高低并没有影响。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容