activeLearn

alJoin

Description

L'action `alJoin` du set d'actions `activeLearn` est un outil essentiel pour fusionner des données brutes avec leurs annotations correspondantes. Ce processus est une étape fondamentale dans de nombreux flux de travail d'apprentissage automatique, en particulier pour l'apprentissage supervisé où les étiquettes (annotations) sont nécessaires pour entraîner un modèle. L'action permet de combiner une table de données principale avec une table d'annotations en se basant sur un identifiant commun, offrant plusieurs types de jointures (interne, externe, etc.) pour s'adapter à divers scénarios de préparation de données.

activeLearn.alJoin / annotatedTable={<table-source>} casOut={<table-de-sortie>} id="variable_id" [joinType="APPEND" | "FULL" | "INNER" | "LEFT" | "RIGHT"] [logLevel=entier] table={<table-source>};
Paramètres
ParamètreDescription
annotatedTableSpécifie la table CAS en mémoire qui contient les données d'annotation à joindre. C'est la table de droite dans la jointure.
casOutSpécifie la table de sortie pour stocker les résultats de la jointure.
idSpécifie la colonne d'identification utilisée comme clé pour joindre la table de données et la table d'annotation.
joinTypeSpécifie le type de jointure à effectuer. Les options sont APPEND, INNER (interne), LEFT (gauche), RIGHT (droite), et FULL (complète). La valeur par défaut est 'LEFT'.
logLevelSpécifie le niveau de détail des messages de progression. 0 (par défaut) pour aucun message, 1 pour les messages de début/fin, 2 pour l'historique des itérations.
tableSpécifie la table CAS en mémoire qui contient les données principales à joindre. C'est la table de gauche dans la jointure.
Préparation des Données Voir la fiche de ce code dataprep
Création de données pour la jointure

Ce bloc de code crée deux tables dans la caslib `mycas`. La première, `data_to_annotate`, contient les données brutes avec un identifiant. La seconde, `annotations`, contient les étiquettes correspondantes pour certains des identifiants.

Copié !
1DATA mycas.data_to_annotate;
2 INPUT id feature1 feature2;
3 DATALINES;
41 10 20
52 12 22
63 15 25
74 18 28
8;
9RUN;
10 
11DATA mycas.annotations;
12 INPUT id $ label $;
13 DATALINES;
141 A
152 B
163 A
17;
18RUN;

Exemples

Cet exemple effectue une jointure à gauche par défaut (`joinType='LEFT'`) entre la table de données et la table d'annotations. Toutes les lignes de la table de gauche (`data_to_annotate`) sont conservées.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 ACTION activeLearn.alJoin /
3 TABLE={name='data_to_annotate'}
4 annotatedTable={name='annotations'}
5 id='id'
6 casOut={name='joined_data_left', replace=true};
7RUN;
8QUIT;
Résultat :
La table `joined_data_left` est créée. Elle contient toutes les lignes de `data_to_annotate` avec les étiquettes correspondantes de `annotations`. La ligne avec id=4 aura une valeur manquante pour la colonne 'label' car elle n'existe pas dans la table d'annotations, ce qui est le comportement attendu d'une jointure à gauche.

Cet exemple utilise une jointure interne (`joinType='INNER'`) pour ne conserver que les observations qui ont une correspondance dans les deux tables. C'est utile pour créer un jeu de données d'entraînement ne contenant que des exemples étiquetés.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 ACTION activeLearn.alJoin /
3 TABLE={name='data_to_annotate'}
4 annotatedTable={name='annotations'}
5 id='id'
6 joinType='INNER'
7 casOut={name='joined_data_inner', replace=true};
8RUN;
9QUIT;
Résultat :
La table `joined_data_inner` est créée. Elle ne contient que les lignes pour lesquelles un identifiant commun existe dans les deux tables (`data_to_annotate` et `annotations`). Par conséquent, la ligne avec id=4 est exclue du résultat final, car elle n'a pas d'annotation correspondante.

Cet exemple montre comment effectuer une jointure complète (`joinType='FULL'`) pour conserver toutes les lignes des deux tables, qu'elles aient ou non une correspondance. Cela peut être utile pour un audit complet des données et des annotations.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1/* Supposons qu'une annotation existe pour un id non présent dans la table de données */
2DATA mycas.annotations_extra;
3 SET mycas.annotations;
4 OUTPUT;
5 id='5'; label='C'; OUTPUT;
6RUN;
7 
8PROC CAS;
9 ACTION activeLearn.alJoin /
10 TABLE={name='data_to_annotate'}
11 annotatedTable={name='annotations_extra'}
12 id='id'
13 joinType='FULL'
14 casOut={name='joined_data_full', replace=true};
15RUN;
16QUIT;
Résultat :
La table `joined_data_full` est créée. Elle contient toutes les lignes des deux tables. La ligne avec id=4 aura une valeur manquante pour 'label', et une nouvelle ligne avec id=5 sera ajoutée avec des valeurs manquantes pour 'feature1' et 'feature2'.

FAQ

Quel est le but de l'action alJoin ?
Quels sont les paramètres obligatoires pour l'action alJoin ?
À quoi sert le paramètre `id` dans l'action alJoin ?
Quels types de jointures le paramètre `joinType` supporte-t-il et quelle est sa valeur par défaut ?
Que fait le paramètre `logLevel` ?

Scénarios associés

Cas d'usage
Scénario Standard : Enrichissement de données client avec des réponses à un sondage

Une équipe marketing souhaite analyser les résultats d'un sondage de satisfaction. L'objectif est de joindre les réponses du sondage à la table client principale pour enrichir l...

Cas d'usage
Scénario Cas Limite : Réconciliation de données avec types d'ID différents et doublons

Un data scientist doit auditer la qualité des données de ventes et de retours. La table des ventes utilise un ID produit numérique, tandis que celle des retours utilise un ID pr...

Cas d'usage
Scénario Performance : Jointure sur des données IoT à haute volumétrie

Dans un contexte de maintenance prédictive industrielle, il est nécessaire de joindre un très grand volume de lectures de capteurs (des millions d'enregistrements) avec une tabl...