鸢尾花数据分析与Python

鸢尾花(Iris)是一种常见的花卉,也是机器学习领域中最经典的数据集之一。这个数据集包含了150个样本,每个样本有4个特征:花萼长度、花萼宽度、花瓣长度和花瓣宽度。每个样本又属于三个不同的分类:山鸢尾(Iris-Setosa)、变色鸢尾(Iris-Versicolor)和维吉尼亚鸢尾(Iris-Virginica)。通过对这些特征进行分析和建模,我们可以预测鸢尾花的品种。

本文将介绍如何使用Python进行鸢尾花数据的分析。我们将使用pandas库进行数据处理和分析,matplotlib库进行数据可视化,以及scikit-learn库进行机器学习建模。

数据加载与预览

首先,我们需要加载鸢尾花数据集。scikit-learn库已经内置了这个经典的数据集,我们可以直接使用。

from sklearn.datasets import load_iris

# 加载鸢尾花数据集
iris = load_iris()

# 将数据集转换为pandas的DataFrame格式
import pandas as pd
df = pd.DataFrame(data=iris['data'], columns=iris['feature_names'])
df['target'] = iris['target']

加载完成后,我们可以通过df.head()方法预览前几行数据。

df.head()
sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) target
5.1 3.5 1.4 0.2
4.9 3 1.4 0.2
4.7 3.2 1.3 0.2
4.6 3.1 1.5 0.2
5 3.6 1.4 0.2

数据可视化

数据可视化是数据分析的重要步骤,它可以帮助我们了解数据的分布和特征之间的关系。我们可以使用matplotlib库进行数据可视化。

首先,我们可以通过绘制散点图来展示花萼长度与花萼宽度的关系,并按照不同的分类用不同颜色标记。

import matplotlib.pyplot as plt

# 绘制散点图
plt.scatter(df['sepal length (cm)'], df['sepal width (cm)'], c=df['target'])
plt.xlabel('Sepal Length (cm)')
plt.ylabel('Sepal Width (cm)')
plt.title('Iris Sepal Length vs. Width')
plt.show()

scatter

接下来,我们可以通过绘制箱线图来比较不同分类的花瓣长度的分布情况。

# 绘制箱线图
plt.boxplot([df[df['target'] == 0]['petal length (cm)'],
             df[df['target'] == 1]['petal length (cm)'],
             df[df['target'] == 2]['petal length (cm)']])
plt.xlabel('Target')
plt.ylabel('Petal Length (cm)')
plt.title('Iris Petal Length Distribution')
plt.xticks([1, 2, 3], ['Setosa', 'Versicolor', 'Virginica'])
plt.show()

boxplot

机器学习建模

最后,我们可以使用scikit-learn库进行机器学习建模。这里我们选择使用逻辑回归模型进行分类。

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(df[iris['feature_names']], df['target'], test_size=0.2, random_state=42