Example #1
0
def player_detail(request, pid):
    player = Player.objects.get(id=pid)
    year = current_season()
    games = get_games_(pid, 'all', '', year)
    avg_min = games.aggregate(Avg('mp'))
    avg_fpts = games.aggregate(Avg('fpts'))

    return render(request, 'player_detail.html', locals())
Example #2
0
def get_team_games(team):
    # get all games for the team last season
    players_ = Player.objects.filter(team=team, data_source='FanDuel')
    players_ = ['{} {}'.format(ip.first_name, ip.last_name) for ip in players_]

    season = current_season()
    q = Q(name__in=players_) & \
        Q(date__range=[datetime.date(season, SEASON_START_MONTH, SEASON_START_DAY), datetime.date(season+1, SEASON_END_MONTH, SEASON_END_DAY)])

    return PlayerGame.objects.filter(q)
Example #3
0
def get_win_loss(team):
    season = current_season()
    q = Q(team=team) & \
        Q(date__range=[datetime.date(season, SEASON_START_MONTH, SEASON_START_DAY), datetime.date(season+1, SEASON_END_MONTH, SEASON_END_DAY)])

    team_games = PlayerGame.objects.filter(q)
    game_results = team_games.values('date', 'game_result').distinct()
    wins = game_results.filter(game_result='W').count()
    losses = game_results.filter(game_result='L').count()

    return wins, losses
Example #4
0
def download_game_report(request):
    game = request.GET.get('game')
    game = Game.objects.get(id=game)
    season = current_season()

    q = Q(team__in=[game.home_team, game.visit_team]) & \
        Q(opp__in=[game.home_team, game.visit_team]) & \
        Q(date__range=[datetime.date(season, SEASON_START_MONTH, SEASON_START_DAY), datetime.date(season+1, SEASON_END_MONTH, SEASON_END_DAY)])

    qs = PlayerGame.objects.filter(q)
    fields = [
        f.name for f in PlayerGame._meta.get_fields()
        if f.name not in ['id', 'is_new']
    ]

    data = [model_to_dict(entity, fields=fields) for entity in qs]
    filename = 'nba_games({}@{}).csv'.format(game.visit_team, game.home_team)

    return download_response(fields, data, filename)
Example #5
0
def build_player_cache():
    # player info -> build cache
    players = Player.objects.filter(data_source='FanDuel', play_today=True) \
                            .order_by('-proj_points')
    game_info = {}
    for game in Game.objects.all():
        game_info[game.home_team] = ''
        game_info[game.visit_team] = '@'

    for player in players:
        games = get_games_(player.id, 'all', '', current_season())
        ampg = games.aggregate(Avg('mp'))['mp__avg'] or 0
        smpg = games.filter(location=game_info[player.team]).aggregate(
            Avg('mp'))['mp__avg'] or 0
        afp = games.aggregate(Avg('fpts'))['fpts__avg'] or 0
        sfp = games.filter(location=game_info[player.team]).aggregate(
            Avg('fpts'))['fpts__avg'] or 0

        Player.objects.filter(uid=player.uid).update(
            ampg=ampg,
            smpg=smpg,
            afp=afp,
            sfp=sfp,
            value=player.salary / 250 + 10)
