RによるTwitterユーザーのクラスター分析

 
 
今後web上に落ちているテキストデータを元に知見を生み出すということをやっていくことになりそうなので、
試しに自分のTwitterのフォロワーをクラスター分析でグループ分けしてみました。
 

つぶやきデータの収集

 
Twitterからの情報取得の方法として、RではTwitteRというパッケージがあります。
http://cran.r-project.org/web/packages/twitteR/index.html
 
しかし、TwitteRは自分のRのバージョンではnot availableと言われて使えないようだったので、
今回はこちらのRuby用のTwitter APIクライアントを使用することにしました。
https://github.com/sferik/twitter

 


require "twitter"

Twitter.configure do |config|
 config.consumer_key = "xxx"
 config.consumer_secret = "xxx"
 config.oauth_token = "xxx"
 config.oauth_token_secret = "xxx"
end

事前にhttps://dev.twitter.com/よりアプリケーションを登録し、consumer_keyなどを取得しておく必要があります。そしてconfigに値をセット。

 


timeline = Twitter.home_timeline({:count => 20})

users = []

timeline.each do |timeline|
	tweet = "";
	user_id = timeline[:user][:id]

	unless users.include?(user_id)
		user_timeline = Twitter.user_timeline(user_id, {:count => 100})

		user_timeline.each do |user_timeline|
			tweet << user_timeline[:text]
			tweet << " "
		end	

		output = File.open("data/#{timeline[:user][:id]}.txt", "w")
		output.write(tweet)
		output.close

  		users.push(user_id)
	end	
end

自分のタイムラインに流れているユーザーを上から20人分取得し、そこから各ユーザーごとに最新のつぶやきを100件取得します。
今回はつぶやき間の分析などは行わないつもりでしたので、あらかじめユーザーごとの全てのつぶやきをつなげて保存することにしました。

また、後ほどターム・文書行列を作るために、指定のフォルダ下にユーザーごとのつぶやきのテキストファイルを作成します。

 

クラスター分析

 
ここから先はRを使用します
 
事前にMeCabとRからMeCabを使うためのライブラリであるRMeCabをインストールしておく必要があります
http://rmecab.jp/wiki/index.php?RMeCab
 

library(RMeCab)
DM <- docMatrix("data", pos = c("名詞"))

docMatrix関数を使って、ターム・文書行列を作成します。この関数は、列にTwitterユーザー名、行に一度でも出現した語が並んであり、その升目に語の出現頻度が書かれてある行列を作成します。
 
今回は業界や興味分野などでクラスタリングできたら良いなと思い、名詞のみを抽出しました。pos引数に指定すれば動詞なども抜き出せます。

“愛”, “握手”, “以外”, “伊藤”, “意見”, “異彩”, “移住”, “一員”, “一覧”, “運用”, “英”, “英国”, “横尾”, “欧州”・・・などの単語がつぶやかれています。
 

plot(hclust(dist(t(DM)), "ward"))

個体間の距離の計測・クラスター作成・プロットまで一気にやっています。
今回はウォード法を使用しました。これはクラスター内の分散が最も小さくなるようにクラスタを作成する方法です。クラスタリングの階層的手法としては、他にも最長距離法や群平均法などがあります。
 
 
その結果がこんな感じ(各枝はTwitterのユーザーID)

ward

右側は「民主主義」とか「理想」とか「自尊心」とか社会科学系のガチなことをつぶやいている方々で、左側は「巨人はクソ」とか「クリパ10人連れて来る」とか「フットサルたのぴーー」とかユルい感じでつぶやいている方々に分かれているっぽい(と自分は解釈した)
 
今回は17人のみですが、より多くのユーザーについて分析するときに、自分のフォロワーにどのようなジャンルの人がいるのかを要約的に把握するのには良いんじゃないかと思います。

 
次回は具体的にどんな単語が出てきたか・その傾向等調べたいと思います。
 
【参考】

Rを用いたTwitterテキストマイニング

Twitter Ruby Gemを使って、RubyでTwitterキーワード検索を試す

 

Clustter クラスタ判定ツール
これによると自分は「池澤あやか」クラスタらしい(なんだそりゃ)