CommencerCommencez gratuitement

Supprimer les colonnes avec peu d’observations

Après beaucoup de feature engineering, il est utile de prendre du recul et d’examiner ce que vous avez créé. Si vous avez automatisé le traitement de vos variables catégorielles (par exemple avec un explode ou un OneHot Encoding), vous pouvez vous retrouver avec des centaines de nouvelles variables binaires. La sélection de variables mériterait à elle seule un autre cours, mais vous pouvez déjà appliquer quelques étapes rapides pour réduire la dimension de votre jeu de données.

Dans cet exercice, nous allons supprimer les colonnes qui comptent moins de 30 observations. 30 est un minimum couramment utilisé pour atteindre une signification statistique. En dessous, les relations observées risquent de provoquer de l’overfitting simplement par coïncidence !

REMARQUE : Les données sont disponibles dans le dataframe df.

Cet exercice fait partie du cours

<cours>Feature Engineering avec PySpark</cours>
Voir le cours

Instructions de l’exercice

  • En utilisant la boucle for fournie qui parcourt la liste des colonnes binaires, calculez la sum des valeurs de la colonne avec la fonction agg. Utilisez collect() pour exécuter immédiatement le calcul et stockez le résultat dans obs_count.
  • Comparez obs_count à obs_threshold ; l’instruction if doit être vraie si obs_count est inférieur ou égal à obs_threshold.
  • Supprimez les colonnes ajoutées à la liste cols_to_remove en utilisant drop(). Rappelez-vous que le * permet de décompacter la liste.
  • Affichez les dimensions initiale et finale des dataframes PySpark en utilisant count() pour le nombre d’enregistrements et len() sur df.columns ou new_df.columns pour obtenir le nombre de colonnes.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

obs_threshold = 30
cols_to_remove = list()
# Inspect first 10 binary columns in list
for col in binary_cols[0:10]:
  # Count the number of 1 values in the binary column
  obs_count = df.____({col: ____}).____()[0][0]
  # If less than our observation threshold, remove
  if ____ ____ ____:
    cols_to_remove.append(col)
    
# Drop columns and print starting and ending dataframe shapes
new_df = df.____(*____)

print('Rows: ' + str(df.____()) + ' Columns: ' + str(____(df.____)))
print('Rows: ' + str(new_df.____()) + ' Columns: ' + str(____(new_df.____)))
Modifier et exécuter le code