Exemplo n.º 1
0
def game_in_progress() :

	if(debug) : print("Game is in Progress")

	
	game_info = mlbgame.day(today_year,today_month,today_day, HOME_TEAM, AWAY_TEAM)
	curr_game_id = game_info[0].game_id
	global CURR_INNING_INFO

	status_of_game = mlbgame.overview(curr_game_id)
	#if(debug) : print("status: " + status_of_game.status)
	while(status_of_game.status == "In Progress") : #game_info[0].game_status == IN_PROGRESS
		
		#status_of_game = mlbgame.overview(curr_game_id)

		#####################################################
		#####################################################
		#Check status of batter (balls and strikes)
		check_batter_status(status_of_game)

		#####################################################
		#####################################################
		#check if anyones one base
		check_bases_status(status_of_game)

		#####################################################
		#####################################################
		#Check status of inning (balls and strikes)
		check_inning_status(status_of_game)

		#####################################################
		#####################################################
		#check the current inning scores
		check_inning_scores(curr_game_id)

		#####################################################
		#####################################################
		check_RHE_status(status_of_game)

		#hold the updates until "MID or END of inning" is over
		midOrEnd = str(status_of_game.inning_state)
		while(midOrEnd == 'Middle' or midOrEnd == 'End') :
			#if(debug) : print("mid or end of inning")
			#time.sleep(10)
			status_of_game = mlbgame.overview(curr_game_id)
			midOrEnd = str(status_of_game.inning_state)

		time.sleep(10) #update scores every 30s
		#game_info = mlbgame.day(today_year,today_month,today_day, HOME_TEAM, AWAY_TEAM)
		status_of_game = mlbgame.overview(curr_game_id)
Exemplo n.º 2
0
 def __game_index_for(self, team_name):
     team_index = 0
     team_idxs = [
         i for i, game in enumerate(self.games)
         if team_name in [game.away_team, game.home_team]
     ]
     if len(team_idxs) > 0:
         attempts_remaining = 5
         while attempts_remaining > 0:
             try:
                 team_index = next((i for i in team_idxs if Status.is_live(
                     mlbgame.overview(self.games[i].game_id))),
                                   team_idxs[0])
                 self.network_issues = False
                 break
             except URLError, e:
                 self.network_issues = True
                 debug.error(
                     "Networking Error while refreshing live game status of {}. {} retries remaining."
                     .format(team_name, attempts_remaining))
                 debug.error("URLError: {}".format(e.reason))
                 attempts_remaining -= 1
                 time.sleep(NETWORK_RETRY_SLEEP_TIME)
             except ValueError:
                 self.network_issues = True
                 debug.error(
                     "Value Error while refreshing live game status of {}. {} retries remaining."
                     .format(team_name, attempts_remaining))
                 debug.error(
                     "ValueError: Failed to refresh overview for {}".format(
                         self.current_game().game_id))
                 attempts_remaining -= 1
                 time.sleep(NETWORK_RETRY_SLEEP_TIME)
Exemplo n.º 3
0
 def refresh_overview(self):
     urllib.urlcleanup()
     attempts_remaining = 5
     while attempts_remaining > 0:
         try:
             self.overview = mlbgame.overview(self.current_game().game_id)
             self.__update_layout_state()
             self.needs_refresh = False
             self.print_overview_debug()
             self.network_issues = False
             break
         except URLError, e:
             self.network_issues = True
             debug.error(
                 "Networking Error while refreshing the current overview. {} retries remaining."
                 .format(attempts_remaining))
             debug.error("URLError: {}".format(e.reason))
             attempts_remaining -= 1
             time.sleep(NETWORK_RETRY_SLEEP_TIME)
         except ValueError:
             self.network_issues = True
             debug.error(
                 "Value Error while refreshing current overview. {} retries remaining."
                 .format(attempts_remaining))
             debug.error(
                 "ValueError: Failed to refresh overview for {}".format(
                     self.current_game().game_id))
             attempts_remaining -= 1
             time.sleep(NETWORK_RETRY_SLEEP_TIME)
