漫然とTwitterのタイムラインを眺めて、興味深い法則に気がついた。それは、500人以上フォロワーのいるユーザーの大半は、「フォロワー数 / 被リスト数」がおよそ10という値になる。ということだ。
自分の場合なら、フォロワー15000人のリストが1800人。8.3となる。だいたいのユーザーが、12〜8のレンジに収まる。
気持ち悪いほどに、フォロワー/リスト比がこのレンジのユーザーが多い。これは何を意味しているのだろうか?
Twitterのフォロワーに関する10:1の法則、メモ | fladdict
上記の記事が興味深かったので,いくつかサンプルを取ってみる事にしました.http://fladdict-rate.appspot.com/ と言う Web サービスが付けていた名前が気に入ったので,ここではFollower / List の比を fladdict-rate と呼ぶ事にします.
サンプルの取得には,Twitter で「はてなダイアラー」ときゃっふきゃっふしよう! - IT戦記 で紹介されていた TopHatenar の(Twitter アカウントを保持している)はてな上位 100 ユーザのリストを使用しました*1.下図は,このリストに書かれている各ユーザの fladdict-rate を昇順にソートしたものになります.
中央値は 10.28 と先の主張にかなり合致した結果となりました.8 〜 12 はさすがに狭いですが,90% のユーザが fladdict-rate 6 〜 20 のレンジに収まっていると言う事で,この結果はなかなか興味深いです.外れ値に当たるユーザでも,"119 / 5" や "199 / 6" のようにサンプル数が少ないせいなユーザも混じっているので,これを除くと,例外的なユーザは本当に限られた人数だけになりそうです.
Twitter に関しては,一部 Follower の数が指標になってしまう領域もあるそうで,(Follow と Remove を繰り返したり Bot に Follow してもらうなどして)無理やり Follower を増やそうとする人もいるそうです.まだ閾値の検討などは行っていないですが,そういった人達の判別方法の一つとしても利用できるのかもな,と思ったりもしました.尚,この辺りの問題については,ツイッターフォロワー10:1の法則と「リスト率」[絵文録ことのは]2011/02/18 でもう少し詳細な言及がなされていました.
はてなダイアラーの fladdict-rate 一覧
以下の表が,上記の図に使用した各ユーザの fladdict-rate の詳細になります.Following の値は今回は関係ないですが,参考までに載せています.
はてな ID | Twitter ID | Friend | Follower | List | Fladdict-rate | |
---|---|---|---|---|---|---|
1 | id:elm200 | @elm200 | 88 | 5351 | 867 | 6.17 |
2 | id:Baatarism | @baatarism | 130 | 902 | 144 | 6.26 |
3 | id:ryuka01 | @ryuka01 | 369 | 1594 | 254 | 6.28 |
4 | id:RyoAnna | @RyoAnna | 656 | 1942 | 302 | 6.43 |
5 | id:moto_maka | @motomaka | 23 | 2836 | 426 | 6.66 |
6 | id:DocSeri | @DocSeri | 1097 | 1519 | 226 | 6.72 |
7 | id:shinichiroinaba | @shinichiroinaba | 60 | 2191 | 318 | 6.89 |
8 | id:heatwave_p2p | @heatwave_p2p | 407 | 980 | 140 | 7.00 |
9 | id:FUKAMACHI | @ash0966 | 175 | 1679 | 231 | 7.27 |
10 | id:orangestar | @ajico_k | 160 | 10836 | 1458 | 7.43 |
11 | id:mamoruk | @mamoruk | 1913 | 2422 | 318 | 7.62 |
12 | id:tkng | @tkng | 268 | 492 | 64 | 7.69 |
13 | id:stanaka | @stanaka | 285 | 2085 | 264 | 7.90 |
14 | id:mkusunok | @masanork | 1931 | 11868 | 1445 | 8.21 |
15 | id:kobeni_08 | @kobeni | 880 | 2527 | 307 | 8.23 |
16 | id:finalvent | @finalvent | 1656 | 6198 | 748 | 8.29 |
17 | id:jkondo | @jkondo | 146 | 10871 | 1303 | 8.34 |
18 | id:tt_clown | @tt_clown | 622 | 709 | 84 | 8.44 |
19 | id:michikaifu | @michikaifu | 443 | 6904 | 809 | 8.53 |
20 | id:os0x | @os0x | 2632 | 2720 | 318 | 8.55 |
21 | id:y_arim | @y_arim | 6061 | 7232 | 844 | 8.57 |
22 | id:javascripter | @javascripter | 487 | 669 | 78 | 8.58 |
23 | id:tsumiyama | @tsumiyama | 393 | 6368 | 742 | 8.58 |
24 | id:masayang | @masayang | 299 | 1941 | 224 | 8.67 |
25 | id:banraidou | @banraidou | 1125 | 1129 | 130 | 8.68 |
26 | id:zyesuta | @zyesuta | 3050 | 3467 | 398 | 8.71 |
27 | id:ockeghem | @ockeghem | 813 | 1666 | 188 | 8.86 |
28 | id:rikuo | @rikuo | 506 | 2324 | 261 | 8.90 |
29 | id:reikon | @reikon | 201 | 711 | 79 | 9.00 |
30 | id:hyoshiok | @hyoshiok | 1163 | 4026 | 447 | 9.01 |
31 | id:umeten | @umeten | 1782 | 1388 | 154 | 9.01 |
32 | id:naoya | @naoya_ito | 99 | 8217 | 901 | 9.12 |
33 | id:rx7 | @namikawa | 1383 | 2133 | 233 | 9.15 |
34 | id:Lhankor_Mhy | @lhankor_mhy | 1403 | 1429 | 155 | 9.22 |
35 | id:LM-7 | @LunarModule7 | 164 | 3303 | 357 | 9.25 |
36 | id:yomoyomo | @yomoyomo | 140 | 3164 | 341 | 9.28 |
37 | id:hirose31 | @hirose31 | 634 | 1295 | 139 | 9.32 |
38 | id:pha | @pha | 1182 | 7126 | 755 | 9.44 |
39 | id:kiyo560808 | @kbkt | 277 | 1001 | 105 | 9.53 |
40 | id:chnpk | @CHNPK | 117 | 525 | 55 | 9.55 |
41 | id:hakobe932 | @hakobe | 507 | 1299 | 135 | 9.62 |
42 | id:aerodynamik | @aerodynamik_tw | 154 | 427 | 44 | 9.70 |
43 | id:amatanoyo | @amatanoyo | 918 | 923 | 95 | 9.72 |
44 | id:nowokay | @kis | 5617 | 5217 | 521 | 10.01 |
45 | id:kutabirehateko | @kutabirehateko | 282 | 344 | 34 | 10.12 |
46 | id:TERRAZI | @TERRAZI | 692 | 3063 | 302 | 10.14 |
47 | id:ZIGOROu | @zigorou | 707 | 1651 | 162 | 10.19 |
48 | id:Erlkonig | @valerico | 777 | 1036 | 101 | 10.26 |
49 | id:goldhead | @goldhead | 749 | 638 | 62 | 10.29 |
50 | id:RPM | @RPM99 | 294 | 4305 | 413 | 10.42 |
51 | id:LittleBoy | @u5u | 608 | 4326 | 410 | 10.55 |
52 | id:gamella | @gamella | 1222 | 2397 | 226 | 10.61 |
53 | id:shi3z | @shi3z | 323 | 6767 | 637 | 10.62 |
54 | id:GiGir | @gigir | 737 | 1335 | 123 | 10.85 |
55 | id:sikii_j | @sikii_j | 878 | 1567 | 139 | 11.27 |
56 | id:hatayasan | @hatayasan | 534 | 548 | 48 | 11.42 |
57 | id:kaerudayo | @kaerudayo | 700 | 629 | 55 | 11.44 |
58 | id:shimooka | @shimooka | 532 | 987 | 86 | 11.48 |
59 | id:kusigahama | @kusigahama | 1549 | 2279 | 195 | 11.69 |
60 | id:Hamachiya2 | @Hamachiya2 | 4185 | 14226 | 1200 | 11.86 |
61 | id:todesking | @todesking | 2729 | 3341 | 280 | 11.93 |
62 | id:mohri | @mohri | 1889 | 2133 | 178 | 11.98 |
63 | id:kanose | @kanose | 973 | 5495 | 455 | 12.08 |
64 | id:kawasaki | @yukawasa | 575 | 6947 | 574 | 12.10 |
65 | id:amachang | @amachang | 19340 | 18356 | 1506 | 12.19 |
66 | id:nakakzs | @nakakzs | 1829 | 1926 | 158 | 12.19 |
67 | id:t_yano | @t_yano | 2562 | 2631 | 214 | 12.29 |
68 | id:taan | @maikatan | 755 | 4604 | 370 | 12.44 |
69 | id:acqua_alta | @acqua_alta | 170 | 1058 | 85 | 12.45 |
70 | id:wadap | @wadap | 1335 | 2941 | 231 | 12.73 |
71 | id:tanemori | @panpot | 1579 | 1946 | 152 | 12.80 |
72 | id:nitoyon | @nitoyon | 1138 | 2275 | 166 | 13.70 |
73 | id:active_galactic | @active_galactic | 1284 | 1260 | 91 | 13.85 |
74 | id:HolyGrail | @HolyGrail | 4589 | 6931 | 492 | 14.09 |
75 | id:shibata616 | @shibata616 | 5803 | 5273 | 364 | 14.49 |
76 | id:YUYUKOALA | @yuyukoala | 608 | 233 | 16 | 14.56 |
77 | id:gothedistance | @gothedistance | 4062 | 4163 | 285 | 14.61 |
78 | id:heimin | @heimin | 3635 | 3729 | 252 | 14.80 |
79 | id:kskmeuk | @kskmeuk | 1706 | 1683 | 111 | 15.16 |
80 | id:mellowmymind | @mellowmind | 219 | 711 | 45 | 15.80 |
81 | id:takerunba | @takerunba | 2555 | 3134 | 195 | 16.07 |
82 | id:adgt | @adgt33 | 23 | 232 | 14 | 16.57 |
83 | id:dacs | @dac_News | 1 | 83 | 5 | 16.60 |
84 | id:Asmodeus-DB | @AsmodeusDB | 482 | 2373 | 138 | 17.20 |
85 | id:ululun | @ululun | 1246 | 1585 | 92 | 17.23 |
86 | id:hejihogu | @hejihogu | 2941 | 2893 | 161 | 17.97 |
87 | id:Yoshiori | @yoshiori | 8587 | 7939 | 437 | 18.17 |
88 | id:kokorosha | @kokorosha | 5149 | 4902 | 262 | 18.71 |
89 | id:coconutsfine | @coconutsfine | 968 | 1651 | 88 | 18.76 |
90 | id:white_cake | @white_cake | 711 | 606 | 32 | 18.94 |
91 | id:repon | @repon | 1764 | 1678 | 79 | 21.24 |
92 | id:tittea | @tittea | 189 | 119 | 5 | 23.80 |
93 | id:hrkt0115311 | @hrkt0115311 | 1740 | 1475 | 61 | 24.18 |
94 | id:fk_2000 | @fk_2000 | 1999 | 1480 | 60 | 24.67 |
95 | id:hagakurekakugo | @Ahnenerbe | 180 | 199 | 6 | 33.17 |
96 | id:kurimax | @kurimax | 446 | 788 | 19 | 41.47 |
97 | id:kousuke-i | @kousuke3 | 984 | 578 | 13 | 44.46 |
取得方法
最後に取得方法をメモ.Twitter の各ユーザの Following/Follower/Membership 数は Twitter API を叩くより,html からスクレイピングした方が早そうだったので,各種カウントを返す関数を作成して github にアップロードしておきました.スクレイピングの方法は twitter bot達 2 - Reworking... を参考にしました.
追記
注:本サービスのクローリングは、robots.txtファイルの規定に従って為される場合には許されます。但し、Twitterの事前の承諾なくして本サービスのスクレーピングを行うことは明示的に禁じられています
Terms of Service
Twitter ではスクレイピングを禁止しているそうです.そういう訳で,github にアップロードしたコードを Twitter API の形に修正しました(ついでに,各種メンバ変数名も少し修正).
この関数を使用して,以下のようなコードで各種情報を取得しました.
#!/bin/ruby -Ku require 'rubygems' require 'crown/twitter' File.open(ARGV[0]) { |file| file.each { |line| begin v = line.chomp.split # id:hatena_id @twitter_id screen_name = v[1].gsub("@", "") info = Crown::Twitter.count(screen_name) printf("%-20s %-20s %8d %8d %8d %8.2f\n", v[0], # hatena ID v[1], # twitter ID info.friend, # フォローしている数 info.follower, # フォローされている数 info.list, # リストに登録されている数 info.follower / info.list.to_f # fladdict-rate ) rescue Exception next end } }
Related Pages
- http://fladdict-rate.appspot.com/
- Twitter フォロアーリスト確率確認くん
- 2/17 follower/listの話 - 終わるのは私たちの世界ではない
- fraddict-rate を表示する UserScript - 理系学生日記
- ツイッターフォロワー10:1の法則と「リスト率」[絵文録ことのは]2011/02/18
- http://twitter.com/hageatama/status/19640392379
- http://twitter.com/kagi55x/status/8410941054001152
- Following 数 10,000以上のユーザの fladdict-rate - Life like a clown
*1:何人かアカウントが存在しなくなっていたりした関係で,ぴったり 100 ではなくなっています.