
ポケカの環境をプログラミングで自動分析する話
みなさんはじめまして、おすぎと申します。
私はポケカを旧裏時代に楽しんでいて、子ども(5才児)がきっかけで2021年2月から復帰?しました。ポケモンのHPが120を軽く越えてて浦島太郎になった気分です。笑
さて、復帰してからTwitterをはじめてみると、プレイヤーのみなさんが非常に活発に情報収集したり、大会結果をつぶやいていることに感動しました。(昔はSNS自体がなかったので…)とても参考になるので画面にかじり付いていると、ふと、大会結果ツイートのフォーマットがある程度共通化されていることに気づきました。以下のようなツイート、よく見ますよね?
私のジムバトルは、
— おすぎ🔍ポケカ環境自動分析ツールつくるひと (@osgggg) April 17, 2021
使用デッキ: れんげきウーラオス(インテ型)
1回戦: インテレオンVMAX⭕️
2回戦: グリーンパーフェクション⭕️
ジメレオン進化前にみずの塔で逃げ忘れる痛恨のミスを犯しつつも、うらこうさくで細かく状況に合わせた札を持って来れたのが良かった
これを見て、このようなツイートをプログラムで自動収集して対戦結果を抜き出して統計を取れば、これまでとは違う視点で環境を分析できるのでは?と考え、環境自動分析システムの開発に着手しました。
このシステムでどのようなことが出来るかというと、例えば下図のように、

あるデッキタイプが、別のデッキタイプと対戦したときの成績を個別に見ることができたり(上記は2021年の5/10〜5/15の環境第3週のこくばバドレックスのデータ)、下図のように、

デッキタイプの分布も毎日 「自動」で最新の情報を得ることができます。
データからメタゲームが回っていることを観測
興味深い事例を1つ紹介します。下記は漆黒のガイスト・白銀のランス環境初期データです(4/24〜4/30)。

新弾発売前の事前予想どおり、こくばバドレックス人気が高く、そのこくばバドレックスに有利なムゲンダイナが大活躍。ムゲンダイナ・こくばバドレックス2強という形で環境がスタートしました。

しかし、環境が進むにつれて、こくばバドレックスが不利なはずのムゲンダイナに勝ち越すようになり状況が変化していきます。
@pokekameshi さんよりリクエストいただいたので、スクショですが、こくばとダイナの対デッキ別戦績です。取得しているデータ見る限りでは、こくばはダイナに勝ち越していて、ウーラオスに負け越しています。一方ダイナははくばに強く、三神に不利なようです。いずれちゃんと公開します。 pic.twitter.com/Ov0M99K7qv
— おすぎ🔍ポケカ環境自動分析ツールつくるひと (@osgggg) May 9, 2021
こくばがダイナに勝ち越していて、ウーラオスに負け越してる件。気になったので、環境初期(4/24〜30)のデータを掘り起こして見ました。すると弱点相性通りの結果でダイナに負け越し、ウーラオスに勝ち越してます。メタカードとプレイ練度が変化したことが影響してるかも? pic.twitter.com/M3Rbw47vag
— おすぎ🔍ポケカ環境自動分析ツールつくるひと (@osgggg) May 9, 2021
推測ですが、おそらくガラルサンダー入りのレシピが定着して、対こくばへの勝率を引き上げたことが影響したと考えています。つまり、メタゲームが回っていることを、イチ早く、客観的なデータから観測できたといえます。
漆黒のガイスト・白銀のランス環境は、環境スタートと同時に緊急事態宣言が発令され、大会が激減する時期でもありました。このような社会情勢と連動して、対戦結果ツイート数も激減。しかし、そのような状況下でもこのレベルの分析が可能で、緊急事態宣言が明けた後が今から楽しみです。
=====================
※2024年2月22日追記
その後、約3年に渡ってアップデートを繰り返し、公式発表データ(=実態)にかなり近しいデータ分析が可能になりました。
【CL福岡データ答え合わせ】
— おすぎ🔍環境自動分析システムつくるひと (@osgggg) February 22, 2024
CL福岡の公式データ発表があったので、PDL取得データとの比較・答え合わせ。
■ 最大誤差は3.7%
■ 特にリザードンのブレが大きかった
■ 一方で誤差0.1%のデッキも
■ 総じてかなりの精度が出ている様子
公式動画はこちらhttps://t.co/uAnGTrYxMO#ポケカデータラボ pic.twitter.com/Ru1J7FDbXa
=====================
本システムのデータの一部は、シティリーグ分析レポートの開発者である、ぐうぐるいさん(@ggrui_Pokekaさん)のご協力で、グラフィカルかつリアルタイムにご覧いただけます。
■Twitter対戦集計レポート公開
— ぐうぐるい@シティリーグ分析レポート (@ggrui_Pokeka) May 11, 2021
おすぎさん(@osgggg)がTwitterから自動収集されている対戦結果データを共有頂きレポート化しました!
使用デッキと対戦相手のデッキを選択することで対戦結果データから集計された勝率が表示されます
以下のリンクからご確認ください!https://t.co/b2rTqZOw7D pic.twitter.com/yqXlpCVTuS
前フリが長くなってしまいましたが...
本記事ではこのシステムのしくみや課題、今後の展望について書いてみようと思います。
わたし自身の本業はwebのディレクター兼デザイナーでして、非エンジニアです。技術的には稚拙な部分もあろうかと思いますが、どうぞお手柔らかに…。また、ポケカ自体も2021年2月から始めたばかりのほぼ初心者ですので、上級者の方々からいろいろとアドバイスいただけましたら幸いです。
本システムのしくみ
小難しい説明よりも、まず本システムのしくみをカンタンな図にまとめてみました。
※2024年2月22日追記 Twitter → X

