机器学习中高效、自动化的数据准备的重要性怎么强调都不为过,并且通常概括为熟悉的公理“垃圾输入,垃圾输出”。这强调了数据质量在决定机器学习模型成功方面所发挥的关键作用。

随着数据集规模和复杂性的扩大,对强大管道的需求变得越来越重要。这些管道对于确保机器学习模型的质量和准确性是必要的。

对于企业来说,改变游戏规则的一个方面是能够在边缘开发和部署数据准备管道。此功能提高了灵活性和可扩展性,使机器学习工程师能够在不同的平台上部署管道——从个人硬件到由地区或分支机构管理的数据中心,甚至扩展到电信机柜。正如本教程所示,可扩展性允许这些管道从小规模开始,并在任何商业硬件上无缝扩展。

本教程作为使用 MinIO(一种高性能、开源 S3-API 兼容对象存储系统)和 MinIO 的 Python SDK 构建强大数据管道的指南。

在当前数据隐私问题日益严重的情况下,建立内部控制是不容谈判的。本教程重点介绍在整个数据准备过程中保护敏感信息的最佳实践。

随着我们了解自动化数据准备、边缘部署和数据隐私注意事项的复杂性,请跟随我们的脚步,为这些中心原则奠定基础。

先决条件

开始之前,请确保您的系统上安装了以下先决条件:

