開始使用免費開始

不只文字:斷詞(2)

tidytext 套件能讓你用「tidyverse」的套件(例如 dplyrsparklyr)來分析文字資料。情感分析本課不會深入,你可以參考課程[Sentiment Analysis](https://www.datacamp.com/courses/sentiment-analysis-in-r)。這個練習會讓你快速體驗如何在 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 會從第一個資料表取出所有值,並在第二個資料表中尋找相符的記錄。若找到相符值,就把第二個表的資料加進來。與 left join 不同的是,找不到相符值的列會被丟棄。原理如下圖所示。

An inner join, explained using table of colors.

和 left join 一樣,inner join 也屬於會新增欄位的「mutating join」。試著猜猜應該用哪個函式來做 inner join,以及如何使用它。(提示:用法和 left_join()anti_join()semi_join() 非常相似!)

本練習屬於課程

使用 R 的 sparklyr:Spark 入門

檢視課程

練習說明

我們已為你建立 spark_conn 的 Spark 連線。已預先在 Spark 中定義了包含歌名文字與情感詞彙表的 tibbles,分別為 title_text_tblafinn_sentiments_tbl

  • title_text_tbl 建立名為 sentimental_artists 的變數。
    • 使用 inner_join(),以 "word" 為鍵,將 afinn_sentiments_tbltitle_text_tbl 合併。
    • artist_name 分組。
    • 彙總並定義變數 positivity,其值為 score 欄位的總和。
  • 找出歌曲標題最負面的前 5 位歌手。
    • positivity 遞增排序 sentimental_artists
    • 使用 slice_max 取得前 5 筆結果。
  • 找出歌曲標題最正面的前 5 位歌手。
    • positivity 遞減排序 sentimental_artists
    • 取得前 5 筆結果。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

# title_text_tbl, afinn_sentiments_tbl have been pre-defined
title_text_tbl
afinn_sentiments_tbl

sentimental_artists <- title_text_tbl %>%
  # Inner join with sentiments on word field
  ___ %>%
  # Group by artist
  ___ %>%
  # Summarize to get positivity
  ___

sentimental_artists %>%
  # Arrange by ascending positivity
  ___ %>%
  # Get top 5
  ___

sentimental_artists %>%
  # Arrange by descending positivity
  ___ %>%
  # Get top 5
  ___
編輯並執行程式碼