Exemplo n.º 4
0
  def render(self):
    """Renders a game or games depending on the configuration.
    Infinitely loops up to 15 minutes before a refresh of the list of games
    is required.
    """
    self.canvas.Fill(*ledcolors.scoreboard.fill)
    current_game_index = self.__get_game_from_args()
    game = self.games[current_game_index]
    starttime = time.time()

    while True:
      overview = mlbgame.overview(game.game_id)
      self.__refresh_game(game, overview)

      refresh_rate = PREGAME_RATE
      if overview.status == IN_PROGRESS:
        refresh_rate = SCOREBOARD_RATE

      time.sleep(refresh_rate)

      endtime = time.time()
      if endtime - self.creation_time >= FIFTEEN_MINUTES:
        return
      time_delta = endtime - starttime

      self.canvas.Fill(*ledcolors.scoreboard.fill)

      # TODO: https://github.com/ajbowler/mlb-led-scoreboard/issues/30
      # The time_delta comparison will need to change depending on scrolling text size
      if self.config.rotate_games and time_delta >= FIFTEEN_SECONDS:
        starttime = time.time()
        self.current_scrolling_text_pos = self.canvas.width
        current_game_index = bump_counter(current_game_index, self.games)
        game = self.games[current_game_index]
Exemplo n.º 5
0
    def render(self):
        """Renders a game or games depending on the configuration.
    Infinitely loops up to 15 minutes before a refresh of the list of games
    is required.
    """
        self.canvas.Fill(*ledcolors.scoreboard.fill)
        current_game_index = self.__get_game_from_args()
        game = self.games[current_game_index]
        starttime = time.time()

        while True:
            overview = mlbgame.overview(game.game_id)
            self.__refresh_game(game, overview)

            refresh_rate = PREGAME_RATE
            if overview.status == IN_PROGRESS:
                refresh_rate = SCOREBOARD_RATE

            time.sleep(refresh_rate)

            endtime = time.time()
            if endtime - self.creation_time >= FIFTEEN_MINUTES:
                return
            time_delta = endtime - starttime

            self.canvas.Fill(*ledcolors.scoreboard.fill)

            # TODO: https://github.com/ajbowler/mlb-led-scoreboard/issues/30
            # The time_delta comparison will need to change depending on scrolling text size
            if self.config.rotate_games and time_delta >= FIFTEEN_SECONDS:
                starttime = time.time()
                self.current_scrolling_text_pos = self.canvas.width
                current_game_index = bump_counter(current_game_index,
                                                  self.games)
                game = self.games[current_game_index]
Exemplo n.º 6
0
 def fetch_preferred_team_overview(self):
   if not self.is_offday_for_preferred_team():
     urllib.urlcleanup()
     game = self.games[self.game_index_for_preferred_team()]
     game_overview = mlbgame.overview(game.game_id)
     debug.log("Preferred Team's Game Status: {}, {} {}".format(game_overview.status, game_overview.inning_state, game_overview.inning))
     return game_overview
Exemplo n.º 7
0
 def fetch_preferred_team_overview(self):
   if not self.is_offday_for_preferred_team():
     urllib.urlcleanup()
     game = self.games[self.game_index_for_preferred_team()]
     game_overview = mlbgame.overview(game.game_id)
     debug.log("Preferred Team's Game Status: {}, {} {}".format(game_overview.status, game_overview.inning_state, game_overview.inning))
     return game_overview
Exemplo n.º 8
0
  def __current_game_data(self, game):
    game_id = game.game_id

    overview = mlbgame.overview(game_id)
    game_data = {}
    game_data['away_team'] = overview.away_name_abbrev
    game_data['home_team'] = overview.home_name_abbrev
    game_data['inning'] = self.__current_inning(game_id)
    return game_data
Exemplo n.º 9
0
def overview(id):
	data = mlbgame.overview(id)
	
	params = {
		'game_id': id,
		'away_team_id': data.away_team_id,
		'home_team_id': data.home_team_id,
		'home_code': data.home_code,
		'away_code': data.away_code
	}

	return params
Exemplo n.º 10
0
 def get_inning(self):
     self.overview = mlbgame.overview(self.game.game_id)
     self.inning_state = self.overview.inning_state.lower()
     self.inning = self.overview.inning
     # Format the inning number...
     if self.inning == 1:
         self.inning = str(self.inning) + 'st'
     elif self.inning == 2:
         self.inning = str(self.inning) + 'nd'
     elif self.inning == 3:
         self.inning = str(self.inning) + 'rd'
     else:
         self.inning = str(self.inning) + 'th'
Exemplo n.º 11
0
def post_game() :
	game_info = mlbgame.day(today_year,today_month,today_day, HOME_TEAM, AWAY_TEAM)
	curr_game_id = game_info[0].game_id
	status_of_game = mlbgame.overview(curr_game_id)


	if(debug) : print("In the post_game state: ")

	#game_info = mlbgame.day(today_year,today_month,today_day, HOME_TEAM, AWAY_TEAM)
	
	if(debug) : print("FINAL SCORE: [" + str(status_of_game.home_team_runs) + "][" + str(status_of_game.away_team_runs) + "]")
	init_post_game_board(str(status_of_game.home_team_runs), str(status_of_game.away_team_runs), team_abrev[status_of_game.home_team_name], team_abrev[status_of_game.away_team_name])
	time.sleep(1800) #check every 30 mins
Exemplo n.º 12
0
    def __current_game_data(self, game):
        game_id = game.game_id

        overview = mlbgame.overview(game_id)
        game_data = {}
        game_data['away_team'] = overview.away_name_abbrev
        game_data['home_team'] = overview.home_name_abbrev
        try:
            game_data['inning'] = self.__current_inning(game_id)
        except ValueError:
            print('No game data could be found for %s @ %s' %
                  (game_data['away_team'], game_data['home_team']))
            return False
        return game_data
Exemplo n.º 13
0
 def refresh_overview(self):
   attempts_remaining = 5
   while attempts_remaining > 0:
     try:
       self.overview = mlbgame.overview(self.current_game().game_id)
       self.needs_refresh = False
       self.print_overview_debug()
       break
     except URLError, e:
       debug.error("URLError: {}".format(e.reason))
       attempts_remaining -= 1
       time.sleep(NETWORK_RETRY_SLEEP_TIME)
     except ValueError:
       debug.error("ValueError: Failed to refresh overview for {}".format(self.current_game().game_id))
       attempts_remaining -= 1
       time.sleep(NETWORK_RETRY_SLEEP_TIME)
Exemplo n.º 14
0
 def refresh_overview(self):
   urllib.urlcleanup()
   attempts_remaining = 5
   while attempts_remaining > 0:
     try:
       self.overview = mlbgame.overview(self.current_game().game_id)
       self.__update_layout_state()
       self.needs_refresh = False
       self.print_overview_debug()
       break
     except URLError, e:
       debug.error("URLError: {}".format(e.reason))
       attempts_remaining -= 1
       time.sleep(NETWORK_RETRY_SLEEP_TIME)
     except ValueError:
       debug.error("ValueError: Failed to refresh overview for {}".format(self.current_game().game_id))
       attempts_remaining -= 1
       time.sleep(NETWORK_RETRY_SLEEP_TIME)
Exemplo n.º 15
0
def data_for_game_ids(game_ids):
    data = []
    for game_id in game_ids:
        game = mlbgame.overview(game_id)
        data.append({
            'away_team_id':
            game.away_team_id,
            'home_team_id':
            game.home_team_id,
            'away_team_win_pct':
            float(game.away_win) /
            (float(game.away_win) + float(game.away_loss)),
            'home_team_win_pct':
            float(game.home_win) /
            (float(game.home_win) + float(game.home_loss)),
            'winning_team':
            game.home_team_id
            if int(game.home_team_runs) > int(game.away_team_runs) else
            game.away_team_id
        })
    return pd.DataFrame(data)
