当前位置: 首页 > news >正文

从‘小费’到‘泰坦尼克’:用Seaborn的boxplot快速探索3个经典数据集的秘密与异常

从‘小费’到‘泰坦尼克’:用Seaborn的boxplot快速探索3个经典数据集的秘密与异常

推开数据分析的大门,最令人着迷的莫过于那些隐藏在数字背后的故事。想象一下,你是一位数据侦探,手握三个充满谜团的经典数据集:记录着餐厅消费细节的"小费数据"、揭示鸢尾花分类奥秘的"花卉数据",以及承载着泰坦尼克号乘客命运的"生存数据"。而今天,我们将使用Seaborn库中的箱线图(boxplot)这把"放大镜",逐一解开这些数据集中的异常与秘密。

1. 箱线图:数据侦探的必备工具

箱线图(Boxplot)诞生于1977年,由统计学家约翰·图基发明。它通过五个关键数字——最小值、第一四分位数(Q1)、中位数、第三四分位数(Q3)和最大值,为我们勾勒出数据的分布轮廓。中间的"箱子"涵盖了50%的数据,而"须线"则延伸至正常数据的边界。任何落在1.5倍四分位距(IQR=Q3-Q1)之外的点,都会被标记为异常值。

在Python中,Seaborn库让箱线图的绘制变得异常简单。只需几行代码,我们就能将枯燥的数字转化为直观的视觉呈现。下面是一个基础示例:

import seaborn as sns import matplotlib.pyplot as plt # 加载示例数据集 tips = sns.load_dataset("tips") # 绘制基础箱线图 sns.boxplot(x="total_bill", data=tips) plt.show()

表:箱线图关键元素解析

元素名称统计意义数据解读
箱体下限Q1(第25百分位数)25%的数据小于此值
箱体中线中位数(第50百分位数)数据分布的中间值
箱体上限Q3(第75百分位数)75%的数据小于此值
下须线Q1-1.5IQR正常数据的最小边界
上须线Q3+1.5IQR正常数据的最大边界
离群点超出1.5IQR范围需要特别关注的异常值

2. 小费数据集:揭秘餐厅消费的隐藏模式

让我们首先走进餐厅的后厨,分析小费数据集。这个数据集记录了某餐厅244位顾客的消费信息,包括总账单金额、小费数额、顾客性别、是否吸烟、用餐日期和时间等。

2.1 周末的小费异常

一个有趣的问题是:周末的小费是否比工作日更慷慨?我们可以用箱线图来验证这个假设:

# 按星期几分组绘制小费比例箱线图 plt.figure(figsize=(10,6)) sns.boxplot(x="day", y="tip_percentage", data=tips.assign(tip_percentage=tips['tip']/tips['total_bill']*100)) plt.title("不同日期小费比例分布") plt.ylabel("小费比例(%)") plt.show()
  • 周四:中位数约15%,分布集中
  • 周五:中位数略高,出现几个高异常值
  • 周六:分布范围最广,高异常值最多
  • 周日:中位数最高,达到17%

注意:计算小费比例能消除账单金额的影响,更公平地比较慷慨程度

2.2 吸烟顾客的消费习惯

另一个有趣的维度是分析吸烟顾客与非吸烟顾客的消费差异:

# 吸烟与非吸烟顾客的账单金额比较 plt.figure(figsize=(8,6)) sns.boxplot(x="smoker", y="total_bill", data=tips) plt.title("吸烟与非吸烟顾客的消费金额对比") plt.show()
  • 非吸烟顾客:中位数约16美元,分布相对集中
  • 吸烟顾客:中位数略高(18美元),且存在多个高额异常账单
  • 最高异常值:非吸烟组约50美元,吸烟组接近60美元

3. 鸢尾花数据集:寻找植物界的"异类"

转向自然界,鸢尾花数据集记录了三种鸢尾花(Setosa、Versicolor和Virginica)的花萼和花瓣测量数据。这个数据集常被用于分类算法测试,但今天我们关注其中的异常个体。

3.1 花瓣长度的物种差异

比较三种鸢尾花的花瓣长度分布:

iris = sns.load_dataset("iris") plt.figure(figsize=(10,6)) sns.boxplot(x="species", y="petal_length", data=iris) plt.title("不同种类鸢尾花的花瓣长度分布") plt.show()

表:三种鸢尾花花瓣长度统计(mm)

种类最小值Q1中位数Q3最大值异常值
Setosa1014151619
Versicolor30424548511个低异常
Virginica45555863692个高异常

3.2 综合特征的异常检测

结合花瓣长度和宽度,我们可以更全面地识别异常个体:

# 创建综合特征:花瓣面积(近似) iris['petal_area'] = iris['petal_length'] * iris['petal_width'] plt.figure(figsize=(10,6)) sns.boxplot(x="species", y="petal_area", data=iris) plt.title("不同种类鸢尾花的花瓣面积分布") plt.show()
  • Versicolor组出现一个明显偏小的异常个体
  • Virginica组有两个花瓣面积特别大的样本
  • Setosa组所有数据点都在正常范围内

4. 泰坦尼克号:生存背后的数据真相

泰坦尼克号数据集记录了891名乘客的信息和生存状态。让我们用箱线图揭开一些鲜为人知的生存模式。

4.1 舱位与年龄的生存关联

分析不同舱位乘客的年龄分布与生存率:

titanic = sns.load_dataset("titanic") plt.figure(figsize=(12,6)) sns.boxplot(x="pclass", y="age", hue="survived", data=titanic) plt.title("不同舱位乘客的年龄分布(按生存状态)") plt.show()
  • 头等舱:幸存者年龄中位数高于遇难者
  • 二等舱:年龄分布相似,但幸存者中有更多儿童
  • 三等舱:遇难者中有更多年轻成人

