机器学习项目的数据加载


假设如果你想开始一个 ML 项目,那么你首先需要的也是最重要的事情是什么?这是我们启动任何 ML 项目所需加载的数据。关于数据,ML 项目最常见的数据格式是 CSV(逗号分隔值)。

基本上,CSV 是一种简单的文件格式,用于存储表格数据(数字和文本),例如纯文本的电子表格。在 Python 中,我们可以通过不同的方式加载 CSV 数据,但在加载 CSV 数据之前,我们必须注意一些注意事项。

加载 CSV 数据时的注意事项


CSV 数据格式是 ML 数据最常见的格式,但在将其加载到我们的 ML 项目中时,我们需要注意以下主要注意事项:

文件头

在 CSV 数据文件中,标题包含每个字段的信息。我们必须对头文件和数据文件使用相同的分隔符,因为头文件指定了如何解释数据字段。

以下是与 CSV 文件头相关的两种必须考虑的情况:

  • 案例一:当数据文件有文件头时 : 如果数据文件有文件头,它会自动为每列数据分配名称。

  • 案例二:当数据文件没有文件头时 : 如果数据文件没有文件头,我们需要手动为每一列数据分配名称。

在这两种情况下,我们都必须明确指定我们的 CSV 文件是否包含标题。

Comments

任何数据文件中的注释都有其意义。在 CSV 数据文件中,注释由行首的井号 (#) 表示。在将 CSV 数据加载到 ML 项目中时,我们需要考虑评论,因为如果我们在文件中有评论,那么我们可能需要指出,取决于我们选择的加载方法,是否期待这些评论。

分隔符

在 CSV 数据文件中,逗号 (,) 字符是标准分隔符。分隔符的作用是分隔字段中的值。在将 CSV 文件上传到 ML 项目时,考虑分隔符的作用很重要,因为我们还可以使用不同的分隔符,例如制表符或空格。但是在使用不同于标准分隔符的情况下,我们必须明确指定它。

Quotes

在 CSV 数据文件中,双引号 (“ ”) 标记是默认的引号字符。在将 CSV 文件上传到 ML 项目时考虑引号的作用很重要,因为我们还可以使用双引号以外的其他引号字符。但是如果使用与标准引号不同的引号字符,我们必须明确指定它。

加载 CSV 数据文件的方法


在处理 ML 项目时,最关键的任务是将数据正确加载到其中。 ML 项目最常见的数据格式是 CSV,它有各种风格和不同的解析难度。在本节中,我们将讨论 Python 中加载 CSV 数据文件的三种常用方法:

使用 Python 标准库加载 CSV

第一种也是最常用的加载 CSV 数据文件的方法是使用 Python 标准库,它为我们提供了各种内置模块,即 .csv 模块 和 reader() 函数。下面是一个借助它加载 CSV 数据文件的例子:

例子

在这个例子中,我们使用了鸢尾花数据集,可以下载到我们的本地目录中。加载数据文件后,我们可以将其转换为 NumPy 数组并将其用于 ML 项目。以下是加载 CSV 数据文件的 Python 脚本:

首先,我们需要导入Python标准库提供的csv模块,如下:

import csv

接下来,我们需要导入 Numpy 模块,用于将加载的数据转换为 NumPy 数组。

import numpy as np

现在,提供文件的完整路径,存储在我们的本地目录中,包含 CSV 数据文件:

path = r"c:\iris.csv"

接下来,使用 csv.reader() 函数从 CSV 文件中读取数据:

with open(path,'r') as f:
    reader = csv.reader(f,delimiter = ',')
    headers = next(reader)
    data = list(reader)
    data = np.array(data).astype(float)

我们可以使用以下脚本行打印标题的名称:

print(headers)

以下脚本行将打印数据的形状,即文件中的行数和列数:

print(data.shape)

下一个脚本行将给出数据文件的前三行:

print(data[:3])
['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
(150, 4)
[  [5.1  3.5  1.4  0.2]
    [4.9  3.   1.4  0.2]
    [4.7  3.2  1.3  0.2]
]

使用 NumPy 加载 CSV


另一种加载 CSV 数据文件的方法是 NumPy 和 numpy.loadtxt() 函数。下面是一个借助它加载 CSV 数据文件的例子:

例子

在此示例中,我们使用的是包含糖尿病患者数据的 Pima Indians 数据集。该数据集是没有标题的数字数据集。它也可以下载到我们的本地目录中。加载数据文件后,我们可以将其转换为 NumPy 数组并用于 ML 项目。以下是加载 CSV 数据文件的 Python 脚本:

from numpy import loadtxt
path = r"C:\pima-indians-diabetes.csv"
datapath= open(path, 'r')
data = loadtxt(datapath, delimiter=",")
print(data.shape)
print(data[:3])
(768, 9)
[  [ 6.  148.  72.  35.  0.  33.6  0.627  50. 1.]
    [ 1.  85.   66.  29.  0.  26.6  0.351  31. 0.]
    [ 8.  183.  64.  0.   0.  23.3  0.672  32. 1.]
]

使用 Pandas 加载 CSV


另一种加载 CSV 数据文件的方法是 Pandas and pandas.read_csv() 函数 .这是一个非常灵活的函数,它返回一个 pandas.DataFrame 可以立即用于绘图。下面是一个借助它加载 CSV 数据文件的例子:

例子

在这里,我们将实现两个 Python 脚本,第一个是具有标题的 Iris 数据集,另一个是使用 Pima Indians 数据集,它是一个没有标题的数字数据集。两个数据集都可以下载到本地目录。

Script-1

以下是使用 Pandas on Iris 数据集加载 CSV 数据文件的 Python 脚本:

from pandas import read_csv
path = r"C:\iris.csv"
data = read_csv(path)
print(data.shape)
print(data[:3])

输出:

(150, 4)
    sepal_length   sepal_width  petal_length   petal_width
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

Script-2

以下是在 Pima Indians Diabetes 数据集上使用 Pandas 加载 CSV 数据文件的 Python 脚本,同时还提供了标题名称:

from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
print(data.shape)
print(data[:3])
(768, 9)
    preg  plas  pres   skin  test   mass    pedi    age   class
0   6    148    72      35    0     33.6   0.627    50      1
1   1    85     66      29    0     26.6   0.351    31      0
2   8    183    64      0     0     23.3   0.672    32      1

借助给定的示例,可以很容易地理解上述三种加载 CSV 数据文件的方法之间的区别。