diff --git a/nba_data/urls.py b/nba_data/urls.py index 307cbbd..4e3036f 100644 --- a/nba_data/urls.py +++ b/nba_data/urls.py @@ -1,5 +1,5 @@ from django.urls import path -from .views import PlayerDataList, PlayerDataByTeamList, PlayerDataBySeasonList, PlayerDataByNameList, TopScorersbySeasonList, TopScorersbySeasonListPlayoffs, ThreeTwoTopPointTrends, TopAssistsBySeasonList, TopReboundsBySeasonList, TopBlocksBySeasonList, TopStealsBySeasonList, TopOffensiveReboundsBySeasonList, TopDefensiveReboundsBySeasonList, PointsPerGameHistogramBySeasonList, TopPtsScatterPlotData, TopPtsScatterPlotDataFast, TopPtsScatterPlotDataFast2018, Top20ScorersPost2009WS, Top20ScorersPost2014WS, Top20ScorersPost2018WS, TopAssistsBySeasonListPlayoffs +from .views import PlayerDataList, PlayerDataByTeamList, PlayerDataBySeasonList, PlayerDataByNameList, TopScorersbySeasonList, TopScorersbySeasonListPlayoffs, ThreeTwoTopPointTrends, TopAssistsBySeasonList, TopReboundsBySeasonList, TopBlocksBySeasonList, TopStealsBySeasonList, TopOffensiveReboundsBySeasonList, TopDefensiveReboundsBySeasonList, PointsPerGameHistogramBySeasonList, TopPtsScatterPlotData, TopPtsScatterPlotDataFast, TopPtsScatterPlotDataFast2018, Top20ScorersPost2009WS, Top20ScorersPost2014WS, Top20ScorersPost2018WS, TopAssistsBySeasonListPlayoffs, Top25ScorersPostSeasonPlayoffs, TopPtsScatterPlotDataFastSelect urlpatterns = [ path('api/playerdata/', PlayerDataList.as_view(), name='playerdata_list'), @@ -23,4 +23,6 @@ urlpatterns = [ path('api/top_20_post_2009_PTS_ws/', Top20ScorersPost2009WS.as_view(), name='top_20_post_2009_PTS_ws'), path('api/top_20_post_2014_PTS_ws/', Top20ScorersPost2014WS.as_view(), name='top_20_post_2014_PTS_ws'), path('api/top_20_post_2018_PTS_ws/', Top20ScorersPost2018WS.as_view(), name='top_20_post_2018_PTS_ws'), + path('api/top_25_PTS_ws/playoffs//', Top25ScorersPostSeasonPlayoffs.as_view(), name='top_25_PTS_ws_playoffs'), + path('api/top_25_PTS_ws/season//', TopPtsScatterPlotDataFastSelect.as_view(), name='top_25_PTS_ws_season'), ] \ No newline at end of file diff --git a/nba_data/views.py b/nba_data/views.py index 77ffbc9..86f65ae 100644 --- a/nba_data/views.py +++ b/nba_data/views.py @@ -1,5 +1,5 @@ from django.shortcuts import render -from django.http import JsonResponse +from django.http import JsonResponse, Http404 from django.core import serializers from .models import PlayerData, PlayerTotalsData, PlayerAdvancedData, PlayerPlayoffTotalsData, PlayerPlayoffAdvancedData from rest_framework import generics @@ -297,6 +297,50 @@ class TopPtsScatterPlotDataFast2018(APIView): }) return Response(result) + +class TopPtsScatterPlotDataFastSelect(APIView): + def get(self, request, season): + with connection.cursor() as cursor: + cursor.execute(""" + WITH player_season_pts AS ( + SELECT player_name, season, SUM("PTS") as season_pts + FROM nba_data_playertotalsdata + WHERE player_name IN (SELECT player_name FROM ( + SELECT player_name, SUM("PTS") as total_pts + FROM nba_data_playertotalsdata + WHERE season >= %s + GROUP BY player_name + ORDER BY total_pts DESC + LIMIT 25) as top_25_players) + AND season >= %s + GROUP BY player_name, season + ), + player_season_ws AS ( + SELECT player_name, season, SUM("ws") as season_ws + FROM nba_data_playeradvanceddata + WHERE season >= %s + GROUP BY player_name, season + ) + SELECT player_season_pts.player_name, player_season_pts.season, player_season_pts.season_pts, player_season_ws.season_ws + FROM player_season_pts + JOIN player_season_ws + ON player_season_pts.player_name = player_season_ws.player_name AND player_season_pts.season = player_season_ws.season + ORDER BY player_season_pts.player_name, player_season_pts.season; + """, (season, season, season)) + rows = cursor.fetchall() + + result = [] + for row in rows: + player_name, season, season_pts, season_ws = row + result.append({ + 'player_name': player_name, + 'season': season, + 'season_pts': season_pts, + 'season_ws': season_ws + }) + + return Response(result) + # Top 20 players in playoffs by PTS X ws for scatter plot in chart.js @@ -430,6 +474,55 @@ class Top20ScorersPost2018WS(APIView): }) return Response(result) + +class Top25ScorersPostSeasonPlayoffs(APIView): + def get(self, request, season): + try: + season = int(season) + except ValueError: + raise Http404("Invalid season format.") + + with connection.cursor() as cursor: + cursor.execute(""" + WITH player_playoff_pts AS ( + SELECT player_name, season, SUM("PTS") as season_pts + FROM nba_data_playerplayofftotalsdata + WHERE player_name IN (SELECT player_name FROM ( + SELECT player_name, SUM("PTS") as total_pts + FROM nba_data_playerplayofftotalsdata + WHERE season >= %s + GROUP BY player_name + ORDER BY total_pts DESC + LIMIT 25) as top_25_players) + AND season >= %s + GROUP BY player_name, season + ), + player_playoff_ws AS ( + SELECT player_name, season, SUM("ws") as season_ws + FROM nba_data_playerplayoffadvanceddata + WHERE season >= %s + GROUP BY player_name, season + ) + SELECT player_playoff_pts.player_name, player_playoff_pts.season, player_playoff_pts.season_pts, player_playoff_ws.season_ws + FROM player_playoff_pts + JOIN player_playoff_ws + ON player_playoff_pts.player_name = player_playoff_ws.player_name AND player_playoff_pts.season = player_playoff_ws.season + ORDER BY player_playoff_pts.player_name, player_playoff_pts.season; + """, (season, season, season)) + rows = cursor.fetchall() + + result = [] + for row in rows: + player_name, season, season_pts, season_ws = row + result.append({ + 'player_name': player_name, + 'season': season, + 'season_pts': season_pts, + 'season_ws': season_ws + }) + + return Response(result) + class TopScorersbySeasonListPlayoffs(generics.ListAPIView):