НачатьНачать бесплатно

Группировка: незаменима в музыке и в данных

Одна из распространённых задач анализа данных — вычисление сводной статистики для каждой группы. Например, может понадобиться узнать выручку по месяцам или регионам. В 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
  ___
Редактировать и запускать код