Een gegevensasset maken
Als data scientist wilt u zich richten op het trainen van machine learning-modellen. Hoewel u toegang tot gegevens nodig hebt als invoer voor een machine learning-model, wilt u zich geen zorgen maken over hoe u toegang krijgt. Om het verkrijgen van toegang tot de gegevens waarmee u wilt werken, te vereenvoudigen, kunt u gegevensassets gebruiken.
Inzicht in gegevensassets
In Azure Machine Learning zijn gegevensassets verwijzingen naar de locatie waar de gegevens worden opgeslagen, hoe u toegang krijgt en eventuele andere relevante metagegevens. U kunt gegevensassets maken om toegang te krijgen tot gegevens in gegevensarchieven, Azure-opslagservices, openbare URL's of gegevens die zijn opgeslagen op uw lokale apparaat.
De voordelen van het gebruik van gegevensassets zijn:
- U kunt gegevens delen en opnieuw gebruiken met andere leden van het team, zodat ze geen bestandslocaties hoeven te onthouden.
- U kunt naadloos toegang krijgen tot gegevens tijdens modeltraining (op elk ondersteund rekentype) zonder dat u zich zorgen hoeft te maken over verbindingsreeks s of gegevenspaden.
- U kunt de metagegevens van de gegevensasset versien .
Er zijn drie hoofdtypen van gegevensassets die u kunt gebruiken:
- URI-bestand: verwijst naar een specifiek bestand.
- URI-map: Verwijst naar een map.
- MLTable: verwijst naar een map of bestand en bevat een schema dat moet worden gelezen als tabelgegevens.
Notitie
URI staat voor Uniform Resource Identifier en staat voor een opslaglocatie op uw lokale computer, Azure Blob of Data Lake Storage, openbaar beschikbare https-locatie of zelfs een gekoppeld gegevensarchief.
Wanneer gegevensassets gebruiken
Gegevensassets zijn het handigst bij het uitvoeren van machine learning-taken als Azure Machine Learning-taken. Als taak kunt u een Python-script uitvoeren dat invoer gebruikt en uitvoer genereert. Een gegevensasset kan worden geparseerd als invoer of uitvoer van een Azure Machine Learning-taak.
Laten we eens kijken naar elk van de typen gegevensassets, hoe u deze maakt en hoe u de gegevensasset in een taak gebruikt.
Een URI-bestandsgegevensasset maken
Een gegevensasset van een URI-bestand verwijst naar een specifiek bestand. Azure Machine Learning slaat alleen het pad naar het bestand op, wat betekent dat u naar elk type bestand kunt verwijzen. Wanneer u de gegevensasset gebruikt, geeft u op hoe u de gegevens wilt lezen, wat afhankelijk is van het type gegevens waarmee u verbinding maakt.
De ondersteunde paden die u kunt gebruiken bij het maken van een gegevensasset voor een URI-bestand zijn:
- Lokaal:
./<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>
- Gegevensarchief:
azureml://datastores/<datastore_name>/paths/<folder>/<file>
Belangrijk
Wanneer u een gegevensasset maakt en verwijst naar een bestand of map die is opgeslagen op uw lokale apparaat, wordt een kopie van het bestand of de map geĆ¼pload naar het standaardgegevensarchief workspaceblobstore
. U vindt het bestand of de map in de LocalUpload
map. Door een kopie te uploaden, hebt u nog steeds toegang tot de gegevens uit de Azure Machine Learning-werkruimte, zelfs wanneer het lokale apparaat waarop de gegevens zijn opgeslagen niet beschikbaar is.
Als u een gegevensasset voor een URI-bestand wilt maken, kunt u de volgende code gebruiken:
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)
Wanneer u de gegevensasset van het URI-bestand parseert als invoer in een Azure Machine Learning-taak, moet u eerst de gegevens lezen voordat u ermee kunt werken.
Stel dat u een Python-script maakt dat u wilt uitvoeren als een taak en u de waarde van de invoerparameter input_data
instelt op de gegevensasset van het URI-bestand (die verwijst naar een CSV-bestand). U kunt de gegevens lezen door de volgende code op te slaan in uw Python-script:
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))
Als uw URI-bestandsgegevensasset verwijst naar een ander type bestand, moet u de juiste Python-code gebruiken om de gegevens te lezen. Als u bijvoorbeeld in plaats van CSV-bestanden werkt met JSON-bestanden, gebruikt pd.read_json()
u in plaats daarvan.
Een URI-mapgegevensasset maken
Een URI-mapgegevensasset wijst naar een specifieke map. Het werkt vergelijkbaar met een gegevensasset van een URI-bestand en ondersteunt dezelfde paden.
Als u een URI-mapgegevensasset wilt maken met de Python SDK, kunt u de volgende code gebruiken:
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)
Wanneer u de gegevensasset van de URI-map parseert als invoer in een Azure Machine Learning-taak, moet u eerst de gegevens lezen voordat u ermee kunt werken.
Stel dat u een Python-script maakt dat u wilt uitvoeren als een taak en u de waarde van de invoerparameter input_data
instelt op de gegevensasset van de URI-map (die verwijst naar meerdere CSV-bestanden). U kunt alle CSV-bestanden in de map lezen en samenvoegen, wat u kunt doen door de volgende code op te nemen in uw Python-script:
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)
Afhankelijk van het type gegevens waarmee u werkt, kan de code die u gebruikt om de bestanden te lezen, wijzigen.
Een MLTable-gegevensasset maken
Met een MLTable-gegevensasset kunt u verwijzen naar tabellaire gegevens. Wanneer u een MLTable-gegevensasset maakt, geeft u de schemadefinitie op om de gegevens te lezen. Omdat het schema al is gedefinieerd en opgeslagen met de gegevensasset, hoeft u niet op te geven hoe u de gegevens moet lezen wanneer u het gebruikt.
Daarom wilt u een MLTable-gegevensasset gebruiken wanneer het schema van uw gegevens complex is of regelmatig wordt gewijzigd. In plaats van te wijzigen hoe u de gegevens kunt lezen in elk script dat gebruikmaakt van de gegevens, hoeft u deze alleen te wijzigen in de gegevensasset zelf.
Wanneer u het schema definieert bij het maken van een MLTable-gegevensasset, kunt u er ook voor kiezen om alleen een subset van de gegevens op te geven.
Voor bepaalde functies in Azure Machine Learning, zoals Geautomatiseerde machine learning, moet u een MLTable-gegevensasset gebruiken, omdat Azure Machine Learning moet weten hoe de gegevens moeten worden gelezen.
Als u het schema wilt definiƫren, kunt u een MLTable-bestand opnemen in dezelfde map als de gegevens die u wilt lezen. Het MLTable-bestand bevat het pad dat verwijst naar de gegevens die u wilt lezen en hoe u de gegevens leest:
type: mltable
paths:
- pattern: ./*.txt
transformations:
- read_delimited:
delimiter: ','
encoding: ascii
header: all_files_same_headers
Tip
Meer informatie over het maken van het MLTable-bestand en welke transformaties u kunt opnemen.
Als u een MLTable-gegevensasset wilt maken met de Python SDK, kunt u de volgende code gebruiken:
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)
Wanneer u een MLTable-gegevensasset parseert als invoer voor een Python-script dat u wilt uitvoeren als een Azure Machine Learning-taak, kunt u de volgende code opnemen om de gegevens te lezen:
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))
Een veelvoorkomende benadering is het converteren van de tabelgegevens naar een Pandas-gegevensframe. U kunt de gegevens echter ook converteren naar een Spark-gegevensframe als dat beter past bij uw workload.