Exemplo n.º 16
0
    def get_game_info(self) -> Dict[str, Any]:
        """
        Get info for a particular game ID.

        Returns:
            Dict[str, Any]: Game info in JSON format

        """
        # Get the overview.
        overview = mlbgame.overview(self.game_id)
        # Return formatted data.
        return {
            'game_id': self.game_id,
            'status': overview.status,
            'inning': overview.inning,
            'inning_state': overview.inning_state,
            'home_team_runs': overview.home_team_runs,
            'away_team_runs': overview.away_team_runs,
            'home_team_name': overview.home_team_name,
            'away_team_name': overview.away_team_name,
            'time_date': overview.time_date,
            'ampm': overview.ampm
        }
Exemplo n.º 17
0
 def test_overview(self):
     overview = mlbgame.overview('2016_08_02_nyamlb_nynmlb_1')
     self.assertEqual(overview.ampm, 'PM')
     self.assertEqual(overview.attendance, '42,819')
     self.assertEqual(overview.aw_lg_ampm, 'PM')
     self.assertEqual(overview.away_ampm, 'PM')
     self.assertEqual(overview.away_code, 'nya')
     self.assertEqual(overview.away_division, 'E')
     self.assertEqual(overview.away_file_code, 'nyy')
     self.assertEqual(overview.away_games_back, 9.0)
     self.assertEqual(overview.away_games_back_wildcard, 5.0)
     self.assertEqual(overview.away_league_id, 103)
     self.assertEqual(overview.away_loss, 53)
     self.assertEqual(overview.away_name_abbrev, 'NYY')
     self.assertEqual(
         overview.away_preview_link,
         '/mlb/gameday/index.jsp?gid=2016_08_02_nyamlb_nynmlb_1&mode=preview&c_id=mlb'
     )
     self.assertIsInstance(overview.away_probable_pitcher_era, str)
     self.assertIsInstance(overview.away_probable_pitcher_first, str)
     self.assertIsInstance(overview.away_probable_pitcher_first_name, str)
     self.assertIsInstance(overview.away_probable_pitcher_id, str)
     self.assertIsInstance(overview.away_probable_pitcher_last, str)
     self.assertIsInstance(overview.away_probable_pitcher_last_name, str)
     self.assertIsInstance(overview.away_probable_pitcher_losses, str)
     self.assertIsInstance(
         overview.away_probable_pitcher_name_display_roster, str)
     self.assertIsInstance(overview.away_probable_pitcher_number, str)
     self.assertIsInstance(overview.away_probable_pitcher_s_era, str)
     self.assertIsInstance(overview.away_probable_pitcher_s_losses, str)
     self.assertIsInstance(overview.away_probable_pitcher_s_wins, str)
     self.assertIsInstance(overview.away_probable_pitcher_stats_season, str)
     self.assertIsInstance(overview.away_probable_pitcher_stats_type, str)
     self.assertIsInstance(overview.away_probable_pitcher_throwinghand, str)
     self.assertIsInstance(overview.away_probable_pitcher_wins, str)
     self.assertEqual(
         overview.away_recap_link,
         '/mlb/gameday/index.jsp?gid=2016_08_02_nyamlb_nynmlb_1&mode=recap&c_id=mlb'
     )
     self.assertEqual(overview.away_sport_code, 'mlb')
     self.assertEqual(overview.away_team_city, 'NY Yankees')
     self.assertEqual(overview.away_team_errors, 2)
     self.assertEqual(overview.away_team_hits, 6)
     self.assertEqual(overview.away_team_id, 147)
     self.assertEqual(overview.away_team_name, 'Yankees')
     self.assertEqual(overview.away_team_runs, 1)
     self.assertEqual(overview.away_time, '7:10')
     self.assertEqual(overview.away_time_zone, 'ET')
     self.assertEqual(overview.away_win, 53)
     self.assertEqual(overview.balls, 0)
     self.assertEqual(overview.date, 'August 2, 2016')
     self.assertEqual(overview.day, 'TUE')
     self.assertEqual(overview.double_header_sw, 'N')
     self.assertEqual(overview.elapsed_time, '2:39')
     self.assertEqual(overview.first_pitch_et, '')
     self.assertEqual(
         overview.game_data_directory,
         '/components/game/mlb/year_2016/month_08/day_02/gid_2016_08_02_nyamlb_nynmlb_1'
     )
     self.assertEqual(overview.game_id, '2016/08/02/nyamlb-nynmlb-1')
     self.assertEqual(overview.game_nbr, 1)
     self.assertEqual(overview.game_pk, 448453)
     self.assertEqual(overview.game_type, 'R')
     self.assertEqual(overview.gameday_link, '2016_08_02_nyamlb_nynmlb_1')
     self.assertEqual(overview.gameday_sw, 'P')
     self.assertEqual(overview.hm_lg_ampm, 'PM')
     self.assertEqual(overview.home_ampm, 'PM')
     self.assertEqual(overview.home_code, 'nyn')
     self.assertEqual(overview.home_division, 'E')
     self.assertEqual(overview.home_file_code, 'nym')
     self.assertEqual(overview.home_games_back, 8.0)
     self.assertEqual(overview.home_games_back_wildcard, '-')
     self.assertEqual(overview.home_league_id, 104)
     self.assertEqual(overview.home_loss, 51)
     self.assertEqual(overview.home_name_abbrev, 'NYM')
     self.assertEqual(
         overview.home_preview_link,
         '/mlb/gameday/index.jsp?gid=2016_08_02_nyamlb_nynmlb_1&mode=preview&c_id=mlb'
     )
     self.assertIsInstance(overview.home_probable_pitcher_era, str)
     self.assertIsInstance(overview.home_probable_pitcher_first, str)
     self.assertIsInstance(overview.home_probable_pitcher_first_name, str)
     self.assertIsInstance(overview.home_probable_pitcher_id, str)
     self.assertIsInstance(overview.home_probable_pitcher_last, str)
     self.assertIsInstance(overview.home_probable_pitcher_last_name, str)
     self.assertIsInstance(overview.home_probable_pitcher_losses, str)
     self.assertIsInstance(
         overview.home_probable_pitcher_name_display_roster, str)
     self.assertIsInstance(overview.home_probable_pitcher_number, str)
     self.assertIsInstance(overview.home_probable_pitcher_s_era, str)
     self.assertIsInstance(overview.home_probable_pitcher_s_losses, str)
     self.assertIsInstance(overview.home_probable_pitcher_s_wins, str)
     self.assertIsInstance(overview.home_probable_pitcher_stats_season, str)
     self.assertIsInstance(overview.home_probable_pitcher_stats_type, str)
     self.assertIsInstance(overview.home_probable_pitcher_throwinghand, str)
     self.assertIsInstance(overview.home_probable_pitcher_wins, str)
     self.assertEqual(
         overview.home_recap_link,
         '/mlb/gameday/index.jsp?gid=2016_08_02_nyamlb_nynmlb_1&mode=recap&c_id=mlb'
     )
     self.assertEqual(overview.home_sport_code, 'mlb')
     self.assertEqual(overview.home_team_city, 'NY Mets')
     self.assertEqual(overview.home_team_errors, 0)
     self.assertEqual(overview.home_team_hits, 10)
     self.assertEqual(overview.home_team_id, 121)
     self.assertEqual(overview.home_team_name, 'Mets')
     self.assertEqual(overview.home_team_runs, 7)
     self.assertEqual(overview.home_time, '7:10')
     self.assertEqual(overview.home_time_zone, 'ET')
     self.assertEqual(overview.home_win, 55)
     self.assertEqual(overview.id, '2016/08/02/nyamlb-nynmlb-1')
     self.assertEqual(overview.ind, 'F')
     self.assertEqual(overview.inning, 9)
     self.assertEqual(overview.inning_state, '')
     self.assertEqual(overview.is_no_hitter, 'N')
     self.assertEqual(overview.is_perfect_game, 'N')
     self.assertEqual(overview.league, 'AN')
     self.assertEqual(overview.location, 'Flushing, NY')
     self.assertEqual(overview.note, '')
     self.assertEqual(overview.official_scorer, 'Jordan Sprechman')
     self.assertEqual(overview.original_date, '2016/08/02')
     self.assertEqual(overview.outs, 3)
     self.assertEqual(
         overview.photos_link,
         '/mlb/gameday/index.jsp?gid=2016_08_02_nyamlb_nynmlb_1&mode=photos'
     )
     self.assertEqual(
         overview.preview,
         '/mlb/gameday/index.jsp?gid=2016_08_02_nyamlb_nynmlb_1&mode=preview&c_id=mlb'
     )
     self.assertEqual(overview.scheduled_innings, 9)
     self.assertEqual(overview.start_time, '7:11 PM')
     self.assertEqual(overview.status, 'Final')
     self.assertEqual(overview.status_ind, 'F')
     self.assertEqual(overview.strikes, 0)
     self.assertEqual(overview.tbd_flag, 'N')
     self.assertEqual(overview.tiebreaker_sw, 'N')
     self.assertEqual(overview.time, '7:10')
     self.assertEqual(overview.time_aw_lg, '7:10')
     self.assertEqual(overview.time_date, '2016/08/02 7:10')
     self.assertEqual(overview.time_date_aw_lg, '2016/08/02 7:10')
     self.assertEqual(overview.time_date_hm_lg, '2016/08/02 7:10')
     self.assertEqual(overview.time_hm_lg, '7:10')
     self.assertEqual(overview.time_zone, 'ET')
     self.assertEqual(overview.time_zone_aw_lg, -4)
     self.assertEqual(overview.time_zone_hm_lg, -4)
     self.assertEqual(overview.top_inning, 'Y')
     self.assertEqual(overview.tv_station, 'WPIX')
     self.assertEqual(overview.tz_aw_lg_gen, 'ET')
     self.assertEqual(overview.tz_hm_lg_gen, 'ET')
     self.assertEqual(overview.venue, 'Citi Field')
     self.assertEqual(overview.venue_id, 3289)
     self.assertEqual(overview.venue_name, 'Citi Field')
     self.assertEqual(overview.venue_w_chan_loc, 'USNY0504')
     self.assertEqual(overview.weather, '75 degrees, partly cloudy')
     self.assertEqual(overview.wind, '8 mph, R to L')
     self.assertEqual(
         overview.wrapup_link,
         '/mlb/gameday/index.jsp?gid=2016_08_02_nyamlb_nynmlb_1&mode=wrap&c_id=mlb'
     )
