统计传球成功率哪队更高?实用脚本
下面给你一个可直接运行的 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 直接读取 的版本吗?