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]
從數據中看幾項比較重要的信息:spa
球員平均年齡爲26.4歲,年齡段在19-38歲;3d
球員平均年薪爲730萬美金,當時最大的合同爲年薪3000萬美金;code
球員平均出場時間爲21.5分鐘,某球員場均出場37.8分鐘領跑聯盟,固然也有隻出場2.2分鐘的角色球員,機會來之不易。blog
相似的信息咱們還能總結不少。排序
在衆多的數據中,有一項名爲「RPM」,標識球員的效率值,該數據反映球員在場時對球隊比賽獲勝的貢獻大小,最能反映球員的綜合實力。
咱們來看一下它與其餘數據的相關性:pycharm
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
此處練習了一下pandas基本的數據框相關操做,包括提取部分列、head()展現、排序等,簡單經過幾個維度的展現,籠統地看一下16-17賽季那些球員衝在聯盟的最前頭。it
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)
結果以下:
單變量:
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