Delen via


Azure Machine Learning-gegevenssets maken

VAN TOEPASSING OP:Python SDK azureml v1

In dit artikel leert u hoe u Azure Machine Learning-gegevenssets maakt voor toegang tot gegevens voor uw lokale of externe experimenten met de Azure Machine Learning Python SDK. Als u wilt weten waar gegevenssets passen in de algemene werkstroom voor gegevenstoegang van Azure Machine Learning, raadpleegt u het artikel Veilige toegang tot gegevens .

Als u een gegevensset maakt, maakt u ook een verwijzing naar de locatie van de gegevensbron, samen met een kopie van de bijbehorende metagegevens. Omdat de gegevens op de bestaande locatie blijven, worden er geen extra opslagkosten in rekening gebracht en wordt de integriteit van uw gegevensbronnen niet in gevaar gebracht. Gegevenssets worden ook lui geëvalueerd, wat de prestaties van de werkstroom bevordert. U kunt gegevenssets maken op basis van gegevensarchieven, openbare URL's en Azure Open Datasets.

Voor een ervaring met weinig code maakt u Azure Machine Learning-gegevenssets met de Azure Machine Learning-studio.

Met Azure Machine Learning-gegevenssets kunt u het volgende doen:

  • Bewaar één kopie van gegevens in uw opslag, waarnaar wordt verwezen door gegevenssets.

  • Naadloos toegang krijgen tot gegevens tijdens modeltraining zonder dat u zich zorgen hoeft te maken over verbindingsreeksen of gegevenspaden. Meer informatie over het trainen met gegevenssets.

  • Gegevens delen en samenwerken met andere gebruikers.

Belangrijk

Items in dit artikel die zijn gemarkeerd als 'preview' zijn momenteel in openbare preview. De preview-versie wordt aangeboden zonder Service Level Agreement en wordt niet aanbevolen voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Supplemental Terms of Use for Microsoft Azure Previews (Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews) voor meer informatie.

Vereisten

Als u gegevenssets wilt maken en ermee wilt werken, hebt u het volgende nodig:

Notitie

Sommige gegevenssetklassen hebben afhankelijkheden van het pakket azureml-dataprep , dat alleen compatibel is met 64-bits Python. Als u op Linux ontwikkelt, zijn deze klassen afhankelijk van .NET Core 2.1 en worden ze alleen ondersteund voor specifieke distributies. Zie de kolom .NET Core 2.1 in het artikel .NET installeren op Linux voor meer informatie over de ondersteunde distributies.

Belangrijk

Hoewel het pakket mogelijk werkt in oudere versies van Linux-distributies, raden we u af om een distributie te gebruiken die buiten de basisondersteuning valt. Distributies die buiten de basisondersteuning vallen, kunnen beveiligingsproblemen hebben, omdat ze niet de meest recente updates ontvangen. We raden u aan de nieuwste ondersteunde versie van uw distributie te gebruiken die compatibel is met .

Richtlijnen voor rekengrootte

Wanneer u een gegevensset maakt, controleert u de rekenkracht en de grootte van uw gegevens in het geheugen. De grootte van uw gegevens in opslag is niet dezelfde als de grootte van gegevens in een dataframe. Gegevens in CSV-bestanden kunnen bijvoorbeeld maximaal 10x worden uitgebreid in een dataframe, zodat een CSV-bestand van 1 GB 10 GB kan worden in een dataframe.

Als uw gegevens zijn gecomprimeerd, kan deze verder worden uitgebreid; 20 GB aan relatief beperkte gegevens die zijn opgeslagen in gecomprimeerde Parquet-indeling kan worden uitgebreid tot ~800 GB in het geheugen. Aangezien Parquet-bestanden gegevens opslaan in een kolomindeling, hoeft u, als u slechts de helft van de kolommen nodig hebt, slechts ~400 GB in het geheugen te laden.

Meer informatie over het optimaliseren van gegevensverwerking in Azure Machine Learning.

Typen gegevenssets

