本文目录导读:

- 场景 1:手头已有两队汇总数据(最直接)
- 场景 2:用一个数组(Python)直接改数据
- 场景 3:读取 CSV 文件(处理真实数据)
- 场景 4:只用一行 Shell(grep+awk 实时提取)
- 备注:真实场景判断的隐藏点
要统计“哪队传球成功率更高”,通常分为宏观层面(全队总传球+成功传球)和微观层面(首发/主力球员平均),以下是几个常用且可直接运行的脚本模板,按使用场景分类。
场景 1:手头已有两队汇总数据(最直接)
如果已从网站(如懂球帝、SofaScore)查到两队的总传球数和成功数,用一行命令即可对比:
#!/bin/bash
# team_stats.sh
# 格式:队名 总传球 成功传球
read -p "输入主队数据 (格式: 队名 总传球 成功): " team1
read -p "输入客队数据 (格式: 队名 总传球 成功): " team2
# 使用 awk 直接计算并比较(防止浮点 shell 运算)
echo "$team1
$team2" | awk '{
rate = $3 / $2 * 100
if (NR==1) {t1=$1; r1=rate; total1=$2; comp1=$3}
else {t2=$1; r2=rate; total2=$2; comp2=$3}
}
END {
printf "\n=== 传球成功率对比 ===\n"
printf "%s: %d / %d = %.1f%%\n", t1, comp1, total1, r1
printf "%s: %d / %d = %.1f%%\n", t2, comp2, total2, r2
if (r1 > r2) printf "\n>>> 主队 %s 传球成功率更高\n", t1
else if (r2 > r1) printf "\n>>> 客队 %s 传球成功率更高\n", t2
else printf "\n>>> 双方传球成功率持平\n"
}'
运行示例:
输入主队数据 (格式: 队名 总传球 成功): 阿森纳 520 470 输入客队数据 (格式: 队名 总传球 成功): 切尔西 380 330
场景 2:用一个数组(Python)直接改数据
如果你有一份结构化的小样本数据(如两队首发名单及个人传球数),用 Python 最清晰:
# passing_rates.py
# 数据示例: 每个球员 [队名, 姓名, 传球总数, 成功传球]
players_data = [
["Team_A", "门将", 30, 25],
["Team_A", "后卫1", 45, 40],
["Team_A", "中场1", 60, 52],
["Team_A", "前锋1", 20, 15],
["Team_B", "门将", 25, 20],
["Team_B", "后卫1", 50, 45],
["Team_B", "中场1", 55, 50],
["Team_B", "前锋1", 15, 10],
]
# 按球队汇总
team_stats = {}
for team, name, attempts, completed in players_data:
if team not in team_stats:
team_stats[team] = {"attempts": 0, "completed": 0}
team_stats[team]["attempts"] += attempts
team_stats[team]["completed"] += completed
# 输出详细结果
print("队名 总传球 成功传球 成功率")
results = {}
for team, stats in team_stats.items():
rate = stats["completed"] / stats["attempts"] * 100
results[team] = rate
print(f"{team:<10} {stats['attempts']:<6} {stats['completed']:<6} {rate:.1f}%")
# 比较判断哪队高
print("\n结论:", "Team_A 更高" if results["Team_A"] > results["Team_B"]
else ("Team_B 更高" if results["Team_B"] > results["Team_A"] else "两队相同"))
场景 3:读取 CSV 文件(处理真实数据)
如果比赛数据放在 CSV 表格中(如 passers.csv),统计更自动化:
import csv
def compare_passing_success(csv_filename):
team_totals = {}
with open(csv_filename, mode='r', encoding='utf-8') as file:
reader = csv.DictReader(file) # 假设列名为 team, attempts, completed
for row in reader:
team = row['team']
att = int(row['attempts'])
comp = int(row['completed'])
if team not in team_totals:
team_totals[team] = [0, 0]
team_totals[team][0] += att
team_totals[team][1] += comp
for team, (att, comp) in team_totals.items():
rate = (comp / att) * 100 if att else 0
team_totals[team].append(rate)
print(f"{team}: {comp}/{att} = {rate:.2f}%")
# 找出最高
max_team = max(team_totals.keys(), key=lambda x: team_totals[x][2])
print(f"\n>>> {max_team} 的传球成功率最高")
# 假如 CSV 如下
# team,attempts,completed
# Arsenal,500,450
# Chelsea,400,360
# compare_passing_success('passer_data.csv')
场景 4:只用一行 Shell(grep+awk 实时提取)
如果你从文本文件中抓取(如球员详细跑位表):
# 假设文本某行格式为: 主队:传球400成功350;客队:传球330成功300
echo "主队:传球400成功350;客队:传球330成功300" | awk -F'[:;]' '{
for(i=1;i<=NF;i++){
if($i ~ /传球/){
split($i, a, /传球|成功/);
team_name = (a[1]=="主队" ? "主队" : "客队");
att = a[2]; comp = a[3];
rate = comp/att*100;
print team_name, "传球成功率 = " rate "%"
}
}
}'
备注:真实场景判断的隐藏点
- 只统计进攻的传球:通常看比赛报告“准确传球”是指全场总体,包含后场倒脚,若两队风格差异巨大(A队只在后场倒脚,B队大量向前传),单纯成功率不能说明优劣,但计算方式一样。
- 权重处理:如果对比首发主力每人权重一致,脚本合适,如果中后场球员传球基数极大,会导致数据失真——可以加权重因子
role_weight(如门将权重0.5)。 - 阈值设置:为了避免1次传球全成功从而拉高胜率,脚本中最好加
if attempts >= 50的条件才参与统计,这是足球分析界默认的基线。
如需直接对 ChatGPT 里引用的具体文本数据 计算(例如你提供的文本),直接把那段比赛统计贴出来,我可以修改脚本中的数组或者直接用 awk 帮你跑出结果。