library(tidyverse)
<- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2022/2022-01-25/ratings.csv')
ratings <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2022/2022-01-25/details.csv') details
Анализ данных про настольные игры
Введение
Перед вами два связанных набора данных ratings
и details
, которые содержат в себе информацию об огромном количестве настольных игр. Наборы данных взяты с проекта Tidy Tuesday (в свою очередь, эти данные взяты с Kaggle, где есть данные на 3 гигабайта со всеми обзорами на игры!), а собраны с сайта BoardGamesGeek.
Описание колонок (codebook) можно посмотреть на гитхабе проекта Tidy Tuesday.
Исследуем ratings
Давайте для начала немного исследуем датасет ratings
.
Подсмотреть код (но лучше решите сами!)
ratings
# A tibble: 21,831 × 10
num id name year rank average bayes…¹ users…² url thumb…³
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 105 30549 Pandemic 2008 106 7.59 7.49 108975 /boa… https:…
2 189 822 Carcassonne 2000 190 7.42 7.31 108738 /boa… https:…
3 428 13 Catan 1995 429 7.14 6.97 108024 /boa… https:…
4 72 68448 7 Wonders 2010 73 7.74 7.63 89982 /boa… https:…
5 103 36218 Dominion 2008 104 7.61 7.50 81561 /boa… https:…
6 191 9209 Ticket to Ride 2004 192 7.41 7.30 76171 /boa… https:…
7 100 178900 Codenames 2015 101 7.6 7.51 74419 /boa… https:…
8 3 167791 Terraforming … 2016 4 8.42 8.27 74216 /boa… https:…
9 15 173346 7 Wonders Duel 2015 16 8.11 7.98 69472 /boa… https:…
10 35 31260 Agricola 2007 36 7.93 7.81 66093 /boa… https:…
# … with 21,821 more rows, and abbreviated variable names ¹bayes_average,
# ²users_rated, ³thumbnail
Выберем из ratings
колонки name
, average
, users_rated
Подсмотреть код (но лучше решите сами!)
%>%
ratings select(name, average, users_rated)
# A tibble: 21,831 × 3
name average users_rated
<chr> <dbl> <dbl>
1 Pandemic 7.59 108975
2 Carcassonne 7.42 108738
3 Catan 7.14 108024
4 7 Wonders 7.74 89982
5 Dominion 7.61 81561
6 Ticket to Ride 7.41 76171
7 Codenames 7.6 74419
8 Terraforming Mars 8.42 74216
9 7 Wonders Duel 8.11 69472
10 Agricola 7.93 66093
# … with 21,821 more rows
Выберем из тиббла ratings
20, 500, 2000 и 20000ные строки:
Подсмотреть код (но лучше решите сами!)
%>%
ratings slice(c(20, 500, 2000, 20000))
# A tibble: 4 × 10
num id name year rank average bayes_…¹ users…² url thumb…³
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 22 266192 Wingspan 2019 23 8.1 7.94 56079 /boa… https:…
2 1150 826 Cartagena 2000 1151 6.69 6.45 7601 /boa… https:…
3 2704 58 Kings & Things 1986 2705 6.51 5.97 1629 /boa… https:…
4 17650 13440 Horrific 2004 17651 5.8 5.50 36 /boa… https:…
# … with abbreviated variable names ¹bayes_average, ²users_rated, ³thumbnail
Отранжируем игры в ratings
по названиям (в алфавитном порядке):
Подсмотреть код (но лучше решите сами!)
%>%
ratings arrange(name)
# A tibble: 21,831 × 10
num id name year rank average bayes…¹ users…² url thumb…³
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 18328 122711 "\"La Garde r… 2011 18329 5.39 5.50 35 /boa… https:…
2 17674 23304 "\"Oh My God!… 2014 17675 5.77 5.50 84 /boa… https:…
3 10121 4016 "\"Scratch On… 1995 10122 7.42 5.55 52 /boa… https:…
4 11197 38836 "\"Tarleton's… 2010 11198 7.06 5.54 50 /boa… https:…
5 17013 286535 "#MyLife" 2019 17014 5.69 5.51 60 /boa… https:…
6 5646 188325 "'65: Squad-L… 2016 5647 7.67 5.66 153 /boa… https:…
7 20470 7463 "'CA' Tactica… 1973 20471 5.31 5.47 109 /boa… https:…
8 6950 6253 "'Wacht am Rh… 1977 6951 7.43 5.61 131 /boa… https:…
9 12277 258440 "(Come on) Le… 2018 12278 7.28 5.53 38 /boa… https:…
10 8165 128568 "(Your Name H… 2012 8166 7.13 5.58 115 /boa… https:…
# … with 21,821 more rows, and abbreviated variable names ¹bayes_average,
# ²users_rated, ³thumbnail
Отранжируем игры в ratings
от по средним оценкам (average
): от лучших к худшим.
Подсмотреть код (но лучше решите сами!)
%>%
ratings arrange(desc(average))
# A tibble: 21,831 × 10
num id name year rank average bayes…¹ users…² url thumb…³
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 13628 274471 Malhya: Lands… 2022 13629 9.57 5.53 41 /boa… https:…
2 14432 275777 Erune 2021 14433 9.56 5.52 43 /boa… https:…
3 17552 228370 TerroriXico 2018 17553 9.43 5.50 70 /boa… https:…
4 7432 345976 System Gatewa… 2021 7433 9.4 5.6 47 /boa… https:…
5 11478 322354 DEFCON 1 2022 11479 9.36 5.54 60 /boa… https:…
6 13821 173514 Meeple Quest 2021 13822 9.31 5.52 45 /boa… https:…
7 6961 85147 Wings of the … 2019 6962 9.29 5.61 101 /boa… https:…
8 14646 281257 Aeolis 2020 14647 9.25 5.52 40 /boa… https:…
9 16996 207203 War Titans: I… 0 16997 9.24 5.51 58 /boa… https:…
10 14752 151070 Gladiatoris 2009 14753 9.23 5.52 31 /boa… https:…
# … with 21,821 more rows, and abbreviated variable names ¹bayes_average,
# ²users_rated, ³thumbnail
У нас получилось много малоизвестных игр, у которых мало оценок. Давайте отделим для дальнейшего анализа только 5% игр, которые получили больше всего оценок (users_rated
) и сохраним полученную таблицу в переменную ratings_topgames
.
Подсмотреть код (но лучше решите сами!)
<- ratings %>%
ratings_topgames slice_max(order_by = users_rated, prop = .05)
ratings_topgames
# A tibble: 1,091 × 10
num id name year rank average bayes…¹ users…² url thumb…³
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 105 30549 Pandemic 2008 106 7.59 7.49 108975 /boa… https:…
2 189 822 Carcassonne 2000 190 7.42 7.31 108738 /boa… https:…
3 428 13 Catan 1995 429 7.14 6.97 108024 /boa… https:…
4 72 68448 7 Wonders 2010 73 7.74 7.63 89982 /boa… https:…
5 103 36218 Dominion 2008 104 7.61 7.50 81561 /boa… https:…
6 191 9209 Ticket to Ride 2004 192 7.41 7.30 76171 /boa… https:…
7 100 178900 Codenames 2015 101 7.6 7.51 74419 /boa… https:…
8 3 167791 Terraforming … 2016 4 8.42 8.27 74216 /boa… https:…
9 15 173346 7 Wonders Duel 2015 16 8.11 7.98 69472 /boa… https:…
10 35 31260 Agricola 2007 36 7.93 7.81 66093 /boa… https:…
# … with 1,081 more rows, and abbreviated variable names ¹bayes_average,
# ²users_rated, ³thumbnail
Теперь посмотрим на худшие игры в новом датасете ratings_topgames, отранжировав игры про средней оценке (average
):
Подсмотреть код (но лучше решите сами!)
%>%
ratings_topgames arrange(average)
# A tibble: 1,091 × 10
num id name year rank average bayes…¹ users…² url thumb…³
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
1 21829 11901 Tic-Tac-Toe 1300 21830 2.7 3.58 3436 /boa… https:…
2 21828 5432 Chutes and Lad… 200 21829 2.87 3.61 4035 /boa… https:…
3 21827 5048 Candy Land 1949 21828 3.18 3.80 4238 /boa… https:…
4 21824 1410 Trouble 1965 21825 3.81 4.30 3484 /boa… https:…
5 21820 3737 Operation 1965 21821 4.12 4.51 3827 /boa… https:…
6 21822 2921 The Game of Li… 1960 21823 4.31 4.31 11324 /boa… https:…
7 21823 1406 Monopoly 1933 21824 4.37 4.30 30803 /boa… https:…
8 21813 2136 Pachisi 400 21814 4.5 4.69 4768 /boa… https:…
9 21816 2407 Sorry! 1929 21817 4.52 4.65 6165 /boa… https:…
10 21807 5894 Twister 1966 21808 4.54 4.76 4230 /boa… https:…
# … with 1,081 more rows, and abbreviated variable names ¹bayes_average,
# ²users_rated, ³thumbnail
Верните в виде строкового вектора 10 худших игр (по average
) из ratings_topgames
.
Подсмотреть код (но лучше решите сами!)
%>%
ratings_topgames arrange(average) %>%
slice(1:10) %>%
pull(name)
[1] "Tic-Tac-Toe" "Chutes and Ladders" "Candy Land"
[4] "Trouble" "Operation" "The Game of Life"
[7] "Monopoly" "Pachisi" "Sorry!"
[10] "Twister"
Теперь исследуем датасет details
с дополнительными метаданными про настольные игры. Отранжируем игры в details
по убыванию minplaytime
, чтобы посмотреть самые долгие игры.
Подсмотреть код (но лучше решите сами!)
%>%
details arrange(desc(minplaytime))
# A tibble: 21,631 × 23
num id primary descr…¹ yearp…² minpl…³ maxpl…⁴ playi…⁵ minpl…⁶ maxpl…⁷
<dbl> <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 9553 4815 The Cam… This i… 1979 8 10 60000 60000 60000
2 10865 46669 1914: O… (from … 2013 2 4 17280 17280 17280
3 13470 6942 Drang N… Introd… 1973 2 4 12000 12000 12000
4 14448 239982 The Eni… We wan… 2017 1 4 10000 6000 10000
5 4975 5651 The Lon… The Lo… 1979 2 8 5400 5400 5400
6 6528 13532 Guderia… (from … 2001 1 6 4500 4500 4500
7 5951 4102 Europa … "… 1993 1 6 3600 3600 3600
8 6792 32989 Axis Em… From t… 2011 1 3 3600 3600 3600
9 6332 8993 Fire in… Fire i… 1984 2 4 3000 3000 3000
10 7517 22359 Steel W… (from … 2010 1 1 3000 3000 3000
# … with 21,621 more rows, 13 more variables: minage <dbl>,
# boardgamecategory <chr>, boardgamemechanic <chr>, boardgamefamily <chr>,
# boardgameexpansion <chr>, boardgameimplementation <chr>,
# boardgamedesigner <chr>, boardgameartist <chr>, boardgamepublisher <chr>,
# owned <dbl>, trading <dbl>, wanting <dbl>, wishing <dbl>, and abbreviated
# variable names ¹description, ²yearpublished, ³minplayers, ⁴maxplayers,
# ⁵playingtime, ⁶minplaytime, ⁷maxplaytime
Выкинем все игры, в которых минимальное время игры – 0 минут. Сохраним результаты в новый тибл details_longplay
.
Подсмотреть код (но лучше решите сами!)
<- details %>%
details_longplay filter(minplaytime != 0)
details_longplay
# A tibble: 20,989 × 23
num id primary descr…¹ yearp…² minpl…³ maxpl…⁴ playi…⁵ minpl…⁶ maxpl…⁷
<dbl> <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0 30549 Pandemic In Pan… 2008 2 4 45 45 45
2 1 822 Carcass… Carcas… 2000 2 5 45 30 45
3 2 13 Catan In CAT… 1995 3 4 120 60 120
4 3 68448 7 Wonde… You ar… 2010 2 7 30 30 30
5 4 36218 Dominion "… 2008 2 4 30 30 30
6 5 9209 Ticket … With e… 2004 2 5 60 30 60
7 6 178900 Codenam… Codena… 2015 2 8 15 15 15
8 7 167791 Terrafo… In the… 2016 1 5 120 120 120
9 8 173346 7 Wonde… In man… 2015 2 2 30 30 30
10 9 31260 Agricola Descri… 2007 1 5 150 30 150
# … with 20,979 more rows, 13 more variables: minage <dbl>,
# boardgamecategory <chr>, boardgamemechanic <chr>, boardgamefamily <chr>,
# boardgameexpansion <chr>, boardgameimplementation <chr>,
# boardgamedesigner <chr>, boardgameartist <chr>, boardgamepublisher <chr>,
# owned <dbl>, trading <dbl>, wanting <dbl>, wishing <dbl>, and abbreviated
# variable names ¹description, ²yearpublished, ³minplayers, ⁴maxplayers,
# ⁵playingtime, ⁶minplaytime, ⁷maxplaytime
Создадим новую колонку time_group
в details_longplay
, в которую запишем:
"short"
– если минимальное время игры меньше или равно 10 минутам;"middle"
– если минимальное время игры больше 10 минут, но меньше или равно 120 минутам;"long"
– если минимальное время игры больше 120 минут, но не больше суток;"extremely long"
– если минимальное время игры больше суток (о, господи).
Новый датасет сохраните в переменную details_longplay_time
.
Подсмотреть код (но лучше решите сами!)
<- details_longplay %>%
details_longplay_time mutate(time_group = case_when(minplaytime <= 10 ~ "short",
<= 120 ~ "middle",
minplaytime <= 24 * 60 ~ "long",
minplaytime .default = "extremely long"))
Посчитайте, сколько игр в каждой из получившихся категорий.
Подсмотреть код (но лучше решите сами!)
%>%
details_longplay_time count(time_group)
# A tibble: 4 × 2
time_group n
<chr> <int>
1 extremely long 19
2 long 1655
3 middle 17556
4 short 1759
Время объединяться!
Дополните набор данных details_longplay_time
данными ratings
. Проверьте, что количество строчек в details_lonngplay_time
не изменилось (вам для этого нужно подобрать правильный *_join
)! Объединить нужно по ключу id
.
Подсмотреть код (но лучше решите сами!)
%>%
details_longplay_time left_join(ratings, by = "id")
# A tibble: 20,989 × 33
num.x id primary descr…¹ yearp…² minpl…³ maxpl…⁴ playi…⁵ minpl…⁶ maxpl…⁷
<dbl> <dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 0 30549 Pandemic In Pan… 2008 2 4 45 45 45
2 1 822 Carcass… Carcas… 2000 2 5 45 30 45
3 2 13 Catan In CAT… 1995 3 4 120 60 120
4 3 68448 7 Wonde… You ar… 2010 2 7 30 30 30
5 4 36218 Dominion "… 2008 2 4 30 30 30
6 5 9209 Ticket … With e… 2004 2 5 60 30 60
7 6 178900 Codenam… Codena… 2015 2 8 15 15 15
8 7 167791 Terrafo… In the… 2016 1 5 120 120 120
9 8 173346 7 Wonde… In man… 2015 2 2 30 30 30
10 9 31260 Agricola Descri… 2007 1 5 150 30 150
# … with 20,979 more rows, 23 more variables: minage <dbl>,
# boardgamecategory <chr>, boardgamemechanic <chr>, boardgamefamily <chr>,
# boardgameexpansion <chr>, boardgameimplementation <chr>,
# boardgamedesigner <chr>, boardgameartist <chr>, boardgamepublisher <chr>,
# owned <dbl>, trading <dbl>, wanting <dbl>, wishing <dbl>, time_group <chr>,
# num.y <dbl>, name <chr>, year <dbl>, rank <dbl>, average <dbl>,
# bayes_average <dbl>, users_rated <dbl>, url <chr>, thumbnail <chr>, and …
Теперь посчитайте средние average
, users_rated
и owned
для каждой группы по времени игры (колонка time_group
, которую мы создавали ранее)
Подсмотреть код (но лучше решите сами!)
%>%
details_longplay_time left_join(ratings, by = "id") %>%
group_by(time_group) %>%
summarize(rating = mean(average, na.rm = TRUE),
rated = mean(users_rated, na.rm = TRUE),
owned = mean(owned, na.rm = TRUE))
# A tibble: 4 × 4
time_group rating rated owned
<chr> <dbl> <dbl> <dbl>
1 extremely long 7.50 220. 718.
2 long 6.90 408. 857.
3 middle 6.42 996. 1664.
4 short 6.08 393. 781.
Теперь сделаем обратную задачу: возьмем тибл ratings_topgames
, созданный ранее, и дополним его набором данных details
(по ключу id
).
Подсмотреть код (но лучше решите сами!)
%>%
ratings_topgames left_join(details, by = "id")
# A tibble: 1,091 × 32
num.x id name year rank average bayes…¹ users…² url thumb…³ num.y
<dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <dbl>
1 105 30549 Pandemic 2008 106 7.59 7.49 108975 /boa… https:… 0
2 189 822 Carcass… 2000 190 7.42 7.31 108738 /boa… https:… 1
3 428 13 Catan 1995 429 7.14 6.97 108024 /boa… https:… 2
4 72 68448 7 Wonde… 2010 73 7.74 7.63 89982 /boa… https:… 3
5 103 36218 Dominion 2008 104 7.61 7.50 81561 /boa… https:… 4
6 191 9209 Ticket … 2004 192 7.41 7.30 76171 /boa… https:… 5
7 100 178900 Codenam… 2015 101 7.6 7.51 74419 /boa… https:… 6
8 3 167791 Terrafo… 2016 4 8.42 8.27 74216 /boa… https:… 7
9 15 173346 7 Wonde… 2015 16 8.11 7.98 69472 /boa… https:… 8
10 35 31260 Agricola 2007 36 7.93 7.81 66093 /boa… https:… 9
# … with 1,081 more rows, 21 more variables: primary <chr>, description <chr>,
# yearpublished <dbl>, minplayers <dbl>, maxplayers <dbl>, playingtime <dbl>,
# minplaytime <dbl>, maxplaytime <dbl>, minage <dbl>,
# boardgamecategory <chr>, boardgamemechanic <chr>, boardgamefamily <chr>,
# boardgameexpansion <chr>, boardgameimplementation <chr>,
# boardgamedesigner <chr>, boardgameartist <chr>, boardgamepublisher <chr>,
# owned <dbl>, trading <dbl>, wanting <dbl>, wishing <dbl>, and abbreviated …
В колонке boardgamecategory
перечислено по несколько жанров для каждой категории. Нам нужно что-то с этим сделать, чтобы анализировать категории игр: сделайте длинный датафрейм, в каждой строчке которого будет уникальное сочетание игры и категории (соответственно, может быть несколько строчек для одной игры).
Повторяющиеся сочетания (такие есть) необходимо удалить.
Для этого, вам нужно для начала немного модифицировать колонку boardgamecategory
, для начала удалив из нее символы [
, |
, ]
. Воспользуйтесь для этого пакетом stringr
, а вот нужную функцию найдите самостоятельно! В качестве паттерна для удаления выбранных значений можете воспользоваться регулярным выражением "\\[|'|\\]"
.
Подсмотреть код (но лучше решите сами!)
%>%
ratings_topgames left_join(details, by = "id") %>%
transmute(name, boardgamecategory = str_remove_all(boardgamecategory, "\\[|'|\\]")) %>%
separate_rows(boardgamecategory, sep = ", ") %>%
distinct()
# A tibble: 3,396 × 2
name boardgamecategory
<chr> <chr>
1 Pandemic Medical
2 Carcassonne City Building
3 Carcassonne Medieval
4 Carcassonne Territory Building
5 Catan Economic
6 Catan Negotiation
7 7 Wonders Ancient
8 7 Wonders Card Game
9 7 Wonders City Building
10 7 Wonders Civilization
# … with 3,386 more rows
Сделайте широкую табличку, где каждая строчка будет означать игру, а в колонках будут содержаться логичесие значения: TRUE
– игра принадлежит категории, FALSE
– игра не принадлежит категории.
Подсмотреть код (но лучше решите сами!)
%>%
ratings_topgames left_join(details, by = "id") %>%
transmute(name, boardgamecategory = str_remove_all(boardgamecategory, "\\[|'|\\]")) %>%
separate_rows(boardgamecategory, sep = ", ") %>%
distinct() %>%
mutate(value = TRUE) %>%
pivot_wider(names_from = boardgamecategory,
values_from = value,
values_fill = FALSE)
# A tibble: 1,085 × 82
name Medical City …¹ Medie…² Terri…³ Econo…⁴ Negot…⁵ Ancient Card …⁶ Civil…⁷
<chr> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl> <lgl>
1 Pand… TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
2 Carc… FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
3 Catan FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE
4 7 Wo… FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE TRUE
5 Domi… FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE
6 Tick… FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
7 Code… FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
8 Terr… FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE
9 7 Wo… FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE TRUE
10 Agri… FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
# … with 1,075 more rows, 72 more variables: Trains <lgl>, Deduction <lgl>,
# `Party Game` <lgl>, `Spies/Secret Agents` <lgl>, `Word Game` <lgl>,
# Environmental <lgl>, `Industry / Manufacturing` <lgl>,
# `Science Fiction` <lgl>, `Space Exploration` <lgl>, Animals <lgl>,
# Farming <lgl>, Renaissance <lgl>, Fighting <lgl>, Miniatures <lgl>,
# Fantasy <lgl>, `Abstract Strategy` <lgl>, Puzzle <lgl>, Dice <lgl>,
# `Movies / TV / Radio theme` <lgl>, Educational <lgl>, Humor <lgl>, …
Посчитайте, сколько игры в каждой категории, составьте топ от наиболее крупных категорий, до самых мелких.
Подсмотреть код (но лучше решите сами!)
%>%
ratings_topgames left_join(details, by = "id") %>%
transmute(boardgamecategory = str_remove_all(boardgamecategory, "\\[|'|\\]")) %>%
separate_rows(boardgamecategory, sep = ", ") %>%
count(boardgamecategory, sort = TRUE)
# A tibble: 81 × 2
boardgamecategory n
<chr> <int>
1 Card Game 324
2 Fantasy 208
3 Economic 177
4 Fighting 162
5 Science Fiction 125
6 Adventure 111
7 Medieval 101
8 Exploration 99
9 City Building 92
10 Bluffing 91
# … with 71 more rows
Теперь посчитайте не только количество игр по категории, но и их среднюю оценку, а также самую высокооцененную игру.
Подсмотреть код (но лучше решите сами!)
%>%
ratings_topgames left_join(details, by = "id") %>%
mutate(boardgamecategory = str_remove_all(boardgamecategory, "\\[|'|\\]")) %>%
separate_rows(boardgamecategory, sep = ", ") %>%
arrange(desc(average)) %>%
group_by(boardgamecategory) %>%
summarise(n = n(),
mean_average = mean(average),
highest_score_game = first(name)) %>%
arrange(desc(n))
# A tibble: 81 × 4
boardgamecategory n mean_average highest_score_game
<chr> <int> <dbl> <chr>
1 Card Game 324 7.03 Through the Ages: A New Story of Civili…
2 Fantasy 208 7.27 Gloomhaven
3 Economic 177 7.48 Twilight Imperium: Fourth Edition
4 Fighting 162 7.27 Gloomhaven
5 Science Fiction 125 7.42 Twilight Imperium: Fourth Edition
6 Adventure 111 7.39 Gloomhaven
7 Medieval 101 7.29 Tainted Grail: The Fall of Avalon
8 Exploration 99 7.31 Gloomhaven
9 City Building 92 7.32 On Mars
10 Bluffing 91 7.00 Dune
# … with 71 more rows
Наконец, посчитайте минимальное значение (min()
), медиану (median()
), среднее (mean()
) и максимальное значение (max()
) для каждой числовой колонки и для каждой категории игр.
Подсмотреть код (но лучше решите сами!)
%>%
ratings_topgames left_join(details, by = "id") %>%
mutate(boardgamecategory = str_remove_all(boardgamecategory, "\\[|'|\\]")) %>%
separate_rows(boardgamecategory, sep = ", ") %>%
group_by(boardgamecategory) %>%
summarise(n = n(), across(where(is.numeric), list(min = min,
median = median,
mean = mean,
max = max)))
# A tibble: 81 × 82
boardga…¹ n num.x…² num.x…³ num.x…⁴ num.x…⁵ id_min id_me…⁶ id_mean id_max
<chr> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 "\"Child… 36 406 1806 8702. 21829 150 17191 57395. 226320
2 "Abstrac… 69 57 849 2666. 21829 3 7854 83793. 300877
3 "Action … 32 62 973 2656. 21820 150 98066 91753. 233020
4 "Adventu… 111 0 434 659. 5691 699 127398 123460. 312484
5 "Age of … 9 10 384 428. 816 9217 79828 93968. 244711
6 "America… 2 442 696 696 950 551 60028. 60028. 119506
7 "America… 2 384 396. 396. 409 79828 104412 104412 128996
8 "America… 1 409 409 409 409 128996 128996 128996 128996
9 "America… 15 11 769 758. 1575 878 143741 112098. 232405
10 "Ancient" 60 15 452. 576. 2011 12 56710. 101384. 312484
# … with 71 more rows, 72 more variables: year_min <dbl>, year_median <dbl>,
# year_mean <dbl>, year_max <dbl>, rank_min <dbl>, rank_median <dbl>,
# rank_mean <dbl>, rank_max <dbl>, average_min <dbl>, average_median <dbl>,
# average_mean <dbl>, average_max <dbl>, bayes_average_min <dbl>,
# bayes_average_median <dbl>, bayes_average_mean <dbl>,
# bayes_average_max <dbl>, users_rated_min <dbl>, users_rated_median <dbl>,
# users_rated_mean <dbl>, users_rated_max <dbl>, num.y_min <dbl>, …