💖💖作者:计算机毕业设计杰瑞 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学校实战项目 计算机毕业设计选题推荐
CBA球员数据可视化分析系统的设计与实现介绍
《CBA球员数据可视化分析系统》是一个基于大数据技术架构的体育数据分析平台,系统采用Hadoop分布式存储框架结合Spark大数据处理引擎,实现对CBA联赛球员海量数据的高效存储、处理和分析。系统后端支持Python+Django和Java+Spring Boot双技术栈实现,前端采用Vue.js框架配合ElementUI组件库和Echarts可视化图表库,构建现代化的用户交互界面。系统核心功能模块包括用户权限管理、球员信息管理、数据可视化展示、系统配置管理和个人中心等五大模块,通过MySQL数据库存储结构化数据,利用HDFS存储大规模非结构化数据。系统能够处理包括球员基本信息、比赛统计数据、技术指标、历史表现等多维度数据,通过Spark SQL进行复杂查询和统计分析,结合Pandas和NumPy进行数据清洗和数值计算,最终以多种图表形式呈现分析结果,为体育数据分析提供了一个完整的技术解决方案,展现了大数据技术在体育领域的实际应用价值。
CBA球员数据可视化分析系统的设计与实现演示视频
CBA球员数据可视化分析系统的设计与实现演示图片
CBA球员数据可视化分析系统的设计与实现代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from pyspark.sql.types import *
import pandas as pd
import numpy as np
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json
spark = SparkSession.builder.appName("CBAPlayerAnalysis").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()
@csrf_exempt
def player_performance_analysis(request):
if request.method == 'POST':
data = json.loads(request.body)
player_id = data.get('player_id')
season = data.get('season')
game_data_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/cba_db").option("dbtable", "game_statistics").option("user", "root").option("password", "123456").load()
player_data = game_data_df.filter((col("player_id") == player_id) & (col("season") == season))
avg_stats = player_data.groupBy("player_id").agg(
avg("points").alias("avg_points"),
avg("rebounds").alias("avg_rebounds"),
avg("assists").alias("avg_assists"),
avg("steals").alias("avg_steals"),
avg("blocks").alias("avg_blocks"),
avg("field_goal_percentage").alias("avg_fg_pct"),
avg("three_point_percentage").alias("avg_3p_pct"),
avg("free_throw_percentage").alias("avg_ft_pct"),
sum("minutes_played").alias("total_minutes"),
count("game_id").alias("games_played")
)
efficiency_data = player_data.withColumn("efficiency", (col("points") + col("rebounds") + col("assists") + col("steals") + col("blocks") - col("turnovers") - col("missed_fg") - col("missed_ft")) / col("minutes_played"))
monthly_trend = player_data.withColumn("month", month(col("game_date"))).groupBy("month").agg(avg("points").alias("monthly_avg_points"), avg("efficiency").alias("monthly_efficiency")).orderBy("month")
performance_consistency = player_data.select(stddev("points").alias("points_std"), stddev("rebounds").alias("rebounds_std"), stddev("assists").alias("assists_std"))
result_data = {
'avg_statistics': avg_stats.collect()[0].asDict(),
'efficiency_rating': efficiency_data.agg(avg("efficiency")).collect()[0][0],
'monthly_trends': [row.asDict() for row in monthly_trend.collect()],
'consistency_metrics': performance_consistency.collect()[0].asDict(),
'performance_level': 'Elite' if avg_stats.collect()[0]['avg_points'] > 25 else 'Good' if avg_stats.collect()[0]['avg_points'] > 15 else 'Average'
}
return JsonResponse({'status': 'success', 'data': result_data})
@csrf_exempt
def team_comparison_analysis(request):
if request.method == 'POST':
data = json.loads(request.body)
team_ids = data.get('team_ids', [])
season = data.get('season')
comparison_metrics = data.get('metrics', ['points', 'rebounds', 'assists'])
team_stats_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/cba_db").option("dbtable", "team_game_stats").option("user", "root").option("password", "123456").load()
filtered_data = team_stats_df.filter((col("team_id").isin(team_ids)) & (col("season") == season))
team_aggregates = filtered_data.groupBy("team_id", "team_name").agg(
avg("team_points").alias("avg_team_points"),
avg("team_rebounds").alias("avg_team_rebounds"),
avg("team_assists").alias("avg_team_assists"),
avg("opponent_points").alias("avg_opponent_points"),
sum("wins").alias("total_wins"),
sum("losses").alias("total_losses"),
avg("field_goal_percentage").alias("avg_team_fg_pct"),
avg("three_point_percentage").alias("avg_team_3p_pct")
)
team_aggregates = team_aggregates.withColumn("win_percentage", col("total_wins") / (col("total_wins") + col("total_losses")))
team_aggregates = team_aggregates.withColumn("point_differential", col("avg_team_points") - col("avg_opponent_points"))
offensive_efficiency = filtered_data.withColumn("offensive_rating", col("team_points") / col("team_possessions") * 100).groupBy("team_id").agg(avg("offensive_rating").alias("avg_offensive_rating"))
defensive_efficiency = filtered_data.withColumn("defensive_rating", col("opponent_points") / col("opponent_possessions") * 100).groupBy("team_id").agg(avg("defensive_rating").alias("avg_defensive_rating"))
team_comparison_result = team_aggregates.join(offensive_efficiency, "team_id").join(defensive_efficiency, "team_id")
strength_analysis = team_comparison_result.withColumn("overall_strength", (col("win_percentage") * 0.4) + (col("point_differential") / 20 * 0.3) + ((120 - col("avg_defensive_rating")) / 20 * 0.3))
radar_chart_data = {}
for team_row in team_comparison_result.collect():
team_id = team_row['team_id']
radar_chart_data[team_id] = {
'offense': min(100, team_row['avg_offensive_rating']),
'defense': min(100, 120 - team_row['avg_defensive_rating']),
'rebounding': min(100, team_row['avg_team_rebounds'] * 2),
'ball_movement': min(100, team_row['avg_team_assists'] * 4),
'shooting': min(100, team_row['avg_team_fg_pct'] * 200)
}
comparison_result = {
'team_stats': [row.asDict() for row in team_comparison_result.collect()],
'strength_rankings': [row.asDict() for row in strength_analysis.orderBy(desc("overall_strength")).collect()],
'radar_chart_data': radar_chart_data
}
return JsonResponse({'status': 'success', 'data': comparison_result})
@csrf_exempt
def league_trend_analysis(request):
if request.method == 'POST':
data = json.loads(request.body)
start_season = data.get('start_season')
end_season = data.get('end_season')
analysis_type = data.get('analysis_type', 'scoring')
league_data_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/cba_db").option("dbtable", "league_statistics").option("user", "root").option("password", "123456").load()
season_range_data = league_data_df.filter((col("season") >= start_season) & (col("season") <= end_season))
yearly_averages = season_range_data.groupBy("season").agg(
avg("avg_points_per_game").alias("league_avg_points"),
avg("avg_rebounds_per_game").alias("league_avg_rebounds"),
avg("avg_assists_per_game").alias("league_avg_assists"),
avg("avg_steals_per_game").alias("league_avg_steals"),
avg("avg_blocks_per_game").alias("league_avg_blocks"),
avg("avg_turnovers_per_game").alias("league_avg_turnovers"),
avg("avg_field_goal_pct").alias("league_avg_fg_pct"),
avg("avg_three_point_pct").alias("league_avg_3p_pct"),
avg("avg_free_throw_pct").alias("league_avg_ft_pct"),
avg("avg_pace").alias("league_avg_pace")
).orderBy("season")
trend_calculations = yearly_averages.withColumn("points_trend", lag("league_avg_points").over(Window.orderBy("season"))).withColumn("pace_trend", lag("league_avg_pace").over(Window.orderBy("season"))).withColumn("shooting_trend", lag("league_avg_fg_pct").over(Window.orderBy("season")))
efficiency_evolution = season_range_data.withColumn("offensive_efficiency", col("total_points") / col("total_possessions") * 100).withColumn("defensive_efficiency", col("opponent_points") / col("opponent_possessions") * 100).groupBy("season").agg(avg("offensive_efficiency").alias("avg_offensive_eff"), avg("defensive_efficiency").alias("avg_defensive_eff"))
style_analysis = season_range_data.withColumn("three_point_rate", col("three_point_attempts") / col("field_goal_attempts")).withColumn("assist_rate", col("assists") / col("field_goals_made")).groupBy("season").agg(avg("three_point_rate").alias("avg_3p_rate"), avg("assist_rate").alias("avg_assist_rate"))
correlation_analysis = yearly_averages.select(corr("league_avg_pace", "league_avg_points").alias("pace_scoring_correlation"), corr("league_avg_3p_pct", "league_avg_points").alias("shooting_scoring_correlation"))
player_development_trend = season_range_data.filter(col("player_age") <= 25).groupBy("season").agg(avg("avg_minutes_per_game").alias("young_player_minutes"), count("player_id").alias("young_players_count"))
league_trends_result = {
'yearly_statistics': [row.asDict() for row in yearly_averages.collect()],
'efficiency_trends': [row.asDict() for row in efficiency_evolution.collect()],
'playing_style_evolution': [row.asDict() for row in style_analysis.collect()],
'statistical_correlations': correlation_analysis.collect()[0].asDict(),
'youth_development': [row.asDict() for row in player_development_trend.collect()],
'trend_summary': {
'scoring_direction': 'increasing' if yearly_averages.agg(corr("season", "league_avg_points")).collect()[0][0] > 0 else 'decreasing',
'pace_direction': 'faster' if yearly_averages.agg(corr("season", "league_avg_pace")).collect()[0][0] > 0 else 'slower',
'three_point_evolution': 'increasing' if style_analysis.agg(corr("season", "avg_3p_rate")).collect()[0][0] > 0 else 'stable'
}
}
return JsonResponse({'status': 'success', 'data': league_trends_result})
CBA球员数据可视化分析系统的设计与实现文档展示
💖💖作者:计算机毕业设计杰瑞 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学校实战项目 计算机毕业设计选题推荐