EmpezarEmpieza gratis

Eliminar columnas con pocas observaciones

Después de hacer mucha ingeniería de características, viene bien dar un paso atrás y revisar lo que has creado. Si has usado técnicas automáticas en tus variables categóricas, como explotar o OneHot Encoding, puede que ahora tengas cientos de nuevas variables binarias. Aunque la selección de características daría para todo un curso, hay pasos rápidos que puedes aplicar para reducir la dimensionalidad de tu conjunto de datos.

En este ejercicio vamos a eliminar columnas que tengan menos de 30 observaciones. 30 es un mínimo habitual de observaciones para obtener significación estadística. Con menos que eso, las relaciones provocan overfitting por pura coincidencia.

NOTA: Los datos están disponibles en el dataframe df.

Este ejercicio forma parte del curso

Ingeniería de características con PySpark

Ver curso

Instrucciones del ejercicio

  • Usando el bucle for proporcionado que itera por la lista de columnas binarias, calcula la sum de los valores de la columna usando la función agg. Usa collect() para ejecutar el cálculo de inmediato y guarda los resultados en obs_count.
  • Compara obs_count con obs_threshold; la sentencia if debe ser verdadera si obs_count es menor o igual que obs_threshold.
  • Elimina las columnas que se hayan añadido a la lista cols_to_remove usando drop(). Recuerda que * permite desenvolver la lista.
  • Imprime la forma inicial y final de los dataframes de PySpark usando count() para el número de registros y len() sobre df.columns o new_df.columns para obtener el número de columnas.

ejercicio interactivo práctico

Prueba este ejercicio completando este código de ejemplo.

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.____)))
Editar y ejecutar código