開始使用免費開始

將連續變數轉換為邏輯值

邏輯變數很實用,因為用「是或否」來思考通常比用數值更直觀。舉例來說,如果有人問你「要不要來杯茶?」,「要」或「不要」會比「我想要茶的機率是 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()。前面的糖尿病範例可以改寫如下。請注意,threshold 的值應該是數字,而不是資料集裡某個欄位的字串名稱。

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](https://www.datacamp.com/courses/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 時為 true。
    • 收集結果。
    • is_hottt_or_nottt 欄位轉換為邏輯值。
  • 繪製 is_hottt_or_notttggplot() 長條圖。
    • 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(___)) +
  ___()
編輯並執行程式碼