CommencezCommencez gratuitement

Supprimer les colonnes avec peu d'observations

Après beaucoup de feature engineering, il est bon de prendre du recul pour examiner ce que vous avez créé. Si vous avez utilisé des techniques d'automatisation sur vos variables catégorielles comme l'explosion ou le OneHot Encoding, vous pourriez maintenant vous retrouver avec des centaines de nouvelles variables binaires. La sélection de caractéristiques pourrait faire l'objet d'un cours complet, mais il existe quelques étapes rapides pour réduire la dimensionnalité de votre jeu de données.

Dans cet exercice, nous allons retirer les colonnes qui comptent moins de 30 observations. Trente est souvent considéré comme un minimum pour obtenir une signification statistique. En dessous de ce seuil, les relations mènent au surapprentissage par simple hasard !

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

Cette activité fait partie du cours

Ingénierie des caractéristiques avec PySpark

Voir le cours

Instructions de l’exercice

  • À l'aide de 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 enregistrez le résultat dans obs_count.
  • Comparez obs_count à obs_threshold; l'énoncé if doit être vrai 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écompresser la liste.
  • Affichez la forme 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