科比职业生涯数据分析
科比職業生涯數據分析報告
一、前言
在本次數據分析是利用Jupyter對科比職業生涯的數據集進行分析,通過對相關數據的分析,掌握Numpy, Pandas, Matplotlib, Seaborn等常用數據分析庫的用法,掌握常規的數據預處理的方法以及特征工程。
二、數據集說明
該數據集收錄了自96賽季~2016賽季,共有30697條生涯數據。每條數據都是一次出手,其中包括動作類型,投籃類型,投射距離,投射位置,是否命中等25個特征。在該數據集中我們將對以這30697條數據進行數據處理與分析。部分數據如下:
三、數據預處理
導入需要使用到的相關庫,numpy,pandas,matplotlib,pylab等
import numpy as np import pandas as pd import matplotlib.pyplot as plt from pylab import *導入數據集,展示前三行數據并統計每一列數據的個數
kobe = pd.read_csv('data.csv') kobe.head(3) #顯示前3行數據 kobe.describe()
通過對數據集的列舉,我們可以清除的看到在shot_made_flag這一列中,總數為25697,這說明在這些數據存在空值,而這一值是是否命中,對數據分析的結果有重要的影響,所以我們需要對這些空值進行處理。
我們對空數據刪除,得到剩下的有用數據,最終得到25697個有用數據,這也是之后分析用到的數據。
四、數據分析
1、每個賽季出手次數
首先我們對科比在每個賽季出手的次數做一個統計,并以出手次數的多少排列,我們對season(賽季)這一欄進行統計,查看season一共有多少組數據,即多少個賽季,之后將各個賽季出手次數統計并用柱狀圖繪制出來。
柱狀圖以賽季為x軸,命中的次數為y軸繪制,從圖中可以看出,在Jun-05這一賽季中,科比出手的次數最多,在2013-14這一賽季出手最少,從整體來看,在每個賽季中科比出手的次數都是非常多的,這可以說明科比是球隊里的主戰力之一。
2、賽季命中率
分析完每一賽季出手次數之后,再對賽季命中率做一個統計,選擇賽季與是否命中這兩個屬性,對科比的賽季命中率做統計,并以賽季為x軸,命中率為y軸做折線圖展示。
# 職業生涯各賽季命中率 season = kobe.pivot_table(index='season', values='shot_made_flag', aggfunc='mean') fig, ax = plt.subplots() for label in ax.xaxis.get_ticklabels():label.set_rotation(90) plt.plot(season.index, season.values) plt.title('科比職業生涯各賽季命中率示意圖') plt.xlabel('賽季') plt.ylabel('命中率')3、每一節命中率
選取period節數統計科比在各節中的的命中率,用來看看科比在那節的命中率最高。 # 職業生涯各賽季各節命中率 p_1 = kobe[kobe['period'] == 1].pivot_table(index='season', values='shot_made_flag', aggfunc='mean') # 第一節 p_2 = kobe[kobe['period'] == 2].pivot_table(index='season', values='shot_made_flag', aggfunc='mean') # 第二節 p_3 = kobe[kobe['period'] == 3].pivot_table(index='season', values='shot_made_flag', aggfunc='mean') # 第三節 p_4 = kobe[kobe['period'] == 4].pivot_table(index='season', values='shot_made_flag', aggfunc='mean') # 第四節 fig, ax = plt.subplots() plt.plot(p_1) plt.plot(p_2) plt.plot(p_3) plt.plot(p_4) for label in ax.xaxis.get_ticklabels(): label.set_rotation(90) plt.title('科比職業生涯各節命中率示意圖') plt.legend(('第一節', '第二節', '第三節', '第四節'), loc='best') plt.xlabel('賽季') plt.ylabel('命中率')
從示意圖可以看出科比在第四節的命中率最低,這也可以說明體力對科比投籃命中率有很大的影響。
4、投籃位置
在對科比投籃命中率做出統計后,我們再來看科比投籃的位置。
我們選取combined_shot_type屬性中各個出手方式,有跳投、上籃、扣籃、補籃、勾手、擦板,不同的出手方式以不同的顏色通過散點圖的方式將出手位置在圖上繪制出來,得到以下散點圖。
從圖中可以看出籃球場大致的外觀,其中紅黃綠聚集的地方是球框底下,這里適合上籃、扣籃和補籃,再看灰色點(跳投),灰色點之間存在一條明顯的分界線,而這條分界線就是三分線,科比出手的位置可以說是遍布整個球場,這也說明科比出手最多的方式是跳投。
5、進攻方式與命中率
接著對科比的進攻方式與出手命中率,做統計,將每次出手的方式combined_shot_type統計出來,繪制一個餅圖,再對每次出手方式不同出手是否命中做一個餅圖,觀察進攻進攻方式與命中率。
#科比進攻的方式 plt.figure(figsize=(15, 5)) plt.subplot(121) attack_method = kobe['combined_shot_type'].value_counts() plt.pie(attack_method, labels=['跳投', '上籃', '扣籃', '補籃','勾手','擦板'], autopct='%1.2f%%') plt.title('科比進攻方式') plt.legend(loc= 1) #科比投籃命中率 plt.subplot(122) shooting = kobe[kobe['shot_made_flag']==1]['combined_shot_type'].value_counts() list1 = attack_method.tolist() list2 = shooting.tolist() list3 = attack_method.tolist() for i in range(len(list1)): list3[i] = list2[i]/list1[i] hits_df = pd.Series(list3); plt.pie(hits_df, labels=['跳投', '上籃', '扣籃', '補籃','勾手','擦板']) plt.title('科比各種投籃方式命中率') plt.show()
從左邊進攻方式餅圖可以看出科比跳投的次數最多,占了76.70%,最少是擦板,這也和投籃位置散點圖對應上了,從右邊命中率中可以看到扣籃的命中率是最高的,而跳投的命中率最低,這是符合實際情況的,因為跳投次數是最多且出手位置也是最多的,不同的出手位置也對命中率有一定的影響,這種情況是非常正常的。
6、各區域投籃次數
統計shot_zone_basic不同出手區域的出手次數,以出手區域為縱坐標,投籃次數為橫坐標繪制條形圖。
#科比在各個位置投籃的次數 area = kobe['shot_zone_basic'].value_counts() b = np.array([0,1,2,3,4,5,6]) plt.barh(b,area,align ='center') plt.yticks(b,('中距離','進攻有理區','底線之外的三分','除進攻有理區外的禁區','右邊底線三分','左邊底線三分','后場')) plt.xlabel('次數',fontsize=10) plt.title('科比在各區域投籃次數',fontsize=20) plt.tight_layout()# 緊湊顯示圖片,居中顯示 plt.show()
從圖中可以看到,科比大多數在中距離出手,三分也投了挺多,根據科比的出手習慣,可以說明科比不管三分還是兩分,都是非常的自信的。
7、其他因素對出手的影響
下面是對其他因素對科比出手投籃的影響。下面三個屬性是投籃的位置、距離、范圍,其實這三個屬性可以看作一個屬性,都是代表投球位置的。這里將三個屬性都按具體位置的類別繪制散點圖
import matplotlib.cm as cm plt.figure(figsize=(20,10)) def scatter_plot_by_category(feat): alpha = 0.1 gs = kobe.groupby(feat) cs = cm.rainbow(np.linspace(0, 1, len(gs))) for g, c in zip(gs, cs): plt.scatter(g[1].loc_x, g[1].loc_y, color=c, alpha=alpha) plt.subplot(131) scatter_plot_by_category('shot_zone_area') plt.title('投籃位置') plt.subplot(132) scatter_plot_by_category('shot_zone_basic') plt.title('投籃距離') plt.subplot(133) scatter_plot_by_category('shot_zone_range') plt.title('投籃范圍')
第一個圖是shot_zone_area屬性的,圖中紅色和橙色是右側投球區,墨綠色和綠色是左側投球區,藍色是中間投球區;第二個圖是shot_zone_basic屬性的,圖中橙色是籃板底下、藍色是除進攻有理區外的禁區,墨綠色是中距離,紫色是底線之外的三分,紅色是右邊底線三分,綠色是左邊底線三分;第三個圖是shot_zone_range屬性的,圖中紅色是除進攻有理區外的禁區,綠色是進攻有理區,紫色是中距離,藍色是三分線外。這三個圖都是對科比投球位置的一個統計。
五、總結
通過本次對科比職業生涯數據的分析,我們可以看到科比在他的職業生涯里為球隊的貢獻是非常大的,他那“凌晨四點半的洛杉磯”更是科比為了比賽訓練的曼巴精神更是每一位籃球愛好者所追求的精神,曼巴精神永存!!!r.i.p
總結
以上是生活随笔為你收集整理的科比职业生涯数据分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 下午回来才后知百密于一疏忽
- 下一篇: (自学笔记) 谭浩强 C语言程序设计 第