python案例统计反击次数哪队更高效?

wen python案例 2

本文目录导读:

python案例统计反击次数哪队更高效?

  1. 问题理解
  2. 完整案例代码
  3. 输出结果
  4. 多维度高效性分析
  5. 关键指标说明
  6. 扩展建议

我来帮你分析这个Python案例:统计反击次数,看哪队更高效。

问题理解

"反击次数"通常指在体育比赛(如足球、篮球)中,一方由防守转为进攻的次数,我们需要统计两队各自的反击次数,并比较哪队更高效。

完整案例代码

import pandas as pd
from collections import defaultdict
# ========== 1. 模拟比赛事件数据 ==========
# 假设数据:每个事件包含 时间、队伍、事件类型、是否形成射门、是否进球
match_events = [
    # (时间, 队伍, 事件类型, 是否射门, 是否进球)
    (5,  "A队", "抢断", True,  False),
    (8,  "A队", "反击", True,  True),    # A队反击进球
    (15, "B队", "抢断", True,  False),
    (18, "B队", "反击", True,  False),   # B队反击未进球
    (25, "A队", "抢断", True,  False),
    (27, "A队", "反击", True,  False),
    (35, "B队", "抢断", True,  False),
    (38, "B队", "反击", True,  True),    # B队反击进球
    (45, "A队", "抢断", True,  False),
    (47, "A队", "反击", False, False),   # A队反击失败
    (55, "B队", "抢断", True,  False),
    (58, "B队", "反击", True,  False),
    (65, "A队", "抢断", True,  False),
    (67, "A队", "反击", True,  True),    # A队反击进球
    (75, "B队", "抢断", True,  False),
    (78, "B队", "反击", True,  False),
    (85, "A队", "抢断", True,  False),
    (87, "A队", "反击", True,  False),
]
df = pd.DataFrame(match_events, 
                  columns=["时间", "队伍", "事件类型", "是否射门", "是否进球"])
# ========== 2. 只保留反击事件 ==========
counter_attacks = df[df["事件类型"] == "反击"].copy()
print("=== 反击事件明细 ===")
print(counter_attacks)
print()
# ========== 3. 统计每队的反击数据 ==========
def analyze_counter_attacks(data):
    stats = {}
    for team in data["队伍"].unique():
        team_data = data[data["队伍"] == team]
        total = len(team_data)
        shots = team_data["是否射门"].sum()
        goals = team_data["是否进球"].sum()
        stats[team] = {
            "反击次数": total,
            "形成射门": shots,
            "进球数": goals,
            "射门率": f"{shots/total*100:.1f}%",
            "进球率": f"{goals/total*100:.1f}%",
            "反击效率": round(goals / total * 100, 1) if total > 0 else 0
        }
    return stats
result = analyze_counter_attacks(counter_attacks)
print("=== 各队反击统计 ===")
for team, s in result.items():
    print(f"\n{team}:")
    for k, v in s.items():
        print(f"  {k}: {v}")
# ========== 4. 对比哪队更高效 ==========
print("\n=== 效率对比 ===")
teams = list(result.keys())
if result[teams[0]]["反击效率"] > result[teams[1]]["反击效率"]:
    print(f"🏆 {teams[0]} 反击效率更高!")
elif result[teams[0]]["反击效率"] < result[teams[1]]["反击效率"]:
    print(f"🏆 {teams[1]} 反击效率更高!")
else:
    print("两队反击效率相同!")

输出结果

=== 反击事件明细 ===
    时间  队伍 事件类型  是否射门  是否进球
1    8  A队   反击   True   True
3   18  B队   反击   True  False
5   27  A队   反击   True  False
7   38  B队   反击   True   True
9   47  A队   反击  False  False
11  58  B队   反击   True  False
13  67  A队   反击   True   True
15  78  B队   反击   True  False
17  87  A队   反击   True  False
=== 各队反击统计 ===
A队:
  反击次数: 5
  形成射门: 4
  进球数: 2
  射门率: 80.0%
  进球率: 40.0%
  反击效率: 40.0
B队:
  反击次数: 4
  形成射门: 4
  进球数: 1
  射门率: 100.0%
  进球率: 25.0%
  反击效率: 25.0
=== 效率对比 ===
🏆 A队 反击效率更高!

多维度高效性分析

效率不能只看进球率,建议从多角度评估:

def comprehensive_efficiency(stats):
    """综合效率评分"""
    scores = {}
    for team, s in stats.items():
        total = s["反击次数"]
        shots = s["形成射门"]
        goals = s["进球数"]
        # 权重:射门率40% + 进球率60%
        shot_rate = shots / total if total else 0
        goal_rate = goals / total if total else 0
        score = shot_rate * 0.4 + goal_rate * 0.6
        scores[team] = {
            "射门率": f"{shot_rate*100:.1f}%",
            "进球率": f"{goal_rate*100:.1f}%",
            "综合得分": round(score, 3)
        }
    return scores
print("\n=== 综合效率评分 ===")
for team, s in comprehensive_efficiency(result).items():
    print(f"{team}: {s}")

关键指标说明

指标 含义 说明
反击次数 总反击发起数 反映反击频率
射门率 形成射门/反击次数 反映推进质量
进球率 进球/反击次数 反映终结能力
综合效率 加权得分 平衡射门和进球

在本案例中:

  • A队:反击5次,进2球,效率 40%更高效
  • B队:反击4次,进1球,效率 25%
  • 虽然B队射门率100%,但转化率低,综合来看 A队反击更高效 🏆

扩展建议

  1. 加入时间维度:分析不同时间段的效率
  2. 反击耗时:从抢断到射门的时间,越短越高效
  3. 对手强度:考虑对阵强弱队的差异
  4. 可视化:用 matplotlib 绘制对比柱状图

需要我补充可视化图表真实足球数据接口的版本吗?

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