kaggle:NBA球员投篮数据分析与可视化(一)

0?wx_fmt=jpeg


作为数据科学领域的金字招牌,kaggle已成为世界上最受欢迎的数据科学竞赛平台。在kaggle上,每个竞赛题下都藏匿着大批来自世界各地并且身怀绝技的数据科学家。作为一种众包模式,kaggle通过收取部分佣金将企业的数据挖掘问题发布在平台上并设立高额奖金来吸引数据科学家来解决。每位注册参加的kaggler都可以自由获取竞赛题目和数据集,并将自己的数据分析方案以报告的形式呈现在平台上供大家讨论,最后被企业方采用的数据分析方案的参赛者将会获得一大笔奖金。

鉴于目前小编的水平,不敢贸然去参赛,生怕做出来的结果排名垫底,于是盘算着先拿几个kaggle题的数据集来练手,一方面锻炼自己的数据思维和分析能力,另一方面则是提升R或者Python的coding能力。小编这次拿来练手的数据集叫做 NBA shot log.csv,该数据集包括了2014-15赛季NBA30支球队904场常规赛281名球员将近13万的投篮数据,数据包括比赛双方、主客场、胜负情况、投篮球员、防守球员、投篮距离、命中次数等21个变量,可自由根据分析目的来进行数据挖掘建模。小编经过几天的探索,结合了kaggle上一干数据大神们的分析方案,决定分两篇推文展现对该数据集的分析挖掘。本文主要给大家展现对该数据集的探索性数据分析(EDA)和可视化,下篇将对数据拟合一些机器学习算法来预测球员们的投篮命中率情况。kaggle中 NBA shot log.csv的界面如下:

0?wx_fmt=png


作为一名既热爱数据分析又看了十几年球的小编而言,不得不说NBA的数据实在是太适合拿来做分析了。经常看球的JRs们或许知道,休斯顿火箭队总经理莫雷就迷信一套篮球数据分析理论,坚信在数据的支撑下做出的决策是最好的决策。今年金州勇士队的夺冠和火箭成功杀入西部次轮无疑给莫雷的魔球理论提供了最好的事实证明。本篇虽然是做探索性数据分析和可视化,但无疑在分析之前我们需要拟定几个分析目标:

  • 现今NBA球员们的投篮选择有何偏好?

  • 球员们的投篮命中率都与哪些因素相关?

  • 主客场真的对球员表现、球队胜负有那么大影响吗?

  • 现今联盟里有哪些关键先生?

  • 哪些球员防守好,哪些球员防守差?


下面我们就根据上面五大目标来用R语言对数据集做探索性数据分析与可视化。

 读入数据后简单看一波数据概况:

