前言
2015年6月,记得那时候我正在忙着研究生毕业,也是在那个时候,NBA总决赛的开始了。当时,金州勇士队作为一匹黑马收到很多人看好,果然不负所望,勇士队一路过关斩将一举拿下了总冠军。也是在那个时候,由于库里的出色表现,给大家留下了深刻的印象,成为勇士当家球员。
可以说,从那时起,勇士队开始起飞了。2016年,3比4惜败骑士,但随后2017和2018年又相继拿下了总冠军,四年拿下三个总冠军,这在NBA历史上也是很少有的成绩了。
我并不是勇士队的球迷,但我却想知道究竟是什么原因让它可以突然出现在人们眼前,并且可以不断地创造辉煌。这背后肯定是有原因的,大家各有各的说法,但我觉得数据不会说谎,我想通过数据来分析勇士队成功背后的原因。
对于数据源,我并没有采用爬虫去采集数据,因为我的重点是分析数据,因此选择直接使用了现有数据源。
数据源来自Kaggle,提供了2012-2018年的所有球员的个人技术统计和球队战绩,链接如下:
https://www.kaggle.com/pablote/nba-enhanced-stats
本篇采用2017-18年的统计数据对勇士队进行分析。
▍技术指标排名
对所有球队的技术指标进行场均值排名,包括均分,均助攻,均盖帽,均二分球得分率,均三分球得分率,并只针对排名前五名进行可视化对比。
1. 场均得分排名
勇士队场均得分113.46,排名第一
2. 场均排名
勇士队场均助攻29.32,排名第一
3. 场均盖帽排名
勇士队场均盖帽7.45,排名第一
4. 场均二分球得分率排名
勇士队场均二分球命中率0.56,排名第一
5. 场均三分球得分率排名
勇士队场均三分球命中率0.39,排名第一
我们查看了五个主要技术指标,勇士队均是排名第一,常规赛的数据要不要太完美,无论进攻还是防守数据都非常亮眼。
既然勇士队得分均排名第一,那么我们想要看一下在勇士队胜场和负场中,两分球和三分球的得分情况。下面通过可视化将胜负场和两分与三分关系图联系起来观察。
左侧图为所有比赛中两分球得分率与三分球得分率的散点关系图。右侧图为所有比赛中队伍总得分与对手总得分的关系图(红色为负场,绿色为胜场)。并且,左右这两个图的点是一一对应的。
通过左图得到一些基本观察:
从y轴三分得分率看:勇士队的三分得分率基本在30%至50%之间浮动,其中40%至50%居多。
从x轴两分得分率看:勇士队的两分得分率基本在40%至65%之间浮动,其中55%至65%居多。
二者关系:每场比赛的两分球和三分球得分率还是比较均衡和稳定的,大部分在正常浮动范围内,有极少数情况下的离散点(两分球得分率少于45%,三分球少于30%的)。
通过上面二者关系分析,我们把两分球得分率45%以上,且同时三分球得分率30%以上的比赛定义为正常发挥,而其它一个高一个低或者都低的离散点定义为失常发挥。
通过右图得到一些基本观察:
胜负场数:通过绿色和红色数量观察,大约有2/3的场次都赢得了比赛,说明常规赛季勇士队战绩非常好。
队伍 vs 对手得分:单场最高超过140+,最低低于80,所有得分大概是服从正态分布的,集中在100至130之间,场均110+。特殊地,小于95分的场次都输掉了,而大于125分的场次都赢了。
下面对图形进行动态的交互式操作,将两个图联系起来进一步详细分析。
胜场得分情况
胜场中对应的两分和三分得分率还是很集中的,基本符合我们所说的正常发挥情况。
败场得分情况
败场中对应的两分和三分得分率比较离散,有些正常发挥的情况下也输了比赛,不过数量不多,应该是棋逢对手,遇到强队了。
总体来说,勇士队发挥比较稳定,且在正常发挥的情况下大多抓住了机会,拿下了比赛,获得了常规赛季58胜24负的卓越战绩,排名第一是有道理的。
交互式可视化部分代码如下:
# Bokeh库
from bokeh.plotting import figure,show
frombokeh.ioimportoutput_file
frombokeh.modelsimportColumnDataSource, CategoricalColorMapper, NumeralTickFormatter
frombokeh.layoutsimportgridplot
# 步骤一:将数据储存在ColumnDataSource中
gm_stats_cds = ColumnDataSource(phi_gm_stats_2)
# 步骤二:生成一个静态的html文件
output_file('phi-gm-linked-selections.html',
title='76ers Percentages vs. Win-Loss')
# 创建CategoricalColorMapper,对win和loss分配特定颜色
win_loss_mapper = CategoricalColorMapper(factors = ['W','L'], palette=['Green','Red'])
# 自定义工具
toolList = ['lasso_select','tap','reset', 'save']
# 步骤三:配置图形界面
pctFig = figure(title='2PT FG % vs3PT FG %,2017-18Regular Season',
plot_height=400, plot_width=400, tools=toolList,
x_axis_label='2PT FG%', y_axis_label='3PT FG%')
# 步骤四:采用圆点图绘制数据
pctFig.circle(x='team2P%', y='team3P%', source=gm_stats_cds,
size=12, color='black')
# 将y轴标记变为百分比形式
pctFig.xaxis[0].formatter = NumeralTickFormatter(format='00.0%')
pctFig.yaxis[0].formatter = NumeralTickFormatter(format='00.0%')
# 创建一个与整体相关的图形
totFig = figure(title='Team Points vs Opponent Points,2017-18Regular Season',
plot_height=400, plot_width=400, tools=toolList,
x_axis_label='Team Points', y_axis_label='Opponent Points')
# 绘制正方形点图
totFig.square(x='teamPTS', y='opptPTS', source=gm_stats_cds, size=10,
color=dict(field='winLoss', transform=win_loss_mapper))
# 创建图形布局
grid = gridplot([[pctFig, totFig]])
# 可视化展示
show(grid)
看过NBA比赛的朋友都知道,勇士队三分球特别牛逼,动不动就来一顿三分雨真是让对手受不了。下面我们来看一下勇士队球员三分球在NBA所有队伍中是个什么水平,什么如此厉害。
由于一些位置(比如中锋)几乎没有三分,因此我过滤掉了所有投射三分球次数低于100的球员。
下面是交互式操作展示了勇士队的三分命中率情况。
图中x轴为三分总投射次数,y轴为三分球命中的次数,样本是投射三分球次数大于100的所有NBA球员。红色为勇士队队员,蓝色为其它非勇士队队员。
我们看到,在所筛选的球员中,勇士队一共有7人。其中4人命中率在40%以上,分别是斯蒂芬.库里,克莱.汤普森,凯文.杜兰特,奎因.库克。而尼克杨也是基本接近40%的。这么人的高命中率真的很吓人,虽在不同位置,却都有着惊人的三分准确率,这确实让勇士队在三分球上占据绝对的优势了。
下面我们继续深度追踪一下勇士队连续比赛期间随时间变化而有的一些技术影响。还是一样,对于这种复杂的观察,我们借助交互式可视化来进行分析。
图中4个图是关联的,分别记录得分,助攻,篮板,失误随比赛连续进行二出现的情况。红色为负场,绿色为胜场。
通过上面观察,我们可以看到常规赛季在前阶段很少出现失败,大部分都是一直连胜的。而到最后阶段,即66至75之间,出现了连续的失败,次数偏多。很明显地,这个时候的技术指标度不如前阶段。前面一路高歌,最后阶段输球多的原因可能是战术性的放水,或者是怕球员受伤,为最后季后赛以及总冠军养精蓄锐。
可视化分析实现部分代码如下:
# Bokeh库
from bokeh.plotting import figure, show
from bokeh.io import output_file
from bokeh.models import ColumnDataSource, CategoricalColorMapper, Div
from bokeh.layouts import gridplot, column
# 输出文件
output_file('ps-gm-linked-stats.html',
title='Golden State Game Log')
# 将数据存入ColumnDataSource
gm_stats_cds = ColumnDataSource(gs_gm_stats)
# 调整布局
grid = gridplot([[stat_figs['Points'], stat_figs['Assists']],
[stat_figs['Rebounds'], stat_figs['Turnovers']]])
# 将x轴联动
stat_figs['Points'].x_range =
stat_figs['Assists'].x_range =
stat_figs['Rebounds'].x_range =
stat_figs['Turnovers'].x_range
# 添加整体的大标题
html = """<h3>Golden State Game Log</h3>
<b><i>2017-18 Regular Season</i>
<br>
</b><i>Wins in green, losses in red</i>
"""
sup_title = Div(text=html)
# 可视化展示
show(column(sup_title, grid))
我们通过可视化再看一下勇士队里所有队员的平均得分,助攻,抢断,篮板对比情况。下面饼形图展示了所有球员的个人技术指标。
从上面可视化分析观察到:得分(PTS)来看,贡献最大的前两名是库里和杜兰特,场均都约26.3分,第三名汤神略逊一筹场均约20分,第四是格林11分。助攻(AST)来看,格林排第一,场均7.2个助攻,库里第二,场均6助攻,然后是杜兰特场均5.4助攻。
从上面可视化分析观察到:抢断(STL)来看,库里最多,场均1.56抢断,第二是格林,场均1.36抢断,第三是伊戈达拉。盖帽(BLK)来看,杜兰特排第一,场均1.75个封盖,格林第二,场均1.3个封盖,然后是维斯特场均1封盖。
从这4个技术指标来看,库里和杜兰特无疑是球队的核心了,得分并列第一,助攻前三,其次是汤神。但同时,还有另一个非常关键的人物,格林。如果仔细观察,你会发现虽然格林除了在得分中排第四,其它每个指标中都是前三。不得不说,这位球员真的非常全面,防守助攻能力特别强,并且也有自己的得分手段。此外,伊戈达拉也同样拥有着不错的表现。基于这种实力的排位,这五位也是上赛季常规赛勇士队的首发五虎阵容。
可视化部分代码实现如下:
fig = {
"data": [
{
"values": gs_players_pts['playPTS'],
"labels": gs_players_pts.index,
"domain": {"x": [0,.48]},
"name":"PTS",
# "hoverinfo":"label+percent+name",
"hole": .4,
"type": "pie"
},
{
"values": gs_players_pts['playAST'],
"labels": gs_players_pts.index,
"text":["AST"],
"textposition":"inside",
"domain": {"x": [.52, 1]},
"name": "AST",
# "hoverinfo":"label+percent+name",
"hole": .4,
"type": "pie"
}],
"layout": {
"title":"Golden State Players PTS vs AST",
"annotations": [
{
"font": {
"size": 20
},
"showarrow": False,
"text": "PTS",
"x": 0.20,
"y": 0.5
},
{
"font": {
"size": 20
},
"showarrow": False,
"text": "AST",
"x": 0.8,
"y": 0.5
}
]
}
}
py.iplot(fig)
核心球员是整个球队的关键,因此下面对勇士核心球员库里与詹姆斯进行一下简单的对比,分别从总投篮命中率,两分命中率,三分命中率,罚球命中率来对比一下。
库里 vs 詹姆斯
上面左右两图的比例不同,因此大小面积不能代表能力强。
二分球命中率:詹皇极高72%,高过库里的57.8%,但这里也包括有突破,快攻等得分,不得不说詹皇发飙的时候谁都挡不住啊。
三分球命中率:库里三分命中率41%,而詹皇只是32%,略占下风。
罚球命中率:库里有87%,而詹皇60%。
总命中率:库里52,%,詹皇54%。
可以发现詹皇在个人突破强吃得分上很占优势,两分球命中率极高,而库里更擅长投篮的三分球得分。二人风格不同,但都具有超强的个人能力和领袖气质,实力上是旗鼓相当的。
下面是杜兰特与詹姆斯的篮板和得分情况对比。
参考:https://realpython.com/python-data-visualization-bokeh/
▍总结
本篇通过数据可视化分析了金州勇士队的战绩和个人技术指标,以及在整个联盟中的位置,并通过交互式可视化深度研究了勇士队的分数,进球率对胜负的影响。数据告诉我们,勇士队的实力目前在整个联盟确实是数一数二的,并且拥有几个超强的核心坐镇,4年3夺冠也是实至名归。
本文转载自:https://blog.csdn.net/bf02jgtrs00xktcx/article/details/84850349