NBA数据分析初探(上)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
#%matplotlib inline ##魔法命令了解一下, 內(nèi)嵌畫圖 是IPython的內(nèi)置magic函數(shù),那么在Pycharm中是不會支持的。
#載入數(shù)據(jù):
data=pd.read_csv('D:/pycharm_ngs_programs/data_analysis/nba_2017_nba_players_with_salary.csv')
print(data.head(5))
## 描述統(tǒng)計
print(data.shape)
print(data.describe())
輸出結(jié)果如下:
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]
從數(shù)據(jù)中看幾項(xiàng)比較重要的信息:
球員平均年齡為26.4歲,年齡段在19-38歲;
球員平均年薪為730萬美金,當(dāng)時最大的合同為年薪3000萬美金;
球員平均出場時間為21.5分鐘,某球員場均出場37.8分鐘領(lǐng)跑聯(lián)盟,當(dāng)然也有只出場2.2分鐘的角色球員,機(jī)會來之不易。
類似的信息我們還能總結(jié)很多。
效率值相關(guān)性分析
在眾多的數(shù)據(jù)中,有一項(xiàng)名為“RPM”,標(biāo)識球員的效率值,該數(shù)據(jù)反映球員在場時對球隊比賽獲勝的貢獻(xiàn)大小,最能反映球員的綜合實(shí)力。
我們來看一下它與其他數(shù)據(jù)的相關(guān)性:
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函數(shù),是將多維度數(shù)值變量按數(shù)值大小進(jìn)行交叉熱圖展示。
由相關(guān)性分析的heatmap圖可以看出,RPM值與年齡的相關(guān)性最弱,與“進(jìn)攻效率值”、“場均得分”、“場均搶斷數(shù)”等比賽技術(shù)數(shù)據(jù)的相關(guān)性最強(qiáng)。
我在接下來的分析中將把RPM作為評價一個球員能力及狀態(tài)的直觀反應(yīng)因素之一。
球員數(shù)據(jù)分析部分
此處練習(xí)了一下pandas基本的數(shù)據(jù)框相關(guān)操作,包括提取部分列、head()展示、排序等,簡單通過幾個維度的展示,籠統(tǒng)地看一下16-17賽季那些球員沖在聯(lián)盟的最前頭。
data.loc[:,['PLAYER','SALARY_MILLIONS','RPM','AGE','MPG']].sort_values(by='SALARY_MILLIONS',ascending=False).head(10) #效率值最高的10名運(yùn)動員 data.loc[:,['PLAYER','RPM','SALARY_MILLIONS','AGE','MPG']].sort_values(by='RPM',ascending=False).head(10) #出場時間最高的10名運(yùn)動員 data.loc[:,['PLAYER','RPM','SALARY_MILLIONS','AGE','MPG']].sort_values(by='MPG',ascending=False).head(10)
結(jié)果如下:
Seaborn常用的三個數(shù)據(jù)可視化方法
單變量:
distplot方法可以繪制直方圖和連續(xù)密度估計,通過distplot方法seaborn使直方圖和密度圖的繪制更為簡單,
我們先利用seaborn中的distplot繪圖來分別看一下球員薪水、效率值、年齡這三個信息的分布情況,代碼如下:
#單變量:
#我們先利用seaborn中的distplot繪圖來分別看一下球員薪水、效率值、年齡這三個信息的分布情況,上代碼:
#分布及核密度展示
sns.set_style('darkgrid') #設(shè)置seaborn的面板風(fēng)格
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)
結(jié)果如下:
雙變量:
dat1=data.loc[:,['RPM','SALARY_MILLIONS','AGE','POINTS']] sns.jointplot(dat1.SALARY_MILLIONS,dat1.AGE,kind='kde',size=8)
上圖展示的是球員薪水與年齡的關(guān)系,采用不同的kind方式(等高線圖/hex/散點(diǎn)等),我們可以整體感受一下年齡和薪水的集中特點(diǎn),
大部分球員集中在22-25歲拿到5million以下的薪水,當(dāng)然也有“年少成名”和“越老越妖”的情況。
多變量:
dat1=data.loc[:,['RPM','SALARY_MILLIONS','AGE','POINTS']] sns.pairplot(dat1) #相關(guān)性展示,斜對角為分布展示,可以直觀地看變量是否具有現(xiàn)行關(guān)系
圖展示的是球員薪水、效率值、年齡及場均得分四個變量間的兩兩相關(guān)關(guān)系,對角線展示的是本身的分布圖,由散點(diǎn)的趨勢我們可以看出不同特征的相關(guān)程度。
整體看各維度的相關(guān)性都不是很強(qiáng),正負(fù)值與薪水和場均得分呈較弱的正相關(guān)性,
而年齡這一屬性和其他的變量相關(guān)性較弱
參考資料 pyhton 愛好者社區(qū)#https://mp.weixin.qq.com/s/gl_8Wxl_Oq7xvGUdsHR3Bg
總結(jié)
以上是生活随笔為你收集整理的NBA数据分析初探(上)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自己常用百度搜索指令
- 下一篇: 微信小程序一键链接WiFi