diff --git a/nba_data/urls.py b/nba_data/urls.py index 2a90c94..0a9df80 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, ThreeTwoTopPointTrends, TopAssistsBySeasonList, TopReboundsBySeasonList, TopBlocksBySeasonList, TopStealsBySeasonList, TopOffensiveReboundsBySeasonList, TopDefensiveReboundsBySeasonList, PointsPerGameHistogramBySeasonList, TopPtsScatterPlotData, TopPtsScatterPlotDataFast, Top20ScorersPost2009WS +from .views import PlayerDataList, PlayerDataByTeamList, PlayerDataBySeasonList, PlayerDataByNameList, TopScorersbySeasonList, ThreeTwoTopPointTrends, TopAssistsBySeasonList, TopReboundsBySeasonList, TopBlocksBySeasonList, TopStealsBySeasonList, TopOffensiveReboundsBySeasonList, TopDefensiveReboundsBySeasonList, PointsPerGameHistogramBySeasonList, TopPtsScatterPlotData, TopPtsScatterPlotDataFast, Top20ScorersPost2009WS, Top20ScorersPost2014WS, Top20ScorersPost2018WS urlpatterns = [ path('api/playerdata/', PlayerDataList.as_view(), name='playerdata_list'), @@ -17,5 +17,7 @@ urlpatterns = [ path('api/points_per_game_histogram//', PointsPerGameHistogramBySeasonList.as_view(), name='points_per_game_histogram'), path('api/top_pts_scatter_plot/', TopPtsScatterPlotData.as_view(), name='top_pts_scatter_plot'), path('api/top_pts_scatter_plot_fast/', TopPtsScatterPlotDataFast.as_view(), name='top_pts_scatter_plot_fast'), - path('api/top_20_post_2009_PTS_ws/', Top20ScorersPost2009WS.as_view(), name='top_20_post_2009_PTS_ws') + 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'), ] \ No newline at end of file diff --git a/nba_data/views.py b/nba_data/views.py index bfdaca1..17bdecf 100644 --- a/nba_data/views.py +++ b/nba_data/views.py @@ -292,4 +292,79 @@ class Top20ScorersPost2009WS(APIView): } return Response(response_data) + + +class Top20ScorersPost2014WS(APIView): + def get(self, request): + # Get the top 20 scorers after the 2015 season + top_scorers = PlayerPlayoffTotalsData.objects \ + .filter(season__gt=2014) \ + .values('player_name') \ + .annotate(total_pts=Sum('PTS')) \ + .order_by('-total_pts')[:20] + + # Get the total WS for each of the top 20 scorers after the 2015 season + chart_data = [] + for scorer in top_scorers: + player_name = scorer['player_name'] + total_ws = PlayerPlayoffAdvancedData.objects \ + .filter(player_name=player_name, season__gt=2014) \ + .aggregate(total_ws=Sum('ws'))['total_ws'] + + chart_data.append({ + 'x': scorer['total_pts'], + 'y': total_ws, + 'player_name': player_name + }) + + # Sort the data by total_ws DESC + chart_data = sorted(chart_data, key=lambda x: x['y'], reverse=True) + + # Prepare the response data for chart.js + response_data = { + 'datasets': [ + { + 'data': chart_data + } + ] + } + + return Response(response_data) + +class Top20ScorersPost2018WS(APIView): + def get(self, request): + # Get the top 20 scorers after the 2015 season + top_scorers = PlayerPlayoffTotalsData.objects \ + .filter(season__gt=2018) \ + .values('player_name') \ + .annotate(total_pts=Sum('PTS')) \ + .order_by('-total_pts')[:20] + + # Get the total WS for each of the top 20 scorers after the 2015 season + chart_data = [] + for scorer in top_scorers: + player_name = scorer['player_name'] + total_ws = PlayerPlayoffAdvancedData.objects \ + .filter(player_name=player_name, season__gt=2018) \ + .aggregate(total_ws=Sum('ws'))['total_ws'] + + chart_data.append({ + 'x': scorer['total_pts'], + 'y': total_ws, + 'player_name': player_name + }) + + # Sort the data by total_ws DESC + chart_data = sorted(chart_data, key=lambda x: x['y'], reverse=True) + + # Prepare the response data for chart.js + response_data = { + 'datasets': [ + { + 'data': chart_data + } + ] + } + + return Response(response_data)