赞
踩
1.1 背景:
NBA是美国运动员薪酬最高的几大联赛之一,由于每支球队都有工资上限,作为球队管理人员如何更有效的确定球员薪水(避免溢价合同)是十分重要的。
美国国家篮球协会(NBA)的明星薪水很高。在2017-18赛季,斯蒂芬库里获得了超过3470万美元的奖金,勒布朗詹姆斯在球场上获得了超过3330万美元的奖金。但NBA正在发展。多年来,这支球队已经从很少投中3分球,成为他们进攻的焦点。最初在棒球比赛中受到金钱球现象关注的分析现在也在所有体育运动中。本文不仅包括先前研究中的重要变量,还包括三分球和霍林格球员效率等级(PER),以分析确定NBA球员薪水的重要性,从而解释了比赛的变化。研究人员发现,在支付NBA球员方面,得分,球员经验(联赛年数),助攻,篮板和犯规都是统计上显着的因素,但我们也发现3分球和PER值微不足道。此外,研究人员执行向后逐步回归,一次一个地消除无关紧要的自变量(每次最不重要),直到模型仅包含重要变量。同样,尽管逐步模型的统计数据优于原始模型,但相同的变量具有统计显着性。
1.2 考虑的因素:
球员的薪资的确定是一件非常复杂的事情很难考虑到所有因素,影响其因素主要包括:
2.NBA联盟的因素:
3.其他不确定因素
1.3 思路:
本文主要考虑球员的技术统计对其薪资水平的影响,并基于工资帽的占比来预测球员的薪资(排除工资帽的变化的影响)
1.4 数据来源
Kaggle上2017-2018年NBA球员数据,以及ESPN等网站上的数据集。需要的话可以加关注,私信我
- import numpy as np
- import pandas as pd
- import seaborn as sns
- import matplotlib.pyplot as plt
- import statsmodels.api as sm #statsmodels是一个Python模块,它提供对许多不同统计模型估计的类和函数,并且可以进行统计测试和统计数据的探索
- import statsmodels.formula.api as smf
-
- from sklearn.neighbors import KNeighborsRegressor
- from sklearn.model_selection import train_test_split
- from sklearn.neighbors import KNeighborsClassifier
-
- from sklearn.metrics import mean_squared_error
- sns.set_style("whitegrid")
- plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
- plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
- plt.rcParams.update({'font.size': 20})
-
- %matplotlib inline
-
- adv_stats = pd.read_csv('.../data/player-data-wrangled/player2017/Adv-2017wrangled.csv')
- adv_stats.drop(adv_stats.columns[[0, 1, 20, 25, 3, 4, 5, 6, 7, 30]], axis = 1, inplace = True)
- adv_stats.columns
-
- perGame = pd.read_csv('.../data/player-data-wrangled/player2017/PerGame-2017wrangled.csv')
- perGame.drop(perGame.columns[[0, 1, 20, 25]], axis = 1, inplace = True)
- perGame.columns
-
- perGameAdv = perGame.merge(adv_stats, on = 'Player', how = 'inner')
- perGameAdv.columns
-
- fa = pd.read_csv('.../data/salary-data/fixed-fa-signings/fixed-2017.csv')
- fa.drop(fa.columns[[0, 1, 2, 3, 4, 5, 6]], axis = 1, inplace = True)
- fa.columns

- final = perGameAdv.merge(fa, left_on = 'fix', right_on = 'name', how = 'inner')
- # drop 'fix' and 'name
- final.drop(final.columns[[27]], axis = 1, inplace = True)
- final.head()
- final.rename(columns={'PS.G':'POINTS'},inplace=True)
- final2 = final.copy(deep = True)
- sns.set(font_scale=1.5)
- sns.set_style("whitegrid")
- plt.figure(figsize=(10,6))
- final['average'].hist(bins = 20,
- histtype = 'bar',
- align = 'left',
- orientation = 'vertical',
- alpha=0.5,
- normed =True)
- final['average'].plot(kind='kde',style='k--')
- # plt.xticks(np.linspace(0,40,9))
- plt.xlabel('SALARY')
- # plt.axvline(20.87,color='r')

- sns.set(font_scale=1.5)
- sns.set_style("whitegrid")
- plt.figure(figsize=(10,6))
- ax = sns.lmplot(x='Age', y='Salary', data=copy_data, hue='Pos', fit_reg=False, aspect=2,size=7, legend=False, scatter_kws={"s": 200})
- ax.set(xlabel='AGE', ylabel='RPM (Real Plus Minus)',title="Salary by Position: 2017-2018 Season")
- plt.legend(loc='upper left', title='Position')
-
- plt.figure(figsize=(10,6))
- ax = sns.barplot(x="Pos", y="Salary",data=copy_data,capsize=.2)
-
- plt.figure(figsize=(10,6))
- ax = sns.barplot(x="Pos", y="average",data=final_c,capsize=.2)
可以图得出:
思路:各位置的平均工资和离散程度
- final.drop(final.columns[[0,1,3, 49]], axis = 1, inplace = True)
- final.columns
- # Check correlation between features
- sns.set(font_scale=1)
- sns.set_style("whitegrid")
- colormap = plt.cm.magma
-
- plt.figure(figsize=(30,30))
-
- plt.title('Pearson Correlation of NBA Salary Features', y=1.05, size=50)
-
- corr = final.astype(float).corr().round(2)
- # corr = smalls.astype(float).corr().round(2)
- mask = np.zeros_like(corr, dtype=np.bool)
-
- # mask upper diagonal of heatmap
- mask[np.triu_indices_from(mask)] = True
-
- sns.heatmap(corr,
- mask = mask, linewidths=0.1,vmax=1.0, square=True, cmap=colormap, linecolor='white', annot=True)

final2.columns
- #Selecting candidates
- final2.drop(final2.columns[[0, 1, 2, 3, 4, 5, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 21,
- 25, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 41, 42, 49]], axis = 1, inplace = True)
- final2.columns
- # Check correlation between features
- sns.set(font_scale=2)
- colormap = plt.cm.magma
- plt.figure(figsize=(30,30))
-
- plt.title('Pearson Correlation of NBA Salary Features', y=1.05, size=50)
-
- corr = final2.astype(float).corr().round(2)
- mask = np.zeros_like(corr, dtype=np.bool)
-
- # mask upper diagonal of heatmap
- mask[np.triu_indices_from(mask)] = True
-
- sns.heatmap(corr,
- mask = mask,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。