Er zijn twee typen gegevenssets, op basis van hoe gebruikers deze tijdens de training gebruiken; FileDatasets en TabularDatasets. Beide typen kunnen worden gebruikt in Azure Machine Learning-trainingswerkstromen met estimators, AutoML, hyperDrive en pijplijnen.

FileDataset

Een FileDataset verwijst naar een of meer bestanden in uw gegevensarchieven of openbare URL's. Als uw gegevens al zijn opgeschoond en klaar zijn voor gebruik in trainingsexperimenten, kunt u de bestanden als een FileDataset-object downloaden of aan uw berekening koppelen.

We raden FileDatasets aan voor uw machine learning-werkstromen, omdat de bronbestanden elke indeling kunnen hebben, waardoor een breder scala aan machine learning-scenario's, waaronder deep learning, mogelijk is.

Maak een FileDataset met de Python SDK of de Azure Machine Learning-studio .

TabularDataset

Een TabularDataset vertegenwoordigt gegevens in een tabellaire indeling door het opgegeven bestand of de lijst met bestanden te parseren. Dit biedt u de mogelijkheid om de gegevens te materialiseren in een pandas- of Spark-dataframe, zodat u kunt werken met vertrouwde bibliotheken voor het voorbereiden en trainen van gegevens zonder dat u uw notebook hoeft te verlaten. U kunt een TabularDataset object maken van .csv-, .tsv-, .parquet-, .jsonl-bestanden en van SQL-queryresultaten.

Met TabularDatasets kunt u een tijdstempel opgeven uit een kolom in de gegevens of van waaruit de padpatroongegevens zijn opgeslagen om een tijdreekseigenschap in te schakelen. Met deze specificatie kunt u eenvoudig en efficiënt filteren op tijd. Zie Api-demo in tabelvorm met betrekking tot tijdreeksen met NOAA-weergegevens voor een voorbeeld.

Maak een TabularDataset met de Python SDK of Azure Machine Learning-studio.

Notitie

Geautomatiseerde ML-werkstromen die zijn gegenereerd via de Azure Machine Learning-studio ondersteunen momenteel alleen TabularDatasets.

Notitie

Voor TabularDatasets die worden gegenereerd op basis van SQL-queryresultaten, wordt T-SQL (bijvoorbeeld 'WITH'-subquery) of dubbele kolomnaam niet ondersteund. Complexe query's zoals T-SQL kunnen prestatieproblemen veroorzaken. Dubbele kolomnamen in een gegevensset kunnen dubbelzinnigheidsproblemen veroorzaken.

Toegang tot gegevenssets in een virtueel netwerk

Als uw werkruimte zich in een virtueel netwerk bevindt, moet u de gegevensset configureren om validatie over te slaan. Zie Een werkruimte en bijbehorende resources beveiligen voor meer informatie over het gebruik van gegevensarchieven en gegevenssets in een virtueel netwerk.

Gegevenssets maken van gegevensarchieven

De gegevens zijn alleen toegankelijk voor Azure Machine Learning als gegevenssets worden gemaakt op basis van paden in Azure Machine Learning-gegevensarchieven of web-URL's.

Tip

U kunt gegevenssets rechtstreeks maken vanuit opslag-URL's met gegevenstoegang op basis van identiteit. Zie Verbinding maken met opslag met gegevenstoegang op basis van identiteit voor meer informatie.

Gegevenssets maken vanuit een gegevensarchief met de Python SDK:

  1. Controleer of owner u toegang hebt contributor tot of toegang hebt tot de onderliggende opslagservice van uw geregistreerde Azure Machine Learning-gegevensarchief. Controleer de machtigingen van uw opslagaccount in de Azure Portal.

  2. Maak de gegevensset door te verwijzen naar paden in het gegevensarchief. U kunt een gegevensset maken op basis van meerdere paden in meerdere gegevensarchieven. Er is geen vaste limiet voor het aantal bestanden of de gegevensgrootte waaruit u een gegevensset kunt maken.

Notitie

