R rtweetでツイートを取得 (twitter スクレイピング)


概要

Rを使用してツイートを取得し、ツイート内にある特定の単語の出現回数をカウントしました。

今回行ったこと

「#グルメ」が入っているツイートを取得し、"ラーメン", "パン", "うどん" のどれが出現回数が多いかを調べました(表記ゆれ対応はなし)

準備

まずは、Twitter Application Management (https://apps.twitter.com/) にログインし、
使用するappを選択。
「Keys and Access Tokens」のタブから
・Consumer Key (API Key)
・Consumer Secret (API Secret)
があるか確認してください。
こちらを使って、ツイートを取得していきます。

ツイートの取得


# ライブラリの読み込み
library(rtweet)
library(devtools)

# tokenの設定
twitter_token <- create_token(app = "XXXX", # 自分で設定したappの名前
                              consumer_key = "YYYY", #Consumer Keyを入力
                              consumer_secret = "ZZZZ") #Consumer Secretを入力


# search_tweets("検索したいワード", n=取得したい件数, include_rts=リツイートを取得するかどうか)
rt <- search_tweets("#グルメ", n = 1000, include_rts = FALSE)

# ツイート部分の抽出
target_text <- rt$text

ツイート内の特定の単語の出現回数を集計

"ラーメン", "パン", "うどん"の出現回数を集計する


library(foreach)
library(dplyr)
library(RMeCab)

# 特定の単語の抽出
tweet <- foreach(i=1:nrow(rt), .combine="rbind")%do%{
  target_text <- rt$text[i] #i番目のツイート内容を抽出
  word <- unlist(RMeCabC(target_text)) #単語ごとに分解
  target_word <- word[names(word)=="名詞"] %>% #名詞のみ抽出
    as.data.frame() 
  colnames(target_word) <- "word"
  target_word <- target_word %>%  
    filter(word %in% c("ラーメン", "パン", "うどん")) %>% #特定の単語のみ抽出
    mutate(id=i) #ツイート番号を付与
  return(target_word)
}

# 1ツイート中のある1単語の発言の上限を1回に揃えて集計
tweet %>% 
  unique() %>% 
  group_by(word) %>% 
  summarise(cnt = n()) %>% 
  arrange(desc(cnt))

結果

ラーメンが多かったです。
ラーメン美味しいよね

# A tibble: 3 x 2
  word       cnt
  <fct>    <int>
1 ラーメン    41
2 パン        11
3 うどん       6

その他

rtweetライブラリでは、ユーザ情報やお気に入りの情報など取得できます


# ユーザ情報(ユーザid,自己紹介文など)の取得
users <- users_data(rt)

# usersの6番目の人のfavoを取得してみる
get_favorites(users$user_id[6], n = 30, since_id = NULL, max_id = NULL,
               parse = TRUE, token = NULL)