Schweiz

Nationalräte

library(readxl)
library(haven)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(foreign)
library(ggplot2)

Daten von Parlament.ch

library(readxl)
ratsmitglieder <- read_excel("Ratsmitglieder_1848_DE.xlsx")
#View(ratsmitglieder)

colnames

colnames(ratsmitglieder)
##  [1] "Active"                "FirstName"             "LastName"             
##  [4] "GenderAsString"        "CantonName"            "CantonAbbreviation"   
##  [7] "CouncilName"           "ParlGroupName"         "ParlGroupAbbreviation"
## [10] "PartyName"             "PartyAbbreviation"     "MaritalStatusText"    
## [13] "BirthPlace_City"       "BirthPlace_Canton"     "Mandates"             
## [16] "DateJoining"           "DateLeaving"           "Citizenship"          
## [19] "DateOfBirth"           "DateOfDeath"
#head(ratsmitglieder$CouncilName)
#head(ratsmitglieder$flag_ge)

Strukturieren

library(tidyverse)

# Nur Nationalrat
nationalrat <-  filter(ratsmitglieder, CouncilName == "Nationalrat")

# Wahldatum zu Jahr
nationalrat <-  nationalrat %>%  mutate(JahrIn = as.character(as.Date(DateJoining, "%d.%m.%Y"),"%Y")) 
nationalrat$JahrIn <- as.numeric(nationalrat$JahrIn, stringasfactors =F)

# Enddatum zu Jahr + jetzige zu 2030 (für berechnung)
nationalrat <- nationalrat  %>%  mutate(JahrOut = as.character(as.Date(DateLeaving, "%d.%m.%Y"),"%Y")) 
nationalrat$JahrOut <- as.numeric(nationalrat$JahrOut, stringasfactors =F)
nationalrat$JahrOut <- car::recode(nationalrat$JahrOut, "NA=2030") 
nationalrat$JahrOut <- as.numeric(nationalrat$JahrOut, stringasfactors =F)

# Geburtsdatum zu Geburtsjahr 
nationalrat <-  nationalrat %>%  mutate(YOB = as.character(as.Date(DateOfBirth, "%d.%m.%Y"), "%Y"))
nationalrat$YOB <- as.numeric(nationalrat$YOB, stringasfactors =F)

nationalrat <- select(nationalrat, FirstName, LastName, GenderAsString, YOB, JahrIn, JahrOut)


#legislatur 1971
legislatur1971 <- filter(nationalrat, JahrIn <= 1971 & JahrOut >= 1975)
legislatur1971$Legislatur <- 1971
#legislatur1971 %>% distinct()
#View(legislatur1971)

#legislatur1975
legislatur1975 <- filter(nationalrat, JahrIn <= 1975 & JahrOut >= 1979)
legislatur1975$Legislatur <- 1975
#View(legislatur1975)

#legislatur 1979
legislatur1979 <- filter(nationalrat, JahrIn <= 1979 & JahrOut >= 1983)
legislatur1979$Legislatur <- 1979
#View(legislatur1979)

#legislatur 1983
legislatur1983 <- filter(nationalrat, JahrIn <= 1983 & JahrOut >= 1987)
legislatur1983$Legislatur <- 1983
#View(legislatur1983)

#legislatur 1987
legislatur1987 <- filter(nationalrat, JahrIn <= 1987 & JahrOut >= 1991)
legislatur1987$Legislatur <- 1987
#View(legislatur1987)

#legislatur 1991
legislatur1991 <- filter(nationalrat, JahrIn <= 1991 & JahrOut >= 1995)
legislatur1991$Legislatur <- 1991
#View(legislatur1991)

#legislatur 1995 #WTF happened in 2005 - doppelte Herauslöschen
legislatur1995 <- filter(nationalrat, JahrIn <= 1995 & JahrOut >= 1999)
legislatur1995$Legislatur <- 1995
#View(legislatur1995)

#legislatur 1999 # doppelte herauslöschen
legislatur1999 <- filter(nationalrat, JahrIn <= 1999 & JahrOut >= 2003)
legislatur1999$Legislatur <- 1999
#View(legislatur1999)

#legislatur 2003 
legislatur2003 <- filter(nationalrat, JahrIn <= 2003 & JahrOut >= 2007)
legislatur2003$Legislatur <- 2003
#View(legislatur2003)

