实例:【基于机器学习的NBA球员信息数据分析与可视化】 |
您所在的位置:网站首页 › nba数据库统计及球员数据 › 实例:【基于机器学习的NBA球员信息数据分析与可视化】 |
文章目录
一、项目任务二、代码实现及分析1. 导入模块2. 导入文件并对文件信息进行整体探测3. 数据预处理3.1 查看数据集信息3.2 数据清洗与转换3.3 数据去重
4. 数据可视化4.1 数据相关性4.2 球员数据分析
5. 基于逻辑回归的球员分类5.1 数据重定义5.2 划分数据集与验证集5.3 定义模型
6. 基于随机森林回归模型的特征评分排序
一、项目任务
数据集共有342个NBA球员样本,包含38个特征,即342行×38列。对这些数据进行集成和预处理。利用python语言,设计合适的机器学习算法。找出球员在场时对球队比赛获胜的贡献大小,最能反映球员的综合实力的特征。算法过程及结果的设计合适的可视化图像,将所设计的算法的过程,以及最终结果展示出来。
二、代码实现及分析
1. 导入模块
import pandas as pd
import numpy as np
import plotly.express as px
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
from sklearn import metrics
from sklearn.ensemble import RandomForestRegressor
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
2. 导入文件并对文件信息进行整体探测
df = pd.read_csv("nba_2017_nba_players_with_salary.csv")
df.head()
专业名词字段含义说明: Rk:排名PLAYER:姓名POSITION:位置AGE:年龄MP:平均每场比赛进行的时间FG:场均投球命中次数FGA:场均投射次数FG%:命中率3P:三分球命中次数3PA:三分球投射次数3P%:三分球命中率(命中次数/投射次数----3P/3PA=3P%)2P:二分球命中次数2PA:二分球投射次数2P%:二分球命中率eFG%:有效命中率FT:罚球命中次数FTA:罚球投射次数FT%:罚球命中率(FT/FTA=FT%)ORB:进攻篮板数DRB:防守篮板数TRB:篮板球总数 篮板率=球员篮板数×(球队所有球员上场时间÷5)÷球员上场时间÷(球队总篮板+对手总篮板)AST:助攻 助攻率=球员助攻数÷(球员上场时间÷(球队所有球员上场时间÷5)×(球队总进球数-球员进球数)STL:抢断 抢断率=球员抢断数×(球队所有球员上场时间÷5)÷球员上场时间÷对手进攻次数BLK:盖帽 盖帽率=球员盖帽数×(球队所有球员上场时间÷5)÷球员上场时间÷对手两分球出手次数)TOV:失误 失误率=球员失误数÷(球员两分球出手次数+0.44×球员罚球次数+球员失误数)PF:犯规次数POINTS:得分TEAM:球队GP:比赛场数MPG:场均上场时间ORPM:进攻正负值DRPM:防守正负值RPM:正负值WINS_RPM:赢球正负值PIE:球员贡献度 加分项:得分、投篮命中数、罚篮命中数、篮板、助攻、抢断、盖帽 减分项:投篮出手、罚篮出手、个人犯规、失误PACE:每48分钟内大概会进行多少个回合W:胜利次数SALARY_MILLIONS:薪水 3. 数据预处理 3.1 查看数据集信息 df.info()为了便于理解,对列名称重命名 df.columns=['排名', '姓名', '位置', '年龄', '场均比赛时间', '场均投球命中数', '场均投射次数', '命中率', '三分球命中次数', '三分球投射次数', '三分球命中率', '二分球命中次数', '二分球投射次数', '二分球命中率', '有效命中率', '罚球命中次数', '罚球投射次数', '罚球命中率', '进攻篮板数','防守篮板数', '篮板球总数', '助攻', '抢断', '盖帽', '失误', '犯规次数', '得分', '球队', '比赛场数','场均上场时间', '进攻正负值', '防守正负值', '正负值', '赢球正负值', '球员贡献度', '48分钟回合数', '胜利次数','薪水'] df.head()由df.isnull().sum()结果可知,缺失值‘三分球命中率’有22项,‘罚球命中率’有5项,下面显示缺失值的所在行 三分球命中率_null =df[df["三分球命中率"].isnull()==True] 罚球命中率_null =df[df["罚球命中率"].isnull()==True]由上方数据显示,分析可得,3P%和FT%的数值空缺原因均是因为3P、3PA、FT和FTA数值为0导致, 为数据精准度,使用dropna()直接将所有含空缺值的数据行删除 df = df.dropna() 3.3 数据去重根据数据探测可知,数据集中有多为球员姓名重复,删除重复项并保留第一次出现的项 df[df.duplicated(subset=['姓名']).values == True]根据所查资料知,效率值最能反应球员对比赛做出的贡献 PER:效率值 效率值=[(得分+篮板球总数+助攻+抢断+盖帽)-(场均投射次数-场均投球命中次数)-(罚球投射次数-罚球命中次数)-失误)]/比赛场数 df['效率值']=((df['得分']+df['篮板球总数']+df['助攻']+df['抢断']+df['盖帽'])-(df['场均投射次数']-df['场均投球命中数'])-(df['罚球投射次数']-df['罚球命中次数'])-df['失误'])/df['比赛场数'] PER_array = np.array(df['效率值']) PER_array找出判断球员贡献度相关的数据,得到其中的数据相关性,并用相关系数矩阵显示,并使用热力图进行可视化 df_cor = df.loc[:, [ '命中率', '三分球命中率', '二分球命中率', '有效命中率','罚球命中率', '篮板球总数', '助攻', '抢断', '盖帽', '失误', '犯规次数','得分', '比赛场数','场均上场时间', '赢球正负值', '球员贡献度','防守正负值', '胜利次数','薪水']] #调用corr()方法 获取两列数据之间的相关性 # 返回改数据类型的相关系数矩阵(即每两个类型直接的相关性) corr = df_cor.corr() corr.head()
小结: 球员贡献度越高排名越高 查看排名和薪水的关系: fig = px.scatter(df,x='排名',y="薪水",color='排名') fig.show()小结: 排名越低薪水越低 #用pairplot() 方法 进行数据对比 sns.pairplot(df,vars=['排名','球员贡献度','比赛场数','命中率','得分'], diag_kind="kde")根据数据可视化结果分析可知,球员贡献度是最能反映球员的综合实力的特征。 由df.describe()得到的数据,人为划分球员: 球员贡献度 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |