一、问题描述
帕尔默企鹅数据集(Palmer Penguins dataset)发布于 2020年,是一个在数据科学和机器学习领域广泛使用的数据集,主要用于数据探索和可视化,以及分类任务。该数据集由克里斯汀·高曼/Kristen Gorman博士和南极洲长期生态研究LTER (Antarctica Long Term Ecological Research) 网络成员南极洲帕尔默科考站(Palmer Station)共同创建。帕尔默企鹅数据集的目标是为Iris数据集的替代提供一个用于数据探索和可视化的强大数据集,帮助学习者更直观地了解分类数据分析。注释:Iris数据集是一个经典的机器学习数据集,主要用于分类任务。它包含了150个样本,每个样本有四个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。这些样本来自三种鸢尾花:山鸢尾(Iris setosa)、变色鸢尾(Iris versicolour)和维吉尼亚鸢尾(Iris virginica)。
就像 Iris数据集 一样,这个数据集里有来自帕尔默群岛 3 个岛屿的 3 种不同种类的企鹅,分别是 Adelie、Chinstrap 和 Gentoo。或许“Gentoo”听起来很耳熟,那是因为 Gentoo Linux 就是以它命名的!此外,这些数据集包含每个物种的 culmen 维度。这里 culmen 是鸟喙的上脊。在简化版企鹅数据中,culmen 长度和深度被重命名为变量 culmen_length_mm 和 culmen_depth_mm。
它是练习解决分类和聚类问题的好帮手。在这里,你可以尝试各种分类算法,如决策树、随机森林、SVM,或把它用于聚类问题并练习使用无监督学习。
二、数据集内容
该数据集本质上是由两个数据集组成的,每个数据集包含 344 只企鹅的数据。
数据结构
帕尔默企鹅数据集通常包含两个版本:penguins-raw.csv
和 penguins.csv
。这两个版本的数据结构有所不同,主要区别在于 penguins.csv
是对 penguins-raw.csv
进行了一定预处理后的版本。
数据字段:penguins.csv
- species:企鹅的种类,可能的值有
Adelie
、Chinstrap
和Gentoo
。 - island:企鹅所在岛屿,可能的值有
Biscoe
、Dream
和Torgersen
。 - bill_length_mm:企鹅喙的长度(毫米)。
- bill_depth_mm:企鹅喙的深度(毫米)。
- flipper_length_mm:企鹅翅膀的长度(毫米)。
- body_mass_g:企鹅的体重(克)。
- sex:企鹅的性别,可能的值有
Male
和Female
。
数据样例:penguins.csv
species | island | bill_length_mm | bill_depth_mm | flipper_length_mm | body_mass_g | sex | year |
---|---|---|---|---|---|---|---|
Adelie | Torgersen | 39.1 | 18.7 | 181 | 3750 | male | 2007 |
Adelie | Torgersen | 39.5 | 17.4 | 186 | 3800 | female | 2007 |
Adelie | Torgersen | 40.3 | 18 | 195 | 3250 | female | 2007 |
Adelie | Torgersen | NA | NA | NA | NA | NA | 2007 |
Adelie | Torgersen | 36.7 | 19.3 | 193 | 3450 | female | 2007 |
Adelie | Torgersen | 39.3 | 20.6 | 190 | 3650 | male | 2007 |
Adelie | Torgersen | 38.9 | 17.8 | 181 | 3625 | female | 2007 |
Adelie | Torgersen | 39.2 | 19.6 | 195 | 4675 | male | 2007 |
penguins-raw.csv
是原始数据文件,包含未清洗的原始特征和较多的辅助信息。字段较多,且包含缺失值。以下是该文件的字段说明:
- studyName:研究名称。
- Sample Number:企鹅的样本编号。
- Species:企鹅的种类(Adelie、Chinstrap、Gentoo)。
- Region:企鹅栖息的大致地区,通常是“Anvers”。
- Island:企鹅栖息的岛屿(Biscoe、Dream、Torgersen)。
- Stage:企鹅的生命周期阶段(一般是“Adult”)。
- Individual ID:企鹅的唯一标识符。
- Clutch Completion:企鹅的产卵状态。
- Date Egg:产卵日期。
- Culmen Length (mm):企鹅嘴巴长度(毫米)。
- Culmen Depth (mm):企鹅嘴巴深度(毫米)。
- Flipper Length (mm):企鹅鳍的长度(毫米)。
- Body Mass (g):企鹅体重(克)。
- Sex:企鹅性别(male、female),存在缺失值。
- Delta 15 N (o/oo):氮同位素比率。
- Delta 13 C (o/oo):碳同位素比率。
- Comments:备注字段,一些记录者的附加说明。
penguins-raw.csv
包含较多生态学和化学信息,如“Delta 15 N”和“Delta 13 C”字段,这些字段对一般的数据科学应用并非必需。此外,字段名较为混乱,有些字段用的是更专业的术语或测量单位。
数据样例:penguins-raw.csv
studyName | Species | Region | Island | Individual ID | Date Egg | Sex | Comments |
---|---|---|---|---|---|---|---|
PAL0708 | Adelie Penguin (Pygoscelis adeliae) | Anvers | Torgersen | N1A1 | 2007/11/11 | MALE | Not enough blood for isotopes. |
PAL0708 | Adelie Penguin (Pygoscelis adeliae) | Anvers | Torgersen | N1A2 | 2007/11/11 | FEMALE | NA |
PAL0708 | Adelie Penguin (Pygoscelis adeliae) | Anvers | Torgersen | N2A1 | 2007/11/16 | FEMALE | NA |
PAL0708 | Adelie Penguin (Pygoscelis adeliae) | Anvers | Torgersen | N2A2 | 2007/11/16 | NA | Adult not sampled. |
PAL0708 | Adelie Penguin (Pygoscelis adeliae) | Anvers | Torgersen | N3A1 | 2007/11/16 | FEMALE | NA |
PAL0708 | Adelie Penguin (Pygoscelis adeliae) | Anvers | Torgersen | N3A2 | 2007/11/16 | MALE | NA |
PAL0708 | Adelie Penguin (Pygoscelis adeliae) | Anvers | Torgersen | N4A1 | 2007/11/15 | FEMALE | Nest never observed with full clutch. |
PAL0708 | Adelie Penguin (Pygoscelis adeliae) | Anvers | Torgersen | N4A2 | 2007/11/15 | MALE | Nest never observed with full clutch. |
PAL0708 | Adelie Penguin (Pygoscelis adeliae) | Anvers | Torgersen | N5A1 | 2007/11/9 | NA | No blood sample obtained. |
数据集使用许可协议
开源协议:Creative Commons Zero (CC0) v1.0 Universal 是一种版权声明工具,它允许创作者放弃其作品在全球范围内的所有版权及相关权利,从而将这些作品贡献到公共领域。
三、数据分析和分类样例
安装
在工程目录下执行:
pip install palmerpenguins
源码example.ipynb
import pandas as pd
import seaborn as sns
from palmerpenguins import load_penguins
sns.set_style('whitegrid')
penguins = load_penguins()
penguins.head()
species island bill_length_mm ... body_mass_g sex year
0 Adelie Torgersen 39.1 ... 3750.0 male 2007
1 Adelie Torgersen 39.5 ... 3800.0 female 2007
2 Adelie Torgersen 40.3 ... 3250.0 female 2007
3 Adelie Torgersen NaN ... NaN NaN 2007
4 Adelie Torgersen 36.7 ... 3450.0 female 2007
[5 rows x 8 columns]
g = sns.boxplot(x = 'island',
y ='body_mass_g',
hue = 'species',
data = penguins,
palette=['#FF8C00','#159090','#A034F0'],
linewidth=0.3)
g.set_xlabel('Island')
g.set_ylabel('Body Mass')
X轴为企鹅所在岛屿,Y轴为企鹅的体重(克)的箱形图分析:
g = sns.lmplot(x="flipper_length_mm",
y="body_mass_g",
hue="species",
height=7,
data=penguins,
palette=['#FF8C00','#159090','#A034F0'])
g.set_xlabels('Flipper Length')
g.set_ylabels('Body Mass')
代码使用 Seaborn 库中的函数lmplot
绘制回归数据的双变量分布图,X轴为企鹅鳍的长度-毫米,对企鹅种类进行分组,Y轴为企鹅的体重。它结合了散点图和线性回归拟合线,可以直观地展示两个变量之间的关系,并且可以对数据进行分组或分层的可视化。
以下这段代码使用了scikit-learn
库来实现一个简单的机器学习流程,包括数据分割、处理缺失值、模型训练和评估。使用train_test_split函数将数据集分割为训练集和测试集。这里,测试集的大小被设置为100个样本,随机种子设置为0以确保结果的可重复性。使用make_pipeline函数创建一个管道,该管道首先应用IterativeImputer来处理缺失值,然后使用DecisionTreeClassifier进行分类。fit方法用于在训练数据上训练模型。使用训练好的模型对测试数据进行预测,然后计算混淆矩阵来评估模型的性能。labels参数指定了混淆矩阵中类别的顺序。
from sklearn.model_selection import train_test_split
from sklearn.pipeline import FeatureUnion, make_pipeline
from sklearn.metrics import confusion_matrix
### To deal with missing values
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from sklearn.tree import DecisionTreeClassifier
X,y = load_penguins(return_X_y = True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=100,random_state=0)
imp = IterativeImputer(max_iter=10, random_state=0)
clf = make_pipeline(imp, DecisionTreeClassifier())
clf = clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
confusion_matrix(y_test,y_pred,labels=['Adelie','Chinstrap','Gentoo'])
运行
这段代码执行的结果是一个3×3的混淆矩阵,表示模型在测试集上的性能。混淆矩阵的对角线元素表示正确分类的样本数,而非对角线元素表示错误分类的样本数。具体来说,这个混淆矩阵的含义如下:
- 第一行表示Adelie企鹅的分类结果:
- 正确分类为Adelie的有48只。
- 错误分类为Chinstrap的有0只。
- 错误分类为Gentoo的有0只。
- 第二行表示Chinstrap企鹅的分类结果:
- 错误分类为Adelie的有1只。
- 正确分类为Chinstrap的有19只。
- 错误分类为Gentoo的有0只。
- 第三行表示Gentoo企鹅的分类结果:
- 错误分类为Adelie的有0只。
- 错误分类为Chinstrap的有0只。
- 正确分类为Gentoo的有32只。
array([[48, 0, 0],
[ 1, 19, 0],
[ 0, 0, 32]], dtype=int64)
开源协议
MIT License
Copyright (c) 2020 Muhammad Chenariyan Nakhaee