#legislatur 2007
legislatur2007 <- filter(nationalrat, JahrIn <= 2007 & JahrOut >= 2011)
legislatur2007$Legislatur <- 2007
#View(legislatur2007)

#legislatur 2011
legislatur2011 <- filter(nationalrat, JahrIn <= 2011 & JahrOut >= 2015)
legislatur2011$Legislatur <- 2011
#View(legislatur2011)

#legislatur 2015
legislatur2015 <- filter(nationalrat, JahrIn <= 2015 & JahrOut >= 2019)
legislatur2015$Legislatur <- 2015
#View(legislatur2015)

#legislatur 2019
legislatur2019 <- filter(nationalrat, JahrIn <= 2019 & JahrOut >= 2020)
legislatur2019$Legislatur <- 2019
#View(legislatur2019)

# mache 1 neuer Datensatz aus allen Legislaturen
nationalrat2 <- rbind(legislatur1971, legislatur1975, legislatur1979, legislatur1983, legislatur1987, legislatur1991, legislatur1995, legislatur1999, legislatur2003, legislatur2007, legislatur2011, legislatur2015, legislatur2019)


# Alter = Legislatur - YOB #alter = alter während Wahljahr
nationalrat2$Alter <- (nationalrat2$Legislatur - nationalrat2$YOB)

# Klassen
nationalrat2$Klasse <- nationalrat2$Alter

nationalrat2$Klasse[nationalrat2$Klasse <= 25] <- "18-25"
nationalrat2$Klasse[nationalrat2$Klasse > 25 & nationalrat2$Klasse <= 35] <- "26-35"
nationalrat2$Klasse[nationalrat2$Klasse > 35 & nationalrat2$Klasse <= 45] <- "36-45"
nationalrat2$Klasse[nationalrat2$Klasse > 45 & nationalrat2$Klasse <= 55] <- "46-55"
nationalrat2$Klasse[nationalrat2$Klasse > 55 & nationalrat2$Klasse <= 65] <- "56-65"
nationalrat2$Klasse[nationalrat2$Klasse > 65 & nationalrat2$Klasse <= 75] <- "66-75"
nationalrat2$Klasse[nationalrat2$Klasse > 75 & nationalrat2$Klasse <= 85] <- "76-85"
nationalrat2$Klasse[nationalrat2$Klasse > 85 & nationalrat2$Klasse <= 95] <- "86-95"
nationalrat2$Klasse[nationalrat2$Klasse > 95 & nationalrat2$Klasse <= 120] <- ">95"

nationalrat2$NR <- nationalrat2$FirstName
nationalrat2$NR <- 1

head(nationalrat2)
## # A tibble: 6 x 10
##   FirstName LastName GenderAsString   YOB JahrIn JahrOut Legislatur Alter Klasse
##   <chr>     <chr>    <chr>          <dbl>  <dbl>   <dbl>      <dbl> <dbl> <chr> 
## 1 Erwin     Akeret   m               1915   1955    1983       1971    56 56-65 
## 2 August    Albrecht m               1907   1967    1979       1971    64 56-65 
## 3 Claudius  Alder    m               1938   1971    1983       1971    33 26-35 
## 4 Walter    Allgöwer m               1912   1963    1979       1971    59 56-65 
## 5 Jean-Fra… Aubert   m               1931   1971    1979       1971    40 36-45 
## 6 Felix     Auer     m               1925   1971    1991       1971    46 46-55 
## # … with 1 more variable: NR <dbl>

Daten aggregieren nach Legislatur, Klasse und Geschlecht

library(reshape)
library(reshape2)

nationalrat_agg <- nationalrat2 %>% group_by(Legislatur, Klasse, GenderAsString) %>% select(NR) %>% summarise_all(sum)

head(nationalrat_agg)
## # A tibble: 6 x 4
## # Groups:   Legislatur, Klasse [3]
##   Legislatur Klasse GenderAsString    NR
##        <dbl> <chr>  <chr>          <dbl>
## 1       1971 26-35  f                  2
## 2       1971 26-35  m                  3
## 3       1971 36-45  f                  3
## 4       1971 36-45  m                 41
## 5       1971 46-55  f                  3
## 6       1971 46-55  m                 72

Demografie

Add Variables for demographic wmn/men of age class - add Bevölkerung 2012-2018

