python案例统计地面对抗谁胜出?

wen python案例 3

地面(地面对抗)胜出统计案例

下面是一个完整的 Python 案例,用于统计足球比赛中地面对抗(Ground Duels)的胜负情况,可适用于球员数据或比赛数据分析场景。

python案例统计地面对抗谁胜出?

场景说明

地面对抗数据通常记录为:

  • Won(赢得对抗次数)
  • Lost(失去对抗次数)

胜出率 = Won / (Won + Lost) × 100%

完整代码案例

import pandas as pd
# ============ 1. 构造示例数据 ============
# 模拟一场比赛中各球员的地面对抗数据
data = {
    "球员": ["梅西", "姆巴佩", "内马尔", "维拉蒂", "马尔基尼奥斯", "阿什拉夫"],
    "地面对抗次数": [12, 15, 10, 18, 9, 14],
    "赢得对抗": [8, 10, 5, 13, 6, 7]
}
df = pd.DataFrame(data)
# ============ 2. 计算胜出率和失去次数 ============
df["失去对抗"] = df["地面对抗次数"] - df["赢得对抗"]
df["胜出率(%)"] = (df["赢得对抗"] / df["地面对抗次数"] * 100).round(2)
# ============ 3. 排序:谁胜出最多 ============
# 按胜出率排序
df_sorted = df.sort_values(by="胜出率(%)", ascending=False).reset_index(drop=True)
df_sorted["排名"] = df_sorted.index + 1
print("=== 地面对抗胜出统计(按胜出率排名)===")
print(df_sorted[["排名", "球员", "地面对抗次数", "赢得对抗", "胜出率(%)"]])
# ============ 4. 找出胜出冠军 ============
winner = df_sorted.iloc[0]
print(f"\n🏆 地面对抗胜出率最高:{winner['球员']},"
      f"胜出率 {winner['胜出率(%)']}%,"
      f"赢得 {winner['赢得对抗']} 次对抗")
# ============ 5. 找出赢得对抗次数最多的球员 ============
top_won = df.loc[df["赢得对抗"].idxmax()]
print(f"💪 赢得对抗次数最多:{top_won['球员']},共 {top_won['赢得对抗']} 次")
# ============ 6. 评选"对抗王":胜出率 + 次数综合 ============
# 综合评分:胜出率 × 赢得次数(避免只打1次就100%的极端情况)
df["综合评分"] = df["胜出率(%)"] * df["赢得对抗"]
king = df.loc[df["综合评分"].idxmax()]
print(f"👑 综合'对抗王':{king['球员']}(综合评分 {king['综合评分']:.1f})")

运行结果示例

=== 地面对抗胜出统计(按胜出率排名)===
   排名      球员  地面对抗次数  赢得对抗  胜出率(%)
0   1      维拉蒂       18      13     72.22
1   2      梅西        12       8     66.67
2   3     姆巴佩        15      10     66.67
3   4     马尔基尼奥斯     9       6     66.67
4   5     阿什拉夫       14       7     50.00
5   6     内马尔        10       5     50.00
🏆 地面对抗胜出率最高:维拉蒂,胜出率 72.22%,赢得 13 次对抗
💪 赢得对抗次数最多:维拉蒂,共 13 次
👑 综合'对抗王':维拉蒂(综合评分 938.9)

关键点说明

指标 意义 注意事项
胜出率 单次对抗成功率 次数少时易失真(如1/1=100%)
赢得对抗次数 绝对贡献 更能反映实际作用
综合评分 平衡两者 胜出率 × 赢得次数 或加权求和

进阶:团队对抗胜出对比

# 如果有多队数据,可以汇总对比
teams = {
    "球队A": {"won": 52, "total": 80},
    "球队B": {"won": 45, "total": 78},
    "球队C": {"won": 60, "total": 85},
}
df_team = pd.DataFrame([
    {"球队": k, "赢得": v["won"], "总数": v["total"],
     "胜出率(%)": round(v["won"] / v["total"] * 100, 2)}
    for k, v in teams.items()
]).sort_values("胜出率(%)", ascending=False)
print(df_team)
print(f"\n地面控制最强球队:{df_team.iloc[0]['球队']}")

建议

  1. 数据来源:可从 Opta、SofaScore、FIFA 官方 API 或 StatsBomb 获取真实数据。
  2. 加权:重要区域的对抗(如中场、禁区)可加重权重。
  3. 结合其他指标:地面对抗胜出 ≠ 场上贡献,建议结合传球成功率、抢断、拦截等综合评估。

如果你有具体的数据文件(CSV/Excel)或想统计的赛事/球员范围,可以告诉我,我可以帮你改成适配你数据的版本。

上一篇python案例对这场保级大战有何看法?

下一篇当前分类已是最新一篇

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