Excluindo dados

Feature Engineering com PySpark

John Hogue

Lead Data Scientist, General Mills

Onde os dados podem falhar?

  • {{1}} registrado incorretamente
  • Eventos únicos
  • Formatado incorretamente
  • Duplicações
  • {{5}} ausentes
  • Não relevante

Dominó

Feature Engineering com PySpark

Excluindo colunas

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

Vários campos não são necessários para a análise

  • 'NO' número de registro gerado automaticamente
  • 'UNITNUMBER' dado irrelevante
  • 'CLASS' constante em todos os registros
Feature Engineering com PySpark

Excluindo colunas

drop(*cols)

  • *cols – um nome de coluna ou lista de colunas para excluir.
  • Retorna um novo DataFrame removendo as colunas especificadas
# Lista de colunas para excluir
cols_to_drop = ['NO', 'UNITNUMBER', 'CLASS']

# Excluir as colunas df = df.drop(*cols_to_drop)
Feature Engineering com PySpark

Filtragem de texto

  • where(condition)
    • condition – uma Column de types.BooleanType ou uma string de expressão SQL.
    • Filtra o DataFrame onde a condição é verdadeira
  • like(other)
    • other – um padrão SQL LIKE
    • Retorna uma Column booleana
  • ~
    • O operador NOT
df = df.where(~df['POTENTIALSHORTSALE'].like('Not Disclosed'))
Feature Engineering com PySpark

Filtragem de outliers

Filtre dados a até três desvios-padrão (3σ) da média (μ)

Distribuição normal padrão

Feature Engineering com PySpark

Exemplo de filtragem por valor

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

# Criar limites superior e inferior de três desvios-padrão (μ ± 3σ) hi_bound = mean_val + (3 * std_val) low_bound = mean_val - (3 * std_val)
# Usar where() para filtrar o DataFrame entre os valores df = df.where((df['LISTPRICE'] < hi_bound) & (df['LISTPRICE'] > low_bound))
Feature Engineering com PySpark

Removendo NA's ou NULLs

DataFrame.dropna()

  • how: "any" ou "all". Se "any", remove o registro se tiver qualquer null. Se "all", remove apenas se todos os valores forem null.
  • thresh: int, padrão None. Se definido, remove registros com menos que thresh valores não nulos. Substitui o parâmetro how.
  • subset: lista opcional de nomes de colunas a considerar.
Feature Engineering com PySpark

Removendo NA's ou NULLs

# Remover registros com valores NULL
df = df.dropna()

# Remover registros se LISTPRICE e SALESCLOSEPRICE forem NULL df = df.dropna(how='all', subset['LISTPRICE', 'SALESCLOSEPRICE '])
# Remover registros onde pelo menos duas colunas têm NULL df = df.dropna(thresh=2)
Feature Engineering com PySpark

Removendo duplicados

O que é um duplicado?

  • Dois ou mais registros contêm exatamente as mesmas informações
  • Após excluir colunas ou juntar conjuntos de dados, verifique duplicados

dropDuplicates()

  • Pode rodar no DataFrame inteiro ou em uma lista de colunas
  • No PySpark não há ordem definida para qual registro é removido
# DataFrame inteiro
df.dropDuplicates()

# Verificar apenas uma lista de colunas df.dropDuplicates(['streetaddress'])
Feature Engineering com PySpark

Vamos praticar!

Feature Engineering com PySpark

Preparing Video For Download...