図に示すとおり、本システムは「Twitter API」というTwitterの機能を外部からコントロールするためのしくみを利用しています。この公式APIを活用して1日に1回、ポケモンカードプレイヤーによる対戦結果ツイートを一括で検索し、取得しています。
プログラムはPHPという言語で書いています。この手のプログラムを書くなら、本来であればPython(パイソン)という言語の方が向いているように思いますが、慣れている言語のほうが開発スピードが早いので、今回は知見のあるPHPを選択しました。
「Twitter API」で目的のツイートを取得したら、次はそのツイートから下記画像のように必要な情報を抽出します。

① 大会種別
大会の種別を抽出します。種別は、ジムバトル / シティリーグ / トレーナーズリーグ / その他 の4種別に分けています。なお、「その他」のほとんどはオンライン大会などの自主大会です。
② 使用デッキ名
プレイヤーが使用しているデッキ名です。
③ 相手デッキ名と勝敗記録
対戦相手のデッキ名と、その試合の勝敗結果です。
④ 日付
ツイートの日付です。
以上のような抽出データを、1つの1つの試合として分割し、レコード(記録)として保存していきます。保存の際は下記のようにjsonという、様々なプログラミング言語で取り扱いやすいデータ形式に変換して保存しています。
[
{
"deck_name": "れんげきウーラオス",
"opponent": "グリーンパーフェクション",
"win": 1,
"lose": 0,
"date": "2021-04-17",
"field_type": "ジムバトル"
}
]
実際のファイルには下記のように保存されています。

