Tutoriel : Charger, accéder et explorer vos données dans Azure Machine Learning

S’APPLIQUE À : Kit de développement logiciel (SDK) Python azure-ai-ml v2 (actuelle)

Ce didacticiel vous montre comment effectuer les opérations suivantes :

  • Charger vos données sur un stockage en ligne
  • Créer une ressource de données Azure Machine Learning
  • Accéder à vos données dans un notebook pour le développement interactif
  • Créer de nouvelles versions de ressources de données

Le démarrage d’un projet d’apprentissage automatique implique généralement une analyse exploratoire des données (AED), un prétraitement des données (nettoyage, ingénierie des caractéristiques) et la construction de prototypes de modèles Machine Learning pour valider les hypothèses. Cette phase de projet de prototypage est hautement interactive. Il se prête au développement dans un environnement de développement intégré (IDE) ou un notebook Jupyter, avec une console interactive Python. Ce tutoriel décrit ces idées.

Cette vidéo montre comment bien démarrer dans Azure Machine Learning studio pour pouvoir suivre les étapes du tutoriel. La vidéo montre comment créer un notebook, cloner le notebook, créer une instance de calcul et télécharger les données nécessaires pour le tutoriel. Les étapes sont également décrites dans les sections suivantes.

Prérequis

  1. Pour utiliser Azure Machine Learning, vous avez d’abord besoin d’un espace de travail. Si vous n’en avez pas, suivez la procédure Créer les ressources nécessaires pour commencer pour créer un espace de travail et en savoir plus sur son utilisation.

  2. Connectez-vous au studio et sélectionnez votre espace de travail s’il n’est pas déjà ouvert.

  3. Ouvrez ou créez un notebook dans votre espace de travail :

    • Créez un notebook si vous voulez copier/coller du code dans des cellules.
    • Vous pouvez également ouvrir tutorials/get-started-notebooks/explore-data.ipynb dans la section Échantillons de Studio. Sélectionnez ensuite Cloner pour ajouter le notebook à vos Fichiers. (Découvrez où trouver les exemples.)

Définir votre noyau

  1. Dans la barre supérieure au-dessus de votre notebook ouvert, créez une instance de calcul si vous n’en avez pas déjà une.

    Screenshot shows how to create a compute instance.

  2. Si l’instance de calcul est arrêtée, sélectionnez Démarrer le calcul et attendez qu’elle s’exécute.

    Screenshot shows how to start compute if it is stopped.

  3. Assurez-vous que le noyau, situé en haut à droite, est Python 3.10 - SDK v2. Si ce n’est pas le cas, utilisez la liste déroulante pour sélectionner ce noyau.

    Screenshot shows how to set the kernel.

  4. Si une bannière vous indique que vous devez être authentifié, sélectionnez Authentifier.

Important

Le reste de ce tutoriel contient des cellules du notebook du tutoriel. Copiez/collez-les dans votre nouveau notebook ou basculez vers le notebook maintenant si vous l’avez cloné.

Télécharger les données utilisées dans ce tutoriel

Pour l’ingestion de données, Azure Data Explorer gère les données brutes dans ces formats. Ce tutoriel utilise cet échantillon de données de cartes de crédit client au format CSV. Nous voyons que les étapes se poursuivent dans une ressource Azure Machine Learning. Dans cette ressource, nous allons créer un dossier local avec le nom suggéré de données directement sous le dossier où se trouve ce notebook.

Notes

Ce tutoriel dépend des données placées dans un emplacement de dossier de ressources Azure Machine Learning. Pour ce tutoriel, « local » désigne un emplacement de dossier dans cette ressource Azure Machine Learning.

  1. Sélectionnez Ouvrir le terminal sous les trois points, comme illustré dans cette image :

    Screenshot shows open terminal tool in notebook toolbar.

  2. La fenêtre du terminal s’ouvre dans un nouvel onglet.

  3. Veillez à cd dans le même dossier que celui où se trouve ce notebook. Par exemple, si le notebook se trouve dans un dossier nommé get-started-notebooks :

    cd get-started-notebooks    #  modify this to the path where your notebook is located
    
  4. Entrez ces commandes dans la fenêtre de terminal pour copier les données dans votre instance de calcul :

    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. Vous pouvez maintenant fermer la fenêtre du terminal.

Pour en savoir plus sur ces données, consultez le référentiel Machine Learning de l’UCI.

Créer un descripteur vers l’espace de travail

Avant de se lancer dans la rédaction du code, il faut trouver un moyen de référencer l’espace de travail. Vous allez créer ml_client pour un descripteur vers l’espace de travail. Vous utiliserez ensuite ml_client pour gérer les ressources et les travaux.

