def get_ranking(self, season, home=None): """ Return the position of the teams in this league Return a list of pair <Points, Team>, ordered py descending points :param season: :param stage: :param home: :return: """ import src.application.Domain.Team as Team matches = self.get_matches(season=season, finished=True) teams = self.get_teams(season=season) ranking = {team.id: 0 for team in teams} for m in matches: result, winner = m.get_winner() if not util.is_None(winner): ranking[winner.id] += 3 else: ranking[m.get_home_team().id] += 1 ranking[m.get_away_team().id] += 1 ranking_ret = [] for team, p in sorted(ranking.items(), key=operator.itemgetter(1))[::-1]: ranking_ret.append((p, Team.read_by_id(team))) return ranking_ret
def get_training_ranking(self, season, stage_to_predict, stages_to_train, home=None): """ :param season: :param stage_to_predict: :param stages_to_train: :param home: :return: """ import src.application.Domain.Team as Team matches = self.get_training_matches(season, stage_to_predict, stages_to_train) teams = self.get_teams(season=season) ranking = {team.id: 0 for team in teams} num_matches = {team.id: 0 for team in teams} for m in matches: try: result, winner = m.get_winner() if result == 0: winner_id = None else: winner_id = winner.id home_id = m.get_home_team().id away_id = m.get_away_team().id except AttributeError: continue if util.is_None(home): # total ranking util.increase_dict_entry(home_id, num_matches) util.increase_dict_entry(away_id, num_matches) if result != 0: util.increase_dict_entry(winner_id, ranking, 3) else: util.increase_dict_entry(home_id, ranking, 1) util.increase_dict_entry(away_id, ranking, 1) elif home: # home ranking util.increase_dict_entry(home_id, num_matches) if result == 1: util.increase_dict_entry(winner_id, ranking, 3) elif result == 0: util.increase_dict_entry(home_id, ranking, 1) else: # away ranking util.increase_dict_entry(away_id, num_matches) if result == 2: util.increase_dict_entry(winner_id, ranking, 3) elif result == 0: util.increase_dict_entry(away_id, ranking, 1) # divide the overall point by the number of matches done norm_ranking = dict() for team_id, points in ranking.items(): if num_matches[team_id] > 0: norm_ranking[team_id] = points / num_matches[team_id] else: norm_ranking[team_id] = 0 # order the normalized rank ranking_ret = [] for team, p in sorted(norm_ranking.items(), key=operator.itemgetter(1))[::-1]: ranking_ret.append((p, Team.read_by_id(team))) return ranking_ret