Example #6
0
def get_team_stat(team, loc):
    loc_ = '@' if loc == '' else ''
    # allowance
    season = current_season()
    q = Q(opp=team) & Q(location=loc_) & \
        Q(date__range=[datetime.date(season, SEASON_START_MONTH, SEASON_START_DAY), datetime.date(season+1, SEASON_END_MONTH, SEASON_END_DAY)])
    a_teams = PlayerGame.objects.filter(q)
    a_teams_ = a_teams.values('date').annotate(trb=Sum('trb'),
                                               ast=Sum('ast'),
                                               stl=Sum('stl'),
                                               blk=Sum('blk'),
                                               tov=Sum('tov'),
                                               pts=Sum('pts'))

    rpg = a_teams_.aggregate(Avg('trb'))['trb__avg'] or 0
    apg = a_teams_.aggregate(Avg('ast'))['ast__avg'] or 0
    spg = a_teams_.aggregate(Avg('stl'))['stl__avg'] or 0
    bpg = a_teams_.aggregate(Avg('blk'))['blk__avg'] or 0
    tov = a_teams_.aggregate(Avg('tov'))['tov__avg'] or 0
    ppg = a_teams_.aggregate(Avg('pts'))['pts__avg'] or 0

    # score
    q = Q(team=team) & Q(location=loc) & \
        Q(date__range=[datetime.date(season, SEASON_START_MONTH, SEASON_START_DAY), datetime.date(season+1, SEASON_END_MONTH, SEASON_END_DAY)])
    s_teams = PlayerGame.objects.filter(q)
    s_teams_ = s_teams.values('date').annotate(trb=Sum('trb'),
                                               ast=Sum('ast'),
                                               stl=Sum('stl'),
                                               blk=Sum('blk'),
                                               tov=Sum('tov'),
                                               pts=Sum('pts'))

    s_rpg = s_teams_.aggregate(Avg('trb'))['trb__avg'] or 0
    s_apg = s_teams_.aggregate(Avg('ast'))['ast__avg'] or 0
    s_spg = s_teams_.aggregate(Avg('stl'))['stl__avg'] or 0
    s_bpg = s_teams_.aggregate(Avg('blk'))['blk__avg'] or 0
    s_tov = s_teams_.aggregate(Avg('tov'))['tov__avg'] or 0
    s_ppg = s_teams_.aggregate(Avg('pts'))['pts__avg'] or 0

    res = {
        'team': team,
        'rpg': rpg,
        'apg': apg,
        'spg': spg,
        'bpg': bpg,
        'tov': tov,
        'ppg': ppg,
        'total': rpg + apg + spg + bpg + tov + ppg,
        's_rpg': s_rpg,
        's_apg': s_apg,
        's_spg': s_spg,
        's_bpg': s_bpg,
        's_tov': s_tov,
        's_ppg': s_ppg,
        's_total': s_rpg + s_apg + s_spg + s_bpg + s_tov + s_ppg
    }

    # FPA TM POS
    tm_pos = []
    # for each distinct match
    for ii in a_teams_:
        # players (games) in a match
        players = a_teams.filter(date=ii['date'])

        tm_pos_ = {}
        # for each position
        for pos in POSITION:
            # players in the position of the team
            q = Q(position=pos) & Q(data_source='FanDuel')
            players_ = Player.objects.filter(Q(team=players[0].team) & q)
            players_ = [
                '{} {}'.format(ip.first_name, ip.last_name) for ip in players_
            ]
            tm_pos_[pos] = players.filter(name__in=players_).aggregate(
                Sum('fpts'))['fpts__sum'] or 0
        if tm_pos_['PG'] > 0 and tm_pos_['SG'] > 0:
            tm_pos.append(tm_pos_)
        print(ii['date'], players[0].team, players[0].opp, players[0].location,
              tm_pos_)

    for pos in POSITION:
        res[pos] = sum(ii[pos]
                       for ii in tm_pos) / len(tm_pos) if len(tm_pos) else -1

    print('-' * 32)
    # for FPS TM POS
    tm_pos = []
    # for each distinct match
    for ii in s_teams_:
        # players (games) in a match
        players = s_teams.filter(date=ii['date'])

        tm_pos_ = {}
        # for each position
        for pos in POSITION:
            # players in the position of the team
            q = Q(position=pos) & Q(data_source='FanDuel')
            players_ = Player.objects.filter(Q(team=players[0].team) & q)
            players_ = [
                '{} {}'.format(ip.first_name, ip.last_name) for ip in players_
            ]
            tm_pos_[pos] = players.filter(name__in=players_).aggregate(
                Sum('fpts'))['fpts__sum'] or 0
        if tm_pos_['PG'] > 0 and tm_pos_['SG'] > 0:
            tm_pos.append(tm_pos_)
        print(ii['date'], players[0].team, players[0].opp, players[0].location,
              tm_pos_)

    print('-' * 32)
    for pos in POSITION:
        res['s_' +
            pos] = sum(ii[pos]
                       for ii in tm_pos) / len(tm_pos) if len(tm_pos) else -1

    return res