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

  • 2019 年 10 月 8 日
  • 筆記

要點:
  • 數據獲取
  • 數據的清洗
  • 數據的多維度可視化

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()

#進攻方式繪製

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


如果大家周圍有對數據分析&數據挖掘感興趣的朋友,歡迎在朋友圈分享&轉發一下,讓更多的朋友加入我們。有好的文章也可以聯繫我與大家分享,需要獲取程式碼轉載本公眾號文章,可以直接在公眾號或者文章下方留言