Esempio n. 1
0
def init():
    """Controls the simulations and initialize playoff data.

    :return: the result of the simulated regular season games
    """
    results = run_simulation()

    for team in TEAM_DICT.values():
        team_result = results[0][team]
        team_path = os.path.join(SIM_RESULT_PATH, team + '.json')
        with open(team_path, 'w') as result_file:
            dump(team_result, result_file)

    # create win count file
    win_count_path = os.path.join(SIM_RESULT_PATH, 'win_count.json')
    with open(win_count_path, 'w') as win_count_file:
        dump(results[1], win_count_file)

    # create loss count file
    loss_count_path = os.path.join(SIM_RESULT_PATH, 'loss_count.json')
    with open(loss_count_path, 'w') as loss_count_file:
        dump(results[2], loss_count_file)

    initialize_playoff()

    return results[0]
Esempio n. 2
0
def sort_player_into_team():
    """Create directories and files and sort data into appropriate folders.
    """
    # calculate the player ratings
    player_ratings = {}
    for player_id in PLAYER_DICT.keys():
        rating = rate_player.SinglePlayerRating(player_id)
        player_ratings[PLAYER_DICT[player_id]] = rating.get_rating()

    for team_abb in TEAM_DICT.values():
        sorted_dir = os.path.join(PLAYER_RATING_PATH, f'{team_abb}.json')
        if not os.path.exists(sorted_dir):
            # sort player ratings into teams directories
            sorted_player_ratings = []
            for index in PLAYER_DICT.keys():
                player_name = PLAYER_DICT[index]
                player_path = os.path.join(PLAYER_SEASON_PATH,
                                           f'{player_name}.json')
                with open(player_path, 'r') as player_file:
                    file = json.load(player_file)

                # put all the player rating for the same team into a dictionary
                if file[-1]["TEAM_ABBREVIATION"] == team_abb and \
                        file[-1]["SEASON_ID"] != '2016-17':
                    sorted_player_ratings.append(player_ratings[player_name])

            with open(sorted_dir, 'w') as outfile:
                json.dump(sorted_player_ratings, outfile)

    return True  # used in test cases
Esempio n. 3
0
def run_simulation():
    """Runs season simulation and create data sets storing the results.

    :return: A tuple containing four data sets, each storing different results
    """
    # create variables
    results = {team_abb: {} for team_abb in TEAM_DICT.values()}
    win_count = {team_abb: 0 for team_abb in TEAM_DICT.values()}
    loss_count = {team_abb: 0 for team_abb in TEAM_DICT.values()}

    for team_abb in TEAM_DICT.values():
        other_teams = list(TEAM_DICT.values())
        other_teams.remove(team_abb)
        for other_team in other_teams:
            results[team_abb][other_team] = []

    counter = 0  # debug use variable

    # loop through the game list and simulate all the games
    for day in GAME_LIST:
        for game in day:
            team1_id = str(game[0])
            team2_id = str(game[1])
            simulator = sim.GameSimulation(team1_id, team2_id)
            team1_abb = TEAM_DICT[team1_id]
            team2_abb = TEAM_DICT[team2_id]
            counter += 1

            # check which team won the game
            if simulator.winner == team1_id:
                results[team1_abb][team2_abb].append('W')
                results[team2_abb][team1_abb].append('L')
                win_count[team1_abb] += 1
                loss_count[team2_abb] += 1
            elif simulator.winner == team2_id:
                results[team2_abb][team1_abb].append('W')
                results[team1_abb][team2_abb].append('L')
                win_count[team2_abb] += 1
                loss_count[team1_abb] += 1

    return results, win_count, loss_count, counter
def rank_teams(season):
    team_list = TEAM_DICT.values()

    team_win_list = []
    for team_abb in team_list:
        with open(join(TEAM_SEASON_PATH, team_abb + '.json')) as data_file:
            data = load(data_file)['resultSets'][0]['rowSet']

        for row in data:
            if row[3] == season:
                team_win_list.append((team_abb, data[data.index(row)][5]))

    team_win_list.sort(key=lambda win: win[1], reverse=True)

    result = {}
    rank = 1
    for team in team_win_list:
        result[rank] = team[0]
        rank += 1

    return result
Esempio n. 5
0
def season_games(request, team, season):
    team_logo = f"images/{team}.png"
    team_name = ' '.join(TEAM_NAME_DICT[team])
    team_list = [item for item in TEAM_DICT.values()]
    team_list.remove(team)

    if season == '2017-18':
        template = 'stats_team_pages/simulated_team_page.html'
        game_dict = get_simulated_games(team)
    else:
        template = 'stats_team_pages/team_page.html'
        game_dict = get_team_page_data(team)

    context = {
        'team': team,
        'team_logo': team_logo,
        'team_name': team_name,
        'team_list': team_list,
        'game_dict': game_dict,
        'season': season
    }

    return render(request, template, context)
Esempio n. 6
0
def create_box_score_files():
    """Creates a file storing box score data of a game given the ID
    """
    # create a list of game IDs using the team game log files
    game_id_list = []
    for team in TEAM_DICT.values():
        team_path = os.path.join(TEAM_BASE_PATH, team + '.json')
        with open(team_path, 'r') as game_log_path:
            data = json.load(game_log_path)

        for single_game in data['resultSets'][0]['rowSet']:
            game_id_list.append(single_game[1])

    # output a message to let the user know that the program is running
    print("Retrieving box score data and creating files ...")

    # retrieve data using game IDs from the list and store them in a file
    for game_id in game_id_list:
        path = os.path.join(GAME_BASE_PATH, game_id + '.json')
        if not os.path.exists(path):
            print("Retrieving " + game_id + " data")
            box_score_data = game.Boxscore(game_id).json
            with open(path, 'w') as box_score_file:
                json.dump(box_score_data, box_score_file)
Esempio n. 7
0
def init():
    """Loop through every single team ID and create a file
    """
    for team_id in TEAM_DICT.keys():
        create_game_logs_file(team_id)