用pandas处理类似鸢尾花数据集【附代码】(上)

简介: 笔记
     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)     Species
137                6.4               3.1                5.5               1.8   virginica
84                 5.4               3.0                4.5               1.5  versicolor
27                 5.2               3.5                1.5               0.2      setosa
127                6.1               3.0                4.9               1.8   virginica
132                6.4               2.8                5.6               2.2   virginica
..                 ...               ...                ...               ...         ...
9                  4.9               3.1                1.5               0.1      setosa
103                6.3               2.9                5.6               1.8   virginica
67                 5.8               2.7                4.1               1.0  versicolor
117                7.7               3.8                6.7               2.2   virginica
47                 4.6               3.2                1.4               0.2      setosa
[120 rows x 5 columns]

在学习深度学习的时候,前期最重要的就是对数据集的处理,先抛开数据增强等过程,单单数据集的加载也是很重要的,只有正确处理好数据集才能送入网络进行训练。前面我有写过关于VOC数据集的处理方式


但数据集往往有多种多样的,还有类似COCO等格式,而且在不同的学科领域有不同的数据集。这篇文章我将用pandas来处理鸢尾花数据集【我的同学有研究通信领域的,还有光学领域的,在他们那里我也见到了类似的数据集格式,所以也是可以按这种方式处理的】


用到的工具:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

在sklearn中我们可以直接加载鸢尾花数据集,方式为:

from sklearn.datasets import load_iris
data = load_iris()

数据集是用字典的形式存储的,我们可以打印一下数据集看看有什么东西,看看这数据集包含了什么东西。可以看到data字典中包含以下字典。

dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names', 'filename'])


其中字典中data是图像数据;target对应的标签[用数字表示的,有3个类],


data.target_names # 类的名字 ['setosa' 'versicolor' 'virginica']
data.feature_names # 特征名字 ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
data.data:
         [[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]
         [5.4 3.9 1.7 0.4]
         [4.6 3.4 1.4 0.3]
         [5.  3.4 1.5 0.2]
         [4.4 2.9 1.4 0.2]
         [4.9 3.1 1.5 0.1]......


上面就是我们读到的数据集,但这样的数据还是很乱,我们需要进一步处理,我们可以用pandas工具,将数据集整理成表格的形式,就像mysql数据库中的表一样。


# 通过DataFrame()对数据进行结构化
df = pd.DataFrame(data.data)


In [7]: df
Out[7]:
       0    1    2    3
0    5.1  3.5  1.4  0.2
1    4.9  3.0  1.4  0.2
2    4.7  3.2  1.3  0.2
3    4.6  3.1  1.5  0.2
4    5.0  3.6  1.4  0.2
..   ...  ...  ...  ...
145  6.7  3.0  5.2  2.3
146  6.3  2.5  5.0  1.9
147  6.5  3.0  5.2  2.0
148  6.2  3.4  5.4  2.3
149  5.9  3.0  5.1  1.8
[150 rows x 4 columns]


这样我们可以清楚的看到,数据集共有150行,每行4种特征【这四个特征就是鸢尾花的特征值,即data.feature_names】


然后我们在进一步处理, 将列上面的0,1,2,3替换成data.feature_names的文字信息,现在的数据集将会长这样:


sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
0                  5.1               3.5                1.4               0.2
1                  4.9               3.0                1.4               0.2
2                  4.7               3.2                1.3               0.2
3                  4.6               3.1                1.5               0.2
4                  5.0               3.6                1.4               0.2
..                 ...               ...                ...               ...
145                6.7               3.0                5.2               2.3
146                6.3               2.5                5.0               1.9
147                6.5               3.0                5.2               2.0
148                6.2               3.4                5.4               2.3
149                5.9               3.0                5.1               1.8
[150 rows x 4 columns]

是不是这样以来更每一列是代表什么特征更清楚了呢。


在鸢尾花中,有3类,data.target_names中为:['setosa', 'versicolor', 'virginica'],对应于data.target为[0,1,2],那么我们将这两者一一对应。现在的数据集就会长这样:

sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)    Species
0                  5.1               3.5                1.4               0.2     setosa
1                  4.9               3.0                1.4               0.2     setosa
2                  4.7               3.2                1.3               0.2     setosa
3                  4.6               3.1                1.5               0.2     setosa
4                  5.0               3.6                1.4               0.2     setosa
..                 ...               ...                ...               ...        ...
145                6.7               3.0                5.2               2.3  virginica
146                6.3               2.5                5.0               1.9  virginica
147                6.5               3.0                5.2               2.0  virginica
148                6.2               3.4                5.4               2.3  virginica
149                5.9               3.0                5.1               1.8  virginica
[150 rows x 5 columns]

