你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于:Python SDK azure-ai-ml v2(当前)
在本教程中,你将:
- 将数据上传到云存储空间
- 创建 Azure 机器学习数据资产
- 访问笔记本中的数据以进行交互式开发
- 创建新版本的数据资产
机器学习项目通常从探索数据分析(EDA)、数据预处理(清理、特征工程)和构建机器学习模型原型开始,以验证假设。 此 原型制作 项目阶段具有高度交互性,适合在 IDE 或 Jupyter 笔记本中使用 Python 交互式控制台进行开发。 本教程介绍这些概念。
Prerequisites
-
要使用 Azure 机器学习,你需要一个工作区。 如果没有工作区,请完成“创建开始使用所需的资源”以创建工作区并详细了解如何使用它。
重要说明
如果 Azure 机器学习工作区配置了托管虚拟网络,则可能需要添加出站规则以允许访问公共 Python 包存储库。 有关详细信息,请参阅应用场景:访问公共机器学习包。
-
登录工作室,选择你的工作区(如果尚未打开)。
-
在工作区中打开或创建笔记本:
设置内核并在 Visual Studio Code (VS Code) 中打开
在打开的笔记本上方的顶栏中,创建一个计算实例(如果还没有的话)。
如果计算实例已停止,请选择“启动计算”,并等待它运行。
等待计算实例运行。 然后确保右上角的内核为
Python 3.10 - SDK v2
。 如果不是,请使用下拉列表选择该内核。如果没有看到该内核,请验证计算实例是否正在运行。 如果它正在运行,请选择笔记本右上角的“刷新”按钮。
如果看到一个横幅,提示你需要进行身份验证,请选择“身份验证”。
可在此处运行笔记本,或者在 VS Code 中将其打开,以获得具有 Azure 机器学习资源强大功能的完整集成开发环境 (IDE)。 选择“在 VS Code 中打开”,然后选择 Web 或桌面选项。 以这种方式启动时,VS Code 将附加到计算实例、内核和工作区文件系统。
重要说明
本教程的其余部分包含教程笔记本的单元格。 将其复制并粘贴到新笔记本中,或者立即切换到该笔记本(如果已克隆该笔记本)。
下载本教程中使用的数据
对于数据引入,Azure 数据资源管理器处理 这些格式的原始数据。 本教程使用 CSV 格式的信用卡客户端数据示例。 这些步骤发生在 Azure 机器学习资源中。 在该资源中,直接在此笔记本所在的文件夹下创建一个本地文件夹,并使用建议的名称“data”。
注意
本教程依赖于 Azure 机器学习资源文件夹位置中放置的数据。 对于本教程,“local”表示该 Azure 机器学习资源中的文件夹位置。
选择三点下方的“打开终端”,如此图所示:
终端窗口将在新选项卡中打开。
请确保将目录路径(
cd
)更改为与此笔记本相同的文件夹。 例如,如果笔记本位于名为 get-started-notebooks 的文件夹中:cd get-started-notebooks # modify this to the path where your notebook is located
在终端窗口中输入以下命令,将数据复制到计算实例:
mkdir data cd data # the subfolder where you'll store the data wget https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv
现在可以关闭终端窗口。
有关 UC Irvine 机器学习存储库中的数据的详细信息,请访问此资源。
创建工作区的句柄
在开始浏览代码之前,您需要一种方法来参考您的工作区。 创建 ml_client
作为工作区的句柄。 然后,使用 ml_client
来管理资源和作业。
在下一个单元中,输入你的订阅 ID、资源组名称和工作区名称。 若要查找这些值:
- 在右上方的 Azure 机器学习工作室工具栏中,选择你的工作区名称。
- 将工作区、资源组和订阅 ID 的值复制到代码中。
- 必须逐个复制每个值,依次进行。 关闭区域,粘贴该值,然后继续下一个区域。
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
# authenticate
credential = DefaultAzureCredential()
# Get a handle to the workspace
ml_client = MLClient(
credential=credential,
subscription_id="<SUBSCRIPTION_ID>",
resource_group_name="<RESOURCE_GROUP>",
workspace_name="<AML_WORKSPACE_NAME>",
)
注意
创建 MLClient 不会连接到工作区。 客户端初始化是惰性操作,会等待其所需的首次调用。 这发生在下一个代码单元中。
将数据上传到云存储空间
Azure 机器学习使用统一资源标识符 (URI),它们指向云中的存储位置。 使用 URI 可以轻松访问笔记本和作业中的数据。 数据 URI 格式类似于在 Web 浏览器中用于访问网页的 Web URL。 例如:
- 从公共 https 服务器访问数据:
https://<account_name>.blob.core.windows.net/<container_name>/<folder>/<file>
- 从 Azure Data Lake Gen 2 访问数据:
abfss://<file_system>@<account_name>.dfs.core.windows.net/<folder>/<file>
Azure 机器学习数据资产类似于 Web 浏览器书签(收藏夹)。 可以创建数据资产,然后使用友好名称访问该资产,而不是记住指向最常用的数据的长存储路径(URI)。
通过创建数据资产,还可以创建对数据源位置的引用及其元数据的副本。 由于数据保留在其现有位置,因此不会产生额外的存储成本,并且不会危及数据源完整性。 可以从 Azure 机器学习数据存储、Azure 存储、公共 URL 和本地文件创建数据资产。
提示
对于较小的数据上传,Azure 机器学习数据资产创建非常适合将数据从本地计算机资源上传到云存储。 此方法可避免使用额外的工具或实用工具。 但是,较大的数据上传可能需要专用的工具或实用工具,例如 azcopy。 azcopy 命令行工具可将数据移向和移出 Azure 存储。 有关 azcopy 的详细信息,请参阅 AzCopy 入门。
下一个笔记本单元格会创建数据资产。 此代码示例将原始数据文件上传到指定的云存储资源。
每次创建数据资产时,都需要为其创建唯一版本。 如果版本已存在,则会出现错误。 在此代码中,将使用“initial”来首次读取数据。 如果该版本已存在,则代码不会重新创建它。
你还可以省略版本参数。 在这种情况下,会为你生成版本号,从 1 开始,并从那里递增。
本教程使用名称“initial”作为第一个版本。 “创建生产级机器学习管道”教程也使用此版本的数据,因此可使用在该教程中再次出现的值。
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
# Update the 'my_path' variable to match the location of where you downloaded the data on your
# local filesystem
my_path = "./data/default_of_credit_card_clients.csv"
# Set the version number of the data asset
v1 = "initial"
my_data = Data(
name="credit-card",
version=v1,
description="Credit card data",
path=my_path,
type=AssetTypes.URI_FILE,
)
## Create data asset if it doesn't already exist:
try:
data_asset = ml_client.data.get(name="credit-card", version=v1)
print(
f"Data asset already exists. Name: {my_data.name}, version: {my_data.version}"
)
except:
ml_client.data.create_or_update(my_data)
print(f"Data asset created. Name: {my_data.name}, version: {my_data.version}")
若要检查上传的数据,请在左侧导航菜单的“资产”部分选择“数据”。 数据已上传且数据资产已创建:
此数据命名为 信用卡。 在 “数据资产 ”选项卡中,可以在 “名称” 列中看到它。
Azure 机器学习数据存储是对 Azure 上现有存储帐户的引用。 数据存储具有以下优势:
用于与不同存储类型交互的常见且易于使用的 API:
- Azure Data Lake Storage
- Blob
- 文件存储
和身份验证方法。
在团队工作时发现有用的数据存储的更简单方法。
在你的脚本中,隐藏基于凭据的数据访问连接信息的方法(服务主体/SAS/密钥)。
访问笔记本中的数据
你想要为经常访问的数据创建数据资产。 您可以使用 URI 访问数据,具体步骤如 从数据存储 URI(例如文件系统)访问数据 中所述。 但是,如前所述,很难记住这些 URI。
另一种方法是使用 azureml-fsspec
库,该库为 Azure 机器学习数据存储提供文件系统接口。 这是在 Pandas 中访问 CSV 文件的更简单方法:
重要说明
在笔记本单元格中,执行以下代码以在 Jupyter 内核中安装 azureml-fsspec
Python 库:
%pip install -U azureml-fsspec
import pandas as pd
# Get a handle of the data asset and print the URI
data_asset = ml_client.data.get(name="credit-card", version=v1)
print(f"Data asset URI: {data_asset.path}")
# Read into pandas - note that you will see 2 headers in your data frame - that is ok, for now
df = pd.read_csv(data_asset.path)
df.head()
有关笔记本中的数据访问的详细信息,请参阅 交互式开发期间从 Azure 云存储访问数据。
创建新版本的数据资产
数据需要进行一些简单的清理,以便适合用于训练机器学习模型。 它具有:
- 两个标题
- 不会用作机器学习中的功能的客户端 ID 列
- 响应变量名称中的空格
此外,与 CSV 格式相比,Parquet 文件格式是存储此数据的更好方法。 Parquet 可提供压缩,并维护架构。 要清理数据并将其以 Parquet 格式存储:
# Read in data again, this time using the 2nd row as the header
df = pd.read_csv(data_asset.path, header=1)
# Rename column
df.rename(columns={"default payment next month": "default"}, inplace=True)
# Remove ID column
df.drop("ID", axis=1, inplace=True)
# Write file to filesystem
df.to_parquet("./data/cleaned-credit-card.parquet")
下表显示了在前面步骤中下载的原始 default_of_credit_card_clients.csv 文件中数据的结构。 上传的数据包含 23 个解释变量和 1 个响应变量,如下所示:
列名 | 变量类型 | 说明 |
---|---|---|
X1 | 解释型 | 给予的信贷金额(新台币):它包括个人消费信贷和他们的家庭(附加)信贷。 |
X2 | 解释型 | 性别(1 = 男性;2 = 女性)。 |
X3 | 解释型 | 教育(1 = 研究生;2 = 本科;3 = 高中;4 = 其他)。 |
X4 | 解释型 | 婚姻状况(1 = 已婚;2 = 单身;3 = 其他)。 |
X5 | 解释型 | 年龄(年)。 |
X6-X11 | 解释型 | 过去付款的历史记录。 2005年4月至9月期间跟踪的每月付款记录。 -1 = 按期付款;1 = 付款延迟一个月;2 = 付款延迟两个月; 。 8 = 付款延迟 8 个月;9 = 付款延迟 9 个月及以上。 |
X12-17 | 解释型 | 2005 年 4 月到 9 月账单金额流水(新台币)。 |
X18-23 | 解释型 | 2005 年 4 月到 9 月的先前付款金额(新台币)。 |
Y | 响应 | 默认付款(是 = 1,否 = 0) |
接下来,创建数据 资产的新版本 。 数据会自动上传到云存储。 对于此版本,请添加一个时间值,以便每次运行此代码时,都会创建不同的版本号。
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes
import time
# Next, create a new version of the data asset (the data is automatically uploaded to cloud storage):
v2 = "cleaned" + time.strftime("%Y.%m.%d.%H%M%S", time.gmtime())
my_path = "./data/cleaned-credit-card.parquet"
# Define the data asset, and use tags to make it clear the asset can be used in training
my_data = Data(
name="credit-card",
version=v2,
description="Default of credit card clients data.",
tags={"training_data": "true", "format": "parquet"},
path=my_path,
type=AssetTypes.URI_FILE,
)
## Create the data asset
my_data = ml_client.data.create_or_update(my_data)
print(f"Data asset created. Name: {my_data.name}, version: {my_data.version}")
已清理的 Parquet 文件是最新版本的数据源。 此代码先显示 CSV 版本结果集,然后显示 Parquet 版本:
import pandas as pd
# Get a handle of the data asset and print the URI
data_asset_v1 = ml_client.data.get(name="credit-card", version=v1)
data_asset_v2 = ml_client.data.get(name="credit-card", version=v2)
# Print the v1 data
print(f"V1 Data asset URI: {data_asset_v1.path}")
v1df = pd.read_csv(data_asset_v1.path)
print(v1df.head(5))
# Print the v2 data
print(
"_____________________________________________________________________________________________________________\n"
)
print(f"V2 Data asset URI: {data_asset_v2.path}")
v2df = pd.read_parquet(data_asset_v2.path)
print(v2df.head(5))
清理资源
如果打算继续学习其他教程,请跳到后续步骤。
停止计算实例
如果现在不打算使用计算实例,请将其停止:
- 在工作室的左窗格中,选择 “计算”。
- 在顶部选项卡中,选择 “计算实例”。
- 选择列表中的计算实例。
- 在顶部工具栏中,选择“停止”。
删除所有资源
重要说明
已创建的资源可用作其他 Azure 机器学习教程和操作方法文章的先决条件。
如果你不打算使用已创建的任何资源,请删除它们,以免产生任何费用:
在 Azure 门户的搜索框中输入“资源组”,然后从结果中选择它。
从列表中选择你创建的资源组。
在“概述”页面上,选择“删除资源组”。
输入资源组名称。 然后选择“删除”。
Next steps
有关数据资产的详细信息,请参阅 “创建数据资产”。
有关数据存储的详细信息,请参阅 “创建数据存储”。
继续学习下一教程,了解如何开发训练脚本: