NBA數據分析初探(上)


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#%matplotlib inline    ##魔法命令了解一下, 內嵌畫圖  是IPython的內置magic函數,那么在Pycharm中是不會支持的。

#載入數據:
data=pd.read_csv('D:/pycharm_ngs_programs/data_analysis/nba_2017_nba_players_with_salary.csv')
print(data.head(5))

## 描述統計
print(data.shape)
print(data.describe())

輸出結果如下:

Unnamed: 0  Rk             PLAYER POSITION  AGE    MP    FG   FGA    FG%  \
0           0   1  Russell Westbrook       PG   28  34.6  10.2  24.0  0.425   
1           1   2       James Harden       PG   27  36.4   8.3  18.9  0.440   
2           2   3      Isaiah Thomas       PG   27  33.8   9.0  19.4  0.463   
3           3   4      Anthony Davis        C   23  36.1  10.3  20.3  0.505   
4           4   6   DeMarcus Cousins        C   26  34.2   9.0  19.9  0.452   

    3P       ...         GP   MPG  ORPM  DRPM   RPM  WINS_RPM   PIE    PACE  \
0  2.5       ...         81  34.6  6.74 -0.47  6.27     17.34  23.0  102.31   
1  3.2       ...         81  36.4  6.38 -1.57  4.81     15.54  19.0  102.98   
2  3.2       ...         76  33.8  5.72 -3.89  1.83      8.19  16.1   99.84   
3  0.5       ...         75  36.1  0.45  3.90  4.35     12.81  19.2  100.19   
4  1.8       ...         72  34.2  3.56  0.64  4.20     11.26  17.8   97.11   

    W  SALARY_MILLIONS  
0  46            26.50  
1  54            26.50  
2  51             6.59  
3  31            22.12  
4  30            16.96  

[5 rows x 39 columns]
       Unnamed: 0          Rk         AGE          MP          FG         FGA  \
count  342.000000  342.000000  342.000000  342.000000  342.000000  342.000000   
mean   170.500000  217.269006   26.444444   21.572515    3.483626    7.725439   
std     98.871128  136.403138    4.295686    8.804018    2.200872    4.646933   
min      0.000000    1.000000   19.000000    2.200000    0.000000    0.800000   
25%     85.250000  100.250000   23.000000   15.025000    1.800000    4.225000   
50%    170.500000  205.500000   26.000000   21.650000    3.000000    6.700000   
75%    255.750000  327.750000   29.000000   29.075000    4.700000   10.400000   
max    341.000000  482.000000   40.000000   37.800000   10.300000   24.000000   

              FG%          3P         3PA         3P%       ...         \
count  342.000000  342.000000  342.000000  320.000000       ...          
mean     0.446096    0.865789    2.440058    0.307016       ...          
std      0.078992    0.780010    2.021716    0.134691       ...          
min      0.000000    0.000000    0.000000    0.000000       ...          
25%      0.402250    0.200000    0.800000    0.280250       ...          
50%      0.442000    0.700000    2.200000    0.340500       ...          
75%      0.481000    1.400000    3.600000    0.373500       ...          
max      0.750000    4.100000   10.000000    1.000000       ...          

               GP         MPG        ORPM        DRPM         RPM    WINS_RPM  \
count  342.000000  342.000000  342.000000  342.000000  342.000000  342.000000   
mean    58.198830   21.572807   -0.676023   -0.005789   -0.681813    2.861725   
std     22.282015    8.804121    2.063237    1.614293    2.522014    3.880914   
min      2.000000    2.200000   -4.430000   -3.920000   -6.600000   -2.320000   
25%     43.500000   15.025000   -2.147500   -1.222500   -2.422500    0.102500   
50%     66.000000   21.650000   -0.990000   -0.130000   -1.170000    1.410000   
75%     76.000000   29.075000    0.257500    1.067500    0.865000    4.487500   
max     82.000000   37.800000    7.270000    6.020000    8.420000   20.430000   

              PIE        PACE           W  SALARY_MILLIONS  
count  342.000000  342.000000  342.000000       342.000000  
mean     9.186842   98.341053   28.950292         7.294006  
std      3.585475    2.870091   14.603876         6.516326  
min     -1.600000   87.460000    0.000000         0.030000  
25%      7.100000   96.850000   19.000000         2.185000  
50%      8.700000   98.205000   29.000000         4.920000  
75%     10.900000  100.060000   39.000000        11.110000  
max     23.000000  109.870000   66.000000        30.960000  

[8 rows x 36 columns]

