Rubyでワードクラウドを用いたTwitterトレンドの可視化
はじめに
Twitterのトレンド一覧では、単語しか出てこず、一体何に関する話題なのか分からない。
ということで、トレンドからツイートを取得してワードクラウドを作成することで、一目でどんな話題で盛り上がっているのか可視化しようと思います。
せっかちな方のために、先に結果を載せときます。
トレンド"#きのう何食べた" に対する実行結果
使用技術
Ruby: 2.4.1
Mecab: 0.996
Twitterからデータを取得
アクセストークンの設定
まず、Twitterにアクセスするためのトークンなどを設定します。
require 'twitter'
client = Twitter::REST::Client.new do |config|
config.consumer_key = "Consumer Key (API Key)"
config.consumer_secret = "Consumer Secret (API Secret)"
config.access_token = "Access Token"
config.access_token_secret = "Access Token Secret"
end
参考
https://qiita.com/shimisunet/items/c3a0b93fb13fa82ed8be
トレンドの取得
次にトレンドを取得します。
client.trends_place(23424856).take(3).each do |trend| # 23424856:日本のtrend
p trend.name
end
ツイートの取得
トレンドのツイートを取得します。
client.search(word, exclude: "retweets").take(count).each do |tweet|
p tweet.text
end
前処理
取得したツイートに対し、
- URLの除去
- 分かち書き (Mecab)
を行います。
URLの除去
Rubyのuriパッケージを利用します。
require 'uri'
URI.extract(text).uniq.each {|url| text.gsub!(url, '')}
参考
http://thr3a.hatenablog.com/entry/20180315/1521079183
分かち書き
Mecabを利用して分かち書きをします。
副詞など、どのツイートにも出てきそうな単語は除去します。
require 'mecab'
tagger = MeCab::Tagger.new
wakati = tagger.parse(text)
wakati.delete!("EOS") # 分かち書きの結果に"EOS"が出てくるため除去
wakati = wakati.split("\n") # 単語ごとに分割
words = []
wakati.each do |w|
word = w.split("\t") # タブ文字前に単語、後に単語の情報があるため分割
if word[1].include?("形容詞") || word[1].include?("名詞")
unless word[0] == "#" # "#"は名詞に分類されるため除去
words.push word[0]
end
end
end
ワードクラウド作成
解析に入ります。
分かち書きの結果、トレンド内のツイートに出てくる単語を格納した配列を作成します。
それを元にワードクラウドを作成します。
magic_cloudの裏側ではImage Magickが動作しており、:font_familyに'Arial Unicode'を指定することで日本語に対応できます。(重要)
require 'magic_cloud'
font = 'Arial Unicode'
words = words.group_by(&:itself).map{ |key, value| [key, value.count] }.to_h
cloud = MagicCloud::Cloud.new(words, rotate: :none, scale: :linear, :font_family=>font)
cloud.draw(500, 250).write("#{word}.png")
参考
Rubyで配列内の重複する要素を数える方法
https://github.com/zverok/magic_cloud
考察
2019年6月22日の夜ごろのトレンド"#きのう何食べた"に対して、以下の結果が得られました。
とりあえず、どんな話題なのか読み取れそうです。
私の考察としては、
- ドラマらしい
- 来週最終回らしい
個人的にはyajuが気になる。
といったところです。
Author And Source
この問題について(Rubyでワードクラウドを用いたTwitterトレンドの可視化), 我々は、より多くの情報をここで見つけました https://qiita.com/ObaTakeshi/items/b51cd59f5785b062ca58著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .