def rate_at_date(self, dt): """ :param dt: :return: """ games = util.get_games(dt) self.rate_for_games(games)
data = [['UConn', 64, 'Kansas', 57], ['UConn', 82, 'Duke', 68], ['Minnesota', 71, 'UConn', 72], ['Kansas', 69, 'UConn', 62], ['Duke', 81, 'Minnesota', 70], ['Minnesota', 52, 'Kansas', 62]] df = pd.DataFrame(data, columns=['hteam', 'hscore', 'ateam', 'ascore']) df['home_outcome'] = df.hscore > df.ascore df['neutral'] = False df['hteam_id'] = df.hteam.map(lambda x: team_ids.get(x)) df['ateam_id'] = df.ateam.map(lambda x: team_ids.get(x)) return df if __name__ == "__main__": # df = rpi_test_data() games = util.get_games(date(2015, 3, 15)) d1 = pd.read_sql("SELECT * FROM division_one WHERE year=2015", DB.conn) games = games.merge(d1, left_on='hteam_id', right_on='ncaaid') games = games.merge(d1, left_on='ateam_id', right_on='ncaaid') teams = util.get_teams(games) data = games[['hteam_id', 'ateam_id', 'home_outcome', 'neutral']].values agg = RPIAggregator(teams) map(lambda x: agg.update(x), data) ratings = agg.evaluate() teams['rpi'] = ratings[0] teams['sos'] = ratings[1] teams['w'] = agg.total_won teams['l'] = agg.total_played - agg.total_won all_teams = pd.read_sql("SELECT ncaa, ncaaid FROM teams", DB.conn) df = teams.merge(all_teams, left_on="team_id", right_on="ncaaid")
df = pd.DataFrame(ratings_with_teams, columns=['rating', 'team_id']) teams = pd.read_sql("SELECT ncaaid, ncaa FROM teams", DB.conn) return df.merge(teams, left_on="team_id", right_on="ncaaid") @staticmethod def _calculate_rpi(wp, owp, oowp): return 0.25 * wp + 0.5 * owp + 0.25 * oowp @staticmethod def win_factor(is_home, is_neutral=False): if is_neutral: return 1. elif is_home: return 0.6 else: return 1.4 def get_true_rpi(): url = 'http://www.cbssports.com/collegebasketball/bracketology/nitty-gritty-report' response = requests.get(url) soup = BeautifulSoup(response.content, "html.parser") rpi_table = soup.find('table', {'class': 'ncaa-rankings-table'}) if __name__ == "__main__": games = util.get_games(2015) teams = util.get_teams(games) agg = RPIAggregator() season_dict = agg.rate_for_every_game(teams, games) # rpi = agg.infinite_depth()