用python分析NBA联盟球员信息,才知道这些秘密!

2023-10-26

作者: 锋小刀
微信搜索【Python与Excel之交】关注我的公众号查看更多内容

前言

NBA由北美三十支队伍组成的男子职业篮球联盟,汇集了世界上最顶级的球员,是美国四大职业体育联盟之一。

本文爬取了NBA中国官方网站球员信息,进行数据可视化分析。

数据获取

网站数据存放在json格式的链接中,在往期文章中已详细讲解过如何获取,本文就不做赘述,以下给出完整代码:

# -*-codEing = utf-8 -*-
# @Time : 2021/1/28 13:56
# @Author : 公众号 职场办公杂技
# @File : NBA球员数据获取.PY
# @Software : PyCharm

import requests
import pandas as pd

df = pd.DataFrame()
response = requests.get('https://china.nba.com/static/data/league/playerlist.json').json()
for playerProfile in response['payload']['players']:
    displayName = playerProfile['playerProfile']['displayName']     # 中文名称
    displayNameEn = playerProfile['playerProfile']['displayNameEn']   # 英文名称
    displayAbbr = playerProfile['teamProfile']['displayAbbr']     # 球队
    position = playerProfile['playerProfile']['position']   # 位置
    height = playerProfile['playerProfile']['height']       # 身高
    weight = playerProfile['playerProfile']['weight']       # 体重
    experience = playerProfile['playerProfile']['experience']    # 经验
    country = playerProfile['playerProfile']['country']     # 国籍
    print(displayName, displayNameEn, displayAbbr, position, height, weight, experience, country, sep='  |  ')
    data = pd.DataFrame({'中文名称': [displayName], '英文名称': [displayNameEn], '球队': [displayAbbr], '位置': [position], '身高': [height], '体重': [weight], '经验': [experience], '国籍': [country]})
    df = pd.concat([df, data])
df.to_csv('NBA球员数据.csv', encoding='utf-8', index=False)

数据处理

导入pandas并数据读取数据。

import pandas as pd

df = pd.read_csv("D:/数据小刀/数据可视化/NBA球员数据.csv")
df.head()

预览效果如下:
在这里插入图片描述
查看数据格式:

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 493 entries, 0 to 492
Data columns (total 8 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   中文名称    493 non-null    object 
 1   英文名称    493 non-null    object 
 2   球队      493 non-null    object 
 3   位置      493 non-null    object 
 4   身高      493 non-null    float64
 5   体重      493 non-null    object 
 6   经验      493 non-null    int64  
 7   国籍      493 non-null    object 
dtypes: float64(1), int64(1), object(6)
memory usage: 30.9+ KB

数据都很完整,但需要更改下标题行:

df = df.rename(columns={'中文名称':'中文姓名','英文名称':'英文姓名','球队':'所在球队','位置':'站位'})
df.head()

在这里插入图片描述
过滤到不需要的数据字段:

df = df[["中文姓名","所在球队","站位","身高","体重","经验","国籍"]]
df.sample(10)

在这里插入图片描述

数据可视化

球队人数占比

通过对球队人数制作饼状图,我们发现,NBA联盟中各个球队的人数都差不多,最底占比是篮网为2.84%,其次是开拓者为3.02%,但总体上都保持正常编队。
在这里插入图片描述

df2 = df["所在球队"].astype("str").value_counts()
df2 = df2.sort_values(ascending=False)
regions = df2.index.to_list()
values = df2.to_list()
c = (
        Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))
        .add("", list(zip(regions,values)))
        .set_global_opts(legend_opts = opts.LegendOpts(is_show = False),
                         title_opts=opts.TitleOpts(title="球队人数占比",subtitle="数据来源:NBA中国官方网站\n公 众 号 :职场办公杂技"))
        .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}占比:{d}%",font_size=15))    
    )
c.render_notebook()
球员经验数量TOP10

通过对球员经验数量制作条形图图,我们发现,经验为0以及经验为1的球员最多,其次是经验为2和3的,经验越高人数越少。
在这里插入图片描述

