Trabajo con datos faltantes

Ingeniería de características con PySpark

John Hogue

Lead Data Scientist, General Mills

¿Cómo se pierden los datos en la era digital?

Recopilación de datos

  • Sensores averiados

Reglas de almacenamiento de datos

  • 2017-01-01 vs January 1st, 2017

Unir datos dispares

  • Mensual a semanal

Faltantes intencionales

  • Cuestiones de privacidad

Faltante

Ingeniería de características con PySpark

Tipos de faltantes

Faltantes completamente al azar

  • Los datos faltantes son un subconjunto totalmente aleatorio

Faltantes al azar

  • Faltan condicionalmente al azar según otra observación

Faltantes no al azar

  • Faltan por la forma en que se recogen
Ingeniería de características con PySpark

Evaluación de valores faltantes

¿Cuándo eliminar filas con datos faltantes?

  • Los valores faltantes son raros
  • Completamente al azar

isNull()

  • Devuelve True si la expresión actual es null.
df.where(df['ROOF'].isNull()).count()
765
Ingeniería de características con PySpark

Gráficos de valores faltantes

# Import library
import seaborn as sns

# subset the dataframe sub_df = df.select(['ROOMAREA1'])
# sample the dataframe sample_df = sub_df.sample(False, .5, 4)
# Convert to Pandas DataFrame pandas_df = sample_df.toPandas()
# Plot it sns.heatmap(data=pandas_df.isnull())
Ingeniería de características con PySpark

Mapa de calor de faltantes

Mapa de calor de datos faltantes

Ingeniería de características con PySpark

Imputación de valores faltantes

Proceso para reemplazar valores faltantes

Basado en reglas

  • Valor según lógica de negocio

Basado en estadística

  • Usar media, mediana, etc.

Basado en modelos

  • Usar un modelo para predecir el valor
Ingeniería de características con PySpark

Imputación de valores faltantes

** fillna(value, subset=None)

  • value, el valor con el que reemplazar los faltantes
  • subset, la lista de columnas donde reemplazar faltantes
# Reemplazar valores faltantes por cero
df.fillna(0, subset=['DAYSONMARKET'])
# Reemplazar por la media de esa columna
col_mean = df.agg({'DAYSONMARKET': 'mean'}).collect()[0][0]
df.fillna(col_mean, subset=['DAYSONMARKET'])
Ingeniería de características con PySpark

¡Vamos a practicar!

Ingeniería de características con PySpark

Preparing Video For Download...