library(readxl)
library(dplyr)
library(tidyverse)
demografie <- read_excel("demografie.xlsx") %>% select(Geschlecht, Alter, `1971`, `1975`, `1979`, `1983`, `1987`, `1991`, `1995`, `1999`, `2003`, `2007`, `2011`, `2015`, `2018`)

demografie <- dplyr::rename(demografie, `2019` = `2018`)

demografie2 <- gather(demografie, "Jahr", "Einwohner", 3:15)


#Klassen
demografie2$Einwohner <- as.numeric(demografie2$Einwohner, stringasfactors =F)

demografie2$Klasse <- demografie2$Alter

demografie2$Klasse[demografie2$Klasse <= 17] <- "0-17"
demografie2$Klasse[demografie2$Klasse > 17 & demografie2$Klasse <= 25] <- "18-25"
demografie2$Klasse[demografie2$Klasse > 25 & demografie2$Klasse <= 35] <- "26-35"
demografie2$Klasse[demografie2$Klasse > 35 & demografie2$Klasse <= 45] <- "36-45"
demografie2$Klasse[demografie2$Klasse > 45 & demografie2$Klasse <= 55] <- "46-55"
demografie2$Klasse[demografie2$Klasse > 55 & demografie2$Klasse <= 65] <- "56-65"
demografie2$Klasse[demografie2$Klasse > 65 & demografie2$Klasse <= 75] <- "66-75"
demografie2$Klasse[demografie2$Klasse > 75 & demografie2$Klasse <= 85] <- "76-85"
demografie2$Klasse[demografie2$Klasse > 85 & demografie2$Klasse <= 95] <- "86-95"
demografie2$Klasse[demografie2$Klasse > 95 & demografie2$Klasse <= 99] <- ">95"

#View(demografie2)

Daten aggregieren

library(reshape)
library(reshape2)

demografie_agg <- demografie2 %>% group_by(Jahr, Klasse, Geschlecht) %>% select(Einwohner) %>% summarise_all(sum)

head(demografie_agg)
## # A tibble: 6 x 4
## # Groups:   Jahr, Klasse [3]
##   Jahr  Klasse Geschlecht Einwohner
##   <chr> <chr>  <chr>          <dbl>
## 1 1971  >95    f                381
## 2 1971  >95    m                148
## 3 1971  0-17   f             698272
## 4 1971  0-17   m             731634
## 5 1971  18-25  f             310332
## 6 1971  18-25  m             316015

Datensätze mergen und ploten

Combine data frames

#rename Variables in both data frames
library(tidyverse)

nationalrat_agg <- dplyr::rename(nationalrat_agg, Geschlecht = GenderAsString, Jahr = Legislatur)
#head(nationalrat_agg)


demo_nr <- merge(nationalrat_agg,demografie_agg, by=c("Klasse", "Geschlecht", "Jahr"), all =TRUE)

total_einwohner <- demo_nr %>% group_by(Jahr) %>% tally(Einwohner)
as.data.frame(total_einwohner)
##    Jahr       n
## 1  1971 5215235
## 2  1975 5288368
## 3  1979 5399236
## 4  1983 5481246
## 5  1987 5567111
## 6  1991 5649804
## 7  1995 5698764
## 8  1999 5757814
## 9  2003 5863241
## 10 2007 5991401
## 11 2011 6138668
## 12 2015 6278459
## 13 2019 6396252
demo_nr <- merge(demo_nr, total_einwohner, by = c("Jahr"), all =TRUE)

demo_nr <- dplyr::rename(demo_nr, Total_Einwohner = n)

demo_nr$Total_Einwohner <- as.numeric(demo_nr$Total_Einwohner)

demo_nr$Einwohner <- ifelse(demo_nr$Geschlecht == "m", -1*demo_nr$Einwohner, demo_nr$Einwohner)
demo_nr$NR <- ifelse(demo_nr$Geschlecht == "m", -1*demo_nr$NR, demo_nr$NR)

#View(demo_nr)
library(ggplot2)
library(plotly)

require(devtools)
#install_version("ggplot2", version = "3.1.1", repos = "http://cran.us.r-project.org")
library(ggplot2)
library(plotly)
library(ggthemes)

