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. Ga naar het artikel Over veilige toegang tot gegevens voor meer informatie over hoe gegevenssets passen in de algemene werkstroom voor gegevenstoegang van Azure Machine Learning.

Wanneer u een gegevensset maakt, maakt u een verwijzing naar de locatie van de gegevensbron, samen met een kopie van de metagegevens. Omdat de gegevens zich op de bestaande locatie bevinden, worden er geen extra opslagkosten in rekening gebracht en loopt u geen risico op de integriteit van uw gegevensbronnen. Daarnaast worden gegevenssets lazily geëvalueerd, waardoor de prestaties van de werkstroom sneller kunnen worden verbeterd. U kunt gegevenssets maken op basis van gegevensarchieven, openbare URL's en Azure Open Datasets. Ga naar Azure Machine Learning-gegevenssets maken met de Azure Machine Learning-studio voor informatie over een ervaring met weinig code.

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

  • Eén kopie van gegevens in uw opslag behouden, waarnaar wordt verwezen door gegevenssets

  • Krijg naadloos toegang tot gegevens tijdens modeltraining zonder dat u zich zorgen hoeft te maken over verbindingsreeks s of gegevenspaden. Ga voor meer informatie over het trainen van gegevenssets naar 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 beschikbaar als 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 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 in Linux ontwikkelt, zijn deze klassen afhankelijk van .NET Core 2.1 en ondersteunen ze alleen specifieke distributies. Lees de kolom .NET Core 2.1 in het artikel .NET Core 2.1 installeren in Linux voor meer informatie over de ondersteunde distributies.

Belangrijk

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

Richtlijnen voor rekenkracht

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

Gecomprimeerde gegevens kunnen verder worden uitgebreid. Twintig GB relatief geparseerde gegevens die zijn opgeslagen in een gecomprimeerde parquet-indeling, kunnen worden uitgebreid tot ~800 GB in het geheugen. Omdat Parquet-bestanden gegevens opslaan in een kolomindeling, hoeft u alleen ~400 GB in het geheugen te laden als u slechts de helft van de kolommen nodig hebt.

Ga voor meer informatie naar Meer informatie over het optimaliseren van gegevensverwerking in Azure Machine Learning.

Gegevenssettypen

Er zijn twee typen gegevenssets op basis van hoe gebruikers gegevenssets gebruiken in de training: FileDatasets en TabularDatasets. Azure Machine Learning-trainingswerkstromen die betrekking hebben op schattingen, AutoML, hyperDrive en pijplijnen kunnen beide typen gebruiken.

FileDataset

Een FileDataset verwijst naar één of meerdere 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 downloaden of koppelen aan uw berekening als een FileDataset-object.

We raden FileDatasets aan voor uw machine learning-werkstromen, omdat de bronbestanden in elke indeling kunnen zijn. Dit maakt een breder scala aan machine learning-scenario's mogelijk, waaronder deep learning.

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

TabularDataset

Een TabularDataset parseert het opgegeven bestand of de opgegeven lijst met bestanden om gegevens in tabelvorm weer te geven. U kunt de gegevens vervolgens materialiseren in een pandas of Spark DataFrame om te werken met vertrouwde gegevensvoorbereidings- en trainingsbibliotheken terwijl u in uw notebook blijft. U kunt een TabularDataset object maken op basis van .csv, .tsv, .parquet, .json lijnbestanden en uit SQL-queryresultaten.

Met TabularDatasets kunt u een tijdstempel opgeven uit een kolom in de gegevens, of van de locatie waar de padpatroongegevens zijn opgeslagen, om een tijdreekskenmerk in te schakelen. Met deze specificatie kunt u eenvoudig en efficiënt filteren op tijd. Ga bijvoorbeeld naar de API-demo met betrekking tot tabellaire tijdreeksen met NOAA-weergegevens.

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

Notitie

Geautomatiseerde ML-werkstromen die worden gegenereerd via de Azure Machine Learning-studio bieden momenteel alleen ondersteuning voor TabularDatasets.

Voor TabularDatasets die zijn gegenereerd op basis van SQL-queryresultaten, wordt T-SQL (bijvoorbeeld 'WITH'-subquery) of dubbele kolomnamen niet ondersteund. Complexe T-SQL-query's 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. Ga naar Een werkruimte en bijbehorende resources beveiligen voor meer informatie over het gebruik van gegevensarchieven en gegevenssets in een virtueel netwerk.

Gegevenssets maken uit gegevensarchieven

Als u de gegevens toegankelijk wilt maken voor Azure Machine Learning, moet u gegevenssets maken op basis van paden in web-URL's of Azure Machine Learning-gegevensarchieven.

Tip

U kunt gegevenssets rechtstreeks vanuit opslag-URL's maken met op identiteit gebaseerde gegevenstoegang. Ga voor meer informatie naar Verbinding maken voor opslag met op identiteit gebaseerde gegevenstoegang.

Gegevenssets maken vanuit een gegevensarchief met de Python SDK:

  1. Controleer of u de onderliggende opslagservice van uw geregistreerde Azure Machine Learning-gegevensarchief hebt of owner er toegang toe hebtcontributor. Controleer de machtigingen van uw opslagaccount in 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 gegevensgrootte waaruit u een gegevensset kunt maken.

Notitie

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

Een FileDataset maken

