1.3 Ochutnávka vizualizace dat
Další část ochutnávky schopností jazyka R se týká vizualizace dat, tj. tvorby grafů. R je schopné vytvářet komplexní grafy v publikační kvalitě – a přitom velmi elegantně a snadno. Všechny grafy v tomto 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 nadale budeme pracovat s tabulkou diamonds. Nejdrive ze vseho by nas mohlo zajimat, jak caste jsou ruzne ceny diamantu. K tomuto ucelu se obvykle pouziva histogram, viz obrazek 1.5, vytvořený následujícím kódem:
Vysledek neni prekvapivy - cim vyssi cena, tim mene kamenu se za ni prodava. Zajimavejsi otazka vsak je, zda se ceny lisi podle kvality rezu kamene. Zde nam histogram nepomuze. Existuje vsak cela rada jinych moznosti. Prvni z nich je tzv. boxplot, viz obrazek 1.6. Výška každé krabice ukazuje mezikvartilovou vzdálenost, tlustá vodorovná čára mediánovou cenu a jednotlivé tečky odlehlá pozorování. Histogram byl vytvořen takto:
Vysledek je prekvapivy: zdaleka neplati, ze dokonalejsi rez znamena vyssi ceny. Mozna je to vsak tim, ze boxploty neukazuji cely tvar statistickeho rozdeleni, ale jen par vybranych charakteristik tohoto rozdeleni. Cele rozdeleni muzeme zobrazit napr. pomoci odhadu jadrove hustoty. Abychom mohli pozorovat rozdily mezi jednotlivymi typy rezu, castecne grafy hustot zpruhlednime, viz obrazek 1.7 vytvořený takto:
Nejzajimavejsi otazky se vsak vzdy tykaji vztahu mezi velicinami. Rekneme, ze nas napriklad zajima, jak souvisi cena kamene s jeho vahou. Takovy vztah dokaze pekne zobrazit scatter plot, viz obrazek 1.8. 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 nas ovsem zajimat, zda je vztah mezi cenou a vahou kamene stejny bez ohledu na barvu kamene. Abychom toho dosahli, musime do grafu pridat dalsi rozmer. Na prvni pohled se zda, ze budeme potrebovat trirozmerny graf. Takove grafy jsou vsak velmi neprehledne. R ma v zasobe neco lepsiho: umozni nam pridanim jednoho radku do predchoziho kodu rozdelit kameny do dilcich grafu, viz obrazek 1.9:
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()