1.3 Ochutnávka vizualizace dat

Další část ochutnávky schopností jazyka R se týká tvorby grafů, tedy vizualizace dat. R je schopné vytvářet velmi kvalitní grafy v publikační kvalitě – a přitom velmi elegantně a snadno. Všechny grafy v totmo oddíle byly vytvořeny přímo v R nebyly nijak ručně upravovány. Do webové i PDF verze knihy je upravilo samo R.

I nadále budeme pracovat s datasetem diamonds. Nejdříve ze všeho by nás mohlo zajímat, jak časté jsou různé ceny diamantů. K tomuto účelu se obvykle používá histogram, viz obrázek 1.4.

diamonds %>%
    ggplot(aes(price)) +
    geom_histogram() +
    theme_bw()
Histogram rozdělení cen diamantů

Obrázek 1.4: Histogram rozdělení cen diamantů

Výsledek není překvapivý – čím vyšší cena, tím méně kamenů se za ni prodává. Zajímavější otázka však je, zda se ceny liší podle kvality řezu kamene. Zde nám histogram nepomůže. Existuje však celá řada jiných možností. První z nich je tzv. boxplot, viz obrázek 1.5. Výška každé krabice ukazuje mezikvartilovou vzdálenost, tlustá vodorovná čára mediánovou cenu a jednotlivé tečky odlehlá pozorování.

diamonds %>% 
    ggplot(aes(cut, price)) + 
    geom_boxplot() +
    theme_bw()
Porovnání rozdělení cen podle typu řezu pomocí boxplotů

Obrázek 1.5: Porovnání rozdělení cen podle typu řezu pomocí boxplotů

Výsledek je překvapivý: zdaleka neplatí, že dokonalejší řez znamená vyšší ceny. Možná je to však tím, že boxploty neukazují celý tvar statistického rozdělení, ale jen pár vybraných charakteristik tohoto rozdělení. Celé rozdělení můžme zobrazit např. pomocí odhadu jádrové hustoty rozdělení. Abychom mohli pozorovat rozdíly mezi jednotlivými typy řezů, částečně grafy hustot zprůhledníme, viz obrázek 1.6

diamonds %>% 
    ggplot(aes(price, fill = cut)) + 
    geom_density(alpha = 0.35) +
    theme_bw()
Porovnání rozdělení cen podle typu řezu pomocí odhadů jádrové hustoty

Obrázek 1.6: Porovnání rozdělení cen podle typu řezu pomocí odhadů jádrové hustoty

Nejzajímavější otázky se však vždy týkají vztahů mezi veličinami. Rekněme, že nás například zajímá, jak souvisí cena kamene s jeho váhou. Takový vztah dokáže pěkně zobrazit scatter plot, viz obrázek 1.7. Vlastní trend vztahu zobrazíme snadno přidáním regresní přímky. V tomto grafu navíc nebudeme líní a změníme nápisy v grafu do češtiny.

diamonds %>% 
    ggplot(aes(carat, price)) + 
    geom_point(alpha = 0.05) +
    geom_smooth(method = lm) +
    xlab("váha") + ylab("cena") +
    ylim(0, 20000) +
    theme_bw()
Vztah mezi váhou kamenů a jejich cenou

Obrázek 1.7: Vztah mezi váhou kamenů a jejich cenou

Mohlo by nás ovšem zajímat, zda je vztah mezi cenou a váhou kamene stejný bez ohledu na barvu kamene. Abychom toho dosáhli, musíme do grafu přidat další rozměr. Na první pohled se zdá, že budeme potřebovat třírozměrný graf. Takové grafy jsou však velmi nepřehledné. R má v zásobě něco lepšího: umožní nám přidáním jednoho řádku do předchozího kódu rozdělit kameny do dílčích grafů, viz obrázek 1.8:

diamonds %>% 
    ggplot(aes(carat, price)) + 
    geom_point(alpha = 0.05) +
    geom_smooth(method = lm) +
    facet_wrap(~ color) +
    xlab("váha") + ylab("cena") +
    ylim(0, 20000) +
    theme_bw()
Vztah mezi váhou kamenů a jejich cenou při kontrole o barvu kamenů

Obrázek 1.8: Vztah mezi váhou kamenů a jejich cenou při kontrole o barvu kamenů