1.3 Seaborn的常用数据集


文档摘要

1.3 Seaborn的常用数据集 Seaborn常用数据集详解:数据探索的起点 1. 引言 Seaborn,作为Python数据可视化库中的佼佼者,构建于Matplotlib之上,专注于统计图形的绘制。它以简洁的语法和强大的功能,深受数据科学家和分析师的喜爱。为了方便用户快速上手和进行实践,Seaborn内置了一系列经典且常用的数据集。这些数据集涵盖了多个领域,从生物统计到经济分析,为我们学习和探索数据可视化提供了丰富的素材。 2. Seaborn数据集概览 Seaborn提供了一组精选的数据集,这些数据集通常被用于教学示例、演示和快速原型设计。通过 函数,我们可以轻松加载这些数据集。

1.3 Seaborn的常用数据集

Seaborn常用数据集详解:数据探索的起点

1. 引言

Seaborn,作为Python数据可视化库中的佼佼者,构建于Matplotlib之上,专注于统计图形的绘制。它以简洁的语法和强大的功能,深受数据科学家和分析师的喜爱。为了方便用户快速上手和进行实践,Seaborn内置了一系列经典且常用的数据集。这些数据集涵盖了多个领域,从生物统计到经济分析,为我们学习和探索数据可视化提供了丰富的素材。

2. Seaborn数据集概览

