データ資産を作成する

完了

あなたはデータ科学者であり、機械学習モデルのトレーニングに集中したいと考えています。 機械学習モデルの入力としてデータにアクセスする必要がありますが、アクセスする "方法" について悩みたくはありません。 使うデータに簡単にアクセスするには、データ資産を使います。

データ資産の概要

Azure Machine Learning におけるデータ資産とは、データの格納場所、アクセス方法、その他の関連するメタデータの参照のことです。 データ資産を作成すると、データストア、Azure Storage サービス、パブリック URL、またはローカル デバイス上の格納データにアクセスできるようになります。

データ資産を使う利点は次のとおりです。

  • ファイルの場所を記憶する必要がないように、チームの他のメンバーとデータを共有および再利用できます。
  • 接続文字列やデータ パスを気にすることなく、モデルのトレーニング中に (サポートされているコンピューティングの種類で) データ にシームレスにアクセス できます。
  • データ資産のメタデータをバージョン管理することができます。

使用できるデータ資産の種類は主に 3 つです。

Diagram of different types of data assets in Azure Machine Learning.

  • URI ファイル: 特定のファイルを指します。
  • URI フォルダー: フォルダーを指します。
  • MLTable: フォルダーまたはファイルを指します。表形式データとして読み取るスキーマを含みます。

Note

URIUniform Resource Identifier の略であり、ローカル コンピューター、Azure Blob、または Data Lake Storage 上の保存場所、公開されている https の場所、またはアタッチされているデータストアを表します。

データ資産を使うタイミング

データ資産が最も役に立つのは、Azure Machine Learning ジョブとして機械学習タスクを実行するときです。 入力を受け取り、出力を生成する Python スクリプトを、1 つのジョブとして実行できます。 データ資産は、Azure Machine Learning ジョブの入力または出力の両方として解析できます。

それでは、データ資産の種類と作成方法、ジョブでのデータ資産の使い方をそれぞれ確認しましょう。

URI ファイルのデータ資産を作成する

URI ファイルのデータ資産は、特定のファイルを指します。 Azure Machine Learning にはファイルへのパスのみが格納されます。つまり、任意の種類のファイルを指すことができます。 データ資産を使うときはデータの読み取り方法を指定し、これは接続先のデータの種類によって異なります。

サポートされるパスのうち、URI ファイルのデータ資産を作成するときに使用できるものを次に示します。

  • ローカル: ./<path>
  • Azure Blob Storage: wasbs://<account_name>.blob.core.windows.net/<container_name>/<folder>/<file>
  • Azure Data Lake Storage (Gen 2): abfss://<file_system>@<account_name>.dfs.core.windows.net/<folder>/<file>
  • データストア: azureml://datastores/<datastore_name>/paths/<folder>/<file>

重要

データ資産を作成し、ローカル デバイスに格納されているファイルまたはフォルダーを指すと、そのファイルまたはフォルダーのコピーが既定のデータストア workspaceblobstore にアップロードされます。 これらのファイルまたはフォルダーは LocalUpload フォルダー内にあります。 コピーをアップロードしておくと、データが格納されているローカル デバイスが使用できない場合でも、Azure Machine Learning ワークスペースからデータにアクセスできます。

URI ファイルのデータ資産を作成するには、次のコードを使います。

from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

my_path = '<supported-path>'

my_data = Data(
    path=my_path,
    type=AssetTypes.URI_FILE,
    description="<description>",
    name="<name>",
    version="<version>"
)

ml_client.data.create_or_update(my_data)

Azure Machine Learning ジョブで入力として URI ファイルのデータ資産を解析するときは、データを使う前に読み取る必要があります。

たとえば、1 つのジョブとして実行する Python スクリプトを作成し、入力パラメーター input_data の値を URI ファイルのデータ資産 (CSV ファイルを指します) に設定したとします。 このデータを読み取るには、Python スクリプトに以下のコードを含めます。

