作者 |高羊羊羊羊羊楊
來源 | CSDN博客
頭圖 | 付費下載自視覺中國
出品 | CSDN(ID:CSDNnews)
前段時間,湖人當家球星 科比·布萊恩特不幸遇難。這對於無數的球迷來說無疑使晴天霹靂, 他逆天終究也沒能改命,但命運也從來都沒改得了他,曼巴精神會一直延續下去。隨著大數據時代的到來,好像任何事情都可以和大數據這三個字掛鈎。早在很久以前,大數據分析就已經廣泛的應用在運動員職業生涯規劃、醫療、金融等方面,在本文中將會使用Python對球星科比進行對維度分析,向 「老大」 致敬!
前景提要
那天,是2020年1月27日凌晨,我失眠了,足足在床上打滾到4點鐘還是睡不著,解鎖屏幕,盯著刺眼的手機打算刷刷微博,但卻得到了一個令人震驚的消息:球星科比不幸遇難。換做是往常,我當然是舉報三連,這種標題黨罪有應得,但卻刷到了越來越多條類似的消息,直到看到官方發布的消息。
正如我的文案所說,我沒有見過凌晨四點的洛杉磯,可我在凌晨四點聽聞了你去世的消息,1978-2020。
作為球迷,我們能做的只有惋惜與緬懷。不散播謠言,不消費 「曼巴精神」
數據獲取
來源:NBA官方提供了的科比布萊恩特近二十年職業生涯數據資料集(數據量比較龐大,大約有3萬行)
數據處理
翻閱文檔時不難發現其中有很多空缺值,簡單粗暴的方式是直接刪除有空值的行,但為了樣本完整性與預測結果的正確率。
首先我們對投籃距離做一個簡單的異常值檢測,這裡採用的是箱線圖呈現
我們將得到這樣的結果:
根據判斷,該列數據有68個異常值,這裡採取的操作是將這些異常值所在行刪除,其他列屬性同理。
數據整合
將數據導入,並按我們的需求對數據進行合併、添加新列名的操作
運行有如下結果:
看起來還是一切正常的
繪製投籃嘗試圖
根據不同的時間變化(從比賽開始)來繪製投籃的嘗試圖
這裡我們將用到matplotlib包
看下效果:
可以看出隨著比賽時間的進行,科比的出手次數呈現增長狀態。
繪製命中率對比圖
這裡們將做一個對比來判斷一下科比的命中率如何
看一下效果怎麼樣
分析可得出科比的投籃命中率大概徘徊在0.4左右,但這並不是我們想要的效果
為了進一步對數據進行挖掘,我們需要使用一些算法了。
GMM聚類
那麼 什麼是GMM聚類呢?
GMM是高斯混合模型(或者是混合高斯模型)的簡稱。大致的意思就是所有的分布可以看做是多個高斯分布綜合起來的結果。這樣一來,任何分布都可以分成多個高斯分布來表示。
因為我們知道,按照大自然中很多現象是遵從高斯(即正態)分布的,但是,實際上,影響一個分布的原因是多個的,甚至有些是人為的,可能每一個影響因素決定了一個高斯分布,多種影響結合起來就是多個高斯分布。(個人理解)
因此,混合高斯模型聚類的原理:通過樣本找到K個高斯分布的期望和方差,那麼K個高斯模型就確定了。在聚類的過程中,不會明確的指定一個樣本屬於哪一類,而是計算這個樣本在某個分布中的可能性。
高斯分布一般還要結合EM算法作為其似然估計算法。
球場可視化
這裡借鑑了MichaelKrueger的excelent腳本裡的draw_court()函數
draw_court()函數
二維高斯圖
建立繪製畫二維高斯圖的函數
Draw2DGaussians()
下面開始繪製2D高斯投籃次數圖,圖中的每個橢圓都是離高斯分布中心2.5個標準差遠的計數,每個藍色的數字代表從該高斯分布觀察到的所佔百分比
看一下成果:
我們可以看到,著色後的2D高斯圖中,科比在球場的左側(或者從他看來是右側)做了更多的投籃嘗試。這可能是因為他是右撇子。此外,我們還可以看到,大量的投籃嘗試(16.8%)是直接從籃下進行的,5.06%的額外投籃嘗試是從非常接近籃下的位置投出去的。
它看起來並不完美,但確實顯示了一些有用的東西
對於繪製的每個高斯集群的投籃精度,藍色數字將代表從這個集群中獲取到的準確性,因此我們可以了解哪些是容易的,哪些是困難的。
對於每個集群,計算一下它的精度並繪圖
看一下效果圖
我們可以清楚地看到投籃距離和精度之間的關係。
繪製二維時空圖
另一個有趣的事實是:科比不僅在右側做了更多的投籃嘗試(從他看來的那邊),而且他在這些投籃嘗試上更擅長
現在讓我們繪製一個科比職業生涯的二維時空圖。在X軸上,將從比賽開始時計時;在y軸上有科比投籃的集群指數(根據集群精度排序);圖片的深度將反映科比在那個特定的時間從那個特定的集群中嘗試的次數;圖中的紅色垂線分割比賽的每節
看一下運行結果:
集群按精度降序排序。高準確度的投籃在最上面,而低準確度的半場投籃在最下面,我們現在可以看到,在第一、第二和第三節中的「最後一秒出手」實際上是從很遠的地方「絕殺」, 然而,有趣的是,在第4節中,最後一秒的投籃並不屬於「絕殺」的投籃群,而是屬於常規的3分投籃(這仍然比較難命中,但不是毫無希望的)。
在以後的分析中,我們將根據投籃屬性來評估投籃難度(如投籃類型和投籃距離)
下面將為投籃難度模型創建一個新表格
根據FeaturesDB表構建模型,並確保它不會過度匹配(即訓練誤差與測試誤差相同)
使用一個額外的分類器
建立一個簡單的模型,並確保它不超載
在這裡想談談科比·布萊恩特在決策過程中的一些問題;為此,我們將收集兩組不同的效果圖,並分析它們之間的差異:
在一次成功的投籃後馬上繼續投籃
在一次不成功的投籃後馬上馬上投籃
考慮到科比投進或投失了最後一球,我收集了一些數據
柱狀圖
為他們繪製「上次投籃後的時間」的柱狀圖
看一下運行結果:
從圖中可以看出:科比投了一個球之後有些著急去投下一個,而圖中的一些比較平緩的值可能是球權在另一隻隊伍手中,需要一些時間來奪回。
累計柱狀圖
為了更好地可視化柱狀圖之間的差異,我們來看看累積柱狀圖。
運行效果如下:
雖然可以觀察到密度有差異 ,但好像不太清楚,所以還是轉換成高斯格式來顯示數據吧
讓我們來看看最終結果:
結論
現在很明顯,在投丟一個球後,科比更可能直接從籃下投出下一球。在圖中也可以看出,科比在投藍進球後,下一球更有可能嘗試投個三分球,但本次案例中並沒有有效的數據可以證明科比有熱手效應。不難看出,科比還是一個注重籃下以及罰球線周邊功夫的球員,而且是一個十分自信的領袖,不愧為我們的老大!
需要改進的地方
本次獲取到的數據集十分龐大,裡面的內容也很充足,甚至包括了每一種投籃姿勢、上籃姿勢的詳細數據,對於本數據中還未挖掘到的信息各位讀者如果有興趣可以自行嘗試,相信一定會收穫滿滿!
註:可能本次分析中存在一些問題,還請各位讀者指正,感謝閱讀。
【End】
你點的每一個在看,我認真當成了喜歡