xiaoyu,一個半路轉行的數據挖掘工程師
https://zhuanlan.zhihu.com/pypcfx
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. 場均蓋帽排名
4. 場均二分球得分率排名
勇士隊場均二分球命中率0.56,排名第一
5. 場均三分球得分率排名
勇士隊場均三分球命中率0.39,排名第一
我們查看了五個主要技術指標,勇士隊均是排名第一,常規賽的數據要不要太完美,無論進攻還是防守數據都非常亮眼。
▍勇士隊勝負場中兩分與三分球得分情況既然勇士隊得分均排名第一,那麼我們想要看一下在勇士隊勝場和負場中,兩分球和三分球的得分情況。下面通過可視化將勝負場和兩分與三分關係圖聯繫起來觀察。
左側圖為所有比賽中兩分球得分率與三分球得分率的散點關係圖。右側圖為所有比賽中隊伍總得分與對手總得分的關係圖(紅色為負場,綠色為勝場)。並且,左右這兩個圖的點是一一對應的。
通過左圖得到一些基本觀察:
從y軸三分得分率看:勇士隊的三分得分率基本在30%至50%之間浮動,其中40%至50%居多。
從x軸兩分得分率看:勇士隊的兩分得分率基本在40%至65%之間浮動,其中55%至65%居多。
二者關係:每場比賽的兩分球和三分球得分率還是比較均衡和穩定的,大部分在正常浮動範圍內,有極少數情況下的離散點(兩分球得分率少於45%,三分球少於30%的)。
通過上面二者關係分析,我們把兩分球得分率45%以上,且同時三分球得分率30%以上的比賽定義為正常發揮,而其它一個高一個低或者都低的離散點定義為失常發揮。
通過右圖得到一些基本觀察:
下面對圖形進行動態的交互式操作,將兩個圖聯繫起來進一步詳細分析。
勝場得分情況
勝場中對應的兩分和三分得分率還是很集中的,基本符合我們所說的正常發揮情況。
敗場得分情況
敗場中對應的兩分和三分得分率比較離散,有些正常發揮的情況下也輸了比賽,不過數量不多,應該是棋逢對手,遇到強隊了。
總體來說,勇士隊發揮比較穩定,且在正常發揮的情況下大多抓住了機會,拿下了比賽,獲得了常規賽季58勝24負的卓越戰績,排名第一是有道理的。
交互式可視化部分代碼如下:
from bokeh.plotting import figure, show
from bokeh.io import output_file
from bokeh.models import ColumnDataSource, CategoricalColorMapper, NumeralTickFormatter
from bokeh.layouts import gridplot
gm_stats_cds = ColumnDataSource(phi_gm_stats_2)
output_file('phi-gm-linked-selections.html',
title='76ers Percentages vs. Win-Loss')
win_loss_mapper = CategoricalColorMapper(factors = ['W', 'L'], palette=['Green', 'Red'])
toolList = ['lasso_select', 'tap', 'reset', 'save']
pctFig = figure(title='2PT FG % vs 3PT FG %, 2017-18 Regular 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')
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-18 Regular 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之間,出現了連續的失敗,次數偏多。很明顯地,這個時候的技術指標度不如前階段。前面一路高歌,最後階段輸球多的原因可能是戰術性的放水,或者是怕球員受傷,為最後季後賽以及總冠軍養精蓄銳。
可視化分析實現部分代碼如下:
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')
gm_stats_cds = ColumnDataSource(gs_gm_stats)
grid = gridplot([[stat_figs['Points'], stat_figs['Assists']],
[stat_figs['Rebounds'], stat_figs['Turnovers']]])
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",
"hole": .4,
"type": "pie"
},
{
"values": gs_players_pts['playAST'],
"labels": gs_players_pts.index,
"text":["AST"],
"textposition":"inside",
"domain": {"x": [.52, 1]},
"name": "AST",
"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 詹姆斯
上面左右兩圖的比例不同,因此大小面積不能代表能力強。
可以發現詹皇在個人突破強吃得分上很佔優勢,兩分球命中率極高,而庫裡更擅長投籃的三分球得分。二人風格不同,但都具有超強的個人能力和領袖氣質,實力上是旗鼓相當的。
下面是杜蘭特與詹姆斯的籃板和得分情況對比。
參考:https://realpython.com/python-data-visualization-bokeh/
▍總結
本篇通過數據可視化分析了金州勇士隊的戰績和個人技術指標,以及在整個聯盟中的位置,並通過交互式可視化深度研究了勇士隊的分數,進球率對勝負的影響。數據告訴我們,勇士隊的實力目前在整個聯盟確實是數一數二的,並且擁有幾個超強的核心坐鎮,4年3奪冠也是實至名歸。
PS:筆者僅通過數據分析奪冠原因,不代表任何意見。