1. Learn
  2. /
  3. คอร์ส
  4. /
  5. R 中使用 sparklyr 的 Spark 入门

Connected

แบบฝึกหัด

将连续变量转换为逻辑型

逻辑变量很有用,因为相较于数值,很多时候用"是或否"的方式来思考问题更直观。例如,如果有人问您"您想来一杯茶吗?",用"是"或"否"来回答比"我有 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。

คำแนะนำ

100 XP

我们已为您创建了名为 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() 绘制条形。