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 티블, 입력 열 이름 문자열, 출력 열 이름 문자열이에요. 즉, 다음과 같은 패턴을 따릅니다.

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 과정을 참고하세요.

说明

100 XP

spark_conn으로 Spark 연결이 생성되어 있고, Spark에 저장된 트랙 메타데이터에 연결된 티블 track_metadata_tbl이 미리 정의되어 있어요.

  • track_metadata_tbl에서 hotttnesss라는 변수를 만드세요.
    • artist_hotttnesss 필드를 선택하세요.
    • ft_binarizer()를 사용해 artist_hotttnesss가 0.5보다 클 때 참이 되는 새 필드 is_hottt_or_nottt를 만드세요.
    • 결과를 수집하세요.
    • is_hottt_or_nottt 필드를 논리형으로 변환하세요.
  • is_hottt_or_nottt에 대한 ggplot() 막대 그래프를 그리세요.
    • ggplot()의 첫 번째 인자는 데이터 hotttnesss입니다.
    • ggplot()의 두 번째 인자는 미학 매핑으로, aes()로 감싼 is_hottt_or_nottt입니다.
    • 막대를 그리기 위해 geom_bar()를 추가하세요.