将连续变量转换为逻辑型
逻辑变量很有用,因为相较于数值,很多时候用"是或否"的方式来思考问题更直观。例如,如果有人问您"您想来一杯茶吗?",用"是"或"否"来回答比"我有 0.73 的概率想要一杯茶"更合适。在数据科学中也是如此。例如,糖尿病检测可能返回患者血浆中的葡萄糖浓度这一数值。但您真正关心的是"患者是否患有糖尿病?"。因此,您需要基于某个阈值将该数值转换为逻辑值。
在 base R 中,这件事相当简单,可以像这样实现:
threshold_mmol_per_l <- 7
has_diabetes <- plasma_glucose_concentration > threshold_mmol_per_l
所有 sparklyr 的特征变换函数都有类似的接口。前三个参数始终是一个 Spark tibble、一个输入列名字符串和一个输出列名字符串。也就是说,它们遵循如下模式。
a_tibble %>%
ft_some_transformation("x", "y", some_other_args)
将连续变量转换为逻辑型的 sparklyr 方法是使用 ft_binarizer()。前面的糖尿病示例可以改写如下。请注意,阈值应为数值,而不是数据集中某个列名的字符串。
diabetes_data %>%
ft_binarizer("plasma_glucose_concentration", "has_diabetes", threshold = threshold_mmol_per_l)
遵循 Spark 到处使用 DoubleType 的理念,ft_binarizer() 的输出其实并非逻辑型,而是 numeric。这有利于您继续在 Spark 中进行其他变换;但如果要在 R 中处理数据,就需要记得显式地转换为逻辑型。下面是常见的代码模式。
a_tibble %>%
ft_binarizer("x", "is_x_big", threshold = threshold) %>%
collect() %>%
mutate(is_x_big = as.logical(is_x_big))
本练习将使用名字相当"奇特"的 artist_hotttnesss 字段,它衡量的是在数据集创建时艺术家的媒体热度。如果您想进一步学习如何使用 ggplot2 包作图,欢迎学习课程Introduction to Data Visualization with ggplot2。
本练习是课程的一部分
R 中使用 sparklyr 的 Spark 入门
练习说明
我们已为您创建了名为 spark_conn 的 Spark 连接。基于存储在 Spark 中的曲目信息,已预先定义了一个 tibble:track_metadata_tbl。
- 从
track_metadata_tbl创建变量hotttnesss。- 选择
artist_hotttnesss字段。 - 使用
ft_binarizer()创建新字段is_hottt_or_nottt,当artist_hotttnesss大于 0.5 时其值为真。 - 收集结果。
- 将
is_hottt_or_nottt字段转换为逻辑型。
- 选择
- 绘制
is_hottt_or_nottt的ggplot()条形图。ggplot()的第一个参数是数据,即hotttnesss。ggplot()的第二个参数是映射,将is_hottt_or_nottt放入aes()中。- 添加
geom_bar()绘制条形。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# track_metadata_tbl has been pre-defined
track_metadata_tbl
hotttnesss <- track_metadata_tbl %>%
# Select artist_hotttnesss
___ %>%
# Binarize to is_hottt_or_nottt
___ %>%
# Collect the result
___ %>%
# Convert is_hottt_or_nottt to logical
___
# Draw a barplot of is_hottt_or_nottt
ggplot(___, aes(___)) +
___()