Inizia subitoInizia gratis

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

Visualizza corso

Istruzioni dell'esercizio

  • Usando il for fornito che itera sulla lista delle colonne binarie, calcola la sum dei valori nella colonna usando la funzione agg. Usa collect() per eseguire subito il calcolo e salva il risultato in obs_count.
  • Confronta obs_count con obs_threshold: l'istruzione if deve risultare vera se obs_count è minore o uguale a obs_threshold.
  • Rimuovi le colonne che sono state aggiunte alla lista cols_to_remove usando drop(). Ricorda che * consente di decomprimere la lista.
  • Stampa la dimensione iniziale e finale dei dataframe PySpark usando count() per il numero di record e len() su df.columns o new_df.columns per 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.____)))
Modifica ed esegui il codice