在哪裡可以觀察到齊普夫定律(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 = rank、y = 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顯示圖表。將滑鼠移到某個點上,即可同時高亮對應的freq與Expectation點。這就是 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