Dostal jsem pověření z nejvyšších míst vyrobit statistické zhodnocení dotazníků. A protože bytostně nemám rád Excel, našel jsem R a zkouším.
Udělal jsem data do CSV souboru a nahrál do R (RStudio)
> head(dotaznik.csv)
num type gender age height weight edu
1 1 H M 60 182 100 Vysokoškolské
2 2 H M 49 188 102 Vyučen/a
3 3 H M 61 176 75 Vyučen/a
4 4 H M 56 180 110 Střední
5 5 H M 47 180 95 Vysokoškolské
6 6 H M 48 178 95 Střední
Zkusíme vyrobit četnost vzdělání (edu) a potom ji ještě rozdělit podle pohlaví (gender).
> edu <- table(dotaznik.csv$edu)
> edu
Střední Vysokoškolské Vyšší odborné Vyučen/a
30 7 2 25
Základní
6
Máme tabulku, ale potřebujeme z ní frame
> fedu <- as.data.frame(edu)
> fedu
Var1 Freq
1 Střední 30
2 Vysokoškolské 7
3 Vyšší odborné 2
4 Vyučen/a 25
5 Základní 6
Přidáme relativní četnost (mean)
> fedu$mean <- fedu$Freq / sum(fedu$Freq)
> fedu
Var1 Freq mean
1 Střední 30 0.42857143
2 Vysokoškolské 7 0.10000000
3 Vyšší odborné 2 0.02857143
4 Vyučen/a 25 0.35714286
5 Základní 6 0.08571429
A teď na graf. Používáme ggplot2.
ggplot(fedu, aes(x=Var1, y=Freq)) + geom_bar(stat='identity')
Fajn. Ale chceme graf otočit
ggplot(fedu, aes(x=Var1, y=Freq)) + geom_bar(stat='identity') + coord_flip()
Teď ještě smazat popisek osy x a přepsat osu y.
ggplot(fedu, aes(x=Var1, y=Freq)) + geom_bar(stat='identity') +
coord_flip() +
xlab('Vzdělání') +
theme(axis.title.x = element_blank()) +
ggtitle('Dosažené vzdělání')
A finálně přidáme hodnoty frekvence do jednotlivých sloupců.
ggplot(fedu, aes(x=Var1, y=Freq)) +
geom_bar(stat='identity', position=position_dodge()) +
geom_text(aes(label=Freq), hjust=1.3, color="white",position = position_dodge(0.9), size=3.5) +
coord_flip() +
xlab('Vzdělání') +
theme(axis.title.x = element_blank()) +
ggtitle('Dosažené vzdělání')
A teď trochu komplexněji. Ještě to rozdělíme na muže a ženy..
> edu <- table(dotaznik.csv$gender, dotaznik.csv$edu)
> edu
Střední Vysokoškolské Vyšší odborné Vyučen/a Základní
M 10 4 2 17 1
Ž 20 3 0 8 5
> fedu <- as.data.frame(edu)
> fedu
Var1 Var2 Freq
1 M Střední 10
2 Ž Střední 20
3 M Vysokoškolské 4
4 Ž Vysokoškolské 3
5 M Vyšší odborné 2
6 Ž Vyšší odborné 0
7 M Vyučen/a 17
8 Ž Vyučen/a 8
9 M Základní 1
10 Ž Základní 5
a přidáme graf
> ggplot(fedu, aes(x=Var2, y=Freq, fill=Var1)) +
geom_bar(stat='identity', position=position_dodge()) +
geom_text(aes(label=Freq), hjust=1.6, color="white",position = position_dodge(0.9), size=3.5) +
coord_flip() +
xlab('Vzdělání') +
theme(axis.title.x = element_blank()) +
ggtitle('Dosažené vzdělání') +
labs(fill = 'Pohlaví')
A co když budeme chtít jeden bar, ale rozdělený podle hodnot?
# seridime podle Var2 a Freq
> library(plyr)
> fedu_s <- arrange(fedu, Var2, Freq)
> fedu_s
Var1 Var2 Freq
1 M Střední 10
2 Ž Střední 20
3 Ž Vysokoškolské 3
4 M Vysokoškolské 4
5 Ž Vyšší odborné 0
6 M Vyšší odborné 2
7 Ž Vyučen/a 8
8 M Vyučen/a 17
9 M Základní 1
10 Ž Základní 5
# a pridame souhrnny soucet, rozdeleny s kazdym jinym Var2
> fedu_s_sum <- ddply(fedu_s, 'Var2', transform, label_ypos=cumsum(Freq))
> fedu_s_sum
Var1 Var2 Freq label_ypos
1 M Střední 10 10
2 Ž Střední 20 30
3 Ž Vysokoškolské 3 3
4 M Vysokoškolské 4 7
5 Ž Vyšší odborné 0 0
6 M Vyšší odborné 2 2
7 Ž Vyučen/a 8 8
8 M Vyučen/a 17 25
9 M Základní 1 1
10 Ž Základní 5 6
A graf
ggplot(fedu_s_sum, aes(x=Var2, y=Freq, fill=Var1)) +
geom_bar(stat='identity') +
geom_text(aes(label=Freq, y=label_ypos), hjust=1.6, color="white", size=3.5) +
coord_flip() +
xlab('Vzdělání') +
theme(axis.title.x = element_blank()) +
ggtitle('Dosažené vzdělání') +
labs(fill = 'Pohlaví')