本文目录导读:

要制作一个“显示人盯人防守成功率”的实用脚本,首先需要明确数据来源和计算逻辑。
由于篮球/足球等体育数据通常来自专业API(如Sportradar、Opta)或本地录制的CSV/Excel,我会给你一个模拟数据 + 高度可复用的Python脚本,你可以直接运行它,并将其核心逻辑移植到你的数据分析工具中。
脚本核心逻辑(计算公式)
人盯人防守成功率通常定义为: 成功率 = (成功防守回合数 / 总人盯人防守回合数) × 100%
- 成功防守回合:通常包括(迫使失误、盖帽、抢断、防守篮板转换、对手投篮不中且未抢到前场篮板)。
- 关键指标:锁定“对位人”,记录每个回合的对位结果。
实用脚本(Python & Pandas)
import pandas as pd
import numpy as np
# ===================== 1. 模拟数据(假设你是教练,手动记录了数据) =====================
# 数据结构:每一行代表一次“防守对位事件”
data = {
'防守人': ['Alex', 'Alex', 'Alex', 'Alex', 'Ben', 'Ben', 'Ben', 'Charlie', 'Charlie', 'Charlie'],
'对位进攻人': ['Player_A', 'Player_B', 'Player_C', 'Player_A', 'Player_D', 'Player_A', 'Player_D', 'Player_E', 'Player_F', 'Player_E'],
'防守回合结果': ['成功', '失败', '成功', '成功', '失败', '成功', '成功', '成功', '失败', '成功'],
'防守类型': ['人盯人', '人盯人', '人盯人', '人盯人', '人盯人', '人盯人', '人盯人', '人盯人', '人盯人', '人盯人']
}
df = pd.DataFrame(data)
# ===================== 2. 计算总体及个人成功率 =====================
def calculate_success_rate(df):
# 确保筛选‘人盯人’防守
df_man = df[df['防守类型'] == '人盯人']
# 总体成功率
total_success = df_man[df_man['防守回合结果'] == '成功'].shape[0]
total_count = df_man.shape[0]
overall_rate = (total_success / total_count * 100) if total_count > 0 else 0
# 按队员分组统计
grouped = df_man.groupby('防守人').agg(
总防守次数=('防守回合结果', 'count'),
成功次数=('防守回合结果', lambda x: (x == '成功').sum())
).reset_index()
grouped['防守成功率'] = (grouped['成功次数'] / grouped['总防守次数'] * 100).round(1)
return overall_rate, grouped
overall_rate, player_stats = calculate_success_rate(df)
# ===================== 3. 输出结果(命令行显示+图形化) =====================
print("=" * 40)
print(f"🏀 总人盯人防守成功率: {overall_rate:.1f}%")
print("=" * 40)
print("📋 个人防守数据明细:")
print(player_stats.to_string(index=False))
# 如果安装了 matplotlib,可以画个柱状图(可选)
try:
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 支持中文
matplotlib.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(8, 4))
bars = plt.bar(player_stats['防守人'], player_stats['防守成功率'], color='#1f77b4')
plt.title('人盯人防守成功率对比')
plt.ylabel('成功率 (%)')
plt.ylim(0, 100)
for bar, rate in zip(bars, player_stats['防守成功率']):
plt.text(bar.get_x() + bar.get_width()/2, bar.get_height() + 1, f'{rate}%', ha='center')
plt.tight_layout()
plt.show()
except ImportError:
print("\n(提示: 安装 matplotlib 可显示柱状图)")
如何把脚本用到“实战”数据?
如果你有专业的SportVU或Second Spectrum追踪数据,或者Synergy Sports的防守报告,你可以替换脚本中的 data 字典,改为读取CSV:
# 假设你的CSV包含列:防守人, 对位进攻人, 防守回合结果, 防守类型
df = pd.read_csv('防守数据.csv')
然后直接调用 calculate_success_rate(df) 即可。
脚本输出效果预览
执行上述代码后,终端会显示:
========================================
🏀 总人盯人防守成功率: 70.0%
========================================
📋 个人防守数据明细:
防守人 总防守次数 成功次数 防守成功率
0 Alex 4 3 75.0
1 Ben 3 2 66.7
2 Charlie 3 2 66.7
进阶扩展(高级玩法)
如果你拥有连续时间序列数据(比如每秒的球员坐标),你可以编写更高级的算法:
- 利用配对锁定:判断防守人是否在进攻人1.5米范围内。
- 成功判定:在防守人贴防的期间,进攻人投篮未命中、失误或24秒违例。
示例伪代码(使用追踪数据):
def is_man_to_man(defender_pos, offensive_pos, threshold=1.5):
distance = np.linalg.norm(defender_pos - offensive_pos)
return distance < threshold
# 遍历每个回合,统计时间占比
这只是一个基础框架,如果你有具体的数据文件格式(比如CSV列名)或特定运动规则,请告诉我,我可以帮你调整代码逻辑。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播