plotCH <- ggplot(demo_nr, aes(x = Klasse, y = (100/Total_Einwohner)*Einwohner, fill =Geschlecht,
                              frame = Jahr, ids = Klasse)) + 
  #Bevölkerung
  geom_col(data = subset(demo_nr, Geschlecht == "f"), position = "identity", fill= 'grey', alpha = .3) +
  geom_col(data = subset(demo_nr, Geschlecht == "m"), position = "identity", fill = 'grey', alpha = .3) + 
  
  #Nationalräte
  geom_col(aes(x = Klasse, y = .5*NR, fill = Geschlecht,
               frame = Jahr, ids = Klasse),
           data = subset(demo_nr, Geschlecht == "f"),  position = "identity", fill = 'chocolate2', alpha = .4) + 
  geom_col(aes(x = Klasse, y = .5*NR, fill = Geschlecht,
               frame = Jahr, ids = Klasse),
           data = subset(demo_nr, Geschlecht == "m"),  position = "identity", fill = 'darkgoldenrod1', alpha = .4) + 
  scale_x_discrete(limits = c("0-17", "18-25", "26-35","36-45", "46-55", "56-65", "66-75", "76-85" , "86-95", ">95"))+
  scale_y_continuous(breaks = c(-55, -50, -25, 0, 25, 50),
                     labels = c("",  "50%",  "25%", "0%", "25%", "50%"),
                     limits = c(-55, 50)) +
  geom_hline(aes(yintercept = 0), colour = 'black', linetype = "dotted", size = 0.25, alpha =.5)+
 
  
  coord_flip()+ ylab("")+ theme_tufte(base_size = 16) +  ylab("")+ theme(text = element_text(family = "Arial")) + xlab("") + 
  
  #Frauen & Männer kennzeichnen
  ggplot2::annotate("text", x = 9, y = 20, label = "♀", size = 14, colour = 'chocolate2', alpha = .6) + 
  ggplot2::annotate("text", x = 9, y = -20, label = "♂", size = 14, colour = 'darkgoldenrod1', alpha = .6) + 

  # NR & Bevölkerung kennzeichen
    annotate("text", x = 1, y= -.3, label = "Bevölkerung", size = 5, colour = 'dimgrey') + 
  annotate("text", x = 5, y = -13, label = "Nationalrat", size = 5, colour = 'chocolate2', alpha =  .6)


plot_nr <- ggplotly(plotCH, tooltip = "") %>%  
  animation_opts(1100,   easing = "elastic-in", transition = 300) %>% 
animation_slider(font = list(color="black", size =16)) %>%
 animation_slider(currentvalue = list(prefix = "", font =list(color = 'grey', size =9))) 
plot_nr

Kantonal

library(readxl)
library(haven)
library(dplyr)
library(foreign)

Nationalrat

url<- "https://www.bfs.admin.ch/bfsstatic/dam/assets/9386465/appendix"
ergebnisse <-read.csv(url,
                       sep=";",
                       encoding="UTF-8",
                       stringsAsFactors = F)

colnames

colnames(ergebnisse)
##  [1] "wahl_jahr"               "kanton_nummer"          
##  [3] "kanton_bezeichnung"      "liste_nummer_kanton"    
##  [5] "liste_bezeichnung"       "kandidat_nummer"        
##  [7] "name"                    "vorname"                
##  [9] "geschlecht"              "geburtsdatum"           
## [11] "geburtsjahr"             "wohnort_gemeinde_nummer"
## [13] "wohnort"                 "beruf"                  
## [15] "kandidat_status_id"      "kandidat_status_de"     
## [17] "kandidat_status_fr"      "kandidat_status_it"     
## [19] "kandidat_status_en"      "kandidat_partei_id"     
## [21] "partei_bezeichnung_de"   "partei_bezeichnung_fr"  
## [23] "partei_bezeichnung_it"   "partei_bezeichnung_en"  
## [25] "flag_gewaehlt"           "stimmen_kandidat"       
## [27] "KANDIDAT_LISTENPLATZ_1"  "KANDIDAT_LISTENPLATZ_2"

Filter nach gewählten + Select

library(dplyr)
library(car)

#add marchesi in TI (nachgerutscht)
ergebnisse$tessin <- ergebnisse$beruf
ergebnisse$tessin <- ergebnisse$tessin <- as.factor(ifelse(ergebnisse$tessin=="Dirigente aziendale", 1, 0))
            

gewaehlt_19 <- filter(ergebnisse, flag_gewaehlt == 1 | tessin ==1) %>%  select(kanton_bezeichnung, name, vorname, geschlecht, geburtsjahr)

