Eliminación de datos

Ingeniería de características con PySpark

John Hogue

Lead Data Scientist, General Mills

¿Dónde puede fallar un dato?

  • {{1}} registrado/a mal
  • Eventos únicos
  • {{3}} con formato incorrecto
  • Duplicaciones
  • {{5}} ausente
  • No relevante

Dominos

Ingeniería de características con PySpark

Eliminar columnas

df.select(['NO', 'UNITNUMBER', 'CLASS']).show()
+----+----------+-----+
|  NO|UNITNUMBER|CLASS|
+----+----------+-----+
|   1|      null|   SF|
| 156|        A8|   SF|
| 157|       207|   SF|
| 158|      701G|   SF|
| 159|        36|   SF|

Varios campos no se necesitan para el análisis

  • 'NO': número de registro autogenerado
  • 'UNITNUMBER': dato irrelevante
  • 'CLASS': todo constante
Ingeniería de características con PySpark

Eliminar columnas

drop(*cols)

  • *cols: un nombre de columna o una lista de columnas a eliminar.
  • Devuelve un nuevo DataFrame que elimina las columnas indicadas
# Lista de columnas a eliminar
cols_to_drop = ['NO', 'UNITNUMBER', 'CLASS']

# Eliminar las columnas df = df.drop(*cols_to_drop)
Ingeniería de características con PySpark

Filtro de texto

  • where(condition)
    • condition: una columna de types.BooleanType o una cadena con expresión SQL.
    • Filtra el DataFrame donde la condición es verdadera
  • like(other)
    • other: un patrón SQL LIKE
    • Devuelve una columna booleana
  • ~
    • Negación (NOT)
df = df.where(~df['POTENTIALSHORTSALE'].like('Not Disclosed'))
Ingeniería de características con PySpark

Filtrado de valores atípicos

Filtra datos a tres desviaciones estándar (3σ) alrededor de la media (μ)

Distribución normal estándar

Ingeniería de características con PySpark

Ejemplo de filtrado por valor

# Calcular valores para filtrar
std_val = df.agg({'SALESCLOSEPRICE': 'stddev'}).collect()[0][0]
mean_val = df.agg({'SALESCLOSEPRICE': 'mean'}).collect()[0][0]

# Crear límites superior e inferior a (μ ± 3σ) hi_bound = mean_val + (3 * std_val) low_bound = mean_val - (3 * std_val)
# Usar where() para filtrar el DataFrame entre valores df = df.where((df['LISTPRICE'] < hi_bound) & (df['LISTPRICE'] > low_bound))
Ingeniería de características con PySpark

Eliminar NA o NULL

DataFrame.dropna()

  • how: 'any' o 'all'. Con 'any', elimina un registro si tiene algún null; con 'all', solo si todos sus valores son null.
  • thresh: int, por defecto None. Si se indica, elimina registros con menos de thresh valores no nulos. Anula how.
  • subset: lista opcional de columnas a considerar.
Ingeniería de características con PySpark

Eliminar NA o NULL

# Eliminar registros con valores NULL
df = df.dropna()

# Eliminar si LISTPRICE y SALESCLOSEPRICE son NULL df = df.dropna(how='all', subset['LISTPRICE', 'SALESCLOSEPRICE '])
# Eliminar registros donde al menos dos columnas tengan NULL df = df.dropna(thresh=2)
Ingeniería de características con PySpark

Eliminar duplicados

¿Qué es un duplicado?

  • Dos o más registros contienen exactamente la misma información
  • Tras eliminar columnas o unir conjuntos de datos, comprueba duplicados

dropDuplicates()

  • Se puede ejecutar sobre todo el DataFrame o una lista de columnas
  • En PySpark no hay orden para decidir qué registro se elimina
# Todo el DataFrame
df.dropDuplicates()

# Comprobar solo una lista de columnas df.dropDuplicates(['streetaddress'])
Ingeniería de características con PySpark

¡Vamos a practicar!

Ingeniería de características con PySpark

Preparing Video For Download...