【Shadowverse】デッキデータ分析で必要な3つのこと
こんにちは。メタセコ(@metasequo)です。
JCGの公式からお知らせがありましたように、2021年2月1日にサイトのリニューアルが行われるようです。
リニューアルでDiscord連携がされるようになり、チェックインや参加表明が簡単になったりするんじゃないかと思います。
JCG Shadowverse Open 大会サイトリニューアルのお知らせ
Twitterを眺めていると、ここ1年くらいを掛けてJCGの分析する人が増えたように感じています。学校などでプログラミングの知識等を手に入れたらやってみたくなるのは、とても共感しますし、実際私もやっていました。
このnoteは今後、JCGの持ち込み分布などを分析したいと考えている人のためになればと思います。
以下、今回の目次です。
・デッキのデータ分析で必要なこと
必要なことは次の3つです。
1. Shadowverseのデッキコードの構造を知っておくこと
2. ShadowverseのカードID、ハッシュの構造を知っておくこと
3. デッキ公開サイトの構造を知っておくこと
前提として、今回の分析の対象としているものは、デッキを事前に登録し、公開されるような大会の場合のみです。公開されていないと分析対象がないので、ここは仕方ありません。
JCG Shadowverse Openではローテーションフォーマットとアンリミテッドフォーマットの場合はデッキの事前登録、公開制を採用しています。
そして、各選手が持ち込んだデッキの内容はエントリー抽選で落選した人も含め、全て公開されています。
JCGの登録一覧にもしっかり記載されていますね。
日本ではJCGが主ですが、BATTLE.FYで開催されている海外の方向けの大会でもデッキ公開制の大会があり、デッキの内容は大会毎のスプレッドシートにて公開されています。
今回は日本のShadowverseプレイヤーにとって一番身近なJCGを題材としていますが、デッキの分析に用いる技術は同じなため、応用として海外大会のデッキ分析も挑戦してみてください。
Webサイト上の情報を収集する行為の事を「Webスクレイピング」と言いますが、始めるためにはHTMLやJavaScript、CSSのソースコードを読める必要があるのですが、その知識については今回割愛します。
また、過度なスクレイピングはそのサイトに負荷をかけることになるので、適切な用法と用量をお守りください。
プログラミングについての知識が特にない方でも、分析の手順の雰囲気を知っていただくために、興味がある方は以降も読んでいただけますと幸いです。
1. Shadowverseのデッキコードの構造について
デッキ公開制の大会では、Shadowverse Portal(以下「どばすぽ」)のリンクで公開されています。そのURLにアクセスするだけでデッキ作成などの画面になるので、メンテナンス中とか便利ですよね。
そこで、どばすぽへのURLを見てみましょう。
https://shadowverse-portal.com/deckbuilder/create/1?hash=3.1.76QHo.76QHo.76QHo.6tEcS.6tEcS.6tEcS.72fJw.72fJw.72fJw.6x2lc.6x2lc.6x2lc.6-suc.6-suc.6-suc.6-lZY.6-lZY.6-lZY.6-qS2.6-qS2.6-qS2.72c8y.72c8y.72h1c.72h1c.72h1c.72eb2.72eb2.72eb2.76VAS.76VAS.6-lZs.6-lZs.6-lZs.6-qSC.6-qSC.6-qSC.76Ns0.76Ns0.76Ns0&lang=ja
URLの情報としては以下の表にまとめた感じになっています。
このURLにクラスと採用カード40枚の情報が載っていますので、このURLを解析すれば良さそうですね。
ちなみにですが、デッキ詳細のURLへ向けると、デッキ作成画面ではなくデッキ詳細画面に行くので、デッキを閲覧するには更に便利です。
https://shadowverse-portal.com/deck/[デッキのハッシュ値]
https://shadowverse-portal.com/deck/3.1.76QHo.76QHo.76QHo.6tEcS.6tEcS.6tEcS.72fJw.72fJw.72fJw.6x2lc.6x2lc.6x2lc.6-suc.6-suc.6-suc.6-lZY.6-lZY.6-lZY.6-qS2.6-qS2.6-qS2.72c8y.72c8y.72h1c.72h1c.72h1c.72eb2.72eb2.72eb2.76VAS.76VAS.6-lZs.6-lZs.6-lZs.6-qSC.6-qSC.6-qSC.76Ns0.76Ns0.76Ns0
※これはデッキのハッシュ値を取得した後、デッキ閲覧用にこちらのURLを使うと便利というお話です。
2. ShadowverseのカードIDの構造について
デッキコードが取得できたので、そこから採用されているカードを抽出する必要があります。
といっても、カードのハッシュ値1つ1つで区切られていて、それが合計40個あるので、そのまま採用カードになるので、簡単です。
しかし、どばすぽのリンクで使われているカードのIDと各カード詳細で見れるIDが異なっていますね。
例として「フォレストレンジャー・ウェルダー」を見てみましょう。
https://shadowverse-portal.com/card/119121010
「119121010」がカードのIDとなります。
このIDには次の図のような意味が込められています。
アディショナルカードや新弾のIDだけなら予想できてきそうですね。
「119121010」がカードのIDで、「76QHo」はカードのハッシュ値となるから、、、カードのIDとハッシュ値を結びつければ良いのか!
それでも悪くはないのですが、Shadowverseには大量のカードがあります。
IDからハッシュ値、ハッシュ値からIDへの変換の仕組みを知っておくと楽になれるかと思います。
Shadowverseのハッシュ関数は割と簡単で、IDが9桁の数字であること、ハッシュ値が5桁の英数記号となっているので、プログラミング的には嬉しそうな64進数を使ってそうな予想が立ちます。
1,000,000,000 ^ (1/5) = 63.095...
実際にどばすぽのJavaScriptを解析すると次の様な64文字をハッシュ化に使用してました。
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_
64の剰余を用いてハッシュ化しているので、計算してみます。
(119121010 / 64 = 1861265 あまり 50)
(1861265 / 64 = 29082 あまり 26)
(29082 / 64 = 454 あまり 26)
(454 / 64 = 6 あまり 7)
(7 / 64 = 0 あまり 7)と計算を繰り返しています。
計算で得た「50」「17」「26」「6」「7」番目の文字を抜き出すと、「o」「H」「Q」「6」「7」となり、この文字を逆順に置き換えると「76QHo」というハッシュ値が生成されるという仕組みですね。
カードIDからハッシュ値を生成する仕組みが分かったので、新カードが追加された際でもカード一覧からカードIDとカード名を取得するだけで済みますね。
3. デッキ公開サイトの構造について
Shadowverseのデッキコードの仕組みが分かったので、実際に対象となるリストを取得してみましょう。
3-1. JCG Shadowverse Open
JCGのJavaScriptを解析すると、とあるJSONから取得していることに行き着きます。
登録情報のJSONにはデッキのハッシュ値が登録されているので、親切ですね。ユーザ名だけでなく、ユーザIDも公開されているので、名前を変えて匿名にしようとしている強豪プレイヤーや有名プレイヤーをマーキングできちゃいます。
JSONのデータから、1ユーザにつき次の情報が得られます。
このJSONを取得して、DBに入れてあげるとユーザ毎の参加履歴まで追えますね。
3-2. RAGE Shadowverse Pro League
しっかり調べていないので、見落としているだけかもしれませんが、プロリーグのサイトのJSON的なのは見つけていません。
HTMLを覗いてみましょう。
"c-game__code-inner"というクラスの中身を取得すれば良さそうですね。
HTMLの特定のクラスの内容を抽出には、PythonでBeautiful Soup使えば簡単に取得できます。
3-3. Digitus Shadowverse Amateur League
(こちらも調査不足なのですが)まずはHTMLを見てみましょう。
"btn btn-round btn-info"というクラスの中身から抽出すれば良さそうです。
・登録デッキデータの活用方法について
JCGなどからデッキ情報を取得した後、どう料理するかが、アナリストの腕の見せどころかと思います。
勝ち上がっている人のデッキ持ち込みの傾向を分析するも良し、全体の持ち込みを分析するも良し、とあるデッキタイプの採用枚数の割合を分析するも良しです。
私は、あまり見ないデッキタイプ、採用カード、組み合わせを発見した時が一番気持ち良いと感じています。
大会で勝ち上がるには、勝ち上がっているデッキだけではなく、環境に存在するデッキも知っておく必要があると思うので、全体の分析にも価値があると思っています。
以下、私が所属している構築チーム Increase from 1 to 2(@Ifto2_sv)内で共有している一例です。
・あとがき
今回の記事を公開するに当たった経緯として、半年位まではTwitter上でグループ決勝や決勝トーナメントの情報しか公開している人しか居ませんでしたが、昨年9月頃から全体情報を公開する人が登場し、その人の存在が有名プレイヤーによって周知されてしまったため、自分の持っている知識を隠す必要が無いと判断したためです。
また、最近になってJCGの解析したいという人がいたり、解析に手を出している人がTwitterで見られましたので、そういう人への応援も込めています。
今後のShadowverseの競技シーンの発展、そしてプレイや構築だけでなく、データで攻めるような人が増えてくると面白くなると思い、今回の記事を公開しました。
Shadowverseはオンラインゲームであり、頭の回転が良い人が多いので、データの良い活用方法を思いつく人が出てくると思っています。
その際にもし、この記事が少しでもお役にたてれば幸いです。
最後までお読みいただき、ありがとうございました。
過度なスクレイピングはそのサイトに負荷をかけることになるので、適切な用法と用量をお守りください。
この記事が気に入ったらサポートをしてみませんか?