将连续变量转换为分类变量(2)
上一节转换的一个特殊情况是:将连续变量按其分位数切分为多个桶。此转换常用于分析问卷或评分数据。若让受访者给出 1–5 星的评分,中位数往往并不是 3 星。这种情况下,按分位数拆分评分会更有用。例如,您可以在第 0、20、40、60、80、100 百分位处分割,形成 5 个五分位组。
base R 的做法是将 cut() 与 quantile() 结合使用。sparklyr 中对应的转换是 ft_quantile_discretizer()。它接收参数 num_buckets,用于指定桶的数量。下面并列展示了 base 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() 一样,得到的分箱是从 0 开始计数的数字。如果您希望在 R 中使用它们,请显式转换为 factor。
本练习是课程的一部分
R 中使用 sparklyr 的 Spark 入门
练习说明
已为您创建名为 spark_conn 的 Spark 连接。存储在 Spark 中的曲目信息已作为 tibble 预定义为 track_metadata_tbl。duration_labels 是描述时长的字符向量。
- 基于
track_metadata_tbl创建名为familiarity_by_duration的变量。- 选择字段
duration和artist_familiarity。 - 使用
ft_quantile_discretizer()基于duration的 5 个分位数分箱,创建新字段duration_bin。 - 收集结果。
- 将
duration_bin转换为因子,并使用标签duration_labels。
- 选择字段
- 绘制按
duration_bin分组的artist_familiarity的ggplot()箱线图。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(___, ___)) +
___()