ポケカを本気で統計してみる(準備編②)

勝率のデータの結合

前回はランダムで大量のマッチングデータを作るところまで行いました。

次はそれに対して勝率のデータをつける作業を行なっていきます。

勝率のデータとはこんな感じのマトリックスになった表ですね。

厄介なのがAさんの勝率は55%、Bさんの勝率は40%などと一律で勝率が決まってればいいのですが、この場合は相手が誰かによって勝率が変わってきます。

AはBと対戦した時は勝率46%だが、Cと対戦したときは66%、というように。

どうやって紐付けようか悩んだのですが、このマトリックスを全部対戦の列と勝率の列の2列にしてしまえばいいんじゃないか、と思いました。

ということでこのマトリックスのデータをこのように変換しました。

1が4と対戦した時の1の勝率が40%、2が1と対戦した時の2の勝率が60%、という感じ

これもRなどでできればカッコよかったのですが、残念ながらその方法がわからなかったのと、最終的にデッキタイプの量しかデータを必要としないので、10タイプあったとしても10×10で100個のデータを手打ちすればいいだけなのでこれは手作業で行いました。
(上手くやれる方法あったら誰か教えてください)

あとは、Excelのvlookupの要領で紐づければデータを加えられると思いました。

作ったデータをインポートします、これはcsv形式であれば普通のソフトと同様に取り込めるので省略します。名前はwinrateという名前で取り込んでいます。

先日作ったマッチングのデータを同様に一つの列になるようにくっつけます。コードはこのように書きました。
最初に、以前作ったデータは行列のデータだったのでデータフレーム型に書き換えます。

as.data.frame(match_TCG)

次に、ヘッダーがないのでそれぞれの列に名前をつけます。

colnames(match_TCG) <- c(“you”,”opponent”)

そして自分”you”と対戦相手”opponent”のデータをアンダーバー区切りで結合させます。

matchTCG2 <- matchTCG %>% unite(you_opponent,you,opponent,remove=FALSE)

出力すると、こんなデータができあがります。

スムーズにやっているように見えますが、この裏にかなりの数の失敗とエラーがあります

これにこの対戦の”you”側の勝率のデータを結合させるのですが、これは調べていたらdplyrというパッケージをインストールしてleft_joinというものを使えばできるそうです。
このdplyrが何かとか、パッケージのインストールとかよくわからないのですが、とりあえず言われた通りにやってみました。コードはこんな感じです。

match_TCG3 <- dplyr::left_join(match_TCG2,winrate,by="you_opponent")

するとこんなデータができ上がりました。

余分な列ができてしまいましたのでこれは後で整形するとして、とりあえず組み合わせごとの勝率のデータを紐づけることができました。

  • 1行目は3と6が対戦して、3が勝つ確率が50%

  • 2行目は7と9が対戦して、7が勝つ確率が20%

という感じです。

やはりこの辺に来るとスプレッドシートとやっていることは大きく変わらないですね。

私はエンジニアでもなんでもないので、コードの書き方とか名前の付け方とか専門家が見たらツッコミどころ満載なのでしょうが、まあ私的利用なのでご容赦いただきたいです。

今日はここまでにして、次は勝敗のシミュレーションをする方法をやっていきたいと思います。
ここまで来ればスプレッドシートでもできることなので、とりあえず結果を出すところまでは何とかなるのではと思っています。

この記事が気に入ったらサポートをしてみませんか?