import argparse
import pandas as pd

parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()

df = pd.read_csv(args.input_data)
print(df.head(10))

URI ファイルのデータ資産が別のファイルの種類を指している場合、適切な Python コードを使ってデータを読み取る必要があります。 たとえば、CSV ファイルではなく JSON ファイルを使う場合は、代わりに pd.read_json() を使います。

URI フォルダーのデータ資産を作成する

URI フォルダーのデータ資産は、特定のフォルダーを指します。 これは URI ファイルのデータ資産と同様に機能し、同じパスをサポートします。

Python SDK を使って URI フォルダーのデータ資産を作成するには、次のコードを使います。

from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

my_path = '<supported-path>'

my_data = Data(
    path=my_path,
    type=AssetTypes.URI_FOLDER,
    description="<description>",
    name="<name>",
    version='<version>'
)

ml_client.data.create_or_update(my_data)

Azure Machine Learning ジョブで入力として URI フォルダーのデータ資産を解析するときは、データを使う前に読み取る必要があります。

たとえば、1 つのジョブとして実行する Python スクリプトを作成し、入力パラメーター input_data の値を URI フォルダーのデータ資産 (複数の CSV ファイルを指します) に設定したとします。 フォルダー内のすべての CSV ファイルを読み取っで連結できます。これを行うには、Python スクリプトに次のコードを含めます。

import argparse
import glob
import pandas as pd

parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()

data_path = args.input_data
all_files = glob.glob(data_path + "/*.csv")
df = pd.concat((pd.read_csv(f) for f in all_files), sort=False)

使うデータの種類によっては、ファイルの読み取りに使うコードが変わる可能性があります。

MLTable データ資産を作成する

MLTable データ資産を使うと、表形式のデータを指すことができます。 MLTable データ資産を作成するときは、データを読み取るためのスキーマ定義を指定します。 スキーマは既に定義され、データ資産と共に格納されているため、データを使うときに読み取り方法を指定する必要はありません。

そのため、データのスキーマが複雑な場合や頻繁に変更される場合は、MLTable データ資産を使うことをお勧めします。 データを使うスクリプトごとにデータの読み取り方法を変更するのではなく、データ資産自体で変更するだけで済みます。

MLTable データ資産を作成するときにスキーマを定義する場合、データのサブセットのみを指定することもできます。

Azure Machine Learning の一部の機能 (自動機械学習など) では、Azure Machine Learning がデータの読み取り方法を認識している必要があるので、MLTable データ資産を使う必要があります。

読み取るデータと同じフォルダーに MLTable ファイルを置いて、スキーマを定義できます。 MLTable ファイルには、読み取るデータを指すパスと、データの読み取り方法が含まれています。

type: mltable

paths:
  - pattern: ./*.txt
transformations:
  - read_delimited:
      delimiter: ','
      encoding: ascii
      header: all_files_same_headers

ヒント

詳細については、MLTable ファイルの作成方法と、含めることができる変換に関する記事を参照してください。

Python SDK を使って MLTable データ資産を作成するには、次のコードを使います。

from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

my_path = '<path-including-mltable-file>'

my_data = Data(
    path=my_path,
    type=AssetTypes.MLTABLE,
    description="<description>",
    name="<name>",
    version='<version>'
)

ml_client.data.create_or_update(my_data)

Azure Machine Learning ジョブとして実行する Python スクリプトの入力として MLTable データ資産を解析する場合、次のようにデータを読み取るコードを含めることができます。

import argparse
import mltable
import pandas

parser = argparse.ArgumentParser()
parser.add_argument("--input_data", type=str)
args = parser.parse_args()

tbl = mltable.load(args.input_data)
df = tbl.to_pandas_dataframe()

print(df.head(10))

一般的なアプローチは、表形式のデータを Pandas データ フレームに変換することです。 ただし、ワークロードにより適している場合は、データを Spark データ フレームに変換することもできます。