这个实用脚本显示人盯人防守成功率?

wen 实用脚本 2

本文目录导读:

这个实用脚本显示人盯人防守成功率?

  1. 方案一:Python 命令行脚本(最实用,可扩展)
  2. 方案二:Excel 表格公式版(适合不懂代码的教练)
  3. 方案三:命令行一键统计(极简版)
  4. 如何定义“成功”?—— 这是核心
  5. 如何使用并扩展?

要制作一个“人盯人防守成功率”的实用脚本,首先需要明确数据来源判定逻辑

在真实篮球/足球比赛中,“人盯人防守成功”通常定义为:防守者在场上对位期间,进攻者未得分、未助攻、未造成犯规,且防守者完成了抢断、盖帽或迫使对方失误/投篮不中

由于无法直接接入实时比赛数据(如NBA API),下面提供一个基于Python的可模拟数据脚本,它适用于教练分析赛后录像数据游戏数据复盘

你可以输入防守者、进攻者的每次交锋结果,脚本会自动计算成功率。

Python 命令行脚本(最实用,可扩展)

这个脚本会创建一个数据结构来记录每次单防回合,并统计成功率、场均失分等关键指标。

# -*- coding: utf-8 -*-
"""
人盯人防守成功率分析脚本
功能:记录对位回合,计算防守效率指标
适用于:篮球/足球个人防守数据复盘
"""
import pandas as pd
from datetime import datetime
class DefenderStats:
    def __init__(self, defender_name):
        self.defender = defender_name
        self.defensive_actions = []  # 存储每个防守回合
    def add_action(self, opponent, outcome, points_allowed=0, is_shot_attempt=True):
        """
        记录一个防守对位回合
        参数:
        opponent: 进攻球员名称
        outcome: 防守结果 (关键判定)
              'STOP' -> 防守成功 (抢断、盖帽、迫使失误、投篮打铁+防守篮板)
              'SCORE' -> 防守失败 (对手得分)
              'FOUL' -> 防守失败 (犯规,且对方罚球得分)
              'ASSIST' -> 防守失败 (对手助攻队友得分,且该防守者是主要对位人)
        points_allowed: 本次防守失分 (0, 2, 3, 1)
        is_shot_attempt: 是否是一次投篮/上篮对抗
        """
        action = {
            'time': datetime.now().strftime("%H:%M:%S"),
            'opponent': opponent,
            'outcome': outcome,
            'points_allowed': points_allowed,
            'is_shot_attempt': is_shot_attempt
        }
        self.defensive_actions.append(action)
    def calculate_success_rate(self):
        """
        计算防守成功率
        公式: 成功回合数 / 总防守回合数
        """
        if not self.defensive_actions:
            return 0.0, 0
        total_actions = len(self.defensive_actions)
        # 防守成功判定:仅当 outcome 为 'STOP'
        successful_stops = sum(1 for a in self.defensive_actions if a['outcome'] == 'STOP')
        # 额外指标:被投篮命中率(防投篮时)
        shot_actions = [a for a in self.defensive_actions if a['is_shot_attempt']]
        if shot_actions:
            fg_made = sum(1 for a in shot_actions if a['outcome'] == 'SCORE')
            fg_pct = fg_made / len(shot_actions)
        else:
            fg_pct = 0.0
        # 每次防守失分
        total_points = sum(a['points_allowed'] for a in self.defensive_actions)
        success_rate = (successful_stops / total_actions) * 100
        return {
            'success_rate': round(success_rate, 1),
            'total_possessions': total_actions,
            'stops': successful_stops,
            'opp_fg_pct': round(fg_pct, 3),
            'points_allowed_per_poss': round(total_points / total_actions, 2)
        }
    def print_report(self):
        stats = self.calculate_success_rate()
        print(f"\n=== 防守报告: {self.defender} ===")
        print(f"总对位回合: {stats['total_possessions']}")
        print(f"防守成功次数: {stats['stops']}")
        print(f"人盯人防守成功率: {stats['success_rate']}%")
        print(f"对手投篮命中率: {stats['opp_fg_pct']:.1%}")
        print(f"每回合失分: {stats['points_allowed_per_poss']}")
        print("-" * 30)
# ========== 使用示例 (模拟一场比赛数据) ==========
if __name__ == "__main__":
    # 创建防守球员 ( 卡鲁索)
    caruso = DefenderStats("Caruso")
    # 模拟进攻回合数据: (对手, 结果, 失分, 是否投篮)
    # 'STOP' = 防守成功 | 'SCORE' = 对手命中 | 'FOUL' = 犯规
    data = [
        ("Mitchell", 'STOP', 0, True),      # 成功防下投篮
        ("Mitchell", 'SCORE', 2, True),     # 被投进2分
        ("Sexton", 'STOP', 0, True),        # 抢断
        ("Markkanen", 'FOUL', 2, True),     # 犯规送罚球(算失分)
        ("Mitchell", 'STOP', 0, True),      # 迫使打铁
        ("Sexton", 'SCORE', 3, True),       # 被投进3分
        ("Markkanen", 'STOP', 0, False),    # 防下无球跑位
    ]
    for opp, out, pts, shot in data:
        caruso.add_action(opp, out, pts, shot)
    # 输出报告
    caruso.print_report()

Excel 表格公式版(适合不懂代码的教练)

如果你只需要一个手动录入表格,可以用 Excel 或 腾讯文档:

  1. 建立列回合编号 | 防守人 | 进攻人 | 结果(下拉选择:成功/失败/犯规) | 失分 | 投篮否
  2. 计算公式
    • 成功率 = COUNTIF(D:D,"成功") / COUNTA(D:D)
    • 限制对手命中率 = SUMPRODUCT((E:E>0)*1) / SUMPRODUCT((F:F="是")*1)

命令行一键统计(极简版)

如果你在录像分析时使用 obs录屏软件,只想快速打点,可以用这个精简版:

# 极简:在终端直接输入结果,输入 q 退出
stop_count = 0
fail_count = 0
while True:
    result = input("输入结果 (s=成功防下, f=被得分, q=退出): ").strip().lower()
    if result == 'q':
        break
    elif result == 's':
        stop_count += 1
    elif result == 'f':
        fail_count += 1
    else:
        print("无效输入,请输入 s/f")
total = stop_count + fail_count
if total > 0:
    rate = (stop_count / total) * 100
    print(f"\n终结统计: 总回合 {total}, 成功 {stop_count}, 失败 {fail_count}")
    print(f"人盯人防守成功率: {rate:.1f}%")
else:
    print("无数据")

如何定义“成功”?—— 这是核心

在脚本中,STOP(成功)是根据现代篮球防守数据(Defensive Dashboard)定义的,它包含以下四种情况之一:

  1. 直接抢断盖帽,且球权发生转换。
  2. 迫使对手投篮不中,并且防守方控制住篮板。
  3. 迫使对手失误(进攻犯规、走步、传球出界),但过程中防守者没有犯规
  4. 对手在严密防守下投篮不中(无论是否投篮,只要没进且没造成罚球,就算成功)。

注意:如果犯规了,即便对手投篮不进,也算作防守失败,因为给了对方罚球机会。

如何使用并扩展?

  1. 替换数据:将 data 数组内的模拟数据替换为你实际比赛中的对位记录。
  2. 增强维度:可以添加 position(防守位置)、pick_and_roll(挡拆)等字段,分析不同场景下的防守效率。
  3. 可视化:可以用 matplotlib 画出雷达图,对比不同球员的防守成功率。

如果你有具体的数据文件(如 CSV 或数据库导出),把文件格式贴出来,我可以帮你把脚本改成直接读取文件的版本。

上一篇实用脚本统计区域防守漏洞出现几次?

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

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