Dans la cellule suivante, entrez votre ID d’abonnement, le nom du groupe de ressources et le nom de l’espace de travail. Pour rechercher ces valeurs :

  1. Dans la barre d’outils supérieure droite d’Azure Machine Learning Studio, sélectionnez le nom de votre espace de travail.
  2. Copiez la valeur de l’espace de travail, du groupe de ressources et de l’ID d’abonnement dans le code.
  3. Vous devez copier une valeur, fermer la zone et coller, puis revenir pour la suivante.
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>",
)

Notes

La création de MLClient n’établit pas de connexion à l’espace de travail. L’initialisation du client est lente, elle attendra la première fois qu’elle aura besoin de passer un appel (ce qui se produira dans la prochaine cellule de code).

Charger des données sur un stockage en ligne

Azure Machine Learning utilise des URI (Uniform Resource Identifier), qui pointent vers des emplacements de stockage dans le cloud. Un URI facilite l’accès aux données dans les notebooks et les tâches. Les formats URI de données ressemblent aux URL web que vous utilisez dans votre navigateur web pour accéder aux pages web. Par exemple :

  • Accédez aux données à partir d’un serveur https public : https://<account_name>.blob.core.windows.net/<container_name>/<folder>/<file>
  • Accédez aux données à partir d’Azure Data Lake Gen 2 : abfss://<file_system>@<account_name>.dfs.core.windows.net/<folder>/<file>

Une ressource de données Azure ML est similaire aux signets de navigateur web (favoris). Au lieu de mémoriser de longs chemins de stockage (URI) qui pointent vers vos données les plus fréquemment utilisées, vous pouvez créer une ressource de données, puis y accéder avec un nom convivial.

En créant une ressource de données, vous créez aussi une référence à l’emplacement de la source de données ainsi qu’une copie de ses métadonnées. Étant donné que les données restent à leur emplacement existant, vous n’exposez aucun coût de stockage supplémentaire et ne risquez pas l’intégrité des sources de données. Vous pouvez créer des ressources de données à partir de magasins de données Azure ML, d’un Stockage Azure, d’URL publiques et de fichiers locaux.

Conseil

Pour les chargements de données de plus petite taille, la création de ressources de données Azure Machine Learning fonctionne bien pour les chargements de données à partir de ressources d’ordinateurs locaux vers le stockage en ligne. Cette approche permet d’éviter l’utilisation d’outils ou d’utilitaires supplémentaires. Toutefois, un chargement de données de plus grande taille peut nécessiter l’utilisation d’un outil ou d’un utilitaire dédié, par exemple, azcopy. L’outil de ligne de commande azcopy permet de déplacer des données vers et depuis le Stockage Azure. Apprenez-en davantage sur azcopy ici.

La cellule de notebook suivante crée la ressource de données. L’exemple de code charge le fichier de données brutes dans la ressource de stockage en ligne désignée.

Chaque fois que vous créez une ressource de données, vous avez besoin d’une version unique pour celle-ci. Si la version existe déjà, vous obtiendrez une erreur. Dans ce code, nous utilisons l’« initial » pour la première lecture des données. Si cette version existe déjà, nous ne la créerons pas à nouveau.

Vous pouvez également omettre le paramètre de version, et un numéro de version est généré pour vous, en commençant par 1, puis en l’incrémentant par la suite.

Dans ce tutoriel, nous utilisons le nom « initial » comme première version. Le tutoriel Créer des pipelines Machine Learning de production utilise également cette version des données. Nous utilisons donc ici une valeur que vous verrez à nouveau dans ce tutoriel.

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

Vous pouvez voir les données chargées en sélectionnant Données sur la gauche. Vous verrez que les données sont chargées et qu’une ressource de données est créée :

Screenshot shows the data in studio.

Ces données sont nommées carte-crédit, et dans l’onglet Ressources de données, nous pouvons les voir dans la colonne Nom. Ces données ont été chargées dans le magasin de données par défaut de votre espace de travail nommé workspaceblobstore, comme indiqué dans la colonne Source de données .

Un magasin de données Azure Machine Learning est une référence à un compte de stockage existant sur Azure. Un magasin de données offre les avantages suivants :

  1. Une API courante et facile à utiliser, permettant d’interagir avec différents types de stockage (Blob/Files/Azure Data Lake Storage) et méthodes d’authentification.
  2. Un moyen plus facile de découvrir des magasins de données utiles, lors d’un travail d’équipe.
  3. Dans vos scripts, un moyen de masquer les informations de connexion pour l’accès aux données basées sur les informations d’identification (principal de service/SAS/clé).

