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
Instrucciones del ejercicio
- Usando el bucle
forproporcionado que itera por la lista de columnas binarias, calcula lasumde los valores de la columna usando la funciónagg. Usacollect()para ejecutar el cálculo de inmediato y guarda los resultados enobs_count. - Compara
obs_countconobs_threshold; la sentenciaifdebe ser verdadera siobs_countes menor o igual queobs_threshold. - Elimina las columnas que se hayan añadido a la lista
cols_to_removeusandodrop(). 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 ylen()sobredf.columnsonew_df.columnspara 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.____)))