实用脚本统计传球成功率哪队更高?

wen 实用脚本 2

统计传球成功率哪队更高?实用脚本

下面给你一个可直接运行的 Python 脚本,用于统计足球比赛中两队的传球成功率,支持 CSV 数据输入,输出对比结果。

实用脚本统计传球成功率哪队更高?

📊 数据格式要求

准备一个 passes.csv 文件,格式如下:

team,player,pass_type,success
A队,张三,short,1
A队,张三,long,0
A队,李四,short,1
B队,王五,short,1
B队,王五,long,1
B队,赵六,short,0
  • team:球队名称
  • player:球员名(可选)
  • pass_type:传球类型(short/long 等,可选)
  • success:1=成功,0=失败

🐍 完整脚本

import pandas as pd
from collections import defaultdict
# ========== 1. 读取数据 ==========
df = pd.read_csv("passes.csv")
# 数据清洗
df["success"] = df["success"].astype(int)
df = df[df["success"].isin([0, 1])]  # 只保留有效记录
# ========== 2. 按球队统计总分 ==========
team_stats = df.groupby("team")["success"].agg(
    total_passes="count",
    successful_passes="sum"
).reset_index()
team_stats["failed_passes"] = team_stats["total_passes"] - team_stats["successful_passes"]
team_stats["success_rate"] = (team_stats["successful_passes"] / team_stats["total_passes"] * 100).round(2)
# ========== 3. 按球队+传球类型统计 ==========
type_stats = df.groupby(["team", "pass_type"])["success"].agg(
    total="count", success="sum"
).reset_index()
type_stats["rate"] = (type_stats["success"] / type_stats["total"] * 100).round(2)
# ========== 4. 输出结果 ==========
print("=" * 55)
print("📊 各队传球成功率对比")
print("=" * 55)
print(team_stats.to_string(index=False))
# 排名
team_stats = team_stats.sort_values("success_rate", ascending=False)
winner = team_stats.iloc[0]
print("\n" + "=" * 55)
print(f"🏆 传球成功率最高:{winner['team']}  ({winner['success_rate']}%)")
print("=" * 55)
# 分类型对比
print("\n📋 分传球类型成功率:")
print(type_stats.pivot(index="team", columns="pass_type", values="rate").fillna("-").to_string())
# 差距分析
if len(team_stats) >= 2:
    diff = team_stats.iloc[0]["success_rate"] - team_stats.iloc[1]["success_rate"]
    print(f"\n📈 领先差距:{diff:.2f} 个百分点")

🖥️ 输出示例

=======================================================
📊 各队传球成功率对比
=======================================================
team  total_passes  successful_passes  failed_passes  success_rate
 A队            30                 24              6         80.00
 B队            28                 18             10         64.29
=======================================================
🏆 传球成功率最高:A队  (80.0%)
=======================================================
📋 分传球类型成功率:
pass_type  long  short
team                   
A队        66.67   87.5
B队        57.14   71.43
📈 领先差距:15.71 个百分点

⚡ 进阶:无数据也能测(模拟演示版)

如果你暂时没有数据,可以直接跑这个自包含版本:

import random
from collections import defaultdict
# 模拟数据
data = {
    "A队": [random.choice([0, 1]) for _ in range(200)],
    "B队": [random.choice([0, 1, 1]) for _ in range(200)],  # B队略强
}
stats = {}
for team, passes in data.items():
    total = len(passes)
    ok = sum(passes)
    stats[team] = {"总数": total, "成功": ok, "成功率": ok / total * 100}
print(f"{'球队':<6}{'总传球':<8}{'成功':<6}{'成功率':<8}")
for team, s in sorted(stats.items(), key=lambda x: -x[1]["成功率"]):
    print(f"{team:<6}{s['总数']:<9}{s['成功']:<7}{s['成功率']:.2f}%")
best = max(stats, key=lambda t: stats[t]["成功率"])
print(f"\n🏆 传球成功率更高:{best}")

📌 使用建议

场景 数据来源 备注
业余比赛 手动记录 CSV 每脚传球一行
职业比赛 Opta/StatsBomb API 需转换字段名
快速测试 模拟版 直接运行

需要我帮你改造成 从 StatsBomb 开放数据自动拉取 或 Excel 直接读取 的版本吗?

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