nba_shots<-read.csv("shot_logs.csv")
dim(nba_shots) #数据量
[1] 128069 21
str(nba_shots) #数据结构
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 128069 obs. of 21 variables:
$ GAME_ID : int 21400899 21400899 21400899 21400899 21400899 21400899 21400899 21400899 21400899 21400890 ...
$ MATCHUP : Factor w/ 1808 levels "DEC 01, 2014 - DEN @ UTA",..: 1291 1291 1291 1291 1291 1291 1291 1291 1291 1277 ...
$ LOCATION : Factor w/ 2 levels "A","H": 1 1 1 1 1 1 1 1 1 2 ...
$ W  : Factor w/ 2 levels "L","W": 2 2 2 2 2 2 2 2 2 2 ...
$ FINAL_MARGIN : int 24 24 24 24 24 24 24 24 24 1 ...
$ SHOT_NUMBER : int 1 2 3 4 5 6 7 8 9 1 ...
$ PERIOD : int 1 1 1 2 2 2 4 4 4 2 ...
$ GAME_CLOCK : Factor w/ 719 levels "0:00","0:01",..: 70 15 1 228 155 615 136 600 434 213 ...
$ SHOT_CLOCK : num 10.8 3.4 NA 10.3 10.9 9.1 14.5 3.4 12.4 17.4 ...
$ DRIBBLES : int 2 0 3 2 2 2 11 3 0 0 ...
$ TOUCH_TIME : num 1.9 0.8 2.7 1.9 2.7 4.4 9 2.5 0.8 1.1 ...
$ SHOT_DIST : num 7.7 28.2 10.1 17.2 3.7 18.4 20.7 3.5 24.6 22.4 ...
$ PTS_TYPE : int 2 3 2 2 2 2 2 2 3 3 ...
$ SHOT_RESULT : Factor w/ 2 levels "made","missed": 1 2 2 2 2 2 2 1 2 2 ...
$ CLOSEST_DEFENDER : Factor w/ 473 levels "Acy, Quincy",..: 15 51 51 62 471 456 219 351 314 132 ...
$ CLOSEST_DEFENDER_PLAYER_ID: int 101187 202711 202711 203900 201152 101114 101127 203486 202721 201961 ...
$ CLOSE_DEF_DIST : num 1.3 6.1 0.9 3.4 1.1 2.6 6.1 2.1 7.3 19.8 ...
$ FGM  : int 1 0 0 0 0 0 0 1 0 0 ...
$ PTS  : int 2 0 0 0 0 0 0 2 0 0 ...
$ player_name : Factor w/ 281 levels "aaron brooks",..: 36 36 36 36 36 36 36 36 36 36 ...
$ player_id  : int 203148 203148 203148 203148 203148 203148

加载分析所需要的R包,本篇我们主要用到数据处理包dplyr以及可视化包ggplot2。

library(dplyr)
library(ggplot2)
1
球员们的投篮选择

现今NBA流行小球战术,强化三分球和内线突破而弱化中距离出手,我们通过数据分析来看看球员们投篮出手选择问题 ,选取投篮距离SHOT_DIST和防守人距离CLOSE_DEF_DIST等变量。先看球员们的出手距离分布:

ggplot(nba_shots,aes(SHOT_DIST))+geom_histogram()

0?wx_fmt=png

由投篮距离的直方图分布可见,现今球员的投篮距离是个双峰分布,容易解释的是球员们在投篮上更偏向于冲击篮下突破或者选择三分线外发炮,而中距离出手明显较少,禁区内距离为0~10英尺,三分线为22英尺,由图中看明显符合这一趋势。再来看球员出手投篮时防守人的位置分布:

ggplot(nba_shots,aes(CLOSE_DEF_DIST))+geom_histogram()+ xlim(0,20)

0?wx_fmt=png

从防守人位置分布图中可以看出,大多数投篮发生时防守人并未完全失位,5英尺以内防守人对投篮球员都有足够的威胁,只有少数快攻发生时防守球员不在位置而放弃防守,一方面可见NBA比赛强度可观,另一方面也体现了NBA球员们的技战术水平。

2
球员的命中率和哪些因素有关

熟悉篮球的JRs们一定清楚,球场上防守强度的高低决定了对手的投篮命中率,我们来看看NBA球员们的命中率都与哪些因素相关。选取投篮距离SHOT_DIST、防守人距离CLOSE_DEF_DIST、投篮结果SHOT_RESULT、运球次数DRIBBLES以及触球时间TOUCH_TIME等变量:

ggplot(nba_shots,aes(SHOT_DIST, CLOSE_DEF_DIST))+
     geom_point(aes(color=factor(SHOT_RESULT)))+
     geom_vline(xintercept=c(15,22),color="blue")

0?wx_fmt=png

由上图可以看出,命中次数在近篮筐出有一个垂直分布,而防守人也不知所踪,这是由于防守反击造成的快攻上篮或者扣篮而通常防守人还在后场早已放弃防守所致,我们在罚球线距离(15英尺)和三分线距离(22英尺)出画了两条蓝线,篮下到罚球线距离之间明显有一个低谷,这也反映了当前在NBA球队里中距离投篮不受重视,而三分线附件则有一个投篮的密集分布,各支球队在三分线上的攻防也做足文章,显然,在大量的三分球战术下,各支球队在三分线外的命中率仍然不高。当然了,整体命中率依然是从篮下到三分线逐渐下降的分布趋势。