Voor elk gegevenspad worden enkele aanvragen verzonden naar de opslagservice om te controleren of deze naar een bestand of een map verwijst. Deze overhead kan leiden tot verminderde prestaties of fouten. Een gegevensset die verwijst naar één map met 1000 bestanden, wordt beschouwd als verwijst naar één gegevenspad. Voor optimale prestaties raden we u aan een gegevensset te maken die verwijst naar minder dan 100 paden in gegevensarchieven.

Een FileDataset maken

Gebruik de from_files() methode voor de FileDatasetFactory klasse om bestanden in elke indeling te laden en een niet-geregistreerde FileDataset te maken.

Als uw opslag zich achter een virtueel netwerk of een firewall bevindt, stelt u de parameter validate=False in uw from_files() methode in. Hiermee wordt de eerste validatiestap omzeild en zorgt u ervoor dat u uw gegevensset kunt maken op basis van deze beveiligde bestanden. Meer informatie over het gebruik van gegevensarchieven en gegevenssets in een virtueel netwerk.

from azureml.core import Workspace, Datastore, Dataset

# create a FileDataset pointing to files in 'animals' folder and its subfolders recursively
datastore_paths = [(datastore, 'animals')]
animal_ds = Dataset.File.from_files(path=datastore_paths)

# create a FileDataset from image and label files behind public web urls
web_paths = ['https://azureopendatastorage.blob.core.windows.net/mnist/train-images-idx3-ubyte.gz',
             'https://azureopendatastorage.blob.core.windows.net/mnist/train-labels-idx1-ubyte.gz']
mnist_ds = Dataset.File.from_files(path=web_paths)

Als u alle bestanden uit een lokale map wilt uploaden, maakt u een FileDataset in één methode met upload_directory(). Met deze methode worden gegevens geüpload naar uw onderliggende opslag, waardoor er opslagkosten in rekening worden gebracht.

from azureml.core import Workspace, Datastore, Dataset
from azureml.data.datapath import DataPath

ws = Workspace.from_config()
datastore = Datastore.get(ws, '<name of your datastore>')
ds = Dataset.File.upload_directory(src_dir='<path to you data>',
           target=DataPath(datastore,  '<path on the datastore>'),
           show_progress=True)

Als u gegevenssets opnieuw wilt gebruiken en delen in een experiment in uw werkruimte, registreert u de gegevensset.

Een TabularDataset maken

Gebruik de from_delimited_files() methode voor de TabularDatasetFactory klasse om bestanden in .csv- of .tsv-indeling te lezen en om een niet-geregistreerde TabularDataset te maken. Als u bestanden wilt lezen in de PARQUET-indeling, gebruikt u de from_parquet_files() methode . Als u uit meerdere bestanden leest, worden de resultaten samengevoegd in één tabelweergave.

Zie de naslagdocumentatie voor TabularDatasetFactory voor informatie over ondersteunde bestandsindelingen, evenals syntaxis- en ontwerppatronen zoals ondersteuning voor meerdere regels.

Als uw opslag zich achter een virtueel netwerk of een firewall bevindt, stelt u de parameter validate=False in uw from_delimited_files() methode in. Hiermee wordt de eerste validatiestap omzeild en zorgt u ervoor dat u uw gegevensset kunt maken op basis van deze beveiligde bestanden. Meer informatie over het gebruik van gegevensarchieven en gegevenssets in een virtueel netwerk.

Met de volgende code worden de bestaande werkruimte en het gewenste gegevensarchief op naam opgehaald. En geeft vervolgens het gegevensarchief en de bestandslocaties door aan de path parameter om een nieuwe TabularDataset te maken, weather_ds.

from azureml.core import Workspace, Datastore, Dataset

datastore_name = 'your datastore name'

# get existing workspace
workspace = Workspace.from_config()
    
# retrieve an existing datastore in the workspace by name
datastore = Datastore.get(workspace, datastore_name)

