TwitterネットワークにPagerankを適用する

 前回の記事で、Pagerankを実装したので、今回はそのアルゴリズムを(自分の)Twitterのネットワークに適用してみました。

f:id:hongo35:20131208020538j:plain

 具体的な手順は、まず、Twitter APIを叩いて、対象アカウントがフォローしているユーザーのユーザーIDを取得します。このAPIは、一回のリクエストにつき最大5000件のIDを取得できます。それ以上フォローしている場合には、ページングして再度APIを叩き、次の5000件を取得します。また、API制限に引っかからないよう、sleepさせる処理が必要です。
 次に、取得したIDのユーザーそれぞれがフォローしているユーザーを同様に取得します(かなり時間かかる)。そして、そのリストの中から、対象アカウントがフォローしているユーザー同士のリンクのみを抽出し、フォロー関係がある場合には1、ない場合には0とした行列を作ります。
 そして最後に、出来上がった[フォロー数 × フォロー数]の大きさの行列にPagerankアルゴリズムを適用し、各ユーザーに対するPagerankの値を求めます。
 これらの処理をRubyで実装したものが以下です。一部、DBを使ってます。


Calculate pagerank of twitter follow network.

 API制限があることと、糞スパースな行列データにアルゴリズムを適用している影響で、フォロー人数が400人程度のアカウントで、処理が終わるまでに数時間かかりました。。。 (Pagerankの実装方法を違ったものにすればよかったと後悔)なので、nohupとかで実行するのがいいと思います。pagerank.csvとかのファイルに出力して、Rを使って可視化したものが以下です。


f:id:hongo35:20131207232712p:plain

 @hongo35がフォローしているアカウントの中で、ページランクの高かったアカウントTOP10は、こんなかんじになりました。

  1. @h_ototake
  2. @yukihiro_matz
  3. @KaworiM0531
  4. @sasakitoshinao
  5. @masason
  6. @AntiBayesian
  7. @t_wada
  8. @takapon_jp
  9. @meso
  10. @TechCrunch

すごく納得感があります。。
 データ収集と計算に多少時間がかかってしまいますが、どんなアカウントのフォローネットワークに対しても適用することができるので、実際にやってみるとおもしろいかと思います。