df3 = df["经验"].value_counts()[0:11]
df3 = df3.sort_values(ascending=True)
df3 = df3.tail(10)
c = (
    Bar(init_opts=opts.InitOpts(theme=ThemeType.WALDEN,width="1000px",height="500px"))
    .add_xaxis(df3.index.to_list())
    .add_yaxis("",df3.to_list()).reversal_axis()
    .set_global_opts(title_opts=opts.TitleOpts(title="球员经验数量TOP10",subtitle="数据来源:NBA中国官方网站"),
                       xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=15)),
                       yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=15)))
    .set_series_opts(label_opts=opts.LabelOpts(font_size=15,position='right')))
c.render_notebook()

我们看下经验最高的十位球员分别在什么球队服役,其中安东尼 、哈斯勒姆 、詹姆斯经验最高,分别服役于开拓者、热火、湖人这三支热门的球队。
在这里插入图片描述

df5 = df.sort_values(by="经验", axis=0, ascending=False) #降序
df5 = df5.reset_index(drop=True) #重置索引
df5[:10]
身高TOP10

通过筛选发现,凯尔特人的法尔最高-2.26米,其次是独行侠的马扬诺维奇和波尔津吉斯 ,分别是2.24米和2.21米。而这十人的站位都是中锋或者兼任中锋,不知道是不是拿来当一堵墙用?
在这里插入图片描述

df5 = df.sort_values(by="身高", axis=0, ascending=False) #降序
df5 = df5.reset_index(drop=True) #重置索引
df5[:10]
体重TOP10

通过筛选发现,凯尔特人的法尔最高-141.1公斤,其次是马扬诺维奇和努尔基奇,都是131.5公斤;通过身高TOP10和体重TOP10两个榜单对比发现,体重在前十且身高又在前十的有很多,难道真的是拿来当一堵墙用的?法尔和马扬诺维奇两人在两个榜单中都排名前二,我上网查找他们的图片看了下,发现重不是因为胖,没准是长的高。
在这里插入图片描述

df["体重"] = df["体重"].str.split(' ',expand=True)[0]  # expand=True把用分割的内容分列
df["体重"] = df["体重"].astype('float')# 转换为数值类型
df6 = df.sort_values(by="体重", axis=0, ascending=False) # 降序
df6 = df6.reset_index(drop=True) # 重置索引
df6[:10]
球员站位

通过球员站位数据制作折线图,我们可以发现,单纯后卫的人最多,其次是单纯前锋;其余站位中,可以看出,兼任前锋的站位很多。
在这里插入图片描述

df7 = df["站位"].value_counts()
c = (
    Line(init_opts=opts.InitOpts(theme=ThemeType.DARK))
    .add_xaxis(df7.index.to_list())
    .add_yaxis("",df7.to_list()) 
    .set_global_opts(title_opts=opts.TitleOpts(title="球员站位",subtitle="数据来源:NBA中国官方网站"),
                       xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13))
                       yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=13))
                       )
    .set_series_opts(label_opts=opts.LabelOpts(font_size=15,position='top')))
c.render_notebook()
NBA球员所属国

我们以球员的国籍制作地图可视化,可以清晰的看到,NBA球员最多出自美国,以及其它的一些西方国家。毕竟NBA联盟是美国本土篮球组织,数量最多也是应该的。
在这里插入图片描述

df8 = df["国籍"].astype("str").value_counts()
df8 = df8.sort_values(ascending=False)
data_region = df8.index.to_list()
data_value = df8.to_list()
data_list = list(zip(data_region,data_value))
map_ = (
        Map(init_opts=opts.InitOpts(theme=ThemeType.DARK))
        .add(series_name="NBA球员所属国",data_pair=data_list,maptype="world",name_map=nameMap)
        .set_global_opts(legend_opts = opts.LegendOpts(is_show = False)
                         ,title_opts=opts.TitleOpts(title="NBA球员所属国",subtitle="数据来源:NBA中国官方网站\n公 众 号 :职场办公杂技")
                         ,visualmap_opts=opts.VisualMapOpts(max_=400,is_piecewise=False))
        .set_series_opts(label_opts=opts.LabelOpts(is_show = False,font_size=15))
        
    )
