Python爬取NBA球员生涯数据及简单可视化

由于全球疫情的原因

NBA宣布无限期推迟比赛

也被迫随之进入了长草期
在这里插入图片描述

紧接着

狂摸话筒戈贝尔

连坐队友米切尔

网络小帅杜兰特

绿军硬汉斯马特

等十名球员相继官宣感染

洛杉矶湖人两人感染

但未公布名单

社区论坛里便开始疯狂YY

不能看球的日子

就少了一种摸鱼的消遣

但是

虽然看不了比赛

不能少了对🏀的热情

作为一个老JRS

小编决定用python

拿虎扑上球星的数据开开刀

-------(重点内容分割线)-------

以虎扑网站上

勒布朗詹姆斯的数据页面为例

用requests+lxml解析

import requests
from lxml import etree
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
url='https://nba.hupu.com/players/lebronjames-650.html'
data=requests.get(url).text
s=etree.HTML(data)

访问如下网址:

‘https://nba.hupu.com/players/lebronjames-650.html’

Ctrl+Shift+C进入开发页面

在这里插入图片描述

选中所需的数据内容

右键->Copy->Copy Xpath

获取“赛季”和“球队”字段的Xpath

//*[@id=“in_box”]

/div/div[1]/table[2]/tbody/tr[1]/td[1]

//*[@id=“in_box”]

/div/div[1]/table[2]/tbody/tr[1]/td[2]

仔细观察可以发现

tr[1]/td[1]和tr[1]/td[2]

是区分不同字段的关键

用循环匹配的方式就可以定位字段

再将数据逐一下载保存

但是效果却并不好

用TXT存储数据

数据杂乱没有分行

且每个字段数据都掺入了

奇怪的符号“ ‘’’ ”

在这里插入图片描述

对代码进行进一步优化

将输出的字符串“掐头去尾”

并用.csv文件存储

d=[[]for j in range(20)]
for j in range(20):
  for i in range (19):
    a=s.xpath('//*[@id="in_box"]/div/div[1]/table[2]/tbody/tr['+str(j)+']/td['+str(i)+']/text()')
    b=str(a)
    c=b[2:-2]
    d[j].append(c)

data1 = pd.DataFrame(d)
data1.to_csv('output.csv')

效果一下子好了许多

在这里插入图片描述

用同样的方法进行爬取

对库里、杜兰特、字母哥、

哈登、伦纳德和詹姆斯

六位球员生涯常规赛和季后赛

数据进行了汇总

在这里插入图片描述

有了数据下一步就要进行分析工作了

先对球员数据进行预处理

1.将季后赛数据和常规赛数据合并
2.选取需要分析的数据,包括
时间、命中率、篮板、助攻、失误、得分
(均为场均数据)
3.对除了命中率外的各项数据进行归一化

接下来就用到了matplotlib包

我们需要用它来画雷达图和折线图

plt.rcParams['font.sans-serif'] = ['KaiTi']  # 显示中文
labels = np.array([u'时间', u'命中率', u'篮板',u'助攻',u'失误',u'得分']) # 标签
dataLenth = 6  # 数据维度
data_radar = np.array([james[0],james[1],james[2],james[3],james[4],james[5]]) # 数据
angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)  # 分割圆周长
data_radar = np.concatenate((data_radar, [data_radar[0]]))  # 闭合
angles = np.concatenate((angles, [angles[0]]))  # 闭合
plt.polar(angles, data_radar, 'bo-', linewidth=1)  # 做极坐标系
plt.thetagrids(angles * 180/np.pi, labels)  # 做标签
plt.fill(angles, data_radar, facecolor='magenta', alpha=0.25)# 填充  c  maroon
plt.title(u'james生涯场均数据')
plt.show()

雷达图便于显示该球员

在六个维度的属性和能力

在这里插入图片描述

很明显,詹姆斯在六人的比较当中

四项数据名列前茅

由于扬尼斯的存在

篮板稍微逊色一些

同样将其他球员数据做成图片

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

杜兰特:

字母哥:

在这里插入图片描述

哈登:

在这里插入图片描述

伦纳德:

在这里插入图片描述

以上数据均为场均数据

接下来对总得分趋势进行分析

plt.title('詹杜卡库哈扬生涯得分')
plt.plot(x, curry, color='green', label='curry')
plt.plot(x, durant, color='red', label='durant')
plt.plot(x, giannis,  color='skyblue', label='giannis')
plt.plot(x, harden,  color='blue', label='harden')
plt.plot(x, kawhi,  color='yellow',label='kawhi')
plt.plot(x, james,  color='magenta',label='james')
plt.legend() # 显示图例
plt.xlabel('赛季')
plt.ylabel('得分')
plt.show()

将詹杜卡库哈扬生涯累计得分

绘制折线图进行分析

在这里插入图片描述

横轴表示03赛季至19赛季

纵轴表示球员生涯累计得分

老詹一骑绝尘呐,哈哈

对上图进行处理之后

在这里插入图片描述

可以看到

詹姆斯的得分能力仍旧具有统治力

三十岁之后数据有所下滑

但是哈登和杜兰特得分能力紧追不舍

作为老詹蜜

今年是湖人和老詹最有希望的一年

希望疫情赶快过去

还卧虎一个总冠军

微信扫一扫
关注该公众号
在这里插入图片描述

  • 13
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值