Python

にじさんじ,ホロライブは「箱推し」なのかTwitterデータから分析する

こんにちは,しまさん(@shimasan0x00)です.

前回,各ライバーのフォロワーidを取得していましたが,事務所単位の計算のために使っていただけでライバー分析には使用していませんでした.

今回は事務所単位のユーザ集合と各ライバーのユーザ集合があるので,以前友人から聞いた「にじさんじは箱」について調べていこうと思います.

箱推しというのは「そのグループのメンバー全員が好き」という意味で使われるそうです.

ただ,にじさんじの所属ライバーは90名を超えているのでさすがに全員推すのは難しいのではないかと思うので今回は10名-程度をフォローしてるユーザを箱推ししているユーザとしていきます.

ついでにホロライブについても同様に分析していきます.

環境

  • macOS Catalina 10.15
  • Python 3.6.8

スポンサーリンク

ライブラリのインポート

※ 使用していないライブラリもあるので注意

from pprint import pprint
import os
import sys
import glob
import json
from bs4 import BeautifulSoup
from pathlib import Path
import re
import math
import requests
import collections
import numpy as np
import japanize_matplotlib
import matplotlib.pyplot as plt
import datetime
import time
import pickle
%matplotlib inline
from requests_oauthlib import OAuth1Session
from apiclient.discovery import build
from apiclient.errors import HttpError

スポンサーリンク

各ユーザが何人ライバーをフォローしてるか

にじさんじ,ホロライブそれぞれでフォローしているユーザがその事務所のライバーを何人フォローしているか調べていきます.

holo_ff_dic = dict()
with open("holo_follower_dic_set.pkl","rb") as f:
    holo_ff_dic = pickle.load(f)
nizi_ff_dic = dict()
with open("nizi_follower_dic_set.pkl","rb") as f:
    nizi_ff_dic = pickle.load(f)

c = 0
user_id_cc_dic = dict()
for user_id in holo_set:
    user_id_cc_dic[user_id] = 0
    for user , ff_dic in holo_ff_dic.items():
        if user_id in ff_dic:
            user_id_cc_dic[user_id] += 1
    c += 1
    if c % 10000 == 0:
        print(c," : DONE")


c = 0
nizi_user_id_cc_dic = dict()
for user_id in nizi_set:
    nizi_user_id_cc_dic[user_id] = 0
    for user , ff_dic in nizi_ff_dic.items():
        if user_id in ff_dic:
            nizi_user_id_cc_dic[user_id] += 1
    c += 1
    if c % 10000 == 0:
        print(c," : DONE")

結果をプロットする

ユーザが何人ライバーをフォローしているかのデータは先程生成できたので,それをプロットしていきます.

それぞれ通常のプロット,軸を両対数にしたものを用意しています.

holo_d = sorted(user_id_cc_dic.items(), key=lambda x: -x[1])
nizi_d = sorted(nizi_user_id_cc_dic.items(), key=lambda x: -x[1])

hx = [x for x,y in holo_d]
hy = [y for x,y in holo_d]
nx = [x for x,y in nizi_d]
ny = [y for x,y in nizi_d]

にじさんじの場合

plt.figure(figsize=(16, 10), dpi=60)
plt.xlabel('順位',fontsize = 24)
plt.ylabel('ライバーフォロー数',fontsize = 24)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.plot(range(len(nx)),ny,color="#76c7bf")
plt.show()

正直わたしは困惑しています.冒頭で10程度フォローしているユーザは箱推しであると敷居を低くした結果10万ユーザ近くいることになってしまいました.

plt.figure(figsize=(16, 10), dpi=60)
plt.xlabel('順位',fontsize = 24)
plt.ylabel('ライバーフォロー数',fontsize = 24)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.xscale("log")
plt.yscale("log")
plt.plot(range(len(nx)),ny,color="#76c7bf")
plt.show()

両対数でプロットされた結果を見ると,ほとんどのライバーをフォローしているユーザが10000人いることが見て取れます.

真の意味での箱推しユーザおるやんけ.

ホロライブの場合

plt.figure(figsize=(16, 10), dpi=60)
plt.xlabel('順位',fontsize = 24)
plt.ylabel('ライバーフォロー数',fontsize = 24)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.plot(range(len(hx)),hy,color="#76c7bf")
plt.show()

10程度フォローしているユーザは箱推しであると敷居を低くした結果こちらでも10万ユーザ近くいることになってしまいました.

plt.figure(figsize=(16, 10), dpi=60)
plt.xlabel('順位',fontsize = 24)
plt.ylabel('ライバーフォロー数',fontsize = 24)
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.xscale("log")
plt.yscale("log")
plt.plot(range(len(hx)),hy,color="#76c7bf")
plt.show()

両対数でプロットされた結果を見ると,こちらでも同様にほとんどのライバーをフォローしているユーザが10000人いることが見て取れます.

そこで私は上記の結果を受けて,箱推しユーザってもしかして前回表出してきたホロライブ,にじさんじ両方をフォローしているユーザではないかと考えました.

共通ユーザの場合

先程の考察から両方のライバーをフォローしているユーザが何人フォローしているかを可視化しました.

やはりそうか…. 10000名近いユーザはにじさんじ,ホロライブのほとんどのライバーをフォローしていますね

もしかすると同じVTuberをやっているユーザが出てくるかもしれませんが,この10000名のユーザがVTuber業界にとって非常に重要なユーザである可能性が高いです.

スポンサーリンク

さいごに

VTuber事務所に対してユーザは推しているのかをTwitterのフォロー数で近似することで調査しました.

結果,10000名近いユーザがそれぞれの所属事務所のライバーをフォローしているという特性が現れました.

今後は差集合のプロットを見たり,出てきた選ばれし10000名について追加の調査をするのが有益なのかなと思います.

こんな分析してほしいみたいな要望があれば是非.

ABOUT ME
しまさん
高専→大学編入→大学院→? / 計算社会科学,ウェブマイニングなど / グレープフルーツと本が好き / SNS(Twitter,YouTube,Twitch)やVTuberのデータ分析屋 詳しいプロフィールはこちら≫ 投げ銭はコチラ