然后我们还可以对数据集进行一个可视化,看看各类数据集分布是否平衡。可以看到三个类各有50张,共150张,数据分布均匀。


# 对各类数据分布进行可视化,看看分布的是否均匀
df_count = df['Species'].value_counts().reset_index()
sns.barplot(data=df_count, x='index', y='Species')
plt.show()

20.png

然后我们就可以针对上面处理的数据集划分成训练集和验证集了,这里我们要用到的工具是,

from sklearn.model_selection import train_test_split

将数据集df进行划分,训练集80%,验证集20%【并且是随机打乱的】


df_train, df_val = train_test_split(df, train_size=0.8, random_state=0)

可以得到训练集,共有120个样本【注意,这里写的是5列,但你数的时候会是6列,最前面的序号那列不要算进去!所以是5列】

     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)     Species
137                6.4               3.1                5.5               1.8   virginica
84                 5.4               3.0                4.5               1.5  versicolor
27                 5.2               3.5                1.5               0.2      setosa
127                6.1               3.0                4.9               1.8   virginica
132                6.4               2.8                5.6               2.2   virginica
..                 ...               ...                ...               ...         ...
9                  4.9               3.1                1.5               0.1      setosa
103                6.3               2.9                5.6               1.8   virginica
67                 5.8               2.7                4.1               1.0  versicolor
117                7.7               3.8                6.7               2.2   virginica
47                 4.6               3.2                1.4               0.2      setosa
[120 rows x 5 columns]

得到验证集,

     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)     Species
114                5.8               2.8                5.1               2.4   virginica
62                 6.0               2.2                4.0               1.0  versicolor
33                 5.5               4.2                1.4               0.2      setosa
107                7.3               2.9                6.3               1.8   virginica
7                  5.0               3.4                1.5               0.2      setosa
100                6.3               3.3                6.0               2.5   virginica
40                 5.0               3.5                1.3               0.3      setosa
86                 6.7               3.1                4.7               1.5  versicolor
76                 6.8               2.8                4.8               1.4  versicolor
71                 6.1               2.8                4.0               1.3  versicolor
134                6.1               2.6                5.6               1.4   virginica
51                 6.4               3.2                4.5               1.5  versicolor
73                 6.1               2.8                4.7               1.2  versicolor
54                 6.5               2.8                4.6               1.5  versicolor
63                 6.1               2.9                4.7               1.4  versicolor
37                 4.9               3.6                1.4               0.1      setosa
78                 6.0               2.9                4.5               1.5  versicolor
90                 5.5               2.6                4.4               1.2  versicolor
45                 4.8               3.0                1.4               0.3      setosa
16                 5.4               3.9                1.3               0.4      setosa
121                5.6               2.8                4.9               2.0   virginica
66                 5.6               3.0                4.5               1.5  versicolor
24                 4.8               3.4                1.9               0.2      setosa
8                  4.4               2.9                1.4               0.2      setosa
126                6.2               2.8                4.8               1.8   virginica
22                 4.6               3.6                1.0               0.2      setosa
44                 5.1               3.8                1.9               0.4      setosa
97                 6.2               2.9                4.3               1.3  versicolor
93                 5.0               2.3                3.3               1.0  versicolor
26                 5.0               3.4                1.6               0.4      setosa

因为我们要送入网络训练的时候,需要提取的是特征,在该类型数据集已经把特征以数值的方式列出来了,所以我们需要把这四类特征提取出来(不含类,即只显示前4列)

X_train = df_train.drop(['Species'], axis=1)
X_val = df_val.drop(['Species'], axis=1)
X_train0 = X_train.copy()
X_train0 = X_train0.reset_index().drop(['index'], axis=1)

现在得到的特征就会长这样:

     sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
