######### Skript Datenjournalismus M. Schnell, 13-745-716, HS17
#########
rm(list = ls())
dev.off() 
cat("\014") 
file.choose()
setwd() ## Hier eigener Pfad angeben
set.seed(1234)

## Packages
library(descr)
library(ggplot2)
library(data.table)
library(dplyr)
library(plyr)
library(lhs)
library(migest)
library(circlize)
library(RCircos)
library(tidyr)
library(plotly)

data <- fread(input = "bevoelkerung.csv") 
sapply(data, class)
## Datensatz reduzieren

system.time(data <- subset(data, select=c(PersNum, StichtagDatJahr, AlterV05Kurz, SexCd, Ziv2Lang, AnzahlKinder, HHtypLang, KreisLang, QuarLang)))

## Dummy erstellen, ob jmd Kind haben wird = 1/0
data$Kinddummy <- data$AnzahlKinder

describe(data$Kinddummy)
is.numeric(data$Kinddummy)

data$Kinddummy[data$Kinddummy==0] <- 0
for(n in 1:13) { 
   data$Kinddummy[data$Kinddummy==n] <- 1
}
View(data)

## Nun alle aus dem Datensatz entfernen, welche NIE ein kind haben werden oder hatten
### Aggregat
system.time(dataset_parent <- subset(data, select=c(PersNum, Kinddummy)))

data.table(dataset_parent)[, list(freq=.N, tot=sum(Kinddummy)), by=Kinddummy][freq > 0] 
## üBERSICHT ÜBER VERTEILUNG (KD = 1/0)
## 1051460 Personen im Datensatz zeigen ein Kind an

system.time(dataset_parent <- dataset_parent[, sum(Kinddummy), by = PersNum]) ## Aggregieren, Nach PerNr, Kinddummy summieren
## der neue Datensatz aggregatPersNumundKinddummy hat 1010191 beobachtungen

dataset_parent <-  filter(dataset_parent, V1 > 0)
## Nur 160200 personen haben jemals ein kind, möglich??
## View(aggregatPersNumundKinddummy)

dataset_parent <- subset(dataset_parent, select = PersNum)

## Reduzierung von data aufgrund von dataset_parent
as.character(data$PersNum)
as.character(dataset_parent$PersNum)
datared <- data[(data$PersNum %in% dataset_parent$PersNum),]
View(datared)
#as.numeric(datared$PersNum)
#dataredtest <- filter(datared, PersNum == c(964661))

#### Wann kam das Kind zur Welt?

for(m in 1993:2016) { 
   datared$time_kids[datared$StichtagDatJahr == m & datared$AnzahlKinder >= 1] <- m
}
View(datared)

## Geburtsjahr erstes Kind
Geburtsjahr <- datared %>% 
   group_by(PersNum) %>% 
   slice(which.min(time_kids))

# Geburtsjahr +/- 2 Jahre
datared$geburtsjahrplus2 <- datared$time_kids + 2
datared$geburtsjahrminus2 <- datared$time_kids - 2
Geburtsjahrred <- datared %>% 
   group_by(PersNum) %>% 
   slice(which.min(time_kids))

subset <-  subset(Geburtsjahrred, select=c(PersNum, time_kids, geburtsjahrplus2, geburtsjahrminus2))
## wir wissen, wann die Kinder zur Welt kamen

testsubsetgeb <-  subset(subset, select=c(PersNum, time_kids))
testsubsetgeb$StichtagDatJahr <- testsubsetgeb$time_kids
testsubsetgeb <- subset(testsubsetgeb, select=c(PersNum, StichtagDatJahr))

testubsetminus2 <-  subset(subset, select=c(PersNum, geburtsjahrminus2))
testubsetminus2$StichtagDatJahr <- testubsetminus2$geburtsjahrminus2
testubsetminus2 <- subset(testubsetminus2, select=c(PersNum, StichtagDatJahr))

testsubsetplus2 <-  subset(subset, select=c(PersNum, geburtsjahrplus2))
testsubsetplus2$StichtagDatJahr <- testsubsetplus2$geburtsjahrplus2
testsubsetplus2 <- subset(testsubsetplus2, select=c(PersNum, StichtagDatJahr))

m1 <- merge(testubsetminus2, testsubsetplus2, by=c("PersNum", "StichtagDatJahr"), all=T)

ganzneu <- semi_join(datared, m1, by = c("PersNum", "StichtagDatJahr"))

mastersatztout <- subset(ganzneu, select = c(PersNum, KreisLang, StichtagDatJahr, QuarLang))
testmin <- ganzneu %>% 
   group_by(PersNum) %>% 
   slice(which.min(StichtagDatJahr))
