不知道你的朋友圈是否已经被某场NBA比赛的进展或结果淹没了? 或者你是一名NBA狂热分子,比赛中的每一个进球、抢断或压哨绝杀都会让你热血沸腾。 除了观看精彩的比赛过程,我们也对比赛的结果感到好奇。 因此,本课程将向学生展示如何利用过去NBA比赛的统计数据来判断各支球队的战斗力,并预测某场比赛的结果。
我们将根据2015-2016 NBA常规赛和季后赛的比赛统计数据来预测正在进行的2016-2017常规赛每场比赛的结果。
1/9
nba球队Elo分数计算
特征向量
逻辑回归
1.3 实验环境
.7
Xfce终端
1.4 实验流程在本课程中,我们将按照以下流程来实现NBA比赛数据分析的任务:
获取游戏统计数据
分析比赛数据,获得代表每场比赛各队状态的特征表达。
使用机器学习方法来学习每场比赛与获胜球队之间的关系,并对2016-2017年的比赛进行预测
1.5 代码获取 本实验的源代码可以通过以下命令获取:
$ wget 2.获取NBA比赛统计数据 2.1 比赛数据简介
在这个实验中nba季后赛数据,我们将使用
中的统计数据。 在这个网站中,您可以看到不同球员、球队、赛季和联赛的基本统计数据,例如得分、犯规次数、胜负等。这里我们将使用2015-16赛季的NBA数据。
2/9
球队每场比赛统计数据:每支球队每场比赛的平均表现统计数据
数据名称含义
Rk——Rank排名
G -- 比赛 参加比赛数(均为 82 场)
MP——每场比赛的平均时间
FG--射门命中数
FGA-- 射门次数
FG%--投篮命中数
3P--3-Point Field 三分球命中数
3PA--3-Point Field Goal 三分球命中数
3P%--3-Point Field Goal 三分球命中率
2P--2-Point Field 两分球命中数
2PA--2-point Field Goal 两分球投篮次数
2P%--2-Point Field Goal 两分球命中率
FT--罚球命中
FTA--Free Throw 罚球次数
FT%--Free Throw 罚球命中率
ORB-- 进攻篮板
DRB-- 防守篮板
TRB--Total 总篮板数
AST-辅助
STL-- 抢断球
BLK--块
TOV——错误
PF——犯规
PTS--分数
每场比赛统计:遇到的对手每场比赛的平均统计信息。 所包含的统计数据与球队场均统计数据一致,但仅代表球队的对手。
统计:综合统计
数据项数据含义
Rk(Rank)排名
年龄 团队成员的平均年龄
W (胜利) 胜利次数
L() 失败次数
PW (wins) 基于毕达哥拉斯理论计算的获胜概率
PL ( ) 根据毕达哥拉斯理论计算的失败概率
MOV ( of ) 平均获胜间隔
SOS(of)用于判断对手选择本队或其他队的难度。 0 是平均线,可以是正数或负数。
SRS ( ) 3
ORtg ( ) 每 100 轮比赛的进攻比例
DRtg ( ) 每 100 场比赛的防守比率
佩斯 (Pace) 每 48 分钟大约进行多少回合
FTr (Free Throw Rate) 罚球与投篮的比率
3PAr (3-Point Rate) 三分球出手次数与出手次数的比率
TS% (True) 两分球、三分球和罚球的总命中率
eFG% (Field Goal) 有效投篮命中率(包括两分球和三分球)
TOV% ( ) 每 100 场比赛的换手率
ORB% ( ) 球队中每位球员的平均进攻篮板百分比
FT/FGA 罚球命中率
eFG%(投篮命中率)对手的投篮命中率
TOV% ( ) 对手的换手率
DRB% ( ) 球队每位球员的平均防守篮板百分比
FT/FGA (Free Per Field Goal) 对手罚球次数与射门次数的比率
毕达哥拉斯定律:win% = frac{{runs }^2}{{runs }^2 + {runs }^2}win%=+ed2
我们将通过这三个表格来评估球队过去的战斗力。 另外,我们还需要2015-16 NBA以及2015~2016 NBA常规赛和季后赛每场比赛的比赛数据来评估Elo得分。 (稍后在实验部分解释)。 按照从常规赛到季后赛的时间。 列出2015年10月至2016年6月每场比赛的成绩。
3/9
数据项数据含义
日期 比赛日期
开始 (ET) 比赛开始时间
/客队
PTS客队最后比分
主页/ 主队
PTS主队最后比分
备注备注,注明是否超时等。
预测时,我们还需要2016-17赛季NBA和2016~2017赛季NBA常规赛赛程数据。
2.2 获取游戏数据
我们以获取Team Per Game Stats表数据为例,展示如何获取这三个统计数据。
进入,在导航栏中选择,选择2015~2016赛季:
4/9
进入2015~2016界面后,在滑动窗口中找到Team Per Game Stats表格,选择左上方的Share more,在其下拉菜单中选择Get table as CSV (for Excel):
5/9
复制界面中生成的csv格式数据,复制粘贴到文本编辑器中保存为csv文件:
6/9
为了方便学生进行实验,我们将所有数据保存为csv文件并上传到实验楼的云环境中。 在后续的代码实现部分,我们会给出获取这些文件的地址。
3. 数据分析
获得数据后,我们将根据各队过去的比赛表现和Elo评分来确定各队的获胜概率。 在评估每支球队过去的比赛时,我们将使用Team Per Game Stats、Per Game Stats和Stats这三个表(以下简称T、O和M表)中的数据来代表某支球队在比赛中的表现。 球队的比赛特点。 我们最终能够预测每场比赛哪支球队最终会获胜,但这并不是给出绝对的胜负情况,而是预测获胜球队的获胜概率。 因此,我们将构建一个表示匹配的特征向量。 它由两队过去比赛的统计数据(T、O 和 M 表)以及两队各自的 Elo 评分组成。
关于Elo分数,不知道同学们有没有看过电影《社交网络》。 在这部电影中,马克(主角的原型是创始人扎克伯格)在电影一开始就开发了一个美女排名系统。 他利用朋友在窗口写下的排名公式,比较不同女孩的成绩,最后通过PK决出胜负。
7/9
这里我们简单介绍一下基于国际象棋比赛的Elo排名系统。 上图中窗口上写的公式是基于计算PK双方(A和B)的预期胜率的计算公式。 假设A、B当前等级分为R_ARA和R_BRB,则A对B的预期胜率为:
E_A=压裂{1}{1+10^{(R_B-R_A)/400}}EA=1+10(RB−RA)/4001
B 对 A 的预期胜率为
E_B=压裂{1}{1+10^{(R_A-R_B)/400}}EB=1+10(RA−RB)/4001
如果玩家A在游戏中的实际得分S_ASA(赢1分,赢0.5分,输0分)与他的预期胜率E_AEA不同,他的评分将根据以下公式进行调整:
R_A^{新} = R_A^{旧} + K(S_A - R_A^{旧})RAnew=RAold+K(SA−RAold)
在国际象棋中,K值会根据级别的不同进行相应的调整:
≥2400,K=16
2100~2400点,K=24
≤2100,K=32
因此,我们用来表示某场比赛数据的特征向量为(加入A队和B队之间的比赛):[A队的Elo得分,A队的T、O和M表统计数据,B队的Elo得分,球队B的T、O、M表统计]
4. 基于数据的模型训练和预测 4.1 实验准备
在这个实验环境中,我们将使用numpy、scipy和库。 不过实验楼已经安装了numpy,所以在实验之前我们需要使用pip命令安装另外两个库。
$ sudo pip $ sudo pip scipy$ sudo pip
安装完所需的实验库后,进入实验环境的Code目录,创建文件夹,通过以下地址获取我们为您处理好的csv文件压缩包data.zip:
$$ mkdir # 获取数据文件 $ wget # 解压数据压缩包,删除压缩包 $ unzip data.zip $ rm -r data.zip
数据文件夹包含2015年至2016年NBA数据的T、O和M表,以及处理后的常规赛和挑战赛数据2015~.csv。 这个数据文件是2015-16月份的比赛数据中提取出来的,包括三个字段:
WTeam:获胜团队
LTeam:失败的球队
WLoc:获胜球队是主场还是客场。 另一个文件是16-.csv,这也是我们处理得到的2016年至2017年NBA常规赛赛程表。 它包括两个字段:
Vteam:客队/客队
Hteam:主队
4.2 代码在目录下实现,创建.py并开始实验。 首先插入实验相关模块:
# -*- :utf-8 -*- aspd asnp 上,
设置回归训练所需的参数变量:
# 当每个队伍没有elo等级分数时,给它一个基本的elo等级分数 = = {} = {}X = y = = 'data'# 存放数据的目录
一开始需要初始化数据,从T、O、M表中读取数据,去掉一些不相关的数据并通过Team属性列连接三个表:
# 根据各球队初始化球队统计csv文件(Mstat, Ostat, Tstat): = Mstat.drop([ 'Rk', 'Arena'], axis= 1) = Ostat.drop([ 'Rk' , 'G ', 'MP'], axis= 1) = Tstat.drop([ 'Rk', 'G', 'MP'], axis= 1) = pd.merge(, , how= 'left', on= '团队') = pd.merge(, , how= '左', on= '团队') .( '团队', = False, drop= True)
获取每个团队的 Elo Score 函数,并在开始时没有成绩时为其分配一个初始值:
(team):try: [team] : # 当初始没有 elo 时,初始分配每个团队 [team] = [team]
定义一个函数来计算每个团队的 Elo 评分:
# 计算各队的elo值 (, ): = () = () = - exp = ( * -1) / = 1/ ( 1+ math.pow( 10, exp)) # 根据rank级别修改K值 2100: k == 2400: k = : k = = round( + (k * ( 1- 赔率))) = - = - k,
基于我们前期良好的统计数据和各球队的Elo分数计算结果,我们建立了2015~2016赛季常规赛和季后赛每场比赛对应的数据集(主客场比赛,我们考虑主场球队)更有优势,故主队相应加100级积分):
():print( "data set..") X = Skip = , row .(): Wteam = row[ 'WTeam'] Lteam = row[ 'LTeam'] #获取初始elo值或者每个团队的初始elo值 = (Wteam) = (Lteam) # 为主场比赛的球队添加 elo 值 100 ifrow[ 'WLoc'] == 'H': += : += 100# 将 elo 作为对每支球队的评价第一个特征值= [] = [] # 添加我们获得的每个团队的统计数据, value .loc[Wteam].(): .(value) , value .loc[Lteam].(): . (value) # 将两队的特征值随机分配到每场比赛数据的左右两侧 # 并将对应的0/1分配给y值。 () 0.5: X.( + ) y.( 0) 否则: , y
最后,在主函数中调用这些数据处理函数,并使用以下方法建立回归模型:
== '': Mstat = pd.( + '/15-.csv') Ostat = pd.( + '/15-Stat.csv') Tstat = pd.( + '/15-.csv') = ( Mstat, Ostat, Tstat) = pd.( + '/2015-.csv') X, y = () # 训练网络模型 print( " on %d game .."% len(X)) model = .() model.fit(X, y) #使用10倍交叉验证计算训练精度 print( "Doing cross-..") print(.(model, X, y, cv = 10, = '', = - 1) .mean())
最后,使用训练好的模型对2016-17赛季常规赛数据进行预测。 使用该模型确定新游戏的结果并返回其获胜概率:
(, , model): = # 球队 1, 客队.(()), value .loc[].(): .(value) # 球队 2, 主队.(() + 100), value .loc[ ].(): .(值) = np.() .([])
在主函数中调用该函数,将预测结果输出到16-.csv文件中:
#使用训练好的模型预测2016-17赛季的比赛 print( ' on new ..') = pd.( + '/16-.csv') = , row .(): team1 = row[ ' Vteam'] team2 = row[ 'Hteam'] pred = (team1, team2, model) prob = pred[ 0][ 0] 0.5: = team1 失败者 = team2 .([, 失败者, prob]) else: = team2 失败者 = team1 。 ([, 失败者, 1- 概率]) ( '16-.csv', 'wb') asf: = csv.(f) .([ '赢', '输', '']) .( )
运行.py:
8/9
9/9
在本课程中nba季后赛数据,我们使用一些统计数据来计算每支NBA球队的Elo socre,并利用这些基础统计数据来评估每支球队过去的比赛表现,并根据国际评分方法Elo Score来评估球队当前的表现。 对战斗水平进行评分,最后结合这些不同队伍的特点来决定哪支队伍能够在一场比赛中占据优势。 但在我们的预测结果中,与以往不同的是,我们并没有给出绝对的正负,而是给出了获胜机会更大的球队能够赢得另一支球队的概率。 当然,我们这里用来评估一个团队表现的数据量太少了(只使用了2015年到2016年一年的数据)。 如果你想要更准确、更系统的判断,如果你有兴趣nba季后赛数据,当然可以从各种统计数据网站上获取更多年份、更全面的数据。 结合不同的回归和决策机器学习模型,构建更全面、预测精度更高的模型。 有相关的篮球预测比赛。 有兴趣的同学可以尝试一下。
数据挖掘简介与实践
教你机器学习,教你数据挖掘
NBA直播吧汇集NBA直播,英超直播,欧洲足球直播,欧洲杯直播,高清视频下载,体育视频直播,24小时不间断更新,是您观看直播的最佳选择!NBA直播吧所有直播和视频内容均来自互联网,我们自身不提供任何直播信号和视频内容,我们只提供导航服务,如有侵犯您的权益请通知我们 |
NBA直播吧 版权所有 © All Rights Reserved. 备案号:苏ICP备2023003942号 站点地图 |