Esercitazione: Caricare, accedere ed esplorare i dati in Azure Machine Learning

SI APPLICA A: Python SDK azure-ai-ml v2 (corrente)

In questa esercitazione si apprenderà come:

  • Caricare i dati nell'archiviazione cloud
  • Creare un asset di dati di Azure Machine Learning
  • Accedere ai dati in un notebook per lo sviluppo interattivo
  • Creare nuove versioni degli asset di dati

L'inizio di un progetto di Machine Learning prevede in genere l'analisi esplorativa dei dati (EDA), la pre-elaborazione dei dati (pulizia, progettazione delle funzionalità) e la creazione di prototipi di modelli di Machine Learning per convalidare le ipotesi. Questa fase del progetto di prototipazione è altamente interattiva. Si presta allo sviluppo in un IDE o in un notebook jupyter, con una console interattiva Python. Questa esercitazione descrive queste idee.

Questo video illustra come iniziare a usare studio di Azure Machine Learning in modo da poter seguire i passaggi dell'esercitazione. Il video illustra come creare un notebook, clonare il notebook, creare un'istanza di calcolo e scaricare i dati necessari per l'esercitazione. I passaggi sono descritti anche nelle sezioni seguenti.

Prerequisiti

  1. Per usare Azure Machine Learning, è prima necessaria un'area di lavoro. Se non è disponibile, completare Creare risorse necessarie per iniziare a creare un'area di lavoro e altre informazioni sull'uso.

  2. Accedere allo studio e selezionare l'area di lavoro se non è già aperta.

  3. Aprire o creare un notebook nell'area di lavoro:

    • Creare un nuovo notebook, se si vuole copiare/incollare il codice nelle celle.
    • In alternativa, aprire tutorials/get-started-notebooks/explore-data.ipynb dalla sezione Esempi di Studio. Selezionare quindi Clona per aggiungere il notebook ai file. Vedere dove trovare esempi.

Impostare il kernel

  1. Nella barra superiore sopra il notebook aperto creare un'istanza di calcolo se non ne è già disponibile una.

    Screenshot shows how to create a compute instance.

  2. Se l'istanza di calcolo viene arrestata, selezionare Avvia calcolo e attendere fino a quando non è in esecuzione.

    Screenshot shows how to start compute if it is stopped.

  3. Assicurarsi che il kernel, trovato in alto a destra, sia Python 3.10 - SDK v2. In caso contrario, usare l'elenco a discesa per selezionare questo kernel.

    Screenshot shows how to set the kernel.

  4. Se viene visualizzato un banner che indica che è necessario eseguire l'autenticazione, selezionare Autentica.

Importante

Il resto di questa esercitazione contiene celle del notebook dell'esercitazione. Copia/incollali nel nuovo notebook o passa ora al notebook se è stato clonato.

Scaricare i dati usati in questa esercitazione

Per l'inserimento dati, Azure Esplora dati gestisce i dati non elaborati in questi formati. Questa esercitazione usa questo esempio di dati client con carta di credito in formato CSV. I passaggi vengono illustrati in una risorsa di Azure Machine Learning. In tale risorsa verrà creata una cartella locale con il nome suggerito dei dati direttamente nella cartella in cui si trova il notebook.

Nota

Questa esercitazione dipende dai dati inseriti in un percorso della cartella delle risorse di Azure Machine Learning. Per questa esercitazione, "local" indica un percorso della cartella nella risorsa di Azure Machine Learning.

  1. Selezionare Apri terminale sotto i tre puntini, come illustrato in questa immagine:

    Screenshot shows open terminal tool in notebook toolbar.

  2. La finestra del terminale viene visualizzata in una nuova scheda.

  3. Assicurarsi di trovarsi cd nella stessa cartella in cui si trova questo notebook. Ad esempio, se il notebook si trova in una cartella denominata get-started-notebooks:

    cd get-started-notebooks    #  modify this to the path where your notebook is located
    
  4. Immettere questi comandi nella finestra del terminale per copiare i dati nell'istanza di calcolo:

    mkdir data
    cd data                     # the sub-folder where you'll store the data
    wget https://azuremlexamples.blob.core.windows.net/datasets/credit_card/default_of_credit_card_clients.csv
    
  5. È ora possibile chiudere la finestra del terminale.

