Rで解析:Twitterの関係性を図式化「graphTweets」パッケージ


「twitteR」パッケージと連携してツイートの@タグからアカウントの関係性をデータ化してくれるパッケージの紹介です。取得したデータを元にインタラクティブなネットワーク図を作成するコマンドを合わせて紹介します。

実行コマンドで利用しているパッケージは以下の通りです。

各パッケージの操作例は各記事を確認してください。また、インタラクティブなネットワーク図の出力にはRStudioが便利です。RStudioの導入は「visNetwork」パッケージの紹介記事を確認してください。

・RでTwitter操作:「twitterR」パッケージ!バージョン1.1.9の紹介
 https://www.karada-good.net/analyticsr/r-170/

・Rで解析:カラーパレット作成や連続・離散スケールの操作が簡単「scales」パッケージの紹介
 https://www.karada-good.net/analyticsr/r-109/

・Rで解析:インタラクティブな編集!ネットワーク図をぐりぐり動かせ!「visNetwork」パッケージの紹介
 https://www.karada-good.net/analyticsr/r-144/

実行コマンドでは映画「ガラスの花と壊す世界」をキーワードに検索した結果を紹介します。好みが分かれるようですが解析に関わっている方にオススメな作品です。

視聴には高画質なブルーレイがオススメですが、itunesでも2016/2/25より配信されています。休日に癒されてはいかがでしょうか。

パッケージバージョンは0.2。実行コマンドはwindows 7およびOS X 10.11.2のR version 3.2.3で確認しています。


パッケージのインストール

下記、コマンドを実行してください。

#パッケージのインストール
install.packages("graphTweets")
install.packages("twitteR")
install.packages("scales")
install.packages("visNetwork")

実行コマンド

詳細はコメント、パッケージのヘルプを確認してください。

#パッケージの読み込み
library("graphTweets")
#RでTwitter操作:「twitterR」パッケージ!バージョン1.1.9の紹介
#https://www.karada-good.net/analyticsr/r-170/
library("twitteR")
#Rで解析:カラーパレット作成や連続・離散スケールの操作が簡単「scales」パッケージの紹介
#https://www.karada-good.net/analyticsr/r-109/
library("scales")
#Rで解析:インタラクティブな編集!ネットワーク図をぐりぐり動かせ!「visNetwork」パッケージの紹介
#https://www.karada-good.net/analyticsr/r-144/
library("visNetwork")

###Twitterとの連携準備#####
#必要な情報の入手方法は
#RでTwitter操作:「twitterR」パッケージ!バージョン1.1.9の紹介
#https://www.karada-good.net/analyticsr/r-170/
#を確認してください

#情報の入力
consumerKey <- "Consumer Key (API Key)を入力"
consumerSecret <- "Consumer Secret (API Secret)を入力"
accessToken <- "Access Tokenを入力"
accessSecret <- "Access Token Secretを入力"
#httr_oauth_cacheの設定
options(httr_oauth_cache = TRUE)
#twitteRパッケージ:setup_twitter_oauthコマンド
setup_twitter_oauth(consumerKey, consumerSecret, accessToken, accessSecret)
[1] "Using direct authentication"
########

#ツイートをキーワードで検索
#twitteRパッケージ:searchTwitterコマンド
ResultTweets <- searchTwitter("garakowa_a", n = 100)

#結果をdataframe化
#twitteRパッケージ:twListToDFコマンド
ResultTweets <- twListToDF(ResultTweets)

#エッジデータを取得
#graphTweetsパッケージ:getEdgesコマンド
edges <- getEdges(data = ResultTweets, tweets = "text", source = "screenName")
edges[, 2] <- as.character(edges[, 2])

#ノードデータを取得
#graphTweetsパッケージ:getNodesコマンド
nodes <- getNodes(edges)

###ノードデータを加工#####
#ノードデータにidを追加
nodes <- nodes[order(nodes)]
nodes <- data.frame(id = 1:length(nodes), label = nodes)