4.2 票价支付的异常模式

票价往往反映了舱位等级,但箱线图揭示了一些有趣异常:

plt.figure(figsize=(10,6)) sns.boxplot(x="pclass", y="fare", data=titanic) plt.ylim(0, 300) # 排除极端值以便观察 plt.title("不同舱位的票价分布") plt.show()
  • 头等舱:中位数约60英镑,但存在多个超高票价(>200英镑)
  • 二等舱:分布相对集中,中位数约15英镑
  • 三等舱:大部分票价低于20英镑,但有少数异常高值

提示:这些高价三等舱票可能是团体票或特殊舱位,值得进一步调查

5. 高级技巧:多维度异常检测

5.1 分组箱线图揭示隐藏模式

结合多个变量进行分析,例如同时观察小费数据集的日期和用餐时间:

plt.figure(figsize=(12,6)) sns.boxplot(x="day", y="total_bill", hue="time", data=tips) plt.title("不同日期和用餐时间的消费金额分布") plt.show()
  • 周六晚餐的消费金额明显高于午餐
  • 周四的午餐和晚餐消费差异最小
  • 周日只有晚餐数据,中位数高于周六晚餐

5.2 小提琴图增强分布感知

箱线图有时会掩盖数据的实际分布形状,这时可以结合小提琴图:

plt.figure(figsize=(10,6)) sns.violinplot(x="species", y="petal_length", data=iris, inner="box") plt.title("鸢尾花花瓣长度分布(小提琴图+箱线图)") plt.show()

这种组合既能展示数据的概率密度,又保留了箱线图的统计指标,特别适合展示双峰分布等复杂模式。

6. 异常值处理实战策略

发现异常值后,我们需要决定如何处理它们。以下是几种常见策略:

  1. 调查核实:检查数据收集过程,确认是否为记录错误
  2. 保留分析:如果是真实但有意义的异常,保留并单独分析
  3. 数据转换:应用对数变换等减少异常值影响
  4. 边界处理:将超出合理范围的值替换为边界值

例如,对小费数据集中的超高账单,我们可以选择对数变换:

import numpy as np tips['log_total_bill'] = np.log(tips['total_bill']) plt.figure(figsize=(10,5)) sns.boxplot(x="day", y="log_total_bill", data=tips) plt.title("对数变换后的消费金额分布") plt.show()

这种变换后,各日期组的分布更加对称,异常值的影响减小,更适合进行统计分析。

http://www.jsqmd.com/news/894185/

相关文章:

  • Air1601 LCD 显示开发全解析
  • 扫地机器人行业 企业篇-追觅科技
  • 别再花钱找淘宝了!保姆级教程:Win10系统下AMEsim、Matlab、Visual Studio三件套一站式安装避坑指南
  • 2026年IPO资料可以用AI自动制作吗:投行文档自动化选型对比与落地清单 - 观域传媒
  • 别再右键属性了!Edge/Chrome/Firefox浏览器安装路径的3种隐藏查看法(含命令行版)
  • UE4开发者必看:解决Nvidia Ansel提示‘必须支持的游戏’错误,保姆级排查指南
  • 扫地机器人行业 企业篇-小米/米家
  • cmux:专为 AI 编程 Agent 打造的 macOS 终端神器
  • Node js 服务中集成 Taotoken 实现异步聊天补全的完整示例
  • Unity ShaderGraph实战:用Input节点5分钟搞定一个动态水面材质(附完整节点图)
  • 赋予网络物理直觉:一种多模态融合和物理敏感注意力的离心泵故障诊断(完善中......)
  • 8051中断优化:ONEREGBANK指令原理与实践
  • 课堂复刻|个人经验分享:Spring Boot整合MyBatis
  • 别再被鱼眼照片搞懵了!用OpenCV+Python手把手教你搞定相机畸变矫正(附完整代码)
  • UVa 297 Quadtrees
  • Cortex-M4外部Flash断点调试问题解决方案
  • 从开发者角度观察Taotoken平台模型更新与路由优化的及时性体验
  • 2026年5月更新指南:武安靠谱的单招机构企业选择策略解析 - 2026年企业资讯
  • AIoT与嵌入式系统深度解析:2026软考案例核心考点全攻略
  • 量子机器学习在药物发现中的创新应用
  • 别再乱改grub了!用tuned优雅隔离CPU核心,让你的Linux应用性能飞起来
  • 2026年Q2杭州智显货架评测:杭州更鞋柜、杭州校园存包柜、杭州耗材管理柜、杭州警用装备柜、浙江RFID智能货架选择指南 - 优质品牌商家
  • C51开发中stdarg.h实现机制与内存模型解析
  • 2026年乐山汽车改装公司实测评测:乐山汽车内饰改装/乐山汽车刹车改装/乐山汽车外观改装/乐山汽车延保服务/乐山汽车改装备案/选择指南 - 优质品牌商家
  • 2026年5月有名的蝶阀订购厂家深度评测:技术驱动下的阀门优选之道 - 2026年企业资讯
  • ShaderGraph避坑指南:从导入URP到属性公开,新手最容易卡住的5个问题及解决
  • B41C2 是什么牌号?四川莱韦美特高强变形镁合金 B41C2 参数详解(兼谈与 B91C2 的区别与选型)
  • Arm ISP多上下文环境构建与优化实战指南
  • B91C2 是什么牌号?四川莱韦美特高强变形镁合金 B91C2 参数、命名、对标与应用全解读
  • 西南市政管网服务企业排行:成都荣晟祥发市政工程有限公司联系/四川非开挖顶管置换修复联系电话/园区管道探测哪家好/选择指南 - 优质品牌商家