kaggle:谁是NBA最佳防守球员?(二)

0?wx_fmt=jpeg


接着前几天发的关于kaggle中NBA球员投篮数据探索性数据分析和可视化分析之后,小编本打算对这13万的投篮数据跑几个机器学习模型预测一下投篮的,可是电脑内存不给力,试了几次之后便作罢了。还打算第一次试一下kaggle上被传的神乎其技的大杀器xgboost的呢。机器学习的模型都写好了,有图为证:


0?wx_fmt=png


于是便转而去做特征构造,毕竟知乎和Quora上都认为特征工程作为kaggle的核心技能。前几天NBA颁奖大会本赛季的最佳防守球员是勇士队的追梦.格林,于是便从防守端的角度出发,利用特征工程手段来分析2014-15赛季哪些球员才算NBA里拥有顶级防守水平的球员。


不了解特征工程的同学看这篇文章就够了:

https://www.zhihu.com/question/29316149


小编这里就不分条条框框了,直接上代码来的舒适。

读入数据,进行特征观察与变量筛选:

nbashots<-read.csv("D:/Rdata/kaggle_nbashots/shot_logs.csv")
str(nbashots)
attach(nbashots)
#剔除触球时间小于0的记录
nbashots <- nbashots[TOUCH_TIME > 0,]
#因与FGM变量含义一致,删除Shot Result变量
nbashots <- nbashots[,-14]

数据集中有两个关于时间的变量,一个是比赛时间变量GAME_CLOCK,另一个是投篮时间变量SHOT_CLOCK,二者格式并不统一,我们可以使用gsub函数进行处理:

player_name <- as.character(player_name)
player_name <- factor(player_name)
#处理比赛时间变量
GAME_CLOCK <- as.character(GAME_CLOCK)
GAME_CLOCK <- gsub(":", ".", GAME_CLOCK)
#与投篮时间变量类型一致
GAME_CLOCK <- as.numeric(GAME_CLOCK)


下面就进入到特征工程的表演时间了。我们首先定义比赛中所谓的关键时刻,将投篮时间在第四节最后一分钟以内且双方最终分差在五分以内的投篮定义为关键投篮。且看特征构造过程:

nbashots$Crucial_time <- "No"
nbashots$Crucial_time[nbashots$GAME_CLOCK <= 1 &
nbashots$PERIOD >= 4 & abs(nbashots$FINAL_MARGIN) <= 5] <- "Yes"
nbashots$Crucial_time <- factor(nbashots$Crucial_time)


再通过运球次数和投篮距离来定义相应的投篮类型。我们将投篮类型分为六种:接球就投、空切、突破上篮、单打、长时间单打和定点三分。

nbashots$shot_type[nbashots$DRIBBLES <= 1 & 
     nbashots$SHOT_DIST > 4] <- 'Catch and Shoot'
nbashots$shot_type[nbashots$DRIBBLES <= 1 &
     nbashots$SHOT_DIST <= 4] <- 'Cut'
nbashots$shot_type[nbashots$DRIBBLES > 1 &
     nbashots$SHOT_DIST  <= 4] <- 'Drive'
nbashots$shot_type[nbashots$DRIBBLES > 4] <- 'ISO'
nbashots$shot_type[nbashots$DRIBBLES > 20] <- 'Long ISO'
nbashots$shot_type[nbashots$DRIBBLES <=1 &
      nbashots$PTS_TYPE == 3] <- 'Spot Up Three'
nbashots$shot_type <- factor(nbashots$shot_type)

看一下统计结果:

summary(nbashots$shot_type)
Catch and Shoot    Cut   Drive    ISO  Long ISO Spot Up Three
  34134   17025   4665   18109    507   28090
  NA's
  22181

长时间ISO的球霸毕竟还是少的哈。

根据防守人距投篮人距离来定义投篮质量。将投篮质量分为open(空位)wide open(大空位)tightly contested(无死角盯防)contested(全面盯防到位)四种:

nbashots$shot_quality <- 'Open'
nbashots$shot_quality[nbashots$CLOSE_DEF_DIST <= 2]
<- 'Tightly Contested'
nbashots$shot_quality[nbashots$CLOSE_DEF_DIST <= 3.5] <- 'Contested'
nbashots$shot_quality[nbashots$CLOSE_DEF_DIST > 6] <- 'Wide Open'
nbashots$shot_quality <- factor(nbashots$shot_quality)

看一下统计结果:

summary(nbashots$shot_quality)
Contested      Open Wide Open
   58965     44404     21342

看来坊间传说的在NBA里任何时间你拿到球都有一个七尺大汉张牙舞爪的站在你身前的说法不是虚的啊。