再看球员的运球次数、触球时间与命中投篮之间的关系:

ggplot(nba_shots,aes(DRIBBLES,TOUCH_TIME))+
   geom_point(aes(color=factor(SHOT_RESULT)))+ylim(-10,20)

0?wx_fmt=png

容易看出的是,球员的投篮命中率与运球次数、触球时间并没有明显相关关系,接球就投(零运球)的情况下NBA球员通常都有一个较高的命中率,这一点也容易解释,通常战术跑出来后,某位球员出现空位的几率比较大,无论是三分球远射还是飞起扣篮,命中率都是极高的。在长时间运球与触球的情形下,虽然防守人能做好针对性防守,但此时一般球星都能通过运球找到节奏,再想防住他们的投篮困难就比较大了。参考詹姆斯.哈登和斯蒂芬.库里。而运球此时与触球时间则是明显的正相关关系。

3
主客场对球员表现和球队输赢影响大吗

事实上,主客场的影响确实大,小编看了15年NBA几乎所有球队的统计数据在客场和主场都有一个明显的差距,当然,我是说勇士和马刺这样的球队除外,毕竟宇宙勇强大到可以无视客场环境的存在的地步。还是拿数据说话,这里我们选取的变量包括主客场 LOCATION、投篮命中次数FGM以及通过FGM来构造命中率这个变量,采用dplyr包动词函数和管道操作符号来处理:

(home_away<-nba_shots %>% group_by(LOCATION) %>% 
    summarise(PERCENTAGE=sum(FGM)/length(FGM)*100))

    LOC   PER
               1
              客场         44.8117
               2              主场         45.6173

从数据分析的结果来看,主客场球队的命中率并无显著差别,但就这0.8个投篮百分点的差异足以让胜负翻转,且看主客场球队的胜负对比:

wins<-nba_shots %>% group_by(GAME_ID,LOCATION) %>% filter(W=='W',FGM
 ==1)
ggplot(data=wins,aes(LOCATION,fill=factor(W)))+geom_bar()

0?wx_fmt=png

一对比到输赢上,差了几千场胜利啊!

4
现今联盟里有哪些关键先生

先看第一节比赛里都有哪些得分能手。通过dplyr里面的filter函数筛选出PERIOD==1,SHOT_DIST>5,然后用group_by对球员姓名进行数据分组,summarise函数归纳技术统计,mutate函数变形数据框将命中率变量加入,arrange函数对变量重排降序处理,一个问题我们几乎用了dplyr的所有动词函数:

first_quarter_guys<-nba_shots %>% filter(PERIOD==1,SHOT_DIST>5) %>% 
 group_by(player_name) %>%
 summarise(made=sum(FGM),
  points=sum(PTS),
  total_attempts=length(FGM),
  ave_touch=mean(TOUCH_TIME),
  ave_distance=mean(SHOT_DIST)) %>%
mutate(percentage=made/total_attempts) %>%
arrange(desc(percentage)) %>% filter(total_attempts>200)
best_1st<-data.frame(first_quarter_guys)

第一节大神们出炉:

0?wx_fmt=png

第一节得分最多的是JJ.雷迪克?这跟快船队的战术有关啦,第一节的比赛保罗和全队都是找雷迪克的,各种三分出手。

如果说先赢不叫赢,第一节得分不关键的话,我们再来看看在决定球队胜负的第四节,联盟中又有哪些关键先生呢。同样的处理方法:

fourth_quarter_guys<-nba_shots %>% filter(PERIOD==4,SHOT_DIST>5) %>%
group_by(player_name) %>%
  summarise(made=sum(FGM),
points=sum(PTS),
  total_attempts=length(FGM),
  ave_touch=mean(TOUCH_TIME),
  ave_distance=mean(SHOT_DIST)) %>%
mutate(percentage=made/total_attempts) %>%
arrange(desc(percentage)) %>% filter(total_attempts > 150)
best_4th<-data.frame(fourth_quarter_guys)

关键先生出炉!

0?wx_fmt=png

两年前的韦斯利.马修斯是联盟头号第四节大腿!彼时的波特兰有利拉德、阿德、巴图姆、洛佩斯和马修斯为核心的首发阵容,强的不要不要的。保罗、詹姆斯、哈登、德克、韦德、贾马尔.克劳福德这些都是联盟成名已久的球星啦。顺便说一句,路威两年前就是路爸爸了。

5
最好、最差的防守球员是谁

同样是dplyr包的方法,这个实在太好用、太强大有没有!筛选、分组、归纳、重排,先来看看NBA里面最好的防守者有哪些:

nba_shots %>%
filter(SHOT_RESULT=="missed") %>%
group_by(CLOSEST_DEFENDER) %>%
summarise(GoodDefense = n()) %>%
ungroup %>%
arrange(desc(GoodDefense)) %>%
head

 DEFENDERGoodDefens
               1 塞吉.伊巴卡
             480
               2德拉蒙德.格林
             450
               3德安德鲁.乔丹
             414
               4 保罗.加索尔             400
               5保罗.米尔萨普             393
               6 马辛.戈塔特
             386

清一色的内线球员哈,毕竟内线球员的防守数据(篮板+封盖)可以直观量化。雷霆时期伊巴卡的封盖真不是吹的。

再看哪些球员防守比较差了:

nba_shots %>%
   filter(SHOT_RESULT=="made") %>%
   group_by(CLOSEST_DEFENDER) %>%
   summarise(BadDefense = n()) %>%
   ungroup %>%
   arrange(desc(BadDefense)) %>%
   head

  DEFENDER

   BadDefens

               1德安德鲁.乔丹
             381
               2保罗.米尔萨普             357
               3 钱宁.弗莱
             355
               4 保罗.加索尔
             354
               5 武切维奇
             335
               6 迪恩
             334


小乔丹:说我防守好的是你,说我防守差的也是你!说好的数据说话呢?

0?wx_fmt=jpeg

哈哈,这里我们只是单一指标来衡量防守,所以评估还是相当不成熟的,在NBA里防守数据很难量化,现在专业的NBA数据分析师有各种进阶数据来衡量一名球员的防守数据,我们这里只供参考,重在数据分析过程哈。


kaggle上这个关于NBA的13万的数据集里面还有太多值得分析和探索的内容,小编在这里也仅仅是选取了几个自己感兴趣的方面进行了分析,更多的方面需要大家自己去挖掘,下一篇小编会在此基础上做一些特征选择与构造以及机器学习算法建模。建议各位去kaggle上下载一下这个数据集自己练手,数据分析与数据挖掘,Practice make perfect !







640?wx_fmt=png


一个数据科学践行者的学习日记

0?
640?wx_fmt=jpeg
长按二维码.关注数据科学家养成记






本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/27295.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实例:【基于机器学习的NBA球员信息数据分析与可视化】

文章目录 一、项目任务二、代码实现及分析1. 导入模块2. 导入文件并对文件信息进行整体探测3. 数据预处理3.1 查看数据集信息3.2 数据清洗与转换3.3 数据去重 4. 数据可视化4.1 数据相关性4.2 球员数据分析 5. 基于逻辑回归的球员分类5.1 数据重定义5.2 划分数据集与验证集5.3 …

利用Python预测NBA比赛结果

