实用脚本统计关门防守成功几次?

wen 实用脚本 7

本文目录导读:

实用脚本统计关门防守成功几次?

  1. 方案一:基于“文本日志”的简易统计(使用 Python)
  2. 方案二:基于“结构化表格数据”(使用 Python + Pandas)
  3. 方案三:数据库 SQL 统计(适用于 MySql / PostgreSQL)
  4. 温馨提示:如何定义“成功”?

要统计“关门防守”成功次数,首先需要明确“关门防守”在数据上的定义,在篮球或足球统计中,通常指防守方在对手进行突破或切入时,两名防守球员同时收缩夹击,迫使对手失误、投篮不中或传球失误

由于你没有提供具体的数据格式(如数据库表、CSV文件或比赛日志),我为你编写了三种最实用的脚本方案,覆盖了最常见的统计场景,你可以根据自己的数据情况选择使用。


基于“文本日志”的简易统计(使用 Python)

适用场景:你的数据是比赛文字直播或人工记录的行文本,

12:30 对手突破,A球员和B球员关门防守,对手失误
12:45 对手突破,防守球员未能关门,对手上篮得分
13:00 对手突破,C球员和D球员关门防守,对手投篮不中

脚本逻辑:通过关键词匹配(如“关门防守”+“失误”/“不中”/“抢断”)来计算成功次数。

import re
def count_closing_defense_success(file_path):
    """
    统计文本日志中关门防守成功的次数。
    判定标准:日志行中包含“关门”且包含(“失误”或“不中”或“抢断”或“封盖”)。
    """
    success_keywords = ['失误', '不中', '抢断', '封盖', '24秒违例']
    success_count = 0
    total_closing = 0
    with open(file_path, 'r', encoding='utf-8') as f:
        for line in f:
            if '关门' in line:
                total_closing += 1
                # 检查是否成功
                if any(keyword in line for keyword in success_keywords):
                    success_count += 1
                    print(f"[成功] {line.strip()}")
                else:
                    print(f"[失败/未定] {line.strip()}")
    print(f"\n总计关门防守次数: {total_closing}")
    print(f"关门防守成功次数: {success_count}")
    print(f"成功率: {success_count/total_closing:.1%}" if total_closing > 0 else "无数据")
    return success_count
# 使用方法
if __name__ == "__main__":
    # 假设你的日志文件叫 game_log.txt
    count_closing_defense_success('game_log.txt')

基于“结构化表格数据”(使用 Python + Pandas)

适用场景:你的数据是 Excel 或 CSV,每一行代表一次防守回合,且有具体的防守类型防守结果列。

假设数据格式(CSV示例)

时间 防守类型 防守人1 防守人2 防守结果
12:30 关门 A B 对手失误
12:45 包夹 C D 对手得分
13:00 关门 E F 投篮不中

脚本逻辑:筛选 防守类型 为“关门”,且 防守结果 属于成功结果的条目。

import pandas as pd
def count_success_from_csv(csv_path):
    # 读取数据
    df = pd.read_csv(csv_path, encoding='utf-8')
    # 筛选出所有关门防守的记录
    closing_df = df[df['防守类型'] == '关门']
    # 定义成功的结果类型(根据你的实际字段值调整)
    success_results = ['对手失误', '投篮不中', '抢断', '盖帽', '24秒违例']
    # 统计成功次数
    success_df = closing_df[closing_df['防守结果'].isin(success_results)]
    print(f"关门防守总次数: {len(closing_df)}")
    print(f"关门防守成功次数: {len(success_df)}")
    print(f"成功率: {len(success_df)/len(closing_df):.1%}" if len(closing_df) > 0 else "无记录")
    # 查看具体成功明细
    print("\n成功明细:")
    print(success_df[['时间', '防守人1', '防守人2', '防守结果']].to_string(index=False))
    return len(success_df)
# 使用方法
if __name__ == "__main__":
    count_success_from_csv('defensive_stats.csv')

数据库 SQL 统计(适用于 MySql / PostgreSQL)

适用场景:数据存在数据库的 defensive_actions 表中。

表结构示例

CREATE TABLE defensive_actions (
    id INT PRIMARY KEY,
    game_time VARCHAR(10),
    action_type VARCHAR(20),  -- 如 '关门', '包夹'
    result VARCHAR(20),       -- 如 '对手失误', '投篮不中', '对手得分'
    defender1 VARCHAR(20),
    defender2 VARCHAR(20)
);

SQL 统计语句

SELECT 
    COUNT(*) AS 总关门次数,
    SUM(CASE WHEN result IN ('对手失误', '投篮不中', '抢断', '盖帽', '24秒违例') 
        THEN 1 ELSE 0 END) AS 成功次数,
    ROUND(
        SUM(CASE WHEN result IN ('对手失误', '投篮不中', '抢断', '盖帽', '24秒违例') 
            THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1
    ) AS 成功率
FROM defensive_actions
WHERE action_type = '关门';

温馨提示:如何定义“成功”?

为了让脚本更准确地工作,你需要先确定你的具体标准。“关门防守成功” 指的是通过关门破坏了对方进攻,包括以下五种情况的一种:

  1. 迫使对方失误(传球失误、运球失误、走步)
  2. 迫使对方投篮不中(特别是仓促出手)
  3. 直接完成抢断
  4. 造成封盖
  5. 迫使对方24秒进攻违例或8秒后场违例

如果某次关门导致对方犯规(防守犯规)或对方依然得分,则不算成功


请告诉我你的数据是什么样的(是文本、Excel还是数据库)? 如果你提供样例数据,我可以直接为你写出完全匹配的脚本。

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