CommencezCommencez gratuitement

Chaînes et facteurs

Comme vous le savez, Spark exige des données numériques pour la modélisation. Jusqu'ici, ce n'était pas un problème; même les colonnes booléennes peuvent être facilement converties en entiers sans difficulté. Mais vous utiliserez aussi la compagnie aérienne et la destination de l'avion comme caractéristiques dans votre modèle. Elles sont codées sous forme de chaînes, et il n'existe pas de façon évidente de les convertir en un type de données numérique.

Heureusement, PySpark propose des fonctions pour gérer cela dans le sous-module pyspark.ml.features. Vous pouvez créer ce qu'on appelle des « vecteurs one-hot » pour représenter le transporteur et la destination de chaque vol. Un vecteur one-hot est une façon de représenter une caractéristique catégorielle où chaque observation possède un vecteur dont tous les éléments sont à zéro, sauf au plus un élément qui a la valeur un (1).

Chaque élément du vecteur correspond à un niveau de la caractéristique. On peut donc déterminer le bon niveau en repérant quel élément du vecteur est égal à un (1).

La première étape pour encoder votre caractéristique catégorielle consiste à créer un StringIndexer. Les membres de cette classe sont des Estimators qui prennent un DataFrame contenant une colonne de chaînes et associent chaque chaîne unique à un nombre. Ensuite, l'Estimator renvoie un Transformer qui prend un DataFrame, y attache la table de correspondance comme métadonnées et renvoie un nouveau DataFrame avec une colonne numérique correspondant à la colonne de chaînes.

La deuxième étape consiste à encoder cette colonne numérique en vecteur one-hot à l'aide d'un OneHotEncoder. Cela fonctionne exactement comme le StringIndexer en créant d'abord un Estimator, puis un Transformer. Le résultat final est une colonne qui encode votre caractéristique catégorielle sous forme de vecteur, prête pour les routines de Machine Learning !

Cela peut sembler complexe, mais ne vous en faites pas ! Il vous suffit de retenir que vous devez créer un StringIndexer et un OneHotEncoder, et le Pipeline s'occupera du reste.

Pourquoi devez-vous encoder une caractéristique catégorielle sous forme de vecteur one-hot ?

Cette activité fait partie du cours

Fondements de PySpark

Voir le cours

Exercice interactif pratique

Passez de la théorie à l’action grâce à l’un de nos exercices interactifs

Commencer l’exercice