#remove 
gewaehlt_19 <- filter(gewaehlt_19, name != "Carobbio Guscetti")

head(gewaehlt_19)
##   kanton_bezeichnung       name        vorname geschlecht geburtsjahr
## 1             Zürich     Köppel          Roger          M        1965
## 2             Zürich       Rutz         Gregor          M        1972
## 3             Zürich       Heer Alfred (Fredi)          M        1961
## 4             Zürich     Matter         Thomas          M        1966
## 5             Zürich       Vogt      Hans-Ueli          M        1969
## 6             Zürich Steinemann        Barbara          F        1976

Alter & geschlecht umwandeln

library(car)
gewaehlt_19$Alter <- as.numeric(2019- gewaehlt_19$geburtsjahr)

gewaehlt_19$geschlecht <- car::recode(gewaehlt_19$geschlecht, "'M' = 'm'; 'F'='f'")

Altersklassen

gewaehlt_19$Klasse <- gewaehlt_19$Alter

gewaehlt_19$Klasse[gewaehlt_19$Klasse <= 25] <- "18-25"
gewaehlt_19$Klasse[gewaehlt_19$Klasse > 25 & gewaehlt_19$Klasse <= 35] <- "26-35"
gewaehlt_19$Klasse[gewaehlt_19$Klasse > 35 & gewaehlt_19$Klasse <= 45] <- "36-45"
gewaehlt_19$Klasse[gewaehlt_19$Klasse > 45 & gewaehlt_19$Klasse <= 55] <- "46-55"
gewaehlt_19$Klasse[gewaehlt_19$Klasse > 55 & gewaehlt_19$Klasse <= 65] <- "56-65"
gewaehlt_19$Klasse[gewaehlt_19$Klasse > 65 & gewaehlt_19$Klasse <= 75] <- "66-75"
gewaehlt_19$Klasse[gewaehlt_19$Klasse > 75 & gewaehlt_19$Klasse <= 85] <- "76-85"
gewaehlt_19$Klasse[gewaehlt_19$Klasse > 85 & gewaehlt_19$Klasse <= 95] <- "86-95"
gewaehlt_19$Klasse[gewaehlt_19$Klasse > 95 & gewaehlt_19$Klasse <= 120] <- ">95"

#View(gewaehlt_19)

Aggregate

library(car)
gewaehlt_19$NR <- gewaehlt_19$vorname
gewaehlt_19$NR <- 1

gewaehlt_agg <- gewaehlt_19 %>% group_by(Klasse, geschlecht, kanton_bezeichnung) %>% select(NR) %>% summarise_all(sum)

# rename: bern, genf, waadt, graubünden, neuenburg, wallis, freiburg, tessin, 

gewaehlt_agg$kanton_bezeichnung <- car::recode(gewaehlt_agg$kanton_bezeichnung, "'Bern / Berne' = 'Bern';'Genève' = 'Genf'; 'St. Gallen' = 'St.Gallen'; 'Vaud' = 'Waadt'; 'Graubünden / Grigioni / Grischun' = 'Graubünden'; 'Neuchâtel' = 'Neuenburg'; 'Valais / Wallis'='Wallis'; 'Fribourg / Freiburg' = 'Freiburg'; 'Ticino' = 'Tessin'  ")

#View(gewaehlt_agg$kanton_bezeichnung)
head(gewaehlt_agg)
## # A tibble: 6 x 4
## # Groups:   Klasse, geschlecht [3]
##   Klasse geschlecht kanton_bezeichnung    NR
##   <chr>  <chr>      <chr>              <dbl>
## 1 18-25  f          Basel-Landschaft       1
## 2 18-25  m          Zürich                 1
## 3 26-35  f          Aargau                 2
## 4 26-35  f          Bern                   2
## 5 26-35  f          Genf                   1
## 6 26-35  f          St.Gallen              1

Demografie

library(readxl)
demografie_k <- read_excel("Demografie_kantonal.xlsx")
#View(demografie_k)

Klassenbildung

demografie_k$Einwohner <- as.numeric(demografie_k$Einwohner, stringasfactors =F)

demografie_k$Klasse <- demografie_k$Alter