表記ゆれについて
前述のようにツイートからデータを抽出していますが、ここで次のように思われる方もいるのではないでしょうか?
「人によってデッキ名や勝敗の書き方が違うのに、そんなにうまく抽出できるの?」
仰るとおりで、開発段階で最初にぶち当たった問題は「人によって書き方の違う表現をどう統一させるか」という問題でした。いわゆる表記ゆれ問題ですね。
例えば「三神ザシアン」というデッキ名は、私が観測している限りでは下記のような表記ゆれが存在します。
・三神ザシアン
・三神
・三ザシ
・三神ザシ
・ADPZ
・サンザシ
・さんざし
・3神ザシアン
・3神
・3ザシ
・3神ザシ
かなりの数がありますよね。おそらく人によっては、更に違う書き方をされるケースもあると思います。
この問題を解決するために、表記ゆれ吸収用のライブラリを独自に作成し、揺れる表記、例えば「さんざし」という表記は「三神ザシアン」である、というように揺れた表記を1つの呼び名に統一してあげます。
ツイートから勝敗を収集する際のハードルとして、デッキ名の表記ゆれがありますが、下記のような辞書を作成することで解決しています。逆にいえばこの辞書にはない表記はスルーされていることになります。 pic.twitter.com/kfeykWVRE5
— おすぎ🔍ポケカ環境自動分析ツールつくるひと (@osgggg) April 30, 2021
この表記ゆれライブラリは、デッキ名だけではなく、大会種別や勝敗マークなど用途に分けて複数用意しています。
後ほど触れますが、このライブラリのメンテナンスは手動です。そのため、本システムの大きな課題でもあります。
除外しているツイート・記録
Twitterのポケカ人口はとても多いので、自動でツイートを収集していると関係のない情報も多く混ざってしまいます。そういうものは自動で除外しています。
例えば下記のようなものが挙げられます。
・既に取得したことのあるツイート(重複防止のため)
・リツイート(重複防止のため)
・エクストラレギュレーションの対戦結果
・表記ゆれライブラリに該当しない、デッキ名・表現の対戦結果
・ニッチなデッキタイプ
上記のような除外処理を少しずつ増やすことで、ノイズを取り除いてきました。基本的にはノイズが入るよりも、取りこぼした方がいいと思っているので、少し厳し目に除外処理を施しています。おかげでノイズは一切なくなりました。
本システムの課題
しくみについて解説したところで、現在抱えている本システムの課題について触れようと思います。
1. デッキ名のメンテナンス問題
前にも触れましたが、デッキ名の表記ゆれライブラリは手動で管理しています。この部分だけは、自動化が絶望的で人の手でメンテナンスする必要があります。対策として考えているのは、
・ライブラリをオープンソース化し、Github公開、有志でメンテナンスする
・取りこぼしたデッキ名をログファイルに集積して、随時メンテナンス
前者はまだやるかわかりませんが、反響次第ではライブラリを公開しようと思ってます。
この辞書、Githubに公開してオープンソース化したら他の開発者さまが使ってくれたりしますかね…
— おすぎ🔍ポケカ環境自動分析ツールつくるひと (@osgggg) April 30, 2021
後者は既に実装済みで、取りこぼしたデッキタイプはログファイルへ自動で書き込まれるので日々少しずつメンテナンスしています。
=====================
※2024年2月22日追記
効率化によって、現在ではメンテナンス作業は新弾発売前に1時間程度あればほとんど完了するようになりました。
=====================
2. 大型大会への対応
現在の仕組みは、一括で「Twitter API」を通してツイートを取得してきますが、「Twitter API」にも取得制限があります。大型大会が開かれた場合、ツイートの取得が制限数を越えてしまうでしょう。「Twitter API」取得制限は15分ごとに解除される仕様なので、例えば取得を何回に分け、1晩かけて取得するなどの対応が必要そうです。有料課金すれば解決するのですが、趣味の範囲なので現時点では運用でカバーしたいところです。
=====================
※2024年2月22日追記
この課題は実装方法の改善ですぐに解決しました。現在では大型大会のデータも問題なく取得できています。
=====================
3. バイアス問題
この問題が一番の大きいと思います。
以前にTCG向けのスイスドローツールを開発されている みれさん( @milles_ptcg さん)と次のようなディスカッションをしました。
成績をTweetするかどうかがプレイヤー次第ですから、そこにバイアスが掛かると思います。
— みれ (@milles_ptcg) May 9, 2021
1例ですが、「不利相性を勝ったから嬉しくてTweet」した人が多い、などの要因があるかもしれませんね。
確かにバイアスは掛かってそうですね。敗けが多い人よりも、勝ちが多い人の方がツイートするでしょうし。
— おすぎ🔍ポケカ環境自動分析ツールつくるひと (@osgggg) May 9, 2021
一方で、1試合だけの試合結果ツイートを取得しているわけではなく、複数試合の結果をまとめた1ツイートを分析してるので、掛かっているバイアスはそこまで大きくない気もしています。
たしかに、相性についてはそこまで大きなバイアスが掛からない気がしますね。
— みれ (@milles_ptcg) May 9, 2021
成績が良い人のTweetが多いと仮定するなら、こくばの方がムゲンダイナより人数の母数が多かった、とかですかね?
(好成績の過程で打倒してるはずなので、この仮定ならTweet主の母数が多いデッキの勝率が高くなりそう)
とても鋭いご指摘で、本システムの方式でデータを取得するとどうしても指摘のようなバイアスが掛かります。このバイアスによってどの程度データが歪んでいるか、はなかなか算出が難しそうですが、データを見る際には前提として頭の片隅に置いておきたいです。
正解かどうかはわかりませんが、参考にしていただけたら嬉しいです。
— みれ (@milles_ptcg) May 9, 2021
統計調査にはバイアスがつきものですが、その分析も含めておすぎさんの取り組みを楽しみにしています。
みれさんからは、上記のようなお言葉をいただき、勉強させていただくと共に、とても励みになっております!
おそらく懸念されるバイアスは、上記以外のものもあるのではないかと予想しています。例えば…
・ツイートのフォーマットがある程度規則的な人のデータしか取れていない
・そもそもTwitterをやっている層のデータしか取れていない
・ニッチなデッキタイプはプレイングがうまい人が握っている可能性がある
などなど。。
将来的に問題を解決出来るかはわかりませんが、このほかにもお気づきの点があれば、遠慮なくTwitter( @osgggg )などでご連絡いただけましたら幸いです!
課題は山積み
書ききれませんが、この他にも課題は多くあります。例えば、現状ですとオンライン大会のデータ取得成功数が極端に少ないです。今後もオンライン大会は増加していくと考えられますので、いずれこの問題も解決していきたいと思っています。
=====================
※2024年2月22日追記
コロナ緊急事態宣言が明けたことにより、データ取得数は改善しました。また、システムのアルゴリズムアップデートにより、現在では平日1日だけでも約300〜400件程度のデータが取得できるまでに改善しています。
=====================
今後の展望
長々と語ってきましたが、まだまだやりたいことは尽きません!今後について考えていることを書いてみます。
1. 対戦結果ツイート補助ツールの開発
「除外しているツイート・記録」の項でも触れましたが、実際には取りこぼしているツイートは非常に多いです。とりこぼしている原因はやはり対戦結果ツイートの表記ゆれ問題に起因します。
下記のようなアンケートを取ってみました。
対戦結果ツイートについて質問です。みなさまツイートするときはどのように結果をつぶやいていますか?「そのほか」を選ばれた方、リプで詳細を教えていただけますととても助かります…!
— おすぎ🔍ポケカ環境自動分析ツールつくるひと (@osgggg) May 2, 2021
なんとなく予想はついてましたが、対戦結果ツイートはほぼ手書きで書かれています。これでは表記がゆれるのも納得です。おそらく大会終了直後でドタバタしているなか、時間を割いてツイートを書かれている方が多いのではないでしょうか。(私も経験があります)
そんな方の役に立ちつつ、フォーマットを統一することでデータ取得にも大きく貢献する「対戦結果ツイート補助ツール」の開発を計画しています。まだ構想段階なのでいつになるかわかりませんが、完成した暁には使っていただけますと泣いて喜びます。
2. 大型大会への対応
これは課題でも触れたとおりですね。まだモチベーションが上がりませんが、大会が近づいたら自然とモチベーション上がる気がしています。笑
JCSが無事に開催されますように…。
3. データの公開・webサイト化
現状、データを皆さまに共有する手段があまり多くありません。いずれはwebサイト化して、最新情報をよりグラフィカルにわかりやすく皆さまにお届けできればと考えています。
色々と書きましたが、このほかにも思いついているアイデアはいくつかあって、書ききれません。笑 時間は有限で、いつまでモチベーションが続くかはわかりませんが、ゆっくり少しずつ、楽しみながらやっていこうと思います。
さいごに
こんなに長い記事を最後まで読んでいただきありがとうございました!
18年?ぶりくらいにポケカに復帰して、子どもと一緒に対戦したり、イベント行ったり、大人になってから身に付けた知見で、今回のような楽しみ方ができることにとてもワクワクしています。ポケカは本当に楽しい!
プレイヤーとしての練習が完全に疎かになっているので、もう少ししたらプレイヤーとしても精進したいと思っています。
新チーム発足の告知

