適用於:
Python SDK azure-ai-ml v2 (目前)
在本教學課程中,您會:
- 將資料上傳至雲端儲存體
- 建立 Azure Machine Learning 資料資產
- 在筆記本中存取資料,以進行互動式開發
- 建立新版本的資料資產
機器學習專案通常會從探勘數據分析 (EDA)、數據前置處理(清理、特徵工程)和建置機器學習模型原型開始,以驗證假設。 此 原型 設計項目階段具有高度互動性,並可讓您使用 Python 互動式主控台在 IDE 或 Jupyter 筆記本中開發。 本教學課程說明這些概念。
先決條件
-
若要使用 Azure Machine Learning,您需要工作區。 如果您沒有工作區,請完成建立要開始使用所需要的資源以建立工作區,並深入了解其使用方式。
重要事項
如果您的 Azure Machine Learning 工作區已設定有受控虛擬網路,您可能需要新增輸出規則,以允許存取公用 Python 套件存放庫。 如需詳細資訊,請參閱案例:存取公用機器學習套件。
-
登入工作室,並選取您的工作區 (如果其尚未開啟的話)。
-
在工作區開啟或建立筆記本:
設定您的核心並在 Visual Studio Code (VS Code) 中開啟
在開啟的筆記本上方的頂端列上,如果您還沒有計算執行個體,請建立計算執行個體。
如果計算執行個體已停止,請選取 [啟動計算],並等到其執行為止。
等候計算執行個體處於執行中狀態。 然後確定位於右上方的核心是
Python 3.10 - SDK v2。 如果沒有,請使用下拉式清單來選取此核心。如果您沒有看到此核心,請驗證您的計算執行個體是否執行中。 如果是,請選取筆記本右上方的 [重新整理] 按鈕。
如果您看到橫幅指出您需要進行驗證,請選取 [驗證]。
您可以在此執行筆記本,或在 VS Code 中予以開啟,以取得包含 Azure Machine Learning 資源強大功能的完全整合式開發環境 (IDE)。 選取 [在 VS Code 中開啟],然後選取 Web 或桌面選項。 以這種方式啟動時,VS Code 會附加至您的計算執行個體、核心和工作區檔案系統。
重要事項
本教學課程的其餘部分包含教學課程筆記本的儲存格。 複製它們並將其貼入新的筆記本中,或者如果您已複製筆記本,請立即切換至該筆記本。
下載本教學課程中使用的資料
針對數據擷取,Azure 數據總管會 以這些格式處理原始數據。 本教學課程使用 CSV 格式的信用卡用戶端數據範例。 這些步驟會在 Azure Machine Learning 資源中執行。 在該資源中,您直接在此筆記本所在的資料夾下建立本機資料夾,其中具有建議的 data 名稱。
附註
本教學課程取決於 Azure Machine Learning 資源資料夾位置中放置的資料。 在本教學課程中,'local' 指的是該 Azure Machine Learning 資源中的資料夾位置。
選取三個點下方的 [開啟終端機],如下圖所示:
終端機視窗會在新的索引標籤開啟。
請務必將目錄 (
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 Machine Learning Repository 中資料的詳細資訊,請造訪此資源。
建立工作區的控制代碼
在探索程式碼之前,您需要一種方式來參考您的工作區。 您建立 ml_client 作為工作區的控制代碼。 您接著會使用 ml_client 來管理資源和作業。
在下一個資料格中,輸入您的訂用帳戶識別碼、資源群組名稱和工作區名稱。 若要尋找這些值:
- 在右上方的 Azure Machine Learning 工作室工具列中,選取您的工作區名稱。
- 將工作區、資源群組和訂用帳戶識別碼的值複製到程式碼。
- 您必須個別複製每個值,一次一個。 關閉區域、貼上值,然後繼續下一個區域。
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 Machine Learning 會使用統一資源識別項 (URI),其指向雲端中的儲存體位置。 URI 可讓您輕鬆地存取筆記本和作業中的資料。 數據 URI 格式類似於您在網頁瀏覽器中用來存取網頁的 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 Machine Learning 資料資產類似於網頁瀏覽器書籤 (我的最愛)。 您可以建立數據資產,然後以易記名稱存取該資產,而不是記住指向您最常使用之數據的長記憶體路徑(URI)。
建立資料資產也會建立資料來源位置的參考,以及其中繼資料的複本。 因為數據會保留在其現有位置,因此您不會產生額外的記憶體成本,而且不會有數據源完整性的風險。 您可以從 Azure Machine Learning 資料存放區、Azure 記憶體、公用 URL 和本機檔案建立數據資產。
秘訣
針對較小的數據上傳,Azure Machine Learning 數據資產建立非常適合將數據從本機計算機資源上傳至雲端記憶體。 此方法可避免需要額外的工具或公用程式。 不過,較大的數據上傳可能需要專用的工具或公用程式 ,例如 azcopy。 azcopy 命令行工具會將資料移入 Azure 儲存體,以及從 Azure 儲存體中移出資料。 如需 azcopy 的詳細資訊,請參閱 開始使用 AzCopy。
下一個筆記本資料格會建立資料資產。 程式碼範例會將未經處理資料檔案上傳至指定的雲端儲存空間資源。
每次建立資料資產時,都需要為其製作唯一版本。 如果版本已經存在,您會收到錯誤訊息。 在此程式代碼中,您會使用「初始」來讀取數據。 如果該版本已經存在,程式代碼就不會重新建立。
您也可以省略 version 參數。 在此情況下,會為您產生版本號碼,從 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 Machine Learning 資料存放區是 Azure 上現有儲存體帳戶的參考。 資料存放區提供下列優點:
常見且易於使用的 API,可與不同的記憶體類型互動:
- Azure Data Lake Storage
- 塊狀物
- 檔案儲存體
和驗證方法互動。
在小組工作時探索實用數據存放區的簡單方式。
在指令碼中,提供隱藏認證型資料存取連線資訊的方法 (服務主體/SAS/金鑰)。
存取筆記本中的資料
您想要為經常存取的數據建立數據資產。 您可以使用 URI 來存取資料,如從資料存放區 URI 存取資料中所述,例如檔案系統。 不過,如先前所述,很難記住這些 URI。
替代方案是使用 azureml-fsspec 庫,其提供 Azure Machine Learning 資料存取庫的檔案系統介面。 這是在 Pandas 中存取 CSV 檔案的較簡單方式:
重要事項
在 Notebook 資料格中,執行此程式碼以在 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 雲端記憶體存取數據。
建立新版本的資料資產
數據需要一些輕清理,使其適合定型機器學習模型。 其中包含:
- 兩個標頭
- 不會用作機器學習特徵的客戶端識別碼欄位
- 回應變數名稱中的空格
此外,相較於 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 = 付款延遲八個月;9 = 付款延遲九個月以上。 |
| X12-17 | 解釋 | 2005 年 4 月至 9 月的對帳單金額 (新臺幣)。 |
| X18-23 | 解釋 | 2005 年 4 月至 9 月的先前付款金額 (新臺幣)。 |
| 是 | 回應 | 預設付款 (是 = 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))
清除資源
如果您打算立即繼續進行其他教學課程,請跳至後續步驟。
停止計算執行個體
如果現在不打算使用,請停止計算執行個體:
- 在 Studio 的左窗格中,選取 [計算]。
- 在頂端索引標籤中,選取 [計算實例]。
- 選取清單中的計算執行個體。
- 在頂端工具列中,選取 [停止]。
刪除所有資源
重要事項
您所建立的資源可用來作為其他 Azure Machine Learning 教學課程和操作說明文章的先決條件。
如果不打算使用您建立的任何資源,請刪除以免產生任何費用:
在 Azure 入口網站的搜尋方塊中,輸入 [資源群組],然後從結果中選取它。
從清單中,選取您所建立的資源群組。
在 [概觀] 頁面上,選取 [刪除資源群組]。
輸入資源群組名稱。 然後選取 [刪除]。
後續步驟
如需數據資產的詳細資訊,請參閱 建立數據資產。
如需數據存放區的詳細資訊,請參閱 建立數據存放區。
繼續進行下一個教學課程,以了解如何開發定型指令碼:



