Design Patterns #1: Referenční integrita a chybějící hodnoty | Mňamka #18

Design Patterns - Máme je rádi

Kdo by popravdě neměl. Když třeba připravujeme raw data pro analýzu, taková sada best practices se sakra hodí! Ono v podstatě každý jednoduchý trik, který nám ulehčí práci je dost vítaný. Minimalizuje čas strávený uklízením nepořádku při práci s nekompletními daty nebo zpětně upravenými historickými daty. A navíc. Chytře připravená data usnadní tvorbu metrik a reportů třeba i méně zkušeným uživatelům a nám, datovým detektivům, pomohou odhalit nesrovnalosti na první pohled. 

Takže hurá do toho!

Referenční integrita

Referenční integrita je porušena v případě, kdy podřízená tabulka odkazuje na chybějící záznam v nadřízené tabulce (např. objednávka od zákazníka, který chybí v tabulce zákazníků).

Porušenou referenční integritu řešíme dvěma způsoby: 

Buď záznam z podřízené tabulky smažeme (typicky v datech o trafficu, kdy pár smazaných řádků neovlivní celkový trend) nebo chybějící záznam do nadřízené tabulky doplníme s atributem, že je chybějící nebo smazaný (typicky v transakčních datech, kde nás zajímá každá objednávka). Referenční integritu je vždy nutné vyřešit, abychom se vyhnuli nekonzistenci dat.

Chybějící hodnoty

Chybějící hodnoty v datech vždy označíme v závislosti na datovém typu. Pro prázdné stringy používáme v Bizztreatu ‘--empty--‘, pro chybějící datum ‘1970-01-01’. Obdobně řešíme doplnění chybějících záznamů při porušené referenční integritě. 

Proč? Na první pohled tak odhalíme nekompletní data. Pokud se třeba v grafu vývoje počtu objednávek objeví data z roku 1970, je pravděpodobné, že něco není v pořádku.

V závislosti na typu dat může doplněním dojít ke zkreslení různých metrik doplněné záznamy je třeba v takovém případě odfiltrovat (třeba měsíc s největším počtem objednávek přes všechny roky). Pokud v datech chybí fakty/metriky jako třeba cena, může být vhodnější použít NULLy. Nahradíme-li chybějící hodnoty nulou, dochází ke zkreslení v dalších výpočtech. V takovém případě se hodí doplněnou nulu označit, abychom mohli v datech filtrovat.

Proč je důležité vyřešit referenční integritu a doplnit chybějící hodnoty? 

Typické chyby, kterých se můžeme dopustit, v případě, že není vyřešena referenční integrita a chybějící hodnoty ukazuje následující příklad.

Při výpočtu sumy objednávek přes jednotlivé země spojíme tabulku ‘order_items’ a tabulku  ‘customers’ pomocí ‘INNER JOIN’.

Na první pohled není patrné, že v tabulce customers jeden zákazník chybí a proto suma počtu objednávek nesedí.

Vyřešíme-li referenční integritu pomocí doplnění chybějícího zákazníka, okamžitě poznáme, že data nejsou kompletní.

Nekompletní záznamy můžeme snadno přehlédnout i v případě chybějících atributů. 

Pokud nás zajímá třeba datum registrace prvního zákazníka, na první pohled není zřejmý žádný problém.

Pokud tabulku zákazníků vyčistíme doplněním chybějících hodnot, opět okamžitě rozpoznáme nekompletní data.

Dobré, že? Na závěr bych chtěla snad jen dodat, že pokud pořádně vyčistíme všechny tabulky, se kterými budeme dále pracovat, žádné chybějící hodnoty ani záznamy nám už nikdy neutečou.

Petra 

Máte k článku nějaké otázky nebo připomínky? Klidně mi napište, ráda to s Vámi proberu :-)

Petra Horáčková
datový detektiv
LinkedIn