137                6.4               3.1                5.5               1.8
84                 5.4               3.0                4.5               1.5
27                 5.2               3.5                1.5               0.2
127                6.1               3.0                4.9               1.8
132                6.4               2.8                5.6               2.2
..                 ...               ...                ...               ...
9                  4.9               3.1                1.5               0.1
103                6.3               2.9                5.6               1.8
67                 5.8               2.7                4.1               1.0
117                7.7               3.8                6.7               2.2
47                 4.6               3.2                1.4               0.2
[120 rows x 4 columns]

我们可以看一下sepal length这个特征值的分布可视化:

1. # 特征分布的可视化
2. plt.plot(X_train0["sepal length (cm)"],".", label="sepal length (cm)")
3. plt.legend()
4. plt.show()

21.png

上面我们已经提取完特征了,在监督学习中,我们还需要标签,这里的标签就我们数据中的类,即Species这个值

1. # 提取类别
2. Y_train = df_train['Species']
3. Y_val = df_val['Species']

得到标签长这样:

137     virginica
84     versicolor
27         setosa
127     virginica
132     virginica
          ...
9          setosa
103     virginica
67     versicolor
117     virginica
47         setosa
Name: Species, Length: 120, dtype: object



目录
相关文章
|
27天前
|
存储 分布式计算 数据处理
使用Python和Pandas处理大型数据集的高效策略
随着大数据时代的到来,处理大型数据集已成为数据分析师和数据科学家的日常任务。本文旨在探讨如何使用Python的Pandas库高效地处理大型数据集。不同于常规的数据处理教程,本文将重点介绍数据子集化、内存优化、并行处理和数据压缩等高级策略,帮助读者在资源受限的环境中快速且准确地分析大量数据。
|
1月前
|
数据可视化 Python
如何在Pandas中对数据集进行多级分组并进行聚合计算?
在Pandas中进行多级分组与聚合计算的步骤包括导入库(如pandas和matplotlib),准备数据集,使用`groupby()`方法分组,应用聚合函数(如`sum()`、`mean()`)及可视化结果。
34 11
|
1月前
|
机器学习/深度学习 数据采集 SQL
【Python机器学习专栏】使用Pandas处理机器学习数据集
【4月更文挑战第30天】本文介绍了如何使用Python的Pandas库处理机器学习数据集,涵盖数据读取、概览、清洗、转换、切分和保存等步骤。通过Pandas,可以从CSV等格式加载数据,进行缺失值、异常值处理,数据类型转换,如归一化、类别编码,并实现训练集与测试集的划分。此外,还展示了如何保存处理后的数据,强调了Pandas在数据预处理中的重要性。
|
1月前
|
数据采集 Python
利用Pandas对小费数据集进行数据预处理实战(附源码)
利用Pandas对小费数据集进行数据预处理实战(附源码)
155 0
|
1月前
|
数据可视化 数据挖掘 Python
利用Python和Pandas对小费数据集进行数据分析与可视化实战(超详细 附源码)
利用Python和Pandas对小费数据集进行数据分析与可视化实战(超详细 附源码)
393 0
|
Python
python基础 pandas读取文件查看用户数据集的大小
python基础 pandas读取文件查看用户数据集的大小
251 0
python基础 pandas读取文件查看用户数据集的大小
ML之FE:数据随机抽样之利用pandas的sample函数对超大样本的数据集进行随机采样,并另存为csv文件
ML之FE:数据随机抽样之利用pandas的sample函数对超大样本的数据集进行随机采样,并另存为csv文件
|
17小时前
|
数据采集 机器学习/深度学习 数据可视化
利用Python和Pandas库构建高效的数据分析流程
在数据驱动的时代,数据分析已成为企业决策的关键环节。本文介绍如何利用Python编程语言及其强大的数据分析库Pandas,构建一套高效且可扩展的数据分析流程。与常规的数据分析流程不同,本文不仅涵盖数据加载、清洗、转换等基础步骤,还强调数据可视化、模型探索与评估等高级分析技巧,并通过实际案例展示如何在Python中实现这些步骤,为数据分析师提供一套完整的数据分析解决方案。
|
8天前
|
Python
在Python的pandas库中,向DataFrame添加新列简单易行
【6月更文挑战第15天】在Python的pandas库中,向DataFrame添加新列简单易行。可通过直接赋值、使用Series或apply方法实现。例如,直接赋值可将列表或Series对象分配给新列;使用Series可基于现有列计算生成新列;apply方法则允许应用自定义函数到每一行或列来创建新列。
68 8