下面为了定义一名NBA球员的防守有哪些指标构成,我们需要通过变量之间的关系构造被防守人投篮命中率(OppFG)、被防守人每回合得分(OppPPP)、与投篮人距离(OppDist)、每名防守人防守的投篮次数(ShotsCont)、防守投篮时与篮筐的平均距离(RimDist)以及每名球员作为离投篮人最近的防守投篮次数(ShotsNear),在构造这些防守变量前,需要创建一些空的向量来存储这些变量内容。数据集中包括473名防守球员,我们利用rep函数如下:


OppFG <- rep(1, 473)
OppPPP <- rep(1, 473)
OppDist <- rep(1, 473)
ShotsCont <- rep(1, 473)
RimDist <- rep(1, 473)
ShotsNear <- rep(1, 473)

FGM <- nbashots$FGM
PTS <- nbashots$PTS
CLOSE_DEF_DIST <- nbashots$CLOSE_DEF_DIST
SHOT_DIST <- nbashots$SHOT_DIST
CLOSEST_DEFENDER <- nbashots$CLOSEST_DEFENDER

for (i in 1:473) {
 OppFG[i] = sum(FGM[CLOSEST_DEFENDER == DefenderList[i]])
 /length(FGM[CLOSEST_DEFENDER == DefenderList[i]])
 OppPPP[i] = sum(PTS[CLOSEST_DEFENDER == DefenderList[i]])
 /length(FGM[CLOSEST_DEFENDER == DefenderList[i]])
 OppDist[i] = sum(CLOSE_DEF_DIST[CLOSEST_DEFENDER ==
 DefenderList[i]])/length(FGM[CLOSEST_DEFENDER == DefenderList[i]])
 ShotsCont[i] = length(FGM[CLOSEST_DEFENDER == DefenderList[i]
 & CLOSE_DEF_DIST <= 3.5])
 RimDist[i] = sum(SHOT_DIST[CLOSEST_DEFENDER == DefenderList[i]])
 /length(FGM[CLOSEST_DEFENDER == DefenderList[i]])
 ShotsNear[i] = length(FGM[CLOSEST_DEFENDER == DefenderList[i]])
}

创建球员防守能力指标的数据框nba_def并进行统计:


nba_def <- data.frame(DefenderList, OppFG, OppPPP, 
OppDist, ShotsCont, RimDist, ShotsNear)
summary(nba_def)
      DefenderList     OppFG            OppPPP          OppDist         ShotsCont    
Acy, Quincy   :  1   Min.   :0.0000   Min.   :0.0000   Min.   : 1.000   Min.   :  0.0  
Adams, Jordan :  1   1st Qu.:0.4233   1st Qu.:0.9348   1st Qu.: 3.888   1st Qu.: 42.0  
Adams, Steven :  1   Median :0.4524   Median :1.0026   Median : 4.165   Median :112.0  
Adrien, Jeff  :  1   Mean   :0.4579   Mean   :1.0194   Mean   : 4.187   Mean   :124.7  
Afflalo, Arron:  1   3rd Qu.:0.4821   3rd Qu.:1.0749   3rd Qu.: 4.454   3rd Qu.:187.0  
Ajinca, Alexis:  1   Max.   :1.0000   Max.   :2.6667   Max.   :18.900   Max.   :423.0  
(Other)       :467                                                                    
   RimDist        ShotsNear    
Min.   : 4.20   Min.   :  1.0  
1st Qu.:11.99   1st Qu.: 96.0  
Median :14.84   Median :253.0  
Mean   :14.09   Mean   :263.7  
3rd Qu.:16.30   3rd Qu.:406.0  
Max.   :23.25   Max.   :791.0  


简单用几个指标看下2014-15赛季哪些球员的防守表现较为突出。先通过限制对手命中率和限制对手每回合得分数来看一下,ggplot2作图展示:

ggplot(data = nba_def[ShotsCont >= 150 & OppFG <= .41,],
      aes(OppFG, OppPPP)) +
 geom_point(colour = "black", size = 2) +
 geom_point(aes(colour = DefenderList)) +
 geom_smooth(method = "lm", se = FALSE) +
 geom_text(aes(label = DefenderList), size = 3, vjust = 0,
 check_overlap = TRUE) + guides(colour = FALSE) +
 labs(x = "Opponent Field Goal Percentage",
 y = "Opponent Points per Possesion")

在防守对方投篮150次以上并且限制对方命中率在41%以下的优秀防守球员中,对手的命中率和每回合得分数表现如下图:

0?wx_fmt=png

一些以防守凶悍著称的球员包括今年首轮给登哥造成麻烦的罗伯森、爵士的戈伯特、勇士的博格特、德拉蒙德.格林等球员。当然图中也有库里和蒙塔这类防守一般的球员,通过限制对手命中率和每回合得分数的线性关系可以看出来。


再来看一个与投篮人距离和每回合得分数之间的关系图:

ggplot(EliteDef, aes(OppDist, OppPPP)) + 
 geom_point(colour = "black", size = 2) +
 geom_point(aes(colour = DefList)) +
 geom_smooth(method = "lm", se = FALSE) +
 geom_text(aes(label = DefenderList), size = 3, vjust = 0,
 check_overlap = TRUE) +
 guides(colour = FALSE) +
 labs(x = "Average Distance of Contest",
 y = "Opponent Points per Possession")

0?wx_fmt=png

由图中也可以看出,二者也呈现出较强的线性关系。NBA里一些长手长脚的球员即使你离他4英尺远以上,他的长臂干扰仍然可以使得你的命中率极低。比如雷霆的安德烈.罗伯森、鹈鹕的戴维斯等。


总体写的比较乱,仅分析了一点内容,对于构造的防守指标里面的其他没用到的指标也大有文章可做。这里小编仅展示一些特征工程的方法,毕竟这才是kaggle的核心。部分参考了kaggle用户Stefanlangen的结果,并对部分代码做了优化。kaggle给的每个数据集都有太多可供挖掘的部分,有兴趣的同学可以深入探索下啦。最后放一张我麦的照片吧。


0?wx_fmt=jpeg








640?wx_fmt=png




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


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





















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

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

相关文章

篮球中各个位置的名称及介绍…

正规篮球比赛是5对5&#xff0c;赛场上分布着五个篮球位置&#xff0c;分别是&#xff1a;中锋&#xff08;C&#xff09;、大前锋&#xff08;PF&#xff09;、小前锋&#xff08;SF&#xff09;、得分后卫&#xff08;SG&#xff09;、控球后卫&#xff08;PG&#xff09; 来…

几行代码,GPT-3变ChatGPT!吴恩达高徒、华人CEO震撼发布Lamini引擎

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【计算机视觉】微信技术交流群 转载自&#xff1a;新智元 | 编辑&#xff1a;Aeneas 好困 【导读】这个全新发布的Lamini引擎&#xff0c;大大拉低了模型训练的门槛&#xff…

抖音小店无货源是怎么做的?开店需要我们准备什么?经验分享

大家好&#xff0c;我是电商糖果 无货源模式流行于14-15年&#xff0c;最早是在某宝、某东、多多这些平台 目前抖音小店无货源的情况&#xff1a; 抖音小店和其他传统电商平台不一样&#xff0c;抖音小店起店是很快的&#xff0c;基本上5-20天小店就可以稳定出单了。 现在直…

抖音小店开通后为什么不出单?新店一定要看看是不是这三个方面没做好

大家好&#xff0c;我是电商年年 想要做好抖音小店&#xff0c;找对方法很重要。很多人的抖音小店开通后迟迟不出单&#xff0c;其实主要有三个原因。 选品为王 做电商&#xff0c;产品才是第一位&#xff0c;其他都要往后靠。选品首先要确定类目&#xff0c;之前很多人都在…

关于抖音小店无货源,作为过来人,来给你推荐几个好做的类目

Hello这里是六一&#xff0c;一个在无货源模式下闯荡多年的电商人。 好的类目对于操作无货源来说也是一个关键点&#xff0c;类目选的没问题&#xff0c;那起点就比别人高&#xff0c;做起来容易得多。 上边在讲营业执照问题的时候建议新手把全类目都开通&#xff0c;但是在做…

抖音小店无货源怎么做?具体步骤讲解,经验分享

哈喽&#xff0c;大家好&#xff0c;我是布丁。 废话不多说&#xff0c;直接上干货。 抖音小店无货源是什么&#xff1f; 抖音小店就是在抖音上开一家小店&#xff0c;抖音小店是一个电商平台&#xff0c;无货源是一种操作模式。 无货源模式就是在网上采集其他店铺的商品&a…

抖音橱窗or抖音小店?这3点,新手开店必看!

不会吧不会吧&#xff0c;都2023了还有人分不清抖音橱窗和小店的区别&#xff1f;今天小编就带你了解一下&#xff0c;不再掉大坑。 1、性质不同 商品橱窗 它只是展示商品的一个窗口&#xff0c;是抖音的一个电商功能&#xff0c;主要通过短视频或者直播的形式推广商品&…

抖音小店商品卡访客七天新增1w+ 2023无货源起店方法,重点必看

2023年最新的起店玩法&#xff0c;不用动销就能起店&#xff0c;七天商品卡访客就能到1万&#xff1a; 我们新开的好几个店铺都是这样做起来的&#xff0c;其中有两个核心&#xff0c;一定要认真看完。 第一步&#xff1a;低价引流款拉流量 店铺开好以后&#xff0c;第一天上…

想做抖音小店无货源还在全网找教程?这里有你最需要的开店教程