map_.render_notebook()

本文图片以及文本仅供学习、交流使用,不做商业用途,如有问题请及时联系我们以作处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用python分析NBA联盟球员信息,才知道这些秘密! 的相关文章

  • 比较 TCP 校验和与 Scapy?

    我试图在使用 Scapy 作为嗅探器时识别校验和不正确的数据包 我可以通过访问获得原始校验和 packet TCP chksum 然后我使用删除它 del packet TCP chksum 我想做类似的事情 if originalChec
  • Python数据框将列表列分解为多行[重复]

    这个问题在这里已经有答案了 我有一个像这样的数据框 desc id info a b c 2 type u v w 18 tail 三列 desc id info desc 是一个列表 我想要这个 des id info a 2 type
  • 如何在Python中每次运行脚本时增加变量?

    我有一个 Python 脚本 我想在每次运行时增加一个全局变量 这可能吗 使用外部文件很容易做到这一点 您可以创建一个函数来为您执行此操作 这样您就可以根据需要将多个文件用于多个变量 尽管在这种情况下您可能想要研究某种序列化并将所有内容存储
  • winpdb 不适用于 python 3.3

    我无法让 rpdb2 与 python 3 3 一起运行 但根据多个来源 这应该是可能的 rpdb2 d myscript py A password should be set to secure debugger client serv
  • 使用数据库数据模型生成 SQLAlchemy 模型、架构和 JSON 响应

    将 Flask 和 SQLAlchemy 用于 Python Web 应用程序 我的目标是创建一个系统 在其中我可以 从现有 PostgreSQL 数据库导入数据模型 并将它们映射到相应 SQLAlchemy 模型中的字段 使用这些 SQL
  • 对seaborn图中的分类x轴进行排序

    我正在尝试使用 seaborn 散点图绘制数据框中前 30 的值 如下所示 同一图的可重现代码 import seaborn as sns df sns load dataset iris function to return top 30
  • 抓取多个帐户,即多次登录

    我可以成功抓取单个帐户的数据 我想在一个网站上抓取多个帐户 这意味着多次登录 如何管理登录 注销 您可以在每个帐户会话中使用多个 cookiejar 并行抓取多个帐户 请参阅 cookiejar 请求元密钥http doc scrapy o
  • 冻结(.exe)一个traitsUI程序,现实可行吗?

    我正在尝试使用 cx freeze 或 pyInstaller 冻结一个 TraitsUI 程序 该程序利用 Chaco Traits TraitsUI 以及较小程度的 mayavi 实际上可以取出 我需要它在 mac linux ubun
  • 无法写入文本文件

    我正在运行一些测试并需要写入文件 当我运行测试时open file r 不写入文件 测试脚本如下 class GetDetailsIP TestGet def runTest self self category PTZ try This
  • 如何开始使用“scipy”

    我之前安装过 Python 3 4 2 和 3 5 2 在这两种情况下 我都可以在 Idle 中涉足编写和测试代码 这给了我两个窗口 一个用于代码的 运行 窗口 一个用于交互和测试的 Shell 窗口 输出 抱歉 不确定术语是否正确 现在我
  • Flask 无法识别两个 URL 参数

    我正在尝试将两个参数发送到使用 Flask 路由的 URL If I do curl i http 127 0 0 1 5000 api journeys count startStationName Hansard 20Mews 20Sh
  • 在pycharm中使用多处理时如何调试

    我正在 pycharm 社区版中使用 anaconda2 调试多进程程序 它有几个后台工作进程 工作进程将检查输入队列以检索任务 而不会休眠 直到收到任务 事实上 我只对主要流程感兴趣 但是pycharm调试器总是单步进入子进程 看起来主进
  • PySide2/QML 填充 Gridview 模型/委托并为其设置动画

    我是 QML 的新手 正在寻求以下几点帮助 如何基于 TextField 输入 如 Regex 通过 PySide2 过滤 Gridview 模型中的 QAbstractListModel 数据 标题 如何在鼠标悬停时为 Gridview
  • Python:从字符串访问变量[重复]

    这个问题在这里已经有答案了 这可能是非常基本和简单的事情 我可能只是在谷歌上搜索错误的术语 但希望这里有人可以帮助我 我仍然是编程的初学者 这从这个问题中可能是显而易见的 我正在寻找一种从字符串访问变量的方法 像这样 A1 B1 C1 my
  • python 中打印变量和字符串

    好吧 我知道如何打印变量和字符串 但是我如何打印类似 我的字符串 card price 的内容 它是我的变量 我的意思是 这是我的代码 print I have and here I would like to print my varia
  • matplotlib 轴标签偏移量的因素和变化

    在 matplotlib 中的轴刻度标签上 有两种可能的偏移量 factors and shifts 在右下角 1e 8 是一个 因子 1 441249698e1 是一个 移位 这里有很多答案展示了如何操纵两个都 matplotlib 将轴
  • 第 100 次避免循环导入

    Summary 我继续有一个ImportError在一个复杂的项目中 我已经将其蒸馏到仍然会出现错误的最低限度 Example 巫师有装有绿色和棕色药水的容器 这些可以添加在一起 产生同样是绿色或棕色的新药水 我们有一个PotionABC
  • 如何按分层类别结构中的值对 pandas 中的数据框进行排序

    我有一个 pandas 数据框 pd DataFrame category Transport Transport Car Transport Train Household Household Utilities Household Ut
  • 使用 PyODBC 选择表中的列名

    我正在编写一个 Python 程序 该程序使用 PyODBC 从 Microsoft Access mdb 文件中选择一些数据 我需要发现几个不同表的列名 在 SQL Server 中 这可以通过使用类似的查询来完成 SELECT c na
  • Python 装饰器只是语法糖? [复制]

    这个问题在这里已经有答案了 可能的重复 了解 Python 装饰器 https stackoverflow com questions 739654 understanding python decorators 我对使用 Python 装

