太酷了,Python 制作足球可视化图表 | 代码干货-CSDN博客

admin 45 2024-05-14 21:25:05

太酷了,Python 制作足球可视化图表 | 代码干货-CSDN博客

作者 | 小F

来源 | 法纳斯特

大家好,我是小F。

最近不少小伙伴都会熬夜看欧洲杯。今年的欧洲杯相比起往年的欧洲杯来说,可谓是冷门频出,出乎意料。

真的不知道,第一会花落谁家~

本期小F就和大家分享一下,用Python和Matplotlib绘制一个足球运动员的数据可视化图表。

来看一下C罗的情况,跟老詹一样高龄,真的佩服。

数据来源于下面两个网站,Understat和Fbref。

链接:

链接:

欧洲足球五大联赛,英超、意甲、西甲、德甲、法甲。

先看一下射门数据的可视化,本质上和篮球的出手点图差不多,都是散点图类型。

导入相关的Python库:

从Understat网站爬取射门数据,使用BeautifulSoup、JSON和pandas解析和处理数据。

此处的ID,通过查询球员名字可知:

查询中国球员武磊,点击访问,在地址栏处,可以看到球员ID。

得到数据如下:

包含射门位置(x、y)、xG(预期进球)、射门结果、赛季。

其中x、y的坐标值为0~1之间,不适合在Matplotlib显示,所以选择放大100倍。

得到结果如下:

既然已经成功获取Understat网站的数据,就可以去获取Fbref网站的数据啦。

这里是球员的一些个人信息,以及赛季的平均数据。

比如全名、国家、位置、俱乐部、联赛、年龄、出生年份、上场时间、得分数据等等。

因为网页的数据是表格形式,所以直接使用pandas的read_html函数,解析表格爬取数据。

这个网站需要取消一下证书验证,要不然连接不成功。

获取球员的相关数据:

得到结果如下:

数据都已经准备好了,那么我们就可以将数据绘制到图表上。

先安装mplsoccer、highlight_text这两个Python库。

其中mplsoccer库可以自定义绘制足球场,无需我们自己绘制场地图。

想了解更多,可以访问它的GitHub地址:

初始化一些设置,画布背景色、字体颜色、默认字体,字体大小,此处选择中文字体。

新建一个画布:

显示如下:

绘制19-20赛季,C罗的进球情况。

通过设置mplsoccer的参数,绘制半个足球场。

果然,左下方有半个足球场。

将射门数据用散点图表示,分为进球得分和未成功进球得分两种情况。

未得分射门散点图:

得分散点图:

结果如下,失败的比成功的多。

这样,我们就将C罗在2019-2020赛季的所有射门点数据可视化出来了。

其中散点的大小,是预期进球的大小。

添加标签及图例,设置相应的位置、文字、字体等设置。

成功添加附加信息:

显示赛季、xG、得分次数、射门次数信息。

同样将20-21赛季的数据绘制出来,放置在19-20赛季的右侧。

结果如下:

C罗老当益壮啊,状态一点也没有下滑。

下面接着绘制所有球员的数据散点图,看看C罗的数据能在哪一档?

创建一个坐标轴:

首先对数据进行筛选,上场时间最少要有900s,而且位置为前锋此类的。

毕竟我们不能拿个守门员,跟C罗比数据吧,参考意义不大。

所有球员每90s预期进球和得分次数的数据情况。

现在我们筛选出C罗的数据,在散点图上用不同的颜色及透明度来突出显示它。

结果如下:

可以看到C罗的数据还是比较高效的,虽不是第一,但也是前几的存在。

最后给散点图添加网格线,以及x轴和y轴标签。

结果如下:

不愧是C罗,在2020-21赛季几乎每90秒就能进1颗球。

18年就已经有一个记录!C罗成历史第一位在90分钟内每分钟都有进球的球员。

最后添加文本信息,包含标题,C罗的头像,场上位置、年龄、效力球队。

此处使用hightlight-text库,可以高亮文本。

C罗的头像、效力的队伍logo,都是小F自己制作的。

得到结果如下:

保存为图片:

看起来还不错哦:

好了,本期的分享就到此结束了,有兴趣的小伙伴可以自行去实践学习。

快给自己喜欢的足球运动员,也制作一个赛季数据面板吧!

代码链接:

密码:n0vq

上一篇:女足世界杯西班牙女足vs荷兰女足比分预测 历史交手7次西班牙女足占优_球天下体育
下一篇:2020欧洲杯|丹麦2:1淘汰捷克 英格兰4:0完胜乌克兰 会师半决赛-荆楚网-湖北日报网
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

返回顶部小火箭