python案例怎么看两队拦截抢断数据?

wen python案例 1

足球比赛两队拦截、抢断数据可视化案例

下面给你一个完整的 Python 案例,用模拟数据 + 可视化展示如何查看和对比两队的拦截、抢断数据,你可以把模拟数据替换成真实数据源(如 StatsBomb、FBref 抓取的数据)。

python案例怎么看两队拦截抢断数据?

用 pandas + matplotlib 对比两队数据

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 1. 模拟两队数据(可替换为真实比赛数据)
data = {
    '球队': ['A队', 'A队', 'A队', 'B队', 'B队', 'B队'],
    '球员': ['张三', '李四', '王五', '赵六', '孙七', '周八'],
    '拦截': [3, 2, 4, 1, 3, 2],
    '抢断': [2, 4, 1, 3, 1, 2],
}
df = pd.DataFrame(data)
print("原始数据:")
print(df)
# 2. 按球队汇总
team_stats = df.groupby('球队')[['拦截', '抢断']].sum()
team_stats['拦截+抢断'] = team_stats['拦截'] + team_stats['抢断']
print("\n按球队汇总:")
print(team_stats)
# 3. 分组柱状图对比
fig, ax = plt.subplots(figsize=(8, 5))
x = np.arange(len(team_stats.index))
width = 0.35
bars1 = ax.bar(x - width/2, team_stats['拦截'], width, label='拦截', color='#4C72B0')
bars2 = ax.bar(x + width/2, team_stats['抢断'], width, label='抢断', color='#DD8452')
# 数值标签
for bars in [bars1, bars2]:
    for bar in bars:
        height = bar.get_height()
        ax.text(bar.get_x() + bar.get_width()/2, height + 0.1,
                f'{int(height)}', ha='center', va='bottom', fontsize=11)
ax.set_xticks(x)
ax.set_xticklabels(team_stats.index)
ax.set_ylabel('次数')
ax.set_title('两队拦截 & 抢断数据对比')
ax.legend()
ax.set_ylim(0, max(team_stats['拦截'].max(), team_stats['抢断'].max()) + 2)
plt.tight_layout()
plt.show()

输出效果:一张分组柱状图,左边蓝色柱子是拦截,右边橙色是抢断,每根柱子上有数字标签,一眼就能看出哪队防守更凶。


用 seaborn 画热力图(球员维度)

import seaborn as sns
# 球员-指标透视表
pivot = df.pivot_table(index='球员', columns='球队',
                       values=['拦截', '抢断'], aggfunc='sum')
# 画热力图
plt.figure(figsize=(7, 5))
sns.heatmap(pivot, annot=True, fmt='.0f', cmap='YlOrRd',
            cbar_kws={'label': '次数'})'球员拦截/抢断热力图')
plt.tight_layout()
plt.show()

可以看到每个球员在两项防守指标上的强弱(颜色越深数值越高)。


接入真实数据的思路

如果你要接真实数据,常见的几种来源:

数据源 方式
FBref pandas.read_html() 直接抓网页表格
StatsBomb Open Data statsbombpy 库,有 events 数据可统计 Interception / Duel
Understat understat 库
体育 API API-Football、Football-data.org 等

以 FBref 为例的抓取代码片段

import pandas as pd
url = "https://fbref.com/en/comps/9/Premier-League-Stats"
# 先找到“Defensive Actions”表格的 table id
tables = pd.read_html(url)
# 选择包含 Interceptions、Tackles 的表格后:
# df = tables[i]
# df[['Squad', 'Interceptions', 'Tackles']]

注意:FBref 有反爬限制,建议加 time.sleep() 或直接下载 CSV。

从 StatsBomb events 统计示例

from statsbombpy import sb
events = sb.events(match_id=3788741)  # 示例 match_id
# 拦截事件
interceptions = events[events['type'] == 'Interception']
inter_by_team = interceptions.groupby('team').size()
# 抢断:StatsBomb 里对应 Duel 中的 "Tackle"
duels = events[events['type'] == 'Duel']
tackles = duels[duels['duel'].apply(lambda x: x.get('type') == 'Tackle' if isinstance(x, dict) else False)]
tackles_by_team = tackles.groupby('team').size()
print("拦截:\n", inter_by_team)
print("抢断:\n", tackles_by_team)

小结

查看两队拦截/抢断数据的一般流程:

  1. 获取数据 → CSV / 网页 / API / Events
  2. 清洗聚合 → groupby('球队')[[...]].sum()
  3. 可视化对比 → 柱状图、热力图、雷达图
  4. 解读 → 拦截多说明预判好,抢断多说明对抗积极

如果你告诉我你手头的数据格式(CSV 列名 / API 结构),我可以帮你写针对性的统计 + 可视化代码。

上一篇这个python案例显示造越位成功几次?

下一篇当前分类已是最新一篇

抱歉,评论功能暂时关闭!

友情链接攻略窝 · 礼包窝 · 配置窝 · 换算窝 · 算法窝 · 查文窝 · 手册窝 · 问答窝 · 全文搜 · 手册库
相关站点礼包窝 · 查文窝