1
from sklearn import datasets
import pandas as pd
import numpy as np
iris = datasets.load_iris() #Loading the dataset
print(iris.keys())
# dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename', 'data_module'])
下面是对这段代码的解释:
-
from sklearn import datasets
: 这行代码导入了datasets
模块,该模块包含了一些常用的示例数据集,其中包括鸢尾花数据集。 -
import pandas as pd
: 这行代码导入了pandas
库并将其命名为pd
。 -
import numpy as np
: 这行代码导入了numpy
库并将其命名为np
。 -
iris = datasets.load_iris()
: 这行代码使用datasets
模块中的load_iris()
函数来加载鸢尾花数据集。加载后的数据被赋值给变量iris
。 -
iris.keys()
: 这行代码调用了iris
数据集的keys()
方法,返回了一个包含数据集的键(key)的列表。这些键表示数据集的不同方面。返回的键包括:'data'
: 包含样本数据的numpy数组。'target'
: 包含每个样本对应的目标类别(0、1、2)的numpy数组。'frame'
: 数据集的一个备用表示,通常不会使用。'target_names'
: 目标类别的名称。'DESCR'
: 数据集的描述文本,包括数据集的来源和特征描述等信息。'feature_names'
: 特征的名称。'filename'
: 数据集文件的路径(如果适用)。'data_module'
: 数据集的Python模块路径。
这段代码演示了如何加载鸢尾花数据集,并访问其中的不同方面,如数据、目标类别、特征名称等。通常,这些数据可以用于机器学习任务,如分类、聚类等。
2
这段代码使用pandas
库创建了一个名为iris
的DataFrame,将鸢尾花数据集的特征数据和目标类别合并到一个表格中。下面是对这段代码的解释:
iris = pd.DataFrame(
data=np.c_[iris['data'], iris['target']],
columns=iris['feature_names'] + ['target']
)
-
pd.DataFrame(...)
: 这是pandas
库中用于创建DataFrame的函数。 -
data=np.c_[iris['data'], iris['target']]
: 这里使用了numpy
的np.c_[]
函数,将鸢尾花数据集的特征数据和目标类别按列合并。iris['data']
表示特征数据,iris['target']
表示目标类别。np.c_[]
函数的作用是按列连接两个数组,将它们合并成一个二维数组。 -
columns=iris['feature_names'] + ['target']
: 这里为DataFrame的列指定了列名。iris['feature_names']
表示特征名称,['target']
表示目标类别的列名。通过将特征名称列表和目标类别列名连接在一起,创建了DataFrame的列名。
综上所述,这段代码创建了一个DataFrame,其中包含了鸢尾花数据集的所有样本数据以及目标类别。DataFrame的列名由特征名称和目标类别列名组成。这样的数据结构更适合进行数据分析、处理和机器学习任务。
3
species = []
for i in range(len(iris['target'])):
if iris['target'][i] == 0:
species.append("setosa")
elif iris['target'][i] == 1:
species.append('versicolor')
else:
species.append('virginica')
iris['species'] = species
这段代码是为了将鸢尾花数据集(iris dataset)中的目标值(target)转换为对应的鸢尾花品种名称,并将结果存储在新的一个名为 species
的列表中。代码中的三个条件分支根据目标值的不同,将对应的品种名称添加到 species
列表中。
让我逐步解释代码的运行过程:
-
species = []
:在开始时,创建一个空列表species
,用于存储转换后的品种名称。 -
for i in range(len(iris['target'])):
:通过循环遍历鸢尾花数据集的目标值。len(iris['target'])
返回目标值列表的长度,因此循环将从 0 到len(iris['target']) - 1
的索引进行迭代。 -
if iris['target'][i] == 0:
:检查当前目标值是否等于 0,如果是,则表示对应的品种是 “setosa”,因此将 “setosa” 添加到species
列表中。 -
elif iris['target'][i] == 1:
:如果目标值不等于 0 但等于 1,那么表示对应的品种是 “versicolor”,因此将 “versicolor” 添加到species
列表中。 -
else:
:如果目标值既不是 0 也不是 1,那么就表示对应的品种是 “virginica”,因此将 “virginica” 添加到species
列表中。 -
iris['species'] = species
:在循环结束后,将存储品种名称的species
列表赋值给鸢尾花数据集中的一个新列,命名为species
。这样,每个样本都有了对应的品种名称。
通过这段代码,你可以在鸢尾花数据集中创建一个新的列 species
,其中包含每个样本对应的品种名称,从而更方便地进行品种分类的分析和可视化。不过,请注意在运行这段代码之前,确保你已经正确加载了鸢尾花数据集,并且 iris['target']
和 iris['species']
是存在的数据结构。
4
iris.groupby('species').size()
这段代码使用了 Pandas 库中的 groupby()
函数,针对鸢尾花数据集(iris dataset)中的 species
列进行分组,并计算每个品种出现的次数。具体来说,代码执行后将返回一个包含各个品种及其对应出现次数的 Series 对象。
假设你已经正确加载了鸢尾花数据集,并且 iris
是一个包含数据的 DataFrame。让我逐步解释这段代码:
-
iris.groupby('species')
:这部分代码使用了 Pandas 的groupby()
函数,它根据指定的列名(这里是'species'
)对数据进行分组。这意味着数据将按照不同的品种(setosa、versicolor、virginica)进行分组。 -
.size()
:在进行分组后,通过调用size()
函数,计算每个分组中的元素数量(即每个品种出现的次数)。
综合起来,执行 iris.groupby('species').size()
后,你会得到一个 Series,其中每个品种作为索引,对应的值是该品种在数据集中出现的次数。这样的结果可以帮助你了解各个鸢尾花品种在数据集中的分布情况。
5
iris.describe()
iris.describe()
是一个用于统计描述性统计信息的 Pandas 函数,针对鸢尾花数据集(iris dataset)的数值列进行统计分析。该函数会生成关于数据集中各个数值特征的统计信息,包括均值、标准差、最小值、25% 分位数、中位数(50% 分位数)、75% 分位数和最大值。
假设你已经正确加载了鸢尾花数据集,并且 iris
是一个包含数据的 DataFrame。执行 iris.describe()
后,你将会得到一个包含统计信息的表格,其中每一列代表一个数值特征,每一行代表一个统计指标。以下是统计信息的各个指标的含义:
count
:非缺失值的数量。mean
:平均值。std
:标准差。min
:最小值。25%
:25% 的分位数,也称为第一四分位数,表示数据中小于或等于 25% 数据的值。50%
:50% 的分位数,也称为中位数,表示数据中小于或等于 50% 数据的值。75%
:75% 的分位数,也称为第三四分位数,表示数据中小于或等于 75% 数据的值。max
:最大值。
这些统计信息可以帮助你了解数据的分布情况、集中趋势和离散程度,从而更好地理解鸢尾花数据集的特征。通常,通过分析这些统计信息,你可以获得对数据集整体情况的初步印象,并在进行进一步的数据探索和分析时有所指导。
6
import matplotlib.pyplot as plt
setosa = iris[iris.species == "setosa"]
versicolor = iris[iris.species=='versicolor']
virginica = iris[iris.species=='virginica']
fig, ax = plt.subplots()
fig.set_size_inches(13, 7) # adjusting the length and width of plot
# lables and scatter points
ax.scatter(setosa['petal length (cm)'], setosa['petal width (cm)'], label="Setosa", facecolor="blue")
ax.scatter(versicolor['petal length (cm)'], versicolor['petal width (cm)'], label="Versicolor", facecolor="green")
ax.scatter(virginica['petal length (cm)'], virginica['petal width (cm)'], label="Virginica", facecolor="red")
ax.set_xlabel("petal length (cm)")
ax.set_ylabel("petal width (cm)")
ax.grid()
ax.set_title("Iris petals")
ax.legend()
这段代码使用了Python的Matplotlib库来创建一个散点图,展示了鸢尾花数据集中不同种类(setosa、versicolor和virginica)的花瓣长度(petal length)和花瓣宽度(petal width)之间的关系。以下是代码的解释:
-
导入Matplotlib库:首先,代码导入了Matplotlib库的pyplot模块,将其命名为plt,以便后续使用该模块中的函数来创建和操作图形。
-
数据分组:代码使用类似DataFrame的结构(可能是Pandas库中的DataFrame)来分别创建名为setosa、versicolor和virginica的子数据集。这些子数据集根据花的种类(species)从原始iris数据集中筛选出不同种类的鸢尾花。
-
创建图形:通过
plt.subplots()
函数创建一个包含单个子图的图形对象,并将其分配给fig和ax变量。接着,使用fig.set_size_inches()
设置图形的尺寸,使其长度为13英寸,宽度为7英寸。 -
绘制散点图:使用
ax.scatter()
函数绘制散点图。每个ax.scatter()
调用绘制一个特定种类的鸢尾花的花瓣长度和宽度数据。不同种类的花使用不同的颜色(蓝色、绿色和红色)来区分。label
参数指定了每个散点集的标签,facecolor
参数指定了散点的填充颜色。 -
设置坐标轴标签:使用
ax.set_xlabel()
和ax.set_ylabel()
设置X轴和Y轴的标签,分别为"petal length (cm)“和"petal width (cm)”。 -
添加网格线:通过
ax.grid()
函数在图中添加网格线,以帮助更好地查看数据。 -
设置图标题:使用
ax.set_title()
设置图的标题为"Iris petals"。 -
添加图例:通过
ax.legend()
函数在图的适当位置添加图例,显示不同种类的鸢尾花的标识。
总之,这段代码创建了一个散点图,用于比较不同种类的鸢尾花的花瓣长度和宽度之间的关系。通过不同颜色的散点和图例,可以直观地区分不同种类的花。这样的可视化有助于展示数据之间的模式和趋势,以及不同种类之间的差异。
7
from sklearn.model_selection import train_test_split
# Droping the target and species since we only need the measurements
X = iris.drop(['target','species'], axis=1)
# converting into numpy array and assigning petal length and petal width
X = X.to_numpy()[:, (2,3)]
y = iris['target']
# Splitting into train and test
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.5, random_state=42)
这段代码涉及到使用 scikit-learn 库中的 train_test_split
函数,对数据集进行训练集和测试集的分割。以下是代码的解释:
-
导入必要的库:首先,代码导入了从 scikit-learn 库中的
train_test_split
函数,这个函数用于将数据集分割成训练集和测试集。 -
特征和标签的准备:代码从鸢尾花数据集中移除了 ‘target’ 列和 ‘species’ 列,因为只需要花的测量数据作为特征。这一步骤是为了获取仅包含花瓣长度和花瓣宽度这两个特征的数据。然后,通过
.to_numpy()
方法将特征转换为 NumPy 数组,并提取出特征矩阵X
,其中只包含了第 2 列(花瓣长度)和第 3 列(花瓣宽度)的数据。 -
标签的准备:将原始数据集中的 ‘target’ 列作为标签数组
y
。这个数组包含了鸢尾花的分类标签,用来表示花的种类。 -
数据集分割:使用
train_test_split
函数,将特征矩阵X
和标签数组y
分割成训练集和测试集。具体来说,代码设置了测试集的大小为 50%(test_size=0.5
),并且使用了随机种子random_state=42
,以确保随机划分的结果可重复。 -
分割结果:分割后的结果是四个数组:
X_train
包含训练集的特征数据,X_test
包含测试集的特征数据,y_train
包含训练集的标签数据,y_test
包含测试集的标签数据。
总之,这段代码的主要目的是将鸢尾花数据集分割成训练集和测试集,以便后续可以使用这些数据来训练机器学习模型并进行性能评估。训练集包含一部分数据用于模型的训练,测试集用于评估模型的泛化能力。