1 Prepare Data

rm(list = ls())
setwd("~/Studium/Politikwissenschaft_Master/Forschungsseminar/Politischer Datenjournalismus/Blogpost/R")

Needed libraries for scraping & Dataframe

# library(httr)
# library(jsonlite)
# library(RSelenium)
# library(rvest)
# library(xml2)
# library(yaml)
# library(dplyr)
# library(gender)
# df <- setNames(data.frame(matrix(ncol = 9, nrow = 0)), 
#              c("name", "sex", "party", "id", "date", "type", "titel", "category", "rat"))

open rselenium

#remDr <- RSelenium::remoteDriver(port = 4444L, remoteServerAddr = "192.168.1.213")
# rD <- RSelenium::rsDriver(browser="chrome", port= 4805L, chromever = "96.0.4664.45", verbose = FALSE)
# remDr <- rD[["client"]]
# remDr$open(silent = TRUE)
# remDr$setTimeout(type = "implicit", milliseconds = 3000)
# base_url <- "https://www.parlament.ch/de/ratsbetrieb/suche-curia-vista/geschaeft?AffairId="

open Chrome & scrape Website parlament.ch

# start_id = # 20214331; 20204738; 20194641; 20184411; 20174324
# end_id =  # 20213000; 20203000; 20193000; 20183000; 20173979
# for (id in start_id:end_id) {

# url <- paste(base_url, id, sep = "")
# print(url)
# remDr$navigate(url)
  
    # Partei
# party <- NA
#  tryCatch(expr = {
#    party_element <- remDr$findElement(using = "xpath", "/html/body/form/div[4]/div/div/div[5]/div[1]/div[1]/div[2]/div/div/div/div[2]/div[1]/article/div[2]/div[1]/div/p[2]")
# party <- party_element$getElementText()
# }, error = function(e){})

  # Geschäft
# id_element <- remDr$findElement(using = "xpath", "/html/body/form/div[4]/div/div/div[5]/div[1]/div[1]/div[2]/div/div/div/div[2]/div[1]/article/div[1]/header/span[1]")
# id <- id_element$getElementText()

  # Datum
# date_element <- remDr$findElement(using = "xpath", "/html/body/form/div[4]/div/div/div[5]/div[1]/div[1]/div[2]/div/div/div/div[2]/div[1]/article/div[2]/div[3]/div")
# date <- date_element$getElementText()
  
  # Geschäftstyp
# type_element <- remDr$findElement(using = "xpath", "/html/body/form/div[4]/div/div/div[5]/div[1]/div[1]/div[2]/div/div/div/div[2]/div[1]/article/div[1]/header/span[2]")
# type <- type_element$getElementText()
  
  # Titel
# titel_element <- remDr$findElement(using = "xpath", 
#                            "/html/body/form/div[4]/div/div/div[5]/div[1]/div[1]/div[2]/div/div/div/div[2]/div[1]/article/div[1]/header/h2")
# titel <- titel_element$getElementText()
  
  # Kategorie
# category <- NA
# tryCatch(expr = {
#     category_element <- remDr$findElement(using = "xpath", "/html/body/form/div[4]/div/div/div[5]/div[1]/div[1]/div[2]/div/div/div/div[2]/div[5]/div/div[2]/div[2]/div/div[5]/p")
#      category <- category_element$getElementText()
#  }, error = function(e){})
  
  # Rat
#  rat_element <- remDr$findElement(using = "xpath",  "/html/body/form/div[4]/div/div/div[5]/div[1]/div[1]/div[2]/div/div/div/div[2]/div[1]/article/div[2]/div[4]/div")
#  rat <- rat_element$getElementText()
  
  # Name
# name <- NA
# tryCatch(expr = {
#   person_element <- remDr$findElement(using = "xpath",                            "/html/body/form/div[4]/div/div/div[5]/div[1]/div[1]/div[2]/div/div/div/div[2]/div[1]/article/div[2]/div[1]/div/a[2]")
#   person <- person_element$clickElement()
    
#   name_element <- remDr$findElement(using = "xpath", "/html/body/form/div[4]/div/div/div[4]/div[1]/div/div[2]/div/div/div/div[1]/div/div[1]/div[2]/h2")
#   name <- name_element$getElementText()
# }, error = function(e){})
  
  # Gender
# sex <- NA
# if (!is.na(name) ) {
#   name_unlist <- unlist(name)
#   nameSplit <- strsplit(name_unlist, split = " ")
#   firstname <- nameSplit[[1]] [[1]]
#   sex_2 <- gender(firstname, method = c("genderize"))
#   sex <- sex_2$gender} 
  
  
  # Data Frame - Step 1    
# a <- data.frame(name, sex, party, id, date, type, titel, category, rat)      
    
  # Naming the Data Frame - Step 2  
# names(a) <- c("name", "sex", "party", "id", "date", "type", "titel", "category", "rat")  
    
  # Using rbind() function to insert above observation  
# df <- rbind(df, a)
    
#}

Close Chrome

# remDr$closeServer()
# write.csv2(df,"df_vuk.csv", row.names = FALSE, fileEncoding = "UTF-8")

Insert Dataframe

path <-  "df_vuk.csv"
parlament <-read.csv(path,
                  sep=";",
                  encoding = "UTF-8",
                  stringsAsFactors = FALSE)

