def testXXX(self): from analysis import load from lib import expression expr1 = expression.Leaf('fantasy_pts_per_game') golden = expression.Leaf('fantasy_pts') DF_15 = load.LoadDataForSeason(2015) CheckVirtualFDGames(expr1, golden, DF_15)
def CheckVirtualFDGames( predictions, df, requests=Position.FD_REQUEST, print_selections=False, df_filter=ENOUGH_DATA, only_healthy=True, expr_real_result=expression.Leaf('fantasy_pts'), expr_salaries_from=expression.Leaf('fantasy_pts_per_game')): _CheckFDGames(_VirtualGamesGenerator(df, expr_salaries_from), predictions, df, requests, print_selections=print_selections, df_filter=df_filter, only_healthy=only_healthy, expr_real_result=expr_real_result)
def CheckAllFDGames(predictions, df, requests=Position.FD_REQUEST, print_selections=False, df_filter=ENOUGH_DATA, only_healthy=True, expr_real_result=expression.Leaf('fantasy_pts')): _CheckFDGames(_FDGamesGenerator(FD_DIR), predictions, df, requests, print_selections=print_selections, df_filter=df_filter, only_healthy=only_healthy, expr_real_result=expr_real_result)
def PredictDay(df, prediction, fd_date, requests=Position.FD_REQUEST, only_healthy=True, banned_players=None, included_players=None, expr_real_result=expression.Leaf('fantasy_pts')): banned_players = banned_players or [] included_players = included_players or [] prediction = expression.LeafOrExpr(prediction) filepath = os.path.join(FD_DIR, '%s.html' % fd_date) assert os.path.exists(filepath), filepath date_need = fd_date.replace('_', '') small_df = df[df['date_id'] == int(date_need)] pid = small_df['player_id'] players_list = FDFromFile(filepath) if only_healthy: players_list = [p for p in players_list if p.status == PlayerStatus.OK] pred_for_day = dict(itertools.izip(pid, prediction.Eval(small_df))) results_for_day = dict(itertools.izip(pid, expr_real_result.Eval(small_df))) requests_adjusted = dict(requests) salary_cap = 60000 preselected = [] for p in players_list: if p.pid in included_players: requests_adjusted[p.position] -= 1 salary_cap -= p.salary preselected.append(p.Override(pts=-1)) players_list = [ p for p in players_list if p.pid not in included_players and p.pid not in banned_players ] result = Emulate(players_list, pred_for_day, results_for_day, requests=requests_adjusted, salary_cap=salary_cap) print requests_adjusted result = EmulationResult(score=result.score, team=result.team + preselected) for b in result.team: print 'Scored:', '{:4.1f}'.format(results_for_day.get(b.pid, 0)), b return result
def _CheckFDGames(fd_games_generator, predictions, df, requests, print_selections=False, df_filter=ENOUGH_DATA, only_healthy=True, expr_real_result=expression.Leaf('fantasy_pts')): df = df_filter.Filter(df) for i, p in enumerate(predictions): print i + 1, p pred_series = [expression.LeafOrExpr(p).Eval(df) for p in predictions] all_results = [[] for _ in predictions] for date_need, players_list in fd_games_generator: if only_healthy: players_list = [ p for p in players_list if p.status == PlayerStatus.OK ] flt = df['date_id'] == int(date_need) pid = df['player_id'][flt] pred_for_day = [ dict(itertools.izip(pid, ps[flt])) for ps in pred_series ] results_for_day = dict( itertools.izip(pid, expr_real_result.Eval(df)[flt])) results = [ Emulate(players_list, pred, results_for_day, requests=requests).score for pred in pred_for_day ] if all(r < 30 for r in results): continue for r, allr in zip(results, all_results): allr.append(r) print str(date_need).ljust(15), '\t', '\t'.join('%.1f' % r for r in results) PrintComparison(all_results) PrintRRTable(all_results) HistogramPlot(*all_results)
def _SeriesToPlayerMap(series, date): res = {} for index, value in series.iteritems(): pid, game_id = index.split(':') assert game_id.startswith(date) res[pid] = value return res def FDFromFile(filepath): return ParseFDFile(filepath)[0] ENOUGH_DATA = ((expression.Leaf('minutes') >= 10) & (expression.Leaf('minutes_per_game') >= 10) & (expression.Leaf('games_played') >= 10)) def _CheckFDGames(fd_games_generator, predictions, df, requests, print_selections=False, df_filter=ENOUGH_DATA, only_healthy=True, expr_real_result=expression.Leaf('fantasy_pts')): df = df_filter.Filter(df) for i, p in enumerate(predictions): print i + 1, p