Группировка: незаменима в музыке и в данных
Одна из распространённых задач анализа данных — вычисление сводной статистики для каждой группы. Например, может понадобиться узнать выручку по месяцам или регионам. В R процесс разбиения данных на группы, применения агрегирующей функции к каждой группе и объединения результатов в единую структуру называется «split-apply-combine» («разделить — применить — объединить»). Сама концепция гораздо старше: в SQL оператор GROUP BY существует уже несколько десятилетий. Схожая идея лежит в основе подхода «map-reduce»: шаг «map» примерно соответствует этапам «разделить» и «применить», а шаг «reduce» — этапу «объединить». В dplyr/sparklyr для этого используется group_by() перед вызовом mutate() или summarize(). Функция принимает имена столбцов для группировки без кавычек. Например, чтобы вычислить среднее значение столбца x для каждой комбинации значений в столбцах grp1 и grp2, нужно написать следующее.
a_tibble %>%
group_by(grp1, grp2) %>%
summarize(mean_x = mean(x))
Обратите внимание: столбцы, передаваемые в group_by(), как правило, должны быть категориальными переменными. Например, если нужно вычислить средний вес людей в зависимости от роста, группировать по росту не имеет смысла — у каждого человека он уникален. Однако можно воспользоваться функцией cut(), чтобы разбить значения роста на категории и вычислить средний вес для каждой из них.
Это упражнение является частью курса
Введение в Spark с sparklyr на R
Инструкции к упражнению
Подключение к Spark уже создано и доступно как spark_conn. Тиббл, связанный с метаданными треков в Spark, предопределён как track_metadata_tbl.
- Сгруппируйте содержимое
track_metadataпоartist_name, затем:- Вычислите среднее значение
durationпо группам и сохраните его как новый столбецmean_duration. - Сохраните результат в переменную
duration_by_artist.
- Вычислите среднее значение
- Найдите исполнителей с самыми короткими песнями, отсортировав строки по
mean_durationв порядке возрастания. - Аналогично найдите исполнителей с самыми длинными песнями, отсортировав строки по
mean_durationв порядке убывания.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# track_metadata_tbl has been pre-defined
track_metadata_tbl
duration_by_artist <- track_metadata_tbl %>%
# Group by artist
___ %>%
# Calc mean duration
___
duration_by_artist %>%
# Sort by ascending mean duration
___
duration_by_artist %>%
# Sort by descending mean duration
___