Gebruik de from_files() methode in de FileDatasetFactory klasse om bestanden in elke indeling te laden en om 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 de from_files() methode in. Hiermee wordt de eerste validatiestap overgeslagen en zorgt u ervoor dat u uw gegevensset kunt maken op basis van deze beveiligde bestanden. Ga voor meer informatie naar het gebruik van gegevensarchieven en gegevenssets in een virtueel netwerk.

from azureml.core import Workspace, Datastore, Dataset

# create a FileDataset recursively pointing to files in 'animals' folder and its subfolder
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 experimenten in uw werkruimte, moet u uw gegevensset registreren.

Een TabularDataset maken

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

Raadpleeg de referentiedocumentatie tabularDatasetFactory en informatie over syntaxis- en ontwerppatronen zoals ondersteuning voor meerdere regels voor informatie over ondersteunde bestandsindelingen.

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 overgeslagen en zorgt u ervoor dat u uw gegevensset kunt maken op basis van deze beveiligde bestanden. Ga naar gegevensarchieven en gegevenssets in een virtueel netwerk voor meer informatie over gegevensopslagresources achter een virtueel netwerk of firewall.

Met deze code worden de bestaande werkruimte en het gewenste gegevensarchief op naam opgehaald. Vervolgens worden de gegevensopslag- en bestandslocaties doorgegeven aan de parameter om een nieuwe TabularDataset met de path naam 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 uitgestelde typen niet aan uw verwachtingen voldoen, kunt u kolomtypen opgeven met de volgende code om uw gegevensset bij te werken. De parameter infer_column_type is alleen van toepassing op gegevenssets die zijn gemaakt op basis van bestanden met scheidingstekens. Ga voor meer informatie naar 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 Geslacht Leeftijd SibSp Parch Ticket Tarief Cabine Begonnen
0 1 Onwaar 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 E
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 in experimenten in uw werkruimte, moet u uw gegevensset registreren.

Wrangle-gegevens

Nadat u uw gegevensset hebt gemaakt en geregistreerd , kunt u die gegevensset laden in uw notebook voor gegevens die wrangling en verkenning zijn uitgevoerd, voordat u modeltraining gaat volgen. Mogelijk hoeft u geen gegevens te wrangling of verkenning uit te voeren. In dat geval gaat u naar Trainen met gegevenssets voor het verzenden van ML-experimenten voor meer informatie over het verbruik van gegevenssets in uw trainingsscripts.

Gegevenssets filteren (preview)

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

Belangrijk

Het filteren van gegevenssets met de filter() preview-methode 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).

Deze 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 helpt niet. U kunt echter rijen filteren op metagegevens, bijvoorbeeld CreationTime, Size, enzovoort. Deze 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 afbeeldingslabelprojecten zijn een speciaal geval. Deze gegevenssets zijn een type TabularDataset dat bestaat uit afbeeldingsbestanden. Voor deze gegevenssets kunt u() afbeeldingen filteren op metagegevens en label op kolomwaarden 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

Als u een gegevensset wilt partitioneren, neemt u de partitions_format parameter op wanneer u een TabularDataset of FileDataset maakt.

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 en doorgaan naar het einde van het bestandspad.

Op basis van het pad ../Accounts/2019/01/01/data.jsonl, waarbij de partitie bijvoorbeeld is op afdelingsnaam en -tijd, wordt een partition_format='/{Department}/{PartitionDate:yyyy/MM/dd}/data.jsonl' tekenreekskolom 'Afdeling' gemaakt 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 die indeling wilt behouden, moet u de partitioned_format parameter in uw from_files() methode opnemen om een FileDataset te maken.

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

Dit voorbeeld

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

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 partition_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 uw gegevens hebt gewranged, kunt u uw gegevensset registreren en deze vervolgens laden in uw notebook voor gegevensverkenning voordat u modeltraining gaat volgen.

Voor FileDatasets kunt u uw gegevensset koppelen of downloaden en de Python-bibliotheken toepassen die u normaal gesproken zou gebruiken voor gegevensverkenning. Ga voor meer informatie naar 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 dataframe weer te geven.

# preview the first 3 rows of titanic_ds
titanic_ds.take(3).to_pandas_dataframe()
(Index) PassengerId Overleefde Pclass Naam Geslacht Leeftijd SibSp Parch Ticket Tarief Cabine Begonnen
0 1 Onwaar 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 E
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

Als u een TabularDataset wilt maken op basis van een pandas-dataframe in het geheugen, gebruikt u de register_pandas_dataframe() methode. Met deze methode wordt de TabularDataset geregistreerd bij de werkruimte en worden gegevens geüpload naar uw onderliggende opslag. Voor dit proces worden opslagkosten in rekening 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 van een spark-dataframe in het geheugen of een dask-dataframe met de openbare preview-methoden en register_spark_dataframe()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 Azure Resource Manager

U vindt veel sjablonen op microsoft.machinelearningservices die kunnen worden gebruikt om gegevenssets te maken.

Ga naar Een Azure Resource Manager-sjabloon gebruiken om een werkruimte voor Azure Machine Learning te maken voor meer informatie over 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 kan een bladwijzer maken voor de status van uw gegevens om een specifieke versie van de gegevensset toe te passen voor experimenten of toekomstige reproductie. Ga naar gegevenssetversies voor meer informatie.

# 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