demografie_k$Klasse[demografie_k$Klasse <= 17] <- "0-17"
demografie_k$Klasse[demografie_k$Klasse > 17 & demografie_k$Klasse <= 25] <- "18-25"
demografie_k$Klasse[demografie_k$Klasse > 25 & demografie_k$Klasse <= 35] <- "26-35"
demografie_k$Klasse[demografie_k$Klasse > 35 & demografie_k$Klasse <= 45] <- "36-45"
demografie_k$Klasse[demografie_k$Klasse > 45 & demografie_k$Klasse <= 55] <- "46-55"
demografie_k$Klasse[demografie_k$Klasse > 55 & demografie_k$Klasse <= 65] <- "56-65"
demografie_k$Klasse[demografie_k$Klasse > 65 & demografie_k$Klasse <= 75] <- "66-75"
demografie_k$Klasse[demografie_k$Klasse > 75 & demografie_k$Klasse <= 85] <- "76-85"
demografie_k$Klasse[demografie_k$Klasse > 85 & demografie_k$Klasse <= 95] <- "86-95"
demografie_k$Klasse[demografie_k$Klasse > 95 & demografie_k$Klasse <= 99] <- ">95"

head(demografie_k)
## # A tibble: 6 x 5
##   kanton_bezeichnung geschlecht Alter Einwohner Klasse
##   <chr>              <chr>      <dbl>     <dbl> <chr> 
## 1 Zürich             m              0      5905 0-17  
## 2 Zürich             m              1      6123 0-17  
## 3 Zürich             m              2      6072 0-17  
## 4 Zürich             m              3      6154 0-17  
## 5 Zürich             m              4      5994 0-17  
## 6 Zürich             m              5      5789 0-17

Aggregate

library(reshape)
library(reshape2)

demografie_k_agg <- demografie_k %>% group_by(Klasse, geschlecht, kanton_bezeichnung) %>% select(Einwohner) %>% summarise_all(sum)


demografie_k_agg$kanton_bezeichnung <- car::recode(demografie_k_agg$kanton_bezeichnung, "'Bern / Berne' = 'Bern';'Genève' = 'Genf'; 'St. Gallen' = 'St.Gallen'; 'Vaud' = 'Waadt'; 'Graubünden / Grigioni / Grischun' = 'Graubünden'; 'Neuchâtel' = 'Neuenburg'; 'Valais / Wallis'='Wallis'; 'Fribourg / Freiburg' = 'Freiburg'; 'Ticino' = 'Tessin'  ")


#View(demografie_k_agg$kanton_bezeichnung)
head(demografie_k_agg)
## # A tibble: 6 x 4
## # Groups:   Klasse, geschlecht [1]
##   Klasse geschlecht kanton_bezeichnung     Einwohner
##   <chr>  <chr>      <chr>                      <dbl>
## 1 >95    f          Aargau                       450
## 2 >95    f          Appenzell Ausserrhoden        61
## 3 >95    f          Appenzell Innerrhoden          6
## 4 >95    f          Basel-Landschaft             272
## 5 >95    f          Basel-Stadt                  371
## 6 >95    f          Bern                        1207

Merge Dataframes

library(tidyverse)

kanton_agg <- merge(demografie_k_agg, gewaehlt_agg, by=c("Klasse", "geschlecht", "kanton_bezeichnung"), all =TRUE)
#kanton_agg

total_einwohner <- kanton_agg %>% group_by(kanton_bezeichnung) %>% tally(Einwohner)
as.data.frame(total_einwohner)
##        kanton_bezeichnung       n
## 1                  Aargau  507783
## 2  Appenzell Ausserrhoden   46220
## 3   Appenzell Innerrhoden   14321
## 4        Basel-Landschaft  222396
## 5             Basel-Stadt  123867
## 6                    Bern  865906
## 7                Freiburg  246355
## 8                    Genf  299540
## 9                  Glarus   30671
## 10             Graubünden  161397
## 11                   Jura   62651
## 12                 Luzern  333672
## 13              Neuenburg  132143
## 14              Nidwalden   36872
## 15               Obwalden   32296
## 16           Schaffhausen   60626
## 17                 Schwyz  124828
## 18              Solothurn  211399
## 19              St.Gallen  385295
## 20                 Tessin  255116
## 21                Thurgau  207714
## 22                    Uri   31936
## 23                  Waadt  533878
## 24                 Wallis  265879
## 25                    Zug   90917
## 26                 Zürich 1112574
kanton_agg <- merge(kanton_agg, total_einwohner, by = c("kanton_bezeichnung"), all =TRUE)

