源码链接:

https://download.csdn.net/download/qq_58012062/87541713?spm=1001.2014.3001.5501

数据提取:链接:https://pan.baidu.com/s/1kcttx000FfaLBk1QAJbBAw 
提取码:jbbk

1 实验背景

NBA 作为世界上水平最高的篮球联赛,吸引了无数的球迷。每一场 NBA 比 赛都会产生大量的数据信息,如果能够有效地运用这些数据,便可以充分发挥 出其潜在价值。

在每年赛季开始之前,大量的媒体专家都会对本赛季 NBA 常规赛的情况进 行预测,这其中球队战绩和明星球员的个人数据是大家着重讨论的话题。及时 而准确的完成对这些数据的预测一方面有利于各球队管理层在赛季进行前采 用合适的决策,另一方面可以最大化商业公司的利益。本实验采用机器学习的 方法在赛季开始前完成对本赛季 NBA 球队战绩以及个人数据的预测等。

2.1 NBA数据爬取(实验工具:PyCharm)(做一个简介,在这里不重点讲爬取)

(1)导入库和所需要爬取的网站

(2)发送请求,获取数据

(3)解析html

(4)解析opponent数据

(5)获取表格body数据

(6)存储成csv文件

(7)运行爬虫

3.NBA球星生涯数据集分析(EDA和随机森林)

3.1.1 项目介绍

 1.项目目标

通过分析科比和巴特勒职业生涯比赛的相关数据,掌握Numpy, Pandas, Matplotlib, Seaborn等常用数据分析库的用法,掌握常规的数据预处理的方法以及特征工程。掌握建立随机森林模型,模型参数调整,构建最好的模型,预测测试数据,并保存测试数据的方法。

   2.科比生涯简介

不论你是否看NBA,都应该听说过科比布莱恩特这个名字,它是最接近篮球之神乔丹的运动员。科比于1996年以13顺位的选秀身份进入联盟,一生都效力于洛杉矶湖人队。于2016年宣布退役,职业生涯获奖无数,5次NBA总冠军,2次FMVP,1次MVP,4次AMVP,18次全明星,生涯总得分超33000分,未来的名人堂球员等。在今年的1月26日,科比乘坐的私人飞机不幸失事,科比和二女儿吉安娜永远地离开了我们,这对无数球迷是一个莫大的打击。虽然科比离开了我们,但曼巴精神将激励着一代又一代的年轻人去追逐自己的梦想。

3.巴特勒生涯简介

吉米·巴特勒(Jimmy Butler),1989年9月14日出生于美国得克萨斯州休斯敦(Houston, Texas),美国职业篮球运动员,司职得分后卫/小前锋,效力于NBA迈阿密热火队。

吉米·巴特勒于2011年通过选秀进入NBA,先后效力于公牛、森林狼、76人以及热火队,2014-15赛季荣膺进步最快球员,2020-21赛季当选NBA抢断王,6次入选NBA全明星阵容,4次入选NBA最佳阵容第三阵容,5次入选NBA最佳防守阵容第二阵容。

吉米·巴特勒代表美国男篮参加了2016年里约奥运会,并随队获得奥运会男篮金牌。

4.科比数据集简介随机森林

该数据集收录了自96赛季~2016赛季,科比整个职业生涯的比赛记录,共有30697条数据。每一条数据都是一次出手记录,其中包括动作类型,投篮类型,投射距离,投射位置,是否命中等25个特征。在该数据集中我们将以是否命中篮筐为标签值来进行分析,带有标签值的数据共25697条。我们将以这25697条数据作为训练数据进行建模,来对不带标签的5000条数据进行预测。

.巴特勒数据集简介EDA

该数据集收录了自2011赛季~至今,巴特勒整个职业生涯的比赛记录,共有20697条数据。每一条数据都是一次出手记录,其中包括动作类型,投篮类型,投射距离,投射位置,是否命中等25个特征。在该数据集中我们将以是否命中篮筐为标签值来进行分析,带有标签值的数据共15697条。我们将以这15697条数据作为训练数据进行建模,来对不带标签的5000条数据进行预测。

6.数据集中各列特征说明

列名称

含义

action_type

动作类型,如跳投,扣篮,上篮

combined_shot_type

组合投篮类型,如跳投,扣篮,勾手,擦板,罚球

game_event_id

比赛的编号

lat

出手的纬度

loc_x

出手的x坐标

loc_y

出手的y坐标

lon

出手的经度

minutes_remaining

距离比赛结束,还剩多少分钟

period

交手的场次,取值为1~7

playoffs

是否是打季后赛

season

赛季,如21~22赛季

seconds_remaining

距离比赛结束,还剩多少秒

shot_distance

出手距离

shot_made_flag

是否命中

shot_type

投射类型,两分球还是三分球

shot_zone_area

出手区域,左侧,右侧,中场,后场等

shot_zone_basic

另一种划分出手区域的方式,中线,禁区,油漆区,左侧底角,右侧底角等

shot_zone_range

出手区域的距离,小于8英尺,8-16英尺,16-24英尺,24英尺以上等

team_id

球队编号

team_name

球队名称

game_date

比赛日期

matchup

对阵双方

opponent

对手

game_id

比赛的编号

shot_id

出手的编号

3.1.2 项目知识点

探索性数据分析(EDA)

探索性数据分析 (EDA) 是一种数据分析方法,它采用多种技术(主要是图形):

1、最大限度地洞察数据集;

2、揭示底层结构;

3、提取重要变量;

4、检测异常值和异常;

5、测试基本假设;

6、开发简约模型;

7、确定最佳因子设置。

EDA 中使用的特定图形技术通常非常简单,由以下各种技术组成:

1、绘制原始数据(例如 数据轨迹、 直方图、 双直方图、 概率图、 滞后图、 块图和约登图)。

2、绘制简单的统计数据,例如原始数据的均值图、 标准差图、 箱线图和主效应图。

3、定位这些图以最大化我们的自然模式识别能力,例如每页使用多个图。

不同EDA问题应用不同工具:

1、对于单变量可以应用概率图、概率图相关系数图、单变量和多变量控制图、4-plot。

2、进行比较可使用块图、散点图、箱形图

3、进行筛选可以使用块图、概率图、双直方图

4、数据优化可以使用块图、最小二乘拟合、等高线图

5、回归问题可以使用最小二乘拟合、散点图、6-plot

6、对于时间序列可使用自相关图、光谱图、复解调幅度图、复解调相位图、ARIMA 模型

7、对于多变量分析可以使用星图、散点图矩阵、调节图、剖面图、主成分、聚类、Discrimination、分类等。

   

随机森林模型:       

   随机森林(Random Forest)是一种经典的Bagging模型,其弱学习器为决策树模型。如下图所示,随机森林模型会在原始数据集中随机抽样,构成n个不同的样本数据集,然后根据这些数据集搭建n个不同的决策树模型,最后根据这些决策树模型的平均值(针对回归模型)或者投票情况(针对分类模型)来获取最终结果。

    

随机森林的核心:

1)随机:训练样本的随机化(稳定性的基础是多样性)

2)森林:多颗决策树

随机森林的构造:

1)构造随机森林需要考虑的点:①只有一份训练数据;②确保多颗决策树要优于但棵决策树

2)随机森林的构造:

       

随机森林的预测:

分类问题:少数服从多数,比如说随机森林由三棵树构成,两棵树分类为同意,一棵树分类为不同意,那么最终结果为不同意

回归问题:取平均值

3.1.3 实验步骤

项目1:巴特勒生涯数据集分析(EDA)(实验工具:Jupyter)

(1).导入相关库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns;sns.set()
%matplotlib inlinefrom sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import KFold

(2).读取数据集CSV

Butler = pd.read_csv('Butler_data.csv')
Butler.head(4)

(3).数据集清洗和预处理 

Butler.describe() 

Butler.shape#处理前总共有30697个数据
Butler = Butler[pd.notnull(Butler['shot_made_flag'])]#通过以上数据集的列举对空值进行处理
Butler.describe() 
Butler.shape#处理后则使用25697个有用数据
Butler.info()#该数据集共有0-24也就是25个特征

(4). 数据探索性分析

单变量分析

plt.rcParams['font.sans-serif']=['SimHei']#防止中文标签报错
plt.rcParams['axes.unicode_minus']=False#防止负号报错
#查看巴特勒出手类型的分布
plt.figure(figsize = (10,6))
Butler['combined_shot_type'].value_counts().plot(kind = 'bar')
plt.xlabel('出手类型');plt.ylabel('出手次数');plt.title('吉米.巴特勒职业生涯不同出手类型的次数统计')

由上图可知巴特勒的拿手招式是2+1跳投,其次是突破上篮造成对手2+1

#查看巴特勒两分球,三分球的出手数
plt.figure(figsize = (8,6))
Butler['shot_type'].value_counts().plot(kind = 'bar')
plt.xlabel('远投还是中距离');plt.ylabel('出手次数');plt.title('吉米.巴特勒职业生涯远投和中距离的出手数')
plt.xticks(rotation = 0)

由上图可知巴特勒善于中距离跳投

#查看巴特勒出手距离的分布
plt.figure(figsize = (8,6))
Butler['shot_distance'].hist(bins = 100)
plt.xlabel('出手距离');plt.ylabel('出手次数');plt.title('吉米.巴特勒出手距离的分布')

从上图可知巴特勒出手集中在篮下10英尺到罚球线之间

#绘制箱型图
plt.figure(figsize = (6,4))
sns.boxplot(data = Butler,y = 'shot_distance')
plt.xlabel('出手距离');plt.ylabel('出手次数');plt.title('吉米.巴特勒出手距离的分布')

从上图可知巴特勒喜欢篮下强吃

#可视化巴特勒的出手区域,按照不同的标准划分的出手区域
import matplotlib.cm as cm
plt.figure(figsize  = (20,10))def scatter_plot_by_category(feat):alpha = 0.1gs = Butler.groupby(feat)cs = cm.rainbow(np.linspace(0,1,len(gs)))for g,c in zip(gs,cs):plt.scatter(g[1].loc_x,g[1].loc_y,color = c,alpha = alpha)plt.subplot(1,3,1)
scatter_plot_by_category(Butler['shot_zone_area'])plt.title('shot_zone_area')plt.subplot(1,3,2)
scatter_plot_by_category(Butler['shot_zone_basic'])
plt.title('shot_zone_basic')plt.subplot(1,3,3)
scatter_plot_by_category(Butler['shot_zone_range'])
plt.title('shot_zone_range')

图1为中距离热区,图二为上篮热区,图三为绝杀热区

Butler['shot_distance'].describe()#各距离投射占比
#巴特勒在各个位置投篮的次数
area = Butler['shot_zone_basic'].value_counts()
b = np.array([0,1,2,3,4,5,6])
plt.barh(b,area,align ='center')
plt.yticks(b,('中距离','进攻有理区','底线之外的三分','除进攻有理区外的禁区','右边底线三分','左边底线三分','后场'))
plt.xlabel('次数',fontsize=10)
plt.title('吉米.巴特勒在各区域投篮次数',fontsize=20)
plt.tight_layout()# 紧凑显示图片,居中显示
plt.show()

巴特勒对于中距离出手非常自信

双变量分析

#查看巴特勒的出手命中率
plt.figure(figsize = (6,4))
Butler['shot_made_flag'].value_counts(normalize = True).plot(kind = 'bar')
plt.xlabel('命中情况');plt.ylabel('命中个数');plt.title('吉米.巴特勒的出手命中率')

巴特勒出手命中率大约为43%,不输NBA大多数全明星球员

#观察不同出手类型与命中率之间的关系sns.barplot(data = Butler,x = 'combined_shot_type',y = 'shot_made_flag')

扣篮>擦板>上篮>勾手>跳投>补篮

#观察两分球与三分球的命中率sns.barplot(data = Butler,x = 'shot_type',y = 'shot_made_flag')

两分>三分

#观察出手距离与命中率之间的关系
sns.scatterplot(data = Butler, x = 'shot_distance',y = 'shot_made_flag' )

sns.violinplot(data = Butler, y = 'shot_distance',x = 'shot_made_flag' )

 巴特勒善于有把握方式的得分也就是近距离得分

从巴特勒数据集分析和结合数据资料得出:

由上图可以看出吉米.巴特勒在NBA里是一个攻防兼备,得分稳定的锋卫摇摆人(可打后卫也可打前锋)。巴特勒今年的季后赛下半场场均17分,投篮命中率59%,越是关键的时刻巴特勒越来劲。截止到目前为止,巴特勒已经拿下了3场40+,并且巴特勒每轮比赛都有40+的表现。从某种程度上说,巴特勒本赛季季后赛的发挥甚至超过了伦纳德,而且在洛瑞受伤之后,巴特勒还成为了热火场上最关键的组织点,进攻防守组织一把抓,巴特勒已经进入到了全新的模式当中。

对于巴特勒来说,过去他曾向热火众将许下诺言,他要夺冠而且一刻也不要等了,上赛季被淘汰时所有人都说巴特勒异想天开,现在的他则是用自己的实际行动来履行自己的诺言。如果本赛季巴特勒能够率队夺冠,那这又将是一个天天平平的普通球员,靠着自己的努力成为历史级别球员的故事。

项目2:科比生涯数据集分析(随机森林)(实验工具:Jupyter)

  1. 导入数据库

2.数据集清洗

结论:由上述结果可以看出,该数据集共有25个特征,其中24个特征都是完整的,只有shot_made_flag这个特征是存在缺失值的。所以接下来我们会将数据集切分为两部分,含有shot_made_flag的数据集作为训练集,确实shot_made_flag的数据集作为测试集。通过对训练集进行建模,来预测测试集上的shot_made_flag值。

3.数据预处理

结论:由于该测试集没有标签,所以我们需要通过交叉验证的方式将训练集分为训练样本和验证样本,用验证集来评估模型的好坏。最终选取最好的模型,对测试样本进行预测。

4.建立随机森林模型

结论:预测的结果放在kobe_prediction.csv中

从科比数据集分析和结合数据资料得出:

单看从科比比赛数据预测出的time_free training(空余训练时间)就可以看出科比训练有多么刻苦,左图每个格子代表科比每年中每个月的训练时间(单位:小时),而一个月最多是31天的744小时,左图最大为709小时(大多数靠近),最小为1小时(个别)。从这个数据我想到了科比曾说过的一句话。

勇于担当,不言弃,不服输,在逆境中创造奇迹,这正是曼巴精神所在。

