教學課程:上傳、存取及探索 Azure 機器學習 中的數據

適用於Python SDK azure-ai-ml v2 (目前)

在本教學課程中,您將了解如何:

  • 將數據上傳至雲端記憶體
  • 建立 Azure 機器學習 數據資產
  • 存取筆記本中的數據以進行互動式開發
  • 建立新版本的數據資產

機器學習項目的開始通常涉及探勘數據分析 (EDA)、數據前置處理(清理、特徵工程),以及建置 機器學習 模型原型,以驗證假設。 此 原型 設計項目階段具有高度互動性。 它適合使用 Python 互動式控制台在 IDE 或 Jupyter 筆記本中開發。 本教學課程說明這些想法。

這段影片示範如何開始 Azure Machine Learning 工作室,讓您可以遵循教學課程中的步驟。 影片示範如何建立筆記本、複製筆記本、建立計算實例,以及下載教學課程所需的數據。 下列各節也會說明這些步驟。

必要條件

  1. 若要使用 Azure 機器學習,您必須先有工作區。 如果您沒有資源,請完成 建立資源,才能開始 建立工作區,並深入瞭解如何使用它。

  2. 登入 Studio如果工作區尚未開啟,請選取您的工作區。

  3. 在您的工作區開啟或建立筆記本:

設定核心

  1. 在開啟筆記本上方的頂端列上,如果您還沒有計算實例,請建立計算實例。

    Screenshot shows how to create a compute instance.

  2. 如果計算實例已停止,請選取 [ 啟動計算 ],並等候其執行。

    Screenshot shows how to start compute if it is stopped.

  3. 請確定位於右上方的核心是 Python 3.10 - SDK v2。 如果沒有,請使用下拉式清單來選取此核心。

    Screenshot shows how to set the kernel.

  4. 如果您看到橫幅指出您需要進行驗證,請選取 [ 驗證]。

重要

本教學課程的其餘部分包含教學課程筆記本的單元格。 將其複製/貼到新的筆記本中,或如果您複製筆記本,請立即切換至筆記本。

下載本教學課程中使用的數據

針對數據擷取,Azure 數據總管會 處理這些格式的原始數據。 本教學課程會使用此 CSV 格式的信用卡用戶端數據範例。 我們看到 Azure 機器學習 資源中的步驟繼續進行。 在該資源中,我們將直接在此筆記本所在的資料夾下,建立具有建議數據名稱的本機資料夾。

注意

本教學課程取決於 Azure 機器學習 資源資料夾位置中放置的數據。 在本教學課程中,'local' 表示該 Azure 中的資料夾位置 機器學習 資源。

  1. 選取 三個點下方的 [開啟終端機 ],如下圖所示:

    Screenshot shows open terminal tool in notebook toolbar.

  2. 終端機視窗會在新的索引標籤開啟。

  3. 請確定您 cd 位於此筆記本所在的相同資料夾。 例如,如果筆記本位於名為 get-started-notebooks 的資料夾

    cd get-started-notebooks    #  modify this to the path where your notebook is located
    
  4. 在終端機視窗中輸入下列命令,將資料複製到計算實例:

    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
    
  5. 您現在可以關閉終端機視窗。

深入瞭解UCI機器學習存放庫上的這項數據。

建立工作區的句柄

在深入探討程序代碼之前,您需要參考工作區的方法。 您將為工作區的句柄建立 ml_client 。 接著,您將用來 ml_client 管理資源和作業。

在下一個數據格中,輸入您的訂用帳戶標識碼、資源組名和工作區名稱。 若要尋找這些值:

  1. 在右上方的 Azure Machine Learning 工作室工具列中,選取您的工作區名稱。
  2. 將工作區、資源群組和訂用帳戶標識碼的值複製到程式代碼中。
  3. 您必須複製一個值,關閉區域並貼上,然後返回下一個值。
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 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 機器學習 數據資產類似於網頁瀏覽器書籤(我的最愛)。 您可以建立數據資產,然後以易記名稱存取該資產,而不是記住指向您最常使用之數據的長記憶體路徑(URI)。

數據資產建立也會建立 數據源位置的參考 ,以及其元數據的複本。 因為數據會保留在其現有位置,因此您不會產生額外的記憶體成本,而且不會有數據源完整性的風險。 您可以從 Azure 機器學習 資料存放區、Azure 儲存體、公用 URL 和本機檔案建立數據資產。

提示

對於較小的數據上傳,Azure 機器學習 數據資產建立適用於將數據從本機計算機資源上傳至雲端記憶體。 此方法可避免需要額外的工具或公用程式。 不過,較大的數據上傳可能需要專用的工具或公用程式,例如 azcopy。 azcopy 命令行工具會將數據從 Azure 儲存體 來回移動。 在這裡深入瞭解 azcopy

下一個筆記本數據格會建立數據資產。 程式代碼範例會將原始數據檔上傳至指定的雲端記憶體資源。

每次建立數據資產時,都需要它的唯一版本。 如果版本已經存在,您會收到錯誤。 在此程式代碼中,我們會使用「初始」來讀取數據。 如果該版本已經存在,我們會略過再次建立它。

您也可以省略 版本 參數,並從 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}")

您可以選取 左側的 [數據 ],以查看上傳的數據。 您會看到資料已上傳,並建立資料資產:

Screenshot shows the data in studio.

此數據命名為信用卡,並在 [數據資產] 索引標籤中,我們可以在 [名稱] 資料行中看到它。 此數據上傳至工作區的預設數據存放區名為 workspaceblobstore,請參閱 數據源 數據行。

Azure 機器學習 資料存放區是 Azure 上現有記憶體帳戶的參考。 資料存放區提供下列優點:

  1. 常見且易於使用的 API,可與不同的記憶體類型互動(Blob/Files/Azure Data Lake 儲存體)和驗證方法。
  2. 在小組工作時,探索有用的數據存放區更簡單的方式。
  3. 在您的腳本中,隱藏認證型數據存取聯機資訊的方法(服務主體/SAS/金鑰)。

存取筆記本中的數據

Pandas 直接支援 URI - 此範例示範如何從 Azure 機器學習 數據存放區讀取 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 命令中的所有子字串>值。

您想要為經常存取的數據建立數據資產。 以下是在 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))

清除資源

如果您打算立即繼續進行其他教學課程,請跳至 後續步驟

停止計算實例

如果您現在不會使用它,請停止計算實例:

  1. 在 Studio 的左側導覽區域中,選取 [ 計算]。
  2. 在頂端索引標籤中,選取 [ 計算實例]
  3. 選取清單中的計算實例。
  4. 在頂端工具列上,選取 [ 停止]。

刪除所有資源

重要

您所建立的資源可用來作為其他 Azure Machine Learning 教學課程和操作說明文章的先決條件。

如果不打算使用您建立的任何資源,請刪除以免產生任何費用:

  1. 在 Azure 入口網站中,選取最左邊的 [資源群組]

  2. 從清單中,選取您所建立的資源群組。

  3. 選取 [刪除資源群組]

    Screenshot of the selections to delete a resource group in the Azure portal.

  4. 輸入資源群組名稱。 接著選取刪除

下一步

如需數據資產的詳細資訊,請參閱建立數據資產。

若要深入了解數據存放區,請參閱建立數據存放區。

繼續進行教學課程,以瞭解如何開發定型腳本。