チュートリアル: Azure Machine Learning でデータをアップロードし、データにアクセスし、データを探索する

適用対象: Python SDK azure-ai-ml v2 (現行)

このチュートリアルで学習する内容は次のとおりです。

  • クラウド ストレージにデータをアップロードする
  • Azure Machine Learning データ資産を作成する
  • 対話型開発のためにノートブック内のデータにアクセスする
  • データ資産の新しいバージョンを作成する

通常、機械学習プロジェクトの開始には、探索的データ分析 (EDA)、データ前処理 (クリーニング、特徴エンジニアリング)、仮説を検証するための機械学習モデルのプロトタイプの構築が含まれます。 この "プロトタイプ作成" のプロジェクト フェーズは高度に対話的です。 "Python 対話型コンソール" を使用し、IDE または Jupyter ノートブックでの開発に適しています。 このチュートリアルでは、これらのアイデアについて説明します。

この動画では、Azure Machine Learning スタジオでチュートリアルの手順を実行できるように準備する方法について説明します。 この動画では、ノートブックの作成、ノートブックの複製、コンピューティング インスタンスの作成、チュートリアルに必要なデータのダウンロード方法を示します。 それらの手順については、以下のセクションでも説明します。

前提条件

  1. Azure Machine Learning を使用するには、まずワークスペースが必要です。 まだない場合は、作業を開始するために必要なリソースの作成を完了し、ワークスペースを作成してその使用方法の詳細を確認してください。

  2. スタジオにサインインして、ワークスペースを選択します (まだ開いていない場合)。

  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 Data Explorer ではこちらの形式の生データが処理されします。 このチュートリアルでは、この CSV 形式のクレジット カード クライアント データ サンプルを使用します。 Azure Machine Learning リソースで手順を進めていることがわかります。 そのリソース内で、このノートブックが配置されているフォルダーのすぐ下に、推奨されるデータの名前が付いたローカル フォルダーを作成します。

注意

このチュートリアルは、Azure Machine Learning リソース フォルダーの場所に配置されたデータに依存します。 このチュートリアルでは、"local" とは、その Azure Machine Learning リソース内のフォルダーの場所を意味します。

  1. こちらの図に示すように、3 つのドットの下にある [ターミナルを開く] を選択します。

    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 Machine Learning リポジトリを参照してください。

ワークスペースへのハンドルを作成する

コードについて詳しく説明する前に、ワークスペースを参照する方法が必要です。 ワークスペースへのハンドル用に ml_client を作成します。 次に、ml_client を使用してリソースとジョブを管理します。

次のセルに、サブスクリプション ID、リソース グループ名、ワークスペース名を入力します。 これらの値を見つけるには:

  1. 右上隅の Azure Machine Learning スタジオ ツール バーで、ワークスペース名を選びます。
  2. ワークスペース、リソース グループ、サブスクリプション ID の値をコードにコピーします。
  3. 1 つの値をコピーし、領域を閉じて貼り付けてから、戻って次のものを処理する必要があります。
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 では、クラウド内のストレージの場所を指す Uniform Resource Identifier (URI) を使用します。 URI を使用すると、ノートブックやジョブのデータに簡単にアクセスできます。 データ URI 形式は、Web ブラウザーで 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 Machine Learning データ資産は、Web ブラウザーのブックマーク (お気に入り) に似ています。 最も頻繁に使用されるデータを指す長いストレージ パス (URI) を覚える代わりに、データ資産を作成し、フレンドリ名を使ってその資産にアクセスできます。

データ資産を作成すると、データ ソースの場所への ''参照'' とそのメタデータのコピーも作成されます。 データは既存の場所に残るため、追加のストレージ コストは発生せず、データ ソースの整合性が損なわれることはありません。 データ資産は、Azure Machine Learning データストア、Azure Storage、パブリック URL、ローカル ファイルから作成できます。

ヒント

