通过KNN算法预测数据所属NBA球员——Python实现

简介: 项目介绍通过得分,篮板,助攻,出场时间四个数据来预测属于哪位球员。 选取了'LeBron James','Chris Paul','James Harden','Kevin Love','Dwight Howard'五位球员单场数据。

项目介绍

通过得分,篮板,助攻,出场时间四个数据来预测属于哪位球员。 选取了'LeBron James','Chris Paul','James Harden','Kevin Love','Dwight Howard'五位球员单场数据。

数据来源

本文使用数据全部来自于科赛网 ,字段解释如下:

字段 内容
player 球员
pts 得分
reb 篮板
ast 助攻
time 出场时间
season 赛季

项目内容

导入所需包
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
from sklearn.neighbors import KNeighborsClassifier as KNN 

导入数据

由于seaborn包作图对中文并不是很友好,我们将原有的字段名都设置为英文。选取我们所需要的五位球员数据命名为data。

#设置主题
sns.set(style="ticks")
#导入数据
data = pd.read_csv('/Users/***/Downloads/NBA.zip/player_season.csv',encoding = 'utf-8')

#避免seaborn包中文显示为方框问题,改为英文
data.columns = ['player', 'season', 'team', 'result', 'score', 'starter', 'time', 'made_percent', 'made', 'shoot',
       '3_made_percent', '3_made', '3_shoot', 'ft_percent', 'fta', 'ft', 'reb', u'reb_a', 'reb_b',
       'ast', 'stl', 'blk', 'tov', 'foul', 'pts']
data = data.loc[data['player'].isin(['LeBron James','Chris Paul','James Harden','Kevin Love','Dwight Howard'])]
data.head()
img_e2d76414f7ad7067fab29533363991da.png
image.png

可视化

其实这一步本身是不需要的,但我们还是想先在训练之前看下不同球员的数据特点。
首先我们通过散点图看5位球员的得分情况

  • 霍华德,哈登,勒夫在进入联盟初期都有一段适应期,都经历了两三个赛季后有较大提升,哈登上升最为明显,从当年的雷霆三少到开始独自带队之后,开启砍分模式,霍华德/勒夫最近几个赛季由于战术地位的下降,数据也开始下滑;
  • 詹姆斯/保罗数据比较稳定,‘出道即巅峰,一巅十五年’说詹姆斯真是没错;
  • 单从得分来看,能看出些差别,但不是很明显,尤其是都步入稳定期之后,差别很小;
  • ……
plt.figure(figsize = (15,8))  #设置绘图尺寸
sns.stripplot(x='season', y='pts',data = data ,hue = 'player',jitter=True,size = 5)
img_fd1c990dab5fc1f3ddc41cb37e714bea.png
image.png

接下来我们通过密度图看下5位球员在篮板助攻上的表现:

  • 首先是詹姆斯,在篮板助攻上都有不错的表现,非常全面;
  • 保罗助攻上表现很抢眼,组织能力出色,篮板也不错,4,5个居多
  • 哈登篮板助攻都比较低,还是以得分见长;
  • 勒夫/霍华德两位内线球员都是篮板数据更多,相比于霍华德,勒夫分球能力更强;
  • 霍华德在助攻上有明显的三个区间,最高的那段肯定是在魔术没错了,当年可是能单换詹姆斯的人;
  • ……
f, axes = plt.subplots(3, 2, figsize=(8, 12))

player_list = ['LeBron James','Chris Paul','James Harden','Kevin Love','Dwight Howard']

for ax,name,s in zip(axes.flat,player_list,np.linspace(0, 3, 5)):
    cmap = sns.cubehelix_palette(start=s, light=1, as_cmap=True)
    
    x = data[data['player']==name].reb
    y = data[data['player']==name].ast
    
    sns.kdeplot(x, y, cmap=cmap, shade=True, cut=5, ax=ax)
    ax.set(xlim=(0, 20), ylim=(0, 20))
    
f.tight_layout()
img_20b582304bc994a5ac7c29a1e12da18c.png
image.png

各项数据看完心里算是有了一个大概,每个球员都有自己的技术特点:

  • 保罗善于传球,所以助攻多;
  • 哈登得分能力强,但篮板助攻都偏低;
  • 霍华德篮板能力强,助攻偏弱;
  • 相比于霍华德,勒夫助攻要更多;
  • 詹姆斯全面,从数据上就可以展现;
  • ……

最后我们16-17赛季的数据作为测试集,其他赛季的数据作为训练集,看看预测准确率能够达到多少~

#取16-17赛季数据作为测试集
data_train = data[data['season']!=u'16-17']
data_test = data[data['season']==u'16-17']

#得分,篮板,助攻,出场时间为特征,球员为标签
train_x = np.array(data_train[['pts','reb','ast','time']]).tolist()
train_y = np.array(data_train[['player']]).tolist()
test_x = np.array(data_test[['pts','reb','ast','time']]).tolist()
test_y = np.array(data_test[['player']]).tolist()

#训练模型
neigh = KNN(n_neighbors=10)
neigh.fit(train_x, train_y) 

#使用模型预测,最后与实际结果对计算准确率
m = 0.0
n = 0.0
for x,y in zip(test_x,test_y):
    if neigh.predict([x])[0] == y[0]:
        n = n+1
    m = m+1
print '预测准确率为:%.2f%%' % (n/m*100)

预测准确率为:49.143%


最后准确率50%不到,马马虎虎~

目录
相关文章
|
11月前
|
机器学习/深度学习 算法 前端开发
别再用均值填充了!MICE算法教你正确处理缺失数据
MICE是一种基于迭代链式方程的缺失值插补方法,通过构建后验分布并生成多个完整数据集,有效量化不确定性。相比简单填补,MICE利用变量间复杂关系,提升插补准确性,适用于多变量关联、缺失率高的场景。本文结合PMM与线性回归,详解其机制并对比效果,验证其在统计推断中的优势。
2020 11
别再用均值填充了!MICE算法教你正确处理缺失数据
|
11月前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
12月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
517 26
|
11月前
|
存储 监控 算法
监控电脑屏幕的帧数据检索 Python 语言算法
针对监控电脑屏幕场景,本文提出基于哈希表的帧数据高效检索方案。利用时间戳作键,实现O(1)级查询与去重,结合链式地址法支持多条件检索,并通过Python实现插入、查询、删除操作。测试表明,相较传统列表,检索速度提升80%以上,存储减少15%,具备高实时性与可扩展性,适用于大规模屏幕监控系统。
290 5
|
12月前
|
传感器 机器学习/深度学习 算法
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
【使用 DSP 滤波器加速速度和位移】使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)
631 1
|
12月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
727 0
|
12月前
|
存储 监控 算法
企业电脑监控系统中基于 Go 语言的跳表结构设备数据索引算法研究
本文介绍基于Go语言的跳表算法在企业电脑监控系统中的应用,通过多层索引结构将数据查询、插入、删除操作优化至O(log n),显著提升海量设备数据管理效率,解决传统链表查询延迟问题,实现高效设备状态定位与异常筛选。
262 3
|
12月前
|
机器学习/深度学习 编解码 算法
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
787 4
|
11月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
398 0
|
12月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
457 0

热门文章

最新文章

推荐镜像

更多