kanton_agg <- dplyr::rename(kanton_agg, Total_Einwohner = n)

#männer daten - setzen um eine zweiseitige grafik zu erhalten
kanton_agg$Einwohner <- ifelse(kanton_agg$geschlecht == "m", -1*kanton_agg$Einwohner, kanton_agg$Einwohner)
kanton_agg$NR <- ifelse(kanton_agg$geschlecht == "m", -1*kanton_agg$NR, kanton_agg$NR)

head(kanton_agg, 10)
##    kanton_bezeichnung Klasse geschlecht Einwohner NR Total_Einwohner
## 1              Aargau    >95          f       450 NA          507783
## 2              Aargau  66-75          f     29344 NA          507783
## 3              Aargau  86-95          m     -3920 NA          507783
## 4              Aargau  56-65          m    -36129 -4          507783
## 5              Aargau  46-55          m    -38734 -2          507783
## 6              Aargau  46-55          f     40016  2          507783
## 7              Aargau  66-75          m    -27189 NA          507783
## 8              Aargau  36-45          f     30416  1          507783
## 9              Aargau  26-35          m    -30223 -1          507783
## 10             Aargau  18-25          m    -23148 NA          507783

in Regionen einteilen - ü10 sitze eigens

#männer daten - zurücksetzen für berechnungen
kanton_agg$Einwohner <- ifelse(kanton_agg$geschlecht == "m", -1*kanton_agg$Einwohner, kanton_agg$Einwohner)
kanton_agg$NR <- ifelse(kanton_agg$geschlecht == "m", -1*kanton_agg$NR, kanton_agg$NR)


#ü10 Sitze: Aargau, Bern, Genf, Luzern, St.Gallen, Waadt, Zürich

kanton_agg$Region <- kanton_agg$kanton_bezeichnung

