Chuyển đổi biến liên tục thành biến logical
Biến logical rất hữu ích vì thường dễ suy nghĩ theo kiểu "có hoặc không" hơn là theo số. Ví dụ, nếu ai đó hỏi bạn "Bạn có muốn một tách trà không?", câu trả lời có hoặc không sẽ hợp lý hơn là "Có 0,73 khả năng tôi muốn một tách trà". Điều này cũng có ứng dụng thực tế trong khoa học dữ liệu. Chẳng hạn, một xét nghiệm tiểu đường có thể trả về nồng độ glucose trong huyết tương của bệnh nhân dưới dạng một con số. Điều bạn thực sự quan tâm là "Bệnh nhân có bị tiểu đường không?", vì vậy bạn cần chuyển con số đó thành giá trị logical dựa trên một ngưỡng nhất định.
Trong base R, việc này khá đơn giản, như sau:
threshold_mmol_per_l <- 7
has_diabetes <- plasma_glucose_concentration > threshold_mmol_per_l
Tất cả các hàm biến đổi đặc trưng của sparklyr có giao diện người dùng tương tự nhau. Ba đối số đầu tiên luôn là một Spark tibble, một chuỗi ký tự đặt tên cột đầu vào và một chuỗi ký tự đặt tên cột đầu ra. Tức là chúng theo mẫu sau.
a_tibble %>%
ft_some_transformation("x", "y", some_other_args)
Cách của sparklyr để chuyển một biến liên tục thành logical là dùng ft_binarizer(). Ví dụ về tiểu đường phía trên có thể viết lại như sau. Lưu ý rằng giá trị ngưỡng phải là một số, không phải một chuỗi tham chiếu đến cột trong tập dữ liệu.
diabetes_data %>%
ft_binarizer("plasma_glucose_concentration", "has_diabetes", threshold = threshold_mmol_per_l)
Theo triết lý của Spark là dùng DoubleType ở mọi nơi, đầu ra từ ft_binarizer() thực ra không phải logical; nó là numeric. Đây là cách đúng để bạn tiếp tục làm việc trong Spark và thực hiện các biến đổi khác, nhưng nếu bạn muốn xử lý dữ liệu trong R, bạn cần nhớ chuyển kiểu về logical một cách tường minh. Mẫu mã sau đây rất thường gặp.
a_tibble %>%
ft_binarizer("x", "is_x_big", threshold = threshold) %>%
collect() %>%
mutate(is_x_big = as.logical(is_x_big))
Bài tập này sử dụng trường có tên khá… kỳ là artist_hotttnesss, cung cấp thước đo mức độ nghệ sĩ được truyền thông quan tâm tại thời điểm tạo bộ dữ liệu. Nếu bạn muốn tìm hiểu thêm về vẽ biểu đồ với gói ggplot2, hãy học khóa Introduction to Data Visualization with ggplot2.
Bài tập này là một phần của khóa học
Nhập môn Spark với sparklyr trong R
Hướng dẫn bài tập
Kết nối Spark đã được tạo sẵn cho bạn là spark_conn. Một tibble gắn với siêu dữ liệu bản nhạc được lưu trong Spark đã được định nghĩa trước là track_metadata_tbl.
- Tạo một biến tên
hotttnessstừtrack_metadata_tbl.- Chọn trường
artist_hotttnesss. - Dùng
ft_binarizer()để tạo trường mớiis_hottt_or_nottt, nhận giá trị true khiartist_hotttnessslớn hơn 0,5. - Thu thập kết quả bằng
collect(). - Chuyển trường
is_hottt_or_notttsang kiểu logical.
- Chọn trường
- Vẽ biểu đồ cột
ggplot()củais_hottt_or_nottt.- Đối số đầu tiên của
ggplot()là đối số dữ liệu,hotttnesss. - Đối số thứ hai của
ggplot()là thẩm mỹ,is_hottt_or_notttđược bọc trongaes(). - Thêm
geom_bar()để vẽ các thanh.
- Đối số đầu tiên của
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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(___)) +
___()