swdata/calc_dnc_players.py
2018-07-15 12:22:05 +08:00

32 lines
1.2 KiB
Python

import json
from matplotlib import pyplot as plt
from island.match import Match
from island.matches import Matches
import numpy as np
matches = Matches.from_profile_expr(lambda r: True)
max_round = 15
total_players = 0
dnc_players = 0
for j in range(len(matches.data)):
players = set()
for r in matches.data[j].query('player', 'join').raw_data:
players.add(r['pid'])
total_players += len(players)
for i in range(int(matches.data[j].query('game', 'created').first()['info']['game_end_at'])):
actions = matches.data[j].query('action', 'done').where(lambda x: x['rno']==i+1)
for r in actions.raw_data:
if r['a'] in players:
if actions.where(lambda y: (y['a'] == r['a'] and y['b'] != r['b']) or (y['b'] == r['a'] and y['a'] != r['b'])).count() > 0:
dnc_players += 1
players.remove(r['a'])
if r['b'] in players:
if actions.where(lambda y: (y['a'] == r['b'] and y['b'] != r['a']) or (y['b'] == r['b'] and y['a'] != r['a'])).count() > 0:
dnc_players += 1
players.remove(r['b'])
print("dnc=%d, total=%d, frac=%f" % (dnc_players, total_players, dnc_players / total_players))