Будем работать с набором данных, в котором находится информация о футбольных матча немецкой высшей лиги (бундеслиги). Будем работать с файлом bundesliga_bad.csv.
Задание на импорт:
Прежде всего установим и прочитаем нужные нам пакеты.
Нужно учесть следующие проблемы:
У данных нет шапки с именами переменных.
Первая строчка это какой-то комментарий, поэтому его надо пропустить.
У четвертой колонки при подгрузке устанавливается логический тип переменной, это происходит, так как первые 1200 значений NA
. Поэтому нужно вручную установить числовой тип.
Решить все проблемы и подгрузить файлик! Посмотреть на структура датасета. Как подгрузилась дата? Какие названия переменных должны быть у этого файлика?
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-…
Задание на работу с датасетом:
## 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…
Давайте выбросим первую переменную.
## 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…
summary()
, чтобы понять в чем проблема. Попробуйте сначал без функции range
, а потом с ней.Воспользуемся функцией summary()
.
## 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] 52
h <- table(foot$HomeTeam)
a <- table(foot$AwayTeam)
sort(table(c(foot$HomeTeam, foot$AwayTeam)),decreasing = T)[1]
## Hamburger SV
## 1560
## [1] 1.898131
## [1] 1.190755
## [1] 3.088886
foot$results <- ifelse(foot$HomeGoals > foot$AwayGoals,
"Победа хозяев",
ifelse(foot$HomeGoals < foot$AwayGoals,
"Победа гостей",
"Ничья"))
table(foot$results)
##
## Ничья Победа гостей Победа хозяев
## 3634 3103 7281
## # 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>
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')
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. 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