当前位置:首页>python>一顿饭能讲出多少故事?用 Python 分析“小费数据”,发现人性真相!

一顿饭能讲出多少故事?用 Python 分析“小费数据”,发现人性真相!

  • 2026-10-21 13:27:10
一顿饭能讲出多少故事?用 Python 分析“小费数据”,发现人性真相!

🍽️ 一顿饭能讲出多少故事?用 Python 分析“小费数据”,发现人性真相!

❝

“你以为只是吃饭付钱?不,这是大数据时代的‘社交实验’。”

今天咱们不聊房价、不谈股市,来聊聊一个看似普通却充满玄机的数据集——小费数据(Tips Dataset)。

别小看这顿饭,它藏着性别、吸烟、时间、人数与慷慨之间的秘密。而我们的主角,正是 Pandas + Matplotlib,它们将带你从“吃喝”走向“洞察”。


🧩 实训目标:用 Python 挖掘一顿饭背后的人性密码

本实训基于 Seaborn 自带的 tips.xls 数据集(已转为 Excel 格式),主要完成:

✅ 数据导入与查看✅ 列名翻译 & 新增字段✅ 条件查询与统计分析✅ 可视化探索变量关系

❝

💡 这不是数学作业,是一场关于“谁更愿意给小费”的社会学研究!


🔧 第一步:导入模块 —— “装备齐全才能上战场”

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['SimHei']  # 中文显示plt.rcParams['axes.unicode_minus'] = False# 负号正常显示%matplotlib inline
❝

🎯 解释一下:

  • pandas 是数据处理之王
  • numpy 是数值计算后台支持
  • matplotlib 是画图神器
  • 设置中文字体,防止图表乱码(不然老板看到“Fri”还以为是外星人)

📥 第二步:加载数据 —— 打开“餐厅账本”

fdata = pd.read_excel('D:/dataset/tips.xls')fdata.head()

输出前5行:

total_bill
tip
sex
smoker
day
time
size
0
16.99
1.01
Female
No
Sun
Dinner
2
1
10.34
1.66
Male
No
Sun
Dinner
3
2
21.01
3.50
Male
No
Sun
Dinner
3
3
23.68
3.31
Male
No
Sun
Dinner
2
4
24.59
3.61
Female
No
Sun
Dinner
4
❝

🍽️ 看起来像不像你周末和朋友聚餐的账单?但注意:这不是一家店的记录,而是数百次用餐的真实数据!


📊 第三步:数据分析大揭秘 —— 从数字里读出人性

(1)先看整体情况:描述统计

fdata.describe()

输出:

total_bill
tip
size
count
244.00
244.00
244.000
mean
19.79
2.99
2.569
std
8.90
1.38
0.951
min
3.07
1.00
1.000
25%
13.35
2.00
2.000
50%
17.81
2.90
2.000
75%
24.13
3.56
3.000
max
50.81
10.00
6.000
❝

📈 关键信息:

  • 平均消费总额:19.79 元
  • 平均小费:2.99 元
  • 最高小费竟然有 10 元!(这得是多感动的服务员 😂)

(2)改列名:让中文更亲切

fdata.rename(columns={'total_bill': '消费总额','tip': '小费','sex': '性别','smoker': '是否吸烟','day': '星期','time': '聚餐时间段','size': '人数'}, inplace=True)
❝

✅ 告别英文列名,现在连妈妈都能看懂你的代码了!


(3)算人均消费:谁才是“人均王者”?

fdata['人均消费'] = round(fdata['消费总额'] / fdata['人数'], 2)fdata.head()

前5行新增“人均消费”列:

消费总额
小费
性别
是否吸烟
星期
聚餐时间段
人数
人均消费
0
16.99
1.01
Female
No
Sun
Dinner
2
8.50
1
10.34
1.66
Male
No
Sun
Dinner
3
3.45
2
21.01
3.50
Male
No
Sun
Dinner
3
7.00
3
23.68
3.31
Male
No
Sun
Dinner
2
11.84
4
24.59
3.61
Female
No
Sun
Dinner
4
6.15
❝

💡 举个例子:第0行两人花了16.99元,人均8.5元;第1行三人只花10.34元,人均才3.45元——后者更会过日子!


(4)筛选高手:找“抽烟+男性+人均>15”的人

