Gestionarea datelor lipsă

Curățarea datelor în baze de date PostgreSQL

Darryl Reeves, Ph.D.

Industry Assistant Professor, New York University

Date lipsă (un exemplu)

 ... |       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        | ...
 ... | ...              | ...   | ...                                          | ...

Reprezentări pentru valorile lipsă:

  • NULL (general)
  • '' - șir de caractere gol (folosit pentru coloane text)
Curățarea datelor în baze de date PostgreSQL

Cauze ale datelor lipsă

Ce cauzează datele lipsă? Puzzle negru cu o piesă lipsă

  • Imagine cu creierul uman în silueta unui cap eroare umană
  • Imagine cu roți dințate probleme sistemice
Curățarea datelor în baze de date PostgreSQL

Tipuri de date lipsă

Trei imagini cu tipurile de date, cu categoria și abrevierea listate

Curățarea datelor în baze de date PostgreSQL

Tipuri de date lipsă

Trei imagini cu tipurile de date, cu categoria, abrevierea și descrierea Missing Completely at Random

Curățarea datelor în baze de date PostgreSQL

Tipuri de date lipsă

Trei imagini cu tipurile de date, cu categoria, abrevierea și descrierea Missing at Random

Curățarea datelor în baze de date PostgreSQL

Tipuri de date lipsă

 ... |       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        | ...
 ... | ...              | ...   | ...                                          | ...
Curățarea datelor în baze de date PostgreSQL

Tipuri de date lipsă

Trei imagini cu tipurile de date, cu categoria, abrevierea și descrierea Missing Not at Random

Curățarea datelor în baze de date PostgreSQL

Identificarea datelor lipsă

SELECT
  *
FROM
  restaurant_inspection
WHERE
  score IS NULL;
SELECT
  COUNT(*)
FROM
  restaurant_inspection
WHERE
  score IS NULL;
Curățarea datelor în baze de date PostgreSQL

Identificarea datelor lipsă

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
Curățarea datelor în baze de date PostgreSQL

Corectarea datelor lipsă

  • Cea mai bună opțiune: localizați și adăugați valorile lipsă

    • Poate fi nefezabil
    • Poate să nu merite efortul
  • Furnizați o valoare (medie, mediană etc.)

  • Excludeți înregistrările

Curățarea datelor în baze de date PostgreSQL

Înlocuirea valorilor lipsă cu COALESCE()

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

SELECT
  name,
  COALESCE(score, -1),
  inspection_type
FROM
  restaurant_inspection;
Curățarea datelor în baze de date PostgreSQL

Înlocuirea valorilor lipsă cu 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        | ...
 ... | ...              | ...   | ...                                          | ...
Curățarea datelor în baze de date PostgreSQL

Să exersăm!

Curățarea datelor în baze de date PostgreSQL

Preparing Video For Download...