实例:【基于机器学习的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 snsfrom 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 RandomForestRegressorplt.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()

在这里插入图片描述

df.describe()


查看关键字:

df.columns

在这里插入图片描述

专业名词字段含义说明:

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

在这里插入图片描述

3.2 数据清洗与转换

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

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

在这里插入图片描述

df.isnull().sum()

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

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

在这里插入图片描述

  • 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]

在这里插入图片描述

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

在这里插入图片描述

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

4. 数据可视化

4.1 数据相关性

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

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

在这里插入图片描述
使用热力图呈现:

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

在这里插入图片描述

4.2 球员数据分析

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
位置名词解释:

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

在这里插入图片描述
查看各个站位的球员薪水分布:

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

在这里插入图片描述

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

在这里插入图片描述

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

查看排名和薪水的关系:

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

在这里插入图片描述

小结: 排名越低薪水越低

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

在这里插入图片描述

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

在这里插入图片描述

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)

在这里插入图片描述
在这里插入图片描述

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_namesrf = RandomForestRegressor()
rf.fit(X, Y)
print("特征评分排序:")
print(sorted(zip(map(lambda x: round(x, 4), rf.feature_importances_), names),reverse=True))

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/27294.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用Python预测NBA比赛结果

关注「实验楼」&#xff0c;每天分享一个项目教程 NBA总决赛正在火热上演&#xff0c;而有数据的地方就有预测&#xff0c;本教程就教你使用Python预测NBA比赛的结果。 正文共&#xff1a;3240 字 预计阅读时间&#xff1a;8 分钟‍ 一、实验介绍 1.1 内容简介 不知道你是否…

PayPal,Stripe,Square轮询支付系统

轮询展示 展示我们轮询的页面 轮询套餐 根据不同的用户和需求&#xff0c;可以选择不同的套餐 普通版 1500元 1年 1个用户 支持Paypal/Stripe 不限制A站个数 不限制B站个数 不限制提交模式 订单管理 物流管理 风控管理 必要的网站数据处理 24小时远程协助 开始…

使用chatgpt过掉邮生活滑块记录 ob+wasm print参数

****## 邮生活滑块记录 地址 &#xff1a;‘aHR0cHM6Ly95b3VzaGVuZ2h1by4xMTE4NS5jbi93eC8jL2xheGluUmVnaXN0P3VzZXJJZD0yMTA1NTQ2MTYxOSZhY3Rpdml0eUlkPTI4MiZydWxlSWQ9Mjg’ 如图 如上图 大概就这点参数 基本都是前面请求拿的 除了print enmiid 。。。。。。 结果&#xff1…

连续支付(周期扣款)功能开发及注意事项

最近有一个版本需求&#xff0c;需要接入周期扣款做连续会员的功能&#xff0c;没想到这一做就是小半个月&#xff0c;趟了很多坑&#xff0c;所以觉得有必要记录一下 1.周期扣款总体设计 在支付宝和微信中&#xff08;非苹果支付&#xff09;&#xff0c;周期扣款的流程主要有…

证监会计算机类笔试上岸经验,公务员考试笔试166分上岸经验(全干货)

原标题&#xff1a;公务员考试笔试166分上岸经验(全干货) 一、考前自审 1、具备公务员考试需要的相关知识结构与基本素质(70%)。包括政治素质(理解和掌握国家大政方针与政策)&#xff0c;基本科学素质&#xff0c;常识&#xff0c;阅读理解能力&#xff0c;语言功底&#xff0c…

行政职业能力测试软件,公务员行政职业能力测试考试宝典

公务员行政职业能力考试宝典是一款通用的考试练习软件&#xff0c;丰富的题库&#xff0c;包含历年真题和模拟试题&#xff0c;有时间就可以开启刷题模式&#xff0c;对于错误的题目可以进行错题重做、解题思路介绍、统计分析等&#xff0c;达到熟练的程度&#xff0c;大大提高…

一政网是真实助公考上岸的吗?

在当下的经济时代&#xff0c;需要不断的学习&#xff0c;不断的提升自我。报考公务员考试成为了不二选择。报考公务员考试成为了毕业生、在职员工、宝妈等等众多不同类型人的最佳选择。但是公务员考试的难度大&#xff0c;想要公考一次上岸&#xff0c;那么就必需选择报班学习…

2021四川紧急选调/国考备考策略----申论/行测(2020.8.22号开始)

文章目录 1 申论1.1 申论题型1.2 申论备考策略1.3 申论做题顺序及复习阶段 2 行测备考2.1 行测题型2.2 行测备考策略 3 参考资料 1 申论 1.1 申论题型 申论部分一共有五大题型(归纳概括、提出措施、综合分析、公文写作、大作文) 1.2 申论备考策略 这五个题型在国考中是一样…

公务员考试要求及流程梳理