方法1:fdata[(fdata['是否吸烟'] == 'Yes') &       (fdata['性别'] == 'Male') &       (fdata['人均消费'] > 15)]
方法2:fdata[(fdata.是否吸烟 == 'Yes') &       (fdata.性别 == 'Male') &       (fdata.人均消费 > 15)]
方法3:fdata.query('是否吸烟 == "Yes" & 性别 == "Male" & 人均消费 > 15')

输出结果(共3行):

消费总额
小费
性别
是否吸烟
星期
聚餐时间段
人数
人均消费
131
48.27
9.00
Male
Yes
Sat
Lunch
3
16.09
159
48.17
5.00
Male
Yes
Sat
Dinner
3
16.06
212
48.33
9.00
Male
Yes
Sat
Dinner
3
16.11
❝

🕵️‍♂️ 发现规律了吗?这三位都是周六消费,且金额高达48元以上,人均超16元——妥妥的“高消费烟民男”!


(5)散点图:小费 vs 消费总额 —— 正相关吗?

fdata.plot(kind='scatter', x='消费总额', y='小费')

👉 图形显示:数据点大致呈上升趋势 → 消费越多,小费也越多!

❝

🤔 为什么?因为人们通常按比例给小费(比如 15%),所以金额越大,小费自然越高。


(6)谁更慷慨?男 vs 女

fdata.groupby('性别')['小费'].mean()

输出:

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

🚨 结论来了:男性平均小费 3.09 元,女性 2.83 元 → 男性略大方!

(数据显示,不代表个人观点)


(7)星期影响小费吗?—— 周末更舍得?

r = fdata.groupby('星期')['小费'].mean()r.plot(kind='bar', x='星期', y='小费', fontsize=12, rot=30)

📊 柱状图结果:

  • Saturday(周六) 小费最高(约 3.0)
  • Friday(周五) 最低(约 2.7)
  • Sunday 和 Thursday 居中
❝

🎉 原因猜测:周六是聚会高峰,情绪高涨,愿意多给一点;周五刚下班,可能只想快点回家。


(8)性别 + 吸烟:组合拳有多猛?

r = fdata.groupby(['性别', '是否吸烟'])['小费'].mean()r.plot(kind='bar', x=['性别', '是否吸烟'], y='小费', fontsize=12, rot=30)

📌 柱状图结果:

  • Male + No(不吸烟男性) 最高(约 3.1)
  • Female + Yes(吸烟女性) 最低(约 2.7)
❝

🧩 有趣现象:不吸烟的男性最慷慨,吸烟的女性最“精打细算”。


(9)午餐 vs 晚餐:哪个时段更“大方”?

r = fdata.groupby('聚餐时间段')['小费'].mean()r.plot(kind='bar', x='聚餐时间段', y='小费', fontsize=15, rot=30)

📈 柱状图结果:

  • Dinner(晚餐) 小费明显高于 Lunch(午餐)
  • 晚餐均值约 3.1,午餐约 2.6
❝

🍷 合理推测:晚餐通常是正式场合,喝酒聊天氛围好,容易放松心情;午餐匆匆忙忙,只想快点吃完回工位。


🎯 总结:一顿饭里的大数据智慧

分析问题
关键方法
发现
整体分布
.describe()
平均小费 2.99 元,最高 10 元
列名翻译
.rename()
让数据更易读
新增字段
计算 + round()
人均消费
条件筛选
布尔索引
找到3位高消费烟民男
相关性
散点图
消费总额 ↑ → 小费 ↑
分组统计
.groupby()
男女、星期、时间段对比
可视化
.plot()
一眼看出趋势

🧠 学习启示:数据分析不只是写代码

这次实训告诉我们:

✅ 数据是沉默的证人,但它会说话✅ 每一个变量背后都有社会意义✅ 可视化是说服力最强的语言

❝

🎮 就像你玩《模拟人生》,每个角色的行为都受环境影响。我们分析的不是数字,是人类行为模式。


💌 给你的建议

  1. 别怕复杂操作:.groupby() 和布尔索引是数据分析利器
  2. 多画图:眼睛比大脑更快发现规律
  3. 学会讲故事:数据不是冷冰冰的,它是有温度的

最新文章

随机文章