Tratando dados ausentes

Limpeza de dados em bancos de dados PostgreSQL

Darryl Reeves, Ph.D.

Industry Assistant Professor, New York University

Dados ausentes (um exemplo)

 ... |       name       | score |               inspection_type                | ... 
 ----+------------------+-------+----------------------------------------------+-----
 ... | ...              | ...   | ...                                          | ...
 ... | SCHNIPPERS       | 27    | Cycle Inspection / Initial Inspection        | ...
 ... | ATOMIC WINGS     |       | Administrative Miscellaneous / Re-inspection | ...
 ... | WING LING        | 44    | Cycle Inspection / Initial Inspection        | ...
 ... | JUAN VALDEZ CAFE | 24    | Cycle Inspection / Initial Inspection        | ...
 ... | FULTON GRAND     | 22    | Cycle Inspection / Initial Inspection        | ...
 ... | ...              | ...   | ...                                          | ...

Representações de valores ausentes:

  • NULL (geral)
  • '' - string vazia (usada em colunas de texto)
Limpeza de dados em bancos de dados PostgreSQL

Causas de dados ausentes

O que causa dados ausentes? Quebra-cabeça preto com peça faltando

  • Imagem de um cérebro humano em um perfil de cabeça erro humano
  • Imagem de engrenagens problemas sistêmicos
Limpeza de dados em bancos de dados PostgreSQL

Tipos de dados ausentes

Três imagens dos diferentes tipos de dados com cada categoria e sigla listadas

Limpeza de dados em bancos de dados PostgreSQL

Tipos de dados ausentes

Três imagens dos diferentes tipos de dados com cada categoria e sigla listadas, com a descrição de Missing Completely at Random adicionada

Limpeza de dados em bancos de dados PostgreSQL

Tipos de dados ausentes

Três imagens dos diferentes tipos de dados com cada categoria e sigla listadas, com a descrição de Missing at Random adicionada

Limpeza de dados em bancos de dados PostgreSQL

Tipos de dados ausentes

 ... |       name       | score |               inspection_type                | ... 
 ----+------------------+-------+----------------------------------------------+-----
 ... | ...              | ...   | ...                                          | ...
 ... | SCHNIPPERS       | 27    | Cycle Inspection / Initial Inspection        | ...
 ... | ATOMIC WINGS     |       | Administrative Miscellaneous / Re-inspection | ...
 ... | WING LING        | 44    | Cycle Inspection / Initial Inspection        | ...
 ... | JUAN VALDEZ CAFE | 24    | Cycle Inspection / Initial Inspection        | ...
 ... | FULTON GRAND     | 22    | Cycle Inspection / Initial Inspection        | ...
 ... | ...              | ...   | ...                                          | ...
Limpeza de dados em bancos de dados PostgreSQL

Tipos de dados ausentes

Três imagens dos diferentes tipos de dados com cada categoria e sigla listadas, com a descrição de Missing Not at Random adicionada

Limpeza de dados em bancos de dados PostgreSQL

Identificando dados ausentes

SELECT
  *
FROM
  restaurant_inspection
WHERE
  score IS NULL;
SELECT
  COUNT(*)
FROM
  restaurant_inspection
WHERE
  score IS NULL;
Limpeza de dados em bancos de dados PostgreSQL

Identificando dados ausentes

SELECT
  inspection_type,
  COUNT(*) as count
FROM
  restaurant_inspection
WHERE
  score IS NULL
GROUP BY
  inspection_type
ORDER BY
  count DESC;
                  inspection_type                  | count 
 --------------------------------------------------+-------
 Administrative Miscellaneous / Initial Inspection |   104
 Smoke-Free Air Act / Initial Inspection           |    29
 Calorie Posting / Initial Inspection              |    22
 Administrative Miscellaneous / Re-inspection      |    22
 Trans Fat / Initial Inspection                    |    18
 Smoke-Free Air Act / Re-inspection                |     7
 Trans Fat / Re-inspection                         |     3
Limpeza de dados em bancos de dados PostgreSQL

Corrigindo dados ausentes

  • Melhor opção: localizar e adicionar os valores ausentes

    • Pode não ser viável
    • Pode não valer a pena
  • Fornecer um valor (média, mediana etc.)

  • Excluir registros

Limpeza de dados em bancos de dados PostgreSQL

Substituindo valores ausentes com COALESCE()

COALESCE(arg1, [arg2, ...])

SELECT
  name,
  COALESCE(score, -1),
  inspection_type
FROM
  restaurant_inspection;
Limpeza de dados em bancos de dados PostgreSQL

Substituindo valores ausentes com COALESCE()

 ... |       name       | score |               inspection_type                | ... 
 ----+------------------+-------+----------------------------------------------+-----
 ... | ...              | ...   | ...                                          | ...
 ... | SCHNIPPERS       | 27    | Cycle Inspection / Initial Inspection        | ...
 ... | ATOMIC WINGS     | -1    | Administrative Miscellaneous / Re-inspection | ...
 ... | WING LING        | 44    | Cycle Inspection / Initial Inspection        | ...
 ... | JUAN VALDEZ CAFE | 24    | Cycle Inspection / Initial Inspection        | ...
 ... | FULTON GRAND     | 22    | Cycle Inspection / Initial Inspection        | ...
 ... | ...              | ...   | ...                                          | ...
Limpeza de dados em bancos de dados PostgreSQL

Vamos praticar!

Limpeza de dados em bancos de dados PostgreSQL

Preparing Video For Download...