From 4455505fd7afc35af5825ee5dddd63d6f9fd39ae Mon Sep 17 00:00:00 2001 From: nprasad2077 <114438461+nprasad2077@users.noreply.github.com> Date: Wed, 26 Apr 2023 16:41:40 -0500 Subject: [PATCH] add calculation,view,url for PTS histogram --- nba_data/serializers.py | 5 +++++ nba_data/urls.py | 3 ++- nba_data/views.py | 35 ++++++++++++++++++++++++++++++++++- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/nba_data/serializers.py b/nba_data/serializers.py index 88634de..b383302 100644 --- a/nba_data/serializers.py +++ b/nba_data/serializers.py @@ -6,3 +6,8 @@ class PlayerDataSerializer(serializers.ModelSerializer): class Meta: model = PlayerData fields = '__all__' + +class HistogramDataSerializer(serializers.Serializer): + range = serializers.CharField() + count = serializers.IntegerField() + diff --git a/nba_data/urls.py b/nba_data/urls.py index 45098fd..14a3e00 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 +from .views import PlayerDataList, PlayerDataByTeamList, PlayerDataBySeasonList, PlayerDataByNameList, TopScorersbySeasonList, ThreeTwoTopPointTrends, TopAssistsBySeasonList, TopReboundsBySeasonList, TopBlocksBySeasonList, TopStealsBySeasonList, TopOffensiveReboundsBySeasonList, TopDefensiveReboundsBySeasonList, PointsPerGameHistogramBySeasonList urlpatterns = [ path('api/playerdata/', PlayerDataList.as_view(), name='playerdata_list'), @@ -14,4 +14,5 @@ urlpatterns = [ path('api/top_steals//', TopStealsBySeasonList.as_view(), name='top_steals'), path('api/top_rebounds_offensive//', TopOffensiveReboundsBySeasonList.as_view(), name='top_rebounds_ORB'), path('api/top_rebounds_defensive//', TopDefensiveReboundsBySeasonList.as_view(), name='top_rebounds_DRB'), + path('api/points_per_game_histogram//', PointsPerGameHistogramBySeasonList.as_view(), name='points_per_game_histogram'), ] \ No newline at end of file diff --git a/nba_data/views.py b/nba_data/views.py index 30b42c6..c1d3874 100644 --- a/nba_data/views.py +++ b/nba_data/views.py @@ -3,10 +3,12 @@ from django.http import JsonResponse from django.core import serializers from .models import PlayerData from rest_framework import generics -from .serializers import PlayerDataSerializer +from .serializers import PlayerDataSerializer, HistogramDataSerializer from rest_framework.views import APIView from rest_framework.response import Response from django.db.models import Avg +from collections import Counter +import math # Create your views here. @@ -141,3 +143,34 @@ class TopDefensiveReboundsBySeasonList(generics.ListAPIView): def get_queryset(self): season = self.kwargs['season'] return PlayerData.objects.filter(season=season).order_by('-DRB')[:20] + +# PTS Histogram + + +class PointsPerGameHistogramBySeasonList(generics.ListAPIView): + serializer_class = HistogramDataSerializer + + def get_queryset(self): + season = self.kwargs['season'] + queryset = PlayerData.objects.filter(season=season) + + # Get the points per game for each player + points_per_game_list = [float(player.PTS) for player in queryset] + + # Define histogram bins (e.g., 0-5, 5-10, 10-15, etc.) + bin_ranges = range(0, int(math.ceil(max(points_per_game_list))) + 1, 5) + histogram_data = Counter() + + # Fill the histogram with data + for ppg in points_per_game_list: + bin_index = next( + (i for i, r in enumerate(bin_ranges) if r >= ppg), -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