スプラ2リザルトのデータセット作成
ikaWidget 2(App Store / Google Play) に記録したリザルトを、データセット (CSVファイル) に変換してみた。この形にすることで、統計解析や機械学習に使える。
Google Colaboratory (Google Colab) を利用してブラウザ上でPythonを実行してGoogle Drive上にCSVファイルを作成した。
ipynbファイル (この記事と同内容, Google Driveへコピーしたら実行可能)
https://colab.research.google.com/drive/1KbIpovBXKWU7aYkva8pksiMXyYMo3eFv?usp=sharing
1. ファイルの準備
ikaWidget2のバックアップからikaxファイルを取得
拡張子変更 : .ikax → .zip
zipファイル内からrealmファイルをコピー
Realm Studioで開く
Playerクラスなど不要なデータを削除
jsonファイルとして保存 (File>Save Data>Json) ※ 数分かかる
jsonファイルをアップロード (同じディレクトリに"stats.json"という名前で)
Realm Studioについて
フォーマットが古いというアラート (The Realm file stores data in an outdated format) が出るのでアップグレードして使用 (Upgrade in-place / Backup and upgrade どちらでもOK)
文字数に関するエラー (Invalid string length) が出る場合はプレイヤーの名前リスト (Playerクラス) を削除してリトライ
参考
2. ファイルをアップロード, Googleドライブをマウント
jsonファイルをアップロード (実行するipynbファイルと同じディレクトリに"stats.json"という名前で)
GoogleColabでGoogleドライブをマウントする
参考
# GoogleColabでGoogleドライブをマウント
from google.colab import drive
drive.mount('/content/drive')
3. 欲しいデータを二次元配列に格納
欲しいデータのキーはRealm Studioでrealmファイルを見ながら選定
(平日かどうか など検証したい変数を追加するのも良いかも)
# jsonファイルをロード
import json
with open("/content/drive/My Drive/Colab Notebooks/stats.json","r",encoding="utf-8") as json_file:
result_json = json.load(json_file)
# 出力リスト output の初期化
output = []
output.append(["勝敗", "時刻", "ルール", "ステージ", "ウデマエ", "部屋パワー", "平日", "4時間以内ゲーム数", "直近5試合勝率"])
# 平日判定メソッド
# (引数 time はYYYY-MM-DDThh:mm:ssTZD)
import datetime
def is_weekday(time):
date = datetime.date(int(time[0:4]), int(time[5:7]), int(time[8:10]))
hour = int(time[11:13])
if date.weekday() >= 5 or hour+9 <= 17: # 土日か17時前なら休日 (日本時間のため+9)
return 0
else:
return 1
# 4時間以内ゲーム数, 直近5試合の勝敗の初期化
last_time = ""
recent_games = 0
recent_wins = [0]
# 1ゲームずつ output に情報追加
for result in result_json["Result"]:
# 部屋パワー
if result["gachiEstimateXPower"] > 0: # ウデマエX
room_pw = result["gachiEstimateXPower"]
elif result["gachiEstimatePower"] > 0: # ウデマエS+以下
room_pw = result["gachiEstimatePower"]
else:
continue # 部屋のガチパワーがXパワーが0の場合はそのリザルトの処理をスキップ
# outputに出力する情報リスト item を追加していく
item = []
# 勝敗 (勝利 : 1, 敗北 : 0)
win = 1 if result["win"] else 0
item.append(win)
# 時刻・ルール・ステージ・ウデマエ・部屋パワー
item.append(result["startTime"])
item.append(result["game"]["rule"])
item.append(result["stage"]["name"])
item.append(result["udemaeName"])
item.append(room_pw)
# 平日
item.append(is_weekday(result["startTime"]))
# 日別ゲーム数
if result["startTime"][0:10] == last_time[0:10]: # 前回が同日
if int(result["startTime"][11:13]) - int(last_time[11:13]) < 4: # 4時間以内
recent_games += 1
else:
recent_games = 0
last_time = result["startTime"]
item.append(recent_games)
# 直近5試合の勝率
item.append(sum(recent_wins)/len(recent_wins))
recent_wins.append(win)
if len(recent_wins) > 5:
del recent_wins[0]
# 情報リスト item を出力リスト output に追加
output.append(item)
4. 二次元配列をCSVファイルに出力
Excelで開く場合は データ>データの取得>テキストまたはCSVから (文字コードはUTF-8を指定)
import csv
with open("/content/drive/My Drive/Colab Notebooks/stats.csv", "w") as csv_file:
writer = csv.writer(csv_file, lineterminator="\n")
writer.writerows(output)
この記事が気に入ったらサポートをしてみませんか?