サイズの小さいデータのアップロードの場合、ローカル コンピューター リソースからクラウド ストレージへのデータのアップロードには、Azure Machine Learning データ資産の作成が適しています。 この方法により、追加のツールやユーティリティが不要になります。 ただし、サイズの大きいデータのアップロードには、専用のツールまたはユーティリティ (AzCopy など) が必要になる場合があります。 AzCopy コマンドライン ツールを使用して、Azure Storage との間でデータを移動します。 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}")

左側の [データ] を選択すると、アップロードされたデータを確認できます。 データがアップロードされ、データ資産が作成されたことがわかります。

Screenshot shows the data in studio.

このデータは credit-card という名前で、[データ資産] タブの [名前] 列に表示されます。 このデータは、ワークスペースの workspaceblobstore という名前の既定のデータストアにアップロードされます。これは、[データ ソース] 列に表示されます。

Azure Machine Learning データストアは、Azure 上の "既存の" ストレージ アカウントへの "参照" です。 データストアには、これらのベネフィットがあります。

  1. さまざまなストレージの種類 (Blob、Files、Azure Data Lake Storage) および認証方法と対話するための一般的で使いやすい API。
  2. チームで作業するときに便利なデータストアを見つけるためのより簡単な方法。
  3. スクリプト内で、資格情報ベースのデータ アクセス (サービス プリンシパル、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 コマンドのすべての <部分文字列> の値をリソースの実際の値に手動で置き換える必要があります。

頻繁にアクセスされるデータのデータ資産を作成する必要があります。 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 クラウド ストレージからデータにアクセスする」を参照してください。

データ資産の新しいバージョンを作成する

お気付きかもしれませんが、機械学習モデルのトレーニングに合わせて、データには少し軽いクリーニングが必要です。 次の特徴があります。

  • 2 つのヘッダー
  • クライアント ID 列。Machine Learning ではこの機能を使用しません
  • 応答変数名のスペース

また、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 説明 特定のクレジットの金額 (NT ドル): 個々の消費者のクレジットとその家族 (補足) クレジットの両方が含まれます。
X2 説明 性別 (1 = 男性、2 = 女性)。
X3 説明 学歴 (1 = 大学院、2 = 大学、3 = 高校、4 = その他)。
X4 説明 配偶者の有無 (1 = 既婚、2 = 独身、3 = その他)。
X5 説明 年齢 (歳)。
X6-X11 説明 過去の支払い履歴。 過去の毎月の支払い記録を追跡しました (2005 年 4 月から 9 月)。 -1 = 正常な支払い、1 = 1 か月の支払遅延、2 = 2 か月の支払遅延、. . .、8 = 8 か月の支払遅延、9 = 9 か月以上の支払遅延。
X12-17 説明 2005 年 4 月から 9 月までの請求明細書の金額 (NT ドル)。
X18-23 説明 2005 年 4 月から 9 月までの以前の支払額 (NT ドル)。
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. スタジオの左側のナビゲーション領域で、[コンピューティング] を選択します。
  2. 上部のタブで、 [コンピューティング インスタンス] を選択します
  3. 一覧からコンピューティング インスタンスを選択します。
  4. 上部のツールバーで、 [停止] を選択します。

すべてのリソースの削除

重要

作成したリソースは、Azure Machine Learning に関連したその他のチュートリアルおよびハウツー記事の前提条件として使用できます。

作成したどのリソースも今後使用する予定がない場合は、課金が発生しないように削除します。

  1. Azure Portal で、左端にある [リソース グループ] を選択します。

  2. 一覧から、作成したリソース グループを選択します。

  3. [リソース グループの削除] を選択します。

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

  4. リソース グループ名を入力します。 次に、 [削除] を選択します。

次のステップ

データ資産の詳細については、「データ資産を作成する」を参照してください。

データストアの詳細については、「データストアの作成」を参照してください。

チュートリアルに進み、トレーニング スクリプトを開発する方法を学習してください。