開始使用免費開始

在哪裡可以觀察到齊普夫定律(Zipf's law)?

雖然齊普夫觀察到單字使用頻率會急遽且可預期地下滑,但你可能對齊普夫定律仍半信半疑。你也許會想:「我認識很多字,詞彙很有個人風格。」確實可能如此,但多數人就不一定了!為了證明這點,讓我們用 300 萬則提到「#sb」的推文做一個視覺化。請記得,這個圖並不會完美符合齊普夫定律,因為所有推文都提到同一個主題標籤,結果會有些偏斜。即便如此,你將產生的圖仍呈現明顯的遞減趨勢,顯示在數百萬則推文中,詞彙多樣性其實很小。這也說明在自然語言分析中使用詞彙表是有其科學根據的!

在這個練習中,你會使用套件 metricsgraphics。雖然作者建議使用管線運算子 %>%,但你會一步一步建立圖表,以了解此圖的各個面向。套件 metricsgraphics 的核心函式是 mjs_plot(),它是建立 JavaScript 圖表的第一步。有了它之後,你就能在圖上疊加其他圖層。

以下是不使用管線運算子 %>%metricsgraphics 範例流程:

metro_plot <- mjs_plot(data, x = x_axis_name, y = y_axis_name, show_rollover_text = FALSE)
metro_plot <- mjs_line(metro_plot)
metro_plot <- mjs_add_line(metro_plot, line_one_values)
metro_plot <- mjs_add_legend(metro_plot, legend = c('names', 'more_names'))
metro_plot

本練習屬於課程

R 情感分析

檢視課程

練習說明

  • sb_words 使用 head() 檢視前幾個單字。
  • 建立新欄位 expectations,用最大單字頻率 freq[1] 除以 rank 欄位。
  • 使用 mjs_plot() 啟動 sb_plot
    • 傳入 sb_words,並設定 x = ranky = freq
    • mjs_plot() 中將 show_rollover_text 設為 FALSE
  • 使用 mjs_line() 覆寫 sb_plot,並傳入 sb_plot
  • 使用 mjs_add_line()sb_plot 加上新圖層。
    • 傳入上一個 sb_plot 物件與向量 expectations
  • 使用 mjs_add_legend() 在新的 sb_plot 物件上放入圖例。
    • 傳入上一個 sb_plot 物件。
    • 圖例標籤應包含 "Frequency""Expectation"
  • 呼叫 sb_plot 顯示圖表。將滑鼠移到某個點上,即可同時高亮對應的 freqExpectation 點。這就是 JavaScript 的魔力!

動手互動練習

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

# Examine sb_words
___

# Create expectations
sb_words$expectations <- sb_words %$% 
  {___[___] / ___}

# Create metrics plot
sb_plot <- ___(___, x = ___, y = ___, ___ = ___)

# Add 1st line
sb_plot <- ___(___)

# Add 2nd line
sb_plot <- ___(___, ___)

# Add legend
sb_plot <- ___(___, legend = c("___", "___"))

# Display plot
sb_plot
編輯並執行程式碼