python案例统计头球争顶成功率如何?

wen python案例 2

本文目录导读:

python案例统计头球争顶成功率如何?

  1. 数据模拟
  2. 使用 Pandas 统计
  3. 按球队汇总
  4. 只用纯 Python(不用 Pandas)
  5. 可视化(Matplotlib 柱状图)
  6. 实际场景扩展
  7. 总结关键点

下面给你一个 Python 统计头球争顶成功率 的完整案例,包含:

  1. 数据模拟(模拟球员争顶数据)
  2. 统计逻辑(成功 / 总争顶)
  3. 输出结果(按球员、按球队)
  4. 可视化(可选)

数据模拟

假设你有如下数据(通常来自比赛事件流):

# 每条记录:球员, 球队, 是否成功(1=成功, 0=失败)
data = [
    ("哈兰德", "曼城", 1),
    ("哈兰德", "曼城", 1),
    ("哈兰德", "曼城", 0),
    ("哈兰德", "曼城", 1),
    ("哈兰德", "曼城", 0),
    ("姆巴佩", "皇马", 1),
    ("姆巴佩", "皇马", 0),
    ("姆巴佩", "皇马", 0),
    ("姆巴佩", "皇马", 1),
    ("凯恩", "拜仁", 1),
    ("凯恩", "拜仁", 1),
    ("凯恩", "拜仁", 0),
    ("凯恩", "拜仁", 1),
    ("凯恩", "拜仁", 1),
    ("凯恩", "拜仁", 0),
    ("C罗", "利雅得胜利", 1),
    ("C罗", "利雅得胜利", 0),
    ("C罗", "利雅得胜利", 1),
    ("C罗", "利雅得胜利", 1),
]

使用 Pandas 统计

import pandas as pd
df = pd.DataFrame(data, columns=["球员", "球队", "成功"])
# 按球员统计
player_stats = df.groupby("球员").agg(
    总争顶=("成功", "count"),
    成功次数=("成功", "sum")
).reset_index()
player_stats["成功率(%)"] = (player_stats["成功次数"] / player_stats["总争顶"] * 100).round(2)
print("按球员统计:")
print(player_stats.sort_values("成功率(%)", ascending=False))

输出示例:

   球员  总争顶  成功次数  成功率(%)
0  C罗     4     3     75.0
1  哈兰德   5     3     60.0
2  凯恩     6     4     66.67
3  姆巴佩   4     2     50.0

按球队汇总

team_stats = df.groupby("球队").agg(
    总争顶=("成功", "count"),
    成功次数=("成功", "sum")
).reset_index()
team_stats["成功率(%)"] = (team_stats["成功次数"] / team_stats["总争顶"] * 100).round(2)
print("\n按球队统计:")
print(team_stats)

只用纯 Python(不用 Pandas)

from collections import defaultdict
player_data = defaultdict(lambda: [0, 0])  # [成功, 总]
for name, team, success in data:
    player_data[name][0] += success
    player_data[name][1] += 1
print("球员头球争顶成功率:")
print(f"{'球员':<10}{'成功':<6}{'总争顶':<8}{'成功率%':<10}")
for name, (succ, total) in sorted(player_data.items(), key=lambda x: x[1][0]/x[1][1] if x[1][1] else 0, reverse=True):
    rate = succ / total * 100 if total else 0
    print(f"{name:<10}{succ:<6}{total:<8}{rate:<10.2f}")

可视化(Matplotlib 柱状图)

import matplotlib.pyplot as plt
# 使用上面的 player_stats
plt.figure(figsize=(8, 5))
plt.bar(player_stats["球员"], player_stats["成功率(%)"], color="skyblue")
plt.ylabel("成功率 (%)")"球员头球争顶成功率")
plt.ylim(0, 100)
for i, v in enumerate(player_stats["成功率(%)"]):
    plt.text(i, v + 1, str(v), ha="center")
plt.show()

实际场景扩展

如果数据来自 CSV 文件:

df = pd.read_csv("head_duel_data.csv")
# 假设列名为: player, team, success (0/1)

如果数据有比赛 ID,可以按比赛筛选:

df[df["match_id"] == 2024001]

总结关键点

统计项 方法
总争顶次数 count()
成功次数 sum()
成功率 成功 / 总 × 100
按球员分组 groupby("球员")
按球队汇总 groupby("球队")
可视化 matplotlib 柱状图

如果你有实际数据(CSV/Excel/JSON),可以把文件结构发我,我帮你写出完整读取 + 统计 + 导出的脚本。

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