实例:【基于机器学习的NBA球员信息数据分析与可视化】

这篇具有很好参考价值的文章主要介绍了实例:【基于机器学习的NBA球员信息数据分析与可视化】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、项目任务

  • 数据集共有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()

实例:【基于机器学习的NBA球员信息数据分析与可视化】

df.describe()

实例:【基于机器学习的NBA球员信息数据分析与可视化】
查看关键字:

df.columns

实例:【基于机器学习的NBA球员信息数据分析与可视化】

专业名词字段含义说明:

  • 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()

实例:【基于机器学习的NBA球员信息数据分析与可视化】

3.2 数据清洗与转换

为了便于理解,对列名称重命名

df.columns=['排名', '姓名', '位置', '年龄', '场均比赛时间', '场均投球命中数', '场均投射次数', '命中率', '三分球命中次数',
        '三分球投射次数', '三分球命中率', '二分球命中次数', '二分球投射次数', '二分球命中率', '有效命中率', '罚球命中次数',
        '罚球投射次数', '罚球命中率', '进攻篮板数','防守篮板数', '篮板球总数', '助攻', '抢断', '盖帽', '失误', '犯规次数',
        '得分', '球队', '比赛场数','场均上场时间', '进攻正负值', '防守正负值', '正负值', '赢球正负值', '球员贡献度', '48分钟回合数', 
        '胜利次数','薪水']
df.head()

实例:【基于机器学习的NBA球员信息数据分析与可视化】

df.isnull().sum()

由df.isnull().sum()结果可知,缺失值‘三分球命中率’有22项,‘罚球命中率’有5项,下面显示缺失值的所在行

三分球命中率_null =df[df["三分球命中率"].isnull()==True]
罚球命中率_null =df[df["罚球命中率"].isnull()==True]

实例:【基于机器学习的NBA球员信息数据分析与可视化】

  • 3P%:三分球命中率——3P/3PA=3P%
  • FT%:罚球命中率——FT/FTA=FT%

由上方数据显示,分析可得,3P%和FT%的数值空缺原因均是因为3P、3PA、FT和FTA数值为0导致,
为数据精准度,使用dropna()直接将所有含空缺值的数据行删除

df = df.dropna()

3.3 数据去重

根据数据探测可知,数据集中有多为球员姓名重复,删除重复项并保留第一次出现的项

df[df.duplicated(subset=['姓名']).values == True]

实例:【基于机器学习的NBA球员信息数据分析与可视化】

df=df.drop_duplicates(subset=['姓名'], keep='first', inplace=False)

根据所查资料知,效率值最能反应球员对比赛做出的贡献

  • PER:效率值

    效率值=[(得分+篮板球总数+助攻+抢断+盖帽)-(场均投射次数-场均投球命中次数)-(罚球投射次数-罚球命中次数)-失误)]/比赛场数
df['效率值']=((df['得分']+df['篮板球总数']+df['助攻']+df['抢断']+df['盖帽'])-(df['场均投射次数']-df['场均投球命中数'])-(df['罚球投射次数']-df['罚球命中次数'])-df['失误'])/df['比赛场数']
PER_array = np.array(df['效率值'])
PER_array

实例:【基于机器学习的NBA球员信息数据分析与可视化】

df = df.round(3) #保留3位小数

4. 数据可视化

4.1 数据相关性

找出判断球员贡献度相关的数据,得到其中的数据相关性,并用相关系数矩阵显示,并使用热力图进行可视化

df_cor = df.loc[:, [ '命中率',  '三分球命中率', '二分球命中率', '有效命中率','罚球命中率', 
                    '篮板球总数', '助攻', '抢断', '盖帽', '失误', '犯规次数','得分', 
                    '比赛场数','场均上场时间', '赢球正负值', '球员贡献度','防守正负值', '胜利次数','薪水']]
                    
#调用corr()方法 获取两列数据之间的相关性
# 返回改数据类型的相关系数矩阵(即每两个类型直接的相关性)
corr = df_cor.corr()
corr.head()

实例:【基于机器学习的NBA球员信息数据分析与可视化】
使用热力图呈现:

plt.figure(figsize=(20,8),dpi=100)
sns.heatmap(corr,square=True,linewidths=0.1,annot=True,cmap='Accent')

实例:【基于机器学习的NBA球员信息数据分析与可视化】

4.2 球员数据分析

# 按照球员贡献度排名
df.loc[:, ["姓名", "球员贡献度","薪水", "年龄","比赛场数"]].sort_values(by="球员贡献度", ascending=False).head()

实例:【基于机器学习的NBA球员信息数据分析与可视化】

# 按照场均上场时间排名
df.loc[:, ["姓名", "球员贡献度","薪水", "年龄","场均上场时间"]].sort_values(by="场均上场时间", ascending=False).head()

实例:【基于机器学习的NBA球员信息数据分析与可视化】

位置 = pd.DataFrame(df[ "位置" ].value_counts()).reset_index()