Seaborn提供了一组精选的数据集,这些数据集通常被用于教学示例、演示和快速原型设计。通过 seaborn.load_dataset() 函数,我们可以轻松加载这些数据集。以下是Seaborn库中一些最常用的内置数据集:

  • anscombe: 安斯库姆四重奏 (Anscombe's quartet)。这是一个经典的数据集,用于说明即使描述性统计量(如均值和方差)相同,不同的数据集也可能具有截然不同的分布和关系。

  • attention: 关于儿童注意力持续时间与年龄的数据集,可能用于研究注意力缺陷多动障碍 (ADHD)。

  • brain_networks: 大脑网络连接数据集,用于可视化复杂网络结构。

  • car_crashes: 美国各州交通事故统计数据集,包含各种与交通事故相关的指标,如酒精影响、超速等。

  • diamonds: 钻石价格预测数据集,包含钻石的各种特征(克拉、切工、颜色、净度等)及其价格,常用于回归分析和可视化。

  • dots: 一个用于演示 stripplotswarmplot 等散点图的数据集,展示了不同分组下的数据分布。

  • exercise: 运动生理学数据集,记录了不同个体的运动数据,如心率、时间、氧气消耗等,可以用于研究运动与生理指标的关系。

  • flights: 航班乘客数量数据集,记录了1949年至1960年间,每月不同航空公司的乘客数量,是时间序列分析和可视化的经典数据集。

  • fmri: 功能性磁共振成像 (fMRI) 数据集,用于神经科学研究,展示了大脑活动与刺激之间的关系。

  • geyser: 黄石公园老忠实间歇泉喷发数据,包含喷发持续时间和等待时间,常用于聚类分析和可视化。

  • iris: 鸢尾花数据集,经典分类数据集,包含三种鸢尾花(Setosa, Versicolor, Virginica)的萼片和花瓣长度、宽度等特征,常用于分类算法和可视化。

  • mpg: 汽车燃油效率数据集,记录了各种汽车的燃油效率(每加仑英里数,MPG)以及其他特征,如气缸数、排量、马力、重量等,常用于回归分析和可视化。

  • penguins: 企鹅数据集,类似于 iris 数据集,但关注的是企鹅物种、身体尺寸等特征,也常用于分类和可视化。

  • planets: 关于行星特征的数据集,例如质量、半径、轨道周期等,可以用于探索行星的性质和关系。

  • sea ice: 北极海冰范围数据集,是时间序列数据,用于研究气候变化。

  • taxis: 纽约市出租车行程数据集,包含行程的起点、终点、时间、距离、费用等信息,常用于地理可视化和时空数据分析。

  • tips: 小费数据集,记录了餐厅顾客的消费金额、小费、性别、是否吸烟、日期、时间段以及用餐人数等信息,是学习分类数据可视化和探索性数据分析的经典数据集。

  • titanic: 泰坦尼克号乘客生存数据集,记录了泰坦尼克号乘客的个人信息(年龄、性别、船舱等级等)以及生存情况,是机器学习入门和分类问题可视化的经典数据集。

3. Seaborn数据集详解与代码实践

接下来,我们将选择几个最常用的数据集进行详细的介绍,并结合代码示例展示如何加载、探索和可视化这些数据。

3.1 iris 数据集:经典的鸢尾花分类

  • 数据集介绍: iris 数据集是统计学和机器学习中最经典的数据集之一。它由英国统计学家和生物学家 Ronald Fisher 于1936年收集和整理。数据集包含了150个样本,每个样本代表一朵鸢尾花,并记录了其四个特征:萼片长度 (sepal length)、萼片宽度 (sepal width)、花瓣长度 (petal length) 和花瓣宽度 (petal width),单位均为厘米 (cm)。数据集中的鸢尾花属于三个不同的品种:Setosa, Versicolor 和 Virginica,每个品种各有50个样本。

  • 数据集用途: iris 数据集常用于:

    • 分类算法的入门练习: 由于其数据量适中、特征维度不高且类别明确,非常适合用于学习和实践各种分类算法,如逻辑回归、支持向量机 (SVM)、决策树、k-近邻 (KNN) 等。

    • 数据可视化教学: iris 数据集的四个特征可以很容易地通过散点图、箱线图、小提琴图等可视化方法进行探索,帮助理解不同特征之间的关系以及不同品种之间的差异。

    • 特征选择和降维: 可以用来演示特征选择和降维技术,例如主成分分析 (PCA),以降低数据维度并可视化高维数据。

  • 代码实践:

import seaborn as sns import matplotlib.pyplot as plt # 加载 iris 数据集 iris = sns.load_dataset('iris') # 查看数据集信息 print("Iris Dataset Info:") iris.info() # 查看数据集前 5 行 print("\nIris Dataset Head:") print(iris.head()) # 查看数据集描述性统计 print("\nIris Dataset Describe:") print(iris.describe()) # 可视化:使用散点图矩阵 (pairplot) 展示特征之间的关系,并用颜色区分不同品种 sns.pairplot(iris, hue='species') plt.suptitle("Pairplot of Iris Dataset", y=1.02) # 添加总标题 plt.show() # 可视化:使用箱线图 (boxplot) 展示不同品种在不同特征上的分布 plt.figure(figsize=(12, 8)) plt.subplot(2, 2, 1) sns.boxplot(x='species', y='sepal_length', data=iris) plt.title('Sepal Length Distribution') plt.subplot(2, 2, 2) sns.boxplot(x='species', y='sepal_width', data=iris) plt.title('Sepal Width Distribution') plt.subplot(2, 2, 3) sns.boxplot(x='species', y='petal_length', data=iris) plt.title('Petal Length Distribution') plt.subplot(2, 2, 4) sns.boxplot(x='species', y='petal_width', data=iris) plt.title('Petal Width Distribution') plt.tight_layout() # 自动调整子图参数,使之填充整个图像区域 plt.show()
  • 代码详解:

    1. import seaborn as snsimport matplotlib.pyplot as plt: 导入必要的库。Seaborn 用于数据可视化,Matplotlib.pyplot 用于更细致的图形控制和显示。

    2. iris = sns.load_dataset('iris'): 使用 sns.load_dataset() 函数加载 'iris' 数据集,并将其存储在 DataFrame 对象 iris 中。

    3. iris.info(): 打印数据集的摘要信息,包括列名、非空值数量、数据类型等,帮助我们了解数据的基本结构。

    4. iris.head(): 显示数据集的前 5 行,快速预览数据内容。

    5. iris.describe(): 显示数据集的描述性统计信息,包括均值、标准差、最小值、最大值、四分位数等,帮助我们了解数据的数值分布。

    6. sns.pairplot(iris, hue='species'): 使用 sns.pairplot() 绘制散点图矩阵。hue='species' 参数表示用 'species' 列的值对散点进行颜色编码,从而在图中区分不同的鸢尾花品种。plt.suptitle() 添加整个图表的总标题。

    7. plt.figure(figsize=(12, 8)): 创建一个指定大小的 Matplotlib 图形。

    8. plt.subplot(2, 2, i): 在图形中创建 2x2 的子图布局,并在第 i 个位置创建子图。

    9. sns.boxplot(x='species', y='feature', data=iris): 使用 sns.boxplot() 绘制箱线图,展示不同鸢尾花品种在不同特征上的分布情况。

    10. plt.title('Feature Distribution'): 为每个子图添加标题。

    11. plt.tight_layout(): 自动调整子图布局,避免子图之间或子图与图形边缘重叠。

    12. plt.show(): 显示绘制的图形。

  • 可视化解读:

    • 散点图矩阵 (Pairplot): 展示了 iris 数据集中所有特征两两组合的散点图。通过颜色编码,我们可以清晰地看到不同鸢尾花品种在不同特征组合上的分布情况。例如,花瓣长度和花瓣宽度在不同品种之间有明显的区分度,而萼片长度和萼片宽度的区分度相对较弱。

    • 箱线图 (Boxplot): 展示了每个鸢尾花品种在四个特征上的分布范围和中位数。箱线图可以帮助我们比较不同品种在各个特征上的差异,并识别可能存在的异常值。例如,Setosa 品种的花瓣长度和花瓣宽度明显小于 Versicolor 和 Virginica 品种。

3.2 tips 数据集:餐厅小费习惯分析

  • 数据集介绍: tips 数据集记录了餐厅顾客在不同情境下支付小费的情况。数据集包含了244个样本,每一行代表一笔订单,并记录了以下特征:

    • total_bill: 订单总金额 (美元)。

    • tip: 小费金额 (美元)。

    • sex: 顾客性别 (Male 或 Female)。

    • smoker: 是否吸烟 (Yes 或 No)。

    • day: 星期几 (Thur, Fri, Sat, Sun)。

    • time: 用餐时间段 (Lunch 或 Dinner)。

    • size: 用餐人数。

  • 数据集用途: tips 数据集常用于:

    • 探索性数据分析 (EDA): 用于探索不同因素如何影响小费金额,例如性别、是否吸烟、星期几、用餐时间段、用餐人数等。

    • 分类数据可视化: 非常适合使用 Seaborn 的各种分类数据可视化方法,如箱线图、小提琴图、条形图、计数图等,来展示不同类别变量之间的关系。

    • 回归分析: 可以用来建立模型预测小费金额,例如使用总账单金额、用餐人数等特征来预测小费。

  • 代码实践:

import seaborn as sns import matplotlib.pyplot as plt # 加载 tips 数据集 tips = sns.load_dataset('tips') # 查看数据集信息 print("Tips Dataset Info:") tips.info() # 查看数据集前 5 行 print("\nTips Dataset Head:") print(tips.head()) # 查看数据集描述性统计 print("\nTips Dataset Describe:") print(tips.describe()) # 可视化:使用散点图 (scatterplot) 展示总账单金额与小费金额的关系,并用颜色区分是否吸烟 sns.scatterplot(x='total_bill', y='tip', hue='smoker', data=tips) plt.title("Scatterplot of Total Bill vs. Tip (Hue: Smoker)") plt.show() # 可视化:使用箱线图 (boxplot) 展示不同星期几的小费分布 plt.figure(figsize=(8, 6)) sns.boxplot(x='day', y='tip', data=tips) plt.title("Boxplot of Tip Distribution by Day") plt.show() # 可视化:使用计数图 (countplot) 展示不同性别的顾客数量 plt.figure(figsize=(6, 5)) sns.countplot(x='sex', data=tips) plt.title("Countplot of Customers by Sex") plt.show() # 可视化:使用小提琴图 (violinplot) 展示不同用餐时间段的小费分布,并用性别分组 plt.figure(figsize=(8, 6)) sns.violinplot(x='time', y='tip', hue='sex', split=True, data=tips) plt.title("Violinplot of Tip Distribution by Time (Hue: Sex, Split)") plt.show()
  • 代码详解:

    1. 代码结构与 iris 数据集示例类似,首先加载 tips 数据集,并查看数据集信息、头部和描述性统计。

    2. sns.scatterplot(x='total_bill', y='tip', hue='smoker', data=tips): 绘制散点图,x 轴为 'total_bill',y 轴为 'tip',hue='smoker' 表示用 'smoker' 列的值对散点进行颜色编码,观察吸烟者和非吸烟者的小费习惯差异。

    3. sns.boxplot(x='day', y='tip', data=tips): 绘制箱线图,展示不同星期几的小费分布,比较不同星期顾客给小费的差异。

    4. sns.countplot(x='sex', data=tips): 绘制计数图,统计不同性别的顾客数量,了解顾客性别的分布情况。

    5. sns.violinplot(x='time', y='tip', hue='sex', split=True, data=tips): 绘制小提琴图,展示不同用餐时间段的小费分布,并使用 hue='sex'split=True 参数,在每个用餐时间段内,将男性和女性的小提琴图分开显示,方便比较不同性别在不同用餐时间段的小费差异。

  • 可视化解读:

    • 散点图 (Total Bill vs. Tip): 展示了总账单金额与小费金额之间的正相关关系,即总账单金额越高,小费金额通常也越高。通过颜色编码,可以初步观察到吸烟者和非吸烟者在小费习惯上可能存在的差异。

    • 箱线图 (Tip Distribution by Day): 展示了不同星期几的小费分布情况。可以观察到不同星期的小费中位数和分布范围可能存在差异,例如周末可能比工作日小费更高。

    • 计数图 (Customers by Sex): 展示了不同性别顾客的比例,可以了解数据集中男性和女性顾客的相对数量。

    • 小提琴图 (Tip Distribution by Time & Sex): 更详细地展示了不同用餐时间段和性别的小费分布。小提琴图结合了箱线图和核密度估计图的特点,既能展示数据的四分位数和中位数,又能展示数据的分布形状。通过 split=True 参数,可以更清晰地比较同一用餐时间段内不同性别的小费分布差异。

3.3 titanic 数据集:泰坦尼克号生存预测

  • 数据集介绍: titanic 数据集是机器学习和数据科学入门的经典数据集之一。它来源于泰坦尼克号沉船事件的乘客信息,目标是根据乘客的各种特征预测其是否在海难中幸存。数据集包含了891个样本,每一行代表一位乘客,并记录了以下特征:

    • survived: 是否幸存 (0 = No, 1 = Yes)。这是目标变量。

    • pclass: 船票等级 (1 = 1st, 2 = 2nd, 3 = 3rd)。

    • sex: 性别 (female, male)。

    • age: 年龄 (岁)。

    • sibsp: 在船上的兄弟姐妹/配偶的数量。

    • parch: 在船上的父母/子女的数量。

    • fare: 船票价格。

    • embarked: 登船港口 (C = Cherbourg, Q = Queenstown, S = Southampton)。

    • class: 船舱等级 (First, Second, Third)。

    • who: 乘客类型 (man, woman, child)。

    • adult_male: 是否成年男性 (True 或 False)。

    • deck: 甲板编号。

    • embark_town: 登船城市 (Cherbourg, Queenstown, Southampton)。

    • alive: 是否幸存 (yes 或 no)。

    • alone: 是否独自一人 (True 或 False)。

  • 数据集用途: titanic 数据集常用于:

    • 二分类问题: 预测乘客是否幸存,这是一个典型的二分类问题。

    • 特征工程和模型构建: 用于练习特征工程技巧,例如处理缺失值、类别变量编码、特征缩放等,并构建分类模型,如逻辑回归、决策树、随机森林等。

    • 分类问题可视化: 可以使用 Seaborn 的各种分类数据可视化方法,探索不同特征与生存率之间的关系。

  • 代码实践:

import seaborn as sns import matplotlib.pyplot as plt # 加载 titanic 数据集 titanic = sns.load_dataset('titanic') # 查看数据集信息 print("Titanic Dataset Info:") titanic.info() # 查看数据集前 5 行 print("\nTitanic Dataset Head:") print(titanic.head()) # 查看数据集描述性统计 print("\nTitanic Dataset Describe:") print(titanic.describe()) # 可视化:使用计数图 (countplot) 展示不同船舱等级的生存人数,并用生存与否分组 plt.figure(figsize=(8, 6)) sns.countplot(x='pclass', hue='survived', data=titanic, palette='Set1') # 使用 Set1 色板 plt.title("Countplot of Survival by Pclass") plt.xticks([0, 1, 2], ['1st Class', '2nd Class', '3rd Class']) # 修改 x 轴标签 plt.legend(title='Survived', labels=['No', 'Yes']) # 修改图例标签 plt.show() # 可视化:使用箱线图 (boxplot) 展示不同性别的年龄分布,并用生存与否分组 plt.figure(figsize=(8, 6)) sns.boxplot(x='sex', y='age', hue='survived', data=titanic, palette='Set2') # 使用 Set2 色板 plt.title("Boxplot of Age Distribution by Sex and Survival") plt.legend(title='Survived', labels=['No', 'Yes']) # 修改图例标签 plt.show() # 可视化:使用条形图 (barplot) 展示不同登船港口的生存率 plt.figure(figsize=(8, 6)) sns.barplot(x='embark_town', y='survived', data=titanic, palette='viridis') # 使用 viridis 色板 plt.title("Barplot of Survival Rate by Embark Town") plt.ylabel('Survival Rate') # 修改 y 轴标签 plt.show()
  • 代码详解:

    1. 代码结构与前述示例类似,加载 titanic 数据集,并查看数据集信息、头部和描述性统计。

    2. sns.countplot(x='pclass', hue='survived', data=titanic, palette='Set1'): 绘制计数图,x 轴为 'pclass' (船票等级),hue='survived' 表示用 'survived' 列的值对柱状图进行分组,palette='Set1' 指定使用 'Set1' 色板,美化颜色。 plt.xticks()plt.legend() 用于自定义 x 轴刻度标签和图例标签,提高图表可读性。

    3. sns.boxplot(x='sex', y='age', hue='survived', data=titanic, palette='Set2'): 绘制箱线图,x 轴为 'sex' (性别),y 轴为 'age' (年龄),hue='survived' 分组,palette='Set2' 色板。自定义图例标签。

    4. sns.barplot(x='embark_town', y='survived', data=titanic, palette='viridis'): 绘制条形图,x 轴为 'embark_town' (登船城市),y 轴为 'survived' (生存率)。 Seaborn 的 barplot 默认计算 y 轴变量的均值,因此 y='survived' 会计算每个登船城市的生存率。 palette='viridis' 使用 'viridis' 色板。自定义 y 轴标签。

  • 可视化解读:

    • 计数图 (Survival by Pclass): 展示了不同船舱等级乘客的生存人数。可以清晰地看到,一等舱乘客的生存率明显高于二等舱和三等舱,三等舱的生存率最低。这反映了社会阶层在泰坦尼克号海难中的影响。

    • 箱线图 (Age Distribution by Sex and Survival): 展示了不同性别和生存情况下的年龄分布。可以观察到,女性的年龄分布相对集中,且女性的生存率普遍高于男性。此外,幸存者的年龄分布可能与遇难者的年龄分布存在差异。

    • 条形图 (Survival Rate by Embark Town): 展示了不同登船港口的生存率。不同登船港口的生存率可能存在差异,这可能与乘客的船舱等级、社会阶层等因素有关。

4. Seaborn数据集关系 Mermaid 图

为了更清晰地理解 Seaborn 数据集之间的关系,我们可以使用 Mermaid 图进行可视化。以下是一个基于数据集类型和用途的简单关系图:

  • Mermaid 图解读:

    • 图中将 Seaborn 数据集分为四个主要类型:分类数据、数值数据、时间序列数据和地理空间数据。

    • 同时,也根据数据集的常见用途进行了分类:分类、回归、探索性数据分析、时间序列分析和地理空间分析。

    • 箭头表示数据集与类型或用途之间的关系。例如,tips 数据集属于分类数据,也常用于探索性数据分析和回归分析。

    • EDA (探索性数据分析) 连接了大部分数据集,因为 Seaborn 的数据集主要用于教学和演示,而探索性数据分析是数据可视化和理解数据的重要环节。

    • 颜色和样式可以根据需要进行调整,以提高图表的可读性。

5. 结论

Seaborn 提供的内置数据集是学习和实践数据可视化的宝贵资源。本文详细介绍了 iristipstitanic 三个经典数据集,并结合代码示例展示了如何加载、探索和可视化这些数据。通过散点图、箱线图、计数图、小提琴图和条形图等 Seaborn 常用可视化方法,我们可以深入理解数据的分布、关系和模式。

此外,我们使用 Mermaid 图可视化了 Seaborn 数据集的关系,从数据集类型和用途两个维度进行了分类,帮助读者更好地理解这些数据集在 Seaborn 生态系统中的位置和价值。

掌握这些常用数据集,并熟练运用 Seaborn 进行数据可视化,将为进一步深入数据分析、机器学习和数据科学领域奠定坚实的基础。希望本文能够帮助读者更好地入门 Seaborn,并利用这些丰富的数据资源,开启精彩的数据探索之旅。


发布者: 作者: 转发
评论区 (0)
U