Exemplo n.º 18
0
def games_in_season(season):
    print 'Building data/{}/games/{}_games_data.csv'.format(season, season)
    dataList = []
    for month in range(4, 12):
        for day in range(1, 32):
            print '\n{}/{}/{}'.format(month, day, season)
            for gameID in game_ids_for_date(month, day, season):
                try:
                    game = mlbgame.overview(gameID)
                except:
                    break
                if not data_exists_for_game(game):
                    break
                awayData = pd.read_csv('data/{}/teams/{}_{}_data.csv'.format(
                    season, game.away_name_abbrev, season))
                homeData = pd.read_csv('data/{}/teams/{}_{}_data.csv'.format(
                    season, game.home_name_abbrev, season))
                gameData = (awayData, homeData)
                if not hasattr(game, 'time_date'):
                    break
                if not game_dates_match(game.time_date, gameData):
                    break
                gameNumber = game_number_for_game(game)
                lines = line_for_game(gameData, gameNumber)
                overUnder = over_under_for_game(gameData, gameNumber)
                print game.away_name_abbrev, '@', game.home_name_abbrev
                teamRatings = team_rating_for_game(gameData, gameNumber)
                expWinPcts = pythagorean_win_pct_for_game(gameData, gameNumber)
                startingPitcherRatings = starting_pitcher_rating_for_game(
                    gameData, gameNumber)
                startingPitcherAdjustments = starting_pitcher_adjustment_for_game(
                    gameData, gameNumber)
                teamWinProbabilities = win_probability_for_game(
                    gameData, gameNumber)
                winningTeam = game.home_name_abbrev if int(
                    game.home_team_runs) > int(
                        game.away_team_runs) else game.away_name_abbrev
                winningLine = lines[
                    1] if winningTeam == game.home_name_abbrev else lines[0]
                wasHomeTeamWinner = 1 if winningTeam == game.home_name_abbrev else 0
                dataList.append({
                    'Date':
                    game.time_date,
                    'AwayTeam':
                    game.away_name_abbrev,
                    'HomeTeam':
                    game.home_name_abbrev,
                    'AwayTeamID':
                    mlbgameTeamAbbrevToCoversTeamID[game.away_name_abbrev],
                    'HomeTeamID':
                    mlbgameTeamAbbrevToCoversTeamID[game.home_name_abbrev],
                    'AwayTeamStartingPitcherRating':
                    startingPitcherRatings[0],
                    'HomeTeamStartingPitcherRating':
                    startingPitcherRatings[1],
                    'AwayTeamStartingPitcherAdjustment':
                    startingPitcherAdjustments[0],
                    'HomeTeamStartingPitcherAdjustment':
                    startingPitcherAdjustments[1],
                    'AwayTeamWinProbability':
                    teamWinProbabilities[0],
                    'HomeTeamWinProbability':
                    teamWinProbabilities[1],
                    'WinningTeam':
                    winningTeam,
                    'WinningTeamID':
                    mlbgameTeamAbbrevToCoversTeamID[winningTeam],
                    'WasHomeTeamWinner':
                    wasHomeTeamWinner,
                    'AwayTeamLine':
                    lines[0],
                    'HomeTeamLine':
                    lines[1],
                    'Over/Under':
                    overUnder,
                    'WinningTeamLine':
                    winningLine,
                    'AwayTeamRating':
                    teamRatings[0],
                    'HomeTeamRating':
                    teamRatings[1],
                    'AwayTeamPythagoreanExpectedWin%':
                    expWinPcts[0],
                    'HomeTeamPythagoreanExpectedWin%':
                    expWinPcts[1]
                })
    data = pd.DataFrame(dataList)
    data.to_csv('data/{}/games/{}_games_data.csv'.format(season, season),
                encoding='utf-8')
Exemplo n.º 19
0
def data_for_game_ids(gameIDs):
    gamesData = []
    global bankroll, bankrollTrend
    betAmount = math.ceil(bankroll * 0.01)
    for gameID in gameIDs:
        try:
            game = mlbgame.overview(gameID)
        except:
            break
        if does_data_exist_for_game(game):
            awayTeamLine = get_line_for_game(game.away_name_abbrev,
                                             game.time_date)
            homeTeamLine = get_line_for_game(game.home_name_abbrev,
                                             game.time_date)
            if awayTeamLine and homeTeamLine:
                bankrollTrend.append(bankroll)
                if bankroll < betAmount:
                    raise ValueError("Bankroll must be higher than bet amount")
                bankroll -= betAmount
                awayTeamWinProbability, homeTeamWinProbability = expected_win_probabilities_for_game(
                    game)
                pick = game.home_name_abbrev if homeTeamWinProbability >= awayTeamWinProbability else game.away_name_abbrev
                winningTeam = game.home_name_abbrev if int(
                    game.home_team_runs) > int(
                        game.away_team_runs) else game.away_name_abbrev
                winningLine = homeTeamLine if winningTeam == game.home_name_abbrev else awayTeamLine

                gameDict = {
                    'date':
                    game.time_date,
                    'matchup':
                    game.away_name_abbrev + ' @ ' + game.home_name_abbrev,
                    'away_team_win_pct':
                    float(game.away_win) /
                    (float(game.away_win) + float(game.away_loss)),
                    'home_team_win_pct':
                    float(game.home_win) /
                    (float(game.home_win) + float(game.home_loss)),
                    'pick':
                    pick,
                    'away_team_line':
                    awayTeamLine,
                    'home_team_line':
                    awayTeamLine,
                    'winning_team':
                    winningTeam,
                    'winning_line':
                    winningLine
                }
                gamesData.append(gameDict)

                if pick == winningTeam:
                    bankroll += math.ceil(
                        betAmount * convert_line_to_multiplier(winningLine))
                    print gameDict['date'], gameDict['matchup'], gameDict[
                        'pick'], gameDict['winning_line']

    if len(gamesData) > 0:
        data = pd.DataFrame(gamesData)
        data['pick_match'] = np.where(data['pick'] == data['winning_team'], 1,
                                      0)
        return data
