小费数据集项目分析案例

Python面面观

共 2277字,需浏览 5分钟

 ·

2020-11-30 15:24

新手可以用这个基础案例,练习一些可视化的内容。

小费数据集项目分析目的:

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

  • 性别、是否吸烟、星期几、中/晚餐、聚餐人数和小费金额是否有一定的关联?

  • 小费金额占消费总金额的百分比是否服从正态分布?

# 导入包
import seaborn as sns
from pandas import Series,DataFrame
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
# 拿到小费数据集
tips = sns.load_dataset('tips')

# 数据介绍:total_bill列为消费总金额;tip列为小费金额;sex列为顾客性别;smoker列为顾客是否抽烟;day列为消费的星期;time列为聚餐的时间段;size列为聚餐人数

# 查看前5行数据
tips.head()



# 开始检查数据,数据量、数据缺失、数据是否异常等
tips.shape
(244, 7)
# 数值型数据描述性查看
tips.describe()



# 查看数据类型正常,并且没有缺失值
tips.info()
'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
# 查看单个变量tip的分布情况,使用直方图
sns.distplot(tips['tip'])



# 散点图查看小费和消费金额是否有相关性。图示表明,存在正线性相关。小费金额越高,小费越高
tips.plot(kind='scatter', x='total_bill', y='tip')


# 分类散点图,用于观察不同分类下,值的数量和高低分布
sns.stripplot(x='day',y='tip',data=tips)
sns.despine()



# 查看总金额和小费整体数据情况,图中总体金额呈现右偏,并且有部分异常值;小费呈现左偏

# figure() 设置图形大小
plt.figure(figsize=(12,8))
tips.boxplot(column=['total_bill','tip'],vert=False)




# 关注性别是否影响小费金额,这里使用男女总体平均值作为对比
male_tip = tips[tips['sex'] == ['Male']]['tip'].mean()
male_tip
3.0896178343949043
female_tip = tips[tips['sex'] == ['Female']]['tip'].mean()
female_tip
2.8334482758620685
s = Series(
    [male_tip, female_tip],
    index=['male','female']
)
s
male      3.089618
female    2.833448
dtype: float64
# 使用柱状图查看男女分类类别
s.plot(kind='bar')



# Seaborn预设了四种比例,根据大小依次为 paper notebook talk poster 默认是 notebook,也就是上述的样式
sns.set_context('talk')
s.plot(kind='bar')


# 上述算平均值较为繁琐,这里可以使用groupby,比较快捷
sex_group = tips.groupby('sex')['tip'].mean()
sex_group.plot(kind='bar')


# 使用同样方式查看每一天什么时刻小费较高 
time_tip = tips.groupby('time')['tip'].mean()
time_tip.plot(kind='bar')



# 使用同样方式查看每周哪一天小费较高
day_tip = tips.groupby('day')['tip'].mean()
day_tip.plot(kind='bar')



# 查看小费占总金额的分布情况
tips['percent_tip'] = tips['tip']/(tips['tip'] + tips['total_bill'])
tips.head()



# 使用直方图查看小费占比分布,从图中可以看出,小费占比分布基本符合正态分布,有个别异常点,以及左偏
tips['percent_tip'].plot(kind='hist')
output_19_1.png


浏览 70
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报