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()
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()
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()
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()
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()