python案例统计挑球过人次数多不多?

wen python案例 2

篮球/足球"挑球过人"次数统计案例

我来给你一个完整的Python案例,统计比赛数据中"挑球过人"的次数并分析。

python案例统计挑球过人次数多不多?

场景说明

假设我们有一份比赛事件日志(如足球比赛),每条记录包含球员、动作类型等,我们要统计挑球过人(chip/lob dribble)的次数,并判断"多不多"。

完整代码

import pandas as pd
from collections import Counter
# 1. 模拟一份比赛事件数据(也可以用 pd.read_csv 读取真实数据)
data = [
    {"player": "梅西",   "action": "挑球过人"},
    {"player": "梅西",   "action": "传球"},
    {"player": "梅西",   "action": "挑球过人"},
    {"player": "内马尔", "action": "挑球过人"},
    {"player": "内马尔", "action": "射门"},
    {"player": "姆巴佩", "action": "传球"},
    {"player": "姆巴佩", "action": "挑球过人"},
    {"player": "姆巴佩", "action": "挑球过人"},
    {"player": "姆巴佩", "action": "挑球过人"},
    {"player": "迪马利亚", "action": "抢断"},
]
df = pd.DataFrame(data)
# 2. 定义"挑球过人"的识别关键词
CHIP_KEYWORDS = ["挑球过人", "挑球", "chip", "lob"]
def is_chip_dribble(action: str) -> bool:
    return any(k in action.lower() for k in CHIP_KEYWORDS)
df["is_chip"] = df["action"].apply(is_chip_dribble)
# 3. 总体统计
total_actions = len(df)
chip_count = df["is_chip"].sum()
chip_ratio = chip_count / total_actions
print(f"总事件数:{total_actions}")
print(f"挑球过人次数:{chip_count}")
print(f"挑球过人占比:{chip_ratio:.2%}")
# 4. 按球员统计
player_chip = (
    df[df["is_chip"]]
    .groupby("player")
    .size()
    .sort_values(ascending=False)
)
print("\n各球员挑球过人次数:")
print(player_chip)
# 5. 判断"多不多"——设定阈值
THRESHOLD_COUNT = 3       # 单个球员超过3次算多
THRESHOLD_RATIO = 0.20    # 整体占比超过20%算多
print("\n--- 判定结果 ---")
if chip_ratio >= THRESHOLD_RATIO:
    print(f"整体挑球过人偏多(占比 {chip_ratio:.2%} ≥ {THRESHOLD_RATIO:.0%})")
else:
    print(f"整体挑球过人偏少(占比 {chip_ratio:.2%} < {THRESHOLD_RATIO:.0%})")
top_players = player_chip[player_chip >= THRESHOLD_COUNT]
if not top_players.empty:
    print(f"挑球过人次数较多的球员(≥{THRESHOLD_COUNT}次):")
    for p, c in top_players.items():
        print(f"  - {p}: {c} 次")
else:
    print("没有球员挑球过人次数特别突出。")

运行结果

总事件数:10
挑球过人次数:6
挑球过人占比:60.00%
各球员挑球过人次数:
player
姆巴佩     3
梅西      2
内马尔     1
--- 判定结果 ---
整体挑球过人偏多(占比 60.00% ≥ 20%)
挑球过人次数较多的球员(≥3次):
  - 姆巴佩: 3 次

关键设计点

要点 说明
关键词匹配 用 any(k in action for k in keywords) 兼容多种写法(中英文、简称)
占比判断 只看次数不够,用 chip_count / total 判断"密度"更合理
分球员统计 groupby + size 快速得出谁最突出
阈值判定 设两个阈值(绝对次数 + 相对占比),避免"次数多但总事件也多"的误判
可扩展 换成 pd.read_csv("events.csv") 即可接入真实数据

进阶:如果想更严谨

  1. 时间窗口:按半场/每15分钟统计,看是否集中爆发
  2. 成功率:如果数据里有"成功/失败"字段,统计挑球过人成功率
  3. 对比基准:跟联赛平均值比,而不是拍脑袋定阈值
  4. 可视化:
import matplotlib.pyplot as plt
player_chip.plot(kind="bar", title="各球员挑球过人次数")
plt.ylabel("次数")
plt.tight_layout()
plt.show()

需要我把它改成足球专项(带成功率) 还是篮球变向/背后运球的统计版本?告诉我你的数据字段,我可以直接适配。

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