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())
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)
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
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)
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)
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