在哪些地方可以观察到 Zipf 定律?
虽然 Zipf 发现了词频会急剧且可预测地下滑,您可能并不完全认可 Zipf 定律。您也许会想:"我认识的词可多了,词汇也很有个性。"这当然可能,但对大多数人并不适用!为此,我们用 300 万条提到 "#sb" 的推文来做一个可视化。请注意,这个可视化并不完美符合 Zipf 定律,因为所有推文都包含同一标签,结果会有偏。即便如此,您将要制作的图仍然呈现出快速下降的走势,说明在数百万条推文中,词汇多样性很小。这也从侧面说明,在自然语言分析中使用词典是有科学依据的!
在本练习中,您将使用包 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