背景 虽然我不考, 但考公这么热门, 在信息层面不能落伍. 本文以 浙江2023省考 (考试时间在2022年12月) 为例, 主要梳理 怎么报名, 选职位, 考试科目与题型, 录用流程等. 为什么考公/考编这么热 因为当下的社会环境对员工太不友好了: 工作强度大, 精神压力大, 还有硬性比例淘…

基于JavaWeb的事业单位公务员招考信息发布平台-考务考试报名系统

本文介绍了使用Java技术开发公务员招考信息发布平台的设计与实现过程&#xff0c;首先对实现该系统的技术进行分析&#xff0c;说明选择Java和MySQL数据库的必要性&#xff0c;然后对公务员招考信息发布平台的需求进行分析。并接着对系统进行设计&#xff0c;包括架构设计、功能…

OpenAI发布了GPT的最新一代版本ChatGPT-4

今日凌晨&#xff0c;OpenAI发布了GPT的最新一代版本ChatGPT-4&#xff0c;相比上一代&#xff0c;其AI能力再度提升&#xff0c;同时支持输入的内容不再仅限于文字&#xff0c;而且支持图像内容的输入&#xff0c;成为一个能够理解照片的人工智能。 其AI能力的恐怖之处体现在哪…

chatgpt赋能python:Python循环暂停和继续的方法

Python循环暂停和继续的方法 Python是一种高级编程语言&#xff0c;在编程中使用循环结构非常常见。很多情况下&#xff0c;我们需要在循环中暂停或者继续执行。在本文中&#xff0c;我们将介绍如何在Python中实现循环暂停和继续的方法。 循环暂停和继续的意义 在Python编程…

Chat GPT5如果问世会对世界产生什么影响?以及未来chat gpt 5会取代什么类型的工作。

Chat GPT-5是一种基于人工智能技术的自然语言处理系统&#xff0c;可以自动回复和生成各种文本随着其技术的不断发展和改进&#xff0c;Chat GPT-5对未来世界将会产生以下几方面的影响&#xff1a; 1. 提升人类语言交流的效率和质量 Chat GPT-5可以高效地处理自然语言&#xf…

chatgpt 正面案例 2018-11-13T20:20:39+00:00 后面的 +00:00 代表什么意思

chatgpt 百度 2018-11-13T20:20:3900:00 后面的 00:00 代表什么意思? &#xff01;&#xff01;&#xff01;有任何问题请让我知道&#xff0c;十分感激&#xff01;谢谢&#xff01; 2021-07-29T21:35:5408:00 2021-07-29T21:35:54Z 中间的T&#xff08;当日期与时间组合…

chatpdf+mindshow由论文pdf直接生成报告PPT,拯救研究牲

chatpdfmindshow由论文pdf直接生成报告PPT&#xff0c;拯救研究牲 感谢AIGC技术&#xff0c;现在可以从论文的pdf直接生成展示的PPT。 (STEP1STEP2)最终效果预览 步骤 STEP1、论文PDF到PPT的markdown格式 chatpdf 把论文pdf提交给chatpdf并善用以下prompts 你会说中文吗 接下…

chatgpt赋能python:Python打包整个项目:打包与分享

Python打包整个项目&#xff1a;打包与分享 如果您是一名Python开发者&#xff0c;您可能已经经历过在多个环境中为您的项目安装依赖项的困惑。解决方案是将您的应用程序打包为一个易于安装的软件包。 在本文中&#xff0c;我们将学习如何使用pipenv和pyinstaller创建、打包和…

tiktoken (a fast BPE tokeniser for gpt4、chatgpt)

OpenAI在其官方GitHub上公开了一个最新的开源Python库&#xff1a;tiktoken&#xff0c;这个库主要是用做字节对编码(BPE)的。相比较HuggingFace的tokenizer&#xff0c;其速度提升了好几倍。 chatgpt 按token 数量收费&#xff0c;1000个token大约700个单词&#xff0c;可以用…

chatgpt赋能python:Python下载安装教程

Python下载安装教程 Python是一种高级编程语言&#xff0c;具有简单易学、强大多样的特点&#xff0c;不仅可以用来开发网站、应用程序、游戏&#xff0c;还可以用于数据科学、机器学习、人工智能等领域&#xff0c;被广泛应用于各行各业。 本文将为您提供详细的Python下载安…

LLaMA模型系统解读

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

3月份读文+学习思考记录

基于GPT3.5搭建定制化知识库 https://mp.weixin.qq.com/s?__bizMzIyNDAzMzYxNQ&mid2652028778&idx1&sn985a386f915dea0d4dc97186af7c50b6&srcid0316LqkslRQXM1UyluqQFTxe 当然&#xff0c;还有一个问题&#xff1a;程序员怎么办&#xff1f;程序员会被替代吗…