1. 学ぶ
  2. /
  3. コース
  4. /
  5. Rで学ぶSentiment Analysis

Connected

演習

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

指示

100 XP
  • 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 のマジックですね!