Преобразование непрерывных переменных в категориальные (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(___, ___)) +
___()