关注「实验楼」&#xff0c;每天分享一个项目教程 NBA总决赛正在火热上演&#xff0c;而有数据的地方就有预测&#xff0c;本教程就教你使用Python预测NBA比赛的结果。 正文共&#xff1a;3240 字 预计阅读时间&#xff1a;8 分钟‍ 一、实验介绍 1.1 内容简介 不知道你是否…

PayPal,Stripe,Square轮询支付系统

轮询展示 展示我们轮询的页面 轮询套餐 根据不同的用户和需求&#xff0c;可以选择不同的套餐 普通版 1500元 1年 1个用户 支持Paypal/Stripe 不限制A站个数 不限制B站个数 不限制提交模式 订单管理 物流管理 风控管理 必要的网站数据处理 24小时远程协助 开始…

使用chatgpt过掉邮生活滑块记录 ob+wasm print参数

****## 邮生活滑块记录 地址 &#xff1a;‘aHR0cHM6Ly95b3VzaGVuZ2h1by4xMTE4NS5jbi93eC8jL2xheGluUmVnaXN0P3VzZXJJZD0yMTA1NTQ2MTYxOSZhY3Rpdml0eUlkPTI4MiZydWxlSWQ9Mjg’ 如图 如上图 大概就这点参数 基本都是前面请求拿的 除了print enmiid 。。。。。。 结果&#xff1…

连续支付(周期扣款)功能开发及注意事项

最近有一个版本需求&#xff0c;需要接入周期扣款做连续会员的功能&#xff0c;没想到这一做就是小半个月&#xff0c;趟了很多坑&#xff0c;所以觉得有必要记录一下 1.周期扣款总体设计 在支付宝和微信中&#xff08;非苹果支付&#xff09;&#xff0c;周期扣款的流程主要有…

证监会计算机类笔试上岸经验,公务员考试笔试166分上岸经验(全干货)

原标题&#xff1a;公务员考试笔试166分上岸经验(全干货) 一、考前自审 1、具备公务员考试需要的相关知识结构与基本素质(70%)。包括政治素质(理解和掌握国家大政方针与政策)&#xff0c;基本科学素质&#xff0c;常识&#xff0c;阅读理解能力&#xff0c;语言功底&#xff0c…

行政职业能力测试软件,公务员行政职业能力测试考试宝典

公务员行政职业能力考试宝典是一款通用的考试练习软件&#xff0c;丰富的题库&#xff0c;包含历年真题和模拟试题&#xff0c;有时间就可以开启刷题模式&#xff0c;对于错误的题目可以进行错题重做、解题思路介绍、统计分析等&#xff0c;达到熟练的程度&#xff0c;大大提高…

一政网是真实助公考上岸的吗?

在当下的经济时代&#xff0c;需要不断的学习&#xff0c;不断的提升自我。报考公务员考试成为了不二选择。报考公务员考试成为了毕业生、在职员工、宝妈等等众多不同类型人的最佳选择。但是公务员考试的难度大&#xff0c;想要公考一次上岸&#xff0c;那么就必需选择报班学习…

2021四川紧急选调/国考备考策略----申论/行测(2020.8.22号开始)

文章目录 1 申论1.1 申论题型1.2 申论备考策略1.3 申论做题顺序及复习阶段 2 行测备考2.1 行测题型2.2 行测备考策略 3 参考资料 1 申论 1.1 申论题型 申论部分一共有五大题型(归纳概括、提出措施、综合分析、公文写作、大作文) 1.2 申论备考策略 这五个题型在国考中是一样…

公务员考试要求及流程梳理

背景 虽然我不考, 但考公这么热门, 在信息层面不能落伍. 本文以 浙江2023省考 (考试时间在2022年12月) 为例, 主要梳理 怎么报名, 选职位, 考试科目与题型, 录用流程等. 为什么考公/考编这么热 因为当下的社会环境对员工太不友好了: 工作强度大, 精神压力大, 还有硬性比例淘…

基于JavaWeb的事业单位公务员招考信息发布平台-考务考试报名系统