testmax <- ganzneu %>% 
   group_by(PersNum) %>% 
   slice(which.max(StichtagDatJahr))
mastersatz <- merge(testmax, testmin, by =("PersNum"), all = T)
##### Jetzt stimmt der Datensatz, wir arbeitn mit "mastersatztout" weiter
#Datensatz für Kreisebene
#### Konkrekt heisst es jetzt: StichtagDatJahr.x = Jahr, zwei Jahre nach der Geburt, x allgemein zwei jahre danach, y zwei jahre davor

### Löschen, wenn jemand nicht das Quartier gewechsel hat
mastersatzinderStadt <- subset(mastersatz, KreisLang.y!= KreisLang.x)

#### Kreis umbennnen, um sortieren zu können

mastersatzinderStadt$KreisLang.ynum <- mastersatzinderStadt$KreisLang.y
mastersatzinderStadt$KreisLang.ynum[mastersatzinderStadt$KreisLang.ynum=="Kreis 1"] <- "K 01"
mastersatzinderStadt$KreisLang.ynum[mastersatzinderStadt$KreisLang.ynum=="Kreis 2"] <- "K 02"
mastersatzinderStadt$KreisLang.ynum[mastersatzinderStadt$KreisLang.ynum=="Kreis 3"] <- "K 03"
mastersatzinderStadt$KreisLang.ynum[mastersatzinderStadt$KreisLang.ynum=="Kreis 4"] <- "K 04"
mastersatzinderStadt$KreisLang.ynum[mastersatzinderStadt$KreisLang.ynum=="Kreis 5"] <- "K 05"
mastersatzinderStadt$KreisLang.ynum[mastersatzinderStadt$KreisLang.ynum=="Kreis 6"] <- "K 06"
mastersatzinderStadt$KreisLang.ynum[mastersatzinderStadt$KreisLang.ynum=="Kreis 7"] <- "K 07"
mastersatzinderStadt$KreisLang.ynum[mastersatzinderStadt$KreisLang.ynum=="Kreis 8"] <- "K 08"
mastersatzinderStadt$KreisLang.ynum[mastersatzinderStadt$KreisLang.ynum=="Kreis 9"] <- "K 09"
mastersatzinderStadt$KreisLang.ynum[mastersatzinderStadt$KreisLang.ynum=="Kreis 10"] <- "K 10"
mastersatzinderStadt$KreisLang.ynum[mastersatzinderStadt$KreisLang.ynum=="Kreis 11"] <- "K 11"
mastersatzinderStadt$KreisLang.ynum[mastersatzinderStadt$KreisLang.ynum=="Kreis 12"] <- "K 12"

mastersatzinderStadt$KreisLang.xnum <- mastersatzinderStadt$KreisLang.x
mastersatzinderStadt$KreisLang.xnum[mastersatzinderStadt$KreisLang.xnum=="Kreis 1"] <- "K 01"
mastersatzinderStadt$KreisLang.xnum[mastersatzinderStadt$KreisLang.xnum=="Kreis 2"] <- "K 02"
mastersatzinderStadt$KreisLang.xnum[mastersatzinderStadt$KreisLang.xnum=="Kreis 3"] <- "K 03"
mastersatzinderStadt$KreisLang.xnum[mastersatzinderStadt$KreisLang.xnum=="Kreis 4"] <- "K 04"
mastersatzinderStadt$KreisLang.xnum[mastersatzinderStadt$KreisLang.xnum=="Kreis 5"] <- "K 05"
mastersatzinderStadt$KreisLang.xnum[mastersatzinderStadt$KreisLang.xnum=="Kreis 6"] <- "K 06"
mastersatzinderStadt$KreisLang.xnum[mastersatzinderStadt$KreisLang.xnum=="Kreis 7"] <- "K 07"
mastersatzinderStadt$KreisLang.xnum[mastersatzinderStadt$KreisLang.xnum=="Kreis 8"] <- "K 08"
mastersatzinderStadt$KreisLang.xnum[mastersatzinderStadt$KreisLang.xnum=="Kreis 9"] <- "K 09"
mastersatzinderStadt$KreisLang.xnum[mastersatzinderStadt$KreisLang.xnum=="Kreis 10"] <- "K 10"
mastersatzinderStadt$KreisLang.xnum[mastersatzinderStadt$KreisLang.xnum=="Kreis 11"] <- "K 11"
mastersatzinderStadt$KreisLang.xnum[mastersatzinderStadt$KreisLang.xnum=="Kreis 12"] <- "K 12"

