示例#1
0
    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)
示例#2
0
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)
示例#3
0
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)
示例#4
0
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
示例#5
0
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)
示例#6
0

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