基于大数据的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球员的表现和潜力,还能提供准确的预测和个性化的推荐。无论是篮球爱好者还是球队管理者,都能在这个系统中找到有价值的信息和支持。
热门推荐
英雄联盟武剑仙锐雯 英雄联盟:武剑仙锐雯深度解析
全面解析:中国十大顶级红茶品种及其特色介绍
公路车和山地车哪个骑着舒服?一文详解两者区别
土地确权证办理指南:流程、材料与注意事项
德甲莱比锡红牛vs海登海姆预测分析 莱比锡红牛往期交锋占优
买电动车该怎么选?电动自行车、电轻摩、电摩,哪种更有性价比?
心脏造影是什么检查
探秘 SMB 协议:工作原理与缩写含义
如果永远无法实现超光速飞行,人类该怎么办?
王者荣耀李白铭文搭配与出装攻略
河北省筑牢地质灾害防治"安全堤"
夫妻关系破裂的原因分析与离婚法律适用探讨
家庭影院音箱选购全攻略:从技术到选购技巧的深度解析
奥氮平和氯氮平的区别有哪些
千年古树茶的珍贵特性与历史渊源
游戏化思维培训:定义、核心要素与实践指南
五线天珠详解:古珠文化与深远寓意探索,兼论翡翠元素
日本的世界遗产精华
【薯片的好处与坏处】吃薯片的好处和坏处 薯片的营养价值分析
剖析《朝花夕拾 》,挖掘鲁迅文学带来的艺术欣赏价值和现实意义
沉香文化的复兴:从王宫贵族到大众收藏
以房抵债后房产被司法查封?这份法律指南请收好
ROBLOX脚本编程与开发终极指南
别再污名化更年期了
新世纪福音战士中的EVA机甲盘点
中医外治疗法为儿童发热提供用药新选择
视频号流量突变,有人遇瓶颈,有人规模起量
徐霞客游历云南:探险之旅,自然之美,历史文化与当地风俗的完美融合
深入探讨微前端架构:挑战、解决方案与实际应用
医语怡情:新生儿黄疸不可怕