(Docker)[https://docs.docker.com/get-docker/] Docker Compose Docker 组合[https://docs.docker.com/compose/install/]

如果您是从头开始,则可以使用适合您平台的 Docker Desktop 安装程序来安装两者。您可以通过运行以下命令来检查是否安装了 Docker:

docker-compose --version

启动 MinIO

首先,克隆教程 git 存储库。

在终端窗口中,cd 进入存储库中的 minio-ml-data-prep 目录并运行以下命令:

docker-compose up minio

当您执行此命令时,它会启动 MinIO 服务,使 MinIO 服务器可以通过 docker-compose.yml 文件中定义的配置端口和端点进行访问。

在浏览器中,导航到 http://127.0.0.1:9001 并使用默认凭据登录 MinIO 控制台:用户名 minioadmin 和密码 minioadmin 。

创建存储桶

当 MinIO 在一个终端窗口中运行时,打开第二个终端窗口并再次导航到 minio-ml-data-prep 目录。执行以下命令:

docker-compose up init-minio

此命令执行 Python 脚本 init-minio.py 。此脚本使用 MinIO Python SDK 与 MinIO 服务器交互,并负责创建两个存储桶 raw 和 clean (如果它们尚不存在)。

以下是该脚本功能的详细说明:

桶创建函数:

create_bucket_if_not_exists 函数检查指定的存储桶是否存在。如果存储桶不存在,则使用 make_bucket 创建存储桶并打印成功消息。如果存储桶已存在,则打印一条消息,指示该存储桶已存在。

创建原始和干净的桶:

然后,该脚本调用 create_bucket_if_not_exists 函数两次,一次针对 raw 存储桶,一次针对 clean 存储桶。这可确保在需要时创建两个存储桶。

错误处理:

该脚本包括错误处理,使用 try-except 块捕获并打印存储桶创建期间可能发生的任何 S3Error 。这可确保脚本妥善处理潜在问题,例如网络问题或不正确的凭据。

导航到 http://127.0.0.1:9001 以检查 raw 和 clean 存储桶是否已成功创建。

生成数据并填充存储桶

接下来,在终端窗口中执行以下命令:

docker-compose up generate-data

此命令执行 Python 脚本 generate-and-upload-fake-data.py ,该脚本生成包含个人识别信息 (PII) 的虚假数据,将其保存为本地 Parquet 文件,然后将这些文件上传到 MinIO raw 存储桶,演示了将基本数据摄取到 MinIO 对象存储系统中的过程。

以下是该脚本正在执行的操作的进一步细分:

生成假数据:

generate_fake_data 函数使用 Faker 库创建一个包含各种假数据字段的字典。字段包括姓名、电子邮件、地址、电话号码、社会安全号码 (SSN)、随机字符串、随机数字以及职位、部门、工资和雇用日期等员工详细信息。

将数据保存为 Parquet:

save_as_parquet 函数获取生成的假数据并将其保存为 Parquet 文件。它将数据转换为 Pandas DataFrame,然后转换为 Pyarrow 表,最后将其作为 Parquet 文件写入 data 目录中。

上传到MinIO:

upload_to_minio 函数将本地 Parquet 文件上传到 MinIO 存储桶。它计算文件大小,以二进制模式打开文件,并使用 MinIO 客户端将对象上传到给定对象名称的指定存储桶。

生成并上传多个文件:

generate_and_upload_to_minio 函数迭代指定次数(默认为 10)生成假数据,将其保存为 Parquet 文件,并将其上传到 MinIO 原始存储桶。

指定 MinIO 原始存储桶:

该脚本将 MinIO 原始存储桶名称指定为 raw 。

导航到 http://127.0.0.1:9001 以检查原始存储桶是否已成功填充数据。

转变您的数据

执行以下命令来清理生成的数据:

docker-compose up data-transform

此命令执行一个脚本,自动执行清理个人身份信息的过程。它读取 raw MinIO存储桶中存储的数据,然后将清理后的数据上传到 clean 存储桶。这展示了数据准备工作流程中重要的数据隐私步骤

PII 清理功能:

scrub_pii 函数采用 Pandas DataFrame(数据)并删除个人身份信息 (PII) 字段,例如姓名、电子邮件、地址、电话号码和 SSN。

清理并上传到 MinIO:

scrub_and_upload_to_minio 函数迭代指定数量的文件(默认为 10)。对于每个文件,它执行以下操作:

将 Parquet 文件从 MinIO 上的原始存储桶下载到本地目录。 将 Parquet 文件读入 Pandas DataFrame。 应用 scrub_pii 函数从 DataFrame 中删除 PII。 将清理后的 DataFrame 转换回 Pyarrow 表。 将清理后的表写入本地目录中的新 Parquet 文件。 将清理后的 Parquet 文件上传到 MinIO 上的 clean 存储桶。

查rhf

如果您想更深入地查看文件以确保它们正确转换,您可以对从 MinIO 下载的文件之一运行以下脚本。

您可以通过编程方式或通过控制台下载文件。

import pandas as pd

import pyarrow.parquet as pq

def print_parquet(file_path, num_rows=5):

# Read Parquet file into a pyarrow Table

table = pq.read_table(file_path)

# Extract a Pandas DataFrame from the Table

df = table.to_pandas()

# Set display options to show all columns without truncation

pd.set_option('display.max_columns', None)

pd.set_option('display.expand_frame_repr', False)

# Print the first few rows of the DataFrame

print(df.head(num_rows))

# Specify the path to your Parquet file

parquet_file_path = "path/to/your/file.parquet"

# Print the first 5 rows of the Parquet file with tidy column display

print_parquet(parquet_file_path)

当您在 clean.parquet 文件上运行脚本时,您将看到终端的输出,如下所示:

关掉它

当您准备好删除容器、卷和生成的数据时,请运行以下命令:

docker-compose down

扩展您所构建的内容

本教程引导您了解使用 MinIO 的 SDK 进行机器学习自动化数据准备的基本方面。

现在,当您已经构建并探索了这些数据管道时,请考虑如何在此基础上进行扩展。探索集成其他数据源、实施高级转换或增强现有隐私和安全措施的方法。本教程充当启动板,鼓励您根据机器学习项目的独特需求和挑战来创新和自定义这些管道。

继续探索 MinIO 的 SDK 和对象存储系统的功能,尝试不同类型的数据,并随时了解该领域的最新进展。通过基于您在本教程中学到的知识,您将很好地掌握机器学习的自动化数据准备技术。

如果需要购买请联系MinIO中国。

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: