Python数据分析与可视化Pandas统计分析(实训二)

Posted ZSYL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据分析与可视化Pandas统计分析(实训二)相关的知识,希望对你有一定的参考价值。

对小费数据集进行数据分析与可视化

1.导入模块

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']   #显示中文字体
plt.rcParams['axes.unicode_minus'] = False    #显示负号
%matplotlib inline

2.获取数据

fdata=pd.read_excel('tips.xls')
fdata
total_billtipsexsmokerdaytimesize
016.991.01FemaleNoSunDinner2
110.341.66MaleNoSunDinner3
221.013.50MaleNoSunDinner3
323.683.31MaleNoSunDinner2
424.593.61FemaleNoSunDinner4
525.294.71MaleNoSunDinner4
68.772.00MaleNoSunDinner2
726.883.12MaleNoSunDinner4
815.041.96MaleNoSunDinner2
914.783.23MaleNoSunDinner2
1010.271.71MaleNoSunDinner2
1135.265.00FemaleNoSunDinner4
1215.421.57MaleNoSunDinner2
1318.433.00MaleNoSunDinner4
1414.833.02FemaleNoSunDinner2
1521.583.92MaleNoSunDinner2
1610.331.67FemaleNoSunDinner3
1716.293.71MaleNoSunDinner3
1816.973.50FemaleNoSunDinner3
1920.653.35MaleNoSatDinner3
2017.924.08MaleNoSatDinner2
2120.292.75FemaleNoSatDinner2
2215.772.23FemaleNoSatDinner2
2339.427.58MaleNoSatDinner4
2419.823.18MaleNoSatDinner2
2517.812.34MaleNoSatDinner4
2613.372.00MaleNoSatDinner2
2712.692.00MaleNoSatDinner2
2821.704.30MaleNoSatDinner2
2919.653.00FemaleNoSatDinner2
........................
21428.176.50FemaleYesSatDinner3
21512.901.10FemaleYesSatDinner2
21628.153.00MaleYesSatDinner5
21711.591.50MaleYesSatDinner2
2187.741.44MaleYesSatDinner2
21930.143.09FemaleYesSatDinner4
22012.162.20MaleYesFriLunch2
22113.423.48FemaleYesFriLunch2
2228.581.92MaleYesFriLunch1
22315.983.00FemaleNoFriLunch3
22413.421.58MaleYesFriLunch2
22516.272.50FemaleYesFriLunch2
22610.092.00FemaleYesFriLunch2
22720.453.00MaleNoSatDinner4
22813.282.72MaleNoSatDinner2
22922.122.88FemaleYesSatDinner2
23024.012.00MaleYesSatDinner4
23115.693.00MaleYesSatDinner3
23211.613.39MaleNoSatDinner2
23310.771.47MaleNoSatDinner2
23415.533.00MaleYesSatDinner2
23510.071.25MaleNoSatDinner2
23612.601.00MaleYesSatDinner2
23732.831.17MaleYesSatDinner2
23835.834.67FemaleNoSatDinner3
23929.035.92MaleNoSatDinner3
24027.182.00FemaleYesSatDinner2
24122.672.00MaleYesSatDinner2
24217.821.75MaleNoSatDinner2
24318.783.00FemaleNoThurDinner2

244 rows × 7 columns

3.分析数据

(1) 查看数据待描述信息

fdata.describe().head()
total_billtipsize
count244.000000244.000000244.000000
mean19.7859432.9982792.569672
std8.9024121.3836380.951100
min3.0700001.0000001.000000
25%13.3475002.0000002.000000

(2)修改列名为汉字,并显示前5行数据

#修改列名为汉字total_bill	tip	sex	smoker	day	time	size
fdata.rename(columns=('total_bill':'消费总额','tip':'小费','sex':'性别','smoker':'是否抽烟',
                       'day':'星期','time':'聚餐时间段','size':'人数'),inplace=True)