#ResultTweetsからscreenNameでいいねとリツイート数を抽出
FavoritReTweetData <- ResultTweets[, c(11, 3, 12)]

#いいねとリツイート数の合計を計算
FavoritReTweetData <- aggregate(FavoritReTweetData[, 2:3],
                                list(FavoritReTweetData[, 1]), sum)

#nodeデータを元にいいねとリツイート数の結果データを作成
FReTweetData <- NULL
for(i in seq(nrow(nodes))){

  if(sum(FavoritReTweetData[, 1] == nodes[i, 2]) == 0){
    
    FReTweetData <- rbind(FReTweetData, c(as.character(nodes[i, 2]), NA, NA))
    
  }else{
    
    FReTweetData <- rbind(FReTweetData, 
                          as.character(subset(FavoritReTweetData,
                                              FavoritReTweetData[, 1] == nodes[i, 2])))
    
  }}

#結果をdata.frame化
FavoritReTweetData <- as.data.frame(FReTweetData)

#念のためscreenNameで並び替え
FavoritReTweetData <- FavoritReTweetData[order(FavoritReTweetData[, 1]),]

#ツールチップを指定
nodes <- cbind(nodes, title = paste0("<p>いいね数:", FavoritReTweetData[, 2],
                                     "<br>リツイート数:", FavoritReTweetData[, 3], "</p>"))

#エラー防止処理              
#NA値を0に置換
FavoritReTweetData[is.na(FavoritReTweetData)] <- 0
#エラー防止に1を加算
FavoritReTweetData[, 2] <- type.convert(as.character(FavoritReTweetData[, 2])) + 1
FavoritReTweetData[, 3] <- type.convert(as.character(FavoritReTweetData[, 3])) + 1

#シンボルサイズにいいね数を指定
nodes <- cbind(nodes, value = FavoritReTweetData[, 2])

#リツイート数が多くなるほどシンボルが赤くなるように指定
#scalesパッケージでカラーパレットを作成:seq_gradient_pal
#色数はリツイート数の最大値の2倍を指定
x <- seq(0, 1, length = max(FavoritReTweetData[, 3]))
ReTweetCol <- seq_gradient_pal("white", "red")(x)
nodes <- cbind(nodes, color = as.character(ReTweetCol[FavoritReTweetData[, 3]]))
########

###エッジデータを加工####
#from,toのデータを抽出
from <- edges[, 1]
to <- edges[, 2]

#ラベルを数値化
for (i in seq(nrow(nodes))){
  from <- gsub(nodes[i, 2], nodes[i, 1], from)
  to <- gsub(nodes[i, 2], nodes[i, 1], to)}

#新エッジデータの作成
edges <- data.frame(from, to)
########

#visNetworkパッケージでインタラクティブなネットワーク図を作成
visNetwork(nodes, edges) %>% visOptions(highlightNearest = TRUE, nodesIdSelection = TRUE)

出力例

影響力があるツイートユーザーとして「ガラスの花と壊す世界」の原案「D.backup」を作り上げた、ユニットPhysicsPoint「平梅 珠百合」さんのアカウント名「suyuli」が示されています。

参考までに該当ツイートを紹介します。なお、解析時にはいいねが62、リツーイトが37でした。Rの解析結果と合わせて確認いただければ、紹介パッケージの内容が理解しやすいと思います。

・PhysicsPoint公式サイト
 http://physicspoint.daa.jp/

結果は画像で紹介します。インタラクティブな出力は実行コマンドの結果で確認してください。
・該当アカウント周りの状況
スクリーンショット 2016-02-27 13.07.05

・ノードにマウスを合わせる
スクリーンショット 2016-02-27 13.04.45


少しでも、あなたのウェブや実験の解析が楽になりますように!!

スポンサードリンク

おすすめコンテンツ


スポンサードリンク