Remove all rows that are no person, that are duplicates or somehow scraped wrong

library(tidyr)
library(dplyr)
## 
## Attache Paket: 'dplyr'
## Die folgenden Objekte sind maskiert von 'package:stats':
## 
##     filter, lag
## Die folgenden Objekte sind maskiert von 'package:base':
## 
##     intersect, setdiff, setequal, union
parlament_2 <- parlament %>% 
  dplyr::rename(name = X.U.FEFF.name) %>%
  drop_na(name) %>%
  filter(rat == "Ständerat" | rat == "Nationalrat")
parlament_3 <- parlament_2[!duplicated(parlament_2$id),]

Turn date from character to date

parlament_3$date <- as.Date(parlament_3$date, "%d.%m.%Y")

Filter all name with NA gender

parlament_3[is.na(parlament_3$sex), 1]
##   [1] "Adèle Thorens Goumaz"  "Niklaus-Samuel Gugger" "Niklaus-Samuel Gugger"
##   [4] "Niklaus-Samuel Gugger" "Léonore Porchet"       "Léonore Porchet"      
##   [7] "Niklaus-Samuel Gugger" "Léonore Porchet"       "Niklaus-Samuel Gugger"
##  [10] "Niklaus-Samuel Gugger" "Adèle Thorens Goumaz"  "Irène Kälin"          
##  [13] "Léonore Porchet"       "Léonore Porchet"       "Adèle Thorens Goumaz" 
##  [16] "Léonore Porchet"       "Léonore Porchet"       "Léonore Porchet"      
##  [19] "Niklaus-Samuel Gugger" "Niklaus-Samuel Gugger" "Léonore Porchet"      
##  [22] "Léonore Porchet"       "Léonore Porchet"       "Léonore Porchet"      
##  [25] "Léonore Porchet"       "Léonore Porchet"       "Léonore Porchet"      
##  [28] "Niklaus-Samuel Gugger" "Irène Kälin"           "Niklaus-Samuel Gugger"
##  [31] "Irène Kälin"           "Léonore Porchet"       "Adèle Thorens Goumaz" 
##  [34] "Niklaus-Samuel Gugger" "Léonore Porchet"       "Léonore Porchet"      
##  [37] "Léonore Porchet"       "Irène Kälin"           "Léonore Porchet"      
##  [40] "Niklaus-Samuel Gugger" "Niklaus-Samuel Gugger" "Léonore Porchet"      
##  [43] "Irène Kälin"           "Adèle Thorens Goumaz"  "Léonore Porchet"      
##  [46] "Adèle Thorens Goumaz"  "Léonore Porchet"       "Irène Kälin"          
##  [49] "Léonore Porchet"       "Léonore Porchet"       "Niklaus-Samuel Gugger"
##  [52] "Adèle Thorens Goumaz"  "Niklaus-Samuel Gugger" "Léonore Porchet"      
##  [55] "Léonore Porchet"       "Léonore Porchet"       "Léonore Porchet"      
##  [58] "Léonore Porchet"       "Adèle Thorens Goumaz"  "Léonore Porchet"      
##  [61] "Léonore Porchet"       "Léonore Porchet"       "Niklaus-Samuel Gugger"
##  [64] "Niklaus-Samuel Gugger" "Niklaus-Samuel Gugger" "Niklaus-Samuel Gugger"
##  [67] "Niklaus-Samuel Gugger" "Irène Kälin"           "Léonore Porchet"      
##  [70] "Irène Kälin"           "Niklaus-Samuel Gugger" "Niklaus-Samuel Gugger"
##  [73] "Niklaus-Samuel Gugger" "Niklaus-Samuel Gugger" "Niklaus-Samuel Gugger"
##  [76] "Irène Kälin"           "Adèle Thorens Goumaz"  "Niklaus-Samuel Gugger"
##  [79] "Niklaus-Samuel Gugger" "Adèle Thorens Goumaz"  "Irène Kälin"          
##  [82] "Irène Kälin"           "Irène Kälin"           "Niklaus-Samuel Gugger"
##  [85] "Irène Kälin"           "Adèle Thorens Goumaz"  "Adèle Thorens Goumaz" 
##  [88] "Adèle Thorens Goumaz"  "Irène Kälin"           "Irène Kälin"          
##  [91] "Niklaus-Samuel Gugger" "Niklaus-Samuel Gugger" "Irène Kälin"          
##  [94] "Irène Kälin"           "Adèle Thorens Goumaz"  "Irène Kälin"          
##  [97] "Niklaus-Samuel Gugger" "Niklaus-Samuel Gugger" "Irène Kälin"          
## [100] "Irène Kälin"           "Adèle Thorens Goumaz"  "Adèle Thorens Goumaz" 
## [103] "Adèle Thorens Goumaz"  "Irène Kälin"           "Irène Kälin"          
## [106] "Adèle Thorens Goumaz"  "Jacques-André Maire"   "Irène Kälin"          
## [109] "Irène Kälin"           "Irène Kälin"           "Irène Kälin"          
## [112] "Irène Kälin"           "Irène Kälin"           "Niklaus-Samuel Gugger"
## [115] "Irène Kälin"           "Niklaus-Samuel Gugger" "Adèle Thorens Goumaz" 
## [118] "Adèle Thorens Goumaz"  "Adèle Thorens Goumaz"  "Adèle Thorens Goumaz" 
## [121] "Irène Kälin"           "Irène Kälin"           "Irène Kälin"          
## [124] "Irène Kälin"           "Irène Kälin"           "Irène Kälin"          
## [127] "Adèle Thorens Goumaz"  "Irène Kälin"           "Jacques-André Maire"  
## [130] "Irène Kälin"           "Irène Kälin"           "Adèle Thorens Goumaz" 
## [133] "Irène Kälin"           "Niklaus-Samuel Gugger" "Niklaus-Samuel Gugger"
## [136] "Adèle Thorens Goumaz"  "Irène Kälin"           "Adèle Thorens Goumaz"

