1. 程式人生 > >探索大神科比,30000多次投籃數據,有好玩的發現

探索大神科比,30000多次投籃數據,有好玩的發現

Python 編程語言 Python爬蟲 數據分析

粉絲獨白

籃球巨星科比,是NBA歷史上最佳得分手之一,以前寫了一篇關於科比的得分數據分析。這一次,讓我們聚焦於進攻方式,用數據來探索科比職業生涯的打球方式,看看如何防守才能最大化阻礙科比的進攻!

技術分享圖片


要點:

  • 數據獲取

  • 數據的清洗

  • 數據的多維度可視化


01:數據來源

玩數據分析的同學一定都知道kaggle,裏面有大量好玩的數據集,這次我們下載了科比近20年職業生涯中所嘗試的每個投籃命中的位置和情況,由於是籃球領域的數據,可能有一些小夥伴看不懂,不過沒關系,後面我都會進行簡短的說明的。

鏈接:https://www.kaggle.com/c/kobe-bryant-shot-selection/data

The field names are self explanatory and contain the following attributes:

  • action_type 進攻方式(更具體)

  • combined_shot_type 進攻方式

  • game_event_id 這個不清楚

  • game_id 比賽ID

  • lat 投籃點

  • loc_x 投籃點

  • loc_y 投籃點

  • lon 投籃點

  • minutes_remaining 單節剩余時間(分鐘)

  • period 表示第幾節

  • playoffs 是否是季後賽

  • season 賽季

  • seconds_remaining 剩余時間(秒)

  • shot_distance 投籃距離

  • shot_made_flag 是否進球

  • shot_type 兩分球或三分球

  • shot_zone_area 投籃區域

  • shot_zone_basic 投籃區域(更具體)

  • shot_zone_range 投籃範圍

  • team_id 球隊ID

  • team_name 球隊名稱

  • game_date 比賽日期

  • matchup 比賽雙方

  • opponent 對手

  • shot_id 投籃ID

02:數據的讀取和查看

1).讀入數據集:

技術分享圖片


2).看一下數據集基本情況:一共有25個維度

技術分享圖片


3).看一下數據集的大小:一共投了30697次

技術分享圖片


可以看到,科比職業生涯出手投籃了三萬多次,確實是厲害!大致先了解一下這份數據,主要是收集了科比每一次進攻的位置,投籃方式和得分,這三個維度也是我們重點關註的,其他的其實影響不是太大。

03:數據清洗和探索

1).數據的清洗

因為這是kaggle上的一個比賽數據,會用於預測,所以在“shot_made_flag”這一列上會有空值(即預測科比這一次投籃是否能投進

),後面的部分分析會先剔除掉這些空值的數據,所以科密們,如果見到後面一些分析不太合理的話,要考慮到這一點哦!

#剔除未知命中結果的數據

known_data = data[data['shot_made_flag'].notnull()]

known_data.sample(3)

技術分享圖片


2).數據的思考

那接下來就慢慢來分析科比的投籃吧。站在一個球迷的位置,我會先關註的是科比的投籃點,有哪一些進攻的方式,哪一種又是偏多呢?

在數據分析前,我先來猜測下,按照我的球迷經驗,科比常用的應該是跳投多一些,畢竟江湖上有一句話說,“我科後仰美如畫”。科比的投籃姿勢也是教科書版的存在,所以會有很多人去模仿他的動作。

3).畫出科比的投籃圖

技術分享圖片


  • 默認的plt畫圖太醜,我用sns來設置畫圖的顏色

  • plt來設置中文字體,設置坐標系顯示負數

  • 用scatter來畫散點圖

  • 設置X,Y軸和Title

可視化看一下:

技術分享圖片


4).常用的進攻方式

技術分享圖片


  • 取數據集中的'combined_shot_type'統計科比投籃的方式

  • 用直方圖來顯示,構造x和y的參數.(x為1到6的序列,y為每一種投籃方式的統計數)

  • 設置坐標標簽和刻度範圍

技術分享圖片


果然,跳投是最多的,最少的是擦板(嗯,這個讓我想起了另外一位巨星——鄧肯,他的擦板肯定不少!)這裏用到的是“combined_shot_type”這一列,然後我把結果轉為中文了,看起來順眼一點。

4).計算命中率

技術分享圖片


  • 過濾數據集,獲得投籃命中的次數hits_df

  • 計算投籃命中率

  • 設置坐標參數和lable

技術分享圖片


可以看到,扣籃的命中率最高,然後是擦板,帶球上籃,勾手,跳投,最後居然是補籃命中率最低(有點難以置信,有可能是數據的缺失的原因,我其實更偏向跳投才是最低的).

5).看看不同區域的出手情況

分析完科比的進攻方式,再來看看他喜歡在哪些地方投籃,終結的效果又是如何。同樣,數據集裏面對投籃區域的描述也有兩列,這裏我選取描述更具體的“shot_zone_basic”一列來分析。

技術分享圖片


因為y軸的標簽名稱太長,所以我們把畫布右移0.18

技術分享圖片


可以看到,科比更多的進攻範圍是在中距離,中投多一點。

6).最後一分鐘的數據

#選取最後一分鐘的數據

last_min_df = known_data[known_data['minutes_remaining']==0]

#平均進攻距離

avg_dis = last_min_df['shot_distance'].mean()

#進攻方式繪制

技術分享圖片


技術分享圖片


可以看到,還是中距離的跳投居多,還有一些距離看起來很遠的,一般都是時間快到點了,然後亂扔出去的,最為球隊領袖,還是有很多出手權的。

限於篇幅,我對某些數據探索原文有一些刪減,其實這是一份很好可以用來練習的數據集,你可以用來練習pandas數據分析,matplotlib可視化,sklearn數據挖掘,希望大家可以學習和挖掘更多信息。


探索大神科比,30000多次投籃數據,有好玩的發現