Задание

Будем работать с набором данных, в котором находится информация о футбольных матча немецкой высшей лиги (бундеслиги). Будем работать с файлом bundesliga_bad.csv.

Задание на импорт:

Прежде всего установим и прочитаем нужные нам пакеты.

# install.packages('readr')
# install.packages('dplyr')
library(readr)
library(dplyr)
  1. Давайте подгрузим этот файл вслепую. Что получилось? Возникли ли какие-то проблемы?
foot <- read_csv('data/bundesliga_bad.csv')

Нужно учесть следующие проблемы:

  1. У данных нет шапки с именами переменных.

  2. Первая строчка это какой-то комментарий, поэтому его надо пропустить.

  3. У четвертой колонки при подгрузке устанавливается логический тип переменной, это происходит, так как первые 1200 значений NA. Поэтому нужно вручную установить числовой тип.

  4. Решить все проблемы и подгрузить файлик! Посмотреть на структура датасета. Как подгрузилась дата? Какие названия переменных должны быть у этого файлика?

foot <- read_csv('data/bundesliga_bad.csv', col_names = F, skip = 1,
                col_types = cols(X4 = col_number()))
glimpse(foot)
## Rows: 14,018
## Columns: 8
## $ X1 <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,…
## $ X2 <chr> "Werder Bremen", "Hertha BSC Berlin", "Preussen Muenster", "Eintra…
## $ X3 <chr> "Borussia Dortmund", "1. FC Nuernberg", "Hamburger SV", "1. FC Kai…
## $ X4 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ X5 <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA…
## $ X6 <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, …
## $ X7 <dbl> 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, …
## $ X8 <dttm> 1963-08-24, 1963-08-24, 1963-08-24, 1963-08-24, 1963-08-24, 1963-…

Задание на работу с датасетом:

  1. Есть хороший файлик bundesliga.csv. Давайте подгрузим его и будем работать с ним.
foot <- read_csv('data/bundesliga.csv')
  1. Сколько наблюдений у нас есть и сколько переменных? Какого типа каждая переменная?
glimpse(foot)
## Rows: 14,018
## Columns: 8
## $ X1        <dbl> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, …
## $ HomeTeam  <chr> "Werder Bremen", "Hertha BSC Berlin", "Preussen Muenster", …
## $ AwayTeam  <chr> "Borussia Dortmund", "1. FC Nuernberg", "Hamburger SV", "1.…
## $ HomeGoals <dbl> 3, 1, 1, 1, 1, 0, 1, 2, 3, 3, 4, 2, 3, 4, 1, 2, 2, 2, 4, 2,…
## $ AwayGoals <dbl> 2, 1, 1, 1, 4, 2, 1, 0, 3, 0, 2, 3, 1, 0, 0, 0, 2, 2, 2, 3,…
## $ Round     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,…
## $ Year      <dbl> 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963,…
## $ Date      <dttm> 1963-08-24, 1963-08-24, 1963-08-24, 1963-08-24, 1963-08-24…
  1. Есть ли бесполезные переменные? Если да, то выкинуть их.

Давайте выбросим первую переменную.

foot <- foot[, -1]
glimpse(foot)
## Rows: 14,018
## Columns: 7
## $ HomeTeam  <chr> "Werder Bremen", "Hertha BSC Berlin", "Preussen Muenster", …
## $ AwayTeam  <chr> "Borussia Dortmund", "1. FC Nuernberg", "Hamburger SV", "1.…
## $ HomeGoals <dbl> 3, 1, 1, 1, 1, 0, 1, 2, 3, 3, 4, 2, 3, 4, 1, 2, 2, 2, 4, 2,…
## $ AwayGoals <dbl> 2, 1, 1, 1, 4, 2, 1, 0, 3, 0, 2, 3, 1, 0, 0, 0, 2, 2, 2, 3,…
## $ Round     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3,…
## $ Year      <dbl> 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963, 1963,…
## $ Date      <dttm> 1963-08-24, 1963-08-24, 1963-08-24, 1963-08-24, 1963-08-24…
  1. За какой период есть наблюдения? Если что-то не получается, попробуйте использовать функцию summary(), чтобы понять в чем проблема. Попробуйте сначал без функции range, а потом с ней.

Воспользуемся функцией summary().

summary(foot$Date)
##                  Min.               1st Qu.                Median 
## "1963-08-24 00:00:00" "1975-05-19 18:00:00" "1986-11-01 00:00:00" 
##                  Mean               3rd Qu.                  Max. 
## "1986-09-27 02:13:46" "1997-12-13 00:00:00" "2009-05-23 00:00:00" 
##                  NA's 
##                   "2"

Видим, что есть 2 пропущенных значения.

min(foot$Date, na.rm = TRUE)
## [1] "1963-08-24 UTC"
max(foot$Date, na.rm = TRUE)
## [1] "2009-05-23 UTC"
range(foot$Date, na.rm = TRUE)
## [1] "1963-08-24 UTC" "2009-05-23 UTC"
  1. Сколько команд есть в нашем датасете?
length(unique(c(foot$HomeTeam, foot$AwayTeam)))
## [1] 52
  1. Сколько матчей сыграла каждая команда дома и в гостях? Какая команда сыграла наибольшее количество матчей?
h <- table(foot$HomeTeam)
a <- table(foot$AwayTeam)
sort(table(c(foot$HomeTeam, foot$AwayTeam)),decreasing = T)[1]
## Hamburger SV 
##         1560
  1. Сколько в среднем голов забивали хозяева и гости? Сколько голов в среднем забивали за игру?