fdata.head()
消费总额小费性别是否抽烟星期聚餐时间段人数
016.991.01FemaleNoSunDinner2
110.341.66MaleNoSunDinner3
221.013.50MaleNoSunDinner3
323.683.31MaleNoSunDinner2
424.593.61FemaleNoSunDinner4

(3)增加一列“人均消费”

fdata['人均消费']=round(fdata['消费总额']/fdata['人数'],2)
fdata.head()
消费总额小费性别是否抽烟星期聚餐时间段人数人均消费
016.991.01FemaleNoSunDinner28.49
110.341.66MaleNoSunDinner33.45
221.013.50MaleNoSunDinner37.00
323.683.31MaleNoSunDinner211.84
424.593.61FemaleNoSunDinner46.15

(4)查询抽烟男性中人均消费大于15的数据

# 方法1:
fdata[(fdata['是否抽烟']=='Yes') &(fdata['性别']=='Male') & (fdata['人均消费']> 15) ]
# 方法2:
# fdata[(fdata.是否抽烟=='Yes') &(fdata.性别=='Male') & (fdata.人均消费> 15) ]
# 方法3:
# fdata.query( '是否抽烟=="Yes" & 性别=="Male" & 人均消费>15')
消费总额小费性别是否抽烟星期聚餐时间段人数人均消费
8332.685.00MaleYesThurLunch216.34
17050.8110.00MaleYesSatDinner316.94
17331.853.18MaleYesSunDinner215.92
17532.903.11MaleYesSunDinner216.45
17934.633.55MaleYesSunDinner217.32
18245.353.50MaleYesSunDinner315.12
18440.553.00MaleYesSunDinner220.27
23732.831.17MaleYesSatDinner216.42

(5)分析小费和总金额的关系

#分析小费和总金额的关系,散点图
fdata.plot(kind='scatter',x='消费总额',y='小费')
#正相关关系

(6)分析男女顾客哪个更慷慨,分组看看男性还是女性的小费平均水平更高

#分析男女顾客哪个更慷慨,就是分组看看男性还是女性的小费平均水平更高
fdata.groupby('性别')['小费'].mean()

性别
Female    2.833448
Male      3.089618
Name: 小费, dtype: float64

(7)分析日期和小费的关系

#分析日期和小费的关系,直方图
print(fdata['星期'].unique())
r=fdata.groupby('星期')['小费'].mean()
fig=r.plot(kind='bar',x='星期',y='小费',fontsize=12,rot=36)
# fig.axes.title.set_size(16)
['Sun' 'Sat' 'Thur' 'Fri']

(8)性别+抽烟书对慷慨度的影响

#性别+抽烟书对慷慨度的影响
r=fdata.groupby(['性别','是否抽烟'])['小费'].mean()
fig=r.plot(kind='bar',x=['性别','是否抽烟'],y='小费',fontsize=12,rot=30)
fig.axes.title.set_size(16)

(9)聚餐时间与小费数额的关系

#聚餐时间与小费数额的关系
r=fdata.groupby('聚餐时间段')['小费'].mean()
fig=r.plot(kind='bar',x='聚餐时间',y='小费')
fig.axes.title.set_size(16)

从分析图可以发现,晚餐时段的小费比午餐时段的要高。


加油!

感谢!

努力!

以上是关于Python数据分析与可视化Pandas统计分析(实训二)的主要内容,如果未能解决你的问题,请参考以下文章

Python数据分析与可视化Pandas数据载入与预处理(实训三)

Pandas高级数据分析快速入门之四——数据可视化篇

Pandas高级数据分析快速入门之一——Python开发环境篇

《Python开发 - Python库》PandasGUI安装与使用(数据可视化分析工具)

《Python开发 - Python库》PandasGUI安装与使用(数据可视化分析工具)

Pandas高级数据分析快速入门之三——数据挖掘与统计分析篇