DTM 與 tidytext 矩陣
tidyverse 是一組有共同理念、可彼此協作的 R 套件。本章會介紹一些 tidy 函式來操作資料。在這個練習中,你會把 DTM 與一個稱為 tibble 的 tidy 文字資料框做比較。
在 tidyverse 裡,每一筆觀測各佔資料框的一列。因為基本資料結構一致,所以在不同套件之間工作會更容易。本課程部分內容大量參考 tidytext 套件,該套件就是採用這種資料組織方式。
例如,你可能已熟悉來自 magrittr 套件的 %>% 運算子。它會將左側物件轉傳為右側函式的第一個引數。
在下列範例中,你把物件 data 轉傳給 function1()。注意括號是空的。接著再轉傳給 function2()。在最後一個函式中,你不需要再加入 data 物件,因為它已從 function1() 的輸出轉傳過來。不過,你會加入一個虛擬參數 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))
你也會使用 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 情感分析
練習說明
我們已經為本練習建立好乾淨的 DTM,名為 ag_dtm。
- 使用
as.matrix()套用到ag_dtm,建立ag_dtm_m。 - 使用中括號
[和],在ag_dtm_m中索引第2206列。 - 對
ag_dtm套用tidy()。把新物件命名為ag_tidy。 - 檢視
ag_tidy的列區間[831:835, ],以比較 tidy 格式。你會看到與第 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[___, ]