实例:【基于机器学习的NBA球员信息数据分析与可视化】
位置名词解释:

  • PG:控卫
  • SG:分卫
  • PF:大前
  • SF:小前
  • C:中锋
fig=px.pie(位置,names="index" ,values="位置")
fig.show ()

实例:【基于机器学习的NBA球员信息数据分析与可视化】
查看各个站位的球员薪水分布:

price = (df.groupby("位置")["薪水"].mean().reset_index().sort_values( "薪水").reset_index(drop=True))
fig =px.bar_polar(price,theta="位置",color='薪水',color_discrete_sequence=px.colors.sequential.Plasma_r,template='plotly_white')
fig.show()

实例:【基于机器学习的NBA球员信息数据分析与可视化】

fig = px.scatter(df,x='球员贡献度',y="排名",color='球员贡献度')
fig.show()

实例:【基于机器学习的NBA球员信息数据分析与可视化】

小结: 球员贡献度越高排名越高

查看排名和薪水的关系:

fig = px.scatter(df,x='排名',y="薪水",color='排名')
fig.show()

实例:【基于机器学习的NBA球员信息数据分析与可视化】

小结: 排名越低薪水越低

#用pairplot() 方法 进行数据对比
sns.pairplot(df,vars=['排名','球员贡献度','比赛场数','命中率','得分'], diag_kind="kde")

实例:【基于机器学习的NBA球员信息数据分析与可视化】

5. 基于逻辑回归的球员分类

5.1 数据重定义

根据数据可视化结果分析可知,球员贡献度是最能反映球员的综合实力的特征。
由df.describe()得到的数据,人为划分球员:

  • 球员贡献度 <= 7.2 标记为0,记作表现不合格
  • 球员贡献度 <= 9.31标记为1,记作表现合格
  • 球员贡献度 <= 15 标记为2,记作表现良好
  • 球员贡献度 <= 23 标记为3,记作表现优秀
自定义方法进行划分并为方便后续进行分类,将此项转化为一维数组
def 球员贡献度_cut(df):
    if df.球员贡献度 <= 7.2:
        return 0  #不合格
    elif df.球员贡献度 <=9.31:
        return 1  # 合格
    elif df.球员贡献度 <=15:
        return 2  # 良好
    else:
        return 3  # 优秀

df['球员贡献度_cut']=df.apply(lambda x:球员贡献度_cut(x),axis=1)
print(df['球员贡献度_cut'])
Pie1_array = np.array(df['球员贡献度_cut'])
Pie1_array

实例:【基于机器学习的NBA球员信息数据分析与可视化】

5.2 划分数据集与验证集

df_new = df.drop(columns=["姓名", "位置","球队"]) # 去除非数值型数据
X_train,X_test,Y_train,Y_test=train_test_split(df_new,Pie1_array,test_size=0.2,random_state=180)

5.3 定义模型

# 定义模型
def basic_logosticregression(X_train,X_test,Y_train,Y_test):
    model=LogisticRegression(random_state=0, solver='lbfgs')
    model.fit(X_train,Y_train)
    
    Y_train_pre=model.predict(X_train)
    Y_test_pre=model.predict(X_test)
    
    train_predict_proba = model.predict_proba(X_train)
    test_predict_proba = model.predict_proba(X_test)

    confusion_matrix_result = metrics.confusion_matrix(Y_test_pre,Y_test)
    
    print('混淆矩阵结果:\n',confusion_matrix_result)
    plt.figure(figsize=(8, 6))
    sns.heatmap(confusion_matrix_result, annot=True, cmap='Blues')
    
    plt.xlabel('预测的标签')
    plt.ylabel('实际的标签')
    
    print("score_train: "+str(model.score(X_train, Y_train)))
    print("score_test: "+str(model.score(X_test,Y_test)))  

调用:

basic_logosticregression(X_train,X_test,Y_train,Y_test)

实例:【基于机器学习的NBA球员信息数据分析与可视化】
实例:【基于机器学习的NBA球员信息数据分析与可视化】

6. 基于随机森林回归模型的特征评分排序

查看各个特征对球员贡献度的相关度,找出除了球员贡献度的其他影响因素

Pie_array = np.array(df['球员贡献度'])
df_new = df.drop(columns=["姓名", "位置","球队",'球员贡献度'])
data=df_new.values.tolist()

X = data
Y = Pie_array
feature_names=['排名', '年龄', '场均比赛时间', '场均投球命中数', '场均投射次数', '命中率','三分球命中次数',
               '三分球投射次数', '三分球命中率', '二分球命中次数', '二分球投射次数', '二分球命中率', '有效命中率',
               '罚球命中次数','罚球投射次数', '罚球命中率', '进攻篮板数','防守篮板数', '篮板球总数', '助攻',
               '抢断', '盖帽','失误', '犯规次数','得分', '比赛场数','场均上场时间','进攻正负值', '防守正负值',
               '正负值', '赢球正负值', '48分钟回合数','胜利次数','薪水']

