DTM と tidytext の行列を比べる
tidyverse は、共通の理念を持ち、連携して動作する R パッケージ群です。この章では、データ操作に使ういくつかの tidy な関数を扱います。この演習では、DTM と、tidy なテキストデータフレームである tibble を比較します。
tidyverse では、各観測値はデータフレームの1行になります。基本的なデータ構造が同じなので、異なるパッケージ間での作業がずっと簡単になります。本コースの一部は、このデータ構造を採用する tidytext パッケージに大きく依拠しています。
たとえば、magrittr パッケージの演算子 %>% にすでに慣れているかもしれません。これは、左辺のオブジェクトを右辺の関数の第1引数として渡します。
次の例では、data オブジェクトを function1() に渡しています。かっこが空なのに注目してください。さらにその出力が function2() に渡されます。最後の関数では、function1() の出力がすでに渡されているため、data オブジェクトを追加する必要はありません。ただし、仮の引数 some_parameter を TRUE として指定しています。これらのパイプ処理の結果として、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行に対応し、ポジティブ値とネガティブ値を列にするようデータを整形するために、tidyr の pivot_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_dtmにas.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[___, ]