Twitterネットワーク可視化
利用したもの
- Python: version 2.7.3
- Tweepy: ネットのドキュメントはAPI1のままなので信用してはいけない。
- Gephi: 可視化に用いたソフト。CSV他多数のファイル形式に対応している。
目的
Twitter上の教科botクラスタの、リプライによるネットワークを可視化する。
CSVファイルの用意
Gephiで可視化するために、ネットワークを表すデータファイルが必要。今回はPythonとTweepyを用いて各教科botのリプライを取得したものをデータとして扱う。
例えば
a,b a,b b,a
のようなCSVファイルを用意してGephiに読み込ませれば、ノードaからbへ2本のエッジ、bからaへ1本のエッジのついたグラフが作成できる。 よって、CSVファイルにただ(AからBへの)リプライの方向を重複を気にせず列挙すれば良いことになる。
今回使ったのは以下のスクリプト。
教科botリストに含まれる全アカウントのツイートを250件取得し、その中でリプライになっているものを抜き出してカンマ区切りでCSVファイルに列挙している。
#! /usr/bin/python # -*- coding: utf-8 -*- import tweepy import sys from setting import * def authentication(): auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET) auth.set_access_token(ACCESS_KEY, ACCESS_SECRET) return auth def filelog(lines): with open('./data/reply_network.txt', 'a') as f: for line in lines: f.write(line) def get_write_user(user_name): lines = [] for f in tweepy.Cursor(api.user_timeline, screen_name=user_name).items(250): if f.in_reply_to_screen_name: lines.append(u"{0}, {1}\n".format(user_name, f.in_reply_to_screen_name)) filelog(u"".join(lines)) if __name__ == "__main__": api = tweepy.API(auth_handler = authentication()) for f in tweepy.Cursor(api.list_members, owner=api.get_user('xxxxxxx'), list_id=xxxxxxx).items(): print f.screen_name get_write_user(f.screen_name)
諸注意:2012/3/20現在、教科botはおよそ100アカウントに及ぶ。上のスクリプトによって25000件近くのツイートを取得することになるが、当然これはAPIの上限に触れることになる。これに関しては各自で対応していただきたい。
可視化
CSVファイルをGephiに読み込ませてチュートリアルなどをみながらデータを見やすく整形すればよい。 完成した図を以下に掲載する(LayoutにはForceAtlas2を用いた)。
ノードの色でクラスタを、エッジの幅でリプライの数を示している。
分析
大きな丸の外側に小さな点が存在する場合、それがいわゆる`クラスタ'の集まり(あるいは取り巻き)であることを示している。一部のアカウントには確実にクラスタを形成していることが分かる。
また、特に画面中心付近に集まるアカウントは複数のクラスタに渡ってリプライのつながりを持っている。
課題
今回は単純に時期を無視して直近250件のツイートからリプライのみを取得したため、アカウントによってはデータの数がまちまちである。
また、現在はほとんど稼動していないアカウントについてもデータに含んでしまっているのでこれを期間によって除く等した方がよいだろう。
今回はGephiによってsvgに出力、までを行ったがJavascriptによってブラウザ上でこれを可視化するようなツールも存在する(参考をみよ)。