Altre informazioni su questi dati sono disponibili nel repository di Machine Learning UCI.

Creare un handle nell'area di lavoro

Prima di approfondire il codice, è necessario un modo per fare riferimento all'area di lavoro. Si creerà ml_client un handle per l'area di lavoro. Si userà ml_client quindi per gestire risorse e processi.

Nella cella successiva immettere l'ID sottoscrizione, il nome del gruppo di risorse e il nome dell'area di lavoro. Per trovare questi valori:

  1. Nella barra degli strumenti in alto a destra studio di Azure Machine Learning selezionare il nome dell'area di lavoro.
  2. Copiare il valore per l'area di lavoro, il gruppo di risorse e l'ID sottoscrizione nel codice.
  3. Sarà necessario copiare un valore, chiudere l'area e incollarlo, quindi tornare per quello successivo.
from azure.ai.ml import MLClient
from azure.identity import DefaultAzureCredential
from azure.ai.ml.entities import Data
from azure.ai.ml.constants import AssetTypes

# authenticate
credential = DefaultAzureCredential()

# Get a handle to the workspace
ml_client = MLClient(
    credential=credential,
    subscription_id="<SUBSCRIPTION_ID>",
    resource_group_name="<RESOURCE_GROUP>",
    workspace_name="<AML_WORKSPACE_NAME>",
)

Nota

La creazione di MLClient non si connetterà all'area di lavoro. L'inizializzazione del client è differita e attende per la prima volta che deve effettuare una chiamata (questa operazione verrà eseguita nella cella di codice successiva).

Caricare i dati nell'archiviazione cloud

Azure Machine Learning usa gli URI (Uniform Resource Identifier), che puntano alle posizioni di archiviazione nel cloud. Un URI semplifica l'accesso ai dati nei notebook e nei processi. I formati URI dati sono simili agli URL Web usati nel Web browser per accedere alle pagine Web. Ad esempio:

  • Accedere ai dati dal server HTTPS pubblico: https://<account_name>.blob.core.windows.net/<container_name>/<folder>/<file>
  • Accedere ai dati da Azure Data Lake Gen 2: abfss://<file_system>@<account_name>.dfs.core.windows.net/<folder>/<file>

Un asset di dati di Azure Machine Learning è simile ai segnalibri del Web browser (preferiti). Invece di ricordare percorsi di archiviazione lunghi (URI) che puntano ai dati usati più di frequente, è possibile creare un asset di dati e quindi accedere a tale asset con un nome descrittivo.

La creazione di asset di dati crea anche un riferimento al percorso dell'origine dati, insieme a una copia dei relativi metadati. Poiché i dati rimangono nella posizione esistente, non vengono addebitati costi di archiviazione aggiuntivi e non si rischia l'integrità dell'origine dati. È possibile creare asset di dati da archivi dati di Azure Machine Learning, Archiviazione di Azure, URL pubblici e file locali.

Suggerimento

Per i caricamenti di dati di dimensioni inferiori, la creazione di asset di dati di Azure Machine Learning è ideale per i caricamenti di dati dalle risorse del computer locale all'archiviazione cloud. Questo approccio evita la necessità di strumenti o utilità aggiuntivi. Tuttavia, un caricamento di dati di dimensioni maggiori potrebbe richiedere uno strumento o un'utilità dedicata, ad esempio azcopy. Lo strumento da riga di comando azcopy sposta i dati da e verso Archiviazione di Azure. Altre informazioni su azcopy sono disponibili qui.

La cella del notebook successiva crea l'asset di dati. L'esempio di codice carica il file di dati non elaborato nella risorsa di archiviazione cloud designata.

Ogni volta che si crea un asset di dati, è necessaria una versione univoca. Se la versione esiste già, verrà visualizzato un errore. In questo codice viene usato il "valore iniziale" per la prima lettura dei dati. Se la versione esiste già, la creazione verrà ignorata.

È anche possibile omettere il parametro version e viene generato automaticamente un numero di versione, a partire da 1 e quindi incrementando da questa posizione.

In questa esercitazione viene usato il nome "initial" come prima versione. L'esercitazione Creare pipeline di Machine Learning di produzione userà anche questa versione dei dati, quindi in questa esercitazione verrà usato un valore che verrà visualizzato di nuovo in questa esercitazione.

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

