前言
在第一篇文章里我们分别介绍了,足球数据库statsbombpy的安装以及说明,随后也介绍了利用statsbombpy的数据可视化比赛传球神经网络。今天让我们继续做些可视化工作。首先让我们细化每位首发球员传球吧!
准备工作
1.1 导入statsbombpy等库
import matplotlib.pyplot as plt
from mplsoccer import Pitch, Sbopen
import pandas as pd
import warnings
1.2 过滤警告
warnings.filterwarnings("ignore", category=DeprecationWarning)
pd.options.mode.chained_assignment = None
设置了忽略DeprecationWarning的警告,防止一些不影响程序运行但是会在输出中显示的信息chained_assignment选项为None来避免在链式赋值时发出的警告。
1.3 数据的处理
我们继续使用法国对战阿根廷那场的比赛数据,其中我们首先处理坎特和博格巴的传球数据。
parser = Sbopen()
df, related, freeze, tactics = parser.event(7580)
pitch = Pitch(line_color='black')
fig, ax = pitch.draw(figsize=(12, 7))
players = {"Paul Pogba": "red", "N''Golo Kanté": "blue"}
建立个字典,将球员的名字映射到绘图中使用的颜色上。坎特将用蓝色表示,而博格巴将用红色表示。筛选出法国队的传球数据当然我们必须排除掷界外球的数据
france_passes = df[(df.type_name == 'Pass') & (df.team_name == "France") & (df.sub_type_name != "Throw-in")]
下一步
for player, color in players.items():
mask_player = (df.type_name == 'Pass') & (df.player_name == player)
df_pass = df.loc[mask_player, ['x', 'y', 'end_x', 'end_y']]
pitch.arrows(df_pass.x, df_pass.y, df_pass.end_x, df_pass.end_y,
color=color, ax=ax, label=player, zorder=1, width=2)
pitch.scatter(df_pass.x, df_pass.y, alpha=0.5, s=300, color=color, ax=ax)
这个循环遍历球员和颜色,使用pandas的Boolean