Esempio n. 1
0
    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
Esempio n. 2
0
    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