def process_starters(self, starters, players, date, site): starters_output = [] for num, player_id in enumerate(starters, start=1): player = players[player_id] # skip game if starter with insufficient history if not self.player_history_met(player, date, self.min_player_games): return None # get previous dates to use for accessing dicts last_played_date, last_shot_date = utilities.prev_date( player.dates, date), utilities.prev_date(player.shots_dates, date) # access the stats dicts from player object for previous game date curr_player_vars = self.create_player_vars(player, last_played_date, last_shot_date, site, 'start_p' + str(num)) starters_output.append(curr_player_vars) if len(starters_output) is not 5: print 'WRONG NUMBER OF STARTERS' return None return starters_output
def process_bench(self, starters, player_list, inactive_list, players, date, site): position_names = sorted(self.bench_positions.keys()) bench_output = {key: [] for key in position_names} bench_output.update({'WC': []}) # iterate through each player id on the roster for num, player_id in enumerate(player_list, start=1): # skip player if player was inactive or in the starting lineup if (player_id in inactive_list) or (player_id in starters): continue # get Player object for given player player = players[player_id] # skip player if insufficient history if not self.player_history_met(player, date, self.min_player_games): continue # get previous dates to use for accessing dicts last_played_date, last_shot_date = utilities.prev_date(player.dates, date), utilities.prev_date(player.shots_dates, date) # create player variables from dicts on previous date curr_player_vars = self.create_player_vars(player, last_played_date, last_shot_date, site, 'bench_p' + str(num)) # determine player position and secondary player position mapped_position = self.position_mappings[player.position] flex_position = self.flex_pos_mappings[player.position] # add to list of players in the main position if not full if len(bench_output[mapped_position]) < self.bench_positions[mapped_position]: bench_output[mapped_position].append(curr_player_vars) continue # add to secondary position if that list is not full elif len(bench_output[flex_position]) < self.bench_positions[flex_position]: bench_output[flex_position].append(curr_player_vars) # otherwise hold in wildcard position else: bench_output['WC'].append(curr_player_vars) final_bench_output = [] # fill in positions w/o enough players using wildcard positions for pos in position_names: max_num_at_position = self.bench_positions[pos] num_players_short = max_num_at_position - len(bench_output[pos]) for _ in range(num_players_short): try: bench_output[pos].append(bench_output['WC'].pop(0)) except: return None # if still short return an error if (len(bench_output[pos]) < max_num_at_position): print 'Still short after adding WCs' return None else: final_bench_output.extend(bench_output[pos]) return final_bench_output
def form_team_vars(self, home_team, away_team, date): ''' form_team_vars: collects team-level variables by accessing Team objects for the home and away teams. Collects them into DataVars objects and returns them. ''' # get previous dates by home and away teams home_prev_date, away_prev_date = utilities.prev_date( home_team.shots_dates, date), utilities.prev_date(away_team.shots_dates, date) # initialize DataVars object team_vars = data_objects.DataVars() # go through lists of ShotsData objects and add them into DataVars for shots_item in home_team.shots_data: team_vars.add_shots_data(shots_item, home_prev_date, 'home') for shots_item in away_team.shots_data: team_vars.add_shots_data(shots_item, away_prev_date, 'away') return team_vars
def form_team_vars(self, home_team, away_team, date): ''' form_team_vars: collects team-level variables by accessing Team objects for the home and away teams. Collects them into DataVars objects and returns them. ''' # get previous dates by home and away teams home_prev_date, away_prev_date = utilities.prev_date(home_team.shots_dates, date), utilities.prev_date(away_team.shots_dates, date) # initialize DataVars object team_vars = data_objects.DataVars() # go through lists of ShotsData objects and add them into DataVars for shots_item in home_team.shots_data: team_vars.add_shots_data(shots_item, home_prev_date, 'home') for shots_item in away_team.shots_data: team_vars.add_shots_data(shots_item, away_prev_date, 'away') return team_vars
def process_starters(self, starters, players, date, site): starters_output = [] for num, player_id in enumerate(starters, start=1): player = players[player_id] # skip game if starter with insufficient history if not self.player_history_met(player, date, self.min_player_games): return None # get previous dates to use for accessing dicts last_played_date, last_shot_date = utilities.prev_date(player.dates, date), utilities.prev_date(player.shots_dates, date) # access the stats dicts from player object for previous game date curr_player_vars = self.create_player_vars(player, last_played_date, last_shot_date, site, 'start_p' + str(num)) starters_output.append(curr_player_vars) if len(starters_output) is not 5: print 'WRONG NUMBER OF STARTERS' return None return starters_output
def find_prev_dates(home_team, away_team, date): home_prev_date = utilities.prev_date(home_team.dates, date) away_prev_date = utilities.prev_date(away_team.dates, date) return home_prev_date, away_prev_date
def process_bench(self, starters, player_list, inactive_list, players, date, site): position_names = sorted(self.bench_positions.keys()) bench_output = {key: [] for key in position_names} bench_output.update({'WC': []}) # iterate through each player id on the roster for num, player_id in enumerate(player_list, start=1): # skip player if player was inactive or in the starting lineup if (player_id in inactive_list) or (player_id in starters): continue # get Player object for given player player = players[player_id] # skip player if insufficient history if not self.player_history_met(player, date, self.min_player_games): continue # get previous dates to use for accessing dicts last_played_date, last_shot_date = utilities.prev_date( player.dates, date), utilities.prev_date(player.shots_dates, date) # create player variables from dicts on previous date curr_player_vars = self.create_player_vars(player, last_played_date, last_shot_date, site, 'bench_p' + str(num)) # determine player position and secondary player position mapped_position = self.position_mappings[player.position] flex_position = self.flex_pos_mappings[player.position] # add to list of players in the main position if not full if len(bench_output[mapped_position] ) < self.bench_positions[mapped_position]: bench_output[mapped_position].append(curr_player_vars) continue # add to secondary position if that list is not full elif len(bench_output[flex_position] ) < self.bench_positions[flex_position]: bench_output[flex_position].append(curr_player_vars) # otherwise hold in wildcard position else: bench_output['WC'].append(curr_player_vars) final_bench_output = [] # fill in positions w/o enough players using wildcard positions for pos in position_names: max_num_at_position = self.bench_positions[pos] num_players_short = max_num_at_position - len(bench_output[pos]) for _ in range(num_players_short): try: bench_output[pos].append(bench_output['WC'].pop(0)) except: return None # if still short return an error if (len(bench_output[pos]) < max_num_at_position): print 'Still short after adding WCs' return None else: final_bench_output.extend(bench_output[pos]) return final_bench_output