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

目录
相关文章
|
10天前
|
算法 前端开发 数据处理
小白学python-深入解析一位字符判定算法
小白学python-深入解析一位字符判定算法
26 0
|
13天前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
41 4
|
13天前
|
机器学习/深度学习 缓存 算法
Python算法设计中的时间复杂度与空间复杂度,你真的理解对了吗?
【10月更文挑战第4天】在Python编程中,算法的设计与优化至关重要,尤其在数据处理、科学计算及机器学习领域。本文探讨了评估算法性能的核心指标——时间复杂度和空间复杂度。通过详细解释两者的概念,并提供快速排序和字符串反转的示例代码,帮助读者深入理解这些概念。同时,文章还讨论了如何在实际应用中平衡时间和空间复杂度,以实现最优性能。
46 6
|
11天前
|
存储 机器学习/深度学习 算法
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
蓝桥杯Python编程练习题的集合,涵盖了从基础到提高的多个算法题目及其解答。
18 3
蓝桥杯练习题(三):Python组之算法训练提高综合五十题
|
3天前
|
机器学习/深度学习 人工智能 算法
"拥抱AI规模化浪潮:从数据到算法,解锁未来无限可能,你准备好迎接这场技术革命了吗?"
【10月更文挑战第14天】本文探讨了AI规模化的重要性和挑战,涵盖数据、算法、算力和应用场景等方面。通过使用Python和TensorFlow的示例代码,展示了如何训练并应用一个基本的AI模型进行图像分类,强调了AI规模化在各行业的广泛应用前景。
14 5
|
8天前
|
机器学习/深度学习 人工智能 算法
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
玉米病害识别系统,本系统使用Python作为主要开发语言,通过收集了8种常见的玉米叶部病害图片数据集('矮花叶病', '健康', '灰斑病一般', '灰斑病严重', '锈病一般', '锈病严重', '叶斑病一般', '叶斑病严重'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。再使用Django搭建Web网页操作平台,实现用户上传一张玉米病害图片识别其名称。
22 0
【玉米病害识别】Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
|
16天前
|
存储 算法 安全
Python 加密算法详解与应用
Python 加密算法详解与应用
13 1
|
19天前
|
存储 算法 Python
火箭般的提升!学会Python并查集,让你的算法能力飞跃新高度!
火箭般的提升!学会Python并查集,让你的算法能力飞跃新高度!
28 1
|
5天前
|
人工智能 算法 前端开发
无界批发零售定义及无界AI算法,打破传统壁垒,累积数据流量
“无界批发与零售”是一种结合了批发与零售的商业模式,通过后端逻辑、数据库设计和前端用户界面实现。该模式支持用户注册、登录、商品管理、订单处理、批发与零售功能,并根据用户行为计算信用等级,确保交易安全与高效。
|
5天前
|
前端开发 算法 JavaScript
无界SaaS模式深度解析:算力算法、链接力、数据确权制度
私域电商的无界SaaS模式涉及后端开发、前端开发、数据库设计、API接口、区块链技术、支付和身份验证系统等多个技术领域。本文通过简化框架和示例代码,指导如何将核心功能转化为技术实现,涵盖用户管理、企业店铺管理、数据流量管理等关键环节。