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

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

Обобщение предыдущей идеи — использование нескольких пороговых значений: непрерывная переменная разбивается на «корзины» (или «интервалы»), как это происходит при построении гистограммы. В базовом R для этого используется cut(). Например, в исследовании привычек курения можно взять среднее количество выкуриваемых в день сигарет и преобразовать его в фактор.

smoking_status <- cut(
  cigarettes_per_day,
  breaks = c(0, 1, 10, 20, Inf),
  labels = c("non", "light", "moderate", "heavy"),
  right  = FALSE
)

Аналог этой функции в sparklyrft_bucketizer(). Синтаксис похож на ft_binarizer(), однако здесь необходимо передать вектор точек разбиения в аргумент splits. Вот тот же пример, переписанный в стиле sparklyr.

smoking_data %>%
  ft_bucketizer("cigarettes_per_day", "smoking_status", splits = c(0, 1, 10, 20, Inf))

Обратите внимание на несколько важных моментов. Аргумент breaks в cut() соответствует аргументу splits в ft_bucketizer(). Однако есть небольшое различие в обработке граничных значений. В cut() по умолчанию в каждую корзину включается правая (верхняя) граница, но не левая. ft_bucketizer(), напротив, включает левую (нижнюю) границу, но не правую. Таким образом, поведение эквивалентно вызову cut() с аргументом right = FALSE.

Исключение составляет самая верхняя корзина: ft_bucketizer() включает в неё значения на обеих границах. Это соответствует использованию include.lowest = TRUE в функции cut().

Наконец, важно помнить: если cut() возвращает фактор, то ft_bucketizer() возвращает числовой (numeric) вектор — значения первой корзины равны нулю, второй — единице, третьей — двум и так далее. Если вы хотите работать с результатами в R, необходимо явно преобразовать их в фактор. Для этого используется следующий типичный шаблон кода:

a_tibble %>%
  ft_bucketizer("x", "x_buckets", splits = splits) %>%
  collect() %>%
  mutate(x_buckets = factor(x_buckets, labels = labels))

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

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

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

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

Для вас уже создано подключение к Spark — spark_conn. Tibble, связанный с метаданными треков, хранящимися в Spark, предварительно определён как track_metadata_tbl. decades — числовая последовательность 1920, 1930, …, 2020, а decade_labels — текстовые описания этих десятилетий.

  • Создайте переменную hotttnesss_over_time на основе track_metadata_tbl.
    • Выберите поля artist_hotttnesss и year.
    • Преобразуйте столбец year в тип numeric.
    • С помощью ft_bucketizer() создайте новое поле decade, разбивающее годы по интервалам из decades.
    • Соберите результат.
    • Преобразуйте поле decade в фактор с метками decade_labels.
  • Постройте диаграмму ggplot() типа «ящик с усами» для artist_hotttnesss по decade.
    • Первый аргумент ggplot() — данные, hotttnesss_over_time.
    • Второй аргумент ggplot() — эстетика: передайте decade и artist_hotttnesss, обёрнутые в aes().
    • Добавьте geom_boxplot() для отрисовки диаграммы.

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

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

# track_metadata_tbl, decades, decade_labels have been pre-defined
track_metadata_tbl
decades
decade_labels

hotttnesss_over_time <- track_metadata_tbl %>%
  # Select artist_hotttnesss and year
  ___ %>%
  # Convert year to numeric
  ___ %>%
  # Bucketize year to decade using decades vector
  ___ %>%
  # Collect the result
  ___ %>%
  # Convert decade to factor using decade_labels
  ___

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