开始使用免费开始使用

在哪些地方可以观察到 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 = 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 显示图形。将鼠标悬停在点上,您会同时高亮一个 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
编辑并运行代码