###################################
#Script: Blogbeitrag (HS 2017)    # 
#Politischer Datenjournalismus    #
#Yves Custer (yves.custer@uzh.ch) #
#Matrikelnummer: 13-715-651       #
###################################

################################################################################################################
#Aggregierter Datensatz laden
library(data.table)
setwd("/Users/yvescuster/Desktop/Uni Zürich/HS17/Politischer Datenjournalismus/Daten")
RAW <-fread("DDJ-Data-Full.csv")

#Quartiervariable (QuarLang) neu anordnen
library(dplyr)
RAW$QuarLang <- factor(RAW$QuarLang, levels = c("Wollishofen", "Enge", "City", "Rathaus", "Unterstrass", "Oberstrass", "Saatlen", "Schwamendingen-Mitte", "Hirzenbach",
                                                                  "Affoltern", "H<f6>ngg", "Hottingen", "Seebach", "Werd", "Albisrieden", "Escher Wyss", "Hard", "Langstrasse", "Oerlikon",
                                                                  "Seefeld", "Wipkingen", "Alt-Wiedikon", "Fluntern", "Hirslanden", "Leimbach", "Sihlfeld", "Witikon", "Altstetten",
                                                                  "Friesenberg", "Lindenhof", "Gewerbeschule","Hochschulen", "M<fc>hlebach", "Weinegg"))

print(levels(RAW$QuarLang))

#Datensatz nur mit Werten von 2016 berücksichtigen
DAT <- RAW[RAW$StichtagDatJahr == 2016, ]

################################################################################################################
################################################################################################################
################################################################################################################
################################################################################################################
#Grafik 1:
#Small Multiple: Ausländeranteil pro Quartier 1993-2016
################################################################################################################
#Datensatz laden
library(data.table)
setwd("/Users/yvescuster/Desktop/Uni Zürich/HS17/Politischer Datenjournalismus/Daten")
RAW_SM <-fread("DDJ-Data-Full.csv")

#Quartiervariable (QuarLang) neu anordnen
library(dplyr)
RAW_SM$QuarLang <- factor(RAW_SM$QuarLang, levels = c("Wollishofen", "Enge", "City", "Rathaus", "Unterstrass", "Oberstrass", "Saatlen", "Schwamendingen-Mitte", "Hirzenbach",
                                                      "Affoltern", "H<f6>ngg", "Hottingen", "Seebach", "Werd", "Albisrieden", "Escher Wyss", "Hard", "Langstrasse", "Oerlikon",
                                                      "Seefeld", "Wipkingen", "Alt-Wiedikon", "Fluntern", "Hirslanden", "Leimbach", "Sihlfeld", "Witikon", "Altstetten",
                                                      "Friesenberg", "Lindenhof", "Gewerbeschule","Hochschulen", "M<fc>hlebach", "Weinegg"))

#Datensatz nur mit Werten von acht Quartieren berücksichtigen, um die Berechnungen zu beschleunigen
DAT_SM <- RAW_SM[RAW_SM$QuarLang == c("Wollishofen", "Enge", "City", "Rathaus", "Unterstrass", "Oberstrass", "Saatlen", "Schwamendingen-Mitte"), ]

################################################################################################################
# Ausländervariable erstellen

table(DAT_SM$NationHistLang)
library(car)
library(plyr) #Achtung: dplyr muss deaktiviert sein sonst gibt es eine Fehlermeldung
DAT_SM$Auslaenderanteil <- recode(DAT_SM$NationHistLang, "c('Schweiz') = 'Schweizer'; c('Unzuteilbar') = 'unzuteilbar'; else = 'Ausländer'")
table(DAT_SM$Auslaenderanteil)                               

################################################################################################################
#Von Individualebene auf Quartierebene
library(data.table)
DAT_Auslaender_SM <- expand.grid(Quartier = unique(DAT_SM$QuarLang), 
                                 Jahr = unique(DAT_SM$StichtagDatJahr), 
                                 Nation = unique(DAT_SM$Auslaenderanteil))
head(DAT_Auslaender_SM)

