如何用 Python 分析这次角球战术配合
你想用 Python 分析角球战术配合,思路其实可以拆成数据层 → 可视化层 → 战术解读层三步走,下面给你一套完整可复用的框架。

先明确要分析的要素
一次角球战术配合,核心关注点通常是:
| 维度 | 具体问题 |
|---|---|
| 发球方式 | 内旋/外旋?短角球/长传? |
| 跑位路线 | 谁做假动作?谁真正接应? |
| 防守反应 | 盯人/区域?是否被牵扯出空当? |
| 关键节点 | 第一落点、第二落点、射门点 |
| 结果 | 射门/进球/被解围 |
数据准备(三种常见来源)
import pandas as pd
# 方案A:StatsBomb 开放数据(有详细的角球事件)
from statsbombpy import sb
events = sb.events(match_id=3788741) # 示例比赛
corners = events[events['type'] == 'Pass'] # 筛选角球传球
# 方案B:自己标注的坐标数据
# 格式:x, y (0-120 或 0-100),时间戳,球员,事件类型
df = pd.read_csv('corner_sequence.csv')
# 方案C:跟踪数据(每帧22人坐标)
tracking = pd.read_csv('tracking_frame.csv')
推荐字段结构:
timestamp, player, team, x, y, event_type, target_x, target_y
可视化:画出战术板
import matplotlib.pyplot as plt
from mplsoccer import Pitch
pitch = Pitch(pitch_type='statsbomb', line_color='black')
fig, ax = pitch.draw(figsize=(10, 7))
# 只画角球发生后的5秒序列
seq = df[(df['t'] >= corner_time) & (df['t'] <= corner_time + 5)]
# 传球路线(带箭头表示方向)
for _, row in seq[seq['event_type'] == 'pass'].iterrows():
pitch.arrows(row.x, row.y, row.target_x, row.target_y,
ax=ax, width=2, headwidth=8, color='blue')
# 球员跑位轨迹
for player in seq['player'].unique():
p = seq[seq['player'] == player]
pitch.plot(p.x, p.y, ax=ax, marker='o', linewidth=2, label=player)
# 关键节点高亮
pitch.scatter(corner_x, corner_y, ax=ax, s=300, color='red', alpha=0.5)
ax.legend(loc='upper left')'角球战术配合轨迹')
plt.show()
进阶分析:跑位与空间
# 1. 计算球员跑动距离与方向
def run_distance(traj):
return np.sum(np.sqrt(np.diff(traj.x)**2 + np.diff(traj.y)**2))
# 2. 用 Voronoi 看谁在牵扯防守、制造空当
from mplsoccer import Voronoi
team1 = seq[seq.team=='attack'][['x','y']].values
team2 = seq[seq.team=='defense'][['x','y']].values
vor = Voronoi(team1, team2, ax=ax)
# 3. 检测「跑位吸引」:某防守球员偏离初始位置的距离
def displacement(defender_id):
d = seq[seq.player == defender_id]
return np.linalg.norm(d.iloc[-1][['x','y']] - d.iloc[0][['x','y']])
战术解读的模板
拿到图和数据后,按这个逻辑讲故事:
发球点与旋向:左边角球内旋 → 落点在小禁区线附近
2. 第一层跑动:2名球员向近门柱冲刺 → 吸引3名防守球员
3. 第二层跑动:后插上的中卫从点球点斜插远门柱(关键)
4. 空间生成:Voronoi 显示远门柱出现 2㎡ 空当
5. 结果:头球攻门 / 被解围
用代码可以量化第4、5步:
# 计算射门瞬间最近防守球员距离
shot = seq[seq.event_type=='shot'].iloc[0]
dists = np.linalg.norm(seq[seq.team=='defense'][['x','y']] - shot[['x','y']], axis=1)
print(f"最近防守球员距离:{dists.min():.2f} 米")
如果你手头有具体案例
告诉我:
- 数据来源(视频?统计表?StatsBomb?)
- 想回答的问题(为什么成功/失败?谁跑位关键?)
- 现有字段(有坐标吗?有时间戳吗?)
我可以帮你写出针对这次角球的具体分析脚本,包括动图(matplotlib.animation 或 plotly)回放。
最简上手路径:先用 mplsoccer 把事件坐标画出来,再手动对照视频标注关键帧,最后用文字 + 箭头图输出战术报告,要不要我给你写一个可直接跑的动图回放模板?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播