【数据分析】基于大数据的NBA美国职业篮球联赛数据分析可视化系统 | 数据可视化大屏 计算机毕业设计实战项目 Hadoop SPark java Python

52 阅读7分钟

💖💖作者:计算机毕业设计杰瑞 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长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等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学校实战项目 计算机毕业设计选题推荐