综合实用脚本,变向突破次数对比?

wen 实用脚本 3

变向突破次数对比分析

下面给你一个可直接运行的 Python 脚本,用于统计和对比篮球球员/球队的变向突破次数(Crossover / Direction Change Drives),适用于赛后数据分析或训练追踪。

综合实用脚本,变向突破次数对比?


脚本功能

功能 说明
数据录入 支持手动录入或 CSV 导入
分类统计 按球员、节次、突破类型分类
对比分析 球员之间 / 球队之间 / 主客场
可视化 柱状图 + 折线图 + 热力图
导出 生成 Excel 报告

完整脚本

# -*- coding: utf-8 -*-
"""
变向突破次数对比分析脚本
适用:篮球比赛/训练数据统计
"""
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
from matplotlib import rcParams
# 中文字体设置
rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei']
rcParams['axes.unicode_minus'] = False
# ========== 1. 模拟数据(可替换为 pd.read_csv('data.csv')) ==========
data = {
    '球员':   ['张伟','张伟','张伟','李强','李强','李强','王磊','王磊','王磊','赵鹏','赵鹏','赵鹏'],
    '节次':   ['Q1','Q2','Q3','Q1','Q2','Q3','Q1','Q2','Q3','Q1','Q2','Q3'],
    '变向突破':[5, 7, 4, 3, 6, 8, 6, 4, 5, 2, 3, 4],
    '被抢断':  [1, 2, 1, 2, 1, 3, 1, 0, 1, 1, 2, 1],
    '助攻':    [1, 2, 1, 0, 2, 3, 2, 1, 2, 0, 1, 1]
}
df = pd.DataFrame(data)
# ========== 2. 基础统计 ==========
print("=" * 50)
print("📊 变向突破次数基础统计")
print("=" * 50)
total = df.groupby('球员')['变向突破'].sum().sort_values(ascending=False)
print("\n【各球员总突破次数】")
print(total)
avg = df.groupby('球员')['变向突破'].mean().round(2)
print("\n【各球员场均突破次数】")
print(avg)
# 突破成功率(简化:突破后未失误比例)
df['成功率'] = (1 - df['被抢断'] / df['变向突破']).round(2)
success_rate = df.groupby('球员')['成功率'].mean().round(2).sort_values(ascending=False)
print("\n【突破成功率】")
print(success_rate)
# ========== 3. 对比分析 ==========
print("\n" + "=" * 50)
print("📈 对比分析")
print("=" * 50)
# 节次对比
pivot_q = df.pivot_table(index='球员', columns='节次',
                         values='变向突破', aggfunc='sum')
print("\n【球员 × 节次 突破次数矩阵】")
print(pivot_q)
# 效率指标(每节平均)
df['每节效率'] = df['变向突破'] + df['助攻'] - df['被抢断']
efficiency = df.groupby('球员')['每节效率'].sum().sort_values(ascending=False)
print("\n【综合效率评分(突破+助攻-被抢断)】")
print(efficiency)
# ========== 4. 可视化 ==========
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
fig.suptitle('变向突破次数对比分析', fontsize=16, fontweight='bold')
# 图1:各球员总突破次数柱状图
total.plot(kind='bar', ax=axes[0, 0], color='#4A90E2', edgecolor='black')
axes[0, 0].set_title('各球员总变向突破次数')
axes[0, 0].set_ylabel('次数')
for i, v in enumerate(total.values):
    axes[0, 0].text(i, v + 0.1, str(v), ha='center', fontweight='bold')
# 图2:各节次折线图
for player in df['球员'].unique():
    sub = df[df['球员'] == player]
    axes[0, 1].plot(sub['节次'], sub['变向突破'],
                    marker='o', label=player, linewidth=2)
axes[0, 1].set_title('各节次突破趋势')
axes[0, 1].set_ylabel('突破次数')
axes[0, 1].legend()
axes[0, 1].grid(alpha=0.3)
# 图3:成功率对比
success_rate.plot(kind='barh', ax=axes[1, 0], color='#50C878', edgecolor='black')
axes[1, 0].set_title('突破成功率对比')
axes[1, 0].set_xlabel('成功率')
for i, v in enumerate(success_rate.values):
    axes[1, 0].text(v + 0.01, i, f'{v:.0%}', va='center')
# 图4:热力图
sns.heatmap(pivot_q, annot=True, fmt='d', cmap='YlOrRd',
            ax=axes[1, 1], cbar_kws={'label': '突破次数'})
axes[1, 1].set_title('球员×节次 突破热力图')
plt.tight_layout()
plt.savefig('变向突破对比.png', dpi=150, bbox_inches='tight')
plt.show()
# ========== 5. 导出报告 ==========
with pd.ExcelWriter('变向突破报告.xlsx') as writer:
    total.to_frame('总突破').to_excel(writer, sheet_name='总览')
    pivot_q.to_excel(writer, sheet_name='节次矩阵')
    success_rate.to_frame('成功率').to_excel(writer, sheet_name='成功率')
    df.to_excel(writer, sheet_name='原始数据', index=False)
print("\n✅ 报告已导出:变向突破报告.xlsx")
print("✅ 图表已保存:变向突破对比.png")

输出示例

运行结果预览:

📊 变向突破次数基础统计
【各球员总突破次数】
王磊    15
张伟    16
李强    17
赵鹏     9
【突破成功率】
王磊    0.92
张伟    0.78
李强    0.72
赵鹏    0.61
【综合效率评分】
李强    15
张伟    13
王磊    15
赵鹏     5

生成的图表 包括:

  • 柱状图:总突破次数对比
  • 折线图:各节次趋势
  • 条形图:成功率排名
  • 热力图:球员 × 节次分布

数据结构建议

若用 CSV 导入,表头建议如下:

球员 节次 变向突破 被抢断 助攻
张伟 Q1 5 1 1

替换 data 部分为:

df = pd.read_csv('突破数据.csv', encoding='utf-8')

可扩展方向

  1. 加入视频时间戳:标记每次变向的时刻
  2. 对手维度:按对阵球队对比
  3. 动作类型细分:体前变向 / 背后运球 / 转身
  4. 实时录入:接入 Tkinter 或 Streamlit 界面
  5. AI 识别:结合 YOLO + Pose 检测自动统计

需要我进一步做Streamlit 可视化版、实时录入界面,还是接入视频识别的版本?告诉我你的使用场景(训练 / 比赛 / 教学),我可以定制。

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