本文介绍了使用Java技术开发公务员招考信息发布平台的设计与实现过程&#xff0c;首先对实现该系统的技术进行分析&#xff0c;说明选择Java和MySQL数据库的必要性&#xff0c;然后对公务员招考信息发布平台的需求进行分析。并接着对系统进行设计&#xff0c;包括架构设计、功能…

OpenAI发布了GPT的最新一代版本ChatGPT-4

今日凌晨&#xff0c;OpenAI发布了GPT的最新一代版本ChatGPT-4&#xff0c;相比上一代&#xff0c;其AI能力再度提升&#xff0c;同时支持输入的内容不再仅限于文字&#xff0c;而且支持图像内容的输入&#xff0c;成为一个能够理解照片的人工智能。 其AI能力的恐怖之处体现在哪…

chatgpt赋能python:Python循环暂停和继续的方法

Python循环暂停和继续的方法 Python是一种高级编程语言&#xff0c;在编程中使用循环结构非常常见。很多情况下&#xff0c;我们需要在循环中暂停或者继续执行。在本文中&#xff0c;我们将介绍如何在Python中实现循环暂停和继续的方法。 循环暂停和继续的意义 在Python编程…

Chat GPT5如果问世会对世界产生什么影响?以及未来chat gpt 5会取代什么类型的工作。

Chat GPT-5是一种基于人工智能技术的自然语言处理系统&#xff0c;可以自动回复和生成各种文本随着其技术的不断发展和改进&#xff0c;Chat GPT-5对未来世界将会产生以下几方面的影响&#xff1a; 1. 提升人类语言交流的效率和质量 Chat GPT-5可以高效地处理自然语言&#xf…

chatgpt 正面案例 2018-11-13T20:20:39+00:00 后面的 +00:00 代表什么意思

chatgpt 百度 2018-11-13T20:20:3900:00 后面的 00:00 代表什么意思? &#xff01;&#xff01;&#xff01;有任何问题请让我知道&#xff0c;十分感激&#xff01;谢谢&#xff01; 2021-07-29T21:35:5408:00 2021-07-29T21:35:54Z 中间的T&#xff08;当日期与时间组合…

chatpdf+mindshow由论文pdf直接生成报告PPT,拯救研究牲

chatpdfmindshow由论文pdf直接生成报告PPT&#xff0c;拯救研究牲 感谢AIGC技术&#xff0c;现在可以从论文的pdf直接生成展示的PPT。 (STEP1STEP2)最终效果预览 步骤 STEP1、论文PDF到PPT的markdown格式 chatpdf 把论文pdf提交给chatpdf并善用以下prompts 你会说中文吗 接下…

chatgpt赋能python:Python打包整个项目:打包与分享

Python打包整个项目&#xff1a;打包与分享 如果您是一名Python开发者&#xff0c;您可能已经经历过在多个环境中为您的项目安装依赖项的困惑。解决方案是将您的应用程序打包为一个易于安装的软件包。 在本文中&#xff0c;我们将学习如何使用pipenv和pyinstaller创建、打包和…

tiktoken (a fast BPE tokeniser for gpt4、chatgpt)

OpenAI在其官方GitHub上公开了一个最新的开源Python库&#xff1a;tiktoken&#xff0c;这个库主要是用做字节对编码(BPE)的。相比较HuggingFace的tokenizer&#xff0c;其速度提升了好几倍。 chatgpt 按token 数量收费&#xff0c;1000个token大约700个单词&#xff0c;可以用…

chatgpt赋能python:Python下载安装教程

Python下载安装教程 Python是一种高级编程语言&#xff0c;具有简单易学、强大多样的特点&#xff0c;不仅可以用来开发网站、应用程序、游戏&#xff0c;还可以用于数据科学、机器学习、人工智能等领域&#xff0c;被广泛应用于各行各业。 本文将为您提供详细的Python下载安…

LLaMA模型系统解读

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…