始める無料で始める

Zipfの法則はどこで観察できますか?

Zipf は単語使用頻度が急激かつ予測可能に減少すると観察しましたが、まだ Zipf の法則に納得できないかもしれません。「自分はたくさんの単語を知っていて、独自の語彙がある」と思うかもしれません。そうかもしれませんが、多くの人には当てはまりません。そこで証明として、「#sb」に言及した 300 万件のツイートから可視化を作ってみましょう。この可視化は Zipf の法則に完全には一致しません。同じハッシュタグが必ず含まれているため、やや偏りがあります。それでも、作成する可視化は急減を示し、数百万件のツイートにおける語彙の多様性が小さいことがわかります。つまり、自然言語の分析にレキシコンを使うことには、ちゃんとした根拠があるのです。

この演習では、パッケージ metricsgraphics を使います。著者はパイプ演算子 %>% の使用を推奨していますが、ここではプロットの各要素を学ぶために、段階的にグラフィックを構築します。パッケージ metricsgraphics の主な関数は、JavaScript プロット作成の第一歩となる mjs_plot() です。これを作成したら、プロットの上に他のレイヤーを重ねられます。

%>% を使わない 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で学ぶSentiment Analysis

コースを見る

演習の手順

  • sb_words に対して head() を使い、上位の単語を確認します。
  • 最大の単語頻度 freq[1]rank 列で割って、新しい列 expectations を作成します。
  • mjs_plot() を使って sb_plot を開始します。
    • sb_words を渡し、x = ranky = freq とします。
    • mjs_plot() の中で show_rollover_textFALSE に設定します。
  • 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
コードを編集して実行