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 = 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