Accéder à vos données dans un notebook

Pandas prend directement en charge les URI : cet exemple montre comment lire un fichier CSV à partir d’un magasin de données 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")

Toutefois, comme mentionné précédemment, il peut devenir difficile de mémoriser ces URI. En outre, vous devez remplacer manuellement toutes les valeurs de <substring> dans la commande pd.read_csv par les valeurs réelles de vos ressources.

Vous souhaiterez créer des ressources de données pour les données fréquemment consultées. Voici un moyen plus simple d’accéder au fichier CSV dans Pandas :

Important

Dans une cellule de notebook, exécutez ce code pour installer la bibliothèque Python azureml-fsspec dans votre noyau 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()

Pour en savoir plus sur l’accès aux données dans un notebook, consultez Accéder aux données à partir du stockage cloud Azure pendant le développement interactif .

Créer une nouvelle version de la ressource de données

Vous avez peut-être remarqué que les données ont besoin d’un nettoyage léger pour les adapter à l’apprentissage d’un modèle Machine Learning. Il comprend :

  • deux en-têtes
  • une colonne d’ID client ; nous n’utiliserions pas cette fonctionnalité dans le Machine Learning
  • espaces dans le nom de la variable de réponse

De plus, comparé au format CSV, le format de fichier Parquet constitue un meilleur moyen de stocker ces données. Parquet offre une compression et conserve les schémas. Par conséquent, pour nettoyer les données et les stocker dans Parquet, utilisez :

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

Ce tableau montre la structure des données dans le fichier .CSV originaldefault_of_credit_card_clients.csv téléchargé lors d’une étape précédente. Les données chargées contiennent 23 variables explicatives et 1 variable de réponse, comme illustré ici :

Nom(s) de colonne Type de variable Description
X1 Explications Montant du crédit accordé (dollar NT) : il comprend à la fois le crédit à la consommation individuel et le crédit familial (supplémentaire).
X2 Explications Sexe (1 = homme ; 2 = femme).
X3 Explications Éducation (1 = études supérieures ; 2 = université ; 3 = lycée ; 4 = autres).
X4 Explications État civil (1 = marié ; 2 = célibataire ; 3 = autres).
X5 Explications Âge (années).
X6-X11 Explications Historique des paiements antérieurs. Nous avons suivi les dossiers de paiements mensuels antérieurs (d’avril à septembre 2005). -1 = paiement intégral ; 1 = retard de paiement d’un mois ; 2 = retard de paiement de deux mois ; . . 8 = retard de paiement de huit mois ; 9 = retard de paiement de neuf mois et plus.
X12-17 Explications Montant des relevés de factures (en dollars NT) d’avril à septembre 2005.
X18-23 Explications Montant du paiement précédent (dollar NT) d’avril à septembre 2005.
O response Défaut de paiement (Oui = 1, Non = 0)

Créez ensuite une nouvelle version de la ressource de données (les données sont automatiquement chargées dans le stockage en ligne). Pour cette version, nous allons ajouter une valeur de temps, afin qu’un numéro de version différent soit créé à chaque exécution de ce code.

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

Le fichier Parquet nettoyé est la dernière version de la source de données. Ce code affiche d’abord le jeu de résultats de version CSV, puis la version 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))

Nettoyer les ressources

Si vous comptez suivre d’autres tutoriels, passez aux Étapes suivantes.

Arrêter l’instance de calcul

Si vous ne comptez pas l’utiliser maintenant, arrêtez l’instance de calcul :

  1. Dans la zone de navigation gauche de Studio, sélectionnez Calculer.
  2. Sous les onglets supérieurs, sélectionnez Instances de calcul
  3. Sélectionnez l’instance de calcul dans la liste.
  4. Dans la barre d’outils supérieure, sélectionnez Arrêter.

Supprimer toutes les ressources

Important

Les ressources que vous avez créées peuvent être utilisées comme prérequis pour d’autres tutoriels d’Azure Machine Learning et des articles de procédure.

Si vous n’avez pas l’intention d’utiliser les ressources que vous avez créées, supprimez-les pour éviter des frais :

  1. Dans le portail Azure, sélectionnez Groupes de ressources tout à gauche.

  2. Dans la liste, sélectionnez le groupe de ressources créé.

  3. Sélectionnez Supprimer le groupe de ressources.

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

  4. Entrez le nom du groupe de ressources. Puis sélectionnez Supprimer.

Étapes suivantes

Pour plus d’informations sur les ressources de données, consultez Créer des ressources de données.

Pour en savoir plus sur les magasins de données, consultez Créer des magasins de données.

Continuez avec des tutoriels pour découvrir comment développer un script de formation.