今回、シティリーグ分析レポートを運営する同志、ぐうぐるいさん(@ggrui_Pokekaさん)と新規に「ポケカ データ ラボ(PDL)」というチームを立ち上げることになりました!ぐうぐるいさんには本システムに関しても様々なカタチでご協力いただき、本当に感謝です!
「ポケカデータラボ(PDL)」の理念は、
ポケモンカードゲームの対戦環境を、技術やデータのチカラで、
「より深く解明する」
「わかりやすく、伝える」
というものです。カッコいいこと言ってますがこれまで通り、それぞれがやりたいことを、連携しながら、一歩ずつ着実に進めていきたいと考えています。また、活動についてはTwitterやNoteで少しずつご報告していきます。
もし我々の活動に興味を持つ方がいましたら、ぜひTwitterアカウントのフォローしていただき、リプライやDMなどで絡んでいただけましたら幸いです!
=====================
※2024年2月22日追記
記事執筆から約3年が経過した現在、四天王やプロプレイヤー、YouTuberさんなど、多くの方に活用いただけるまでに広まりました。
2023年6月にはnoteメディア「紙と人」によって座談会が企画され、お話する機会もいただき、記事化されました。現在は有料記事ですが、かなり深い話をしているので興味のある方はぜひ。
=====================
※2024年6月10日追記
2023年、Twitterのサービス名が「X」へと変更あと、X API(旧Twitter API)が有料化されました。このため、システム運用のために毎月100ドルの経費が発生し、約1年ほど赤字運営となっていたため、2024年6月にメンバーシップ化し、一部のサービスを実質有料化しました。詳しくは以下の記事をご確認ください。
=====================