# update the 'my_path' variable to match the location of where you downloaded the data on your
# local filesystem

my_path = "./data/default_of_credit_card_clients.csv"
# set the version number of the data asset
v1 = "initial"

my_data = Data(
    name="credit-card",
    version=v1,
    description="Credit card data",
    path=my_path,
    type=AssetTypes.URI_FILE,
)

## create data asset if it doesn't already exist:
try:
    data_asset = ml_client.data.get(name="credit-card", version=v1)
    print(
        f"Data asset already exists. Name: {my_data.name}, version: {my_data.version}"
    )
except:
    ml_client.data.create_or_update(my_data)
    print(f"Data asset created. Name: {my_data.name}, version: {my_data.version}")

È possibile visualizzare i dati caricati selezionando Dati a sinistra. Si noterà che i dati vengono caricati e viene creato un asset di dati:

Screenshot shows the data in studio.

Questi dati sono denominati carta di credito e nella scheda Asset di dati è possibile visualizzarli nella colonna Nome. Questi dati caricati nell'archivio dati predefinito dell'area di lavoro denominato workspaceblobstore, come illustrato nella colonna Origine dati.

Un archivio dati di Azure Machine Learning è un riferimento a un account di archiviazione esistente in Azure. Un archivio dati offre questi vantaggi:

  1. Un'API comune e facile da usare per interagire con diversi tipi di archiviazione (BLOB/file/Azure Data Lake Archiviazione) e metodi di autenticazione.
  2. Un modo più semplice per individuare archivi dati utili, quando si lavora come team.
  3. Negli script è possibile nascondere le informazioni di connessione per l'accesso ai dati basato sulle credenziali (entità servizio/firma di accesso condiviso/chiave).

Accedere ai dati in un notebook

Pandas supporta direttamente gli URI: questo esempio illustra come leggere un file CSV da un archivio dati di Azure Machine Learning:

import pandas as pd

df = pd.read_csv("azureml://subscriptions/<subid>/resourcegroups/<rgname>/workspaces/<workspace_name>/datastores/<datastore_name>/paths/<folder>/<filename>.csv")

Tuttavia, come accennato in precedenza, può diventare difficile ricordare questi URI. Inoltre, è necessario sostituire manualmente tutti i <valori di sottostringa> nel comando pd.read_csv con i valori reali per le risorse.

È consigliabile creare asset di dati per i dati a cui si accede di frequente. Ecco un modo più semplice per accedere al file CSV in Pandas:

Importante

In una cella del notebook eseguire questo codice per installare la azureml-fsspec libreria Python nel kernel Jupyter:

%pip install -U azureml-fsspec
import pandas as pd

# get a handle of the data asset and print the URI
data_asset = ml_client.data.get(name="credit-card", version=v1)
print(f"Data asset URI: {data_asset.path}")

# read into pandas - note that you will see 2 headers in your data frame - that is ok, for now

df = pd.read_csv(data_asset.path)
df.head()

Per altre informazioni sull'accesso ai dati in un notebook, vedere Accedere ai dati dall'archiviazione cloud di Azure durante lo sviluppo interattivo.

Creare una nuova versione dell'asset di dati

Si potrebbe notare che i dati hanno bisogno di una pulizia leggermente leggera per adattarli al training di un modello di Machine Learning. Le sue caratteristiche sono:

  • due intestazioni
  • una colonna ID client; questa funzionalità non verrà usata in Machine Learning
  • spazi nel nome della variabile di risposta

Inoltre, rispetto al formato CSV, il formato di file Parquet diventa un modo migliore per archiviare questi dati. Parquet offre la compressione e mantiene lo schema. Pertanto, per pulire i dati e archiviarlo in Parquet, usare:

# read in data again, this time using the 2nd row as the header
df = pd.read_csv(data_asset.path, header=1)
# rename column
df.rename(columns={"default payment next month": "default"}, inplace=True)
# remove ID column
df.drop("ID", axis=1, inplace=True)

# write file to filesystem
df.to_parquet("./data/cleaned-credit-card.parquet")

Questa tabella mostra la struttura dei dati nel file originale default_of_credit_card_clients.csv . File CSV scaricato in un passaggio precedente. I dati caricati contengono 23 variabili esplicative e 1 variabile di risposta, come illustrato di seguito:

