不可視点

search guy at cookpad.com

twitter日本語ユーザーのソーシャルグラフダンプ

twitter日本語ユーザー100万人分のフォローイングとプロフィールのダンプを作成しました。
レコメンデーションの実験や分析に使えるかもしれません。

プロフィール:

108万人分のスクリーンネームや自己紹介文

フォローイング:

103万人分のフォローイング先ID一覧です。
展開すると300万ノード 2.8億エッジになります。(※被フォローエッジを含みません)

以下のURLからダウンロードできます

今回はMongoDBをストレージにしました。ダンプの利用にはMongoDBのインストールが必要となります。
https://github.com/penguinco/yats-socialgraph-dump

使い方:

$ git clone git://github.com/penguinco/yats-socialgraph-dump.git
$ cd yats-socialgraph-dump/
$ less README.md
$ bundle # scripts/tutorial.rbを使うために必要なgemが入ります。

データの準備ができるとこんな感じで使えます。

pp profiles.find_one("screen_name" => 'fuba')

fuba_internal_id = profiles.find_one("screen_name" => "fuba")["internal_id"]
fuba_following = friends.find_one("internal_id" => fuba_internal_id)
shokai_internal_id = profiles.find_one("screen_name" => "shokai")["internal_id"]

#is shokai followed by fuba?
pp fuba_following["ids"].include?(shokai_internal_id)
=> true
#output id csv
friends.find("internal_id" => fuba_internal_id).each do |me|
  puts me["ids"].map{|id| id.to_s}.join(",")[0,100]
end
=> 164743710,51774619,18574112,6064612,175079593,99697384,101801049,123140561,15210265,180215207,156135
#output screen_name csv
friends.find("internal_id" => fuba_internal_id).each do |me|
  result = []
  me["ids"].each do |id|
    prof = profiles.find_one("internal_id" => id)
    if prof != nil
      result << prof["screen_name"]
    else
      result << id.to_s
    end
  end
  puts result.join(",")[0,100]
end
=>164743710,51774619,umaiboo,6064612,kanda_daisuke,bolze_doujin,KEUMAYA,Joey__Jones,0mg,ma2omat2,amasa

便利〜

レコメンデーションの実験とか、プロフィールから分類器とか
Pagerank求めるとかできるのかもしれないですね。
何か面白いものができたら教えてください!

TODO

  • リプライの頻度情報を追加する
  • 定期的に更新される