# Libraries laden
library("quanteda")
## Warning: package 'quanteda' was built under R version 4.0.5
## Package version: 3.0.0
## Unicode version: 10.0
## ICU version: 61.1
## Parallel computing: 8 of 8 threads used.
## See https://quanteda.io for tutorials and examples.
library("quanteda.textmodels")
## Warning: package 'quanteda.textmodels' was built under R version 4.0.5
library("quanteda.textstats")
## Warning: package 'quanteda.textstats' was built under R version 4.0.5
library("quanteda.textplots")
## Warning: package 'quanteda.textplots' was built under R version 4.0.5
library("quanteda.corpora")
library("swissparl")
## Warning: package 'swissparl' was built under R version 4.0.5
library("tidyverse")
## Warning: package 'tidyverse' was built under R version 4.0.3
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.3 v purrr 0.3.4
## v tibble 3.1.0 v dplyr 1.0.5
## v tidyr 1.1.3 v stringr 1.4.0
## v readr 1.3.1 v forcats 0.5.0
## Warning: package 'ggplot2' was built under R version 4.0.3
## Warning: package 'tibble' was built under R version 4.0.5
## Warning: package 'tidyr' was built under R version 4.0.5
## Warning: package 'dplyr' was built under R version 4.0.5
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library("dplyr")
library("ggplot2")
library("ggrepel")
## Warning: package 'ggrepel' was built under R version 4.0.5
library("gridExtra")
## Warning: package 'gridExtra' was built under R version 4.0.5
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
library("grid")
# Datensatz laden, Jahr berechnen und filtern
chparl.dt <- readRDS("chparl_komplett.rds")
chparl.dt$year <- as.numeric(format(chparl.dt$Start, "%Y"))
chparl.dt <- subset(chparl.dt, year %in% c(2001:2020))
# Datensatz weiter runterbrechen auf Geschäfte pro Jahr
chparl.dt <- chparl.dt %>%
group_by(BusinessNumber, year, topic_mr) %>%
summarise(AnzMeldungen = n(), .groups = 'drop') %>%
ungroup()
chparl.dt <- chparl.dt %>%
group_by(year, topic_mr) %>%
summarise(AnzBusinesses = n(), .groups = 'drop') %>%
ungroup()
total.dt <- chparl.dt %>%
group_by(year) %>%
mutate(Total = sum(AnzBusinesses, na.rm = TRUE)) %>%
ungroup() %>%
filter(topic_mr == 1) %>%
select(year, Total)
menschenrecht.dt <- chparl.dt %>%
filter(topic_mr == 1) %>%
select(year, AnzBusinesses)
# Datensätze zusammenfügen und Prozente ausrechnen
geschafte.de <- left_join(menschenrecht.dt, total.dt, by = "year")
geschafte.de$Prozent <- (geschafte.de$AnzBusinesses/geschafte.de$Total)*100
geschafte.de$Prozent <- round(geschafte.de$Prozent, 1)
# Bar Plot kreieren
time.plot <- ggplot(geschafte.de, aes(year, Prozent))+
geom_bar(stat = "identity", width = 0.9, fill = "turquoise2")+
scale_x_continuous(breaks = c(2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016,
2017, 2018, 2019, 2020)) +
scale_y_continuous(labels = function(x) paste0(x, "%"))+
geom_text(aes(label= paste0(Prozent, "%")), vjust = -0.5, size = 3.5,
position = position_dodge(0.9))+
theme_bw()+
labs(title="Im Parlament werden die Menschenrechte selten thematisiert.",
subtitle="Anteil Geschäfte mit Nennung der Menschenrechte pro Jahr in Prozent.",
caption="\nDaten:swissparl: Interface to the Webservices of the Swiss Parliament \nGrafik: Felicia Mändli", y = NULL, x = NULL) +
theme(axis.text.x = element_text(angle=65, vjust=0.6))+
theme(
plot.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
plot.title=element_text(size = 15, face="bold"),
plot.title.position = "plot",
plot.subtitle=element_text(face="italic", size=11, margin=margin(b=12)),
plot.caption=element_text(size=8, margin=margin(t=12)))
time.plot
# Datensatz laden und Geschäftsnamen vereinfachen
MR.dt <- readRDS("menschenrechte.rds")
table(MR.dt$Title)
MR.dt$Title[MR.dt$Title == "Schweizer Recht statt fremde Richter (Selbstbestimmungsinitiative). Volksinitiative"] <- "Selbstbestimmungsinitiative"
MR.dt$Title[MR.dt$Title == "Für verantwortungsvolle Unternehmen – zum Schutz von Mensch und Umwelt. Volksinitiative"] <- "Konzernverantwortungsinitiative"
MR.dt$Title[MR.dt$Title == "Freihandelsabkommen zwischen der Schweiz und China"] <- "Freihandelsabkommen mit China"
# Parteinamen anpassen und Regionalparteien ausschliessen
# Mitte in CVP umwandeln und FDP vereinfachen
MR.dt$PartyNumber[MR.dt$PartyNumber == "1586"] <- "14"
MR.dt$PartyName[MR.dt$PartyName == "Die Mitte"] <- "Christlichdemokratische Volkspartei der Schweiz"
MR.dt$PartyAbbreviation[MR.dt$PartyAbbreviation == "M-E"] <- "CVP"
MR.dt$PartyAbbreviation[MR.dt$PartyAbbreviation == "FDP-Liberale"] <- "FDP"
# Regionalparteien entfernen
MR.dt <- subset(MR.dt, PartyNumber != 1577 & PartyNumber != 1582 & PartyNumber != 1573 & PartyNumber != 1576 & PartyNumber != 26 & PartyNumber != 18)
# CVP und BDP zusammenehmen
MR.dt$PartyNumber[MR.dt$PartyNumber == "1551"] <- "14"# Nummer der CVP beibehalten
MR.dt$PartyName[MR.dt$PartyName == "Bürgerlich-Demokratische Partei Schweiz"] <- "Christlichdemokratische Volkspartei der Schweiz/Bürgerlich-Demokratische Partei Schweiz"
MR.dt$PartyAbbreviation[MR.dt$PartyAbbreviation == "BDP"] <- "CVP und BDP"
MR.dt$PartyName[MR.dt$PartyName == "Christlichdemokratische Volkspartei der Schweiz"] <- "Christlichdemokratische Volkspartei der Schweiz/Bürgerlich-Demokratische Partei Schweiz"
MR.dt$PartyAbbreviation[MR.dt$PartyAbbreviation == "CVP"] <- "CVP und BDP"
# Grüne Parteien zusammenehmen
MR.dt$PartyNumber[MR.dt$PartyNumber == "1336"] <- "20"# Nummer der GPS beibehalten
MR.dt$PartyName[MR.dt$PartyName == "Grünliberale Partei"] <- "Grüne Parteien"
MR.dt$PartyAbbreviation[MR.dt$PartyAbbreviation == "glp"] <- "Grüne Parteien"
MR.dt$PartyName[MR.dt$PartyName == "Grüne Partei der Schweiz"] <- "Grüne Parteien"
MR.dt$PartyAbbreviation[MR.dt$PartyAbbreviation == "GPS"] <- "Grüne Parteien"
Einzelne Datensätze kreieren:
Freihandel Schweiz China
# Geschäft filtern
MR_freihandel.dt <- MR.dt %>%
filter(BusinessNumber == 20130071)
# Total sum
MR_freihandel_tot.dt <- MR_freihandel.dt %>%
group_by(BusinessNumber, Title, PartyNumber, PartyName, PartyAbbreviation) %>%
summarise(Total = n(), .groups = 'drop')
# Menschenrechte sum
MR_freihandel_mr.dt <- MR_freihandel.dt %>%
group_by(PartyNumber, topic_mr) %>%
summarise(MrMeldungen = n(), .groups = 'drop') %>%
filter(topic_mr == 1) %>%
select(PartyNumber, MrMeldungen)
# Datensätze verbinden
freihandel.dt <- left_join(MR_freihandel_tot.dt, MR_freihandel_mr.dt, by = "PartyNumber")
# Score = MR/Total
freihandel.dt$Score <- freihandel.dt$MrMeldungen/freihandel.dt$Total
Volksinitiative «Für verantwortungsvolle Unternehmen – zum Schutz von Mensch und Umwelt»
# Geschäft filtern
MR_verantwortung.dt <- MR.dt %>%
filter(BusinessNumber == 20170060)
# Total sum
MR_verantwortung_tot.dt <- MR_verantwortung.dt %>%
group_by(BusinessNumber, Title, PartyNumber, PartyName, PartyAbbreviation) %>%
summarise(Total = n(), .groups = 'drop')
# Menschenrechte sum
MR_verantwortung_mr.dt <- MR_verantwortung.dt %>%
group_by(PartyNumber, topic_mr) %>%
summarise(MrMeldungen = n(), .groups = 'drop') %>%
filter(topic_mr == 1) %>%
select(PartyNumber, MrMeldungen)
# Datensätze verbinden
verantwortung.dt <- left_join(MR_verantwortung_tot.dt, MR_verantwortung_mr.dt, by = "PartyNumber")
#NA mit 0 austauschen um Score berechnen zu können
verantwortung.dt$MrMeldungen[is.na(verantwortung.dt$MrMeldungen)] <- 0
# Score = MR/Total
verantwortung.dt$Score <- verantwortung.dt$MrMeldungen/verantwortung.dt$Total
OR Aktienrecht
# Geschäft filtern
MR_aktien.dt <- MR.dt %>%
filter(BusinessNumber == 20160077)
# Total sum
MR_aktien_tot.dt <- MR_aktien.dt %>%
group_by(BusinessNumber, Title, PartyNumber, PartyName, PartyAbbreviation) %>%
summarise(Total = n(), .groups = 'drop')
# Menschenrechte sum
MR_aktien_mr.dt <- MR_aktien.dt %>%
group_by(PartyNumber, topic_mr) %>%
summarise(MrMeldungen = n(), .groups = 'drop') %>%
filter(topic_mr == 1) %>%
select(PartyNumber, MrMeldungen)
# Datensätze verbinden
aktien.dt <- left_join(MR_aktien_tot.dt, MR_aktien_mr.dt, by = "PartyNumber")
#NA mit 0 austauschen um Score berechnen zu können
aktien.dt$MrMeldungen[is.na(aktien.dt$MrMeldungen)] <- 0
# Score = MR/Total
aktien.dt$Score <- aktien.dt$MrMeldungen/aktien.dt$Total
Selbstbestimmungsinitiative
# Geschäft filtern
MR_selbstbestimmung.dt <- MR.dt %>%
filter(BusinessNumber == 20170046)
# Total sum
MR_selbstbestimmung_tot.dt <- MR_selbstbestimmung.dt %>%
group_by(BusinessNumber, Title, PartyNumber, PartyName, PartyAbbreviation) %>%
summarise(Total = n(), .groups = 'drop')
# Menschenrechte sum
MR_selbstbestimmung_mr.dt <- MR_selbstbestimmung.dt %>%
group_by(PartyNumber, topic_mr) %>%
summarise(MrMeldungen = n(), .groups = 'drop') %>%
filter(topic_mr == 1) %>%
select(PartyNumber, MrMeldungen)
# Datensätze verbinden
selbstbestimmung.dt <- left_join(MR_selbstbestimmung_tot.dt, MR_selbstbestimmung_mr.dt, by = "PartyNumber")
#NA mit 0 austauschen um Score berechnen zu können
selbstbestimmung.dt$MrMeldungen[is.na(selbstbestimmung.dt$MrMeldungen)] <- 0
# Score = MR/Total
selbstbestimmung.dt$Score <- selbstbestimmung.dt$MrMeldungen/selbstbestimmung.dt$Total
# Datensätze zusammenfügen
MenschenrechtScores.dt <- rbind(freihandel.dt, verantwortung.dt,
aktien.dt, selbstbestimmung.dt)
MenschenrechtScores.dt$Prozent <- MenschenrechtScores.dt$Score * 100
MenschenrechtScores.dt$Prozent <- round(MenschenrechtScores.dt$Prozent, 0)
Small Multiple Plot
# Parteifarben bestimmen
partycolors <- c("CVP und BDP" = "orange", "FDP" = "blue",
"SVP" = "darkgreen", "Grüne Parteien" = "green", "SP" = "red")
# Small Multiple Plot kreiern
sm.plot <- ggplot(data = MenschenrechtScores.dt)+
aes(x = PartyAbbreviation, y = Prozent)+
facet_wrap(~ Title)+
geom_segment(aes(x=PartyAbbreviation,
xend=PartyAbbreviation,
y= 0,
yend=max(Prozent)),
linetype="dashed",
size=0.01,
color = "grey87") +
geom_point(aes(colour = PartyAbbreviation), size = 3)+
scale_color_manual(values = partycolors,
guide = FALSE)+
geom_text(aes(label = paste(Prozent, "%", sep = "")),
size = 3, hjust = 1.4, vjust = 0.35,
show.legend = FALSE)+
ylim(0, 100)+
coord_flip()+
labs(title = "Linke Parteien erwähnen die Menschrechte öfter in Parlamentsdebatten als die bürgerlichen Parteien.",
subtitle = "Anteil Redebeiträge pro Partei, in denen es um Menschenrechte geht im Vergleich zu allen Beiträgen in Prozent.",
caption = "\nDaten:swissparl: Interface to the Webservices of the Swiss Parliament \nGrafik: Felicia Mändli", y = NULL, x = "") +
theme_light()+
theme(
plot.background = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_rect(colour = "grey"),
axis.text.x = element_blank(),
axis.ticks = element_blank(),
strip.background = element_rect(fill = "white"),
strip.text.x = element_text(colour = "black", face = "bold", size=10),
plot.title=element_text(size = 15, face="bold"),
plot.title.position = "plot",
plot.subtitle=element_text(face="italic", size=11, margin=margin(b=12)),
plot.caption=element_text(size=8, margin=margin(t=12)))
sm.plot
# Datensatz DE einlesen und filtern nach Konzernverantwortungsinitiative
MR_de.dt <- readRDS("menschenrechteDE.rds")
MR_de.dt <- MR_de.dt %>%
subset(BusinessNumber == 20170060)
# Parteinamen anpassen
# Mitte in CVP umwandeln und FDP vereinfachen
MR_de.dt$PartyNumber[MR_de.dt$PartyNumber == "1586"] <- "14"
MR_de.dt$PartyName[MR_de.dt$PartyName == "Die Mitte"] <- "Christlichdemokratische Volkspartei der Schweiz"
MR_de.dt$PartyAbbreviation[MR_de.dt$PartyAbbreviation == "M-E"] <- "CVP"
MR_de.dt$PartyAbbreviation[MR_de.dt$PartyAbbreviation == "FDP-Liberale"] <- "FDP"
# Regionalparteien entfernen
MR_de.dt <- subset(MR_de.dt, PartyNumber != 1577 & PartyNumber != 1582 & PartyNumber != 1573 & PartyNumber != 1576 & PartyNumber != 26 & PartyNumber != 18)
# CVP und BDP zusammenehmen
MR_de.dt$PartyNumber[MR_de.dt$PartyNumber == "1551"] <- "14"# Nummer der CVP beibehalten
MR_de.dt$PartyName[MR_de.dt$PartyName == "Bürgerlich-Demokratische Partei Schweiz"] <- "Christlichdemokratische Volkspartei der Schweiz/Bürgerlich-Demokratische Partei Schweiz"
MR_de.dt$PartyAbbreviation[MR_de.dt$PartyAbbreviation == "BDP"] <- "CVP und BDP"
# Grüne Parteien zusammenehmen
MR_de.dt$PartyNumber[MR_de.dt$PartyNumber == "1336"] <- "20"# Nummer der GPS beibehalten
MR_de.dt$PartyName[MR_de.dt$PartyName == "Grünliberale Partei"] <- "Grüne Parteien"
MR_de.dt$PartyAbbreviation[MR_de.dt$PartyAbbreviation == "glp"] <- "Grüne Parteien"
MR_de.dt$PartyName[MR_de.dt$PartyName == "Grüne Partei der Schweiz"] <- "Grüne Parteien"
MR_de.dt$PartyAbbreviation[MR_de.dt$PartyAbbreviation == "GPS"] <- "Grüne Parteien"
# Keyness Vorbereitung
MR_de.corp <- corpus(MR_de.dt, text_field = "Text")
MR_de.corp <- corpus_subset(MR_de.corp, PartyAbbreviation %in% c("SVP", "FDP", "CVP und BDP",
"SP", "Grüne Parteien"))
MR_de.dfm <- tokens(MR_de.corp, remove_punct = TRUE, remove_numbers = TRUE, remove_symbols = TRUE) %>%
tokens_remove(c(stopwords('de'), "dass", "p","pd_text", "i", "<", ">", "di", "e")) %>%
tokens_remove(c(stopwords('fr'), "commission", "entrer",
"VS", "Proposition", "matière")) %>%
tokens_remove(min_nchar = 3) %>% # "ja" aus Analyse ausschliessen
tokens_group(groups = PartyAbbreviation) %>%
dfm()
# Keyness SP
keyness_SP <- textstat_keyness(MR_de.dfm, target = "SP")
sp.plot <- textplot_keyness(keyness_SP, show_reference = FALSE, color = c("red"), n = 10)+
labs(subtitle = "SP", x = NULL, y = NULL)+
theme_bw()+
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank())
# Keyness CVP und BDP
keyness_CVP_BDP <- textstat_keyness(MR_de.dfm, target = "CVP und BDP")
cvp_bdp.plot <- textplot_keyness(keyness_CVP_BDP, show_reference = FALSE, color = c("orange"), n = 10)+
labs(subtitle = "CVP und BDP", x = NULL, y = NULL)+
theme_bw()+
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank())
# Keyness FDP
keyness_FDP <- textstat_keyness(MR_de.dfm, target = "FDP")
fdp.plot <- textplot_keyness(keyness_FDP, show_reference = FALSE, color = c("blue"), n = 10)+
labs(subtitle = "FDP", x = NULL, y = NULL)+
theme_bw()+
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank())
# Keyness SVP
keyness_SVP <- textstat_keyness(MR_de.dfm, target = "SVP")
svp.plot <- textplot_keyness(keyness_SVP, show_reference = FALSE, color = c("darkgreen"), n = 10)+
labs(subtitle = "SVP", x = NULL, y = NULL)+
theme_bw()+
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank())
# Keyness grüne Parteien
keyness_GrüneP <- textstat_keyness(MR_de.dfm, target = "Grüne Parteien")
grune.plot <- textplot_keyness(keyness_GrüneP, show_reference = FALSE, color = c("green"), n = 10)+
labs(subtitle = "Grüne Parteien", x = NULL, y = NULL)+
theme_bw()+
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank())
# Keyness Plot
keyness.plot <- grid.arrange(fdp.plot, cvp_bdp.plot, svp.plot, sp.plot,
grune.plot, nrow = 3,
top = textGrob("Schlüsselwörter pro Partei verglichen mit allen anderen Parteien.",
gp = gpar(fontface = 3, fontsize = 30),
x = unit(0, "lines"), y = unit(0, "lines"),
just = "left", hjust = 0, vjust = 0),
bottom = textGrob("\nDaten:swissparl: Interface to the Webservices of the Swiss Parliament \nGrafik: Felicia Mändli",
gp = gpar(fontface = 1, fontsize = 15),
hjust = 1,
x = 1))
keyness.plot