NBA球星生涯数据集分析相关推荐

  1. NBA球星数据可视化分析-FineBI

    目录 一.实验(实训)目的 二.实验(实训)原理或方法 三.仪器设备.材料 四.实验(实训)步骤 五.实训记录及结果 <---------------------------------木易白驹 ...

  2. 9适应之力加多少攻击_NBA球星生涯最低分都是多少?詹皇碰上麦迪仅得3分,哈登最低1分...

    NBA球星之所以被称为球星很大的原因是因为他们的发挥一般都非常的稳定,无论是手感好不好他们都能稳定的输出帮助球队.但万事没有绝对,球星们也会在某些时候状态全无.今天我们就来看下NBA球星发挥最差的比赛 ...

  3. 快速制作html58nba,【PS抠图系列58】NBA球星4

    Hello,大家好,我是小申羊,很高兴又和大家见面啦! 这是PS抠图系列的第58篇文章. 1.写在前面 今天继续带来新的案例--NBA球星4. 先来看原图: 接着是透明背景: 最后是纯色背景: 下面进 ...

  4. 爬取大学排名和NBA球星数据并进行多维度可视化

    opexcel 模块地址:https://blog.csdn.net/wei_zhen_dong/article/details/105318970 import requests from lxml ...

  5. 冤大头?NBA球星库里花了 116 万买了一只猴头像,到底咋回事?

    上面这个公号,是我的一个备用号,为了防止万一哪天大号失联,平时一周我也会发三篇左右的我的思考,读书笔记,认知感悟等文章,带领大家一起探索精神与财务自由之路. 大家好,我是校长. 最近 NFT 非常火, ...

  6. 五十三、爱彼迎数据集分析建模

    爱彼迎数据集分析建模为本专栏的Python数据分析案例. 因为文件比较大,所以保存了百度云 链接:https://pan.baidu.com/s/1geUgsLejvpTKgBmcSMSIdQ 提取码 ...

  7. 【Python数据挖掘课程】四.决策树DTC数据分析及鸢尾数据集分析

    今天主要讲述的内容是关于决策树的知识,主要包括以下内容:         1.分类及决策树算法介绍         2.鸢尾花卉数据集介绍         3.决策树实现鸢尾数据集分析         ...

  8. 天啊!NBA球星将举办第一届科技峰会!

    近日,NBA球员工会(NBPA)宣布将于7月19-21日在洛杉矶举办有史以来第一届NBPA科技峰会,让NBA球员和硅谷科技界大佬齐聚一堂,畅聊科技和商业未来. 美国<体育画报>曾经统计,将 ...

  9. 朋友很喜欢打篮球,我用Python爬取了1000张他喜欢的NBA球星图片送给他【内附源码】

    大家好,我是辣条. 前言 朋友快过生日了,不知道送啥礼物[绝对不是因为我抠],想着他非常喜欢打篮球,篮球他很多个了,应该也不会缺[不会是因为篮球贵],那我就用技术白嫖点东西送给他吧,爬虫首当其冲呀,必 ...

最新文章

  1. 企业网站推广如何利用SEO获取精准流量?
  2. BZOJ 3685: 普通van Emde Boas树( 线段树 )
  3. 数字图像处理:第十一章基于特征向量的变换
  4. 1虚拟机下U盘或磁盘挂载,Ubuntu下的网络配置,图形化界面和命令界面之间的切换,软件源配置
  5. 走向.NET架构设计—第四章—业务层分层架构(前篇)
  6. 远程仓库---从远程库克隆
  7. 【Python学习】 简单语法与常见错误(持续更新)
  8. Ubuntu Linux服务器配置SSH无密码登陆
  9. (005)CSS选择器的具体性与层叠
  10. 国内外IGS数据及产品下载网站
  11. 给大家推荐一个免费职业评测
  12. Python实现基于VGG16迁移学习实现手写数字识别
  13. matlab中怎么计算信噪比,如何计算通信中的信噪比SNR
  14. html网页自动提示框代码,多种网页弹出窗口代码
  15. 计算机毕业设计Java自行车在线租赁管理系统2021(源码+系统+mysql数据库+Lw文档)
  16. eXtremeTable -
  17. 基于微信小程序的个人健康打卡系统设计与实现-计算机毕业设计源码+LW文档
  18. C++读取Wav文件
  19. mysql配置和优化
  20. Java基础-数组深入之经典案例实现-点名器

热门文章

  1. tp886n设置虚拟服务器,普联TL-WR886N V2-V3如何设置虚拟服务器
  2. android自定义控件之滚动广告条
  3. PDF转换图片小工具(高清 、免费、无水印、支持随意页数)
  4. 戴尔windows10桌面计算机,戴尔笔记本自带的win10系统怎么进行优化?
  5. Docker MySQL开启SSL加密传输方案
  6. 【Unity3d基础】Unity换装系统(1)
  7. 免ROOT使用Frida(不修改源代码)
  8. AccessHelper.cs
  9. HTML简单练习案例
  10. Geek Talk 034:消费升级大环境下的空间设计