随机推荐

  • CSA作业

    1 修改当前主机名为rhcsa 设置当前时区为Asia Shanghai 2 在 home和 root目录下面创建file1文件和dir1目录 3 在 home file1文件里面写入内容hello welcome to home 4 在
  • Python中进程和线程详解与四款Python程序库

    Num01 gt 线程 线程是操作系统中能够进行运算调度的最小单位 它被包含在进程之中 是进程中的实际运作单位 一个线程指的是进程中一个单一顺序的控制流 一个进程中可以并发多条线程 每条线程并行执行不同的任务 Num02 gt 进程 进程就
  • Qt报错: error: C2001: 常量中有换行符,解决QT运行时有中文乱码

    Qt系列文章目录 文章目录 Qt系列文章目录 前言 一 问题原因 二 解决办法 1 第一种方法 改变文件的编码格式 2 第二种方法 修改代码 总结 前言 在编译别人的Qt工程中 总会遇到莫名其妙的问题 在别人机器上运行好好的工程 拷贝到自己
  • BAPI_ACC_DOCUMENT_POST 税码未在任何总分类账目中出现

    BAPI ACC DOCUMENT POST 报错 税码未在任何总分类账目中出现 原因 BAPI不支持auto tax caculate 单独录入税分录 需要设置一下direct tax
  • [leetcode 周赛 149] 1156 单字符重复子串的最大长度

    目录 1156 Swap For Longest Repeated Character Substring 单字符重复子串的最大长度 描述 思路 代码实现 1156 Swap For Longest Repeated Character S
  • Ajax请求后防止自动刷新方法

    Ajax请求后会刷新页面 启用延时函数在刷新后进行jq操作 刷新时间在5 10ms内 在经过这段时间后再进行jq操作
  • 函数重载、函数覆盖以及函数隐藏

    函数重载 是指允许存在多个同名函数 而这些函数的参数表不同 或许参数个数不同 或许参数类型不同 或者两者都不相同 函数重载是发生在同一个类中 调用时 根据参数的不同进行调用 同时编译器在编译期间就确定了要调用的函数 或者说这是一种早期绑定
  • 前端下载文件(Blob)的几种方式使用Blob下载文件

    前端下载文件的几种方式 使用Blob下载文件 在前端下载文件是个很通用的需求 一般后端会提供下载的方式有两种 1 直接返回文件的网络地址 一般用在静态文件上 比如图片以及各种音视频资源等 2 返回文件流 一般用在动态文件上 比如根据前端选择
  • IntelliJ IDEA 必备插件(持续更新...)

    插件名称 功能描述 gitignore 过滤提交到git仓库的文件 Alibaba Java Coding Guidelines 阿里巴巴Java规约检查插件 gitflow Integration git flow集成插件
  • python配置opencv环境

    1 下载python3 7 2 它自带pip 直接输入 pip install opencv python pip install numpy pip install matplotlib 安装不成功则在pip install XXX命令的
  • 《C++语言基础》程序阅读——和对象找感觉

    返回 贺老师课程教学链接 按照封装与信息隐藏的原则 除非特别需要 类中的数据成员需要设置为私有 由此带来的问题是 在类外如何访问这些私有成员 下面4段程序概括了常用的方法 请仔细阅读下面的程序 在阅读过程中 画出对象 变量在内存中的表示图
  • Unity如何把游戏导出成手机安装包

    文章目录 前言 使用环境 步骤 添加模块 添加场景 导出 平台 导出前的设置 构建APK 其他文章 前言 本文章主要演示了 如何将制作好的游戏 导出成APK 安装到手机上 使用环境 Unity2022 步骤 添加模块 确保你已经安装了And
  • Python中sub()用法

    Python来进行查询和替换一个文本字符串 可以使用sub 方法来进行查询和替换 sub方法的格式为 sub replacement string count 0 replacement是被替换成的文本 string是需要被替换的文本 co
  • 编译内核、更新源

    1 ubuntu下面修改更新源 sudo gedit etc apt sources list 2 编译内核 1 cd 到 usr src 下 解压下载的内核源代码包 2 make mrproper 清理生成的文件 貌似对第一次编译内核没有
  • STM32F103 GPIO内部电路图

    GPIO结构图 GPIO工作模式 输入模式 输入浮空 输入上拉 输入下拉 模拟输入 输出模式 开漏输出 开漏复用功能 推挽式输出 推挽式复用功能 输入浮空 输入上拉 输入下拉 模拟输入 开漏输出 开漏复用功能 推挽式输出 推挽式复用功能
  • 掌握Python的X篇_1_认识Python(做什么?;是什么?:控制台使用、Python的本质就是一个exe程序;python是一个翻译器机器:人写的代码转为机器语言)

    掌握Python的X篇 1 认识Python 1 为什么学习Python 2 什么是Python 2 1介绍控制台及其基本使用 2 1 1 控制台的启动方法 2 1 1 控制台及使用 2 1 Python的本质 就是一个exe程序 3 Py
  • xenomai 在X86平台下中断响应时间测试

    版权声明 本文为本文为博主原创文章 转载请注明出处 如有问题 欢迎指正 博客地址 https www cnblogs com wsg1100 本文主要讲述xenomai 在X86平台上的中断响应时间测试 1 中断响应时间 实时操作系统的意义
  • Eclipse的启动问题【an error has occurred see the log file】

    今天打开Eclipse的时候出现来了一个问题 导致了Eclipse打不开 错误的提示是 An error has occurred See the log file 谷歌了一下 解决的办法是 删除eclipse的临时文件 eclipse c
  • html文章整体居中,HTML如何让文字居中?附两种方式

    我们在编写一个网页时 经常需要将文字居中 那么这篇文章小编教你HTML如何让文字居中 方法一 居中标签中可以直接添加align center 样式 使文字居中 具体代码如下 w3cschool 编程狮 w3cschool 编程狮 w3csc
  • 用python分析NBA联盟球员信息,才知道这些秘密!

    作者 锋小刀 微信搜索 Python与Excel之交 关注我的公众号查看更多内容 前言 NBA由北美三十支队伍组成的男子职业篮球联盟 汇集了世界上最顶级的球员 是美国四大职业体育联盟之一 本文爬取了NBA中国官方网站球员信息 进行数据可视化