從數據中看幾項比較重要的信息:

  • 球員平均年齡為26.4歲,年齡段在19-38歲;

  • 球員平均年薪為730萬美金,當時最大的合同為年薪3000萬美金;

  • 球員平均出場時間為21.5分鍾,某球員場均出場37.8分鍾領跑聯盟,當然也有只出場2.2分鍾的角色球員,機會來之不易。

  • 類似的信息我們還能總結很多。

效率值相關性分析

在眾多的數據中,有一項名為“RPM”,標識球員的效率值,該數據反映球員在場時對球隊比賽獲勝的貢獻大小,最能反映球員的綜合實力。
我們來看一下它與其他數據的相關性:

dat_cor=data.loc[:,['RPM','AGE','SALARY_MILLIONS','ORB','DRB','TRB','AST','STL','BLK','TOV','PF','POINTS','GP','MPG','ORPM','DRPM']]
coor=dat_cor.corr()
sns.heatmap(coor,square=True, linewidths=0.02, annot=False) 
#seaborn中的heatmap函數,是將多維度數值變量按數值大小進行交叉熱圖展示。

由相關性分析的heatmap圖可以看出,RPM值與年齡的相關性最弱,與“進攻效率值”、“場均得分”、“場均搶斷數”等比賽技術數據的相關性最強。

 

我在接下來的分析中將把RPM作為評價一個球員能力及狀態的直觀反應因素之一。

 

球員數據分析部分

 

此處練習了一下pandas基本的數據框相關操作,包括提取部分列、head()展示、排序等,簡單通過幾個維度的展示,籠統地看一下16-17賽季那些球員沖在聯盟的最前頭。

data.loc[:,['PLAYER','SALARY_MILLIONS','RPM','AGE','MPG']].sort_values(by='SALARY_MILLIONS',ascending=False).head(10)
#效率值最高的10名運動員
data.loc[:,['PLAYER','RPM','SALARY_MILLIONS','AGE','MPG']].sort_values(by='RPM',ascending=False).head(10)
#出場時間最高的10名運動員
data.loc[:,['PLAYER','RPM','SALARY_MILLIONS','AGE','MPG']].sort_values(by='MPG',ascending=False).head(10)

結果如下:

Seaborn常用的三個數據可視化方法

 

單變量:

distplot方法可以繪制直方圖和連續密度估計,通過distplot方法seaborn使直方圖和密度圖的繪制更為簡單, 

我們先利用seaborn中的distplot繪圖來分別看一下球員薪水、效率值、年齡這三個信息的分布情況,代碼如下:

#單變量:
#我們先利用seaborn中的distplot繪圖來分別看一下球員薪水、效率值、年齡這三個信息的分布情況,上代碼:
#分布及核密度展示
sns.set_style('darkgrid') #設置seaborn的面板風格
plt.figure(figsize=(12,12))
plt.subplot(3,1,1)  #拆分頁面,多圖展示
sns.distplot(data['SALARY_MILLIONS'])
plt.xticks(np.linspace(0,40,9))
plt.ylabel(u'$Salary$',size=10)

plt.subplot(3,1,2)
sns.distplot(data['RPM'])
plt.xticks(np.linspace(-10,10,9))
plt.ylabel(u'$RPM$',size=10)

plt.subplot(3,1,3)
sns.distplot(data['AGE'])
plt.xticks(np.linspace(20,40,11))
plt.ylabel(u'$AGE$',size=10)

 結果如下:



雙變量:
dat1=data.loc[:,['RPM','SALARY_MILLIONS','AGE','POINTS']]
sns.jointplot(dat1.SALARY_MILLIONS,dat1.AGE,kind='kde',size=8) 


上圖展示的是球員薪水與年齡的關系,采用不同的kind方式(等高線圖/hex/散點等),我們可以整體感受一下年齡和薪水的集中特點,
大部分球員集中在22-25歲拿到5million以下的薪水,當然也有“年少成名”和“越老越妖”的情況。



多變量:
dat1=data.loc[:,['RPM','SALARY_MILLIONS','AGE','POINTS']]
sns.pairplot(dat1) #相關性展示,斜對角為分布展示,可以直觀地看變量是否具有現行關系

圖展示的是球員薪水、效率值、年齡及場均得分四個變量間的兩兩相關關系,對角線展示的是本身的分布圖,由散點的趨勢我們可以看出不同特征的相關程度。
整體看各維度的相關性都不是很強,正負值與薪水和場均得分呈較弱的正相關性,
而年齡這一屬性和其他的變量相關性較弱


 

參考資料  pyhton 愛好者社區#https://mp.weixin.qq.com/s/gl_8Wxl_Oq7xvGUdsHR3Bg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM