Rのtwitterクライアント使ってフォローしている人を分類してみた


RjpWikiを見てたら、twitteRなる文字が。
予想どおり、twitterクライアントとして動作するパッケージでした。

とりあえず使ってみる

というわけで、早速インストール。ちなみに、ubuntuの場合は、Rcurlのインストールにlibcurl4-gnutls-devがいるみたいなので先にapt-getでいれときましょー

[cpp]
install.packages("RCurl")
install.packages("twitteR")
[/cpp]

使うときに少しハマったのがproxyの設定。実はtwitteRではproxyの設定ができないのです。ただ、twitteRで設定を保存するinitSession()は、RcurlのgetCurlHandle()のラッパーなので、getCurlHandle()でproxyを設定すれば良いようです。
後は、使うだけ。

[cpp]
library(twitteR)
init <- initSession("username", "password")
##proxy経由の場合は次のように書くと良い。
init <- getCurlHandle(userpwd=paste("username","password", sep=":"),.opts=curlOptions(httpHeader=c(Expect=""),proxy="http://proxy.com:8080"))
publicTimeline(init)#パブリックタイムライン表示
userTimeline("myuhe", init)#任意のユーザのタイムライン表示
mentions(init)#リプライを表示
friendsTimeline(init)
Rtweets(init)#R関連のつぶやきを表示
[/cpp]

画面には、こんな感じで出てきます。

Scrs.png

分析っぽいことしてみる

こんだけだと、すんごく使い勝手の悪いクライアントでしかないので、Rっぽいことやってみます。
とりあえず、お手軽なとこでクラスタ分析。僕がフォローしている人を勝手ながら標本にさせてもらいまして、その人たちのフォローしている人数、フォローされている人数、発言数使ってこれまた、勝手に分類させてもらいます。
こんな感じで必要なデータをぶっこ抜きまして、おもむろにhclust()

[cpp]
install.packages("Cairo")
library(Cairo)

followlist <- userFriends("myuhe",init)
followvector=NULL
followervector=NULL
status = NULL
name = NULL

for (i in 1: length(followlist)){
if ( followlist[[i]] @ screenName != "wordpress" && followlist[[i]] @ screenName != "google" && followlist[[i]] @ screenName != "rtm"){
followvector[i] <- followlist[[i]] @ friendsCount
followervector[i] <- followlist[[i]] @ followersCount
status[i] <- followlist[[i]] @ statusesCount
name[i] <- followlist[[i]] @ screenName
}
else{
followvector[i] <- NA
followervector[i] <- NA
status[i] <- NA
}
}

mat <- cbind(followvector,followervector)
mat <- cbind(mat,status)
rownames(mat) <- name
mat <- mat[complete.cases(mat),]
hc <- hclust(dist(mat))
Cairo(1000, 1000, file="plot.png", type="png", bg="white")
plot(hc)
dev.off()
[/cpp]

んで、出てきたデンドロビウム・・・じゃなかった、デンドログラムがこれ。

plot.png

ん~有名な人はちょこっと外れている節があるか??ま、サンプルが66ですからね。もっと多いとおもしろいカモですね。
Rユーザの人は自分のtwitterアカウントで遊んでみてはいかがでしょうか??
Rユーザでない人もこれを機にRを使ってみると新しい発見があるかもしれないですね。