將連續變數轉換為邏輯值
邏輯變數很實用,因為用「是或否」來思考通常比用數值更直觀。舉例來說,如果有人問你「要不要來杯茶?」,「要」或「不要」會比「我想要茶的機率是 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_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(___)) +
___()