mirror of
https://github.com/nprasad2077/nbaStats.git
synced 2026-11-13 05:13:46 +00:00
modify 2009 route to return proper data
This commit is contained in:
1 parent
6995af94b2
commit
2ec7b206ba
2 files changed
+62
-10
No files matched your search
+2
-1
@@ -1,5 +1,5 @@
|
|||||||
from django.urls import path
|
from django.urls import path
|
||||||
from .views import PlayerDataList, PlayerDataByTeamList, PlayerDataBySeasonList, PlayerDataByNameList, TopScorersbySeasonList, ThreeTwoTopPointTrends, TopAssistsBySeasonList, TopReboundsBySeasonList, TopBlocksBySeasonList, TopStealsBySeasonList, TopOffensiveReboundsBySeasonList, TopDefensiveReboundsBySeasonList, PointsPerGameHistogramBySeasonList, TopPtsScatterPlotData, TopPtsScatterPlotDataFast, Top20ScorersPost2009WS, Top20ScorersPost2014WS, Top20ScorersPost2018WS
|
from .views import PlayerDataList, PlayerDataByTeamList, PlayerDataBySeasonList, PlayerDataByNameList, TopScorersbySeasonList, ThreeTwoTopPointTrends, TopAssistsBySeasonList, TopReboundsBySeasonList, TopBlocksBySeasonList, TopStealsBySeasonList, TopOffensiveReboundsBySeasonList, TopDefensiveReboundsBySeasonList, PointsPerGameHistogramBySeasonList, TopPtsScatterPlotData, TopPtsScatterPlotDataFast, TopPtsScatterPlotDataFast2018, Top20ScorersPost2009WS, Top20ScorersPost2014WS, Top20ScorersPost2018WS
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('api/playerdata/', PlayerDataList.as_view(), name='playerdata_list'),
|
path('api/playerdata/', PlayerDataList.as_view(), name='playerdata_list'),
|
||||||
@@ -17,6 +17,7 @@ urlpatterns = [
|
|||||||
path('api/points_per_game_histogram/<int:season>/', PointsPerGameHistogramBySeasonList.as_view(), name='points_per_game_histogram'),
|
path('api/points_per_game_histogram/<int:season>/', 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/', 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/', 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'),
|
||||||
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_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_20_post_2018_PTS_ws/', Top20ScorersPost2018WS.as_view(), name='top_20_post_2018_PTS_ws'),
|
||||||
|
|||||||
+60
-9
@@ -253,31 +253,82 @@ class TopPtsScatterPlotDataFast(APIView):
|
|||||||
|
|
||||||
return Response(result)
|
return Response(result)
|
||||||
|
|
||||||
|
|
||||||
|
class TopPtsScatterPlotDataFast2018(APIView):
|
||||||
|
def get(self, request):
|
||||||
|
with connection.cursor() as cursor:
|
||||||
|
cursor.execute("""
|
||||||
|
-- The modified query from earlier
|
||||||
|
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 >= 2018
|
||||||
|
GROUP BY player_name
|
||||||
|
ORDER BY total_pts DESC
|
||||||
|
LIMIT 25) as top_25_players)
|
||||||
|
AND season >= 2018
|
||||||
|
GROUP BY player_name, season
|
||||||
|
),
|
||||||
|
player_season_ws AS (
|
||||||
|
SELECT player_name, season, SUM("ws") as season_ws
|
||||||
|
FROM nba_data_playeradvanceddata
|
||||||
|
WHERE season >= 2018
|
||||||
|
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;
|
||||||
|
""")
|
||||||
|
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
|
# Top 20 players in playoffs by PTS X ws for scatter plot in chart.js
|
||||||
|
|
||||||
class Top20ScorersPost2009WS(APIView):
|
class Top20ScorersPost2009WS(APIView):
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
# Get the top 20 scorers after the 2015 season
|
# Get the top 20 scorers after the 2009 season
|
||||||
top_scorers = PlayerPlayoffTotalsData.objects \
|
top_scorers = PlayerPlayoffTotalsData.objects \
|
||||||
.filter(season__gt=2009) \
|
.filter(season__gt=2009) \
|
||||||
.values('player_name') \
|
.values('player_name') \
|
||||||
.annotate(total_pts=Sum('PTS')) \
|
.annotate(total_pts=Sum('PTS')) \
|
||||||
.order_by('-total_pts')[:20]
|
.order_by('-total_pts')[:20]
|
||||||
|
|
||||||
# Get the total WS for each of the top 20 scorers after the 2015 season
|
# Get the total WS for each of the top 20 scorers after the 2009 season
|
||||||
chart_data = []
|
chart_data = []
|
||||||
for scorer in top_scorers:
|
for scorer in top_scorers:
|
||||||
player_name = scorer['player_name']
|
player_name = scorer['player_name']
|
||||||
total_ws = PlayerPlayoffAdvancedData.objects \
|
player_season_data = PlayerPlayoffAdvancedData.objects \
|
||||||
.filter(player_name=player_name, season__gt=2009) \
|
.filter(player_name=player_name, season__gt=2009) \
|
||||||
.aggregate(total_ws=Sum('ws'))['total_ws']
|
.annotate(season_value=F('season')) \
|
||||||
|
.values('season_value', 'ws')
|
||||||
|
|
||||||
chart_data.append({
|
for data in player_season_data:
|
||||||
'x': scorer['total_pts'],
|
season_value = data['season_value']
|
||||||
'y': total_ws,
|
season_pts = PlayerPlayoffTotalsData.objects \
|
||||||
'player_name': player_name
|
.get(player_name=player_name, season=season_value).PTS
|
||||||
})
|
chart_data.append({
|
||||||
|
'x': season_pts,
|
||||||
|
'y': data['ws'],
|
||||||
|
'player_name': player_name,
|
||||||
|
'season': data['season_value']
|
||||||
|
})
|
||||||
|
|
||||||
# Sort the data by total_ws DESC
|
# Sort the data by total_ws DESC
|
||||||
chart_data = sorted(chart_data, key=lambda x: x['y'], reverse=True)
|
chart_data = sorted(chart_data, key=lambda x: x['y'], reverse=True)
|
||||||
|
|||||||
Reference in new issue
Block a user