スプラトゥーン2の戦績データを取得する+おまけ


これはCAMPHOR- Advent Calendar 2019の7日目の記事です。6日目は@watamboさんの「中目黒のコミュニティスペースCAMPHOR- BASEにみんなおいでヨ!」でした

こんにちは。@asamasです。あさますと読みます。
みんなが「リングフィットアドベンチャー」や「ポケモンソード」などを楽しんでいる中、僕は相も変わらずスプラトゥーン2をプレイしてます。

今回は、スプラトゥーン戦績管理アプリである「ikaWidget2」に記録されているデータを引っこ抜いて、簡単な分析などをしてみようと思います。

.ikax -> .zip

ikaWidget2にはバックアップ機能があり、そこからファイルを出力すると、asamas-20191204-1011.ikaxのようなファイルが作成されます。このファイルは拡張子を変えれば、そのままzipファイルとして読み込めます。
解凍すると、下の写真のように、info.jsonとstats.realmが見つかると思います。戦績データは、stats.realmの中に入っています。

realmファイルの内容をjsonに書き出す

realm studioをインストールします。stats.realmファイルを開いた後、File > Save Data > Jsonで書き出せます。この機能に気づかずに、realm (nodejs) 使おうとしてめちゃくちゃ時間とかしました

戦績データの解析

このデータを使って、自分の苦手ステージを調べてみました。
まずはjsonファイルを取り込みましょう

# -*- coding: utf-8 -*-
import json

with open("results.json","r",encoding="utf-8") as f:
    result_json=json.load(f)

ルールごとの違いを調べます。下の例ではガチエリア(splat_zonesgachi)を調べています。ガチホコを調べたいときはrainmakergachi、ガチヤグラはtower_controlgachi、ガチアサリはclam_blitzgachiに変更してください。

area_result={}

for item in result_json["Result"]:
    if item["udemae"]<9 and item["game"]!="splat_zonesgachi": #S以上の戦績に限定&ガチエリア以外のルールを排除
        continue
    for i in result_json["Stage"]:
        if i["ID"]==item["stage"]:
            stage_name=i["name"]

    if not stage_name in area_result.keys():
        area_result[stage_name]={"win":0,"lose":0}
    if item["win"]:
        area_result[stage_name]["win"]+=1
    else:
        area_result[stage_name]["lose"]+=1

for key in sorted(area_result.keys(),key = lambda x:area_result[x]["win"]/(area_result[x]["win"] +area_result[x]["lose"]),reverse=True):
    print(key,area_result[key]["win"]/(area_result[key]["win"] +area_result[key]["lose"]))

結果はこのようになりました。
ガチエリア

ガチヤグラ

ガチホコ

モズク農園やニューオートロがどのルールでも上位に来ています。僕の持ちブキのクーゲルシュライバーで、得意とされているルールですね。一方でザトウ・チョウザメ・ムツゴロウなどの勝率は30~40%ぐらいなので、相性が悪いステージだとわかります。

今後

今回は時間がなくて中途半端な記事になってしまいましたが、ikaWidget2からデータを引っこ抜く方法はわかりましたので、LightGbmなどを使って、より詳しい分析ができたらと思います