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

전처리



취득한 트윗에 대해
  • URL 제거
  • 나누기 (Mecab)

  • 합니다.

    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일의 밤경의 트렌드 "#키노우 무엇 먹었다"에 대해서, 이하의 결과를 얻을 수 있었습니다.


    우선, 어떤 화제인지 읽을 수 있을 것 같습니다.
    제 고찰으로는
  • 드라마다운
  • 다음주 마지막 회다운
  • 개인적으로는 yaju가 신경이 쓰인다.

  • 같은 곳입니다.

    좋은 웹페이지 즐겨찾기