シンデレラガール総選挙の「50位圏内の難しさ」はいかほどか?【アイドルマスター Advent Calendar 2019】

この記事は、アイドルマスター Advent Calendar 2019の12月13日ぶんの記事です

おことわり

この記事は、アイマスハッカソン2019 in 関西(12月7日)のライトニングトークで話した内容とほぼ同じです。というかライトニングトークの資料をテキストに書き起こしたような内容です(若干加筆はあります)。ライトニングトークの資料として見たいという方はこちらをどうぞ:

www.slideshare.net

はじめに

たびたびお話ししておりますが、私がシンデレラガールズにおいて前々から「話すのをボイスとして聞きたい」と言っている子が、矢口美羽ちゃんです。
最近は「信長名鑑」に載って話題になったりもしましたね。

信長名鑑

信長名鑑

しかし、私もシンデレラガール総選挙で投票したり、いろいろとプロモーションをしているわけですが、シンデレラガール総選挙での順位発表圏内(※第2回以降の場合、50位までしか発表されない*1に入ったことは一度もありませんなかなか難しいです

こんな状況ではまず見込みはないんじゃないか…と絶望しそうにもなるわけですが、ではこれから戦っていくうえで、そもそも「50位圏内ってどれくらい難しいのか」を知らないとならないだろう、ということでデータとして調べたのが今回の取り組みです。

結論のまとめ

「総選挙50位圏内」経験のあるアイドルはすごい多いわけじゃないのです
だから私はへこたれません

第8回総選挙までで一回でも圏内に入ったことのあるアイドルは(190人中)81人です

im@sparqlからのデータの取り方:基本

総選挙順位のデータはいろんなところでまとめられているとは思うのですが、私がたびたびお世話になっているim@sparqlでデータが取れるので、数を数える処理をしたり、他の情報と結びつけて検索したりできるのがありがたかったです。後述しますが、例えば「圏内に入ったことがあり、かつボイス未実装」という条件でも検索できたりするので*2

im@sparqlとは、アイマスのいろんな情報をRDF形式(知識の表現に適したフォーマット)で保存しているデータベースです。「SPARQL」という言語で検索できることからこの名前になっています。


im@sparqlでは、シンデレラガール総選挙の順位は imas:CinderellaRankingResult というクラスを使って表現されています。これは順位発表圏内に入った場合しか存在しない、という仕様になっています。
よって前述の「第8回総選挙までで一回でも圏内に入ったことのあるアイドル」を調べるには、 imas:CinderellaRankingResult をすべて集め、アイドルに対してDISTINCTでSELECTすることで実現できます。

SELECT DISTINCT ?n
WHERE {
  ?s rdf:type imas:CinderellaRankingResult;
     schema:member ?t.
  ?t schema:name ?n.
  FILTER(lang(?n) = "ja")
}

この結果を確認すると81人が抽出されています。

im@sparqlからのデータの取り方:応用(1) アイドルごとに回数を数える

前述の例では、圏内に入ったことのあるアイドルの名前のみ集めていましたが、その回数と組み合わせるにはこうします。

SELECT SAMPLE(?n) (COUNT(?t) as ?count)
WHERE {
  ?s rdf:type imas:CinderellaRankingResult;
     schema:member ?t.
  ?t schema:name ?n.
  FILTER(lang(?n) = "ja")
} GROUP BY(?t)
ORDER BY DESC(?count)

ちょっとつまづいたのがSAMPLEを付ける必要があることでした。GROUP BYをしている都合、アイドル名?nは複数の値(ただし今回の場合、アイドルごとにグループ化しているため、すべて同じ値になる)を持っていることになります。このうち一つを取る、ということでSAMPLEを使っています。

上記の結果に対して、それではさらに「圏内の回数が~回だったアイドルは~人いる」ということを数えてみることにします。この場合、上記の結果をさらに別のSPARQLクエリで囲んであげて評価すればよいです。具体的には以下のクエリとなります。

SELECT ?count (GROUP_CONCAT(?name; separator=", ") as ?names) (COUNT(?name) as ?freq)
WHERE {
  SELECT (SAMPLE(?n) as ?name) (COUNT(?t) as ?count)
  WHERE {
    ?s rdf:type imas:CinderellaRankingResult;
       schema:member ?t.
    ?t schema:name ?n.
    FILTER(lang(?n) = "ja")
  } GROUP BY(?t)
} GROUP BY(?count)
ORDER BY DESC(?count)
圏内回数 該当人数
8回 19人
7回 11人
6回 5人
5回 6人
4回 10人
3回 7人
2回 7人
1回 16人
0回 109人

im@sparqlからのデータの取り方:応用(2) 圏内経験とボイス実装状況の対応を取る

ということもやってみました。そもそもシンデレラガール総選挙は所定の順位に入ることでボイス実装が決まるわけですが、そこに惜しくも到達しなかったアイドルについては、担当Pによるプロモーションも捗るわけですので。

まとめた結果はこちらです。(2019年11月10日現在=的場梨沙まで「実装済」で算定)

  • 現時点でボイス実装済87人のうち、総選挙圏内未経験:16人
  • 総選挙圏内経験あり81人のうち、ボイス未実装:10人

まず「現時点でボイス実装済87人のうち、総選挙圏内未経験」を得るには、以下のようなクエリとなります。FILTER NOT EXISTSがポイントで、これまでは「im@sparqlにimas:CinderellaRankingResultが定義されているアイドル」ということを表現できればよかったので、そのままクエリを書いていましたが、逆に存在しないことをクエリとして表すにはこのようにフィルタを使う必要があります。

SELECT ?t ?n ?c WHERE {
  ?t imas:Title "CinderellaGirls"@en;
     schema:name ?n; imas:cv ?c.
  FILTER(lang(?n) = "ja")
  FILTER(lang(?c) = "ja")
  FILTER NOT EXISTS {
    ?s rdf:type imas:CinderellaRankingResult;
        schema:member ?t
  }
}

ちなみに該当者は以下の通りです。

続いて「総選挙圏内経験あり81人のうち、ボイス未実装」を得るには、基本は最初に書いたクエリとしつつ、FILTER NOT EXISTSとして「声優名を取得すること」を付け加えればよいということになります。

SELECT DISTINCT ?n
WHERE {
  ?s rdf:type imas:CinderellaRankingResult;
     schema:member ?t.
  ?t schema:name ?n.
  FILTER(lang(?n) = "ja")
  FILTER NOT EXISTS { ?t imas:cv ?c }
}

この結果は10人で、それらを手で分類すると以下の通りとなりました。

  • 第8回で圏内、かつそれ以前にも圏内あり:工藤忍、浅利七海、八神マキノ、今井加奈
  • 第8回で初圏内:松本沙理奈、西園寺琴歌、池袋晶葉、小関麗奈
  • 第8回では圏外だがそれ以前に圏内:高峯のあ(第2,3,4,6回)成宮由愛(第2回)

自分が特にプロモーションしている矢口美羽がボイス実装圏内に近づくには、このあたりのアイドルを乗り越えていかないとならない、となかなか大変ではあります。でも動いていきます。

おわりに

ということで、シンデレラガール総選挙をデータとして見ることで、立ち位置やどれくらい大変そうかがよりよく見えたと感じました。この結果を、今後の選挙活動におけるモチベーションに生かしたいと思います。

おまけ

第8回シンデレラガール総選挙で初圏内だったアイドルのうち、

  • ボイス未実装だったのは、前述の4人(松本沙理奈・西園寺琴歌・池袋晶葉・小関麗奈)+夢見りあむでした。
  • ボイス実装済だったのは、一人は前述の通り久川凪ですが、あと一人います。誰でしょうか?

正解は冒頭のスライドの方を見てください(最後のページにあります)。

*1:第1回シンデレラガール総選挙では、順位が発表されたのは30位まで

*2:ただ、「圏内に入った総選挙の時点でボイス未実装」みたいな検索はできないです(im@sparqlでは、ボイス実装状況については「現状における」「声優名」しか取得できないため)。このあたりを自動化するには、手前味噌ですが、私の管理しているシンデレラガールズのボイス実装状況のRDFを組み合わせると何とかできるのではないかと考えています。

*3:2019年実装のこの3人は、総選挙がまだ1回しかないわけなので別扱い、ということで括弧書きにしました。とはいえ久川凪は第8回で圏内(46位)だったのですよね。