### Kreisdiagramm
### Farben http://zuguang.de/circlize_book/book/the-chorddiagram-function.html
write.csv(mastersatzinderStadt, "mastersatzinderStadt.csv")
### Datensatz zwischenspeichern

##?
dev.off()
mastersatzinderStadt <- fread(input = "mastersatzinderStadt.csv") 
library(circlize)
?colorspaces
## Farben der Kreise definieren
## 
colors <- rainbow(12, alpha = NULL)[sample(12)]
colors
for(i in 1)
{
   grid.col = c("K 01" = colors[i], "K 02" = colors[i+1], "K 03" = colors[i+9], "K 04" = colors[i+3], "K 05" = colors[i+4], "K 06" = colors[i+5], "K 07" = colors[i+6], "K 08" = colors[i+7], "K 09" = colors[i+8], "K 10" = colors[i+2], "K 11" = colors[i+10], "K 12" = colors[i+11])
}
as.character(colors)
View(mastersatzinderStadt)

## Loop, welcher Kreis für alle Jahre einzeln  erstellt
for(i in 1995:2014)
{
   Satz <- data.frame()
   Satz <- (filter(mastersatzinderStadt, StichtagDatJahr.y == i-2))
   origin <- Satz$KreisLang.ynum
   dest <- Satz$KreisLang.xnum
   mydf = data.frame(origin, dest)
   order <- mydf[order(mydf$origin),]
   mymat <- data.matrix(as.data.frame.matrix(table(mydf)))
   from <- rownames(mymat)
   to <- colnames(mymat)
   par(mar = c(1, 2, 2, 3))
   chordDiagram(mymat, grid.col = grid.col, link.sort = T, link.decreasing = T, directional = TRUE, keep.diagonal = F, transparency = 0, link.rank = NULL, link.largest.ontop = T, link.lty = F,link.visible =T, direction.type = c("diffHeight", "arrows"),
                link.arr.type = "big.arrow", diffHeight = -uh(2, "mm"), title(i))
} 

## Für Jahresgruppen
# 1995-1999
Satz <- data.frame()
Satz <- (filter(mastersatzinderStadt, StichtagDatJahr.y == c(1995:1999)))
origin <- Satz$KreisLang.ynum
dest <- Satz$KreisLang.xnum
mydf = data.frame(origin, dest)
order <- mydf[order(mydf$origin),]
mymat <- data.matrix(as.data.frame.matrix(table(mydf)))
from <- rownames(mymat)
to <- colnames(mymat)
par(mar = c(1, 2, 2, 3))
p1 <- chordDiagram(mymat, grid.col = grid.col, link.sort = T, link.decreasing = T, directional = TRUE, keep.diagonal = F, transparency = 0, link.rank = NULL, link.largest.ontop = T, link.lty = F,link.visible =T, direction.type = c("diffHeight", "arrows"),
             link.arr.type = "big.arrow", diffHeight = -uh(2, "mm"), title("Geburtsjahre 1995-1999"))
} 
# 2000-2004
Satz <- data.frame()
Satz <- (filter(mastersatzinderStadt, StichtagDatJahr.y == c(2000:2004)))
origin <- Satz$KreisLang.ynum
dest <- Satz$KreisLang.xnum
mydf = data.frame(origin, dest)
order <- mydf[order(mydf$origin),]
mymat <- data.matrix(as.data.frame.matrix(table(mydf)))
from <- rownames(mymat)
to <- colnames(mymat)
par(mar = c(1, 2, 2, 3))
p2 <- chordDiagram(mymat, grid.col = grid.col, link.sort = T, link.decreasing = T, directional = TRUE, keep.diagonal = F, transparency = 0, link.rank = NULL, link.largest.ontop = T, link.lty = F,link.visible =T, direction.type = c("diffHeight", "arrows"),
             link.arr.type = "big.arrow", diffHeight = -uh(2, "mm"), title("Geburtsjahre 2000-2004"))
} 
# 2005-2009
Satz <- data.frame()
Satz <- (filter(mastersatzinderStadt, StichtagDatJahr.y == c(2005:2009)))
origin <- Satz$KreisLang.ynum
dest <- Satz$KreisLang.xnum
mydf = data.frame(origin, dest)
order <- mydf[order(mydf$origin),]
mymat <- data.matrix(as.data.frame.matrix(table(mydf)))
from <- rownames(mymat)
to <- colnames(mymat)
par(mar = c(1, 2, 2, 3))
p3 <- chordDiagram(mymat, grid.col = grid.col, link.sort = T, link.decreasing = T, directional = TRUE, keep.diagonal = F, transparency = 0, link.rank = NULL, link.largest.ontop = T, link.lty = F,link.visible =T, direction.type = c("diffHeight", "arrows"),
             link.arr.type = "big.arrow", diffHeight = -uh(2, "mm"), title("Geburtsjahre 2005-2009"))
} 
# 2009-2014
Satz <- data.frame()
Satz10 <- (filter(mastersatzinderStadt, StichtagDatJahr.y == c(2010)))
Satz11 <- (filter(mastersatzinderStadt, StichtagDatJahr.y == c(2011)))
Satz12 <- (filter(mastersatzinderStadt, StichtagDatJahr.y == c(2012)))
Satz13 <- (filter(mastersatzinderStadt, StichtagDatJahr.y == c(2013)))
Satz14 <- (filter(mastersatzinderStadt, StichtagDatJahr.y == c(2014)))
Satztot <- rbind(Satz10, Satz11, Satz12, Satz13, Satz14)
origin <- Satztot$KreisLang.ynum
dest <- Satztot$KreisLang.xnum
mydf = data.frame(origin, dest)
order <- mydf[order(mydf$origin),]
mymat <- data.matrix(as.data.frame.matrix(table(mydf)))
from <- rownames(mymat)
to <- colnames(mymat)
par(mar = c(1, 2, 2, 3))
p4 <- chordDiagram(mymat, grid.col = grid.col, link.sort = T, link.decreasing = T, directional = TRUE, keep.diagonal = F, transparency = 0, link.rank = NULL, link.largest.ontop = T, link.lty = F,link.visible =T, direction.type = c("diffHeight", "arrows"),
             link.arr.type = "big.arrow", diffHeight = -uh(2, "mm"), title("Geburtsjahre 2010-2014"))
} 