mean(foot$HomeGoals)
## [1] 1.898131
mean(foot$AwayGoals)
## [1] 1.190755
foot$TotalGoals <- foot$HomeGoals + foot$AwayGoals
mean(foot$TotalGoals)
## [1] 3.088886
  1. Сколько раз выиграли хоязева, гости? Сколько раз была ничья?
foot$results <- ifelse(foot$HomeGoals > foot$AwayGoals,
                       "Победа хозяев",
                       ifelse(foot$HomeGoals < foot$AwayGoals, 
                              "Победа гостей", 
                              "Ничья"))
table(foot$results)
## 
##         Ничья Победа гостей Победа хозяев 
##          3634          3103          7281
  1. Как выбрать 10 случайных матчей?
x <- sample(1:nrow(foot), 10)
foot[x,]
## # A tibble: 10 x 9
##    HomeTeam AwayTeam HomeGoals AwayGoals Round  Year Date               
##    <chr>    <chr>        <dbl>     <dbl> <dbl> <dbl> <dttm>             
##  1 MSV Dui… 1. FC K…         1         0     5  1966 1966-09-17 00:00:00
##  2 Fortuna… Schalke…         2         1    22  1974 1975-03-01 00:00:00
##  3 VfL Boc… Hansa R…         1         0    13  1996 1996-11-01 00:00:00
##  4 Bayer L… VfB Stu…         0         0    23  1990 1991-04-02 00:00:00
##  5 MSV Dui… Fortuna…         0         0     7  1972 1972-10-14 00:00:00
##  6 1. FC K… Hamburg…         2         1     5  2001 2001-09-09 00:00:00
##  7 TSV 186… Bayern …         2         2    13  1997 1997-11-01 00:00:00
##  8 Borussi… Bayern …         2         2    24  1998 1999-04-03 00:00:00
##  9 Werder … Bayern …         0         2    25  1974 1975-03-27 00:00:00
## 10 VfL Boc… Borussi…         1         1    13  1981 1981-11-07 00:00:00
## # … with 2 more variables: TotalGoals <dbl>, results <chr>
  1. Нарисуйте гистограмму голов хозяев и голов гостей. Используйте функцию geom_bar().
# install.packages('ggplot2')
library(ggplot2)

ggplot(foot, aes(x = HomeGoals)) +
  geom_bar()

ggplot(foot, aes(x = AwayGoals)) +
  geom_bar()

Мы еще особо не знакомы с визуализацией. Но давайте попробуем нарисовать следующий график.

# install.packages('tidyr')
library(tidyr)

foot %>% 
  gather('Who', 'Goals',  c('HomeGoals', 'AwayGoals')) %>%
  ggplot(aes(x = factor(Goals), fill = Who)) +
    geom_bar(position=position_dodge()) + 
    xlab('Goals') +
    ylab('Count')

  1. Какая команда побеждала чаще всего? Сколько раз она победила?
foot$Win <- ifelse(foot$HomeGoals > foot$AwayGoals, 
                   foot$HomeTeam, 
                   ifelse(foot$HomeGoals < foot$AwayGoals, foot$AwayTeam, 'Ничья'))
x <- table(foot$Win)
x <- x[names(x)!='Ничья']
sort(x, decreasing = T)[1]
## Bayern Muenchen 
##             845

Дополнительно:

  1. Кто выиграл лигу в 2008 году и какое количество очков было? За победу начисляется 3 очка, за ничью 1, а за поражение 0 очков. кто выиграл лигу в 2008 году и какое количество очков было?
foot2008 <- foot[foot$Year==2008, ]
table(c(foot2008$HomeTeam, foot2008$AwayTeam))
## 
##               1. FC Koeln           1899 Hoffenheim         Arminia Bielefeld 
##                        34                        34                        34 
##          Bayer Leverkusen           Bayern Muenchen         Borussia Dortmund 
##                        34                        34                        34 
## Borussia Moenchengladbach       Eintracht Frankfurt           Energie Cottbus 
##                        34                        34                        34 
##              Hamburger SV               Hannover 96         Hertha BSC Berlin 
##                        34                        34                        34 
##             Karlsruher SC                Schalke 04             VfB Stuttgart 
##                        34                        34                        34 
##                VfL Bochum             VfL Wolfsburg             Werder Bremen 
##                        34                        34                        34
name <- names(table(c(foot2008$HomeTeam, foot2008$AwayTeam)))
x <-  rep(0, length(name))
names(x) <- name
for(i in 1:nrow(foot2008)){
  if (foot2008$HomeGoals[i] > foot2008$AwayGoals[i]) {
    x[foot2008$HomeTeam[i]] <- x[foot2008$HomeTeam[i]] + 3
  }else if (foot2008$HomeGoals[i] < foot2008$AwayGoals[i]) {
    x[foot2008$AwayTeam[i]] <- x[foot2008$AwayTeam[i]] + 3
  }else{
    x[foot2008$HomeTeam[i]] <- x[foot2008$HomeTeam[i]] + 1
    x[foot2008$AwayTeam[i]] <- x[foot2008$AwayTeam[i]] + 1
  }
}
print(sort(x, decreasing = T))
##             VfL Wolfsburg           Bayern Muenchen             VfB Stuttgart 
##                        69                        67                        64 
##         Hertha BSC Berlin              Hamburger SV         Borussia Dortmund 
##                        63                        61                        59 
##           1899 Hoffenheim                Schalke 04          Bayer Leverkusen 
##                        55                        50                        49 
##             Werder Bremen               Hannover 96               1. FC Koeln 
##                        45                        40                        39 
##       Eintracht Frankfurt                VfL Bochum Borussia Moenchengladbach 
##                        33                        32                        31 
##           Energie Cottbus             Karlsruher SC         Arminia Bielefeld 
##                        30                        29                        28