Nomi colonna Tipo di variabile Descrizione
X1 Esplicativo Importo del credito specificato (NT dollaro): include sia il credito individuale di consumo che il credito familiare (supplementare).
X2 Esplicativo Sesso (1 = maschio; 2 = femmina).
X3 Esplicativo Istruzione (1 = scuola di laurea; 2 = università; 3 = scuola superiore; 4 = altri).
X4 Esplicativo Stato coniugale (1 = sposato; 2 = singolo; 3 = altri).
X5 Esplicativo Età (anni).
X6-X11 Esplicativo Cronologia del pagamento precedente. Sono stati rilevati i record di pagamento mensili precedenti (da aprile a settembre 2005). -1 = pagare regolarmente; 1 = ritardo di pagamento per un mese; 2 = ritardo di pagamento per due mesi; . . .; 8 = ritardo di pagamento per otto mesi; 9 = ritardo di pagamento per nove mesi e superiori.
X12-17 Esplicativo Importo dell'estratto conto (NT dollaro) da aprile a settembre 2005.
X18-23 Esplicativo Importo del pagamento precedente (nt dollaro) da aprile a settembre 2005.
Y Response Pagamento predefinito (Sì = 1, No = 0)

Creare quindi una nuova versione dell'asset di dati (i dati vengono caricati automaticamente nell'archiviazione cloud). Per questa versione verrà aggiunto un valore di ora, in modo che ogni volta che viene eseguito questo codice, verrà creato un numero di versione diverso.

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

# Next, create a new *version* of the data asset (the data is automatically uploaded to cloud storage):
v2 = "cleaned" + time.strftime("%Y.%m.%d.%H%M%S", time.gmtime())
my_path = "./data/cleaned-credit-card.parquet"

# Define the data asset, and use tags to make it clear the asset can be used in training

my_data = Data(
    name="credit-card",
    version=v2,
    description="Default of credit card clients data.",
    tags={"training_data": "true", "format": "parquet"},
    path=my_path,
    type=AssetTypes.URI_FILE,
)

## create the data asset

my_data = ml_client.data.create_or_update(my_data)

print(f"Data asset created. Name: {my_data.name}, version: {my_data.version}")

Il file parquet pulito è l'origine dati della versione più recente. Questo codice mostra prima il set di risultati della versione CSV, quindi la versione Parquet:

import pandas as pd

# get a handle of the data asset and print the URI
data_asset_v1 = ml_client.data.get(name="credit-card", version=v1)
data_asset_v2 = ml_client.data.get(name="credit-card", version=v2)

# print the v1 data
print(f"V1 Data asset URI: {data_asset_v1.path}")
v1df = pd.read_csv(data_asset_v1.path)
print(v1df.head(5))

# print the v2 data
print(
    "_____________________________________________________________________________________________________________\n"
)
print(f"V2 Data asset URI: {data_asset_v2.path}")
v2df = pd.read_parquet(data_asset_v2.path)
print(v2df.head(5))

Pulire le risorse

Se si prevede di continuare ora ad altre esercitazioni, passare a Passaggi successivi.

Arrestare l'istanza di calcolo

Se non si intende usarlo ora, arrestare l'istanza di calcolo:

  1. Nello studio, nell'area di spostamento a sinistra selezionare Calcolo.
  2. Nelle schede superiori selezionare Istanze di calcolo
  3. Selezionare l'istanza di calcolo nell'elenco.
  4. Sulla barra degli strumenti superiore selezionare Arresta.

Eliminare tutte le risorse

Importante

Le risorse create possono essere usate come prerequisiti per altre esercitazioni e procedure dettagliate per Azure Machine Learning.

Se non si prevede di usare alcuna delle risorse create, eliminarle in modo da non sostenere alcun addebito:

  1. Nel portale di Azure fare clic su Gruppi di risorse all'estrema sinistra.

  2. Nell'elenco selezionare il gruppo di risorse creato.

  3. Selezionare Elimina gruppo di risorse.

    Screenshot of the selections to delete a resource group in the Azure portal.

  4. Immettere il nome del gruppo di risorse. Quindi seleziona Elimina.

Passaggi successivi

Per altre informazioni sugli asset di dati, vedere Creare asset di dati.

Per altre informazioni sugli archivi dati, vedere Creare archivi dati.

Continuare con le esercitazioni per imparare a sviluppare uno script di training.