利用python实现NBA数据可视化
大家好,今天我们利用python爬取NBA球星每年的比赛数据并进行可视化展示。主要用到三个模块:xpath、matplotlib。其中xpth负责爬取网站上的信息。Matplotlib是Python开发人员常用的Python绘图库,可以用来绘制各种2D图形,具有绘图质量高,使用简单的特点,支持Latex公式插入,很多时候只需一行或几行代码即可完绘图。
首先我们打开网站可以看到每年的得分数据。
右击检查,找到得分的xpath路径://*[@id="in_box"]/div/div[1]/table[2]/tbody/tr[2]/td[18]
同样方式我们获取到年份的xpath路径://*[@id="in_box"]/div/div[1]/table[2]/tbody/tr[2]/td[1]
将得到的数据分别存入列表以x轴y轴的数据带入到matplotlib中,最后形成年度得分折线图展示出来。
具体代码如下:
# -*- coding:utf-8 -*-
import requests
from lxml import etree
import pandas as pd
import matplotlib.pyplot as pltfrom matplotlib.font_manager import FontPropertiesdef getChineseFont():return FontProperties(fname='/System/Library/Fonts/PingFang.ttc')url='https://nba.hupu.com/players/jamesharden-3306.html'
headers={
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36'
,'referer' : url
}response=requests.get(url=url,headers=headers)
#print(response.text)
html=etree.HTML(response.text)
list1=html.xpath('//*[@id="in_box"]/div/div[1]/table[2]/tbody/tr/td[1]/text()')
listx=list1[1:]
x = list(map(int, listx)) #转数字
list2=html.xpath('//*[@id="in_box"]/div/div[1]/table[2]/tbody/tr/td[18]/text()')
listy=list2[1:]
y=list(map(float, listy)) #转数字
print(listx)
print(listy)
plt.plot(x, y)
plt.xlabel("年份",fontproperties=getChineseFont())
plt.ylabel("得分",fontproperties=getChineseFont())
plt.title("哈登年度得分",fontproperties=getChineseFont())
# 在折线图上显示具体数值, ha参数控制水平对齐方式, va控制垂直对齐方式
for x1, y1 in zip(x, y):plt.text(x1, y1 + 1, str(y1), ha='center', va='bottom', fontsize=15, rotation=0)
plt.show()
最终运行的结果如下:
感谢大家的支持,希望得到点赞与关注,我们下期见。