library(rvest)
## Warning: package 'rvest' was built under R version 4.1.3
library(data.table)
## Warning: package 'data.table' was built under R version 4.1.2
library(quanteda)
## Warning: package 'quanteda' was built under R version 4.1.3
## Package version: 3.2.1
## Unicode version: 13.0
## ICU version: 69.1
## Parallel computing: 4 of 4 threads used.
## See https://quanteda.io for tutorials and examples.
library(quanteda.textstats)
## Warning: package 'quanteda.textstats' was built under R version 4.1.3
library(stringr)
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.1.3
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5 v purrr 0.3.4
## v tibble 3.1.6 v dplyr 1.0.8
## v tidyr 1.2.0 v forcats 0.5.1
## v readr 2.1.2
## Warning: package 'tibble' was built under R version 4.1.2
## Warning: package 'tidyr' was built under R version 4.1.3
## Warning: package 'readr' was built under R version 4.1.3
## Warning: package 'dplyr' was built under R version 4.1.3
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::between() masks data.table::between()
## x dplyr::filter() masks stats::filter()
## x dplyr::first() masks data.table::first()
## x readr::guess_encoding() masks rvest::guess_encoding()
## x dplyr::lag() masks stats::lag()
## x dplyr::last() masks data.table::last()
## x purrr::transpose() masks data.table::transpose()
library(dplyr)
library(ggplot2)
library(xlsx)
## Warning: package 'xlsx' was built under R version 4.1.2
setwd("C:/Users/Jenny.WODEHOUSE/OneDrive/Documents/Uni/FS 2022/FS Datenjournalismus/datenjournalismus")
unzip('data/chparl_full.zip', exdir = "data")
transcripts <- rbindlist(list(
fread('data/chparl_full/transcripts_Legislatur-46.csv', encoding = "UTF-8"),
fread('data/chparl_full/transcripts_Legislatur-47.csv', encoding = "UTF-8"),
fread('data/chparl_full/transcripts_Legislatur-48.csv', encoding = "UTF-8"),
fread('data/chparl_full/transcripts_Legislatur-49.csv', encoding = "UTF-8"),
fread('data/chparl_full/transcripts_Legislatur-50.csv', encoding = "UTF-8"),
fread('data/chparl_full/transcripts_Legislatur-51.csv', encoding = "UTF-8")
), use.names = T, fill = T)
names(transcripts)
## [1] "ID" "Language"
## [3] "IdSubject" "VoteId"
## [5] "PersonNumber" "Type"
## [7] "Text" "MeetingCouncilAbbreviation"
## [9] "MeetingDate" "MeetingVerbalixOid"
## [11] "IdSession" "SpeakerFirstName"
## [13] "SpeakerLastName" "SpeakerFullName"
## [15] "SpeakerFunction" "CouncilId"
## [17] "CouncilName" "CantonId"
## [19] "CantonName" "CantonAbbreviation"
## [21] "ParlGroupName" "ParlGroupAbbreviation"
## [23] "SortOrder" "Start"
## [25] "End" "Function"
## [27] "DisplaySpeaker" "LanguageOfText"
## [29] "Modified" "StartTimeWithTimezone"
## [31] "EndTimeWithTimezone" "VoteBusinessNumber"
## [33] "VoteBusinessShortNumber" "VoteBusinessTitle"
str(transcripts)
## Classes 'data.table' and 'data.frame': 100365 obs. of 34 variables:
## $ ID : int 21553 21554 21555 21556 21557 21558 21559 21560 21561 21562 ...
## $ Language : chr "DE" "DE" "DE" "DE" ...
## $ IdSubject : int 4093 4094 4095 4095 4095 4095 4095 4095 4095 4095 ...
## $ VoteId : chr NA NA NA NA ...
## $ PersonNumber : int 341 341 341 430 503 316 514 348 367 435 ...
## $ Type : int 1 1 1 1 1 1 1 1 1 1 ...
## $ Text : chr "<pd_text><p>J'interromps très brièvement nos travaux pour saluer à la tribune diplomatique une délégation du Pa"| __truncated__ "<pd_text><p>Depuis la fin de notre dernière session, la situation au Proche-Orient s'est gravement détériorée. "| __truncated__ "<pd_text><p>Nous allons voter en premier lieu sur l'article 46. Dans la mesure où la proposition de la majorité"| __truncated__ "<pd_text><p>A mon avis, il faudrait suivre la proposition de minorité Meyer Thérèse à l'article 11 alinéa 7bis,"| __truncated__ ...
## $ MeetingCouncilAbbreviation: chr "N" "N" "N" "N" ...
## $ MeetingDate : int 20020415 20020415 20020415 20020415 20020415 20020415 20020415 20020415 20020415 20020415 ...
## $ MeetingVerbalixOid : int 924 924 924 924 924 924 924 924 924 924 ...
## $ IdSession : int 4613 4613 4613 4613 4613 4613 4613 4613 4613 4613 ...
## $ SpeakerFirstName : chr "Liliane" "Liliane" "Liliane" "Ruth" ...
## $ SpeakerLastName : chr "Maury Pasquier" "Maury Pasquier" "Maury Pasquier" "Dreifuss" ...
## $ SpeakerFullName : chr "Maury Pasquier Liliane" "Maury Pasquier Liliane" "Maury Pasquier Liliane" "Dreifuss Ruth" ...
## $ SpeakerFunction : chr "P-F" "P-F" "P-F" "BR-F" ...
## $ CouncilId : int 1 1 1 99 1 1 1 1 1 1 ...
## $ CouncilName : chr "Nationalrat" "Nationalrat" "Nationalrat" "Bundesrat" ...
## $ CantonId : int 25 25 25 25 27 19 1 12 17 10 ...
## $ CantonName : chr "Genf" "Genf" "Genf" "Genf" ...
## $ CantonAbbreviation : chr "GE" "GE" "GE" "GE" ...
## $ ParlGroupName : chr "Sozialdemokratische Fraktion" "Sozialdemokratische Fraktion" "Sozialdemokratische Fraktion" "" ...
## $ ParlGroupAbbreviation : chr "S" "S" "S" "" ...
## $ SortOrder : int 1 1 79 78 77 76 75 74 73 72 ...
## $ Start : POSIXct, format: "2002-04-15 16:56:27" "2002-04-15 14:31:28" ...
## $ End : POSIXct, format: "2002-04-15 16:57:32" "2002-04-15 14:35:21" ...
## $ Function : chr "" "" "" "" ...
## $ DisplaySpeaker : logi TRUE TRUE TRUE TRUE TRUE TRUE ...
## $ LanguageOfText : chr "FR" "FR" "FR" "FR" ...
## $ Modified : POSIXct, format: "2017-11-16 16:22:27" "2017-11-16 16:22:27" ...
## $ StartTimeWithTimezone : POSIXct, format: "2002-04-15 14:56:27" "2002-04-15 12:31:28" ...
## $ EndTimeWithTimezone : POSIXct, format: "2002-04-15 14:57:32" "2002-04-15 12:35:21" ...
## $ VoteBusinessNumber : int 0 0 0 0 0 0 0 0 0 0 ...
## $ VoteBusinessShortNumber : num NA NA NA NA NA NA NA NA NA NA ...
## $ VoteBusinessTitle : chr "" "" "" "" ...
## - attr(*, ".internal.selfref")=<externalptr>
persons <- fread('data/chparl_full/persons_new.csv')
transcripts <- merge(transcripts, persons, by="PersonNumber", all.x = TRUE)
transcripts <- transcripts %>%
select(-Language.y) %>%
rename(Language = Language.x,
ModifiedSpeech = Modified.x,
ModifiedPerson = Modified.y,
IDSpeech = ID.x,
IDPerson = ID.y) %>%
distinct(IDSpeech, .keep_all = T) # 100'365 obs.
save(transcripts, file = "data/transcripts.Rdata")
save(persons, file = "data/persons.Rdata")
load("data/transcripts.Rdata")
load("data/persons.Rdata")
transcripts[,txt_clean := gsub("<.*?>", "", Text)]
## Warning in `[.data.table`(transcripts, , `:=`(txt_clean, gsub("<.*?>", "", :
## Invalid .internal.selfref detected and fixed by taking a (shallow) copy of the
## data.table so that := can add this new column by reference. At an earlier point,
## this data.table has been copied by R (or was created manually using structure()
## or similar). Avoid names<- and attr<- which in R currently (and oddly) may
## copy the whole data.table. Use set* syntax instead to avoid copying: ?set, ?
## setnames and ?setattr. If this message doesn't help, please report your use case
## to the data.table issue tracker so the root cause can be fixed or this message
## improved.
transcripts[,txt_clean := gsub("\\n", "", txt_clean)]
head(transcripts$txt_clean)
## [1] "Art. 2 Abs. 2-4Antrag der KommissionZustimmung zum Entwurf des Bundesrates[VS]Art. 2 al. 2-4Proposition de la commissionAdhérer au projet du Conseil fédéral[VS]Angenommen - Adopté[VS]Ordnungsantrag GrobetAngesichts der hohen wirtschaftlichen Bedeutung der Revision des Bundesgesetzes über die berufliche Alters-, Hinterlassenen- und Invalidenvorsorge (BVG), angesichts der Interessenbindungen zahlreicher Nationalrätinnen und Nationalräte mit Versicherungsgesellschaften und Vorsorgefonds, beauftragt der Nationalrat sein Büro:- bis Dienstag, den 16. April, um 15 Uhr, von jedem Nationalrat und jeder Nationalrätin eine Erklärung einzuholen, in der festgehalten wird, ob er oder sie mit [PAGE 519] Versicherungsgesellschaften oder Vorsorgefondseinrichtungen Interessenbindungen irgendwelcher Art hat oder in den letzten Jahren hatte;- die Ratsmitglieder über diese offen gelegten Interessenbindungen zu informieren.[VS]Motion d'ordre GrobetVu les enjeux économiques particulièrement importants de la révision de la loi sur la prévoyance professionnelle, vieillesse, survivants et invalidité (LPP), vu les liens d'intérêts de nombreux conseillers nationaux avec les compagnies d'assurance et les fonds de prévoyance le Conseil national décide de charger son Bureau:- de demander à chacun de ses membres de remplir, d'ici mardi 16 avril à 15 h, une déclaration indiquant s'il a ou a eu ces deux dernières années des liens d'intérêts, de quelque nature que ce soit, avec des compagnies d'assurance ou des institutions gérant des fonds de prévoyance;- d'informer les membres du Conseil des liens d'intérêts ainsi déclarés."
## [2] "Definitiv - Définitivement[NAM]Für das modifizierte Konzept der Minderheit III .... 103 StimmenFür das Konzept der Minderheit IV .... 65 Stimmen"
## [3] "Fünfte Eventualabstimmung - Cinquième vote préliminaire[NAM]Für das modifizierte Konzept der Minderheit III .... 103 StimmenFür das Konzept der Minderheit III .... 67 Stimmen"
## [4] "La présidente (Maury Pasquier Liliane, présidente): Dans ces conditions nous passons au vote pour savoir si la proposition de minorité III est amendée par la proposition de minorité I en ce qui concerne l'alternative \"\"un même employeur\"\" ou \"\"un ou plusieurs employeurs\"\"."
## [5] "Vierte Eventualabstimmung - Quatrième vote préliminaire[NAM]Für das Konzept der Minderheit III .... 90 StimmenFür das Konzept der Mehrheit .... 81 Stimmen"
## [6] "Dritte Eventualabstimmung - Troisième vote préliminaire[NAM]Für das Konzept der Minderheit III .... 97 StimmenFür den Antrag Riklin .... 71 Stimmen"
transcripts[,lang := cld3::detect_language(txt_clean)]
summary(as.factor(transcripts$lang))
## af bg-Latn ca ceb co cs cy da de el-Latn
## 1 5 3 1 2 4 2 92 69565 1
## en es et eu fi fr fy gd gl ht
## 3 10 2 1 5 26264 4 1 2 2
## hu id is it ja la lb nl ro sl
## 12 1 6 975 3 31 121 3 1 4
## sv NA's
## 4 3234
head(filter(transcripts, lang != "de"))
## PersonNumber IDSpeech Language IdSubject VoteId Type
## 1: 0 21578 DE 4095 <NA> 3
## 2: 0 21581 DE 4095 <NA> 3
## 3: 0 21877 DE 4114 <NA> 3
## 4: 0 11833 DE 2321 <NA> 3
## 5: 0 11857 DE 2323 <NA> 3
## 6: 0 11889 DE 2329 <NA> 3
## Text
## 1: <pd_text><p><b>Art. 2 Abs. 2-4</b></p>\n<p><i>Antrag der Kommission</i></p>\n<p>Zustimmung zum Entwurf des Bundesrates</p>\n<p>[VS]</p>\n<p><b>Art. 2 al. 2-4</b></p>\n<p><i>Proposition de la commission</i></p>\n<p>Adhérer au projet du Conseil fédéral</p>\n<p>[VS]</p>\n<p><i>Angenommen - Adopté</i></p>\n<p>[VS]</p>\n<p><i>Ordnungsantrag Grobet</i></p>\n<p>Angesichts der hohen wirtschaftlichen Bedeutung der Revision des Bundesgesetzes über die berufliche Alters-, Hinterlassenen- und Invalidenvorsorge (BVG), angesichts der Interessenbindungen zahlreicher Nationalrätinnen und Nationalräte mit Versicherungsgesellschaften und Vorsorgefonds, beauftragt der Nationalrat sein Büro:</p>\n<p>- bis Dienstag, den 16. April, um 15 Uhr, von jedem Nationalrat und jeder Nationalrätin eine Erklärung einzuholen, in der festgehalten wird, ob er oder sie mit [PAGE 519] Versicherungsgesellschaften oder Vorsorgefondseinrichtungen Interessenbindungen irgendwelcher Art hat oder in den letzten Jahren hatte;</p>\n<p>- die Ratsmitglieder über diese offen gelegten Interessenbindungen zu informieren.</p>\n<p>[VS]</p>\n<p><i>Motion d'ordre Grobet</i></p>\n<p>Vu les enjeux économiques particulièrement importants de la révision de la loi sur la prévoyance professionnelle, vieillesse, survivants et invalidité (LPP), vu les liens d'intérêts de nombreux conseillers nationaux avec les compagnies d'assurance et les fonds de prévoyance le Conseil national décide de charger son Bureau:</p>\n<p>- de demander à chacun de ses membres de remplir, d'ici mardi 16 avril à 15 h, une déclaration indiquant s'il a ou a eu ces deux dernières années des liens d'intérêts, de quelque nature que ce soit, avec des compagnies d'assurance ou des institutions gérant des fonds de prévoyance;</p>\n<p>- d'informer les membres du Conseil des liens d'intérêts ainsi déclarés.</p>\n</pd_text>
## 2: <pd_text><p><b>La présidente</b> (Maury Pasquier Liliane, présidente): Dans ces conditions nous passons au vote pour savoir si la proposition de minorité III est amendée par la proposition de minorité I en ce qui concerne l'alternative ""un même employeur"" ou ""un ou plusieurs employeurs"".</p>\n</pd_text>
## 3: <pd_text><p><b>2. Bundesbeschluss über Finanzhilfen für familienergänzende Kinderbetreuung </b></p>\n<p><b>2. Arrêté fédéral concernant les aides financières à l'accueil extra-familial pour enfants </b></p>\n<p>[VS]</p>\n<p><i>Detailberatung - Examen de détail</i></p>\n<p>[VS]</p>\n<p><b>Titel und Ingress</b></p>\n<p><i>Antrag der Kommission: BBl</i></p>\n<p>[VS]</p>\n<p><b>Titre et préambule</b></p>\n<p><i>Proposition de la commission: FF</i></p>\n<p>[VS]</p>\n<p><i>Angenommen - Adopté</i></p>\n<p>[VS]</p>\n<p><b>Art. 1</b></p>\n<p><i>Antrag der Kommission: BBl</i></p>\n<p><i>Antrag des Bundesrates: BBl</i></p>\n<p>[VS]</p>\n<p><b>Art. 1</b></p>\n<p><i>Proposition de la commission: FF</i></p>\n<p><i>Proposition du Conseil fédéral: FF</i></p>\n</pd_text>
## 4: <pd_text><p><b>Art. 33quater</b></p>\n<p><i>Antrag der Kommission</i></p>\n<p><i>Mehrheit</i></p>\n<p><i>Titel</i></p>\n<p>Finanzierung der Anpassung der Renten an die Lohn- und Preisentwicklung</p>\n<p><i>Text</i></p>\n<p>Zeichnet sich ab, dass der Ausgleichsfonds der AHV unter den Betrag von 70 Prozent einer Jahresausgabe fällt, und ist die Finanzierung der Anwendung von Artikel 33ter AHVG nicht anderweitig gesichert, setzt die Anwendung von Artikel 33ter AHVG voraus, dass Volk und Stände einer Anhebung des Mehrwertsteuersatzes zustimmen, und zwar in dem Umfang, dass mit den daraus erzielten Erträgen die Finanzierung der Anwendung von Artikel 33ter AHVG für eine Periode von mindestens fünf Jahren sichergestellt ist. Ist diese Voraussetzung nicht erfüllt, beantragt der Bundesrat, dass die Renten nur der Preisentwicklung angepasst werden.</p>\n<p>[VS]</p>\n<p><i>Minderheit</i></p>\n<p>(Rechsteiner-Basel, Baumann Stephanie, Fasel, Goll, Gross Jost, Maury Pasquier, Rechsteiner Paul, Rossini)</p>\n<p>Ablehnung des Antrages der Mehrheit</p>\n<p>[VS] [PAGE 451] </p>\n<p><b>Art. 33quater</b></p>\n<p><i>Proposition de la commission</i></p>\n<p><i>Majorité</i></p>\n<p><i>Titre</i></p>\n<p>Financement de l'adaptation des rentes à l'évolution des salaires et des prix</p>\n<p><i>Texte</i></p>\n<p>Si, selon toute probabilité, le fonds de compensation de l'AVS est inférieur à 70 pour cent de la somme correspondant aux dépenses d'une année et que le financement de l'adaptation prévue par l'article 33ter LAVS ne peut être assuré autrement, l'application de l'article 33ter suppose que le peuple et les cantons approuvent une augmentation du taux de la taxe sur la valeur ajoutée. Ladite augmentation doit permettre la perception de recettes qui assurent l'application de l'article 33ter LAVS pendant une période d'au moins cinq années. Si cette condition n'est pas remplie, le Conseil fédéral propose de n'adapter les rentes qu'à l'évolution des prix.</p>\n<p>[VS]</p>\n<p><i>Minorité</i></p>\n<p>(Rechsteiner-Basel, Baumann Stephanie, Fasel, Goll, Gross Jost, Maury Pasquier, Rechsteiner Paul, Rossini)</p>\n<p>Rejeter la proposition de la majorité</p>\n</pd_text>
## 5: <pd_text><p>[VS]</p>\n<p>[VS]</p>\n<p>[VS]</p>\n<p>[VS]</p>\n<p>[VS]</p>\n<p><b>Einfache Anfragen</b></p>\n<p>[VS]</p>\n<p><i>Gemäss Artikel 59 Absatz 1 des Geschäftsreglementes des Nationalrates (GRN) werden im Amtlichen Bulletin auch die Einfachen Anfragen veröffentlicht. Sie werden vom Bundesrat schriftlich beantwortet und im Rat nicht behandelt (Art. 35 Abs. 6 GRN).</i></p>\n<p>[VS]</p>\n<p>[VS]</p>\n<p><b>Questions ordinaires</b></p>\n<p>[VS]</p>\n<p><i>Selon l'article 59 alinéa 1er du Règlement du Conseil national (RCN), les questions ordinaires sont également publiées dans le Bulletin officiel. Le Conseil fédéral y répond par écrit, et elles ne sont pas traitées par le Conseil (art. 35 al. 6 RCN).</i></p>\n</pd_text>
## 6: <pd_text><p><b>1. Bundesbeschluss über die Finanzierung der AHV/IV durch Anhebung der Mehrwertsteuersätze </b></p>\n<p><b>1. Arrêté fédéral sur le financement de l'AVS/AI par le biais d'un relèvement de la taxe sur la valeur ajoutée </b></p>\n</pd_text>
## MeetingCouncilAbbreviation MeetingDate MeetingVerbalixOid IdSession
## 1: N 20020415 924 4613
## 2: N 20020415 924 4613
## 3: N 20020417 927 4613
## 4: N 20010508 798 4607
## 5: N 20010509 799 4607
## 6: N 20010509 799 4607
## SpeakerFirstName SpeakerLastName SpeakerFullName SpeakerFunction CouncilId
## 1: 0
## 2: 0
## 3: 0
## 4: 0
## 5: 0
## 6: 0
## CouncilName CantonId CantonName CantonAbbreviation ParlGroupName
## 1: 0
## 2: 0
## 3: 0
## 4: 0
## 5: 0
## 6: 0
## ParlGroupAbbreviation SortOrder Start End
## 1: 56 1753-01-01 00:00:00 1753-01-01 00:00:00
## 2: 53 1753-01-01 00:00:00 1753-01-01 00:00:00
## 3: 33 1753-01-01 00:00:00 1753-01-01 00:00:00
## 4: 29 1753-01-01 00:00:00 1753-01-01 00:00:00
## 5: 2 2001-05-09 11:36:47 2001-05-09 11:41:47
## 6: 30 2001-05-09 09:19:29 2001-05-09 09:19:29
## Function DisplaySpeaker LanguageOfText ModifiedSpeech
## 1: FALSE DE 2017-11-16 16:22:27
## 2: FALSE DE 2017-11-16 16:22:27
## 3: FALSE DE 2017-11-16 16:22:29
## 4: FALSE DE 2017-11-16 16:21:00
## 5: FALSE DE 2017-11-16 16:21:01
## 6: FALSE DE 2017-11-16 16:21:01
## StartTimeWithTimezone EndTimeWithTimezone VoteBusinessNumber
## 1: 1753-01-01 00:00:00 1753-01-01 00:00:00 0
## 2: 1753-01-01 00:00:00 1753-01-01 00:00:00 0
## 3: 1753-01-01 00:00:00 1753-01-01 00:00:00 0
## 4: 1753-01-01 00:00:00 1753-01-01 00:00:00 0
## 5: 2001-05-09 09:36:47 2001-05-09 09:41:47 0
## 6: 2001-05-09 07:19:29 2001-05-09 07:19:29 0
## VoteBusinessShortNumber VoteBusinessTitle IDPerson PersonIdCode Title
## 1: NA NA NA NA
## 2: NA NA NA NA
## 3: NA NA NA NA
## 4: NA NA NA NA
## 5: NA NA NA NA
## 6: NA NA NA NA
## TitleText LastName GenderAsString DateOfBirth DateOfDeath MaritalStatus
## 1: <NA> <NA> <NA> <NA> <NA> NA
## 2: <NA> <NA> <NA> <NA> <NA> NA
## 3: <NA> <NA> <NA> <NA> <NA> NA
## 4: <NA> <NA> <NA> <NA> <NA> NA
## 5: <NA> <NA> <NA> <NA> <NA> NA
## 6: <NA> <NA> <NA> <NA> <NA> NA
## MaritalStatusText PlaceOfBirthCity PlaceOfBirthCanton ModifiedPerson
## 1: <NA> <NA> <NA> <NA>
## 2: <NA> <NA> <NA> <NA>
## 3: <NA> <NA> <NA> <NA>
## 4: <NA> <NA> <NA> <NA>
## 5: <NA> <NA> <NA> <NA>
## 6: <NA> <NA> <NA> <NA>
## FirstName OfficialName MilitaryRank MilitaryRankText NativeLanguage
## 1: <NA> <NA> NA <NA> <NA>
## 2: <NA> <NA> NA <NA> <NA>
## 3: <NA> <NA> NA <NA> <NA>
## 4: <NA> <NA> NA <NA> <NA>
## 5: <NA> <NA> NA <NA> <NA>
## 6: <NA> <NA> NA <NA> <NA>
## NumberOfChildren
## 1: NA
## 2: NA
## 3: NA
## 4: NA
## 5: NA
## 6: NA
## txt_clean
## 1: Art. 2 Abs. 2-4Antrag der KommissionZustimmung zum Entwurf des Bundesrates[VS]Art. 2 al. 2-4Proposition de la commissionAdhérer au projet du Conseil fédéral[VS]Angenommen - Adopté[VS]Ordnungsantrag GrobetAngesichts der hohen wirtschaftlichen Bedeutung der Revision des Bundesgesetzes über die berufliche Alters-, Hinterlassenen- und Invalidenvorsorge (BVG), angesichts der Interessenbindungen zahlreicher Nationalrätinnen und Nationalräte mit Versicherungsgesellschaften und Vorsorgefonds, beauftragt der Nationalrat sein Büro:- bis Dienstag, den 16. April, um 15 Uhr, von jedem Nationalrat und jeder Nationalrätin eine Erklärung einzuholen, in der festgehalten wird, ob er oder sie mit [PAGE 519] Versicherungsgesellschaften oder Vorsorgefondseinrichtungen Interessenbindungen irgendwelcher Art hat oder in den letzten Jahren hatte;- die Ratsmitglieder über diese offen gelegten Interessenbindungen zu informieren.[VS]Motion d'ordre GrobetVu les enjeux économiques particulièrement importants de la révision de la loi sur la prévoyance professionnelle, vieillesse, survivants et invalidité (LPP), vu les liens d'intérêts de nombreux conseillers nationaux avec les compagnies d'assurance et les fonds de prévoyance le Conseil national décide de charger son Bureau:- de demander à chacun de ses membres de remplir, d'ici mardi 16 avril à 15 h, une déclaration indiquant s'il a ou a eu ces deux dernières années des liens d'intérêts, de quelque nature que ce soit, avec des compagnies d'assurance ou des institutions gérant des fonds de prévoyance;- d'informer les membres du Conseil des liens d'intérêts ainsi déclarés.
## 2: La présidente (Maury Pasquier Liliane, présidente): Dans ces conditions nous passons au vote pour savoir si la proposition de minorité III est amendée par la proposition de minorité I en ce qui concerne l'alternative ""un même employeur"" ou ""un ou plusieurs employeurs"".
## 3: 2. Bundesbeschluss über Finanzhilfen für familienergänzende Kinderbetreuung 2. Arrêté fédéral concernant les aides financières à l'accueil extra-familial pour enfants [VS]Detailberatung - Examen de détail[VS]Titel und IngressAntrag der Kommission: BBl[VS]Titre et préambuleProposition de la commission: FF[VS]Angenommen - Adopté[VS]Art. 1Antrag der Kommission: BBlAntrag des Bundesrates: BBl[VS]Art. 1Proposition de la commission: FFProposition du Conseil fédéral: FF
## 4: Art. 33quaterAntrag der KommissionMehrheitTitelFinanzierung der Anpassung der Renten an die Lohn- und PreisentwicklungTextZeichnet sich ab, dass der Ausgleichsfonds der AHV unter den Betrag von 70 Prozent einer Jahresausgabe fällt, und ist die Finanzierung der Anwendung von Artikel 33ter AHVG nicht anderweitig gesichert, setzt die Anwendung von Artikel 33ter AHVG voraus, dass Volk und Stände einer Anhebung des Mehrwertsteuersatzes zustimmen, und zwar in dem Umfang, dass mit den daraus erzielten Erträgen die Finanzierung der Anwendung von Artikel 33ter AHVG für eine Periode von mindestens fünf Jahren sichergestellt ist. Ist diese Voraussetzung nicht erfüllt, beantragt der Bundesrat, dass die Renten nur der Preisentwicklung angepasst werden.[VS]Minderheit(Rechsteiner-Basel, Baumann Stephanie, Fasel, Goll, Gross Jost, Maury Pasquier, Rechsteiner Paul, Rossini)Ablehnung des Antrages der Mehrheit[VS] [PAGE 451] Art. 33quaterProposition de la commissionMajoritéTitreFinancement de l'adaptation des rentes à l'évolution des salaires et des prixTexteSi, selon toute probabilité, le fonds de compensation de l'AVS est inférieur à 70 pour cent de la somme correspondant aux dépenses d'une année et que le financement de l'adaptation prévue par l'article 33ter LAVS ne peut être assuré autrement, l'application de l'article 33ter suppose que le peuple et les cantons approuvent une augmentation du taux de la taxe sur la valeur ajoutée. Ladite augmentation doit permettre la perception de recettes qui assurent l'application de l'article 33ter LAVS pendant une période d'au moins cinq années. Si cette condition n'est pas remplie, le Conseil fédéral propose de n'adapter les rentes qu'à l'évolution des prix.[VS]Minorité(Rechsteiner-Basel, Baumann Stephanie, Fasel, Goll, Gross Jost, Maury Pasquier, Rechsteiner Paul, Rossini)Rejeter la proposition de la majorité
## 5: [VS][VS][VS][VS][VS]Einfache Anfragen[VS]Gemäss Artikel 59 Absatz 1 des Geschäftsreglementes des Nationalrates (GRN) werden im Amtlichen Bulletin auch die Einfachen Anfragen veröffentlicht. Sie werden vom Bundesrat schriftlich beantwortet und im Rat nicht behandelt (Art. 35 Abs. 6 GRN).[VS][VS]Questions ordinaires[VS]Selon l'article 59 alinéa 1er du Règlement du Conseil national (RCN), les questions ordinaires sont également publiées dans le Bulletin officiel. Le Conseil fédéral y répond par écrit, et elles ne sont pas traitées par le Conseil (art. 35 al. 6 RCN).
## 6: 1. Bundesbeschluss über die Finanzierung der AHV/IV durch Anhebung der Mehrwertsteuersätze 1. Arrêté fédéral sur le financement de l'AVS/AI par le biais d'un relèvement de la taxe sur la valeur ajoutée
## lang
## 1: fr
## 2: fr
## 3: fr
## 4: fr
## 5: fr
## 6: fr
transcripts <- filter(transcripts, lang == "de")
transcripts$txt_clean <- tolower(transcripts$txt_clean)
transcripts <- filter(transcripts, SpeakerFunction != "BK-F" &
SpeakerFunction != "BK-M" &
SpeakerFunction != "BR-F" &
SpeakerFunction != "BR-M" &
SpeakerFunction != "BPR-F" &
SpeakerFunction != "BPR-M" &
SpeakerFunction != "VPBR-F" &
SpeakerFunction != "VPBR-M")
transcripts <- filter(transcripts,PersonNumber != 0)
summary(as.factor(transcripts$SpeakerFullName)) #ok
## Binder Max Leutenegger Oberholzer Susanne
## 790 702
## Egerszegi-Obrist Christine Janiak Claude
## 696 630
## Stöckli Hans Lustenberger Ruedi
## 516 507
## Germann Hannes Stahl Jürg
## 483 462
## Schwander Pirmin Walter Hansjörg
## 449 443
## Graf Maya Seiler Hanspeter
## 439 436
## Hess Peter Aebi Andreas
## 435 419
## Fluri Kurt Vischer Daniel
## 413 389
## Bruderer Wyss Pascale Markwalder Christa
## 388 388
## Aeschbacher Ruedi Rechsteiner Paul
## 339 321
## Kaufmann Hans Bischofberger Ivo
## 304 303
## Schlüer Ulrich Kuprecht Alex
## 300 296
## Fetz Anita Fässler-Osterwalder Hildegard
## 288 283
## Gutzwiller Felix Teuscher Franziska
## 283 275
## Engler Stefan Kiener Nellen Margret
## 270 258
## Widmer Hans Noser Ruedi
## 258 257
## Hefti Thomas Bischof Pirmin
## 243 241
## Keller-Sutter Karin Föhn Peter
## 239 235
## Heim Bea Wasserfallen Christian
## 235 233
## Genner Ruth Müller Geri
## 232 227
## Schelbert Louis Christen Yves
## 227 224
## Flach Beat Riklin Kathy
## 216 216
## Studer Heiner Fehr Jacqueline
## 214 213
## Bortoluzzi Toni Pfister Theophil
## 209 208
## Baader Caspar Brändli Christoffel
## 207 207
## Glättli Balthasar Loepfe Arthur
## 205 204
## Aeschi Thomas Humbel Ruth
## 203 201
## Kälin Irène Lombardi Filippo
## 201 200
## Müller Walter Bäumle Martin
## 199 198
## Bieri Peter Graber Konrad
## 198 198
## Müller Philipp Rieder Beat
## 197 197
## Altherr Hans Zuppiger Bruno
## 192 191
## Häberli-Koller Brigitte Fehr Hans
## 189 188
## Lang Josef Rechsteiner Rudolf
## 186 185
## Thanei Anita Hutter Markus
## 184 183
## Weyeneth Hermann Baumann J. Alexander
## 183 179
## Stamm Luzi Gysin Remo
## 179 178
## Amstutz Adrian Steiner Rudolf
## 176 175
## Fehr Hans-Jürg Gross Jost
## 173 169
## Jositsch Daniel Vollmer Peter
## 169 168
## Caroni Andrea Gysi Barbara
## 167 164
## Vogler Karl Weibel Thomas
## 164 163
## Triponez Pierre Bührer Gerold
## 162 161
## Schenker Silvia Girod Bastien
## 161 159
## Schibli Ernst Zanetti Roberto
## 159 156
## Schmid Martin Sommaruga Simonetta
## 155 155
## Müller Leo Theiler Georges
## 152 152
## Fischer Roland Jans Beat
## 150 150
## Meier-Schatz Lucrezia Carobbio Guscetti Marina
## 149 148
## Huber Gabi (Other)
## 146 22091
summary(as.factor(transcripts$GenderAsString)) #ok - a lot more men :-)
## f m
## 13286 34472
summary(as.factor(transcripts$CouncilName)) #! Ständerat is still there
## Nationalrat Ständerat
## 3 38969 8786
transcripts <- filter(transcripts, CouncilName != "Ständerat")
summary(as.factor(transcripts$ParlGroupName))
##
## 3
## Christlichdemokratische Fraktion
## 2451
## CVP-Fraktion
## 741
## Die Mitte-Fraktion. Die Mitte. EVP.
## 443
## Evangelische und Unabhängige Fraktion
## 379
## EVP/EDU Fraktion
## 375
## FDP-Liberale Fraktion
## 1989
## Fraktion BD
## 733
## Fraktion CVP-EVP
## 982
## Fraktion CVP/EVP/glp
## 1148
## Fraktion der Schweizerischen Volkspartei
## 10722
## Fraktionslos
## 97
## Freisinnig-demokratische Fraktion
## 4552
## Grüne Fraktion
## 3949
## Grünliberale Fraktion
## 1019
## Liberale Fraktion
## 52
## Sozialdemokratische Fraktion
## 9337
summary(as.factor(transcripts$ParlGroupAbbreviation))
## - BD C CE CEg E G GL L M-E R RL
## 3 97 733 3192 982 1148 754 3949 1019 52 443 3407 3134
## S V
## 9337 10722
# note on abbreviations:
# V = SVP
# S = SP
# C = Christlichdemokratische Fraktion + CVP-Fraktion --> same thing according to https://www.parlament.ch/de/%C3%BCber-das-parlament/archiv/archiv-fraktionen
# M-E = Die Mitte-Fraktion. Die Mitte. EVP.
# E = Evangelische und Unabhängige Fraktion + EVP/EDU-Fraktion
# BD = Fraktion BD --> BDP
# RL = FDP-Liberale Fraktion, Freisinnig-demokratische Fraktion
# CE = Fraktion CVP-EVP
# CEg = Fraktion CVP/EVP/glp
# - = Fraktionslos
# R = Freisinnig-demokratische Fraktion!
# G = Grüne Fraktion
# GL = Grünliberale Fraktion
# L = Liberale Fraktion
transcripts$date <- as.Date(transcripts$Start) %>%
as.character() %>%
str_replace_all("-", "") %>%
as.numeric
transcripts$leg <- car::recode(transcripts$date,
"'19991201':'20031130' = 46;
'20031201':'20071130' = 47;
'20071201':'20111130' = 48;
'20111201':'20151130' = 49;
'20151201':'20191130' = 50;
'20191201':'20220307' = 51")
table(transcripts$leg, transcripts$ParlGroupAbbreviation)
##
## - BD C CE CEg E G GL L M-E R RL S V
## 46 0 31 0 1485 0 0 379 493 0 52 0 1810 0 2149 2126
## 47 1 55 0 966 0 0 375 765 0 0 0 1597 87 2280 2197
## 48 0 11 196 0 0 1148 0 963 0 0 0 0 1062 1839 1805
## 49 0 0 275 1 982 0 0 795 427 0 0 0 737 1295 1718
## 50 2 0 262 740 0 0 0 421 326 0 0 0 811 1153 1769
## 51 0 0 0 0 0 0 0 512 266 0 443 0 437 621 1107
transcripts$PGAleg <- paste0(transcripts$leg, transcripts$ParlGroupAbbreviation)
transcripts <- filter(transcripts, ParlGroupAbbreviation != "-")
transcripts <- filter(transcripts, PGAleg != "48BD")
transcripts <- filter(transcripts, PGAleg != "46L")
transcripts <- mutate(transcripts,
ParlGroupAbbreviation = if_else(ParlGroupAbbreviation == "R" & leg == 47, "RL", ParlGroupAbbreviation))
transcripts <- mutate(transcripts,
ParlGroupAbbreviation = if_else(ParlGroupAbbreviation == "C" & leg == 49, "CE", ParlGroupAbbreviation))
unknowns <- filter(transcripts, ParlGroupAbbreviation == "")
transcripts <- arrange(transcripts, IDSpeech)
transcripts[12162,22] <- "C" # Jean-Michel Cina
transcripts[12162,21] <- "Christlichdemokratische Fraktion" # Jean-Michel Cina
transcripts <- filter(transcripts, ParlGroupAbbreviation != "")
rm(unknowns)
transcripts <- select(transcripts, -PGAleg)
save(transcripts, file = "data/transcripts.clean.Rdata") # 35'909 obs.
words.list <- list(frau = c("fraue*", "[[:alpha:]]+frau*", "rolle der frau*"),
weiblich = "weiblich*",
geschlecht = "geschlecht*",
gender = "gender*",
maedchen = "mädchen*",
schwanger = "schwanger*",
geburt = "geburt*",
baby = "baby*",
kontrazeptiv = "*kontrazeptiv*",
abtreibung = "abtreibung*",
reproduktionsmedizin = "reproduktionsmedizin*",
ungeboren = "ungeboren*",
kuenstliche_befruchtung = "künstliche* befruchtung*",
praeimplantationsdiagnostik = "präimplantationsdiagnostik*",
kinder = "kind*",
krippe = "krippe*",
kita = "kita*",
tagesschule = "[[:alpha:]]*tagesschule*",
tagesbetreuung = "[[:alpha:]]*tagesbetreuung*",
erziehung = "erzieh*",
stillzeit = "stillzeit*",
tagesmutter = "tagesmutter*",
mutter = c("mutter*", "mütter*"),
vaterschaft = "vaterschaft*",
eltern = "elter*",
alleinerziehend = "alleinerziehend*",
familie = "familie*",
ehe = c("ehepaar*", "eheschliessung*", "ehebund*", "ehebündnis*", "ehestand*", "ehegatt*", "ehepartner*"),
heirat = "heirat*",
trauung = "trauung*",
gleichstellung = c("gleichstellung* von frau*", "gleichstellung* der frau*", "gleichstellung* der geschlechter"),
feminismus = "feminis*",
gleichberechtigung = c("gleichberechtigung* von frau*", "gleichberechtigung* der frau*", "gleichberechtigung* der geschlechter"),
gleichbehandlung = c("gleichbehandlung* von frau*", "gleichbehandlung* der frau*", "gleichbehandlung* der geschlechter"),
chancengleichheit = c("chancengleichheit* der frau*", "chancengleichheit* von frau*", "chancengleichheit* zwischen frau*"),
ungleichheiten = c("ungleichheit* von frau*", "ungleichheit* zwischen frau*", "ungleichheit* der geschlechter*"),
equal_pay = "equal pay",
diskriminierung = c("diskriminierung* der frau*", "diskriminierung* aufgrund des geschlechts", "diskriminierung* wegen des geschlechts",
"diskriminierung* von frau*", "diskriminierung* der geschlechter"),
vergewaltigung = c("vergewaltigung*", "vergewaltigt*"),
prostitution = "prostitution*",
genitalverstuemmelung = c("genitalverstümmelung*", "genitalmutilation*", "genitalbeschneidung*"),
zwangsheirat = c("zwangsheirat*", "zwangshochzeit*", "zwangsverheiratung*"),
sex = c("sex", "sexuelle* integrität*", "sexuelle* ausbeutung*", "sexuelle* aufklärung*", "sexuelle* belästigung*",
"sexuelle* nötigung*", "sexuelle* misshandlung*"),
haeusliche_gewalt = "häusliche* gewalt*",
ehrenmord = "ehrenmord*",
menschenhandel = "menschenhandel*",
scheidung = "scheidung*",
geschieden = "geschieden*",
witwe = "witwe*",
hinterbliebenenrente = "hinterbliebenenrente*",
betreuung = c("betreu* von kind*", "betreu* der kind*",
"betreu* von angehörigen*", "betreu* der angehörigen*", "betreu* angehöriger*",
"betreu* von betagten*", "betreu* der betagten*", "betreu* betagter*",
"betreu* von alten*", "betreu* der alten*", "betreu* alter*",
"betreu* von kranken*", "betreu* der kranken*", "betreu* kranker*",
"betreuungspflicht*", "betreuungsgutschrift*", "betreuungszulage*",
"angehörigenbetreuung*", "betagtenbetreuung*", "altersbetreuung*", "krankenbetreuung*"),
mammographie = "mammographie*",
gebaermutter = "gebärmutter*",
eierstock = "eierstock*",
unfruchtbarkeit = "unfruchtbarkeit*",
klimakterisch = "klimakterisch*",
klimakterium = "klimakterium*",
wechseljahre = "wechseljahre*",
menopause = "menopause*",
menstruation = "menstruation*",
oestrogen = "östrogen*",
brust = "brust*",
silikonimplantat = "silikonimplantat*",
hebamme = "hebamme*",
krankenschwester = "krankenschwester*",
arzthelferin = "arzthelferin*",
aupair = "aupair*",
pflege = c("pflege* von angehörigen*", "pflege* der angehörigen*",
"pflege* von betagten*", "pflege* der betagten*", "pflege* betagter*",
"pflege* von alten*", "pflege* der alten*", "pflege* alter*",
"pflege* von kranken*", "pflege* der kranken*", "pflege* kranker*",
"pflegeversicherung*", "pflegeausbildung*", "pflegeplatz*", "pflegeplätze*",
"pflegeinitiative*", "pflegefach*", "pfleger*", "pflegekraft*", "pflegekräfte",
"stationäre* pflege*", "ambulante* pflege*", "palliativpflege*", "sterbebegleitung*",
"seniorenpflege*","altenpflege*", "alterspflege*"),
haushaltskraft = "haushaltskraft*",
care = "care*",
lohngleichheit = c("lohngleichheit", "lohndiskriminierung"),
praenatal = "pränatal*",
alimente = "alimente*",
spitex = "spitex*",
foetus = c("fötus", "fetus", "föten", "fötusse"),
adoption = c("adoptiv*", "adoption*")
)
women.dict <- dictionary(words.list)
save(women.dict, file = "data/women.dict.Rds")
transcripts.c <- corpus(transcripts, text_field = "txt_clean")
transcripts.t <- tokens(transcripts.c, remove_number=T, remove_punct=T)
women.t <- tokens_lookup(transcripts.t, women.dict) # important to look up at tokens level because of multi-word dictionary entries
women.t %>% dfm %>% textstat_frequency()
## feature frequency rank docfreq group
## 1 kinder 8450 1 2448 all
## 2 familie 5647 2 1968 all
## 3 frau 2998 3 1175 all
## 4 eltern 1928 4 757 all
## 5 mutter 1034 5 497 all
## 6 ehe 596 6 307 all
## 7 geburt 586 7 382 all
## 8 geschlecht 513 8 305 all
## 9 witwe 494 9 82 all
## 10 vaterschaft 482 10 113 all
## 11 schwanger 462 11 150 all
## 12 erziehung 461 12 288 all
## 13 adoption 319 13 90 all
## 14 scheidung 299 14 100 all
## 15 abtreibung 223 15 71 all
## 16 gleichstellung 210 16 147 all
## 17 pflege 195 17 90 all
## 18 menschenhandel 173 18 83 all
## 19 heirat 164 19 122 all
## 20 lohngleichheit 144 20 82 all
## 21 vergewaltigung 143 21 100 all
## 22 sex 142 22 78 all
## 23 haeusliche_gewalt 133 23 71 all
## 24 krippe 129 24 86 all
## 25 betreuung 104 25 78 all
## 26 maedchen 102 26 76 all
## 27 alimente 102 26 35 all
## 28 gender 101 28 46 all
## 29 zwangsheirat 90 29 42 all
## 30 spitex 82 30 54 all
## 31 geschieden 75 31 40 all
## 32 alleinerziehend 71 32 51 all
## 33 care 70 33 56 all
## 34 ungeboren 65 34 31 all
## 35 kita 62 35 32 all
## 36 baby 59 36 39 all
## 37 weiblich 48 37 43 all
## 38 praenatal 48 37 20 all
## 39 prostitution 44 39 28 all
## 40 brust 44 39 29 all
## 41 diskriminierung 43 41 34 all
## 42 foetus 32 42 16 all
## 43 krankenschwester 20 43 16 all
## 44 hebamme 15 44 12 all
## 45 gleichberechtigung 12 45 12 all
## 46 gleichbehandlung 12 45 12 all
## 47 praeimplantationsdiagnostik 9 47 6 all
## 48 kuenstliche_befruchtung 8 48 8 all
## 49 feminismus 8 48 8 all
## 50 genitalverstuemmelung 5 50 4 all
## 51 gebaermutter 5 50 4 all
## 52 trauung 4 52 3 all
## 53 chancengleichheit 3 53 3 all
## 54 ungleichheiten 3 53 3 all
## 55 mammographie 2 55 2 all
## 56 unfruchtbarkeit 2 55 2 all
## 57 kontrazeptiv 1 57 1 all
## 58 reproduktionsmedizin 1 57 1 all
## 59 stillzeit 1 57 1 all
## 60 tagesmutter 1 57 1 all
## 61 equal_pay 1 57 1 all
## 62 ehrenmord 1 57 1 all
## 63 hinterbliebenenrente 1 57 1 all
## 64 oestrogen 1 57 1 all
women.dfm <- dfm(women.t)
save(women.dfm, file = "data/women.dfm.Rds")
transcripts$frau <- convert(women.dfm, to = "data.frame")[,2]
transcripts$weiblich <- convert(women.dfm, to = "data.frame")[,3]
transcripts$geschlecht <- convert(women.dfm, to = "data.frame")[,4]
transcripts$gender <- convert(women.dfm, to = "data.frame")[,5]
transcripts$maedchen <- convert(women.dfm, to = "data.frame")[,6]
transcripts$schwanger <- convert(women.dfm, to = "data.frame")[,7]
transcripts$geburt <- convert(women.dfm, to = "data.frame")[,8]
transcripts$baby <- convert(women.dfm, to = "data.frame")[,9]
transcripts$kontrazeptiv <- convert(women.dfm, to = "data.frame")[,10]
transcripts$abtreibung <- convert(women.dfm, to = "data.frame")[,11]
transcripts$reproduktionsmedizin <- convert(women.dfm, to = "data.frame")[,12]
transcripts$ungeboren <- convert(women.dfm, to = "data.frame")[,13]
transcripts$kuenstliche_befruchtung <- convert(women.dfm, to = "data.frame")[,14]
transcripts$praeimplantationsdiagnostik <- convert(women.dfm, to = "data.frame")[,15]
transcripts$kinder <- convert(women.dfm, to = "data.frame")[,16]
transcripts$krippe <- convert(women.dfm, to = "data.frame")[,17]
transcripts$kita <- convert(women.dfm, to = "data.frame")[,18]
transcripts$tagesschule <- convert(women.dfm, to = "data.frame")[,19]
transcripts$tagesbetreuung <- convert(women.dfm, to = "data.frame")[,20]
transcripts$erziehung <- convert(women.dfm, to = "data.frame")[,21]
transcripts$stillzeit <- convert(women.dfm, to = "data.frame")[,22]
transcripts$tagesmutter <- convert(women.dfm, to = "data.frame")[,23]
transcripts$mutter <- convert(women.dfm, to = "data.frame")[,24]
transcripts$vaterschaft <- convert(women.dfm, to = "data.frame")[,25]
transcripts$eltern <- convert(women.dfm, to = "data.frame")[,26]
transcripts$alleinerziehend <- convert(women.dfm, to = "data.frame")[,27]
transcripts$familie <- convert(women.dfm, to = "data.frame")[,28]
transcripts$ehe <- convert(women.dfm, to = "data.frame")[,29]
transcripts$heirat <- convert(women.dfm, to = "data.frame")[,30]
transcripts$trauung <- convert(women.dfm, to = "data.frame")[,31]
transcripts$gleichstellung <- convert(women.dfm, to = "data.frame")[,32]
transcripts$feminismus <- convert(women.dfm, to = "data.frame")[,33]
transcripts$gleichberechtigung <- convert(women.dfm, to = "data.frame")[,34]
transcripts$gleichbehandlung <- convert(women.dfm, to = "data.frame")[,35]
transcripts$chancengleichheit <- convert(women.dfm, to = "data.frame")[,36]
transcripts$ungleichheiten <- convert(women.dfm, to = "data.frame")[,37]
transcripts$equal_pay <- convert(women.dfm, to = "data.frame")[,38]
transcripts$diskriminierung <- convert(women.dfm, to = "data.frame")[,39]
transcripts$vergewaltigung <- convert(women.dfm, to = "data.frame")[,40]
transcripts$prostitution <- convert(women.dfm, to = "data.frame")[,41]
transcripts$genitalverstuemmelung <- convert(women.dfm, to = "data.frame")[,42]
transcripts$zwangsheirat <- convert(women.dfm, to = "data.frame")[,43]
transcripts$sex <- convert(women.dfm, to = "data.frame")[,44]
transcripts$haeusliche_gewalt <- convert(women.dfm, to = "data.frame")[,45]
transcripts$ehrenmord <- convert(women.dfm, to = "data.frame")[,46]
transcripts$menschenhandel <- convert(women.dfm, to = "data.frame")[,47]
transcripts$scheidung <- convert(women.dfm, to = "data.frame")[,48]
transcripts$geschieden <- convert(women.dfm, to = "data.frame")[,49]
transcripts$witwe <- convert(women.dfm, to = "data.frame")[,50]
transcripts$hinterbliebenenrente <- convert(women.dfm, to = "data.frame")[,51]
transcripts$betreuung <- convert(women.dfm, to = "data.frame")[,52]
transcripts$mammographie <- convert(women.dfm, to = "data.frame")[,53]
transcripts$gebaermutter <- convert(women.dfm, to = "data.frame")[,54]
transcripts$eierstock <- convert(women.dfm, to = "data.frame")[,55]
transcripts$unfruchtbarkeit <- convert(women.dfm, to = "data.frame")[,56]
transcripts$klimakterisch <- convert(women.dfm, to = "data.frame")[,57]
transcripts$klimakterium <- convert(women.dfm, to = "data.frame")[,58]
transcripts$wechseljahre <- convert(women.dfm, to = "data.frame")[,59]
transcripts$menopause <- convert(women.dfm, to = "data.frame")[,60]
transcripts$menstruation <- convert(women.dfm, to = "data.frame")[,61]
transcripts$oestrogen <- convert(women.dfm, to = "data.frame")[,62]
transcripts$brust <- convert(women.dfm, to = "data.frame")[,63]
transcripts$silikonimplantat <- convert(women.dfm, to = "data.frame")[,64]
transcripts$hebamme <- convert(women.dfm, to = "data.frame")[,65]
transcripts$krankenschwester <- convert(women.dfm, to = "data.frame")[,66]
transcripts$arzthelferin <- convert(women.dfm, to = "data.frame")[,67]
transcripts$aupair <- convert(women.dfm, to = "data.frame")[,68]
transcripts$pflege <- convert(women.dfm, to = "data.frame")[,69]
transcripts$haushaltskraft <- convert(women.dfm, to = "data.frame")[,70]
transcripts$care <- convert(women.dfm, to = "data.frame")[,71]
transcripts$lohngleichheit <- convert(women.dfm, to = "data.frame")[,72]
transcripts$praenatal <- convert(women.dfm, to = "data.frame")[,73]
transcripts$alimente <- convert(women.dfm, to = "data.frame")[,74]
transcripts$spitex <- convert(women.dfm, to = "data.frame")[,75]
transcripts$foetus <- convert(women.dfm, to = "data.frame")[,76]
transcripts$adoption <- convert(women.dfm, to = "data.frame")[,77]
transcripts$women <- ifelse(rowSums(transcripts[,58:133] > 0), 1, 0)
transcripts.women <- as.data.frame(filter(transcripts, women > 0))
transcripts.maedchen <- as.data.frame(filter(transcripts, maedchen > 0))
transcripts.geburt <- as.data.frame(filter(transcripts, geburt > 0))
transcripts.baby <- as.data.frame(filter(transcripts, baby > 0))
transcripts.eltern <- as.data.frame(filter(transcripts, eltern > 0))
transcripts.maedchen.unclean <- transcripts.maedchen[!(transcripts.maedchen[,62] == 1) & any(transcripts.maedchen[,c(58:61,62:133)]!= 0) &
grepl("mädchen für alles", transcripts.maedchen[,54]), ]
transcripts.geburt.unclean <- transcripts.geburt[!(transcripts.geburt[,64] == 1) & any(transcripts.geburt[,c(58:63,65:133)]!= 0) &
grepl("geburtstag*", transcripts.geburt[,54]), ]
transcripts.baby.unclean <- transcripts.baby[!(transcripts.baby[,65] == 1) & any(transcripts.baby[,c(58:64,66:133)]!= 0) &
grepl("babyboom*|babylon*", transcripts.baby[,54]), ]
transcripts.eltern.unclean <- transcripts.eltern[!(transcripts.eltern[,82] == 1) & any(transcripts.eltern[,c(58:81,83:133)]!= 0) &
grepl("elterngeneration*", transcripts.eltern[,54]), ]
transcripts.women.clean <- transcripts.women[!(transcripts.women[,2] %in% transcripts.maedchen.unclean[,2]),]
transcripts.women.clean <- transcripts.women.clean[!(transcripts.women.clean[,2] %in% transcripts.geburt.unclean[,2]),]
transcripts.women.clean <- transcripts.women.clean[!(transcripts.women.clean[,2] %in% transcripts.baby.unclean[,2]),]
transcripts.women.clean <- transcripts.women.clean[!(transcripts.women.clean[,2] %in% transcripts.eltern.unclean[,2]),]
# clean version contains 5246 obs.
save(transcripts.women.clean, file = "data/transcripts.women.Rdata")
anteile <- read.xlsx("data/frauenanteile_bfs_partei.xlsx", 2) %>%
select(-NA.)
anteile[,2:13] <- sapply(anteile[,2:13], as.numeric)
anteile <- anteile %>%
pivot_longer(X1999_f:X2019_m, names_to = "leg_sex", values_to = "n_nr") %>%
rename(ParlGroupAbbreviation = partei)
anteile$sex <- substr(anteile$leg_sex, 7,7)
anteile$leg <- substr(anteile$leg_sex, 2,5)
anteile <- select(anteile, -leg_sex) %>%
pivot_wider(names_from = "sex", values_from = "n_nr") %>%
rename(f_nr_fr = f,
m_nr_fr = m)
anteile$f_perc_nr_fr <- round(100*anteile$f_nr_fr/(anteile$f_nr_fr + anteile$m_nr_fr), 1)
anteile$leg <- car::recode(anteile$leg,
"1999 = 46;
2003 = 47;
2007 = 48;
2011 = 49;
2015 = 50;
2019 = 51")
transcripts.women.clean <- left_join(transcripts.women.clean, anteile, by = c("ParlGroupAbbreviation", "leg"))
anteile.total <- filter(anteile, ParlGroupAbbreviation == "Total") %>%
rename(f_nr = f_nr_fr,
m_nr = m_nr_fr,
f_perc_nr = f_perc_nr_fr) %>%
select(-ParlGroupAbbreviation)
transcripts.women.clean <- left_join(transcripts.women.clean, anteile.total, by = "leg")
transcripts <- left_join(transcripts, anteile, by = c("ParlGroupAbbreviation", "leg"))
transcripts <- left_join(transcripts, anteile.total, by = "leg")
nrow(transcripts.women.clean)/nrow(transcripts) # 13.6% of all speeches are about women's topics
## [1] 0.1358188
transcripts.women.leg <- group_by(transcripts.women.clean, leg) %>%
summarise(n = n())
transcripts.women.m <- filter(transcripts.women.clean, GenderAsString == "m") # 2458 obs.
save(transcripts.women.m, file = "data/transcripts.women.m.Rdata")
transcripts.women.m.leg <- group_by(transcripts.women.m, leg) %>%
summarise(n = n()) %>%
mutate(m_perc = round(100*n/transcripts.women.leg$n, 1)) %>%
rename(m = n)
transcripts.women.clean <- left_join(transcripts.women.clean, transcripts.women.m.leg, by = "leg")
transcripts <- left_join(transcripts, transcripts.women.m.leg, by = "leg")
transcripts.leg <- group_by(transcripts, leg) %>%
summarise(n = n())
transcripts.m <- filter(transcripts, GenderAsString == "m") # 24'421 obs.
save(transcripts.m, file = "data/transcripts.m.Rdata")
transcripts.m.leg <- group_by(transcripts.m, leg) %>%
summarise(n = n()) %>%
mutate(m_perc_all = round(100*n/transcripts.leg$n, 1)) %>%
rename(m_all = n)
transcripts.women.clean <- left_join(transcripts.women.clean, transcripts.m.leg, by = "leg")
transcripts <- left_join(transcripts, transcripts.m.leg, by = "leg")
transcripts.women.fr.leg <- group_by(transcripts.women.clean, ParlGroupAbbreviation, leg) %>%
summarise(n = n()) %>% ungroup
## `summarise()` has grouped output by 'ParlGroupAbbreviation'. You can override
## using the `.groups` argument.
transcripts.women.m.fr.leg <- group_by(transcripts.women.m, ParlGroupAbbreviation, leg) %>%
summarise(n = n()) %>% ungroup %>%
mutate(m_perc_fr = round(100*n/transcripts.women.fr.leg$n, 1)) %>%
rename(m_fr = n)
## `summarise()` has grouped output by 'ParlGroupAbbreviation'. You can override
## using the `.groups` argument.
transcripts.women.clean <- left_join(transcripts.women.clean, transcripts.women.m.fr.leg, by = c("ParlGroupAbbreviation", "leg"))
transcripts <- left_join(transcripts, transcripts.women.m.fr.leg, by = c("ParlGroupAbbreviation", "leg"))
transcripts.fr.leg <- group_by(transcripts, ParlGroupAbbreviation, leg) %>%
summarise(n = n()) %>% ungroup
## `summarise()` has grouped output by 'ParlGroupAbbreviation'. You can override
## using the `.groups` argument.
transcripts.m.fr.leg <- group_by(transcripts.m, ParlGroupAbbreviation, leg) %>%
summarise(n = n()) %>% ungroup %>%
mutate(m_perc_fr_all = round(100*n/transcripts.fr.leg$n, 1)) %>%
rename(m_fr_all = n)
## `summarise()` has grouped output by 'ParlGroupAbbreviation'. You can override
## using the `.groups` argument.
transcripts.women.clean <- left_join(transcripts.women.clean, transcripts.m.fr.leg, by = c("ParlGroupAbbreviation", "leg"))
transcripts <- left_join(transcripts, transcripts.m.fr.leg, by = c("ParlGroupAbbreviation", "leg"))
transcripts.women.m <- filter(transcripts.women.clean,
GenderAsString == "m")
transcripts.m <- filter(transcripts,
GenderAsString == "m")
save(transcripts.women.clean, file = "data/transcripts.women.Rdata")
save(transcripts.women.m, file = "data/transcripts.women.m.Rdata")
save(transcripts, file = "data/transcripts.Rdata")
save(transcripts.m, file = "data/transcripts.m.Rdata")
transcripts.women.all <- group_by(transcripts.women.clean, GenderAsString) %>%
summarise(n = n())
ggplot(transcripts.women.all,
aes(x = GenderAsString, y = n)) +
geom_col(fill = "light blue") +
geom_text(aes(y = n, label = n)) +
theme_bw() # slightly more speeches by men than by women on women's topics (ca. 2769)
ggplot(transcripts.women.m.leg,
aes(x = leg, y = m)) +
geom_col(fill = "light blue") +
theme_bw() # absolute number of speeches on women's topics by male parliamentarians has decreased over the legislatures
ggplot(transcripts.women.leg,
aes(x = leg, y = n)) +
geom_col(fill = "light blue") +
theme_bw() # absolute number of speeches on women's topics by all parliamentarians has decreased over the legislatures
ggplot(transcripts.m.leg,
aes(x = leg, y = m_all)) +
geom_col(fill = "light blue") +
theme_bw() # absolute number of speeches overall by male parliamentarians has decreased over time
transcripts.women.m.fr <- group_by(transcripts.women.m.fr.leg, ParlGroupAbbreviation) %>%
summarise(m_fr = sum(m_fr))
ggplot(transcripts.women.m.fr,
aes(x = ParlGroupAbbreviation, y = m_fr)) +
geom_col(fill = "light blue") +
theme_bw() # by far the most speeches by the SVP, followed by SP; then others
ggplot(transcripts.women.m.fr.leg,
aes(x = leg, y = m_fr)) +
geom_col(fill = "light blue") +
facet_wrap(~ParlGroupAbbreviation) +
theme_bw() # general downwards tendency with some boosts in leg 49
transcripts.women.m.leg.perc <- group_by(transcripts.women.m, f_perc_nr, m_perc, m_perc_all, leg) %>%
summarise()
## `summarise()` has grouped output by 'f_perc_nr', 'm_perc', 'm_perc_all'. You
## can override using the `.groups` argument.
transcripts.women.m.leg.perc <- transcripts.women.m.leg.perc %>%
mutate(m_perc_nr = 100 - f_perc_nr,
m_perc_d = m_perc - m_perc_nr,
m_perc_all_d = m_perc_all - m_perc_nr,
m_perc_dd = m_perc_all - m_perc)
transcripts.women.m.leg.perc1 <- transcripts.women.m.leg.perc %>%
ungroup() %>%
pivot_longer(cols = c(m_perc, m_perc_all),
names_to = "m_anteil",
values_to = "perc")
ggplot(transcripts.women.m.leg.perc1,
aes(x = leg)) +
geom_bar(aes(y = perc,
fill = m_anteil),
position = "dodge", stat = "identity") +
geom_text(aes(y = perc,
label = perc,
fill = m_anteil,
vjust = 3),
position = position_dodge(0.9),
color = "white",
size = 4) +
scale_fill_manual(name = "",
labels = c("Redeanteil männlicher Nationalräte\n zu «Frauenthemen»", "Redeanteil männlicher Nationalräte\n insgesamt"),
values = c("#8700f9", "#40e0d0")) +
scale_color_manual(name = "",
labels = "Männeranteil im Nationalrat",
values = "darkblue") +
geom_line(aes(y = m_perc_nr,
color = "m_perc_nr"),
size = 1.5) +
geom_text(aes(y = m_perc_nr,
label = m_perc_nr,
vjust = -1),
size = 4) +
annotate(geom = "text",
x = 45.75,
y = 64.9,
label = "Differenz: \n 20.2 Pp.") +
annotate(geom = "text",
x = 48.75,
y = 62.05,
label = "Differenz: \n 13.7 Pp.") +
annotate(geom = "text",
x = 50.75,
y = 51.25,
label = "Differenz: \n 14.1 Pp.") +
annotate("segment",
x = 46, xend = 46,
y = 55.05, yend = 74.75,
colour = "#8700f9",
size = 1.5,
arrow = arrow(ends = "both")) +
annotate("segment",
x = 51, xend = 51,
y = 44.45, yend = 58.05,
colour = "#8700f9",
size = 1.5,
arrow = arrow(ends = "both")) +
annotate("segment",
x = 49, xend = 49,
y = 55.45, yend = 68.65,
colour = "#8700f9",
size = 1.5,
arrow = arrow(ends = "both")) +
scale_x_continuous(breaks = c(46, 47, 48, 49, 50, 51),
labels = c("46", "47", "48", "49", "50", "51")) +
scale_y_continuous(breaks = c(0, 20, 40, 60, 80),
labels = paste0(c(0, 20, 40, 60, 80), "%")) +
labs(title = "Männer sprechen deutlich weniger über «frauenspezifische» Themen",
subtitle = "Redeanteile der Nationalräte",
caption = "Quelle: swissparl",
color = "Männeranteil im Nationalrat") +
xlab("Legislatur") +
ylab("Redeanteile in Prozent") +
theme_bw() +
theme(plot.title = element_text(size = 16, face = "bold"),
plot.subtitle = element_text(size = 14),
legend.text = element_text(size = 14),
axis.text = element_text(size = 14),
axis.title = element_text(size = 14))
## Warning: Ignoring unknown aesthetics: fill
ggsave("graphics/redeanteile_vs_nranteile_zeit_bar.png", width = 13, height = 7)
kw.dfm <- corpus(transcripts.women.clean, text_field = "txt_clean") %>%
tokens(remove_numbers = T, remove_punct = T) %>%
tokens_lookup(women.dict) %>%
dfm()
kw.dfm %>% textstat_frequency()
## feature frequency rank docfreq group
## 1 kinder 8429 1 2445 all
## 2 familie 5620 2 1964 all
## 3 frau 2979 3 1170 all
## 4 eltern 1919 4 754 all
## 5 mutter 1032 5 496 all
## 6 ehe 593 6 305 all
## 7 geschlecht 513 7 305 all
## 8 witwe 494 8 82 all
## 9 geburt 487 9 340 all
## 10 vaterschaft 480 10 112 all
## 11 schwanger 462 11 150 all
## 12 erziehung 460 12 287 all
## 13 adoption 319 13 90 all
## 14 scheidung 295 14 99 all
## 15 abtreibung 223 15 71 all
## 16 gleichstellung 210 16 147 all
## 17 pflege 195 17 90 all
## 18 menschenhandel 173 18 83 all
## 19 heirat 163 19 121 all
## 20 vergewaltigung 143 20 100 all
## 21 lohngleichheit 143 20 81 all
## 22 sex 142 22 78 all
## 23 haeusliche_gewalt 133 23 71 all
## 24 krippe 129 24 86 all
## 25 betreuung 103 25 77 all
## 26 maedchen 102 26 76 all
## 27 gender 101 27 46 all
## 28 alimente 101 27 34 all
## 29 zwangsheirat 90 29 42 all
## 30 spitex 82 30 54 all
## 31 geschieden 75 31 40 all
## 32 alleinerziehend 70 32 50 all
## 33 care 70 32 56 all
## 34 ungeboren 65 34 31 all
## 35 kita 62 35 32 all
## 36 baby 56 36 37 all
## 37 weiblich 48 37 43 all
## 38 praenatal 48 37 20 all
## 39 prostitution 44 39 28 all
## 40 brust 44 39 29 all
## 41 diskriminierung 43 41 34 all
## 42 foetus 32 42 16 all
## 43 krankenschwester 19 43 15 all
## 44 hebamme 15 44 12 all
## 45 gleichberechtigung 12 45 12 all
## 46 gleichbehandlung 12 45 12 all
## 47 praeimplantationsdiagnostik 9 47 6 all
## 48 kuenstliche_befruchtung 8 48 8 all
## 49 feminismus 8 48 8 all
## 50 genitalverstuemmelung 5 50 4 all
## 51 gebaermutter 5 50 4 all
## 52 trauung 4 52 3 all
## 53 chancengleichheit 3 53 3 all
## 54 ungleichheiten 3 53 3 all
## 55 mammographie 2 55 2 all
## 56 unfruchtbarkeit 2 55 2 all
## 57 kontrazeptiv 1 57 1 all
## 58 reproduktionsmedizin 1 57 1 all
## 59 stillzeit 1 57 1 all
## 60 tagesmutter 1 57 1 all
## 61 equal_pay 1 57 1 all
## 62 ehrenmord 1 57 1 all
## 63 hinterbliebenenrente 1 57 1 all
## 64 oestrogen 1 57 1 all
# vaterschaft
transcripts.women.vaterschaft <- filter(transcripts.women.clean, vaterschaft > 0) %>%
mutate(m_perc_nr = 100 - f_perc_nr)
transcripts.women.m.vaterschaft <- filter(transcripts.women.vaterschaft, GenderAsString == "m")
transcripts.women.vaterschaft.leg <- group_by(transcripts.women.vaterschaft, leg) %>%
summarise(n = n())
transcripts.women.m.vaterschaft.leg <- group_by(transcripts.women.m.vaterschaft, leg) %>%
summarise(n = n()) %>%
mutate(m_perc_vaterschaft = round(100*n/transcripts.women.vaterschaft.leg$n, 1))
transcripts.women.vaterschaft <- left_join(transcripts.women.vaterschaft, transcripts.women.m.vaterschaft.leg, by = "leg")
transcripts.women.vaterschaft <- rename(transcripts.women.vaterschaft,
m_vaterschaft = n)
transcripts.women.m.vaterschaft <- filter(transcripts.women.vaterschaft, GenderAsString == "m")
transcripts.women.m.vaterschaft.leg.perc <- group_by(transcripts.women.m.vaterschaft, m_perc_nr, m_perc_vaterschaft, leg) %>%
summarise()
## `summarise()` has grouped output by 'm_perc_nr', 'm_perc_vaterschaft'. You can
## override using the `.groups` argument.
ggplot(transcripts.women.m.vaterschaft.leg.perc,
aes(x = leg)) +
geom_line(aes(x = leg, y = m_perc_vaterschaft, color = "Redeanteil männlicher Nationalräte zum Thema 'Vaterschaft'"), size = 2) +
geom_line(aes(x = leg, y = m_perc_nr, color = "Männeranteil im NR"), size = 2) +
scale_color_manual(name = "",
values = c("Redeanteil männlicher Nationalräte zum Thema 'Vaterschaft'" = "#8700f9",
"Männeranteil im NR" = "darkblue")) +
scale_x_continuous(breaks = c(46, 47, 48, 49, 50, 51),
labels = c("46", "47", "48", "49", "50", "51")) +
scale_y_continuous(breaks = c(0, 20, 40, 60, 80),
labels = paste0(c(0, 20, 40, 60, 80), "%"),
limits = c(0,80)) +
labs(title = "Vaterschaft",
subtitle = "Redeanteile der Nationalräte zu verschiedenen Subthemen",
caption = "Quelle: swissparl") +
xlab("Legislatur") +
ylab("Anteile in Prozent") +
theme_bw() +
theme(plot.title = element_text(face = "bold"))
ggsave("graphics/redeanteile_vs_nranteile_zeit_vaterschaft.png", width = 24, height = 10)
# schwanger
transcripts.women.schwanger <- filter(transcripts.women.clean, schwanger > 0) %>%
mutate(m_perc_nr = 100 - f_perc_nr)
transcripts.women.m.schwanger <- filter(transcripts.women.schwanger, GenderAsString == "m")
transcripts.women.schwanger.leg <- group_by(transcripts.women.schwanger, leg) %>%
summarise(n = n())
transcripts.women.m.schwanger.leg <- group_by(transcripts.women.m.schwanger, leg) %>%
summarise(n = n()) %>%
mutate(m_perc_schwanger = round(100*n/transcripts.women.schwanger.leg$n, 1))
transcripts.women.schwanger <- left_join(transcripts.women.schwanger, transcripts.women.m.schwanger.leg, by = "leg")
transcripts.women.schwanger <- rename(transcripts.women.schwanger,
m_schwanger = n)
transcripts.women.m.schwanger <- filter(transcripts.women.schwanger, GenderAsString == "m")
transcripts.women.m.schwanger.leg.perc <- group_by(transcripts.women.m.schwanger, m_perc_nr, m_perc_schwanger, leg) %>%
summarise()
## `summarise()` has grouped output by 'm_perc_nr', 'm_perc_schwanger'. You can
## override using the `.groups` argument.
ggplot(transcripts.women.m.schwanger.leg.perc,
aes(x = leg)) +
geom_line(aes(x = leg, y = m_perc_schwanger, color = "Redeanteil männlicher Nationalräte zum Thema 'Schwangerschaft'"), size = 2) +
geom_line(aes(x = leg, y = m_perc_nr, color = "Männeranteil im NR"), size = 2) +
scale_color_manual(name = "",
values = c("Redeanteil männlicher Nationalräte zum Thema 'Schwangerschaft'" = "#8700f9",
"Männeranteil im NR" = "darkblue")) +
scale_x_continuous(breaks = c(46, 47, 48, 49, 50, 51),
labels = c("46", "47", "48", "49", "50", "51")) +
scale_y_continuous(breaks = c(0, 20, 40, 60, 80),
labels = paste0(c(0, 20, 40, 60, 80), "%"),
limits = c(0,80)) +
labs(title = "Schwangerschaft",
subtitle = "Redeanteile der Nationalräte zu verschiedenen Subthemen",
caption = "Quelle: swissparl") +
xlab("Legislatur") +
ylab("Anteile in Prozent") +
theme_bw() +
theme(plot.title = element_text(face = "bold"))
ggsave("graphics/redeanteile_vs_nranteile_zeit_schwanger.png", width = 24, height = 10)
# vergewaltigung
transcripts.women.vergewaltigung <- filter(transcripts.women.clean, vergewaltigung > 0) %>%
mutate(m_perc_nr = 100 - f_perc_nr)
transcripts.women.m.vergewaltigung <- filter(transcripts.women.vergewaltigung, GenderAsString == "m")
transcripts.women.vergewaltigung.leg <- group_by(transcripts.women.vergewaltigung, leg) %>%
summarise(n = n())
transcripts.women.m.vergewaltigung.leg <- group_by(transcripts.women.m.vergewaltigung, leg) %>%
summarise(n = n()) %>%
mutate(m_perc_vergewaltigung = round(100*n/transcripts.women.vergewaltigung.leg$n, 1))
transcripts.women.vergewaltigung <- left_join(transcripts.women.vergewaltigung, transcripts.women.m.vergewaltigung.leg, by = "leg")
transcripts.women.vergewaltigung <- rename(transcripts.women.vergewaltigung,
m_vergewaltigung = n)
transcripts.women.m.vergewaltigung <- filter(transcripts.women.vergewaltigung, GenderAsString == "m")
transcripts.women.m.vergewaltigung.leg.perc <- group_by(transcripts.women.m.vergewaltigung, m_perc_nr, m_perc_vergewaltigung, leg) %>%
summarise()
## `summarise()` has grouped output by 'm_perc_nr', 'm_perc_vergewaltigung'. You
## can override using the `.groups` argument.
ggplot(transcripts.women.m.vergewaltigung.leg.perc,
aes(x = leg)) +
geom_line(aes(x = leg, y = m_perc_vergewaltigung, color = "Redeanteil männlicher Nationalräte zum Thema 'Vergewaltigung'"), size = 2) +
geom_line(aes(x = leg, y = m_perc_nr, color = "Männeranteil im NR"), size = 2) +
scale_color_manual(name = "",
values = c("Redeanteil männlicher Nationalräte zum Thema 'Vergewaltigung'" = "#8700f9",
"Männeranteil im NR" = "darkblue")) +
scale_x_continuous(breaks = c(46, 47, 48, 49, 50, 51),
labels = c("46", "47", "48", "49", "50", "51")) +
scale_y_continuous(breaks = c(0, 20, 40, 60, 80),
labels = paste0(c(0, 20, 40, 60, 80), "%"),
limits = c(0,80)) +
labs(title = "Vergewaltigung",
subtitle = "Redeanteile der Nationalräte zu verschiedenen Subthemen",
caption = "Quelle: swissparl") +
xlab("Legislatur") +
ylab("Anteile in Prozent") +
theme_bw() +
theme(plot.title = element_text(face = "bold"))
ggsave("graphics/redeanteile_vs_nranteile_zeit_vergewaltigung.png", width = 24, height = 10)
# lohngleichheit
transcripts.women.lohngleichheit <- filter(transcripts.women.clean, lohngleichheit > 0) %>%
mutate(m_perc_nr = 100 - f_perc_nr)
transcripts.women.m.lohngleichheit <- filter(transcripts.women.lohngleichheit, GenderAsString == "m")
transcripts.women.lohngleichheit.leg <- group_by(transcripts.women.lohngleichheit, leg) %>%
summarise(n = n())
transcripts.women.m.lohngleichheit.leg <- group_by(transcripts.women.m.lohngleichheit, leg) %>%
summarise(n = n()) %>%
mutate(m_perc_lohngleichheit = round(100*n/transcripts.women.lohngleichheit.leg$n, 1))
transcripts.women.lohngleichheit <- left_join(transcripts.women.lohngleichheit, transcripts.women.m.lohngleichheit.leg, by = "leg")
transcripts.women.lohngleichheit <- rename(transcripts.women.lohngleichheit,
m_lohngleichheit = n)
transcripts.women.m.lohngleichheit <- filter(transcripts.women.lohngleichheit, GenderAsString == "m")
transcripts.women.m.lohngleichheit.leg.perc <- group_by(transcripts.women.m.lohngleichheit, m_perc_nr, m_perc_lohngleichheit, leg) %>%
summarise()
## `summarise()` has grouped output by 'm_perc_nr', 'm_perc_lohngleichheit'. You
## can override using the `.groups` argument.
ggplot(transcripts.women.m.lohngleichheit.leg.perc,
aes(x = leg)) +
geom_line(aes(x = leg, y = m_perc_lohngleichheit, color = "Redeanteil männlicher Nationalräte zum Thema 'Lohngleichheit'"), size = 2) +
geom_line(aes(x = leg, y = m_perc_nr, color = "Männeranteil im NR"), size = 2) +
scale_color_manual(name = "",
values = c("Redeanteil männlicher Nationalräte zum Thema 'Lohngleichheit'" = "#8700f9",
"Männeranteil im NR" = "darkblue")) +
scale_x_continuous(breaks = c(46, 47, 48, 49, 50, 51),
labels = c("46", "47", "48", "49", "50", "51")) +
scale_y_continuous(breaks = c(0, 20, 40, 60, 80),
labels = paste0(c(0, 20, 40, 60, 80), "%"),
limits = c(0,80)) +
labs(title = "Lohngleichheit",
subtitle = "Redeanteile der Nationalräte zu verschiedenen Subthemen",
caption = "Quelle: swissparl") +
xlab("Legislatur") +
ylab("Anteile in Prozent") +
theme_bw() +
theme(plot.title = element_text(face = "bold"))
ggsave("graphics/redeanteile_vs_nranteile_zeit_lohngleichheit.png", width = 24, height = 10)
# all together as small multiples
transcripts.women.m.kw.leg.perc <- left_join(transcripts.women.m.vaterschaft.leg.perc, transcripts.women.m.vergewaltigung.leg.perc) %>%
left_join(transcripts.women.m.schwanger.leg.perc) %>%
left_join(transcripts.women.m.lohngleichheit.leg.perc) %>%
pivot_longer(c(m_perc_vaterschaft, m_perc_vergewaltigung, m_perc_schwanger, m_perc_lohngleichheit), names_to = "kw", values_to = "m_perc")
## Joining, by = c("m_perc_nr", "leg")
## Joining, by = c("m_perc_nr", "leg")
## Joining, by = c("m_perc_nr", "leg")
m_perc.labs <- c("Lohngleichheit", "Schwangerschaft", "Vaterschaft", "Vergewaltigung")
names(m_perc.labs) = c("m_perc_lohngleichheit", "m_perc_schwanger", "m_perc_vaterschaft", "m_perc_vergewaltigung")
ggplot(transcripts.women.m.kw.leg.perc,
aes(x = leg)) +
geom_line(aes(x = leg, y = m_perc, color = "Redeanteil männlicher Nationalräte"), size = 1.5) +
geom_line(aes(x = leg, y = m_perc_nr, color = "Männeranteil im Nationalrat"), size = 1.5) +
scale_color_manual(name = "",
values = c("Redeanteil männlicher Nationalräte" = "#8700f9",
"Männeranteil im Nationalrat" = "darkblue")) +
facet_wrap(~kw,
labeller = labeller(kw = m_perc.labs)) +
scale_x_continuous(breaks = c(46, 47, 48, 49, 50, 51),
labels = c("46", "47", "48", "49", "50", "51")) +
scale_y_continuous(breaks = c(0, 20, 40, 60, 80),
labels = paste0(c(0, 20, 40, 60, 80), "%"),
limits = c(0,80)) +
labs(title = "Der Vaterschaftsurlaub bringt männliche Nationalräte zum Reden",
subtitle = "Redeanteile der Nationalräte zu verschiedenen Subthemen",
caption = "Quelle: swissparl") +
xlab("Legislatur") +
ylab("Anteile in Prozent") +
theme_bw() +
theme(plot.title = element_text(face = "bold"),
legend.text = element_text(size = 12),
strip.background = element_rect(fill="#ebd4ff"))
ggsave("graphics/redeanteile_vs_nranteile_zeit_kw.png", width = 9, height = 6)
# article version 2.0: recode party fractions
transcripts.women.m$ParlGroupAbbreviationNew <- car::recode(transcripts.women.m$ParlGroupAbbreviation,
"'V' = 'SVP';
'S' = 'SP';
c('C', 'M-E', 'CE', 'CEg') = 'CVP/Mitte/EVP';
'E' = 'EVP/EDU';
'BD' = 'BDP';
'RL' = 'FDP-Liberale';
'R' = 'Freisinnig-Demokratisch';
'G' = 'Grüne';
'GL' = 'Grünliberal'")
transcripts.women.m.fr.leg.perc <- group_by(transcripts.women.m, ParlGroupAbbreviationNew, f_perc_nr_fr, m_perc_fr, m_perc_fr_all, leg) %>%
summarise()
## `summarise()` has grouped output by 'ParlGroupAbbreviationNew', 'f_perc_nr_fr',
## 'm_perc_fr', 'm_perc_fr_all'. You can override using the `.groups` argument.
transcripts.women.m.fr.leg.perc <- transcripts.women.m.fr.leg.perc %>%
mutate(m_perc_nr_fr = 100 - f_perc_nr_fr,
m_perc_fr_d = m_perc_fr - m_perc_nr_fr,
m_perc_fr_all_d = m_perc_fr_all - m_perc_nr_fr,
m_perc_fr_dd = m_perc_fr_all - m_perc_fr)
# article version 2.0: points = party groups, x = percentage of men in NR, y = percentage of speeches on women's topics by male NR, facets = legislatures
ggplot(transcripts.women.m.fr.leg.perc,
aes(x = m_perc_nr_fr,
y = m_perc_fr)) +
geom_point(size = 5, aes(color = ParlGroupAbbreviationNew)) +
geom_smooth(method = "lm",
se = FALSE,
fullrange = TRUE,
color = "dark blue") +
facet_wrap(~leg) +
scale_color_manual(values = c("black", "darkorange", "yellow", "turquoise", "blue", "green", "light green", "red", "darkgreen")) +
scale_x_continuous(breaks = c(0, 20, 40, 60, 80, 100),
labels = paste0(c(0, 20, 40, 60, 80, 100), "%"),
limits = c(0,100)) +
scale_y_continuous(breaks = c(0, 20, 40, 60, 80, 100),
labels = paste0(c(0, 20, 40, 60, 80, 100), "%"),
limits = c(0,100)) +
labs(title = "Die glp-Männer äussern sich häufiger als erwartet zu «Frauenthemen»",
subtitle = "Redeanteile der Nationalräte zu «frauenspezifischen» Themen nach Fraktion und Legislatur",
caption = "Quelle: swissparl",
color = "Fraktion") +
xlab("Männeranteil nach Fraktion, in Prozent") +
ylab("Redeanteile der Männer nach Fraktion, in Prozent") +
theme_bw() +
theme(plot.title = element_text(face = "bold"),
strip.background = element_rect(fill="#ebd4ff"))
## `geom_smooth()` using formula 'y ~ x'
## Warning: Removed 111 rows containing missing values (geom_smooth).
ggsave("graphics/redeanteile_vs_nranteile_zeit_fr_scatter_neu.png", width = 9, height = 6)
## `geom_smooth()` using formula 'y ~ x'
## Warning: Removed 111 rows containing missing values (geom_smooth).