### Darstellungen GGPlot
### 

## Datensätze erstellen,  mergen und säubern
df1 <- mastersatzinderStadt %>% group_by(KreisLang.x) %>% summarise(Anzahl=n()) %>% mutate(perc=Anzahl/sum(Anzahl))
df2 <- mastersatzinderStadt %>% group_by(KreisLang.y) %>% summarise(Anzahl=n()) %>% mutate(perc=Anzahl/sum(Anzahl))

df2$KreisLang.x <- df2$KreisLang.y
df2$KreisLang.y <- NULL
library(data.table)
df2$Wegzug <- df2$Anzahl
df2$Anzahl <- NULL

df1$Bewegungstyp <- "Hinzug"
df2$Bewegungstyp <- "Wegzug"
df4 <- df1
df5 <- df2
df5$Anzahl <- df5$Wegzug
df6 <- bind_rows(df4, df5)  
df6$Kreis <- df6$KreisLang.x
df6$KreisLang.x <- NULL
df6$Kreis[df6$Kreis=="Kreis 1"] <- "Kreis 01"
df6$Kreis[df6$Kreis=="Kreis 2"] <- "Kreis 02"
df6$Kreis[df6$Kreis=="Kreis 3"] <- "Kreis 03"
df6$Kreis[df6$Kreis=="Kreis 4"] <- "Kreis 04"
df6$Kreis[df6$Kreis=="Kreis 5"] <- "Kreis 05"
df6$Kreis[df6$Kreis=="Kreis 6"] <- "Kreis 06"
df6$Kreis[df6$Kreis=="Kreis 7"] <- "Kreis 07"
df6$Kreis[df6$Kreis=="Kreis 8"] <- "Kreis 08"
df6$Kreis[df6$Kreis=="Kreis 9"] <- "Kreis 09"
df6$Kreis[df6$Kreis=="Kreis 10"] <- "Kreis 10"
df6$Kreis[df6$Kreis=="Kreis 11"] <- "Kreis 11"
df6$Kreis[df6$Kreis=="Kreis 12"] <- "Kreis 12"

## Plot erstellen
q <- ggplot(df6,aes(x=Kreis)) + 
   geom_bar(aes(y=Anzahl, fill=Bewegungstyp),stat="identity",position="dodge")  + annotate("text", x = 1:12, y =1,vjust=1.3, label = df3$RatioHinWeg, size=4) +labs(title = "Umzüge der Eltern  mit Verhältnis Hinzug/Wegzug (Geburt  1995 - 2014)", x = "Kreis", y = "Umzüge in Anzahl Personen", size=12) + theme(text = element_text(size=12), axis.text.x = element_text(angle=45, hjust=1)) 
q