前フリ
とある先輩の名言で「エクセルは入力ツールとして最強」というものがあって、
エンジニアがちょっと入力するツールとしては本当に群を抜いて最強だと私も同感しています。
そんな経緯がありまして、
わりとエクセルやスプレッドシートで趣味ツールを作っております。
ポケモンカードついて
ポケモンカードは60枚のカードの組み合わせ(デッキ)を作って、相手と対戦する2人用のカードゲームです。
上記のデッキは結構多種多様であり、特にエクストラと呼ばれるレギュレーションでは100にも近い種類のデッキタイプが存在します(肌感覚)
そんななかでデッキの相性を把握するのは困難を極めます。
そこで、対戦結果を集めて統計を取れば環境の中で真に強い(相性とデッキ分布的を加味した勝率が高い)のが見えてくるんじゃないかと思って
スプレッドシートで対戦結果を集めて、表にしてみました。
作った表
デッキのX勝-Y敗 というデータを、各デッキごとに持たせて、
その個別データと、トータルの勝率を表で表示しています。
先攻後攻で有利さが変わるため、そのへんも書いています
(1) 入力シート
こんなシートに入力しています。
- B列に先攻側のデッキ
- C列に後攻側のデッキ
- D列に、Bの勝ち数
- E列に、Cの勝ち数
をそれぞれ記録します。
A列は、メモとして日付を書いています。
冒頭で述べてた入力しやすいをつきつめた結果です。
※ 以前はWebフォームとか作ってたのですが、
自分一人しか入力しないツールだったので、
スプレッドシートで作り直した経緯が有ります。
(2) 表の各セルの計算式
セルで直接計算したかったので、ゴリッと入力してしまいました。
ここが結構カオスってるのですが、1度作れば...(喉元を過ぎました)
A2セル
=SORT(UNIQUE('シート1'!B:B))
D1セル
=TRANSPOSE(SORT(UNIQUE('シート1'!C:C)))
デッキ名のユニークなリストを名前でソートして表示しています。
D2セル
=SUMIFS('シート1'!$D:$D=SUMIFS('シート1'!$D:$D,'シート1'!$B:$B,"="&$A2) &"-"& SUMIFS('シート1'!$E:$E,'シート1'!$B:$B,"="&$A2),'シート1'!$B:$B,"="&$A2,'シート1'!$C:$C,"="&D$1) &"-"& SUMIFS('シート1'!$E:$E,'シート1'!$B:$B,"="&$A2,'シート1'!$C:$C,"="&D$1)
A2セルと、D1セルに書いてあるデッキ名の組み合わせを、対戦履歴の入力シートから引っ張ってきて、
そこの勝ち総数と負け総数を表示しています。
B2セル
=SUMIFS('シート1'!$D:$D,'シート1'!$B:$B,"="&$A2) &"-"& SUMIFS('シート1'!$E:$E,'シート1'!$B:$B,"="&$A2)
D2セルとおんなじ感じで、
A2セルに書いてあるデッキ名を、対戦履歴の入力シートから引っ張ってきて、
そこの勝ち総数と負け総数を表示しています。
C2セル
= SUMIFS('シート1'!$D:$D,'シート1'!$B:$B,"="&$A2) / (SUMIFS('シート1'!$D:$D,'シート1'!$B:$B,"="&$A2) + SUMIFS('シート1'!$E:$E,'シート1'!$B:$B,"="&$A2))
勝ち数と負け数が取れるのを応用して、勝率を計算しています。
ツールの結果
このツールの分析結果を使って、ポケカCLエクストラに使うデッキを選択したところ、
初年度は 7x位 (上位10%)
翌年度は 4x位 (上位6%)
と、結構上位の成績を収めることができました!
せっかくエンジニアをなりわいにしているので、
趣味分野でも活かしてゲームを有利に進めたいです。