見出し画像

フェミニストのtwitterクラスタの調査

はじめに

まず、私は単なる貧困女子です。研究者でもないし専門家でもありません。
先日twitterで面白そうな話題を見つけたんです。
要は「右派クラスタがボットなどを使ってtwitterで暴れている」的な。

それで、私も面白そうだなと思ってちょっと追ってみるうちに、私も何かやってみたいと思ったんだ。
マジで素人なので、計量社会学とかクラスタリングとかグラフマイニングとか未経験です。貧困すぎて論文誌を買えないため、無料公開されてるやつだけを読み始めました。

基本となるデータセットを作る

そのうちに 極・フェミニスト108星(共感力ランキング'22年下半期版) というnoteの記事をみつけたので、まずはそこから始めてみようかなと。
つまり、ここで挙げられているフェミニスト108星という108ユーザはフェミニストクラスタを構成しているであろう、と。だから、クラスタ抽出をする方法を探すのは後回しにして、既存クラスタの中身を見ていくところから開始しました。ちなみに、昨日の朝です。

私はtwitter APIを呼び出すのができなかったため、代替手段を用いつつこの108人のフェミニストの皆様のフォローを全て抽出してきました。(ただ、アカウントが閉鎖されていたり凍結されていたりするものも多いのでそれらを除いて94名です。)
第一段階なので、ツイート分析も後回しにしており単純にフォロー関係のグラフだけを作ります。
フォローは有向グラフというやつなので、行列(matrix)で表すことになりますね。

上のtweetにも書いているのですが
A〜Fさんがいるとします。

A->B,C
B->A,D,E,F
C->A,D,E
D->B
E->A,C
F->A,C,D
というフォロー関係を仮定します。

これはA-Fの6x6の関係になりますので、次の行列を作っちゃえばいい。

  | A B C D E F
---------------
A | 0 1 1 0 0 0
B | 1 0 0 1 1 1
C | 1 0 0 1 1 0
D | 0 1 0 0 0 0
E | 1 0 1 0 0 0
F | 1 0 1 1 0 0

私はこのフェミニストのフォロワーを抽出したのちに、スクリプトで行列の形に自動成形して、結果を出してみました。参考までにGoogleスプレッドシートに貼り付けたものは以下です。

フォロー関係表(行列を転置してあります)

まず何から見ていくか

基本のデータセットはできたので、これを元にして頑張っていく。このフォロワー/フォロイー関係から単純にベクトルの内積を取れば「同じ人がフォローしている」「同じ人をフォローしている」ということが言えるのでそれくらいでも何かを言うことはできそう。

  | A B C D E F
---------------
A | 0 1 1 0 0 0
B | 1 0 0 1 1 1
C | 1 0 0 1 1 0
D | 0 1 0 0 0 0
E | 1 0 1 0 0 0
F | 1 0 1 1 0 0

上記の例ならば、AさんとBさんのフォローは1行目と2行目でわかります。フォローが一つも重なっていませんので、内積は0です。BさんとCさんはかなり近いので内積は3。
被フォローは行でなく列でわかるので、例えばDさんとEさんは同じBさんとCさんにフォローされているのでこの内積をとって2。
これは単純にフォロー関係だけでやっているけれど、例えばツイートで用いる単語を列にすることもできるはず。AさんとBさんが同じ単語を使っていればこの内積が大きくなる。この辺のコーパスを利用した分析も面白そう。
内積以外の指標でもよいと思いますのであくまで一例。

PageRank

行列化しておけば簡単にPageRankを出すことができる。これはGoogleでかつて利用していたとされるアルゴリズムだけど、貧困女子でも分かるレベルに非常に簡単なんだ。
A->B,C
B->A,D,E,F
C->A,D,E
D->B
E->A,C
F->A,C,D
このフォロー関係はフォロイーからすれば次のように言える。
A <- B,C,E,F
B <- A,D
C <- A,E,F
D <- B,C,E
E <- B,C
F <- B
ここで、AさんのPageRankであるPR(A)は次のように定義される。

PR(A) = 1/4*PR(B) + 1/3*PR(C) + 1/2*PR(E) + 1/3*PR(F)

つまりBさんのPageRankのうち1/4とCさんのPageRankのうち1/3と…を全て足し合わせたものがAさんのPageRankになる。ここで1/4とか1/3ってのは何かということだけど、Bさんの場合は4人をフォローしているのでBさんのPageRankのうち1/4だけをAさんに渡しているということ。
結局以下のように6つの式が立つ。

PR(A) = 1/4*PR(B) + 1/3*PR(C) + 1/2*PR(E) + 1/3*PR(F)
PR(B) = 1/2*PR(A) + PR(D)
PR(C) = 1/2*PR(A) + 1/2*PR(E) + 1/3*PR(F)
PR(D) = 1/4*PR(B) + 1/3*PR(C) + 1/2*PR(E)
PR(E) = 1/4*PR(B) + 1/3*PR(C)
PR(F) = 1/4*PR(B)

変数6個に対して6個の式がある連立方程式ですから基本的には解が出る。ちなみにこの場合は必ず解が出るから心配不要。業界ではこれを対角化可能と呼ぶんだ。

方程式はソフトに解かせる

ただ、こんな方程式をいちいち解くほど暇ではないので、普通は先ほどの行列を使って一気に答を出しちゃう。

octave:4> M=[
>   0 1/2 1/2   0   0   0;
> 1/4   0   0 1/4 1/4 1/4;
> 1/3   0   0 1/3 1/3   0;
>   0   1   0   0   0   0;
> 1/2   0 1/2   0   0   0;
> 1/3   0 1/3 1/3   0   0
> ]
M =

        0   0.5000   0.5000        0        0        0
   0.2500        0        0   0.2500   0.2500   0.2500
   0.3333        0        0   0.3333   0.3333        0
        0   1.0000        0        0        0        0
   0.5000        0   0.5000        0        0        0
   0.3333        0   0.3333   0.3333        0        0

octave:5> [V, L] = eig(M')
V =

  -0.4885 +      0i   0.0211 +      0i  -0.3005 +      0i   0.4921 +      0i  -0.1329 - 0.1915i  -0.1329 + 0.1915i
  -0.5862 +      0i   0.5715 +      0i   0.4629 +      0i   0.3225 +      0i   0.4882 + 0.2896i   0.4882 - 0.2896i
  -0.4397 +      0i   0.4945 +      0i  -0.5798 +      0i   0.3609 +      0i  -0.5714 +      0i  -0.5714 -      0i
  -0.3420 +      0i  -0.3693 +      0i   0.2708 +      0i  -0.3570 +      0i  -0.0968 + 0.2103i  -0.0968 - 0.2103i
  -0.2931 +      0i  -0.4902 +      0i  -0.2977 +      0i  -0.5841 +      0i   0.2678 + 0.0929i   0.2678 - 0.0929i
  -0.1466 +      0i  -0.2276 +      0i   0.4442 +      0i  -0.2344 +      0i   0.0451 - 0.4013i   0.0451 + 0.4013i

L =

Diagonal Matrix

   1.0000 +      0i                  0                  0                  0                  0                  0
                  0  -0.6277 +      0i                  0                  0                  0                  0
                  0                  0   0.2605 +      0i                  0                  0                  0
                  0                  0                  0  -0.3440 +      0i                  0                  0
                  0                  0                  0                  0  -0.1444 + 0.3203i                  0
                  0                  0                  0                  0                  0  -0.1444 - 0.3203i

octave:6> PR = V(:,1) ./ 0.01*sum(V(:,1))
PR =

   112.172
   134.606
   100.955
    78.520
    67.303
    33.652

最後に出ているPR=のあとの6個がそれぞれA〜FのPageRank。(数値自体は大した意味がなくて大小比較に意味があるので、分かりやすく大きな数字に変換している。)
やっていることは以下の通りだけどそんなこと知らなくてもいい。

  1. フォロー関係の行列を変換して行の合計値が1になるようにしてMという行列を定義する

  2. この行列を転置する(行と列を変換する) (M'とすると勝手に転置される。)

  3. eig関数を使って固有値/固有ベクトル計算をする(何やら凄そうですが、連立方程式を解いているだけ)

  4. 出てきた固有ベクトルVの一列目がPageRankとしての解なのでそれをそのまま取り出す。

ここで使っているのはGNU Octaveという無料のソフトなので誰でもできる。固有値など知らずともコピペでゴー。

フェミニスト行列でのPageRankはどうなるか

これを実際にフェミニストのtwitterアカウントに対して適用。
96x96の行列だけど、これくらいだと大したCPUでなくとも一瞬で答が出ちゃう。最後は100万ユーザくらいでやりたいね。

     1  katepanda2  214.1692 (20 弁護士 太田啓子)
     2  Cristoforou  189.8468 (5 saebou)
     3  kambara7  186.4614 (31 弁護士神原元)
     4  i_tkst  172.9295 (53 竹下郁子)
     5  colabo_yumeno  170.1954 (15 仁藤夢乃)
     6  fuemiad  169.9469 (41 笛美)
     7  artesia59  158.4949 (29 アルテイシア)
     8  frroots  144.5336 (80 小宮友根)
     9  minorikitahara  136.6731 (85 北原みのり)
    10  nahokohishiyama  136.0886 (16 菱山南帆子)
    11  basadayobengosh  135.0061 (32 弁護士アンバサだよ(ナカガワタク))
    12  hokusyu82  119.4110 (51 北守)
    13  TrinityNYC  118.3259 (1 TrinityNYC)
    14  KazukoIto_Law  116.8695 (88 伊藤和子)
    15  bokukoui  108.8726 (12 墨東公安委員会)
    16  ueno_wan  107.9144 (67 上野千鶴子)
    17  KatsubeGenki  107.6775 (70 勝部元気)
    18  kazugoto  106.4510 (76 後藤和智)
    19  kyokosakaino  104.1362 (42 .(境野今日子))
    20  annaPHd9pj  103.1742 (4 あんな)
    21  okisayaka  94.8949 (26 おきさやか)
    22  Koiramako  94.6292 (26 郡司真子)
    23  segawashin  93.3024 (24 瀬川深)
    24  Tsurigane_mushi  93.2889 (17 つりがねむし)
    25  AtTheBlackLodge  84.5653 (23 Lhasa)
    26  ohtsubakiyuko  75.6785 (7 大椿ゆうこ)
    27  mihoimiofficial  75.5435 (73 藤井美穂)
    28  hyougenmamoru  71.8634 (54 広く表現の自由を守るオタク連合)
    29  shisoyama  66.1393 (12 しろやま)
    30  AkioHoshi  65.0958 (35 星 暁雄 (ITと人権))
    31  godspeedtetsuma  64.0030 (93 てつま ∃しとう)
    32  inumash  63.4507 (61 董卓(不燃ごみ))
    33  tkore61  63.3221 (56 柏木哲夫)
    34  sivaprod  62.3759 (33 SIVA)
    35  _keroko  61.1971 (35 橋迫瑞穂)
    36  kongyouguai  61.1754 (99 孔悠鬼)
    37  arurukan_home  60.2785 (58 絹谷 田貫)
    38  kabutoyama_taro  60.0521 (102 社虫太郎)
    39  hollyhockpetal  57.6358 (18 はなびら葵)
    40  scriptforus  55.8350 (34 オモチスキー)
    41  washburn1975  54.0793 (39 ワッシュ)
    42  setsuna0417  53.3637 (57 せつなりっとく)
    43  claw2003  53.3011 (106 九郎正宗)
    44  yksplash_ina  52.7382 (76 イナモトリュウシ ∃xist)
    45  nowhereman134  51.4103 (63 nowhereman134)
    46  heboya  49.7294 (76 へぼやま)
    47  plumyogamat  46.2580 (10 Plum)
    48  takayukiigokura  45.1518 (70 ゴクラクトンボ)
    49  francesco3  45.0753 (55 f the minion)
    50  taniyanyanz  44.8464 (42 谷家幸子)
    51  yskkun  42.2292 (102 クボユウスケ)
    52  ura5ch3wo  39.9992 (40 みつを_Mitsuwo�)
    53  TasogarKamen  38.3678 (73 黄昏仮面)
    54  suto_emini  37.1516 (88 須藤エミニ)
    55  rudolph_zenda  35.6333 (93 ルドルフ=ラッセンディル)
    56  harupiyo1582  34.1250 (82 鉄馬の貧乏子育てbot)
    57  basilsauce  33.8639 (65 �BASIL���)
    58  biomasterchan  32.9283 (87 生物系院生)
    59  miyuo214  30.3991 (18 ミユオ)
    60  SAY_A_BLUR  30.0213 (99 背乃あぶら)
    61  Yoru_stern  29.5223 (63 微笑みよる子)
    62  hoppeta_yellow  28.8529 (66 黄色いほっぺの人々)
    63  poyu_z_  28.7529 (30 ぽゆぽゆ)
    64  su22m4r  28.6307 (82 フィッターR∃)
    65  traductricemtl  27.2931 (8 jiji)
    66  mumuri7575  25.6611 (46 毒)
    67  934bQHcUM1G1NEL  24.0734 (59 マインドちゃん)
    68  MuMeimei11  24.0012 (20 めいむ(旧バフバちゃん))
    69  females_db_park  23.1187 (25 女たちのデータベース広場)
    70  kawataka_alter  22.8394 (99 カワタカオルタナティブ)
    71  ddslumber  22.4286 (38 deepdreamlessslumber)
    72  niwaka_toshiro  21.8553 (85 要出展)
    73  matsudosimasuda  21.4957 (93 増田かおる)
    74  mizutayou1  21.3858 (28 mizuta)
    75  sodium  20.9084 (6 しお(汐街コナ))
    76  sikakuno  20.4642 (80 四角の(足場))
    77  adachib  19.4027 (102 安達瑶b)
    78  otaota_1215_m  18.8819 (68 オタギリ)
    79  XXfifXX  18.8136 (93 Sophie)
    80  c4QmAfJ7xPMqDwX  18.1610 (47 おちゃ)
    81  jo_ta_haha  17.9244 (88 さんむうん)
    82  kazuna_kanajiri  17.0138 (106 金尻カズナ)
    83  potatolacertus  15.5993 (37 おいもさば)
    84  LDK1B_T  14.7587 (82 無議)
    85  e_ndtw  14.7406 (14 山崎)
    86  Schuhei_K  14.5597 (76 こたに�ギタリスト)
    87  VxLArbYL3tcNEDM  14.0856 (50 ねる)
    88  eri82tom  13.7750 (88 山中)
    89  kmm295  11.7301 (102 kmm295)
    90  rindoh  10.6828 (44 リンドウ)
    91  jgkkny  8.3023 (88 消灯)
    92  sute0015  6.1104 (93 特急北近畿)
    93  ezaki_qma  3.8566 (106 ビエネッタ)
    94  minorit403  3.0189 (73 三浦よし)

ここで一番左側の数字がPageRankとしての順位。真ん中あたりの数字がPageRankであり、一番右にあるのが、元データにあった共感力ランキングにおける順位。
私はフェミニストについて何も詳しくないのだけど、上位にある人たちはフェミニストのクラスタ内でそれなりに影響力があることが示唆されるよね。ただ、これはPageRankのモデルが正しければという話であって、この時点では単に計算から数字を出しただけ。(数字が正しいのではなく、現実があってその現実に近い数字を出したいという話なので、数字を先行させるのはおかしいから。)

他の指標との比較

PageRank計算は容易だけど、もっと容易に分かる数字があってそれはフォロワー数。フォロワー数で良いならばこんな計算をする必要はない。
まずはピアソンの相関係数をとって各種指標と比較してみる。

  • 共感力順位とPageRank : -0.3828240854

  • 共感力順位とツイフェミクラスタ内フォロワー数相関: -0.4558379954

  • 共感力順位とフォロワー数相関: -0.2922789118

  • PageRankとクラスタ内フォロワー数相関: 0.9011171759

  • PageRankとフォロワー数相関 : 0.6090283423

  • PagaRankとツイフェミフォロワー率相関 : -0.4483053358

  • 共感力順位とツイフェミフォロワー率相関 : 0.3911030599

共感力順位は共感力が高い人が小さくなる数値だから、負の相関が出ているということはつまりは共感力と正の相関がある。
「ツイフェミクラスタ内フォロワー数」というのはつまりはこの94アカウント内でのフォロワー。
当然かもしれないけれど、PageRankはクラスタ内フォロワー数とかなり高い相関があるね。

ただ、例えば @Tsurigane_mushi (つりがねむし)さんはクラスタ内フォロワー数は30で、@nahokohishiyama (菱山南帆子)さんのフォロワー数である26よりも大きい。しかしPageRankは菱山さん136に対してつりがねむしさんは93。
これはつまりは言い方は悪いけれど「弱小アカウント」からいくらフォローされてもPageRankは上がりにくいからということだろうね。
「強力アカウント」からフォローされており、しかもそのそのフォローが厳選されている場合という時に数値が上がる。
だから岸田首相(464人しかフォローしていないが、67.8万人のフォロワーがいる)からフォローされれば、一気にPageRankは上がりそう。

twitterクラスタのPageRankに意味はあるのか?

正直まだよくわかりらないかな。
貧困を拗らせるうちに、行列演算だけだからすぐに出せるよな、と思っていきなり実施しちゃっただけなので妥当性は不明。

https://twitter.com/w08fGrbtsG5ElJ9/status/1637940036321804289

この辺りにもちょっとだけ書いてみた。

最後に

私はこういう作業は手を動かしてからやり方を考えるので、文献検索もたいしてやってないのでもう少しちゃんと読み込んでから継続しても良さそう。
いい論文があったら教えてください。無料公開のやつを。


いいなと思ったら応援しよう!