1. 학습
  2. /
  3. 강의
  4. /
  5. R에서 sparklyr로 시작하는 Spark

Connected

연습 문제

More than words: tokenization (2)

tidytext 패키지를 사용하면 dplyr과 sparklyr 같은 "tidyverse" 패키지로 텍스트 데이터를 분석할 수 있어요. Sentiment analysis 자체는 이 강의 범위를 벗어나므로, 자세한 내용은 Sentiment Analysis 코스를 참고하세요. 이 연습 문제는 Spark에서 이를 간단히 맛보기로 경험해 보도록 구성했어요.

Sentiment analysis는 본질적으로 각 단어에 점수나 감정을 부여하는 방법이에요. 예를 들어, AFINN 어휘집에서 "outstanding"은 대개 긍정적인 문맥에서 쓰이므로 점수가 +5예요. "grace"는 약간 긍정적이라 +1 점수를 갖고, "fraud"는 보통 부정적 문맥에서 쓰이므로 -4 점수를 갖죠. AFINN 점수 데이터셋은 get_sentiments("afinn")로 가져올 수 있어요. 편의를 위해, unnest된 단어 데이터와 sentiment 어휘집은 이미 Spark에 복사해 두었습니다.

보통은 여러 그룹 간의 감성 점수를 비교하길 원해요. 이를 위해 자주 쓰는 코드 패턴은 다음과 같아요.

text_data %>%
  inner_join(sentiments, by = "word") %>%
  group_by(some_group) %>%
  summarize(positivity = sum(score))

inner join은 첫 번째 테이블의 값들을 기준으로 두 번째 테이블에서 일치하는 값을 찾고, 일치하면 두 번째 테이블의 데이터를 붙입니다. 일치 항목이 없으면 해당 행은 제거돼요(이는 left join과의 차이점이에요). 원리는 아래 도식에 나타나 있어요.

An inner join, explained using table of colors.

left join과 마찬가지로 inner join도 첫 번째 테이블에 열을 추가하므로 변이 조인(mutating join)의 한 종류예요. 이제 inner join에 어떤 함수를 사용하고 어떻게 쓰는지 맞혀 보세요. (힌트: left_join(), anti_join(), semi_join()과 사용법이 아주 비슷해요!)

지침

100 XP

spark_conn이라는 Spark 연결이 준비되어 있어요. 제목 단어와 Spark에 저장된 sentiment 어휘집은 각각 title_text_tbl, afinn_sentiments_tbl 티블로 미리 정의되어 있습니다.

  • title_text_tbl에서 시작해 sentimental_artists라는 변수를 만드세요.
    • inner_join()으로 "word"를 기준으로 afinn_sentiments_tbl을(를) title_text_tbl에 조인하세요.
    • artist_name으로 그룹화하세요.
    • score 필드의 합을 positivity라는 변수로 요약하세요.
  • 가장 부정적인 노래 제목을 가진 상위 5명의 아티스트를 찾으세요.
    • sentimental_artists를 positivity 오름차순으로 정렬하세요.
    • slice_max으로 상위 5개 결과를 가져오세요.
  • 가장 긍정적인 노래 제목을 가진 상위 5명의 아티스트를 찾으세요.
    • sentimental_artists를 positivity 내림차순으로 정렬하세요.
    • 상위 5개 결과를 가져오세요.