names = feature_names

rf = RandomForestRegressor()
rf.fit(X, Y)
print("特征评分排序:")
print(sorted(zip(map(lambda x: round(x, 4), rf.feature_importances_), names),reverse=True))

实例:【基于机器学习的NBA球员信息数据分析与可视化】文章来源地址https://www.toymoban.com/news/detail-479271.html

到了这里,关于实例:【基于机器学习的NBA球员信息数据分析与可视化】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python数据分析—基于机器学习的UCI心脏病数据分析(源码+数据+分析设计)

    下载链接:https://pan.baidu.com/s/1ys2F6ZH4EgnFdVP2mkTcsA?pwd=LCFZ 提取码:LCFZ 心脏病是一类比较常见的循环系统疾病。循环系统由心脏、血管和调节血液循环的神经体液组织构成,循环系统疾病也称为心血管病,包括上述所有组织器官的疾病,在内科疾病中属于常见病,其中以心脏病

    2024年02月07日
    浏览(56)
  • NBA球星生涯数据集分析

    源码链接: https://download.csdn.net/download/qq_58012062/87541713?spm=1001.2014.3001.5501 数据提取:链接:https://pan.baidu.com/s/1kcttx000FfaLBk1QAJbBAw  提取码:jbbk 1  实验背景 NBA 作为世界上水平最高的篮球联赛,吸引了无数的球迷。每一场 NBA 比 赛都会产生大量的数据信息,如果能够有效地运

    2024年02月12日
    浏览(37)
  • 基于Python电商用户行为的数据分析、机器学习、可视化研究

    有需要本项目的源码以及全套文档和相关资源,可以私信博主!!! 在数字化和互联网技术飞速发展的推动下,消费者的购买能力和消费观念呈现不断升级和变迁的趋势。用户消费数据的爆炸式增长,为我们提供了寻找潜在价值信息的机会。 本研究使用了阿里巴巴提供的淘

    2024年02月04日
    浏览(49)
  • 基于数据挖掘机器学习的心脏病患者分类建模与分析

    首先,读取数据集,该数据集是UCI上的心脏病患者数据集,其中包含了 303 条患者信息,每一名患者有 13 个字段记录其基本信息(年龄、性别等)和身体健康信息(心率、血糖等),此外有一个类变量记录其是否患有心脏病。详细的字段信息可见 此处。 类别字段 target 有两

    2024年01月19日
    浏览(56)
  • 基于ChatGPT4+Python近红外光谱数据分析及机器学习与深度学习建模

    022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5,将人工智能的发展推向了一个新的高度。2023年4月,更强版本的ChatGPT4.0上线,文本、语音、图像等多模态交互方式使其在各行各业的应用呈现了更多的可能性。2023年

    2024年01月25日
    浏览(56)
  • 基于ChatGPT4+Python近红外光谱数据分析及机器学习与深度学习建模教程

    详情点击链接:基于ChatGPT4+Python近红外光谱数据分析及机器学习与深度学习建模教程 第一:GPT4 1、ChatGPT(GPT-1、GPT-2、GPT-3、GPT-3.5、GPT-4模型的演变) 2、ChatGPT对话初体验 3、GPT-4与GPT-3.5的区别,以及与国内大语言模型(文心一言、星火等)的区别 4、ChatGPT科研必备插件(Da

    2024年01月23日
    浏览(48)
  • 大数据舆情评论数据分析:基于Python微博舆情数据爬虫可视化分析系统(NLP情感分析+爬虫+机器学习)

    基于Python的微博舆情数据爬虫可视化分析系统,结合了NLP情感分析、爬虫技术和机器学习算法。该系统的主要目标是从微博平台上抓取实时数据,对这些数据进行情感分析,并通过可视化方式呈现分析结果,以帮助用户更好地了解舆情动向和情感倾向。系统首先利用爬虫技术

    2024年04月15日
    浏览(44)
  • 基于python机器学习XGBoost算法农业数据可视化分析预测系统

    基于python机器学习XGBoost算法农业数据可视化分析预测系统,旨在帮助农民和相关从业者更好地预测农作物产量,以优化农业生产。该系统主要包括四个功能模块。 首先,农作物数据可视化模块利用Echarts、Ajax、Flask、PyMysql技术实现了可视化展示农作物产量相关数据的功能。

    2024年01月21日
    浏览(65)
  • 【毕业设计】基于大数据的京东消费行为分析与可视化 - python 机器学习

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月04日
    浏览(62)
  • 基于Python机器学习算法农业数据可视化分析预测系统(完整系统源码+数据库+详细文档+论文+部署教程)

    基于python机器学习XGBoost算法农业数据可视化分析预测系统,旨在帮助农民和相关从业者更好地预测农作物产量,以优化农业生产。该系统主要包括四个功能模块。 首先,农作物数据可视化模块利用Echarts、Ajax、Flask、PyMysql技术实现了可视化展示农作物产量相关数据的功能。

    2024年04月27日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包