1. 学ぶ
  2. /
  3. コース
  4. /
  5. sparklyr を使った Spark 入門(R)

Connected

演習

言葉の向こう側:トークン化(2)

tidytext パッケージを使うと、dplyr や sparklyr などの「tidyverse」パッケージを活用してテキストデータを分析できます。センチメント分析(感情分析)の詳細はこのコースの範囲外ですが、Sentiment Analysis コースで詳しく学べます。この演習では、Spark 上でセンチメント分析を行う方法を簡単に体験しましょう。

センチメント分析とは、各単語にスコアや感情を割り当てる手法です。たとえば AFINN レキシコンでは、"outstanding" はほぼ常に肯定的な文脈で使われるため、スコアは +5 です。"grace" はやや肯定的な単語でスコアは +1、"fraud" は否定的な文脈で使われることが多くスコアは -4 です。AFINN スコアのデータセットは get_sentiments("afinn") で取得できます。なお、トークン化済みの単語データとセンチメントレキシコンは、あらかじめ Spark にコピーされています。

通常、複数のデータグループのセンチメントを比較したい場合は、次のようなコードパターンを使います。

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

内部結合(inner join)は、最初のテーブルのすべての値を対象に、2番目のテーブルで一致するものを探します。一致が見つかった場合、2番目のテーブルのデータが追加されます。左結合(left join)と異なり、一致しない行は除外されます。この仕組みを以下の図で確認しましょう。

An inner join, explained using table of colors.

左結合と同様、内部結合も最初のテーブルに列を追加する「変換結合」の一種です。内部結合にどの関数を使うか、また使い方を考えてみましょう。(ヒント:left_join()、anti_join()、semi_join() と非常によく似た使い方です!)

指示

100 XP

Spark への接続は spark_conn としてあらかじめ作成されています。Spark に格納されたタイトル単語データとセンチメントレキシコンに紐付けられた tibble は、それぞれ 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件を取得します。