始める無料で始める

DTM と tidytext の行列を比べる

tidyverse は、共通の理念を持ち、連携して動作する R パッケージ群です。この章では、データ操作に使ういくつかの tidy な関数を扱います。この演習では、DTM と、tidy なテキストデータフレームである tibble を比較します。

tidyverse では、各観測値はデータフレームの1行になります。基本的なデータ構造が同じなので、異なるパッケージ間での作業がずっと簡単になります。本コースの一部は、このデータ構造を採用する tidytext パッケージに大きく依拠しています。

たとえば、magrittr パッケージの演算子 %>% にすでに慣れているかもしれません。これは、左辺のオブジェクトを右辺の関数の第1引数として渡します。

次の例では、data オブジェクトを function1() に渡しています。かっこが空なのに注目してください。さらにその出力が function2() に渡されます。最後の関数では、function1() の出力がすでに渡されているため、data オブジェクトを追加する必要はありません。ただし、仮の引数 some_parameterTRUE として指定しています。これらのパイプ処理の結果として、object が作成されます。

object <- data %>% 
           function1() %>%
           function2(some_parameter = TRUE)

%>% 演算子を使うために、必ずしも magrittr を読み込む必要はありません。dplyr にも含まれているからです。 dplyr には、後ほど学ぶ inner_join() や、集計に使う count() もあります。さらに、新しい変数を作成したり既存の変数を変更するための mutate() も使います。

object <- data %>%
  mutate(new_Var_name = Var1 - Var2)

変数を変更する場合は次のようにします。

object <- data %>%
  mutate(Var1 = as.factor(Var1))

また、各行が本の1行に対応し、ポジティブ値とネガティブ値を列にするようデータを整形するために、tidyrpivot_wider() も使用します。

index negative positive
42 2 0
43 0 1
44 1 0

DTM を tidy 形式に変換するには、broom パッケージの tidy() を使います。

tidy_format <- tidy(Document_Term_Matrix)

この演習では、ギリシャ悲劇『Agamemnon』のテキストを使用します。『Agamemnon』は、婚姻の不貞と殺人を描いた物語です。コピーはこちらからダウンロードできます。

この演習はコースの一部です

Rで学ぶSentiment Analysis

コースを見る

演習の手順

この演習用に、クリーンな DTM ag_dtm をすでに用意しています。

  • ag_dtmas.matrix() を適用して、ag_dtm_m を作成します。
  • 角かっこ [] を使って、ag_dtm_m の行 2206 を抽出します。
  • tidy()ag_dtm に適用し、新しいオブジェクトを ag_tidy と名付けます。
  • tidy 形式を比較するために、ag_tidy の行 [831:835, ] を確認します。ステップ2で確認した ag_dtm_m の該当部分に出てきた単語が見つかります。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# As matrix
ag_dtm_m <- ___

# Examine line 2206 and columns 245:250
ag_dtm_m[___, 245:250]

# Tidy up the DTM
ag_tidy <- ___

# Examine tidy with a word you saw
ag_tidy[___, ]
コードを編集して実行