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

项目介绍

通过得分,篮板,助攻,出场时间四个数据来预测属于哪位球员。 选取了'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()

image.png

可视化

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

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

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()

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%不到,马马虎虎~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序生活

贪心算法总结贪心算法基本思路算法实现实例分析参考

贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。...

2.1K40
来自专栏专注研发

poj-1031-fence(不是我写的,我只是想看着方便)

  有一个光源位于(0,0)处,一个多边形的围墙。围墙是“全黑”的,不透光也不反射光。距光源r处的光强度为I0=k/r,k为常数。

11820
来自专栏C语言及其他语言

【每日一题】问题 1250: 素数回文

题目描述 赛马是一古老的游戏,早在公元前四世纪的中国,处在诸侯割据的状态,历史上称为“战国时期”。在魏国作官的孙膑,因为受到同僚庞涓的迫害,被齐国使臣救出后,...

35870
来自专栏AI研习社

文本分类又来了,用 Scikit-Learn 解决多类文本分类问题

在商业领域有很多文本分类的应用,比如新闻故事通常由主题来分类;内容或产品常常被打上标签;基于如何在线谈论产品或品牌,用户被分成支持者等等。

17810
来自专栏机器学习算法与Python学习

群体智能-果蝇算法

是的,今天要说的就是果蝇算法,“果蝇”就是你理解的那个果蝇,这是在2011年由Wen-Tsao Pan提出的有一种新型的群体智能优化算法。 1,引言: 演化式计...

558110
来自专栏WOLFRAM

用 Wolfram 语言制作圣诞动画

22820
来自专栏人工智能LeadAI

你听过算法也是可以贪心的吗?

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法...

40770
来自专栏牛客网

58转转前端面经

29200
来自专栏数据小魔方

信息图表高仿——R语言仿一财经典线条比较图

今天是一个图表高仿,对象是一财经典的半圆型线条比较图,信息主要是针对2016年天猫全球购物狂欢节的当日总销售额,为了使得比较效果更有针对性,作者使用了几个中小型...

35080
来自专栏小樱的经验随笔

“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp

黑白图像直方图 发布时间: 2017年7月9日 18:30   最后更新: 2017年7月10日 21:08   时间限制: 1000ms   内存限制: 12...

43450

扫码关注云+社区

领取腾讯云代金券