Eliminare colonne con poche osservazioni
Dopo aver fatto molta feature engineering, è una buona idea fare un passo indietro e guardare cosa hai creato. Se hai usato tecniche automatiche sulle variabili categoriche come explode o One-Hot Encoding, potresti ritrovarti con centinaia di nuove feature binarie. Anche se la selezione delle feature meriterebbe un corso a parte, ci sono alcuni passaggi rapidi che puoi fare per ridurre la dimensionalità del tuo insieme di dati.
In questo esercizio, rimuoveremo le colonne che hanno meno di 30 osservazioni. 30 è un numero minimo comune di osservazioni per la significatività statistica. Con meno, le relazioni portano a overfitting per pura coincidenza!
NOTA: I dati sono disponibili nel dataframe df.
Questo esercizio fa parte del corso
Feature Engineering con PySpark
Istruzioni dell'esercizio
- Usando il
forfornito che itera sulla lista delle colonne binarie, calcola lasumdei valori nella colonna usando la funzioneagg. Usacollect()per eseguire subito il calcolo e salva il risultato inobs_count. - Confronta
obs_countconobs_threshold: l'istruzioneifdeve risultare vera seobs_countè minore o uguale aobs_threshold. - Rimuovi le colonne che sono state aggiunte alla lista
cols_to_removeusandodrop(). Ricorda che*consente di decomprimere la lista. - Stampa la dimensione iniziale e finale dei dataframe PySpark usando
count()per il numero di record elen()sudf.columnsonew_df.columnsper trovare il numero di colonne.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
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.____)))