1. 학습
  2. /
  3. 강의
  4. /
  5. R을 활용한 감성 분석

Connected

연습 문제

Zipf의 법칙은 어디에서 관찰할 수 있을까요?

Zipf는 단어 사용 빈도가 가파르고 예측 가능하게 감소한다는 사실을 관찰했지만, 아직 Zipf의 법칙을 완전히 받아들이기 어려우실 수도 있습니다. "나는 다양한 어휘를 사용하는 편인데?"라고 생각하실 수 있죠. 그럴 수도 있지만, 대부분의 사람들에게는 해당되지 않습니다! 이를 직접 확인하기 위해, "#sb"를 언급한 트윗 300만 건을 바탕으로 시각화를 만들어 보겠습니다. 이 시각화는 Zipf의 법칙을 완벽히 따르지는 않습니다. 트윗이 모두 동일한 해시태그를 포함하고 있어 다소 편향되어 있기 때문입니다. 그럼에도 불구하고, 여러분이 만들 시각화는 수백만 건의 트윗에서 어휘 다양성이 낮다는 점을 보여주는 급격한 감소 곡선을 나타냅니다. 자연어 분석에 어휘 사전(lexicon)을 활용하는 데는 이렇듯 과학적인 근거가 있습니다!

이 연습 문제에서는 metricsgraphics 패키지를 사용합니다. 패키지 작성자는 파이프 연산자 %>%를 사용하는 방법을 권장하지만, 여기서는 플롯의 각 구성 요소를 단계별로 학습하기 위해 순서대로 구성해 보겠습니다. metricsgraphics의 핵심 함수는 mjs_plot()으로, JavaScript 플롯을 만드는 첫 번째 단계입니다. 이 기본 플롯 위에 다른 레이어를 추가할 수 있습니다.

%>% 연산자를 사용하지 않는 metricsgraphics 워크플로우 예시는 아래와 같습니다:

metro_plot <- mjs_plot(data, x = x_axis_name, y = y_axis_name, show_rollover_text = FALSE)
metro_plot <- mjs_line(metro_plot)
metro_plot <- mjs_add_line(metro_plot, line_one_values)
metro_plot <- mjs_add_legend(metro_plot, legend = c('names', 'more_names'))
metro_plot

지침

100 XP
  • head()를 sb_words에 사용하여 상위 단어를 확인하세요.
  • 가장 큰 단어 빈도인 freq[1]을 rank 열로 나누어 새로운 열 expectations를 만드세요.
  • mjs_plot()을 사용하여 sb_plot을 시작하세요.
    • sb_words를 x = rank, y = freq와 함께 전달하세요.
    • mjs_plot() 내에서 show_rollover_text를 FALSE로 설정하세요.
  • mjs_line()을 사용하여 sb_plot을 덮어쓰고, sb_plot을 인수로 전달하세요.
  • mjs_add_line()을 사용하여 sb_plot에 선을 추가하세요.
    • 이전 sb_plot 객체와 벡터 expectations를 전달하세요.
  • mjs_add_legend()를 사용하여 새 sb_plot 객체에 범례를 추가하세요.
    • 이전 sb_plot 객체를 전달하세요.
    • 범례 레이블은 "Frequency"와 "Expectation"으로 구성하세요.
  • sb_plot을 호출하여 플롯을 표시하세요. 점 위에 마우스를 올리면 freq와 Expectation 포인트가 동시에 강조 표시됩니다. 이것이 JavaScript의 매력입니다!