From 2694753d0863ea2a7a133badb91ae646abd72ce8 Mon Sep 17 00:00:00 2001 From: nprasad2077 <114438461+nprasad2077@users.noreply.github.com> Date: Mon, 8 May 2023 22:59:22 -0500 Subject: [PATCH] usage rates histogram view and url --- nba_data/urls.py | 3 ++- nba_data/views.py | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/nba_data/urls.py b/nba_data/urls.py index acac030..b758db8 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, Top25ScorersPostSeasonPlayoffs, TopPtsScatterPlotDataFastSelect, OverallDBStats, TopScorersbySeasonTotalsList, TopAssistsBySeasonTotalsList, TopReboundsbySeasonTotalsList, TopStealsbySeasonTotalsList, TopBlocksbySeasonTotalsList, TopDefensiveReboundsBySeasonTotalsList, TopOffensiveReboundsbySeasonTotalsList +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, OverallDBStats, TopScorersbySeasonTotalsList, TopAssistsBySeasonTotalsList, TopReboundsbySeasonTotalsList, TopStealsbySeasonTotalsList, TopBlocksbySeasonTotalsList, TopDefensiveReboundsBySeasonTotalsList, TopOffensiveReboundsbySeasonTotalsList, UsageRateHistogramView urlpatterns = [ path('api/playerdata/', PlayerDataList.as_view(), name='playerdata_list'), @@ -24,6 +24,7 @@ urlpatterns = [ path('api/top_rebounds_defensive//', TopDefensiveReboundsBySeasonList.as_view(), name='top_rebounds_DRB'), path('api/top_rebounds_defensive/totals//', TopDefensiveReboundsBySeasonTotalsList.as_view(), name='top_rebounds_DRB_totals'), path('api/points_per_game_histogram//', PointsPerGameHistogramBySeasonList.as_view(), name='points_per_game_histogram'), + path('api/usage_histogram//', UsageRateHistogramView.as_view(), name='usage_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_pts_scatter_plot_fast_2018/', TopPtsScatterPlotDataFast2018.as_view(), name='top_pts_scatter_plot_fast_2018'), diff --git a/nba_data/views.py b/nba_data/views.py index ef637b5..5356b2d 100644 --- a/nba_data/views.py +++ b/nba_data/views.py @@ -245,8 +245,40 @@ class PointsPerGameHistogramBySeasonList(generics.ListAPIView): return histogram_list +# USG Percent Histogram -# Scatter Plot - Top 30 players by total PTS across all seasons in DB. Then map those 30 players on a scatter plot against total PTS/WS for each season. +class UsageRateHistogramView(generics.ListAPIView): + serializer_class = HistogramDataSerializer + + def get_queryset(self): + season = self.kwargs['season'] + queryset = PlayerAdvancedData.objects.filter(season=season) + + # Get the usage rates for each player, ignoring null values + usage_rate_list = [player.usg_percent for player in queryset if player.usg_percent is not None] + + # Define histogram bins for usage rate ranges + bin_ranges = [i * 5 for i in range(21)] # 0, 5, 10, ..., 100 + histogram_data = Counter() + + # Fill the histogram with data + for usage_rate in usage_rate_list: + bin_index = next( + (i for i, r in enumerate(bin_ranges) if r >= usage_rate), -1) + if bin_index >= 1: + bin_label = f"{bin_ranges[bin_index - 1]}-{bin_ranges[bin_index]}" + histogram_data[bin_label] += 1 + + # Convert histogram_data to list of dicts for serialization + histogram_list = [{"range": k, "count": v} + for k, v in histogram_data.items()] + + return histogram_list + + + + +# Scatter Plot - Top 25 players by total PTS across all seasons in DB. Then map those 25 players on a scatter plot against total PTS/WS for each season. class TopPtsScatterPlotData(APIView): def get(self, request, *args, **kwargs):