💖💖作者:计算机毕业设计杰瑞 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学校实战项目 计算机毕业设计选题推荐
基于大数据的NBA美国职业篮球联赛数据分析可视化系统介绍
基于大数据的NBA美国职业篮球联赛数据分析可视化系统是一个集数据处理、统计分析和可视化展示于一体的综合性平台。该系统采用Hadoop分布式存储架构和Spark大数据计算引擎作为核心技术支撑,能够高效处理海量的NBA赛事数据,包括球员个人统计数据、比赛详细记录、球队历史表现等多维度信息。系统后端基于Django框架开发,前端采用Vue+ElementUI构建用户界面,通过Echarts实现数据的动态可视化展示。平台提供球员表现分析、比赛阶段分析、发展趋势分析、团队实力分析、数据关系分析等核心功能模块,用户可以通过直观的图表和统计报告深入了解NBA联赛的各项数据指标。系统利用Spark SQL进行复杂数据查询和聚合运算,结合Pandas和NumPy进行数据预处理和统计计算,最终将分析结果以多种图表形式呈现给用户,为篮球爱好者、数据分析师和体育研究人员提供了一个专业的数据分析工具。
基于大数据的NBA美国职业篮球联赛数据分析可视化系统演示视频
基于大数据的NBA美国职业篮球联赛数据分析可视化系统演示图片
基于大数据的NBA美国职业篮球联赛数据分析可视化系统代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
import pandas as pd
import numpy as np
from django.http import JsonResponse
from .models import PlayerStats, GameData, TeamStats
spark = SparkSession.builder.appName("NBA_DataAnalysis").master("local[*]").getOrCreate()
def player_performance_analysis(request):
player_id = request.GET.get('player_id')
season = request.GET.get('season')
player_data = spark.sql(f"""
SELECT player_name, games_played, points_per_game, rebounds_per_game,
assists_per_game, steals_per_game, blocks_per_game, fg_percentage,
three_point_percentage, ft_percentage, turnovers_per_game
FROM player_stats_table
WHERE player_id = {player_id} AND season = '{season}'
""").toPandas()
avg_stats = spark.sql(f"""
SELECT AVG(points_per_game) as avg_points, AVG(rebounds_per_game) as avg_rebounds,
AVG(assists_per_game) as avg_assists, AVG(fg_percentage) as avg_fg_pct
FROM player_stats_table
WHERE season = '{season}' AND games_played >= 50
""").toPandas()
performance_score = (player_data['points_per_game'].iloc[0] * 0.4 +
player_data['rebounds_per_game'].iloc[0] * 0.2 +
player_data['assists_per_game'].iloc[0] * 0.2 +
player_data['fg_percentage'].iloc[0] * 0.2)
league_percentile = spark.sql(f"""
SELECT COUNT(*) as better_players
FROM player_stats_table
WHERE season = '{season}' AND games_played >= 50
AND (points_per_game * 0.4 + rebounds_per_game * 0.2 +
assists_per_game * 0.2 + fg_percentage * 0.2) < {performance_score}
""").toPandas()['better_players'].iloc[0]
total_qualified_players = spark.sql(f"""
SELECT COUNT(*) as total FROM player_stats_table
WHERE season = '{season}' AND games_played >= 50
""").toPandas()['total'].iloc[0]
percentile_rank = (league_percentile / total_qualified_players) * 100
efficiency_trends = spark.sql(f"""
SELECT game_date, points, rebounds, assists,
(points + rebounds + assists - turnovers) as efficiency
FROM game_logs_table
WHERE player_id = {player_id} AND season = '{season}'
ORDER BY game_date
""").toPandas()
rolling_efficiency = efficiency_trends['efficiency'].rolling(window=10).mean()
trend_slope = np.polyfit(range(len(rolling_efficiency.dropna())),
rolling_efficiency.dropna(), 1)[0]
clutch_performance = spark.sql(f"""
SELECT AVG(points) as clutch_points, AVG(fg_percentage) as clutch_fg_pct
FROM game_logs_table
WHERE player_id = {player_id} AND season = '{season}'
AND game_situation = 'clutch'
""").toPandas()
return JsonResponse({
'player_stats': player_data.to_dict('records')[0],
'league_averages': avg_stats.to_dict('records')[0],
'performance_score': round(performance_score, 2),
'percentile_rank': round(percentile_rank, 1),
'trend_slope': round(trend_slope, 4),
'clutch_stats': clutch_performance.to_dict('records')[0] if not clutch_performance.empty else None
})
def team_strength_analysis(request):
team_id = request.GET.get('team_id')
season = request.GET.get('season')
team_stats = spark.sql(f"""
SELECT team_name, wins, losses, points_per_game, points_allowed_per_game,
rebounds_per_game, assists_per_game, fg_percentage, three_point_percentage,
free_throw_percentage, turnovers_per_game, steals_per_game, blocks_per_game
FROM team_stats_table
WHERE team_id = {team_id} AND season = '{season}'
""").toPandas()
offensive_rating = spark.sql(f"""
SELECT AVG(points_scored * 100.0 / possessions) as off_rating
FROM game_stats_table
WHERE team_id = {team_id} AND season = '{season}'
""").toPandas()['off_rating'].iloc[0]
defensive_rating = spark.sql(f"""
SELECT AVG(points_allowed * 100.0 / opponent_possessions) as def_rating
FROM game_stats_table
WHERE team_id = {team_id} AND season = '{season}'
""").toPandas()['def_rating'].iloc[0]
net_rating = offensive_rating - defensive_rating
home_away_performance = spark.sql(f"""
SELECT
SUM(CASE WHEN is_home = 1 AND result = 'W' THEN 1 ELSE 0 END) as home_wins,
SUM(CASE WHEN is_home = 1 THEN 1 ELSE 0 END) as home_games,
SUM(CASE WHEN is_home = 0 AND result = 'W' THEN 1 ELSE 0 END) as away_wins,
SUM(CASE WHEN is_home = 0 THEN 1 ELSE 0 END) as away_games
FROM game_results_table
WHERE team_id = {team_id} AND season = '{season}'
""").toPandas()
home_win_pct = home_away_performance['home_wins'].iloc[0] / home_away_performance['home_games'].iloc[0]
away_win_pct = home_away_performance['away_wins'].iloc[0] / home_away_performance['away_games'].iloc[0]
strength_vs_opponents = spark.sql(f"""
SELECT
AVG(CASE WHEN opponent_wins > 41 THEN
CASE WHEN result = 'W' THEN 1 ELSE 0 END END) as strong_team_win_pct,
AVG(CASE WHEN opponent_wins <= 41 THEN
CASE WHEN result = 'W' THEN 1 ELSE 0 END END) as weak_team_win_pct
FROM game_results_table gr
JOIN team_stats_table ts ON gr.opponent_id = ts.team_id
WHERE gr.team_id = {team_id} AND gr.season = '{season}' AND ts.season = '{season}'
""").toPandas()
league_rank = spark.sql(f"""
SELECT COUNT(*) + 1 as rank
FROM team_stats_table
WHERE season = '{season}' AND net_rating > {net_rating}
""").toPandas()['rank'].iloc[0]
team_chemistry = spark.sql(f"""
SELECT AVG(assists_per_game / fg_made_per_game) as assist_ratio,
STDDEV(points_per_game) as scoring_consistency
FROM team_stats_table
WHERE team_id = {team_id} AND season = '{season}'
""").toPandas()
return JsonResponse({
'team_basic_stats': team_stats.to_dict('records')[0],
'offensive_rating': round(offensive_rating, 1),
'defensive_rating': round(defensive_rating, 1),
'net_rating': round(net_rating, 1),
'home_win_percentage': round(home_win_pct * 100, 1),
'away_win_percentage': round(away_win_pct * 100, 1),
'vs_strong_teams': round(strength_vs_opponents['strong_team_win_pct'].iloc[0] * 100, 1),
'vs_weak_teams': round(strength_vs_opponents['weak_team_win_pct'].iloc[0] * 100, 1),
'league_rank': int(league_rank),
'team_chemistry_score': round(team_chemistry['assist_ratio'].iloc[0], 2)
})
def development_trend_analysis(request):
entity_type = request.GET.get('type') # 'player' or 'team'
entity_id = request.GET.get('entity_id')
start_season = request.GET.get('start_season')
end_season = request.GET.get('end_season')
if entity_type == 'player':
trend_data = spark.sql(f"""
SELECT season, points_per_game, rebounds_per_game, assists_per_game,
fg_percentage, three_point_percentage, games_played, minutes_per_game,
LEAD(points_per_game) OVER (ORDER BY season) - points_per_game as points_change
FROM player_stats_table
WHERE player_id = {entity_id} AND season BETWEEN '{start_season}' AND '{end_season}'
ORDER BY season
""").toPandas()
else:
trend_data = spark.sql(f"""
SELECT season, wins, losses, points_per_game, points_allowed_per_game,
fg_percentage, three_point_percentage, rebounds_per_game,
(wins * 1.0 / (wins + losses)) as win_percentage,
LEAD(wins) OVER (ORDER BY season) - wins as wins_change
FROM team_stats_table
WHERE team_id = {entity_id} AND season BETWEEN '{start_season}' AND '{end_season}'
ORDER BY season
""").toPandas()
season_years = [int(season.split('-')[0]) for season in trend_data['season']]
primary_metric = 'points_per_game' if entity_type == 'player' else 'win_percentage'
trend_coefficients = np.polyfit(season_years, trend_data[primary_metric], 1)
trend_direction = 'improving' if trend_coefficients[0] > 0 else 'declining'
trend_strength = abs(trend_coefficients[0])
peak_season = trend_data.loc[trend_data[primary_metric].idxmax(), 'season']
worst_season = trend_data.loc[trend_data[primary_metric].idxmin(), 'season']
consistency_score = 1 / (1 + trend_data[primary_metric].std())
if entity_type == 'player':
age_progression = spark.sql(f"""
SELECT season, age, points_per_game, minutes_per_game
FROM player_stats_table
WHERE player_id = {entity_id} AND season BETWEEN '{start_season}' AND '{end_season}'
ORDER BY season
""").toPandas()
prime_years = age_progression[(age_progression['age'] >= 26) & (age_progression['age'] <= 30)]
if not prime_years.empty:
prime_performance = prime_years[primary_metric].mean()
else:
prime_performance = None
milestone_seasons = trend_data[trend_data[primary_metric] >= trend_data[primary_metric].quantile(0.8)]['season'].tolist()
recent_form = trend_data.tail(3)[primary_metric].mean() if len(trend_data) >= 3 else trend_data[primary_metric].mean()
career_trajectory = {
'early_career': trend_data.head(2)[primary_metric].mean() if len(trend_data) >= 2 else trend_data[primary_metric].iloc[0],
'mid_career': trend_data.iloc[len(trend_data)//2-1:len(trend_data)//2+2][primary_metric].mean() if len(trend_data) >= 5 else None,
'recent': recent_form
}
response_data = {
'trend_data': trend_data.to_dict('records'),
'trend_direction': trend_direction,
'trend_strength': round(trend_strength, 4),
'peak_season': peak_season,
'worst_season': worst_season,
'consistency_score': round(consistency_score, 3),
'milestone_seasons': milestone_seasons,
'career_trajectory': career_trajectory
}
if entity_type == 'player' and prime_performance is not None:
response_data['prime_years_performance'] = round(prime_performance, 2)
return JsonResponse(response_data)
基于大数据的NBA美国职业篮球联赛数据分析可视化系统文档展示
💖💖作者:计算机毕业设计杰瑞 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学校实战项目 计算机毕业设计选题推荐