Преобразование непрерывных переменных в категориальные (1)
Обобщение предыдущей идеи — использование нескольких пороговых значений: непрерывная переменная разбивается на «корзины» (или «интервалы»), как это происходит при построении гистограммы. В базовом R для этого используется cut(). Например, в исследовании привычек курения можно взять среднее количество выкуриваемых в день сигарет и преобразовать его в фактор.
smoking_status <- cut(
cigarettes_per_day,
breaks = c(0, 1, 10, 20, Inf),
labels = c("non", "light", "moderate", "heavy"),
right = FALSE
)
Аналог этой функции в sparklyr — ft_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(___, ___)) +
___()