教學課程:在 Azure Machine Learning 中上傳、存取及探索您的資料
適用於:Python SDK azure-ai-ml v2 (目前)
在本教學課程中,您將了解如何:
- 將資料上傳至雲端儲存體
- 建立 Azure Machine Learning 資料資產
- 在筆記本中存取資料,以進行互動式開發
- 建立新版本的資料資產
機器學習專案通常會以探索資料分析 (EDA)、資料前置處理 (清理、特徵工程),以及建置 Machine Learning 模型原型來驗證假設開始。 此原型專案階段有高度互動性。 適合使用 Python 互動式控制台在 IDE 或 Jupyter 筆記本中開發。 本教學課程說明這些想法。
這段影片會示範如何在 Azure Machine Learning 工作室開始,以便您可以遵循教學課程中的步驟。 影片示範如何建立筆記本、複製筆記本、建立計算執行個體,以及下載教學課程所需的資料。 這些步驟也會於下列各節中說明。
必要條件
-
若要使用 Azure 機器學習,您需要工作區。 如果您沒有工作區,請完成建立要開始使用所需要的資源以建立工作區,並深入了解其使用方式。
-
登入工作室,並選取您的工作區 (如果其尚未開啟的話)。
-
在工作區開啟或建立筆記本:
設定您的核心並在 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 sub-folder 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 的詳細資訊,請造訪此資源。
下一個筆記本資料格會建立資料資產。 程式碼範例會將未經處理資料檔案上傳至指定的雲端儲存空間資源。
每次建立資料資產時,都需要為其製作唯一版本。 如果版本已經存在,您會收到錯誤。 在此程式碼中,我們會使用 "initial" 進行資料的第一次讀取。 如果該版本已經存在,我們不會重新建立。
您也可以省略 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 儲存體
- Blob
- 檔案
和驗證方法互動。
以小組模式合作時,可更輕鬆探索實用的資料存放區。
在指令碼中,提供隱藏認證型資料存取連線資訊的方法 (服務主體/SAS/金鑰)。
存取筆記本中的資料
Pandas 直接支援 URI;此範例示範如何從 Azure Machine Learning 資料存放區讀取 CSV 檔案:
import pandas as pd
df = pd.read_csv("azureml://subscriptions/<subid>/resourcegroups/<rgname>/workspaces/<workspace_name>/datastores/<datastore_name>/paths/<folder>/<filename>.csv")
不過,如先前所述,要記住這些 URI 可能有些困難。 此外,您必須以資源的實際值,手動取代 pd.read_csv 命令中的所有 <substring> 值。
您想要為經常存取的資料建立資料資產。 以下是在 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 .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 月的先前付款金額 (新臺幣)。 |
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 Machine Learning 教學課程和操作說明文章的先決條件。
如果不打算使用您建立的任何資源,請刪除以免產生任何費用:
在 Azure 入口網站 的搜尋方塊中,輸入 [資源群組],然後從結果中選取它。
從清單中,選取您所建立的資源群組。
在 [概觀] 頁面上,選取 [刪除資源群組]。
輸入資源群組名稱。 接著選取刪除。
下一步
如需資料資產的詳細資訊,請造訪建立資料資產。
如需資料存放區的詳細資訊,請造訪建立資料存放區。
繼續進行下一個教學課程,以了解如何開發定型指令碼: