由于全球疫情的原因
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赛季
纵轴表示球员生涯累计得分
老詹一骑绝尘呐,哈哈
对上图进行处理之后
可以看到
詹姆斯的得分能力仍旧具有统治力
三十岁之后数据有所下滑
但是哈登和杜兰特得分能力紧追不舍
作为老詹蜜
今年是湖人和老詹最有希望的一年
希望疫情赶快过去
还卧虎一个总冠军