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>Instructions de l’exercice
- En utilisant la boucle
forfournie qui parcourt la liste des colonnes binaires, calculez lasumdes valeurs de la colonne avec la fonctionagg. Utilisezcollect()pour exécuter immédiatement le calcul et stockez le résultat dansobs_count. - Comparez
obs_countàobs_threshold; l’instructionifdoit être vraie siobs_countest inférieur ou égal àobs_threshold. - Supprimez les colonnes ajoutées à la liste
cols_to_removeen utilisantdrop(). 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 etlen()surdf.columnsounew_df.columnspour 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.____)))