Tworzenie zasobu danych

Ukończone

Jako analityk danych chcesz skupić się na trenowaniu modeli uczenia maszynowego. Chociaż potrzebujesz dostępu do danych jako danych wejściowych dla modelu uczenia maszynowego, nie chcesz martwić się o to, jak uzyskać dostęp. Aby uprościć uzyskiwanie dostępu do danych, z których chcesz pracować, możesz użyć zasobów danych.

Informacje o zasobach danych

W usłudze Azure Machine Learning zasoby danych są odwołaniami do miejsca przechowywania danych, sposobu uzyskiwania dostępu i innych odpowiednich metadanych. Zasoby danych można tworzyć, aby uzyskać dostęp do danych w magazynach danych, usługach usługi Azure Storage, publicznych adresach URL lub danych przechowywanych na urządzeniu lokalnym.

Korzyści wynikające z używania zasobów danych to:

  • Możesz udostępniać i ponownie używać danych innym członkom zespołu, tak aby nie musieli pamiętać lokalizacji plików.
  • Możesz bezproblemowo uzyskiwać dostęp do danych podczas trenowania modelu (w dowolnym obsługiwanym typie obliczeniowym) bez obaw o parametry połączenia lub ścieżki danych.
  • Metadane zasobu danych można wersję .

Istnieją trzy główne typy zasobów danych, których można użyć:

Diagram różnych typów zasobów danych w usłudze Azure Machine Learning.

  • Plik identyfikatora URI: wskazuje określony plik.
  • Folder identyfikatora URI: wskazuje folder.
  • MLTable: wskazuje folder lub plik i zawiera schemat do odczytania jako dane tabelaryczne.

Uwaga

Identyfikator URI to ujednolicony identyfikator zasobu i oznacza lokalizację magazynu na komputerze lokalnym, w usłudze Azure Blob lub Data Lake Storage, publicznie dostępną lokalizację https, a nawet dołączony magazyn danych.

Kiedy należy używać zasobów danych

Zasoby danych są najbardziej przydatne podczas wykonywania zadań uczenia maszynowego jako zadań usługi Azure Machine Learning. Jako zadanie można uruchomić skrypt języka Python, który pobiera dane wejściowe i generuje dane wyjściowe. Zasób danych może być analizowany zarówno jako dane wejściowe, jak i wyjściowe zadania usługi Azure Machine Learning.

Przyjrzyjmy się poszczególnym typom zasobów danych, sposobom ich tworzenia i sposobom używania zasobu danych w zadaniu.

Tworzenie zasobu danych pliku URI

Zasób danych pliku URI wskazuje określony plik. Usługa Azure Machine Learning przechowuje tylko ścieżkę do pliku, co oznacza, że można wskazać dowolny typ pliku. W przypadku korzystania z zasobu danych należy określić sposób odczytywania danych, które zależą od typu danych, z którymi nawiązujesz połączenie.

Obsługiwane ścieżki, których można użyć podczas tworzenia zasobu danych pliku URI:

  • Lokalny: ./<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>
  • Magazyn danych: azureml://datastores/<datastore_name>/paths/<folder>/<file>

Ważne

Podczas tworzenia zasobu danych i wskazywania pliku lub folderu przechowywanego na urządzeniu lokalnym kopia pliku lub folderu zostanie przekazana do domyślnego magazynu workspaceblobstoredanych. Plik lub folder można znaleźć w folderze LocalUpload . Przekazując kopię, nadal będziesz mieć dostęp do danych z obszaru roboczego usługi Azure Machine Learning, nawet jeśli urządzenie lokalne, na którym są przechowywane dane, jest niedostępne.

Aby utworzyć zasób danych pliku URI, możesz użyć następującego kodu:

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)

Podczas analizowania zasobu danych pliku URI jako danych wejściowych w zadaniu usługi Azure Machine Learning należy najpierw odczytać dane, zanim będzie można z nim pracować.

Wyobraź sobie, że tworzysz skrypt języka Python, który chcesz uruchomić jako zadanie, a wartość parametru input_data wejściowego ma być zasobem danych pliku URI (który wskazuje plik CSV). Dane można odczytać, dołączając następujący kod w skry skryscie języka 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))

Jeśli zasób danych pliku URI wskazuje inny typ pliku, musisz użyć odpowiedniego kodu języka Python do odczytania danych. Jeśli na przykład zamiast plików CSV pracujesz z plikami JSON, zamiast tego będziesz używać pd.read_json() .

Tworzenie zasobu danych folderu URI

Zasób danych folderu URI wskazuje określony folder. Działa on podobnie do zasobu danych pliku URI i obsługuje te same ścieżki.

Aby utworzyć zasób danych folderu URI za pomocą zestawu SDK języka Python, możesz użyć następującego kodu:

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)

Podczas analizowania zasobu danych folderu URI jako danych wejściowych w zadaniu usługi Azure Machine Learning należy najpierw odczytać dane, zanim będzie można z nim pracować.

Wyobraź sobie, że tworzysz skrypt języka Python, który chcesz uruchomić jako zadanie, i ustawisz wartość parametru input_data wejściowego jako element zawartości danych folderu identyfikatora URI (który wskazuje na wiele plików CSV). Możesz odczytać wszystkie pliki CSV w folderze i połączyć je, co można zrobić, dołączając następujący kod w skry skryfcie języka 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)

W zależności od typu danych, z którymi pracujesz, kod używany do odczytywania plików może ulec zmianie.

Tworzenie zasobu danych w formie tabeli MLTable

Zasób danych MLTable umożliwia wskazywanie danych tabelarycznych. Podczas tworzenia zasobu danych MLTable należy określić definicję schematu, aby odczytać dane. Ponieważ schemat jest już zdefiniowany i przechowywany w zasobie danych, nie musisz określać sposobu odczytywania danych podczas ich używania.

W związku z tym chcesz użyć zasobu danych MLTable, gdy schemat danych jest złożony lub często zmienia się. Zamiast zmieniać sposób odczytywania danych w każdym skry skryscie korzystającym z danych, trzeba je zmienić tylko w samym zasobie danych.

Podczas definiowania schematu podczas tworzenia zasobu danych w formie tabeli MLTable można również wybrać tylko podzbiór danych.

W przypadku niektórych funkcji w usłudze Azure Machine Learning, takich jak zautomatyzowane uczenie maszynowe, musisz użyć zasobu danych MLTable, ponieważ usługa Azure Machine Learning musi wiedzieć, jak odczytywać dane.

Aby zdefiniować schemat, możesz dołączyć plik MLTable w tym samym folderze co dane, które chcesz odczytać. Plik MLTable zawiera ścieżkę wskazującą dane, które chcesz odczytać, oraz sposób odczytywania danych:

type: mltable

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

Aby utworzyć zasób danych MLTable przy użyciu zestawu SDK języka Python, możesz użyć następującego kodu:

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)

Podczas analizowania zasobu danych MLTable jako danych wejściowych do skryptu języka Python, który chcesz uruchomić jako zadanie usługi Azure Machine Learning, możesz dołączyć następujący kod, aby odczytać dane:

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))

Typowym podejściem jest przekonwertowanie danych tabelarycznych na ramkę danych biblioteki Pandas. Można jednak również przekonwertować dane na ramkę danych platformy Spark, jeśli odpowiada to twojemu obciążeniu lepiej.