探索大神科比,30000多次投籃資料,有好玩的發現
粉絲獨白
籃球巨星科比,是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資料探勘,希望大家可以學習和挖掘更多資訊。
663033228 這是我的Python學習交流群,我在這裡每天下午和晚上都有分享Python的直播學習和一些心得分享,在學習Python的小夥伴也可以加入。