基于大数据的NBA球员数据分析及预测系统
创作时间:
作者:
@小白创作中心
基于大数据的NBA球员数据分析及预测系统
引用
CSDN
1.
https://blog.csdn.net/qq_80213251/article/details/146383167
NBA球员数据分析及预测系统是一个基于Python语言和Flask框架构建的综合性平台,旨在帮助篮球爱好者、教练和球队管理者深入分析和预测NBA球员的表现。该系统结合了requests爬虫、statsmodels中的ARIMA时间序列预测算法以及Echarts可视化技术,为用户提供了丰富的数据分析和预测功能。
项目界面
球员数据分析1:每个赛季参加场数与平均得分分布情况
球员数据分析2:每个赛季场均篮板、助攻、抢断和盖帽的得分分布情况
球员数据分析3:每个赛季三分、罚球、进攻、防守的分布情况
首页:注册登录
NBA球员未来得分表现预测:时间序列预测算法
NBA球星相似匹配预测
核心代码
以下是系统中关键的数据处理和预测代码:
数据加载和预处理
import json
import sqlite3
import time
import numpy as np
import pandas as pd
from flask import Flask, render_template, jsonify, request
from statsmodels.tsa.arima.model import ARIMA
app = Flask(__name__)
app.debug = True
login_name = None
all_players = []
with open('nab_player.json', 'r', encoding='utf8') as f:
for line in f:
player = json.loads(line.strip())
info = {
'姓名': player['playerProfile']['displayName'],
'赛季': player['season'],
"排名": player['rank'],
"球队": player['teamProfile']['name'],
"场数": player['statAverage']['games'],
"先发": player['statAverage']['gamesStarted'],
"场均得分": player['statAverage']['pointsPg'],
"场均篮板": player['statAverage']['rebsPg'],
"场均助攻": player['statAverage']['assistsPg'],
"分钟": player['statAverage']['minsPg'],
"效率": player['statAverage']['fgpct'],
"三分": player['statAverage']['tppct'],
"罚球": player['statAverage']['ftpct'],
"进攻": player['statAverage']['offRebsPg'],
"防守": player['statAverage']['defRebsPg'],
"场均抢断": player['statAverage']['stealsPg'],
"场均盖帽": player['statAverage']['blocksPg'],
"失误": player['statAverage']['turnoversPg'],
"犯规": player['statAverage']['foulsPg']
}
all_players.append(info)
all_players = pd.DataFrame(all_players)
all_players = all_players.sort_values(by='赛季', ascending=False)
ARIMA模型预测
def arima_model_train_eval(history):
# 构造 ARIMA 模型
model = ARIMA(history, order=(1, 1, 0))
# 基于历史数据训练
model_fit = model.fit()
# 预测下一个时间步的值
output = model_fit.forecast()
yhat = output[0]
return yhat
@app.route('/future_predict/<player>')
def future_predict(player):
time.sleep(1)
df = all_players[all_players['姓名'] == player]
saijis = df['赛季'].values.tolist()
saijis.append(saijis[-1] + 1)
try:
scores = df['场均得分'].values.tolist()
predict_score = arima_model_train_eval(scores)
scores.append(predict_score)
lanbans = df['场均篮板'].values.tolist()
predict_lanban = arima_model_train_eval(lanbans)
lanbans.append(predict_lanban)
zhugongs = df['场均助攻'].values.tolist()
predict_zhugong = arima_model_train_eval(zhugongs)
zhugongs.append(predict_zhugong)
jiangduans = df['场均抢断'].values.tolist()
predict_jiangduan = arima_model_train_eval(jiangduans)
jiangduans.append(predict_jiangduan)
except Exception:
return jsonify({'success': False, 'message': f'该球员赛季数据过少({len(saijis)}),无法构建时序模型进行预测。'})
return jsonify({
'success': True,
'赛季': saijis,
'场均得分': scores,
'场均篮板': lanbans,
'场均助攻': zhugongs,
'场均抢断': jiangduans,
})
欧氏距离计算
def cal_euclidean_distance(x, y):
dist = np.sqrt(np.sum(np.square(x - y)))
return dist
@app.route('/predict_similar_players')
def predict_similar_players():
columns = ['场均得分', '场均篮板', '场均助攻', '罚球', '效率', '三分', '罚球', '进攻', '防守', '场均抢断', '场均盖帽', '失误', '犯规']
test_player_feature = []
for c in columns:
v = request.args.get(c)
test_player_feature.append(float(v))
player_distance = {}
test_player_feature = np.array(test_player_feature)
for player in player_group:
player_df = player_group[player][columns]
player_feature = player_df.mean(axis=0).values
dist = cal_euclidean_distance(test_player_feature, player_feature)
player_distance[player] = dist
player_distance = sorted(player_distance.items(), key=lambda x: x[1])
similar_players = []
for player_dist in player_distance:
player, dist = player_dist
row = [player]
feat = player_group[player][columns].values.tolist()[0]
row.extend(feat)
row.append(dist)
similar_players.append(row)
return jsonify(similar_players[:10])
总结
NBA球员数据分析及预测系统是一个功能强大、易于使用的综合性平台。它不仅能够帮助用户深入了解NBA球员的表现和潜力,还能提供准确的预测和个性化的推荐。无论是篮球爱好者还是球队管理者,都能在这个系统中找到有价值的信息和支持。
热门推荐
专业乒乓球运动员告诉你如何选择球拍,只选对的不选贵的
急性胰腺炎的综合治疗方案——药物、护理与饮食的完美结合
激光填丝增材制造技术的研究现状与展望
RS485和RS232关键参数对比,来看DeepSeek怎么说!
五一高速免费通行全攻略:政策详解与安全出行指南
弗洛伊德的主要理论观点
如何分析股东人数变化对投资的影响
存货周转率下降的原因及影响因素
冥想——开启心灵宁静之门
秦淮河:滋养江南文化“风雅颂”
为什么服务器邮件发送不出去?
跑步之前的热身运动怎么热身呢
猫脖子的奥秘:揭秘猫脖子的结构和功能
江西瓦罐汤:一罐千年的传承与风味
Redis 持久化机制简介
航运投资银行或面临搁浅资产风险
关于接受挑战的经典励志名言28句
再现张献忠逃亡与沉银,江口沉银博物馆6月试运行
五大联赛夺冠悬念揭晓!法甲早早封王,德甲希望存疑
如何在国外进行理性购房?国外购房需要考虑哪些因素?
主力高度控盘的表现是什么?主力高度控盘对股价有何影响?
无线路由器桥接设置指南:步骤详解与常见问题解决方案
如何设计HTML旅游网站
如何避免外贸邮箱被标记为垃圾邮件?
如何提高网店商品的转化率
成都有座道观,曾是画家张大千的长期隐居地,但知道的人却很少!
活动策划的关键步骤与注意事项
如何借鉴古典文学巧取有诗意的女孩名字?
最新最全的血糖、血压、血脂、尿酸健康指标对照表!
五行中的制化是什么意思