add new week of stuff
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,79 @@
|
|||||||
|
# Josua Kugler, Christian Merten
|
||||||
|
|
||||||
|
# install.packages("babynames")
|
||||||
|
library(tidyverse)
|
||||||
|
|
||||||
|
## Create some data-----------------------------------------------------------
|
||||||
|
|
||||||
|
set.seed(1)
|
||||||
|
|
||||||
|
baseset <- list()
|
||||||
|
baseset$grade <- as.integer(c(5,6,7,8,9,10,11))
|
||||||
|
baseset$grade_boost <- c(1,3,5,7,8,9,10)
|
||||||
|
baseset$letter <- letters[1:4]
|
||||||
|
baseset$letter_boost <- sample(1:5, 4, replace=T)
|
||||||
|
babynames::babynames %>%
|
||||||
|
group_by(sex, name) %>%
|
||||||
|
summarise(n = sum(n)) %>%
|
||||||
|
arrange(desc(n)) %>%
|
||||||
|
mutate(rank = min_rank(-n)) %>%
|
||||||
|
filter (rank <= 3000) ->
|
||||||
|
ranked_names
|
||||||
|
baseset$name <- ranked_names$name
|
||||||
|
baseset$distance <- c(100,200,400,1000)
|
||||||
|
baseset$distance_boost <- c(14,12,10,8)
|
||||||
|
|
||||||
|
sample_observation <- function(n) {
|
||||||
|
res <- list()
|
||||||
|
res$name <- sample(baseset$name, n, replace=T)
|
||||||
|
res$grade <- sample(baseset$grade, n, replace=T)
|
||||||
|
res$letter <- sample(baseset$letter, n, replace=T)
|
||||||
|
boost_base <-
|
||||||
|
baseset$grade_boost[match(res$grade,baseset$grade)] +
|
||||||
|
baseset$letter_boost[match(res$letter,baseset$letter)]
|
||||||
|
res$time100 <- sample_time(100, baseset$distance_boost[1] + boost_base)
|
||||||
|
res$time200 <- sample_time(200, baseset$distance_boost[2] + boost_base)
|
||||||
|
res$time400 <- sample_time(400, baseset$distance_boost[3] + boost_base)
|
||||||
|
res$time1000 <- sample_time(1000, baseset$distance_boost[4] + boost_base)
|
||||||
|
as_tibble(res)
|
||||||
|
}
|
||||||
|
|
||||||
|
sample_time <- function(dist, boost) {
|
||||||
|
(runif(length(boost))/2+2.5)/boost*dist*2
|
||||||
|
}
|
||||||
|
|
||||||
|
sports <- sample_observation(1000)
|
||||||
|
|
||||||
|
requirements <- tibble(
|
||||||
|
level = 1:11,
|
||||||
|
min100 = seq(43,23,len=11),
|
||||||
|
min1000 = seq(500,300,len=11)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Exercises -----------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
# a)
|
||||||
|
# get all students who failed in 100m or 1000m
|
||||||
|
sports %>% left_join(requirements, by = c("grade" = "level")) %>%
|
||||||
|
filter(time100 <= min100, time1000 <= min1000)
|
||||||
|
|
||||||
|
# b)
|
||||||
|
# get names, grade and letter of all students who failed 1000m by less than 1s
|
||||||
|
# so you can still let them pass :)
|
||||||
|
sports %>% left_join(requirements, by = c("grade" = "level")) %>%
|
||||||
|
filter((time1000 - min1000) > 0 & (time1000 - min1000) < 1) %>%
|
||||||
|
select(name, grade, letter)
|
||||||
|
|
||||||
|
# c)
|
||||||
|
# tidy the data:
|
||||||
|
# create two columns from all timeXXX-columns:
|
||||||
|
# a column "time" with the entries from all timeXXX-columns
|
||||||
|
# a column "distance" of the distance the time refers to
|
||||||
|
# make sure all columns have a suitable type
|
||||||
|
sports %>% pivot_longer(c("time100", "time200", "time400", "time1000"),
|
||||||
|
names_to="distanceRaw",
|
||||||
|
values_to="time") %>%
|
||||||
|
extract(distanceRaw, into="distance", regex="time(.*)", convert=T)
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
library(tidyverse)
|
||||||
|
library(babynames)
|
||||||
|
|
||||||
|
# 1)
|
||||||
|
babynames %>%
|
||||||
|
filter(year >= 2000) %>%
|
||||||
|
group_by(sex, name) %>%
|
||||||
|
summarize(n=sum(n), .groups="drop") ->
|
||||||
|
bn20
|
||||||
|
|
||||||
|
# 2)
|
||||||
|
bn20 %>%
|
||||||
|
group_by(name) %>%
|
||||||
|
pivot_wider(names_from="sex", values_from="n") %>%
|
||||||
|
rename(female = "F", male = "M") %>%
|
||||||
|
filter(female > 0 & male > 0 & (female+male) > 1e5) %>%
|
||||||
|
arrange(abs(female - male) / (male + female)) ->
|
||||||
|
bn20_sim
|
||||||
|
|
||||||
|
# 3)
|
||||||
|
bn20 %>% group_by(name_length = nchar(name)) %>% summarize(n=sum(n))
|
||||||
|
|
||||||
|
# 4)
|
||||||
|
min_len <- min(nchar(bn20$name))
|
||||||
|
bn20 %>% filter(nchar(name) == min_len) %>% arrange(desc(n))
|
||||||
|
|
||||||
|
# 5)
|
||||||
|
babynames %>%
|
||||||
|
group_by(year, sex) %>%
|
||||||
|
summarize(avg_len = mean(nchar(name))) ->
|
||||||
|
bn_avg_len
|
||||||
|
|
||||||
|
bn_avg_len %>%
|
||||||
|
ggplot() +
|
||||||
|
geom_line(aes(x=year, y=avg_len, color=sex))
|
||||||
|
|
||||||
|
# 6)
|
||||||
|
babynames %>%
|
||||||
|
select(-prop) %>%
|
||||||
|
filter(year >= 2000) ->
|
||||||
|
bn
|
||||||
|
|
||||||
|
# Annahme: "Neue" Namen die im Vorjahr noch nicht in bn auftauchen
|
||||||
|
# werden ausgewertet mit n_prev = 0
|
||||||
|
replace_with_zero <- function(x) {
|
||||||
|
x[is.na(x)] <- 0
|
||||||
|
x
|
||||||
|
}
|
||||||
|
|
||||||
|
bn %>%
|
||||||
|
filter(year > 2000) %>%
|
||||||
|
left_join(mutate(bn, year = year + 1, n_prev = n, n = NULL)) %>%
|
||||||
|
mutate(n_prev = replace_with_zero(n_prev)) ->
|
||||||
|
bn_prev
|
||||||
|
|
||||||
|
# Wenn das nicht erwünscht, führe man diese Zeile aus
|
||||||
|
# bn %>% inner_join(mutate(bn, year = year + 1, n_prev = n, n = NULL)) -> bn_prev
|
||||||
|
|
||||||
|
n_mean <- mean(bn$n)
|
||||||
|
|
||||||
|
bn_prev %>%
|
||||||
|
mutate(s_incr = (n-n_prev)/(n_prev + n_mean)) %>%
|
||||||
|
group_by(year, sex) %>%
|
||||||
|
slice_max(s_incr, n = 3) ->
|
||||||
|
bn_trending
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user