高效、自动化的数据准备在机器学习中的重要性怎么强调都不为过,并且经常用熟悉的公理“垃圾进,垃圾出”来概括。这凸显了数据质量在决定机器学习模型成功与否方面发挥的关键作用。
随着数据集规模和复杂性的增加,对可靠管道的需求变得越来越重要。 这些管道对于确保机器学习模型的质量和准确性是必要的。
对于企业来说,一个改变游戏规则的方面是在边缘开发和部署数据准备管道的能力。 此功能提高了灵活性和可扩展性,使机器学习工程师能够在不同的平台上部署管道 - 从单个硬件到由区域或分支机构管理的数据中心,甚至电信机柜。 如本教程所示,可伸缩性允许这些管道从小规模开始,并在任何商业硬件上无缝扩展。
本教程可作为使用 Minio(一种高性能、兼容 S3-API 的开源对象存储系统)和 Minio 的 Python SDK 构建强大数据管道的指南。
在当前数据隐私问题日益严重的背景下,建立内部控制是没有商量余地的。 本教程重点介绍在整个数据准备过程中保护敏感信息的最佳做法。
当我们了解自动化数据准备、边缘部署和数据隐私注意事项的复杂性时,请跟随我们的脚步,为这些核心原则奠定基础。
在开始之前,请确保您的系统上安装了以下必备组件:
docker) [ compose docker combo [.]
如果从头开始,则可以使用适用于您平台的 Docker Desktop 安装程序进行安装。 您可以通过运行以下命令来检查是否安装了 docker:
docker-compose --version
首先,克隆教程 git 存储库。
在终端窗口中,cd 转到存储库中的 minio-ml-data-prep 目录并运行以下命令:
docker-compose up minio
当您执行此命令时,它会启动 minio 服务,允许 minio 服务器通过 docker-compose 传递YML 文件。
在浏览器中,使用您的默认凭据导航并登录 minio 控制台:用户名 minioadmin 和密码 minioadmin。
当 minio 在一个终端窗口中运行时,打开第二个终端窗口并再次导航到 minio-ml-data-prep 目录。 执行以下命令:
docker-compose up init-minio
此命令执行 python 脚本 init-miniopy 。此脚本使用 Minio Python SDK 与 Minio 服务器进行交互,并负责创建两个存储桶:RAW 和 CLEAN(如果它们尚不存在)。
下面是脚本作用的详细说明:
桶创建功能:create bucket(如果不存在)函数检查指定的桶是否存在。 如果存储桶不存在,请使用 make bucket 创建存储桶并打印成功消息。 如果存储桶已存在,请打印一条消息,指示该存储桶已存在。
创建原始和干净的存储桶:然后,该脚本调用两次 Create Bucket If Not exists 函数,一次用于原始存储桶,一次用于干净存储桶。 这可确保在需要时创建两个存储桶。
错误处理:该脚本包括错误处理,使用 try-except 块捕获和打印存储桶创建期间可能发生的任何 s3errors。 这可确保脚本适当地处理潜在问题,例如网络问题或凭据不正确。
导航到 以检查是否已成功创建 RAW 和 CLEAN 存储桶。
接下来,在终端窗口中执行以下命令:
docker-compose up generate-data
此命令执行 python 脚本 generate-and-upload-fake-datapy 是一个脚本,用于生成包含个人身份信息 (PII) 的虚假数据,将其保存为本地 parquet 文件,然后将文件上传到 minio raw 存储桶,演示了将基本数据摄取到 minio 对象存储系统中的过程。
下面是脚本正在执行的操作的进一步细分:
生成假数据:生成假数据功能使用假库创建包含各种假数据字段的字典。 字段包括姓名、电子邮件、地址、**号码、社会保险号 (SSN)、随机字符串、随机数和员工详细信息,例如职位、部门、工资和雇用日期。
将数据另存为 parquet:s**e as parquet 函数将生成的假数据保存为 parquet 文件。 它将数据转换为 pandas 数据帧,然后转换为 pyarrow 表,最后将其作为 parquet 文件写入数据目录。
上传到 Minio:上传到 Minio 功能将本地 parquet 文件上传到 Minio 存储桶。 它计算文件大小,以二进制模式打开文件,并使用 minio 客户端将对象上传到给定对象名称的指定存储桶。
生成并上传多个文件:生成并上传到 minio 函数迭代指定次数(默认为 10 次)生成虚假数据,将其保存为 parquet 文件,并上传到 minio raw 存储桶。
指定 Minio 原始存储桶:脚本将 minio 原始存储桶名称指定为 raw。
导航到 以检查原始存储桶是否已成功填充数据。
执行以下命令,清理生成的数据:
docker-compose up data-transform
此命令执行一个脚本,该脚本自动执行清理个人身份信息的过程。 它读取存储在原始 minio 存储桶中的数据,然后将清理后的数据上传到清理存储桶。 这演示了数据准备工作流中重要的数据隐私步骤。
PII 清理:Scrub PII 功能获取 pandas 数据帧并删除个人身份信息 (PII) 字段,例如姓名、电子邮件、地址、**号码和 SSN。
清理并上传到 minio:清理并上传到 minio 函数迭代指定数量的文件(默认为 10)。 对于每个文件,它执行以下操作:
将 parquet 文件从 minio 上的原始存储桶**移动到本地目录。
将 parquet 文件读入 pandas 数据帧。
应用 scrub pii 函数从数据帧中删除 pii。
将清理后的数据帧转换回 pyarrow 表。
将清理后的表写入本地目录中的新 parquet 文件。
将清理后的 parquet 文件上传到 Minio 上的 Clean 存储桶。
如果您想更深入地查看文件以确保它们正确转换,您可以在 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)
在“清洁”中执行此操作时在 parquet 文件上运行脚本时,将看到终端的输出,如下所示:
准备好删除容器、卷和生成的数据后,请运行以下命令:
docker-compose down
本教程将引导您了解使用 Minio 的 SDK 自动进行机器学习数据准备的基本方面。
现在,当你构建和探索了这些数据管道时,请考虑如何在它们的基础上进行构建。 探索与其他数据源集成、实施高级转换或增强现有隐私和安全措施的方法。 本教程充当启动板,鼓励你根据机器学习项目的独特需求和挑战来创新和自定义这些管道。
继续探索Minio的SDK和对象存储系统的功能,尝试不同类型的数据,并及时了解该领域的最新发展。 通过以本教程中学到的知识为基础,你将很好地掌握机器学习的自动化数据准备技术。
如需购买,请联系minio China。