Quartier <- unique(DAT_Auslaender_SM$Quartier)
Jahr <- sort(unique(DAT_Auslaender_SM$Jahr))
Nation <- sort(unique(DAT_Auslaender_SM$Nation))

DAT_Auslaender_SM$Anteil_Ausländer_SM <- NA

for(i in Quartier){
  for(j in Jahr){
    
    d <- subset(DAT_SM, QuarLang == i & StichtagDatJahr == j)
    denom <- nrow(d)
    
    for(k in Nation){
      
      numer <- nrow(d[d$Auslaenderanteil == k,])
      DAT_Auslaender_SM$Anteil_Ausländer_SM[DAT_Auslaender_SM$Quartier == i & 
                                              DAT_Auslaender_SM$Jahr == j & DAT_Auslaender_SM$Nation == k] <-
        100 * numer/denom}}}

head(DAT_Auslaender_SM)

################################################################################################################
#Daten aggregieren
library(data.table)
DAT_Auslaender_SM.t <- as.data.table(DAT_Auslaender_SM)

DAT_Auslaender_SM.agg <- DAT_Auslaender_SM.t[, .(Anteil_Ausländer_SM=sum(Anteil_Ausländer_SM, na.rm = T)), by=Quartier]
DAT_Auslaender_SM.merg = merge(DAT_Auslaender_SM, DAT_Auslaender_SM.agg, by = "Quartier")

################################################################################################################
#Small Multiple erstellen
library(ggplot2)
library(scales)
theme_set(theme_bw())
ggplot(data = subset(DAT_Auslaender_SM.merg, Nation %in% c("Ausländer") & Quartier %in% c("Schwamendingen-Mitte", "Saatlen" ,"Oberstrass", "Unterstrass", "Rathaus", "City", "Enge", "Wollishofen"))) + 
  aes(x = Jahr, y = Anteil_Ausländer_SM.x/100) +
  geom_point() + 
  geom_smooth(se = FALSE) +
  facet_wrap(~ Quartier) + 
  labs(title = "Ausländeranteil pro Quartier, 1993-2016", y = "", x = "", caption = "(Grafik 1: Yves Custer; Daten: Statistik Stadt Zürich.)") + 
  scale_y_continuous(labels = percent) +
  theme(legend.position = "none", legend.title = element_blank())

