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

Преобразование непрерывных переменных в категориальные (2)

Частный случай предыдущего преобразования — разбивка непрерывной переменной на бакеты, границы которых определяются квантилями этой переменной. Такое преобразование часто применяется при анализе ответов на опросы или оценочных шкал. Если попросить людей оценить что-либо по шкале от одной до пяти звёзд, медиана ответов не всегда окажется равной трём звёздам. В таких случаях удобно разбить оценки по квантилям. Например, можно выделить пять квинтильных групп, разделив данные по 0-му, 20-му, 40-му, 60-му, 80-му и 100-му перцентилям.

В базовом R для этого используется комбинация cut() и quantile(). В sparklyr аналогичную задачу решает преобразование ft_quantile_discretizer(). Оно принимает аргумент num_buckets, задающий количество бакетов. Ниже приведены оба варианта — на базовом R и на sparklyr. Как и прежде, установлены параметры right = FALSE и include.lowest.

survey_response_group <- cut(
  survey_score,
  breaks = quantile(survey_score, c(0, 0.25, 0.5, 0.75, 1)),
  labels = c("hate it", "dislike it", "like it", "love it"),
  right  = FALSE,
  include.lowest = TRUE
)
survey_data %>%
  ft_quantile_discretizer("survey_score", "survey_response_group", num_buckets = 4)

Как и в случае с ft_bucketizer(), полученные бакеты нумеруются с нуля. Если вы хотите работать с ними в R, явно преобразуйте их в тип factor.

Это упражнение является частью курса

Введение в Spark с sparklyr на R

Посмотреть курс

Инструкции к упражнению

Подключение к Spark уже создано и доступно как spark_conn. Тиббл, связанный с метаданными треков в Spark, предварительно определён как track_metadata_tbl. duration_labels — символьный вектор с описаниями временны́х промежутков.

  • Создайте переменную familiarity_by_duration на основе track_metadata_tbl.
    • Выберите поля duration и artist_familiarity.
    • Используйте ft_quantile_discretizer(), чтобы создать новое поле duration_bin из 5 квантильных бакетов переменной duration.
    • Соберите результат с помощью collect().
    • Преобразуйте поле duration_bin в фактор с метками duration_labels.
  • Постройте ящичковую диаграмму (ggplot()) зависимости artist_familiarity от duration_bin.
    • Первый аргумент ggplot() — данные: familiarity_by_duration.
    • Второй аргумент ggplot() — эстетика: передайте duration_bin и artist_familiarity внутри aes().
    • Добавьте geom_boxplot() для отрисовки диаграммы.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

# track_metadata_tbl, duration_labels have been pre-defined
track_metadata_tbl
duration_labels

familiarity_by_duration <- track_metadata_tbl %>%
  # Select duration and artist_familiarity
  ___ %>%
  # Bucketize duration
  ___ %>%
  # Collect the result
  ___ %>%
  # Convert duration bin to factor
  ___

# Draw a boxplot of artist_familiarity by duration_bin
ggplot(___, aes(___, ___)) +
  ___()  
Редактировать и запускать код