# create a TabularDataset from 3 file paths in datastore
datastore_paths = [(datastore, 'weather/2018/11.csv'),
                   (datastore, 'weather/2018/12.csv'),
                   (datastore, 'weather/2019/*.csv')]

weather_ds = Dataset.Tabular.from_delimited_files(path=datastore_paths)

Gegevensschema instellen

Wanneer u een TabularDataset maakt, worden kolomgegevenstypen standaard automatisch afgeleid. Als de afgeleide typen niet aan uw verwachtingen voldoen, kunt u het schema van uw gegevensset bijwerken door kolomtypen op te geven met de volgende code. De parameter infer_column_type is alleen van toepassing op gegevenssets die zijn gemaakt op basis van bestanden met scheidingstekens. Meer informatie over ondersteunde gegevenstypen.

from azureml.core import Dataset
from azureml.data.dataset_factory import DataType

# create a TabularDataset from a delimited file behind a public web url and convert column "Survived" to boolean
web_path ='https://dprepdata.blob.core.windows.net/demo/Titanic.csv'
titanic_ds = Dataset.Tabular.from_delimited_files(path=web_path, set_column_types={'Survived': DataType.to_bool()})

# preview the first 3 rows of titanic_ds
titanic_ds.take(3).to_pandas_dataframe()
(Index) PassengerId Overleefde Pclass Naam Sex Leeftijd SibSp Perkament Ticket Tarief Cabine Ingescheept
0 1 False 3 Braund, Mr Owen Harris man 22,0 1 0 A/5 21171 7.2500 S
1 2 Waar 1 Cumings, Mrs. John Bradley (Florence Briggs Th... vrouwelijk 38.0 1 0 PC 17599 71.2833 C85 C
2 3 Waar 3 Heikkinen, Miss. Laina vrouwelijk 26.0 0 0 STON/O2. 3101282 7.9250 S

Als u gegevenssets opnieuw wilt gebruiken en delen tussen experimenten in uw werkruimte, registreert u uw gegevensset.

Wrangle-gegevens

Nadat u de gegevensset hebt gemaakt en geregistreerd , kunt u deze in uw notebook laden voor gegevensverkenning en -verkenning voorafgaand aan de modeltraining.

Als u geen gegevensverkenning of -verkenning hoeft uit te voeren, raadpleegt u gegevenssets gebruiken in uw trainingsscripts voor het verzenden van ML-experimenten in Trainen met gegevenssets.

Gegevenssets filteren (preview)

De filtermogelijkheden zijn afhankelijk van het type gegevensset dat u hebt.

Belangrijk

Het filteren van gegevenssets met de preview-methode filter() is een experimentele preview-functie en kan op elk gewenst moment worden gewijzigd.

Voor TabularDatasets kunt u kolommen behouden of verwijderen met de methoden keep_columns() en drop_columns().

Als u rijen wilt filteren op een specifieke kolomwaarde in een TabularDataset, gebruikt u de methode filter() (preview).

De volgende voorbeelden retourneren een niet-geregistreerde gegevensset op basis van de opgegeven expressies.

# TabularDataset that only contains records where the age column value is greater than 15
tabular_dataset = tabular_dataset.filter(tabular_dataset['age'] > 15)

# TabularDataset that contains records where the name column value contains 'Bri' and the age column value is greater than 15
tabular_dataset = tabular_dataset.filter((tabular_dataset['name'].contains('Bri')) & (tabular_dataset['age'] > 15))

In FileDatasets komt elke rij overeen met een pad van een bestand, dus filteren op kolomwaarde is niet handig. Maar u kunt rijen filteren() op metagegevens zoals, CreationTime, Size, enzovoort.

De volgende voorbeelden retourneren een niet-geregistreerde gegevensset op basis van de opgegeven expressies.

# FileDataset that only contains files where Size is less than 100000
file_dataset = file_dataset.filter(file_dataset.file_metadata['Size'] < 100000)

# FileDataset that only contains files that were either created prior to Jan 1, 2020 or where 
file_dataset = file_dataset.filter((file_dataset.file_metadata['CreatedTime'] < datetime(2020,1,1)) | (file_dataset.file_metadata['CanSeek'] == False))

Gelabelde gegevenssets die zijn gemaakt op basis van projecten voor het labelen van afbeeldingen zijn een speciaal geval. Deze gegevenssets zijn een type TabularDataset dat bestaat uit afbeeldingsbestanden. Voor deze typen gegevenssets kunt u () afbeeldingen filteren op metagegevens en op kolomwaarden zoals label en image_details.

# Dataset that only contains records where the label column value is dog
labeled_dataset = labeled_dataset.filter(labeled_dataset['label'] == 'dog')

# Dataset that only contains records where the label and isCrowd columns are True and where the file size is larger than 100000
labeled_dataset = labeled_dataset.filter((labeled_dataset['label']['isCrowd'] == True) & (labeled_dataset.file_metadata['Size'] > 100000))

Partitiegegevens

U kunt een gegevensset partitioneren door de partitions_format parameter op te slaan bij het maken van een TabularDataset of FileDataset.

Wanneer u een gegevensset partitioneert, worden de partitiegegevens van elk bestandspad geëxtraheerd in kolommen op basis van de opgegeven indeling. De indeling moet beginnen vanaf de positie van de eerste partitiesleutel tot het einde van het bestandspad.

Bijvoorbeeld, gezien het pad ../Accounts/2019/01/01/data.jsonl waar de partitie zich bevindt op afdelingsnaam en -tijd; de partition_format='/{Department}/{PartitionDate:yyyy/MM/dd}/data.jsonl' maakt een tekenreekskolom 'Afdeling' met de waarde 'Accounts' en een datum/tijd-kolom 'PartitionDate' met de waarde 2019-01-01.

Als uw gegevens al bestaande partities hebben en u deze indeling wilt behouden, neemt u de partitioned_format parameter op in uw from_files() methode om een FileDataset te maken.

Als u een TabularDataset wilt maken die bestaande partities behoudt, neemt u de partitioned_format parameter op in de methode from_parquet_files() of de methode from_delimited_files().

Het volgende voorbeeld:

  • Hiermee maakt u een FileDataset op basis van gepartitioneerde bestanden.
  • Haalt de partitiesleutels op
  • Hiermee maakt u een nieuwe, geïndexeerde FileDataset met behulp van

file_dataset = Dataset.File.from_files(data_paths, partition_format = '{userid}/*.wav')
ds.register(name='speech_dataset')

# access partition_keys
indexes = file_dataset.partition_keys # ['userid']

# get all partition key value pairs should return [{'userid': 'user1'}, {'userid': 'user2'}]
partitions = file_dataset.get_partition_key_values()


partitions = file_dataset.get_partition_key_values(['userid'])
# return [{'userid': 'user1'}, {'userid': 'user2'}]

# filter API, this will only download data from user1/ folder
new_file_dataset = file_dataset.filter(ds['userid'] == 'user1').download()

U kunt ook een nieuwe partitiestructuur maken voor TabularDatasets met de methode partitions_by().


 dataset = Dataset.get_by_name('test') # indexed by country, state, partition_date

# call partition_by locally
new_dataset = ds.partition_by(name="repartitioned_ds", partition_keys=['country'], target=DataPath(datastore, "repartition"))
partition_keys = new_dataset.partition_keys # ['country']

Gegevens verkennen

Nadat u klaar bent met het wrangling van uw gegevens, kunt u uw gegevensset registreren en deze vervolgens in uw notebook laden voor gegevensverkenning voorafgaand aan de modeltraining.

Voor FileDatasets kunt u uw gegevensset koppelen of downloaden en de Python-bibliotheken toepassen die u normaal gesproken gebruikt voor gegevensverkenning. Meer informatie over koppelen versus downloaden.

# download the dataset 
dataset.download(target_path='.', overwrite=False) 

# mount dataset to the temp directory at `mounted_path`

import tempfile
mounted_path = tempfile.mkdtemp()
mount_context = dataset.mount(mounted_path)

mount_context.start()

Gebruik voor TabularDatasets de to_pandas_dataframe() methode om uw gegevens in een gegevensframe weer te geven.

# preview the first 3 rows of titanic_ds
titanic_ds.take(3).to_pandas_dataframe()
(Index) PassengerId Overleefde Pclass Naam Sex Leeftijd SibSp Perkament Ticket Tarief Cabine Ingescheept
0 1 Niet waar 3 Braund, Mr Owen Harris man 22,0 1 0 A/5 21171 7.2500 S
1 2 Waar 1 Cumings, Mrs. John Bradley (Florence Briggs Th... vrouwelijk 38.0 1 0 PC 17599 71.2833 C85 C
2 3 Waar 3 Heikkinen, Miss. Laina vrouwelijk 26.0 0 0 STON/O2. 3101282 7.9250 S

Een gegevensset maken op basis van pandas dataframe

Gebruik de methode om een TabularDataset te maken van een pandas-dataframe in het register_pandas_dataframe() geheugen. Met deze methode wordt de TabularDataset geregistreerd in de werkruimte en worden gegevens geüpload naar uw onderliggende opslag, waarvoor opslagkosten in rekening worden gebracht.

from azureml.core import Workspace, Datastore, Dataset
import pandas as pd

pandas_df = pd.read_csv('<path to your csv file>')
ws = Workspace.from_config()
datastore = Datastore.get(ws, '<name of your datastore>')
dataset = Dataset.Tabular.register_pandas_dataframe(pandas_df, datastore, "dataset_from_pandas_df", show_progress=True)

Tip

Maak en registreer een TabularDataset op basis van een spark-dataframe in het geheugen of een dask-dataframe met de openbare preview-methoden, register_spark_dataframe() en register_dask_dataframe(). Deze methoden zijn experimentele preview-functies en kunnen op elk gewenst moment worden gewijzigd.

Met deze methoden worden gegevens geüpload naar uw onderliggende opslag, waardoor er opslagkosten in rekening worden gebracht.

Gegevenssets registreren

Registreer uw gegevenssets bij een werkruimte om het aanmaakproces te voltooien. Gebruik de register() methode om gegevenssets te registreren bij uw werkruimte om ze met anderen te delen en opnieuw te gebruiken in experimenten in uw werkruimte:

titanic_ds = titanic_ds.register(workspace=workspace,
                                 name='titanic_ds',
                                 description='titanic training data')

Gegevenssets maken met Behulp van Azure Resource Manager

Er zijn veel sjablonen op https://github.com/Azure/azure-quickstart-templates/tree/master//quickstarts/microsoft.machinelearningservices die kunnen worden gebruikt om gegevenssets te maken.

Zie Een Azure Resource Manager-sjabloon gebruiken om een werkruimte te maken voor Azure Machine Learning voor meer informatie over het gebruik van deze sjablonen.

Trainen met gegevenssets

Gebruik uw gegevenssets in uw machine learning-experimenten voor het trainen van ML-modellen. Meer informatie over het trainen met gegevenssets.

Versiegegevenssets

U kunt een nieuwe gegevensset onder dezelfde naam registreren door een nieuwe versie te maken. Een gegevenssetversie is een manier om een bladwijzer te maken voor de status van uw gegevens, zodat u een specifieke versie van de gegevensset kunt toepassen voor experimenten of toekomstige reproductie. Meer informatie over gegevenssetversies.

# create a TabularDataset from Titanic training data
web_paths = ['https://dprepdata.blob.core.windows.net/demo/Titanic.csv',
             'https://dprepdata.blob.core.windows.net/demo/Titanic2.csv']
titanic_ds = Dataset.Tabular.from_delimited_files(path=web_paths)

# create a new version of titanic_ds
titanic_ds = titanic_ds.register(workspace = workspace,
                                 name = 'titanic_ds',
                                 description = 'new titanic training data',
                                 create_new_version = True)

Volgende stappen