################################################################################################################
################################################################################################################
################################################################################################################
################################################################################################################
#Grafik 2:
#Dot Plot: Ausländeranteil (Ausländeranteil pro Quartier, 2016)
################################################################################################################
#Recodierung der Variable NationHistLang für die Bereinigung von Schreibfehlern
table(DAT$NationHistLang)
library(car)
library(plyr) #Achtung: dplyr muss deaktiviert sein sonst gibt es eine Fehlermeldung
DAT$Nationrec <- recode(DAT$NationHistLang, "c('<d6>sterreich') = 'Österreich'; c('Asien') = 'Asien'; c('Deutschland') = 'Deutschland'; c('Griechenland') = 'Griechenland'; c('Italien') = 'Italien'; c('Niederlande') = 'Niederlande';
                        c('Schweiz') = 'Schweiz'; c('Sri Lanka') = 'Sri Lanka'; c('USA') = 'USA'; c('Afrika') = 'Afrika'; c('Bosnien und Herzegowina') = 'Bosnien und Herzegowina'; c('Europa') = 'Europa'; c('Grossbritannien') = 'Grossbritannien';
                        c('Kroatien') = 'Kroatien'; c('Ozeanien') = 'Ozeanien'; c('Serbien') = 'Serbien'; c('T<fc>rkei') = 'Türkei'; c('Amerika') = 'Amerika'; c('Brasilien') = 'Brasilien'; c('Frankreich') = 'Frankreich';
                        c('Indien') = 'Indien'; c('Mazedonien') = 'Mazedonien'; c('Portugal') = 'Portugal'; c('Spanien') = 'Spanien'; c('Unzuteilbar') = 'Unzuteilbar'")

################################################################################################################
#Von Individualebene auf Quartierebene
library(data.table)
DAT_Auslaender <- expand.grid(Quartier = unique(DAT$QuarLang), 
                              Jahr = unique(DAT$StichtagDatJahr), 
                              Land = unique(DAT$Nationrec))
head(DAT_Auslaender)

Quartier <- unique(DAT_Auslaender$Quartier)
Jahr <- sort(unique(DAT_Auslaender$Jahr))
Land <- sort(unique(DAT_Auslaender$Land))

DAT_Auslaender$Anteil_Auslaender <- NA

for(i in Quartier){
  for(j in Jahr){
    
    a <- subset(DAT, QuarLang == i & StichtagDatJahr == j)
    denom <- nrow(a)
    
    for(b in Land){
      
      numer <- nrow(a[a$Nationrec == b,])
      DAT_Auslaender$Anteil_Auslaender[DAT_Auslaender$Quartier == i & 
                                         DAT_Auslaender$Jahr == j & DAT_Auslaender$Land == b] <-
        100 * numer/denom}}}

################################################################################################################
#Ranking Variable erstellen
DAT_Auslaender.sorted = DAT_Auslaender[order(DAT_Auslaender$Quartier,-DAT_Auslaender$Anteil_Auslaender),]
DAT_Auslaender.sorted = subset(DAT_Auslaender.sorted, Land != "Schweiz" & Land != "Asien" & Land != "Europa" & Land != "Afrika" & Land != "USA")
DAT_Auslaender.sorted$ranking = NA

i = 1
current.quartier = "Wollishofen"
for(r in rownames(DAT_Auslaender.sorted)){
  if(DAT_Auslaender.sorted[r,"Quartier"] != current.quartier){
    i=1
    current.quartier = DAT_Auslaender.sorted[r,"Quartier"]
  }
  DAT_Auslaender.sorted[r,"ranking"] = i
  i = i + 1
}

DAT_Auslaender.top5 = subset(DAT_Auslaender.sorted, ranking <= 3)
################################################################################################################
#Grafik Dot Plot: mit Subsetting 9 Quartiere für 2016
library(ggplot2)
library(scales)
theme_set(theme_minimal())
ggplot(data = subset(DAT_Auslaender.top5, Quartier %in% c("Schwamendingen-Mitte", "Saatlen" ,"Oberstrass", "Unterstrass", "Rathaus", "City", "Enge", "Wollishofen") & 
                       Jahr %in% c(2016))) + 
  aes(x = Quartier, y = Anteil_Auslaender/100, color = Land) +
  theme(axis.text.x = element_text(angle=60, hjust=1), legend.position = "none", legend.title = element_blank()) +
  geom_point(size=1.5) +
  scale_y_continuous(labels = percent) +
  geom_text(aes(label = Land), vjust=c(rep(-0.6,23),1.4)) + 
  labs(title = "Anteile der top 20* Nationalitäten am Ausländeranteil pro Quartier, 2016", caption = "(Grafik 2: Yves Custer; Daten: Statistik Stadt Zürich.)", x = "", y = "")

################################################################################################################
#Einzelner Wert ausgeben lassen (zum Check)
DAT_Auslaender.top5$Anteil_Auslaender[DAT_Auslaender.top5$Quartier == "Hirzenbach" & DAT_Auslaender.top5$Land == "Deutschland" & DAT_Auslaender.top5$Jahr == 2016]

################################################################################################################
################################################################################################################
################################################################################################################
################################################################################################################
#Grafik 3: 
#Dot Plot: Anteil Zuzüge pro Quartier, 2016 (zudem: häufigster Zuzugskanton pro Quartier, 2016)
################################################################################################################
#Von Individualebene auf Quartierebene
library(data.table)
DAT_Quartier <- expand.grid(Quartier = unique(DAT$QuarLang), 
                            Jahr = unique(DAT$StichtagDatJahr), 
                            Zuzugskanton = unique(DAT$ZuzKtHistLang))
head(DAT_Quartier)

Quartier <- unique(DAT_Quartier$Quartier)
Jahr <- sort(unique(DAT_Quartier$Jahr))
Zuzugskanton <- sort(unique(DAT_Quartier$Zuzugskanton))

DAT_Quartier$Anteil_Zuzugskanton <- NA

for(i in Quartier){
  for(j in Jahr){
    
    d <- subset(DAT, QuarLang == i & StichtagDatJahr == j)
    denom <- nrow(d)
    
    for(k in Zuzugskanton){
      
      numer <- nrow(d[d$ZuzKtHistLang == k,])
      DAT_Quartier$Anteil_Zuzugskanton[DAT_Quartier$Quartier == i & 
                                         DAT_Quartier$Jahr == j & DAT_Quartier$Zuzugskanton == k] <-
        100 * numer/denom}}}

################################################################################################################
#Ranking erstellen
library(data.table)
DAT_Quartier.t <- as.data.table(DAT_Quartier)

DAT_Quartier.agg <- DAT_Quartier.t[, .(Anteil_Zuzugskanton=sum(Anteil_Zuzugskanton, na.rm = T)), by=Quartier]
DAT_Quartier.merg = merge(DAT_Quartier, DAT_Quartier.agg, by = "Quartier")

DAT_Quartier.sorted = DAT_Quartier.merg[order(DAT_Quartier.merg$Quartier,-DAT_Quartier.merg$Anteil_Zuzugskanton.x),]
DAT_Quartier.sorted = subset(DAT_Quartier.sorted, Zuzugskanton != "Ausland" & Zuzugskanton != "Z<fc>rich")
DAT_Quartier.sorted$ranking = NA

i = 1
current.quartier = "Wollishofen"
for(r in rownames(DAT_Quartier.sorted)){
  if(DAT_Quartier.sorted[r,"Quartier"] != current.quartier){
    i=1
    current.quartier = DAT_Quartier.sorted[r,"Quartier"]
  }
  DAT_Quartier.sorted[r,"ranking"] = i
  i = i + 1
}

DAT_Quartier.top1 = subset(DAT_Quartier.sorted, ranking==1)

################################################################################################################
#Grafik: Dot Plot
library(ggplot2)
library(scales)
theme_set(theme_minimal())
ggplot(data = subset(DAT_Quartier.top1, Quartier %in% c("Schwamendingen-Mitte", "Saatlen" ,"Oberstrass", "Unterstrass", "Rathaus", "City", "Enge", "Wollishofen") & 
                       Jahr %in% c(2016) & Zuzugskanton %in% c("Luzern", "Bern / Berne", "Gen<e8>e", "St. Gallen", "Basel-Stadt", "Ticino", "Zug", "Obwalden", "Schwyz",
                                                               "Aargau", "Graub<fc>nden / Grigioni / Grischun", "Vaud", "Thurgau", "Valais / Wallis", "Nidwalden", "Schaffhausen",
                                                               "Glarus", "Neuch<e2>tel", "Solothurn", "Basel-Landschaft", "Uri", "Appenzell Ausserrhoden", "Jura", "Appenzell Innerrhoden"))) + 
  aes(x = Quartier, y = Anteil_Zuzugskanton.y/100, color = Zuzugskanton) +
  theme(axis.text.x = element_text(angle=60, hjust=1), legend.position = "none", legend.title = element_blank()) +
  geom_point(size=1.5) +
  scale_y_continuous(labels = percent) +
  geom_text(aes(label = Zuzugskanton, vjust=-0.6)) +
  labs(title = "Zuzüge* pro Quartier, 2016", subtitle = "(Der ausgegebene Kanton entspricht dem grössten kantonalen Anteil an den Zuzügen)", caption = "(Grafik 3: Yves Custer; Daten: Statistik Stadt Zürich.)", x = "", y = "")

################################################################################################################
################################################################################################################
################################################################################################################
################################################################################################################
#Grafik 4:
#Dot Plot: Alt (>65) vs. Jung (<20) (Anteil Junger und Alter pro Quartier, 2016)
################################################################################################################
#Recodierung der Variable AlterV05Kurz zu jung (<20) und alt (>64)
table(DAT$AlterV05Kurz)
library(car)
library(plyr) #Achtung: dplyr muss deaktiviert sein sonst gibt es eine Fehlermeldung
DAT$Alterrec <- recode(DAT$AlterV05Kurz, "c('0-4','5-9','10-14','15-19','20-24') ='jung'; c('25-29','30-34','35-39','40-44','45-49','50-54',
                                          '55-59','60-64') = 'U'; c('65-69', '70-74', '75-79','80-84','85-89','90-94', '95-99','100 u. <e4>lter') = 'alt'")

################################################################################################################
#Von Individualebene auf Quartierebene
library(data.table)
DAT_Alter <- expand.grid(Quartier = unique(DAT$QuarLang), 
                              Jahr = unique(DAT$StichtagDatJahr), 
                              Alter = unique(DAT$Alterrec))
head(DAT_Alter)

Quartier <- unique(DAT_Alter$Quartier)
Jahr <- sort(unique(DAT_Alter$Jahr))
Alter <- sort(unique(DAT_Alter$Alter))

DAT_Alter$Anteil_Alter <- NA

for(i in Quartier){
  for(j in Jahr){
    
    y <- subset(DAT, QuarLang == i & StichtagDatJahr == j)
    denom <- nrow(y)
    
    for(x in Alter){
      
      numer <- nrow(y[y$Alterrec == x,])
      DAT_Alter$Anteil_Alter[DAT_Alter$Quartier == i & 
                                         DAT_Alter$Jahr == j & DAT_Alter$Alter == x] <-
        100 * numer/denom}}}

################################################################################################################
#Grafik Dot Plot: mit Subsetting 9 Quartiere für 2016
library(ggplot2)
theme_set(theme_minimal())
ggplot(data = subset(DAT_Alter, Quartier %in% c("Schwamendingen-Mitte", "Saatlen" ,"Oberstrass", "Unterstrass", "Rathaus", "City", "Enge", "Wollishofen") & 
                       Jahr %in% c(2016) & Alter %in% (c("jung","alt")))) + 
  aes(x = Quartier, y = Anteil_Alter/100, color = Alter) +
  theme(axis.text.x = element_text(angle=60, hjust=1), legend.position = "none", legend.title = element_blank()) +
  geom_point(size=1.5) +
  scale_y_continuous(labels = percent) +
  geom_text(aes(label = Alter, vjust=-0.6)) +
  labs(title = "Anteil junger (<20) und alter (>65) Personen pro Quartier, 2016", caption = "(Grafik 4: Yves Custer; Daten: Statistik Stadt Zürich.)", x = "", y = "")

################################################################################################################
################################################################################################################
################################################################################################################
################################################################################################################
#Grafik 5:
#Dot Plot: Heirat vs. Scheidung (Anteil geschiedener bzw. verheirateter Personen pro Quartier, 2016)
################################################################################################################
#Recodierung der Variable HHtypLang (Beschriftungen korrigieren)
table(DAT$Ziv2Lang)
library(car)
library(plyr) #Achtung: dplyr muss deaktiviert sein sonst gibt es eine Fehlermeldung
DAT$Statusrec <- recode(DAT$Ziv2Lang, "c('Aufgel<f6>ste Partnerschaft') ='aufgelöste Partnerschaft'; c('Ledig') = 'ledig'; c('Verwitwet') = 'verwitwet';
                        c('Geschieden') = 'geschieden'; c('Unbekannt') = 'unbekannt'; c('In eingetragener Partnerschaft') = 'In eingetragener Partnerschaft';
                        c('Verheiratet') = 'verheiratet'")
################################################################################################################
#Von Individualebene auf Quartierebene
library(data.table)
DAT_Status <- expand.grid(Quartier = unique(DAT$QuarLang), 
                         Jahr = unique(DAT$StichtagDatJahr), 
                         Zivilstatus = unique(DAT$Statusrec))
head(DAT_Status)

Quartier <- unique(DAT_Status$Quartier)
Jahr <- sort(unique(DAT_Status$Jahr))
Zivilstatus <- sort(unique(DAT_Status$Zivilstatus))

DAT_Status$Anteil_Zivilstatus <- NA

for(i in Quartier){
  for(j in Jahr){
    
    z <- subset(DAT, QuarLang == i & StichtagDatJahr == j)
    denom <- nrow(z)
    
    for(q in Zivilstatus){
      
      numer <- nrow(z[z$Statusrec == q,])
      DAT_Status$Anteil_Zivilstatus[DAT_Status$Quartier == i & 
                               DAT_Status$Jahr == j & DAT_Status$Zivilstatus == q] <-
        100 * numer/denom}}}

################################################################################################################
#Grafik Dot Plot: mit Subsetting 9 Quartiere für 2016
library(ggplot2)
theme_set(theme_minimal())
ggplot(data = subset(DAT_Status, Quartier %in% c("Schwamendingen-Mitte", "Saatlen" ,"Oberstrass", "Unterstrass", "Rathaus", "City", "Enge", "Wollishofen") & 
                       Jahr %in% c(2016) & Zivilstatus %in% c("verheiratet", "geschieden"))) +
  aes(x = Quartier, y = Anteil_Zivilstatus/100, color = Zivilstatus) +
  theme(axis.text.x = element_text(angle=60, hjust=1), legend.position = "none", legend.title = element_blank()) +
  geom_point(size=1.5) +
  scale_y_continuous(labels = percent) +
  geom_text(aes(label = Zivilstatus, vjust=-0.6)) +
  labs(title = "Anteil geschiedener und verheirateter Personen pro Quartier, 2016", caption = "(Grafik 5: Yves Custer; Daten: Statistik Stadt Zürich.)", x = "", y = "")

################################################################################################################
################################################################################################################
################################################################################################################
################################################################################################################
#Grafik 6:
#Dot Plot: Neubauten pro Quartier, 2016
################################################################################################################
#Integer Variable zu String ändern
toString(DAT$BaujahrGeb)

################################################################################################################
#Recodierung BaujahrGeb zu Altbau und Neubau
library(car)
library(plyr)
DAT$BaujahrGebrec <- recode(DAT$BaujahrGeb, "c('2016', '2015', '2014', '2013', '2012', '2011', '2010', '2009',
                            '2008', '2007', '2006') ='Neubauten';
                            else = 'Altbauten'")

is.character(DAT$BaujahrGebrec)
################################################################################################################
#Von Indivisualebene auf Quartierebene
library(data.table)
DAT_Neubauten <- expand.grid(Quartier = unique(DAT$QuarLang), 
                             Jahr = unique(DAT$StichtagDatJahr), 
                             Baustil = unique(DAT$BaujahrGebrec))
head(DAT_Neubauten)

Quartier <- unique(DAT_Neubauten$Quartier)
Jahr <- sort(unique(DAT_Neubauten$Jahr))
Baustil <- sort(unique(DAT_Neubauten$Baustil))

DAT_Neubauten$Anteil_Baustil <- NA

for(i in Quartier){
  for(j in Jahr){
    
    y <- subset(DAT, QuarLang == i & StichtagDatJahr == j)
    denom <- nrow(y)
    
    for(x in Baustil){
      
      numer <- nrow(y[y$BaujahrGebrec == x,])
      DAT_Neubauten$Anteil_Baustil[DAT_Neubauten$Quartier == i & 
                                     DAT_Neubauten$Jahr == j & DAT_Neubauten$Baustil == x] <-
        100 * numer/denom}}}

################################################################################################################
#Grafik: Dot Plot
library(ggplot2)
theme_set(theme_minimal())
ggplot(data = subset(DAT_Neubauten, Quartier %in% c("Schwamendingen-Mitte", "Saatlen" ,"Oberstrass", "Unterstrass", "Rathaus", "City", "Enge", "Wollishofen") & 
                       Jahr %in% c(2016) & Baustil %in% c("Neubauten"))) + 
  aes(x = Quartier, y = Anteil_Baustil/100, color = Baustil) +
  theme(axis.text.x = element_text(angle=60, hjust=1), legend.position = "none", legend.title = element_blank()) +
  geom_point(size=1.5) +
  scale_y_continuous(labels = percent) +
  geom_text(aes(label = Baustil, vjust=-0.6)) +
  labs(title = "Anteil Neubauten (Baujahr 2006-2016) pro Quartier, 2016", caption = "(Grafik 6: Yves Custer; Daten: Statistik Stadt Zürich.)", x = "", y = "")

################################################################################################################