Exemplo n.º 20
0
 def test_overview_empty(self):
     self.assertRaises(ValueError, lambda: mlbgame.overview('game_id'))
     self.assertRaises(ValueError,
                       lambda: mlbgame.overview('2016_08_02_nymlb_nymlb_1'))
Exemplo n.º 21
0
import pandas as pd
import os

# Define Years of Interest (2010-2018)
years = [year for year in range(2010, 2018 + 1)]

# Pull all games from MLBGAME API
schedule = mlbgame.games(years, home='Nationals')
games = mlbgame.combine_games(schedule)

results = []
# Loop through games and keep regular season games played in DC
for game in games:
    game_datetime = game.date
    game_date = game_datetime.date()
    game_overview = mlbgame.overview(game.game_id)
    # Game Type, should be == 'R' for regular season
    game_type = game_overview.game_type
    if (game_type != 'S'):
        print(game_date)
        game_df = pd.DataFrame({'natls_home': 1}, index=[game_date])
        results.append(game_df)

# Concatentate one big dataframe
results_df = pd.concat(results, axis=0)

# Output final dataframe
TIMESTR = time.strftime("%Y%m%d_%H%M%S")
filename = "Natls_Home_Games_2010_2018_" + TIMESTR + ".csv"
filepath = os.path.join("./Output", filename)
results_df.to_csv(filepath, index=True)
Exemplo n.º 22
0
  def render(self):
    """Renders a game or games depending on the configuration.
    Infinitely loops up to 15 minutes before a refresh of the list of games
    is required.
    """
    self.canvas.Fill(*ledcolors.scoreboard.fill)
    current_game_index = self.__get_game_from_args()
    game = self.games[current_game_index]
    starttime = time.time()

    while True:

      try:
        if self.data_needs_refresh:
          overview = mlbgame.overview(game.game_id)
          self.data_needs_refresh = False

      # If a game_id can't be found, we fail gracefully and try the next game
      except ValueError as e:
        if str(e) == "Could not find a game with that id.":
          error_strings = ["Game ID","Not","Found"] + [game.game_id]
          self.__handle_error(e, error_strings)
          current_game_index = bump_counter(current_game_index, self.games)
          game = self.games[current_game_index]
        else:
          error_strings = split_string(str(e), self.canvas.width/4)
          self.__handle_error(e, error_strings)

        continue

      # Catch everything else. 
      except:
        err_type, error, traceback = sys.exc_info()
        error_strings = split_string(str(error), self.canvas.width/4)
        self.__handle_error(error, error_strings)
        continue

      self.__refresh_game(game, overview)

      if self.config.scroll_until_finished == False:
        self.scroll_finished = True

      refresh_rate = SCROLL_TEXT_FAST_RATE
      if self.config.slowdown_scrolling == True:
        refresh_rate = SCROLL_TEXT_SLOW_RATE
      if overview.status == IN_PROGRESS:
        refresh_rate = self.config.live_rotate_rate
        self.data_needs_refresh = True
        self.scroll_finished = True

      time.sleep(refresh_rate)

      endtime = time.time()
      if endtime - self.creation_time >= FIFTEEN_MINUTES:
        return
      time_delta = endtime - starttime

      self.canvas.Fill(*ledcolors.scoreboard.fill)

      rotate_rate = self.config.live_rotate_rate

      # Always use the default 15 seconds for our pregame rotations
      if overview.status == PRE_GAME or overview.status == SCHEDULED:
        rotate_rate = self.config.pregame_rotate_rate

      if overview.status == FINAL or overview.status == GAME_OVER:
        rotate_rate = self.config.final_rotate_rate

      if time_delta >= rotate_rate and self.scroll_finished:
        starttime = time.time()
        self.data_needs_refresh = True
        self.scroll_finished = False
        self.current_scrolling_text_pos = self.canvas.width
        if self.__should_rotate_to_next_game(overview):
          current_game_index = bump_counter(current_game_index, self.games)
          game = self.games[current_game_index]