唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

Twitterで特定のユーザー達が共通してフォローしているユーザーをリストアップする

前にこんなツイートをした


連休で時間があったのでTwitter APIに慣れるついでに計算してみた

ホクソエムとは

よくわからないけど、Twitterで統計や機械学習をやってる人の一部が名乗っている
notchained.hatenablog.com
メンバーのリストは以下を参考にした

本題

というわけでホクソエムの人達からフォローされている数が多いユーザーを調べるためにTwitter APIを叩いてユーザーのフォロー情報を取ってくる
今回はPythonのライブラリのTweepyを使った
使い方は公式のドキュメントを読めばだいたいわかると思う(ドキュメントが古くて(?)載ってない関数とかあるので注意)

リストに入っているユーザー一覧はapi.list_members関数で取得できる
非公開のユーザーがいるので除外する必要がある点は注意

あるユーザーがフォローしているユーザーはapi.friends_ids関数で取得できる
ただしfriends_idsは15分に15回の制限があるらしいのでスリープを入れて間隔をあける必要がある
dev.twitter.com
これでフォロー情報が取得できるので、リストに入っているユーザーのうちの何人からフォローされているかをカウントできる

個々のユーザーの情報はapi.get_user関数で取ってこれる
get_userは15分間に180回しか叩けないので多い場合にはapi.lookup_users関数を使ったほうがよいかも
dev.twitter.com
dev.twitter.com

結果

被フォロー数上位50位ぐらいまでを載せとく
いわゆるデータサイエンス(?)っぽいユーザーのリストが得られた気がする

リストには26人載っていて、うち非公開が1人なので、最大の被フォロー数は25
1位で24なので、スクリプトにバグがあるかもしれないけど、それらしい結果が得られた

Twitterのアカウント 被フォロー数
gepuro (@gepuro) | Twitter 24
Kentaro Matsuura (@berobero11) | Twitter 24
テラモナギ (@teramonagi) | Twitter 24
sfchaos (@sfchaos) | Twitter 23
Shinichi Takayanagi (@_stakaya) | Twitter 23
ホクソシエロ_wet前処理強化月間完走 (@siero5335) | Twitter 23
里 洋平 (@yokkuns) | Twitter 23
プルマッチョ (@Prunus1350) | Twitter 23
フニャリハット (@dichika) | Twitter 23
kazutan v3.2.5 (@kazutan) | Twitter 23
Takashi Minoda (@aad34210) | Twitter 23
Hoxo et Mai-chan (@aich_08_) | Twitter 23
機械の体を手に入れるのよ鉄郎 (@tetsuroito) | Twitter 23
やまかつ (@yamakatu) | Twitter 22
ホクじつむ(仮) (@yamano357) | Twitter 22
Tweets with replies by 教室雑用係改めフルスタック助教 (@Hiro_macchan) | Twitter 22
初期アバター (@piroyoung) | Twitter 22
hoxo_m (@hoxo_m) | Twitter 22
Uryu Shinya (@u_ribo) | Twitter 22
kos59125 (@kos59125) | Twitter 22
はたむ (@gg_hatano) | Twitter 21
ホクソちゃん(いとーちゃん) (@ito_yan) | Twitter 21
Think more, try less (@Keiku) | Twitter 21
WADA Kazuya (@wdkz) | Twitter 21
Hiroaki Yutani (@yutannihilation) | Twitter 21
sinhrks (@sinhrks) | Twitter 21
shota yasui (@housecat442) | Twitter 20
SANO Hiroki (@sanoche16) | Twitter 20
ホクそうむ (@R_Linux) | Twitter 20
akiaki5516 (@doradora09) | Twitter 20
ホクソモチビ (@motivic_) | Twitter 20
TJO (@TJO_datasci) | Twitter 20
YF:ビッグになりつつあるTA様 (@Med_KU) | Twitter 20
まつけん (@Kenmatsu4) | Twitter 19
久保拓弥 (@KuboBook) | Twitter 19
ホクソリヲ (@horihorio) | Twitter 19
濱田晃一, Ph.D. (@hamadakoichi) | Twitter 19
ZAORIKU・M (@zaoriku0) | Twitter 19
もっちぃ (@tanimocchi) | Twitter 19
ほくそうる (@soultoru) | Twitter 19
takano (@mtknnktm) | Twitter 19
Y.Matsumura (@y__mattu) | Twitter 18
ホクソユーフォニアム (@wakuteka) | Twitter 18
津駄 (Masaki E. Tsuda) (@teuder) | Twitter 18
Shohei Hido (@sla) | Twitter 18
データ解析・統計・機械学習のRSS (@datasci_blogs) | Twitter 18
50才!(四捨五入) (@sato_mitsunori) | Twitter 18
Tweets with replies by 缶これは雇って欲しそうな目で見ています (@wonder_zone) | Twitter 18
マエショリストKD (@WAFdata) | Twitter 18
Hiroshi Shimizu (@simizu706) | Twitter 18
Shintaro FUKUSHIMA (@shifukushima) | Twitter 18
Takashi Kitano (@kashitan) | Twitter 18

ソースコード

import tweepy
import time
import collections

#APIのキーなど
consumer_key = ''
consumer_secret = ''
access_token = ''
access_token_secret = ''

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)

#https://twitter.com/teramonagi/lists/list/members
hoxo_m_ids = [u.screen_name for u in tweepy.Cursor(api.list_members, 'teramonagi', 'list').items(100) if not u.protected]

count = collections.Counter()

for screen_name in hoxo_m_ids:
    count.update(tweepy.Cursor(api.friends_ids, screen_name).items(20000))
    time.sleep(70)

for k, v in count.most_common(100):
    user = api.get_user(user_id = k)
    print '|[https://twitter.com/{}:title]|{}|'.format(user.screen_name, v)

f:id:sucrose:20160503222634j:plain:w0