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
참고
htps : // 코 m / 스미 스네 t /
트렌드 획득
그런 다음 추세를 얻습니다.
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
전처리
취득한 트윗에 대해
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
참고
htps : // 코 m / 스미 스네 t /
트렌드 획득
그런 다음 추세를 얻습니다.
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
전처리
취득한 트윗에 대해
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
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 제거
Ruby의 uri 패키지를 이용합니다.
require 'uri'
URI.extract(text).uniq.each {|url| text.gsub!(url, '')}
참고
htp // thr3 아. 하테나 bぉg. 코m/엔트리/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에서 배열의 중복 요소를 계산하는 방법
htps : // 기주 b. 코 m / z ゔ ㄴ k / 참치 c_c ぉ d
고찰
2019년 6월 22일의 밤경의 트렌드 "#키노우 무엇 먹었다"에 대해서, 이하의 결과를 얻을 수 있었습니다.
우선, 어떤 화제인지 읽을 수 있을 것 같습니다.
제 고찰으로는
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")
2019년 6월 22일의 밤경의 트렌드 "#키노우 무엇 먹었다"에 대해서, 이하의 결과를 얻을 수 있었습니다.
우선, 어떤 화제인지 읽을 수 있을 것 같습니다.
제 고찰으로는
같은 곳입니다.
Reference
이 문제에 관하여(Ruby에서 워드 클라우드를 이용한 Twitter 트렌드 시각화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ObaTakeshi/items/b51cd59f5785b062ca58텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)