大家好&#xff0c;我是电商糖果 最近随着互联网的快速发展&#xff0c;电商也在顺应时代的变化开始有了新的发展模式 抖音小店无货源&#xff0c;一家做短视频的平台却把电商做得风生水起&#xff0c;在双十一&#xff0c;双十二&#xff0c;年货节屡屡出圈。 抖音平台这个…

​分享|Tiktok小店入驻如何选择​

最近有很多小伙伴问“TikTok普通商家与定邀商家有什么不同&#xff1f;现在入驻应该如何选择&#xff1f;”想必各位还在观望的卖家都听到过TikTok小店有分定向邀约&#xff08;简称“定邀”&#xff09;和普通入驻&#xff08;简称“普招”&#xff09;的通道&#xff0c;那么…

抖音商城店铺分享链接自动化

一、制作背景 目前抖音商城店铺商品分享只能手动分享 如果分享的店铺数量较大就费时又费力&#xff0c; 二、解决问题 人工分享链接数量较大就费时费力不利于提升效率 完全可以让脚本自动滚动采集抖音店铺分享链接解放双手。 三、运行环境 手机和各种模拟器 步骤一 用户手动打…

必看,抖音小店无货源模式到底该怎么做?

大家好&#xff0c;我是电商年年 不得不说抖音小店现在是真的火&#xff0c;尤其是抖音小店无货源模式&#xff0c;这种模式风险低、投入低、不用进货、囤货、发货&#xff0c;只需要利用商品的信息差赚取差价。操作也很简单&#xff0c;只需要会简单的电脑操作就可以进行了。…

抖音小店运营全套系列课,系统掌握月销100w+小店的核心秘密

抖音小店运营全套系列课&#xff0c;系统掌握月销100w小店的核心秘密 从小店基础入门到进阶精通&#xff0c;全新升级 兴趣电商搜索电商 双剑合璧 1、目前抖音日活跃量用户已经突破6亿&#xff0c;平台用户规模庞大且拥有消费能力&#xff0c;管是个人、商家还是企业都可以…

ChatGPT付费创作系统V2.1.1独立版 +WEB端+ H5端 + 小程序端+文心一言+私有知识库

ChatGPT付费创作系统V2.1.1提供最❤的对应版本小程序端&#xff0c;相比上一版本增加了私有知识库功能&#xff0c;可绑定至角色&#xff0c;当回答无答案时会调用出私有知识库答案。本版新增了小程序端。绘画功能采用其他绘画接口-意间AI&#xff0c;后台一些小细节的优化及一…

iOS 跳转到系统的设置界面

在项目中&#xff0c;我们经常会碰到使用位置的需求。当用户设置app不允许使用位置的时候&#xff0c;最好的用户体验就是直接调转到系统的位置设置界面&#xff0c;进行设置。 本人已经测试&#xff0c;在5c iOS8.3系统 和 5s iOS7.1系统中可以正常跳转 跳转到自己的项目中 在…

iOS icon 的设置与启动页的设置

iOS icon 的设置与启动页的设置 1.icon的设置 步骤1.在Assets.xcassets中创建 AppIcon,并向其中添加图片 步骤2先看苹果的管网图&#xff0c;如果你的Xcode 出现了这样的问题 xCode会给出相应的警告&#xff0c;最近遇到一个问题就是A 76x76 app icon is required for iPad…

【iOS】跳转App权限设置页面

跳转App设置页的方法 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];说明&#xff1a; UIKIT_EXTERN NSString *const UIApplicationOpenSettingsURLString API_AVAILABLE(ios(8.0));官方注释 Used to create a UR…

如何在iphone/ipad/itouch上设置新浪VIP邮箱

下面向大家介绍如何使用iPhone/iPad/itouch上的邮件应用程序Mail创建新浪免费邮箱帐户&#xff0c; 这里以iPhone为例(iPod touch/iPad中除了界面略有区别外&#xff0c;操作基本类似)&#xff1a; 1、进入设置 首先进入iphone的“设置”&#xff0c;选择“邮件、通讯录、日历…

iOS导航栏切换界面时隐藏和显示

引 现如今很多App的一些模块,尤其是个人中心模块,界面设计已经习惯于不保留导航栏,而是直接将界面背景覆盖到状态栏,比如QQ的个人信息界面: 没有传统的导航栏之后会好看很多,但是回到或者去往别的页面时,往往又需要重新显示导航栏,关于这样一种设计苹果并没有给出专门…

GPT-5 短期内不会问世,AI的安全问题仍被放大

【CSDN 编者按】一封要求暂停AI的公开信引发热议&#xff0c; 随之而来的是GPT-5 被抵制。在麻省理工学院的活动中&#xff0c;OpenAI 的首席执行官兼联合创始人 Sam Altman 首次进行正面回应。 作者 | 陈静琳 责编 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews…