Daten einlesen und organisieren
ms <- read.csv("data/zh_abschlüsse_mittelschulen.csv", 2)
colnames(ms)[1] <- "schule_sp" # Variablenname Kantonsschule x Schwerpunkt korrigieren
ms$schule_sp <- as.factor(ms$schule_sp) # schule_sp als factor speichern
ms_weiblich <- select(ms, schule_sp, weiblich_2011, weiblich_2012, weiblich_2013, weiblich_2014, weiblich_2015, weiblich_2016, weiblich_2017, weiblich_2018, weiblich_2019, weiblich_2020) # Datensatz erstellen nur mit w-Variablen
ms_weiblich[is.na(ms_weiblich)] = 0 # NAs mit 0 ersetzen
ms_weiblich <- pivot_longer(ms_weiblich, weiblich_2011:weiblich_2020, names_to = "jahr", values_to = "weiblich") # umwandeln in long format
ms_weiblich$jahr <- str_replace(ms_weiblich$jahr, "weiblich_", "") # Variable jahr säubern
# nun nochmals das Gleiche für die Männer
ms_maennlich <- select(ms, schule_sp, maennlich_2011, maennlich_2012, maennlich_2013, maennlich_2014, maennlich_2015, maennlich_2016, maennlich_2017, maennlich_2018, maennlich_2019, maennlich_2020)
ms_maennlich[is.na(ms_maennlich)] = 0
ms_maennlich <- pivot_longer(ms_maennlich, maennlich_2011:maennlich_2020, names_to = "jahr", values_to = "maennlich")
ms_maennlich$jahr <- str_replace(ms_maennlich$jahr, "maennlich_", "")
# Datensätze zusammenfügen
ms<- cbind(ms_weiblich, ms_maennlich)
ms <- ms[, -c(4,5)] # doppelte Variablen löschen
ms$alle <- ms$weiblich + ms$maennlich # Variable total berechnen
# NAs vs. echte Nullwerte manuell bereinigen
ms[ms == 0] <- NA
ms_change <- subset(ms, schule_sp %in% c("imlee_bg",
"imlee_mu",
"imlee_pam",
"limmattal_as",
"limmattal_bg",
"limmattal_mu",
"raemimng_mu",
"raemirg_ib",
"raemirg_as",
"rychenberg_fmat_ki",
"rychenberg_fmat_mt",
"rychenberg_fmat_ki",
"rychenberg_fms_mt",
"stadelhofen_as",
"uster_bg",
"uster_mu",
"uster_pam",
"wiedikon_bg",
"wetzikon_bg",
"buelach_as",
"buelach_bc",
"buelach_bg",
"buelach_mu",
"buelach_pam")) # betroffene Zeilen auswählen
ms_change$weiblich[is.na(ms_change$weiblich)] = 0 # NAs mit 0 ersetzen
ms_change$maennlich[is.na(ms_change$maennlich)] = 0
ms_keep <- ms[ !(ms$schule_sp %in% ms_change$schule_sp), ] # unbearbeitete Reihen isolieren
ms <- rbind(ms_change, ms_keep) # Datensätze wieder zusammenfügen
ms <- ms[order(ms$schule_sp, ms$jahr),] # Datensatz sortieren nach Name der Schule, Jahr
rownames(ms) = seq(length = nrow(ms)) # Reihennamen neu definieren
# Spezialfälle bzgl. NAs und 0 bereinigen
r_fmat_p <- which(ms$schule_sp == "rychenberg_fmat_p")
r_fmat_p
## [1] 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030
ms[1025, 4] <- 0
# FMS, BMS, HMS usw. ausschliessen --> nur noch Gymnasien
ms_gym <- subset(ms, !grepl("fmat|fms|bm1|bms|hms", schule_sp))
Abschlüsse insgesamt Männer vs. Frauen über die Zeit hinweg
ms_alle_schulen_gym <- ms_gym
ms_alle_schulen_gym <- filter(ms_alle_schulen_gym, !str_detect(schule_sp, ".*alle.*")) # alle Zeilen mit "alle_schulen" oder "..._alle" löschen
ms_alle_schulen_gym$schule <- str_extract(ms_alle_schulen_gym$schule_sp, ".*_") # Variable für die Schulen getrennt von den Schwerpunktfächern erstellen
ms_alle_schulen_gym$schule <- str_extract(ms_alle_schulen_gym$schule, "[a-z]+") # "_" vom Ende des Schule-strings löschen
ms_alle_schulen_gym <- select(ms_alle_schulen_gym, jahr, schule, weiblich, maennlich, alle) # unnötige Variablen löschen
ms_alle_schulen_gym <- mutate(ms_alle_schulen_gym, mean_weiblich_perc = weiblich/alle)
ms_alle_schulen_gym$jahr <- as.factor(ms_alle_schulen_gym$jahr)
ms_alle_schulen_gym <- pivot_longer(ms_alle_schulen_gym, cols = c(weiblich, maennlich), names_to = "geschlecht") # Long-Format wählen für die Grafik
ms_alle_schulen_gym <- group_by(ms_alle_schulen_gym, jahr, geschlecht) # Datensatz nach Jahr und Geschlecht gruppieren
ms_alle_schulen_gym <- summarise(ms_alle_schulen_gym, mean_abs = mean(value, na.rm = TRUE),
mean_weiblich_perc = mean(mean_weiblich_perc, na.rm = TRUE)) # Durchschnittliche Anzahl Abschlüsse nach Geschlecht pro Jahr berechnen
## `summarise()` has grouped output by 'jahr'. You can override using the `.groups` argument.
ms_alle_schulen_gym$mean_abs <- round(ms_alle_schulen_gym$mean_abs, digits = 0) # Durchschnittliche Anzahl Abschlüsse nach Geschlecht pro Jahr runden
ms_alle_schulen_gym$mean_weiblich_perc <- 100*round(ms_alle_schulen_gym$mean_weiblich_perc, digits = 2) # Geschlechteranteile runden und in Prozent anzeigen
ms_alle_schulen_gym$mean_weiblich_perc <- ifelse(ms_alle_schulen_gym$geschlecht == "weiblich", ms_alle_schulen_gym$mean_weiblich_perc, "") # Werte für Geschlecht = maennlich rauslöschen
ms_alle_schulen_gym$perc <- ifelse(ms_alle_schulen_gym$geschlecht == "weiblich", "%", "")
ms_alle_schulen_gym$mean_weiblich_perc <- str_c(ms_alle_schulen_gym$mean_weiblich_perc, "", ms_alle_schulen_gym$perc) # Prozentzeichen für Frauenanteile hinzufügen
zeit_gym <- ggplot(data = ms_alle_schulen_gym) +
aes(x = jahr, y = mean_abs,
fill = geschlecht,
label = mean_weiblich_perc) +
geom_bar(position = "fill",
stat = "identity") +
scale_y_continuous(labels = scales::percent_format(suffix = "%")) +
scale_fill_manual(name = "", labels = c("Männer", "Frauen"),
values = c("#00c4aa", "#8700f9")) +
geom_text(aes(label = mean_weiblich_perc),
position = "fill",
size = 3,
vjust = 1.3,
colour = "white",
family = "Corbel") +
geom_hline(yintercept = 0.5,
colour = "white",
linetype = "dashed") +
labs(title = "Der Frauenanteil der Maturitätsabschlüsse im Kanton Zürich bleibt stabil \n",
subtitle = "Frauenanteil aller Gymnasialabschlüsse im Kanton Zürich pro Jahr (2011-2020) \n",
x = "",
y = "Frauenanteil in Prozent",
caption = "Quelle: Bildungsstatistik Kanton Zürich") +
theme_jr() # plot definieren
zeit_gym #plotten
# ggsave("graphics/mean_frauen_nach_jahr_neu.png", plot = zeit_gym, width = 9, height = 6) # Plot speichern
Abschlüsse insgesamt Männer vs. Frauen nach Profil
ms_sp_gym <- ms_gym
ms_sp_gym <- ms_sp_gym[ !(ms_sp_gym$schule_sp == "alle_schulen"), ] # Zeilen "alle Schulen" löschen
ms_sp_gym$weiblich_perc <- (ms_sp_gym$weiblich / ms_sp_gym$alle) * 100 # Frauenanteil pro Jahr berechnen
ms_sp_gym <- group_by(ms_sp_gym, schule_sp) # nach schule_sp gruppieren
ms_sp_gym <- summarise(ms_sp_gym, mean_weiblich_perc = mean(weiblich_perc, na.rm = TRUE)) # Durchschnittlicher Frauenanteil 2011-2020 pro Schule berechnen
ms_sp_gym$sp <- str_extract(ms_sp_gym$schule_sp, "\\_.*") # Variable für die Schwerpunktfächer getrennt von der Schule erstellen
ms_sp_gym$sp <- str_extract(ms_sp_gym$sp, "[a-z].*") # "_" vom Anfang des SP-strings löschen
ms_sp_gym <- group_by(ms_sp_gym, sp) # new nach sp gruppieren
ms_sp_gym <- summarise(ms_sp_gym, mean_weiblich_perc = mean(mean_weiblich_perc, na.rm = TRUE)) # Durchschnittlicher Frauenanteil 2011-2020 pro Schwerpunktfach über alle Schulen hinweg berechnen
ms_sp_gym$sp <- factor(ms_sp_gym$sp, levels = ms_sp_gym$sp[order(ms_sp_gym$mean_weiblich_perc)]) # Ordnung für Plot anpassen
# Labels für plot definieren
levels(ms_sp_gym$sp) # Labels von sp
## [1] "pam" "wr" "bc" "as" "ib" "alle" "ns" "mu" "bg"
sp_labs <- c("Physik und Anwendungen \n der Mathematik", "Wirtschaft und Recht", "Biologie und Chemie", "Alte Sprachen", "International Baccalaureate", "Durchschnitt", "Neue Sprachen", "Musik", "Bildnerisches Gestalten")
levels(ms_sp_gym$sp) <- sp_labs
ms_sp_gym$mean_weiblich_perc <- round(ms_sp_gym$mean_weiblich_perc, digits = 0) # Frauenanteil runden
schwerpunkt_gym <- ggplot(data = ms_sp_gym) +
aes(x = sp, y = mean_weiblich_perc,
fill = sp) +
geom_col(size = 2) +
scale_y_continuous(breaks = c(0, 25, 50, 75, 100),
labels = c("0%", "25%", "50%", "75%", "100%"),
limits = c(0, 100)) +
scale_fill_manual(values = c("#8700f9","#8700f9","#8700f9","#8700f9","#8700f9","#cb6ae5","#8700f9","#8700f9","#8700f9")) +
geom_text(aes(label = paste0(mean_weiblich_perc, "%")),
size = 3.5,
vjust = -1.2,
family = "Corbel") +
geom_hline(yintercept = 50,
colour = "white",
linetype = "dashed") +
labs(title = "Im Schwerpunktfach Bildnerisches Gestalten ist der Frauenanteil am höchsten \n",
subtitle = "Durchschnittlicher Frauenanteil aller Gymnasialabschlüsse im Kanton Zürich nach Schwerpunktfach (2011-2020) \n",
x = "Schwerpunktfach",
y = "Frauenanteil in Prozent",
caption = "Quelle: Bildungsstatistik Kanton Zürich") +
theme_jr() +
theme(legend.position = "none",
axis.text.x = element_text(vjust = 1)) # plot definieren
schwerpunkt_gym #plotten
# ggsave("graphics/mean_frauen_nach_schwerpunkt_neu.png", plot = schwerpunkt_gym, width = 9, height= 6)
Abschlüsse insgesamt Männer vs. Frauen nach Schule und Profil
ms_schule_sp_gym <- ms_gym
ms_schule_sp_gym <- filter(ms_schule_sp_gym, !str_detect(schule_sp, ".*alle.*")) # alle Zeilen mit "alle_schulen" oder "..._alle" löschen
ms_schule_sp_gym$weiblich_perc <- (ms_schule_sp_gym$weiblich / ms_schule_sp_gym$alle) * 100 # Frauenanteil pro Jahr berechnen
ms_schule_sp_gym$sp <- str_extract(ms_schule_sp_gym$schule_sp, "\\_.*") # Variable für die Schwerpunktfächer getrennt von der Schule erstellen
ms_schule_sp_gym$sp <- str_extract(ms_schule_sp_gym$sp, "[a-z].*") # "_" vom Anfang des SP-strings löschen
ms_schule_sp_gym$schule <- str_extract(ms_schule_sp_gym$schule_sp, "[a-z]+_") # Variable für die Schulen getrennt von den Schwerpunktfächern erstellen
ms_schule_sp_gym$schule <- str_extract(ms_schule_sp_gym$schule, "[a-z]+") # "_" vom Schluss des Schule-strings löschen
ms_schule_sp_gym <- group_by(ms_schule_sp_gym, sp, schule) # nach sp und schule gruppieren
ms_schule_sp_gym <- summarise(ms_schule_sp_gym, mean_weiblich_perc = mean(weiblich_perc, na.rm = TRUE)) # Durchschnittlicher Frauenanteil pro Schwerpunktfach pro Schule (2011-2020) berechnen
## `summarise()` has grouped output by 'sp'. You can override using the `.groups` argument.
table(ms_schule_sp_gym$schule) # Labels von schule
##
## birch buelach buelrain enge freudenberg hopro
## 2 7 1 3 2 2
## hottingen imlee kme kuesnacht liceo limmattal
## 1 6 6 3 1 7
## nord raemilg raemimng raemirg rychenberg stadelhofen
## 7 3 4 3 2 5
## uster wetzikon wiedikon
## 6 7 4
facet_schule_labs <- c("KS Zürich Birch", "KS Zürcher Unterland", "KS Büelrain Winterthur", "KS Enge", "KS Freudenberg", "KS Hohe Promenade", "KS Hottingen", "KS Im Lee Winterthur", "KME", "KS Küsnacht", "Liceo Artistico", "KS Limmattal", "KS Zürich Nord", "LG Rämibühl", "MNG Rämibühl", "RG Rämibühl", "KS Rychenberg Winterthur", "KS Stadelhofen", "KS Uster", "KS Zürcher Oberland", "KS Wiedikon", "Durchschnitt") # Labels von schule
ms_schule_sp_gym$mean_weiblich_perc <- round(ms_schule_sp_gym$mean_weiblich_perc, digits = 0) # Frauenanteil runden
summary(ms_schule_sp_gym) # sp und schule sind noch keine factors
## sp schule mean_weiblich_perc
## Length:82 Length:82 Min. :14.00
## Class :character Class :character 1st Qu.:46.25
## Mode :character Mode :character Median :61.00
## Mean :58.99
## 3rd Qu.:73.00
## Max. :94.00
ms_schule_sp_gym$sp <-as.factor(ms_schule_sp_gym$sp) # Schwerpunkt als factor speichern
ms_schule_sp_gym$schule <-as.factor(ms_schule_sp_gym$schule) # Schule als factor speichern
levels(ms_schule_sp_gym$schule) <- facet_schule_labs # Labels von Schule anpassen
schnitte <- data.frame(c("as","bc","bg","ib","mu","ns","pam","wr"),
c("Durchschnitt", "Durchschnitt", "Durchschnitt", "Durchschnitt", "Durchschnitt", "Durchschnitt", "Durchschnitt", "Durchschnitt"),
c(58, 45, 84, 59, 71, 69, 23, 41))
names(schnitte) <- c("sp", "schule", "mean_weiblich_perc") # Zusätzliche Reihen für Durchschnittswerte pro Schwerpunktfach kreieren
ms_schule_sp_gym <- rbind(ms_schule_sp_gym, schnitte) # Beide Datensätze zusammenfügen
ms_schule_sp_gym <- ms_schule_sp_gym %>%
mutate(farbe = ifelse(mean_weiblich_perc > 49, "#60dcc3", "#8700f9")) # Variable für Einfärbungen im Plot ergänzen (umgekehrt wegen coord_flip-argument in ggplot)
ms_schule_sp_gym <- arrange(ms_schule_sp_gym, sp, mean_weiblich_perc)
ms_schule_sp_gym_1 <- filter(ms_schule_sp_gym, sp == "as" | sp == "bg" | sp == "mu" | sp == "ns") # zwei separate Datensätze für zwei Grafiken erstellen
ms_schule_sp_gym_1$sp<- as.factor(ms_schule_sp_gym_1$sp) # Schwerpunkt als factor speichern
ms_schule_sp_gym_1$sp <- droplevels(ms_schule_sp_gym_1$sp) # ungenutzte Levels löschen
ms_schule_sp_gym_1 <- ungroup(ms_schule_sp_gym_1) # Gruppierung nach Schwerpunkt aufheben
ms_schule_sp_gym_1 <- mutate(ms_schule_sp_gym_1, order = row_number()) # neue Variable kreieren für Ordnung im Plot
ms_schule_sp_gym_1 <- group_by(ms_schule_sp_gym_1, sp) # Gruppierung nach Schwerpunkt wiederherstellen
ms_schule_sp_gym_2 <- filter(ms_schule_sp_gym, sp == "bc" | sp == "ib" | sp == "pam" | sp == "wr")
ms_schule_sp_gym_2$sp<- as.factor(ms_schule_sp_gym_2$sp) # Schwerpunkt als factor speichern
ms_schule_sp_gym_2$sp <- droplevels(ms_schule_sp_gym_2$sp)
ms_schule_sp_gym_2 <- ungroup(ms_schule_sp_gym_2)
ms_schule_sp_gym_2 <- mutate(ms_schule_sp_gym_2, order = row_number())
## Labels für Plot definieren
# Labels von den Schwerpunkten
table(ms_schule_sp_gym_1$sp)
##
## as bg mu ns
## 16 11 13 19
facet_sp_labs_1 <- list("as" = "Alte Sprachen", "bg" = "Bildnerisches Gestalten", "mu" = "Musik", "ns" = "Neue Sprachen")
facet_sp_labs_2 <- list("bc" = "Biologie und Chemie", "ib" = "International Baccalaureate", "pam" = "Physik und Anwendungen \n der Mathematik", "wr" = "Wirtschaft und Recht")
facet_sp_labeller_1 <- function(variable,value){
return(facet_sp_labs_1[value])
}
facet_sp_labeller_2 <- function(variable,value){
return(facet_sp_labs_2[value])
}
# Datensätze für Datenbeschriftungen
ms_schule_sp_gym_lab_1 <- group_by(ms_schule_sp_gym_1, sp)
ms_schule_sp_gym_lab_1 <- filter(ms_schule_sp_gym_lab_1, mean_weiblich_perc == max(mean_weiblich_perc) | mean_weiblich_perc == min(mean_weiblich_perc) | schule == "Durchschnitt") # neuer sub-Datensatz für selektive Beschriftungen im Plot
ms_schule_sp_gym_lab_2 <- group_by(ms_schule_sp_gym_2, sp)
ms_schule_sp_gym_lab_2 <- filter(ms_schule_sp_gym_lab_2, mean_weiblich_perc == max(mean_weiblich_perc) | mean_weiblich_perc == min(mean_weiblich_perc) | schule == "Durchschnitt") # neuer sub-Datensatz für selektive Beschriftungen im Plot
## Grafiken
# Erste Grafik
schule_schwerpunkt_gym_1 <- ggplot(data = ms_schule_sp_gym_1) +
geom_segment(aes(x=order,
xend=order,
y=50,
yend=mean_weiblich_perc,
color = farbe)) +
geom_point(aes(x=order,
y=mean_weiblich_perc),
size = 2) +
geom_text(data=ms_schule_sp_gym_lab_1,
aes(x=order,
y=mean_weiblich_perc,
label=paste0(mean_weiblich_perc, "%"),
size = 0.1,
family = "Calibri",
hjust = ifelse(mean_weiblich_perc > 50, -0.3, 1.3))) +
facet_wrap(~sp,
labeller = facet_sp_labeller_1,
ncol = 2,
scales = "free") +
geom_hline(yintercept = 50,
colour = "dark grey",
linetype ="dashed") +
scale_y_continuous(breaks = c(0, 25, 50, 75, 100),
labels = c("0%", "25%", "50%", "75%", "100%"),
limits = c(0, 100)) +
labs(title = "An den neusprachlichen Gymnasien unterscheiden sich die Schülerinnenanteile um bis zu 39 Prozentpunkte \n",
subtitle = "Durchschnittlicher Frauenanteil aller Gymnasialabschlüsse im Kanton Zürich nach Schule und Schwerpunktfach (2011-2020) \n",
x = "",
y = " \n Frauenanteil in Prozent",
caption = "Quelle: Bildungsstatistik Kanton Zürich") +
scale_x_continuous(breaks = ms_schule_sp_gym_1$order,
labels = c(ms_schule_sp_gym_1$schule))+
coord_flip() +
theme_jr() +
theme(legend.position = "none",
axis.text.x = element_text(angle = 0,
hjust = 0.5),
axis.text.y = element_text(size = 12),
axis.title.x = element_text(vjust = -1),
plot.title = element_text(size = 18,
vjust = 3),
plot.subtitle = element_text(size = 14),
plot.caption = element_text(size = 12),
strip.background = element_rect(fill="#8700f9"),
strip.text = element_text(size = 12,
colour = 'white'))
## Warning: The labeller API has been updated. Labellers taking `variable` and
## `value` arguments are now deprecated. See labellers documentation.
schule_schwerpunkt_gym_1 # plotten
# ggsave("graphics/mean_frauen_nach_schwerpunkt_und_schule_1_neu.png", plot = schule_schwerpunkt_gym_1, height = 12, width = 14)
# Zweite Grafik
schule_schwerpunkt_gym_2 <- ggplot(data = ms_schule_sp_gym_2) +
geom_segment(aes(x=order,
xend=order,
y=50,
yend=mean_weiblich_perc,
color = farbe)) +
geom_point(aes(x=order,
y=mean_weiblich_perc),
size = 2) +
geom_text(data=ms_schule_sp_gym_lab_2,
aes(x=order,
y=mean_weiblich_perc,
label=paste0(mean_weiblich_perc, "%"),
size = 0.1,
family = "Calibri",
hjust = ifelse(mean_weiblich_perc > 50, -0.3, 1.3))) +
facet_wrap(~sp,
labeller = facet_sp_labeller_2,
ncol = 2,
scales = "free") +
geom_hline(yintercept = 50,
colour = "dark grey",
linetype ="dashed") +
scale_y_continuous(breaks = c(0, 25, 50, 75, 100),
labels = c("0%", "25%", "50%", "75%", "100%"),
limits = c(0, 100)) +
labs(title = "Nur die Kantonale Maturitätsschule für Erwachsene hat eine Frauenmehrheit im Schwerpunkt Biologie und Chemie \n",
subtitle = "Durchschnittlicher Frauenanteil aller Gymnasialabschlüsse im Kanton Zürich nach Schule und Schwerpunktfach (2011-2020) \n",
x = "",
y = " \n Frauenanteil in Prozent",
caption = "Quelle: Bildungsstatistik Kanton Zürich") +
scale_x_continuous(breaks = ms_schule_sp_gym_2$order,
labels = ms_schule_sp_gym_2$schule) +
coord_flip() +
theme_jr() +
theme(legend.position = "none",
axis.text.x = element_text(angle = 0,
hjust = 0.5),
axis.text.y = element_text(size = 12),
axis.title.x = element_text(vjust = -1),
plot.title = element_text(size = 18,
vjust = 3),
plot.subtitle = element_text(size = 14),
strip.background = element_rect(fill="#8700f9"),
strip.text = element_text(size = 12,
colour = 'white'))
## Warning: The labeller API has been updated. Labellers taking `variable` and
## `value` arguments are now deprecated. See labellers documentation.
schule_schwerpunkt_gym_2 # plotten
# ggsave("graphics/mean_frauen_nach_schwerpunkt_und_schule_2_neu.png", plot = schule_schwerpunkt_gym_2, height = 12, width = 14)