本文目录导读:

在Python里看“本场战术纪律执行”,通常不是直接看代码本身,而是把比赛事件数据转成纪律指标,再做可视化/评分,下面给你一个可直接套用的分析框架和代码模板。
先定义“战术纪律执行”的指标
不同项目含义不同,足球/篮球常用这些:
| 维度 | 指标 | 纪律好的表现 |
|---|---|---|
| 阵型保持 | 球员平均站位偏离战术位置的距离 | 越小越好 |
| 防守纪律 | 犯规数、黄牌、危险区域犯规 | 越少越好 |
| 进攻纪律 | 无效远射、盲目传中、丢球率 | 越低越好 |
| 压迫纪律 | 高位逼抢触发次数 vs 被过次数 | 触发多、被过少 |
| 转换纪律 | 由攻转守回追人数/时间 | 回追快、人数够 |
| 教练指令 | 换人后阵型执行度 | 换人后偏离度不上升 |
用Python怎么“看”
核心思路:把事件数据 → 计算纪律分数 → 可视化对比。
数据准备(示例结构)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 假设有一份本场事件数据
events = pd.DataFrame({
'player': ['A','B','C','A','D','B','C','A'],
'team': ['主队']*8,
'event': ['pass','foul','shot','pass','foul','pass','shot','tackle'],
'x': [30, 60, 85, 40, 70, 50, 88, 45],
'y': [20, 35, 50, 25, 40, 30, 52, 22],
'minute': [5, 12, 20, 28, 35, 42, 55, 60],
'success': [1, 0, 0, 1, 0, 1, 0, 1]
})
# 战术位置(教练要求的平均站位)
tactical_position = {'A': (35, 22), 'B': (55, 32), 'C': (80, 50), 'D': (65, 38)}
计算纪律指标
def discipline_score(events, tactical_position):
score = {}
# 1) 站位纪律:实际平均位置 vs 战术位置
pos = events.groupby('player')[['x','y']].mean()
deviation = []
for p, (tx, ty) in tactical_position.items():
if p in pos.index:
dx = pos.loc[p,'x'] - tx
dy = pos.loc[p,'y'] - ty
deviation.append(np.sqrt(dx**2 + dy**2))
score['站位偏离度'] = np.mean(deviation) if deviation else np.nan
# 2) 犯规纪律
fouls = (events['event'] == 'foul').sum()
score['犯规次数'] = fouls
# 3) 进攻选择纪律:低质量射门(x>80 且 success=0 算勉强打门)
bad_shots = ((events['event']=='shot') & (events['x']>80) & (events['success']==0)).sum()
score['低质量射门'] = bad_shots
# 4) 传球纪律:传球成功率
passes = events[events['event']=='pass']
score['传球成功率'] = passes['success'].mean() if len(passes) else np.nan
return score
result = discipline_score(events, tactical_position)
print(result)
可视化:一眼看出纪律好坏
def plot_discipline(result):
metrics = list(result.keys())
values = list(result.values())
fig, ax = plt.subplots(figsize=(8,4))
bars = ax.barh(metrics, values, color=['#2ecc71' if v < 50 else '#e74c3c' for v in values])
ax.set_title('本场战术纪律执行概览')
ax.set_xlabel('数值(越低越纪律,传球成功率除外)')
for b, v in zip(bars, values):
ax.text(b.get_width(), b.get_y()+b.get_height()/2, f'{v:.2f}', va='center')
plt.tight_layout()
plt.show()
plot_discipline(result)
和赛季平均对比,看“本场是否执行到位”
season_avg = {'站位偏离度': 8.0, '犯规次数': 12, '低质量射门': 4, '传球成功率': 0.82}
compare = pd.DataFrame({
'本场': result,
'赛季平均': season_avg
})
compare['执行评价'] = np.where(
(compare['本场'] <= compare['赛季平均']) | (compare.index=='传球成功率'),
'达标', '需改进'
)
print(compare)
怎么解读结果
- 站位偏离度小 → 阵型保持好,战术纪律高
- 犯规次数低于赛季平均 → 防守动作克制
- 低质量射门少 → 进攻选择理性
- 传球成功率高 → 执行传控战术到位
- 如果某项明显高于平均 → 本场该环节纪律出问题
如果你说的是某个具体的Python案例
比如某个GitHub项目、某篇教程里的代码,把代码或数据字段发我,我可以直接帮你:
- 找到它计算纪律的逻辑在哪
- 指出本场结果怎么看
- 改成你要的指标
你现在的“案例”是足球、篮球,还是别的场景?数据长什么样?