#Region Mittelland
kanton_agg$Region <- car::recode(kanton_agg$kanton_bezeichnung, 
                                 "'Bern'='Mittelland';'Freiburg' = 'Mittelland'; 'Solothurn' = 'Mittelland'; 'Neuenburg'= 'Mittelland'; 'Jura' = 'Mittelland'; 'Basel-Landschaft'='Nordwestschweiz'; 'Basel-Stadt'='Nordwestschweiz'; 'Aargau'='Nordwestschweiz'; 'Uri'='Zentralschweiz'; 'Schwyz'='Zentralschweiz'; 
                                 'Obwalden'='Zentralschweiz'; 'Nidwalden'='Zentralschweiz'; 'Zug'= 'Zentralschweiz';
                                 'Glarus' = 'Ostschweiz'; 'Schaffhausen'= 'Ostschweiz';
                                'Appenzell Ausserrhoden'='Ostschweiz'; 'Appenzell Innerrhoden'='Ostschweiz'; 'St.Gallen' ='Ostschweiz';  'Graubünden'='Ostschweiz';
                                'Thurgau'='Ostschweiz'; 'Genf'='Genfersee'; 'Waadt' ='Genfersee'; 'Luzern'='Zentralschweiz'")


#Regionen Einwohner & Sitze
total_einwohner_r <- kanton_agg %>% group_by(Region) %>% tally(Einwohner)
total_einwohner_r <- dplyr::rename(total_einwohner_r, Total_Einwohner_R = n)

nr_sitze_r <- kanton_agg %>% group_by(Region) %>% tally(NR)
nr_sitze_r <- dplyr::rename(nr_sitze_r, NR_sitze_R = n)

kanton_agg <- merge(kanton_agg, total_einwohner_r, by = "Region", all =TRUE)
kanton_agg <- merge(kanton_agg, nr_sitze_r, by= "Region", all =TRUE)


kanton_agg$Einwohner <- ifelse(kanton_agg$geschlecht == "m", -1*kanton_agg$Einwohner, kanton_agg$Einwohner)
kanton_agg$NR <- ifelse(kanton_agg$geschlecht == "m", -1*kanton_agg$NR, kanton_agg$NR)


kanton_agg2 <- kanton_agg %>% filter( Region != "Tessin" )
kanton_agg2 <- kanton_agg2 %>% filter(Region !="Wallis")
#View(kanton_agg$Region)

Restliche Regionen

library(ggplot2)
library(ggthemes)


plot2 <- ggplot(kanton_agg2, aes(x = Klasse, y = (100/Total_Einwohner_R)*Einwohner, fill =geschlecht)) + 
  #Bevölkerung
  geom_bar(data = subset(kanton_agg2, geschlecht == "f"), stat = "identity", fill= 'grey', alpha = .3) +
  geom_bar(data = subset(kanton_agg2, geschlecht == "m"), stat = "identity", fill = 'grey', alpha = .3) + 
  
  #Nationalräte
  geom_bar(aes(x = Klasse, y = (100/NR_sitze_R)*NR, fill = geschlecht), data = subset(kanton_agg2, geschlecht == "f"),  stat = "identity", fill = 'chocolate2', alpha = .4) + 
   geom_bar(aes(x = Klasse, y = (100/NR_sitze_R)*NR, fill = geschlecht), data = subset(kanton_agg2, geschlecht == "m"),  stat = "identity", fill = 'darkgoldenrod1', alpha = .4) + 
  
  facet_wrap(~Region) + 
  geom_hline(aes(yintercept = 0), colour = 'black', linetype = "dotted", size = 0.25, alpha =.5)+
  geom_vline(aes(xintercept = .52), colour = 'black', alpha = .2) + 
   
  coord_flip() + theme_tufte(base_size = 20) + ylab("")+ xlab("") + theme(text = element_text(c(family = "Arial"))) + 
  scale_x_discrete(limits = c("0-17", "18-25", "26-35","36-45", "46-55", "56-65", "66-75", "76-85" , "86-95", ">95"))+
  scale_y_continuous(breaks = c(-40, -20, 0, 20), # Zahlen kannst du nach Belieben anpassen
                     labels = c("40%", "20%", "0", "20%"))  + 
  
  
  #Frauen & Männer kennzeichnen
   annotate("text", x = 9, y = 20, label = "♀", size = 13, colour = 'chocolate2', alpha = .6) + 
  annotate("text", x = 9, y = -20, label = "♂", size = 13, colour = 'darkgoldenrod1', alpha = .6) 


plot2

Nur Tessin & Wallis weil spannend

#View(kanton_agg)
kanton_agg3 <- kanton_agg %>% filter(Region == "Tessin")
kanton_agg4 <- kanton_agg%>% filter(kanton_bezeichnung == "Wallis")

kanton_agg5 <- merge(kanton_agg3, kanton_agg4, all = TRUE)
  

plotTIVS <- ggplot(kanton_agg5, aes(x = Klasse, y = (100/Total_Einwohner)*Einwohner, fill =geschlecht)) + 
  #Bevölkerung
  geom_bar(data = subset(kanton_agg5, geschlecht == "f"), stat = "identity", fill= 'grey', alpha = .3) +
  geom_bar(data = subset(kanton_agg5, geschlecht == "m"), stat = "identity", fill = 'grey', alpha = .3) + 
  
  #Nationalräte
  geom_bar(aes(x = Klasse, y = 12.5*NR, fill = geschlecht), data = subset(kanton_agg5, geschlecht == "f"),  stat = "identity", fill = 'chocolate2', alpha = .4) + 
   geom_bar(aes(x = Klasse, y = 12.5*NR, fill = geschlecht), data = subset(kanton_agg5, geschlecht == "m"),  stat = "identity", fill = 'darkgoldenrod1', alpha = .4) + 
  scale_x_discrete(limits = c("0-17", "18-25", "26-35","36-45", "46-55", "56-65", "66-75", "76-85" , "86-95", ">95"))+
  scale_y_continuous(breaks = c(-40, -20, 0, 20), # Zahlen kannst du nach Belieben anpassen
                     labels = c("40%", "20%", "0", "20%"))  + 
  facet_wrap(~kanton_bezeichnung) + 
  geom_hline(aes(yintercept = 0), colour = 'black', linetype = "dotted", size = 0.25, alpha =.5)+
  geom_vline(aes(xintercept = .54), colour = 'black', alpha = .2) + 
  
  coord_flip() + theme_tufte() + ylab("")+ theme(text = element_text(family = "Arial", size = 18)) + xlab("") + 
 
  #Frauen & Männer kennzeichnen
   annotate("text", x = 9, y = 20, label = "♀", colour = 'chocolate2', alpha = .6, size = 13) + 
  annotate("text", x = 9, y = -20, label = "♂", colour = 'darkgoldenrod1', alpha = .6, size = 13)  


plotTIVS