Names that have no gender: - Adèle Thorens Goumaz (f) - Niklaus-Samuel Gugger (m) - Léonore Porchet (f) - Irène Kälin (f) - Jacques-André Maire (m) - Filippo Lombardi (m)

Attribute gender to names

parlament_3$sex<- ifelse(parlament_3$name == "Adèle Thorens Goumaz", "female",
                         ifelse(parlament_3$name == "Niklaus-Samuel Gugger", "male",
                                ifelse(parlament_3$name == "Léonore Porchet", "female",
                                       ifelse(parlament_3$name == "Irène Kälin", "female",
                                              ifelse(parlament_3$name == "Jacques-André Maire", "male",
                                                     ifelse(parlament_3$name == "   
Filippo Lombardi", "male", parlament_3$sex))))))

Categories

parlament_3$Gesundheit<- ifelse(grepl("Gesundheit", parlament_3$category), "yes", "no")
parlament_3$Wirtschaft<- ifelse(grepl("Wirtschaft", parlament_3$category), "yes", "no")
parlament_3$Umwelt<- ifelse(grepl("Umwelt", parlament_3$category), "yes", "no")
parlament_3$Finanzwesen<- ifelse(grepl("Finanzwesen", parlament_3$category), "yes", "no")
parlament_3$Soziale_Fragen<- ifelse(grepl("Soziale Fragen", parlament_3$category), "yes", "no")
parlament_3$Medien_Kommunik<- ifelse(grepl("Medien und Kommunikation", parlament_3$category), "yes", "no")
parlament_3$Beschäft_Arbeit<- ifelse(grepl("Beschäftigung und Arbeit", parlament_3$category), "yes", "no")
parlament_3$Staatspolitik<- ifelse(grepl("Staatspolitik", parlament_3$category), "yes", "no")
parlament_3$Sicherheitspolitik<- ifelse(grepl("Sicherheitspolitik", parlament_3$category), "yes", "no")
parlament_3$Landwirtschaft<- ifelse(grepl("Landwirtschaft", parlament_3$category), "yes", "no")
parlament_3$Menschenrechte<- ifelse(grepl("Menschenrechte", parlament_3$category), "yes", "no")
parlament_3$Strafrecht<- ifelse(grepl("Strafrecht", parlament_3$category), "yes", "no")
parlament_3$Kultur<- ifelse(grepl("Kultur", parlament_3$category), "yes", "no")
parlament_3$Parlament<- ifelse(grepl("Parlament", parlament_3$category), "yes", "no")
parlament_3$Wissen_Forsch<- ifelse(grepl("Wissenschaft und Forschung", parlament_3$category), "yes", "no")
parlament_3$Sozialer_Schutz<- ifelse(grepl("Sozialer Schutz", parlament_3$category), "yes", "no")
parlament_3$Raum_Wohnung<- ifelse(grepl("Raumplanung und Wohnungswesen", parlament_3$category), "yes", "no")
parlament_3$Inter_Politik<- ifelse(grepl("Internationale Politik", parlament_3$category), "yes", "no")
parlament_3$Verkehr<- ifelse(grepl("Verkehr", parlament_3$category), "yes", "no")
parlament_3$Steuer<- ifelse(grepl("Steuer", parlament_3$category), "yes", "no")
parlament_3$Zivilrecht<- ifelse(grepl("Zivilrecht", parlament_3$category), "yes", "no")
parlament_3$Energie<- ifelse(grepl("Energie", parlament_3$category), "yes", "no")
parlament_3$Migration<- ifelse(grepl("Migration", parlament_3$category), "yes", "no")
parlament_3$Europapolitik<- ifelse(grepl("Europapolitik", parlament_3$category), "yes", "no")
parlament_3$Bildung<- ifelse(grepl("Bildung", parlament_3$category), "yes", "no")
parlament_3$Recht_Allg<- ifelse(grepl("Recht Allgemein", parlament_3$category), "yes", "no")

Separate by house (Rat)

SR <- filter(parlament_3, rat == "Ständerat")
NR <- filter (parlament_3, rat == "Nationalrat")

1.1 Nationalrat

Separate before and after elections 2019 (start of new legislature: 02.12.2019)

NR_before <- filter(NR, date <= "2019-12-01")
NR_after <- filter(NR, date >= "2019-12-02")

1.1.1 Barplot - Handed in items of business

Calculate percentage of handed in items by gender

NR_barplot_item <- c(100/nrow(NR_before)*
                 nrow(NR_before[NR_before$sex == "female",]),
                 100/nrow(NR_before)*
                 nrow(NR_before[NR_before$sex == "male",]),
                 100/nrow(NR_after)*
                 nrow(NR_after[NR_after$sex == "female",]),
                 100/nrow(NR_after)*
                 nrow(NR_after[NR_after$sex == "male",]))

gender <- c("weiblich", "männlich")

time <- c("before", "before", "after", "after")

NR_barplot_df <- data.frame(gender, time, NR_barplot_item)
NR_barplot_df$time_2 = factor(NR_barplot_df$time, levels = c("before", "after"), ordered = TRUE)

# NR_barplot_df2 <- tidyr::gather(NR_barplot_df, time, item, amount, -gender)

Plot

library(ggplot2)
barplot_item_NR <-ggplot(data = NR_barplot_df, aes(x=gender, y=NR_barplot_item, fill = time_2)) +
  geom_bar(stat="identity", position = "dodge") +
  theme_classic() + 
  theme(plot.title=element_text(size=25), axis.text=element_text(size=15),
        axis.title=element_text(size=15), legend.text=element_text(size=15), 
        legend.title=element_text(size=15)) +
  labs(title="Eingereichte Geschäfte vor und nach 2019",
        y ="Eingereichte Geschäfte (%)", x = "Geschlecht", caption = "Datenquelle: parlament.ch") +
  scale_fill_manual(values = c("cadetblue3", "#93003a"), name = "Zeitpunkt", labels = c("vor der
Wahl 2019", 
                                                                                        "nach der 
Wahl 2019"))
barplot_item_NR

ggsave(barplot_item_NR, filename = "Plots/barplot_item_NR.png", height = 0.6*16, width = 0.9*9)

1.1.2 Barplot elected women

% Frauen im NR vor 2019: 32% % Frauen im NR nach 2019: 42%

NR_barplot_elec <- c(32, 68, 42, 58)


NR_elec_df <- data.frame(gender, time, NR_barplot_elec)
NR_elec_df$time_2 = factor(NR_elec_df$time, levels = c("before", "after"), ordered = TRUE)

Plot

barplot_elec_NR <-ggplot(data = NR_elec_df, aes(x=gender, y=NR_barplot_elec, fill = time_2)) +
  geom_bar(stat="identity", position = "dodge") +
  theme_classic() + 
  theme(plot.title=element_text(size=25), axis.text=element_text(size=15),
        axis.title=element_text(size=15), legend.text=element_text(size=15), 
        legend.title=element_text(size=15)) +
  labs(title="Gewählte Nationalrät*innen nach Geschlecht",
        y ="Prozent", x = "Geschlecht", caption = "Datenquelle: parlament.ch") +
  scale_fill_manual(values = c("cadetblue3", "#93003a"), name = "Wahl", labels = c("Wahl 2015", "Wahl 2019"))
barplot_elec_NR

ggsave(barplot_elec_NR, filename = "Plots/barplot_elec_NR.png", height = 0.6*16, width = 0.9*9)

1.1.3 List/table/barplot - Top-Parliamentarian (handed in items of business)

NR_be_f <- filter(NR_before, sex == "female")
NR_af_f <- filter(NR_after, sex == "female")

NR_be_m <- filter(NR_before, sex == "male")
NR_af_m <- filter(NR_after, sex == "male")

NR_be_f_df <-data.frame(head(sort(table(NR_be_f$name), decreasing = TRUE)))
NR_af_f_df <-data.frame(head(sort(table(NR_af_f$name), decreasing = TRUE)))
NR_be_m_df <-data.frame(head(sort(table(NR_be_m$name), decreasing = TRUE)))
NR_af_m_df <-data.frame(head(sort(table(NR_af_m$name), decreasing = TRUE)))

NR_be_f_df$rank <- seq.int(nrow(NR_be_f_df))
NR_be_f_df <- rename(NR_be_f_df, women_before = Var1, f_be_freq = Freq)
NR_af_f_df$rank <- seq.int(nrow(NR_af_f_df))
NR_af_f_df <- rename(NR_af_f_df, women_after = Var1, f_af_freq = Freq)
NR_be_m_df$rank <- seq.int(nrow(NR_be_m_df))
NR_be_m_df <- rename(NR_be_m_df, men_before = Var1, m_be_freq = Freq)
NR_af_m_df$rank <- seq.int(nrow(NR_af_m_df))
NR_af_m_df <- rename(NR_af_m_df, men_after = Var1, m_af_freq = Freq)

NR_ranking_1 <- merge(NR_be_f_df, NR_af_f_df, by= "rank")
NR_ranking_2 <- merge(NR_ranking_1, NR_be_m_df, by= "rank")
NR_ranking <- merge(NR_ranking_2, NR_af_m_df, by = "rank")

Make nice table

library(reactable)
## Warning: Paket 'reactable' wurde unter R Version 4.1.2 erstellt
NR_ranking_table <- reactable(NR_ranking,  
          columns = list(
    rank = colDef(name = "Rang", align = "center"),
    women_before = colDef(name = "Frauen (vor der Wahl 2019)"),
    f_be_freq = colDef(name = "Anzahl eingereichte Geschäfte", align = "center"),
    women_after = colDef(name = "Frauen (nach der Wahl 2019)"),
    f_af_freq = colDef(name = "Anzahl eingereichte Geschäfte", align = "center"),
    men_before = colDef(name = "Männer (vor der Wahl 2019)"),
    m_be_freq = colDef(name = "Anzahl eingereichte Geschäfte", align = "center"),
    men_after = colDef(name = "Männer (nach der Wahl 2019)"),
    m_af_freq = colDef(name = "Anzahl eingereichte Geschäfte", align = "center")))
NR_ranking_table

1.1.4 Dumbbell - Categories

Calculate percentage of women for each category before and after 2019

Soziale_Fragen_before <- filter(NR_before, Soziale_Fragen == "yes")
Soziale_Fragen_after <- filter(NR_after, Soziale_Fragen == "yes")
Sozialer_Schutz_before <- filter(NR_before, Sozialer_Schutz == "yes")
Sozialer_Schutz_after <- filter(NR_after, Sozialer_Schutz == "yes")
Migration_before <- filter(NR_before, Migration == "yes")
Migration_after <- filter(NR_after, Migration == "yes")
Beschäft_Arbeit_before <- filter(NR_before, Beschäft_Arbeit == "yes")
Beschäft_Arbeit_after <- filter(NR_after, Beschäft_Arbeit == "yes")
Gesundheit_before <- filter(NR_before, Gesundheit == "yes")
Gesundheit_after <- filter(NR_after, Gesundheit == "yes")
Menschenrechte_before <- filter(NR_before, Menschenrechte == "yes")
Menschenrechte_after <- filter(NR_after, Menschenrechte == "yes")
Bildung_before <- filter(NR_before, Bildung == "yes")
Bildung_after <- filter(NR_after, Bildung == "yes")
Kultur_before <- filter(NR_before, Kultur == "yes")
Kultur_after <- filter(NR_after, Kultur == "yes")
Umwelt_before <- filter(NR_before, Umwelt == "yes")
Umwelt_after <- filter(NR_after, Umwelt == "yes")
Raum_Wohnung_before <- filter(NR_before, Raum_Wohnung == "yes")
Raum_Wohnung_after <- filter(NR_after, Raum_Wohnung == "yes")
Energie_before <- filter(NR_before, Energie == "yes")
Energie_after <- filter(NR_after, Energie == "yes")
Medien_Kommunik_before <- filter(NR_before, Medien_Kommunik == "yes")
Medien_Kommunik_after <- filter(NR_after, Medien_Kommunik == "yes")
Verkehr_before <- filter(NR_before, Verkehr == "yes")
Verkehr_after <- filter(NR_after, Verkehr == "yes")
Wissen_Forsch_before <- filter(NR_before, Wissen_Forsch == "yes")
Wissen_Forsch_after <- filter(NR_after, Wissen_Forsch == "yes")
Europapolitik_before <- filter(NR_before, Europapolitik == "yes")
Europapolitik_after <- filter(NR_after, Europapolitik == "yes")
Parlament_before <- filter(NR_before, Parlament == "yes")
Parlament_after <- filter(NR_after, Parlament == "yes")
Inter_Politik_before <- filter(NR_before, Inter_Politik == "yes")
Inter_Politik_after <- filter(NR_after, Inter_Politik == "yes")
Staatspolitik_before <- filter(NR_before, Staatspolitik == "yes")
Staatspolitik_after <- filter(NR_after, Staatspolitik == "yes")
Zivilrecht_before <- filter(NR_before, Zivilrecht == "yes")
Zivilrecht_after <- filter(NR_after, Zivilrecht == "yes")
Strafrecht_before <- filter(NR_before, Strafrecht == "yes")
Strafrecht_after <- filter(NR_after, Strafrecht == "yes")
Recht_Allg_before <- filter(NR_before, Recht_Allg == "yes")
Recht_Allg_after <- filter(NR_after, Recht_Allg == "yes")
Landwirtschaft_before <- filter(NR_before, Landwirtschaft == "yes")
Landwirtschaft_after <- filter(NR_after, Landwirtschaft == "yes")
Sicherheitspolitik_before <- filter(NR_before, Sicherheitspolitik == "yes")
Sicherheitspolitik_after <- filter(NR_after, Sicherheitspolitik == "yes")
Steuer_before <- filter(NR_before, Steuer == "yes")
Steuer_after <- filter(NR_after, Steuer == "yes")
Wirtschaft_before <- filter(NR_before, Wirtschaft == "yes")
Wirtschaft_after <- filter(NR_after, Wirtschaft == "yes")
Finanzwesen_before <- filter(NR_before, Finanzwesen == "yes")
Finanzwesen_after <- filter(NR_after, Finanzwesen == "yes")

Vorher_NR <- c(100/nrow(Soziale_Fragen_before)*
                 nrow(Soziale_Fragen_before[Soziale_Fragen_before$sex == "female",]), 
                       100/nrow(Sozialer_Schutz_before)*
                 nrow(Sozialer_Schutz_before[Sozialer_Schutz_before$sex == "female",]),
                       100/nrow(Migration_before)*
                 nrow(Migration_before[Migration_before$sex == "female",]), 
                       100/nrow(Beschäft_Arbeit_before)*
                 nrow(Beschäft_Arbeit_before[Beschäft_Arbeit_before$sex == "female",]),
                       100/nrow(Gesundheit_before)*
                 nrow(Gesundheit_before[Gesundheit_before$sex == "female",]), 
                       100/nrow(Menschenrechte_before)*
                 nrow(Menschenrechte_before[Menschenrechte_before$sex == "female",]),
                       100/nrow(Bildung_before)*
                 nrow(Bildung_before[Bildung_before$sex == "female",]), 
                       100/nrow(Kultur_before)*
                 nrow(Kultur_before[Kultur_before$sex == "female",]),
                       100/nrow(Umwelt_before)*
                 nrow(Umwelt_before[Umwelt_before$sex == "female",]),
                       100/nrow(Raum_Wohnung_before)*
                 nrow(Raum_Wohnung_before[Raum_Wohnung_before$sex == "female",]), 
                       100/nrow(Energie_before)*
                 nrow(Energie_before[Energie_before$sex == "female",]), 
                       100/nrow(Medien_Kommunik_before)*
                 nrow(Medien_Kommunik_before[Medien_Kommunik_before$sex == "female",]),
                       100/nrow(Verkehr_before)*
                 nrow(Verkehr_before[Verkehr_before$sex == "female",]), 
                       100/nrow(Wissen_Forsch_before)*
                 nrow(Wissen_Forsch_before[Wissen_Forsch_before$sex == "female",]),
                       100/nrow(Europapolitik_before)*
                 nrow(Europapolitik_before[Europapolitik_before$sex == "female",]), 
                       100/nrow(Parlament_before)*
                 nrow(Parlament_before[Parlament_before$sex == "female",]),
                       100/nrow(Inter_Politik_before)*
                 nrow(Inter_Politik_before[Inter_Politik_before$sex == "female",]), 
                       100/nrow(Staatspolitik_before)*
                 nrow(Staatspolitik_before[Staatspolitik_before$sex == "female",]),
                       100/nrow(Zivilrecht_before)*
                 nrow(Zivilrecht_before[Zivilrecht_before$sex == "female",]), 
                       100/nrow(Strafrecht_before)*
                 nrow(Strafrecht_before[Strafrecht_before$sex == "female",]),
                       100/nrow(Recht_Allg_before)*
                 nrow(Recht_Allg_before[Recht_Allg_before$sex == "female",]), 
                       100/nrow(Landwirtschaft_before)*
                 nrow(Landwirtschaft_before[Landwirtschaft_before$sex == "female",]),
                       100/nrow(Sicherheitspolitik_before)*
                 nrow(Sicherheitspolitik_before[Sicherheitspolitik_before$sex == "female",]), 
                       100/nrow(Steuer_before)*
                 nrow(Steuer_before[Steuer_before$sex == "female",]),
                       100/nrow(Wirtschaft_before)*
                 nrow(Wirtschaft_before[Wirtschaft_before$sex == "female",]),
                       100/nrow(Finanzwesen_before)*
                 nrow(Finanzwesen_before[Finanzwesen_before$sex == "female",]))

Nachher_NR <- c(100/nrow(Soziale_Fragen_after)*
                  nrow(Soziale_Fragen_after[Soziale_Fragen_after$sex == "female",]), 
                       100/nrow(Sozialer_Schutz_after)*
                  nrow(Sozialer_Schutz_after[Sozialer_Schutz_after$sex == "female",]),
                       100/nrow(Migration_after)*
                  nrow(Migration_after[Migration_after$sex == "female",]), 
                       100/nrow(Beschäft_Arbeit_after)*
                  nrow(Beschäft_Arbeit_after[Beschäft_Arbeit_after$sex == "female",]),
                       100/nrow(Gesundheit_after)*
                  nrow(Gesundheit_after[Gesundheit_after$sex == "female",]), 
                       100/nrow(Menschenrechte_after)*
                  nrow(Menschenrechte_after[Menschenrechte_after$sex == "female",]),
                       100/nrow(Bildung_after)*
                  nrow(Bildung_after[Bildung_after$sex == "female",]), 
                       100/nrow(Kultur_after)*
                  nrow(Kultur_after[Kultur_after$sex == "female",]),
                       100/nrow(Umwelt_after)*
                  nrow(Umwelt_after[Umwelt_after$sex == "female",]),
                       100/nrow(Raum_Wohnung_after)*
                  nrow(Raum_Wohnung_after[Raum_Wohnung_after$sex == "female",]), 
                       100/nrow(Energie_after)*
                  nrow(Energie_after[Energie_after$sex == "female",]), 
                       100/nrow(Medien_Kommunik_after)*
                  nrow(Medien_Kommunik_after[Medien_Kommunik_after$sex == "female",]),
                       100/nrow(Verkehr_after)*
                  nrow(Verkehr_after[Verkehr_after$sex == "female",]), 
                       100/nrow(Wissen_Forsch_after)*
                  nrow(Wissen_Forsch_after[Wissen_Forsch_after$sex == "female",]),
                       100/nrow(Europapolitik_after)*
                  nrow(Europapolitik_after[Europapolitik_after$sex == "female",]), 
                       100/nrow(Parlament_after)*
                  nrow(Parlament_after[Parlament_after$sex == "female",]),
                       100/nrow(Inter_Politik_after)*
                  nrow(Inter_Politik_after[Inter_Politik_after$sex == "female",]), 
                       100/nrow(Staatspolitik_after)*
                  nrow(Staatspolitik_after[Staatspolitik_after$sex == "female",]),
                       100/nrow(Zivilrecht_after)*
                  nrow(Zivilrecht_after[Zivilrecht_after$sex == "female",]), 
                       100/nrow(Strafrecht_after)*
                  nrow(Strafrecht_after[Strafrecht_after$sex == "female",]),
                       100/nrow(Recht_Allg_after)*
                  nrow(Recht_Allg_after[Recht_Allg_after$sex == "female",]), 
                       100/nrow(Landwirtschaft_after)*
                  nrow(Landwirtschaft_after[Landwirtschaft_after$sex == "female",]),
                       100/nrow(Sicherheitspolitik_after)*
                  nrow(Sicherheitspolitik_after[Sicherheitspolitik_after$sex == "female",]), 
                       100/nrow(Steuer_after)*
                  nrow(Steuer_after[Steuer_after$sex == "female",]),
                       100/nrow(Wirtschaft_after)*
                  nrow(Wirtschaft_after[Wirtschaft_after$sex == "female",]),
                       100/nrow(Finanzwesen_after)*
                  nrow(Finanzwesen_after[Finanzwesen_after$sex == "female",]))

categories <- c("Soziale Frage", "Sozialer Schutz", "Migration", "Beschäftigung & Arbeit", 
                "Gesundheit", "Menschenrechte","Bildung", "Kultur", "Umwelt", 
                "Raumplanung & Wohnungswesen", "Energie", "Medien und Kommunikation",
                "Verkehr", "Wissenschaft & Forschung", "Europapolitik", "Parlament", 
                "Internationale Politik", "Staatspolitik", "Zivilrecht", "Strafrecht",
                "Recht Allgemein", "Landwirtschaft", "Sicherheitspolitik", "Steuer",
                "Wirtschaft", "Finanzwesen")

NR_dumbell_df <- data.frame(categories, Vorher_NR, Nachher_NR) 

# NR_dumbell_df2 <- tidyr::gather(NR_dumbell_df, group, value, -categories)

Plot

library(ggalt)
## Registered S3 methods overwritten by 'ggalt':
##   method                  from   
##   grid.draw.absoluteGrob  ggplot2
##   grobHeight.absoluteGrob ggplot2
##   grobWidth.absoluteGrob  ggplot2
##   grobX.absoluteGrob      ggplot2
##   grobY.absoluteGrob      ggplot2
library(forcats)

g_dumbbell_NR <- ggplot(NR_dumbell_df) +
    geom_dumbbell(aes(y = fct_reorder(categories, Vorher_NR), x = Nachher_NR, xend = Vorher_NR), size = 1.2, size_x = 2, size_xend = 2, color = "gray71", colour_x = "#93003a", colour_xend = "cadetblue3") +
    labs(title = "Prozentanteil von Frauen eingereichte Geschäfte 
         vor und nach 2019, nach Themengebiet", caption = "Datenquelle: parlament.ch", 
         x = "Von Frauen eingereichte Geschäfte (%)", y = "") +
    theme_light() +
    theme(strip.background = element_blank(), strip.text = element_text(color = "black", face = "italic")) +
  geom_text(data=filter(NR_dumbell_df, categories == "Zivilrecht"),
          aes(x=Vorher_NR, y=categories, label="Vor der Wahl 2019"),
          color= "cadetblue3", size=3, vjust=-1.5) +
  geom_text(data=filter(NR_dumbell_df, categories == "Zivilrecht"),
          aes(x=Nachher_NR, y=categories, label="Nach der Wahl 2019"),
          color= "#93003a", size=3, vjust=-1.5)

g_dumbbell_NR

ggsave(g_dumbbell_NR, filename = "Plots/dumbbell_NR_plot.png", height = 0.6*16, width = 0.9*9)

1.1.5 Grouped barplot Parties

Parties

table(NR_before$party)
## 
##         Bürgerlich-Demokratische Partei Schweiz 
##                                              34 
##              Christlich-soziale Partei Obwalden 
##                                               8 
## Christlichdemokratische Volkspartei der Schweiz 
##                                             296 
##  Christlichdemokratische Volkspartei Oberwallis 
##                                               6 
##        Christlichsoziale Volkspartei Oberwallis 
##                                              14 
##            Evangelische Volkspartei der Schweiz 
##                                              27 
##                               FDP.Die Liberalen 
##                                             259 
##               Grüne (Basels starke Alternative) 
##                                              30 
##                        Grüne Partei der Schweiz 
##                                             189 
##                             Grünliberale Partei 
##                                             124 
##                               Lega dei Ticinesi 
##                                              55 
##                    Liberal-Demokratische Partei 
##                                              19 
##                     Mouvement Citoyens Genevois 
##                                              10 
##                   Partei der Arbeit der Schweiz 
##                                              21 
##                      Schweizerische Volkspartei 
##                                             481 
##          Sozialdemokratische Partei der Schweiz 
##                                             557
table(NR_after$party)
## 
##               Alternative-die Grünen Kanton Zug 
##                                              12 
##         Bürgerlich-Demokratische Partei Schweiz 
##                                               9 
## Christlichdemokratische Volkspartei der Schweiz 
##                                             268 
##  Christlichdemokratische Volkspartei Oberwallis 
##                                               8 
##               Eidgenössisch-Demokratische Union 
##                                               8 
##                               Ensemble à Gauche 
##                                              30 
##            Evangelische Volkspartei der Schweiz 
##                                              42 
##                               FDP.Die Liberalen 
##                                             261 
##               Grüne (Basels starke Alternative) 
##                                              13 
##                        Grüne Partei der Schweiz 
##                                             515 
##                             Grünliberale Partei 
##                                             149 
##                               Lega dei Ticinesi 
##                                              51 
##                    Liberal-Demokratische Partei 
##                                              15 
##                   Partei der Arbeit der Schweiz 
##                                              27 
##                      Schweizerische Volkspartei 
##                                             477 
##          Sozialdemokratische Partei der Schweiz 
##                                             637
CVP_before <- filter(NR_before, party == "Christlichdemokratische Volkspartei der Schweiz" | 
                       party == "Christlich-soziale Partei Obwalden" | 
                       party == "Christlichdemokratische Volkspartei Oberwallis" | 
                       party == "Christlichsoziale Volkspartei Oberwallis")
CVP_after <- filter(NR_after, party == "Christlichdemokratische Volkspartei der Schweiz" |  
                       party == "Christlichdemokratische Volkspartei Oberwallis")
FDP_before <- filter(NR_before, party == "FDP.Die Liberalen" | 
                       party == "Liberal-Demokratische Partei")
FDP_after <- filter(NR_after, party == "FDP.Die Liberalen" | 
                       party == "Liberal-Demokratische Partei")
GPS_before <- filter(NR_before, party == "Grüne (Basels starke Alternative)" | 
                       party == "Grüne Partei der Schweiz")
GPS_after <- filter(NR_after, party == "Grüne (Basels starke Alternative)" | 
                       party == "Grüne Partei der Schweiz" |
                       party == "Alternative-die Grünen Kanton Zug")
GLP_before <- filter(NR_before, party == "Grünliberale Partei")
GLP_after <- filter(NR_after, party == "Grünliberale Partei")
SVP_before <- filter(NR_before, party == "Schweizerische Volkspartei")
SVP_after <- filter(NR_after, party == "Schweizerische Volkspartei")
SP_before <- filter(NR_before, party == "Sozialdemokratische Partei der Schweiz")
SP_after <- filter(NR_after, party == "Sozialdemokratische Partei der Schweiz")
other_before <- filter(NR_before, party == "Bürgerlich-Demokratische Partei Schweiz" |
                         party == "Evangelische Volkspartei der Schweiz" |
                         party == "Lega dei Ticinesi"|
                         party == "Mouvement Citoyens Genevois" |
                         party == "Partei der Arbeit der Schweiz")
other_after <- filter(NR_after, party == "Bürgerlich-Demokratische Partei Schweiz" |
                         party == "Eidgenössisch-Demokratische Union" |
                         party == "Ensemble à Gauche" |
                         party == "Evangelische Volkspartei der Schweiz" |
                         party == "Lega dei Ticinesi"|
                         party == "Mouvement Citoyens Genevois" |
                         party == "Partei der Arbeit der Schweiz")

parties_before <- c(100/nrow(CVP_before)*
                 nrow(CVP_before[CVP_before$sex == "female",]), 
                       100/nrow(FDP_before)*
                 nrow(FDP_before[FDP_before$sex == "female",]),
                       100/nrow(GPS_before)*
                 nrow(GPS_before[GPS_before$sex == "female",]), 
                       100/nrow(GLP_before)*
                 nrow(GLP_before[GLP_before$sex == "female",]),
                       100/nrow(SVP_before)*
                 nrow(SVP_before[SVP_before$sex == "female",]), 
                       100/nrow(SP_before)*
                 nrow(SP_before[SP_before$sex == "female",]),
                       100/nrow(other_before)*
                 nrow(other_before[other_before$sex == "female",]))

parties_after <- c(100/nrow(CVP_after)*
                 nrow(CVP_after[CVP_after$sex == "female",]), 
                       100/nrow(FDP_after)*
                 nrow(FDP_after[FDP_after$sex == "female",]),
                       100/nrow(GPS_after)*
                 nrow(GPS_after[GPS_after$sex == "female",]), 
                       100/nrow(GLP_after)*
                 nrow(GLP_after[GLP_after$sex == "female",]),
                       100/nrow(SVP_after)*
                 nrow(SVP_after[SVP_after$sex == "female",]), 
                       100/nrow(SP_after)*
                 nrow(SP_after[SP_after$sex == "female",]),
                       100/nrow(other_after)*
                 nrow(other_after[other_after$sex == "female",]))

categories_parties <- c("CVP", "FDP", "Grüne", "GLP", 
                "SVP", "SP","Übrige")

NR_parties_df <- data.frame(categories_parties, parties_before, parties_after) 
NR_parties_df2 <- tidyr::gather(NR_parties_df, time, value, -categories_parties)

Plot

barplot_parties_NR <- NR_parties_df2 %>% 
  ggplot(aes(x= value, y= reorder(categories_parties,value), color=time)) +
  geom_point(size = 3, ) +
    labs(title = "Prozentanteil von Frauen eingereichte Geschäfte 
         vor und nach 2019, nach Partei", caption = "Datenquelle: parlament.ch", 
         x = "Von Frauen eingereichte Geschäfte (%)", y = "") +
    theme_light() +
  scale_color_manual(values = c("#93003a", "cadetblue3"), name = "Zeitpunkt", labels = c("nach der Wahl 2019", "vor der Wahl 2019"))

barplot_parties_NR

ggsave(barplot_parties_NR, filename = "Plots/barplot_parties_NR.png", height = 0.2*16, width = 0.7*9)