本文目录导读:

- 第一步:定义“边路突破”的量化指标
- 第二步:Python 实战案例(以模拟数据为例)
- 第三步:数据可视化(一眼看出强弱)
- 第四步:进阶统计检验(判断差异是否显著)
- 第五步:针对真实数据的适配建议
- 总结:怎么“看”结果?
在Python中分析两支球队的边路突破能力,核心思路是将“边路突破”这一模糊概念量化为具体的、可统计的数据指标,然后通过数据可视化和统计检验进行对比。
下面给你一套完整的实战分析框架,包含数据模拟、指标计算、可视化和结论输出,你可以直接复制代码运行,然后替换成自己的数据。
第一步:定义“边路突破”的量化指标
在开始写代码前,先确定统计哪些字段,通常包含以下维度(以足球为例):
- 突破次数:在边路(左/右)1v1 或带球过人的成功次数。
- 成功率和被抢断率:效率的体现。
- 制造威胁:突破后形成的传中、射门、定位球或关键传球。
- 推进距离:从后场推进到前场禁区附近的距离。
第二步:Python 实战案例(以模拟数据为例)
导入库并生成模拟数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 设置中文显示(防止乱码)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 或者 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False
# 假设有A队和B队,每队有5名边路球员(左右边锋+边后卫)
# 每行代表一名球员在一场比赛中的数据
data = {
'球队': ['A队']*5 + ['B队']*5,
'球员': ['A左边锋', 'A左边卫', 'A右边锋', 'A右边卫', 'A轮换',
'B左边锋', 'B左边卫', 'B右边锋', 'B右边卫', 'B轮换'],
'边路': ['左', '左', '右', '右', '左', '左', '左', '右', '右', '右'],
'成功突破': [4, 2, 5, 1, 3, 6, 1, 4, 2, 2],
'尝试突破': [7, 5, 8, 3, 5, 9, 3, 7, 4, 5],
'传中次数': [2, 3, 4, 1, 2, 5, 1, 6, 2, 1],
'创造射门机会': [1, 0, 2, 0, 1, 3, 0, 2, 0, 1]
}
df = pd.DataFrame(data)
# 计算效率和贡献
df['成功率'] = df['成功突破'] / df['尝试突破']
df['制造威胁'] = df['传中次数'] + df['创造射门机会']
print(df[['球队', '球员', '边路', '成功突破', '尝试突破', '成功率', '制造威胁']])
核心对比分析(分组聚合)
# 按球队和边路分组,汇总数据
grouped = df.groupby(['球队', '边路']).agg({
'成功突破': 'sum',
'尝试突破': 'sum',
'传中次数': 'sum',
'创造射门机会': 'sum',
'球员': 'count'
}).rename(columns={'球员': '出场人次'})
# 计算整体的成功率
grouped['成功率'] = grouped['成功突破'] / grouped['尝试突破']
grouped['场均制造威胁'] = (grouped['传中次数'] + grouped['创造射门机会']) / grouped['出场人次']
print("\n--- 左右边路对比汇总 ---")
print(grouped)
第三步:数据可视化(一眼看出强弱)
左右边路雷达图对比
# 准备画雷达图的数据
# 指标:总突破次数、成功率、传中制造威胁
metrics = ['成功突破总数', '成功率', '场均制造威胁']
A_left = [7, grouped.loc[('A队','左'),'成功率'], 1.33] # 具体数值从grouped里取
B_left = [8, grouped.loc[('B队','左'),'成功率'], 2.00]
# 这里为了演示,手动提取数值
A_values = [
grouped.loc[('A队','左'), '成功突破'],
grouped.loc[('A队','左'), '成功率'],
grouped.loc[('A队','左'), '场均制造威胁']
]
B_values = [
grouped.loc[('B队','左'), '成功突破'],
grouped.loc[('B队','左'), '成功率'],
grouped.loc[('B队','左'), '场均制造威胁']
]
# 绘制雷达图
angles = np.linspace(0, 2 * np.pi, len(metrics), endpoint=False).tolist()
A_values += A_values[:1]
B_values += B_values[:1]
angles += angles[:1]
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))
ax.fill(angles, A_values, color='red', alpha=0.25, label='A队左路')
ax.fill(angles, B_values, color='blue', alpha=0.25, label='B队左路')
ax.set_xticks(angles[:-1])
ax.set_xticklabels(metrics)
ax.legend(loc='upper right')'左路突破能力对比')
plt.show()
散点图(突破次数 vs 成功率)
plt.figure(figsize=(10, 6))
sns.scatterplot(data=df, x='尝试突破', y='成功率', hue='球队', style='边路', s=150)'突破次数与成功率关系(气泡大小代表创造威胁)', fontsize=14)
plt.xlabel('尝试突破次数')
plt.ylabel('成功率')
# 添加球员标签
for i in range(len(df)):
plt.text(df['尝试突破'][i]+0.1, df['成功率'][i], df['球员'][i], fontsize=8)
plt.grid(alpha=0.3)
plt.show()
第四步:进阶统计检验(判断差异是否显著)
光看柱状图可能不够客观,可以用 scipy 的 T检验或曼-惠特尼U检验,判断“A队的边路突破成功率”是否显著高于“B队”。
from scipy import stats
# 提取A队和B队的所有边路球员数据
A_success = df[df['球队'] == 'A队']['成功率']
B_success = df[df['球队'] == 'B队']['成功率']
# 独立样本T检验(先检查方差齐性)
t_stat, p_value = stats.ttest_ind(A_success, B_success, equal_var=False) # Welch's t-test
print(f"T统计量: {t_stat:.3f}, P值: {p_value:.4f}")
if p_value < 0.05:
print("两队边路突破效率存在显著差异(P<0.05)")
else:
print("两队边路突破效率差异不显著(P>=0.05)")
第五步:针对真实数据的适配建议
如果你在自己的数据工程中需要处理真实比赛数据,可以参考以下代码片段处理:
# 假设你只有一个包含大量事件的CSV文件(每一行是一次触球或对抗)
# event_data.csv 包含 ['Team', 'Player', 'Zone', 'Outcome']
event_df = pd.read_csv('your_data.csv')
# 筛选边路区域(假设Zone列包含 'Left Wing' 或 'Right Wing')
left_wing = event_df[event_df['Zone'].str.contains('Left')]
right_wing = event_df[event_df['Zone'].str.contains('Right')]
# 结合事件类型('Take On' 表示过人)计算成功次数
def count_success(group):
return group[(group['Outcome'] == 'Success')].shape[0]
# 按球队统计
summary = event_df.groupby(['Team', 'Zone']).apply(
lambda x: pd.Series({
'突破尝试': x[x['Event'] == 'Take On'].shape[0],
'成功突破': x[(x['Event'] == 'Take On') & (x['Outcome'] == 'Success')].shape[0],
'完成传中': x[x['Event'] == 'Cross'].shape[0]
})
).reset_index()
怎么“看”结果?
- 看总量:谁尝试多、谁成功多(统计
sum)。 - 看效率:谁的成功率高(计算比例)。
- 看威胁:谁的突破能转化成射门/传球(加权得分)。
- 看均衡性:左右两边是否明显“瘸腿”(对比左右路数据)。
- 看显著性:用P值判断强弱是偶然还是实力差距。
如果你能提供具体的字段名(比如你的CSV里叫 cross 还是 key_pass),我可以帮你直接写一份适配你数据结构的完整分析脚本。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播