实用脚本统计赛季累计数据对比如何?

wen 实用脚本 1

本文目录导读:

实用脚本统计赛季累计数据对比如何?

  1. 功能特点
  2. 脚本代码
  3. 运行前准备
  4. 使用示例与输出效果
  5. 高级自定义建议

该脚本使用 Python 编写,依赖 pandasmatplotlib

功能特点

  1. 多维度对比:对比得分、篮板、助攻、抢断、盖帽、失误。
  2. 效率计算:自动计算PER(Player Efficiency Rating,球员效率值,简化版)。
  3. 输出可视化:生成并保存对比图表,方便直接查看。
  4. 清晰输出:在控制台打印格式化的对比表格。

脚本代码

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 设置中文显示(如果系统有中文字体)
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS', 'Microsoft YaHei']  # 根据系统调整
plt.rcParams['axes.unicode_minus'] = False
def calculate_per(stats):
    """
    简化版效率值 (PER) 计算
    公式参考:PER = (得分 + 篮板 + 助攻 + 抢断 + 盖帽 - 失误) / 比赛场数
    """
    # 简化公式,实际PER公式更复杂,这里用简单的效率指数
    efficiency = (stats['得分'] + stats['篮板'] + stats['助攻'] + 
                  stats['抢断'] + stats['盖帽'] - stats['失误'])
    # 返回场均效率,避免除以0
    return round(efficiency / max(stats['场次'], 1), 1)
def compare_players(data):
    """
    核心对比函数
    data: 字典格式,键为球员名,值为包含统计数据的字典
    """
    # 转换为DataFrame
    df = pd.DataFrame(data).T  # 转置,让球员成为行索引
    df.index.name = '球员'
    # 添加场均数据
    df['场均得分'] = round(df['得分'] / df['场次'], 1)
    df['场均篮板'] = round(df['篮板'] / df['场次'], 1)
    df['场均助攻'] = round(df['助攻'] / df['场次'], 1)
    df['场均抢断'] = round(df['抢断'] / df['场次'], 1)
    df['场均盖帽'] = round(df['盖帽'] / df['场次'], 1)
    df['场均失误'] = round(df['失误'] / df['场次'], 1)
    # 计算PER
    df['效率值'] = df.apply(lambda row: calculate_per(row), axis=1)
    # 选择要显示的列(总量+场均+PER)
    display_cols = ['场次', '得分', '篮板', '助攻', '抢断', '盖帽', '失误',
                    '场均得分', '场均篮板', '场均助攻', '场均抢断', '场均盖帽', 
                    '效率值']
    result_df = df[display_cols]
    # 按效率值排序
    result_df = result_df.sort_values('效率值', ascending=False)
    return result_df
def plot_comparison(data):
    """
    绘制柱状图对比
    """
    # 准备数据
    players = list(data.keys())
    metrics = {
        '总得分': [data[p]['得分'] for p in players],
        '总篮板': [data[p]['篮板'] for p in players],
        '总助攻': [data[p]['助攻'] for p in players],
        '总抢断': [data[p]['抢断'] for p in players],
        '总盖帽': [data[p]['盖帽'] for p in players],
    }
    # 创建子图
    fig, axes = plt.subplots(2, 3, figsize=(15, 10))
    # 每个子图画一个数据项
    for idx, (metric, values) in enumerate(metrics.items()):
        ax = axes[idx // 3, idx % 3]
        bars = ax.bar(players, values, color=['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd'][idx])
        # 在柱子上显示数值
        for bar, val in zip(bars, values):
            ax.text(bar.get_x() + bar.get_width()/2., bar.get_height() + 0.5,
                    str(val), ha='center', va='bottom', fontsize=10)
        ax.set_title(metric, fontsize=14, fontweight='bold')
        ax.set_ylabel('数值')
        ax.grid(axis='y', alpha=0.3)
    # 最后一个子图显示效率值对比
    ax = axes[1, 2]
    per_values = []
    for p in players:
        stats = data[p]
        per = (stats['得分'] + stats['篮板'] + stats['助攻'] + 
               stats['抢断'] + stats['盖帽'] - stats['失误']) / stats['场次']
        per_values.append(round(per, 1))
    bars = ax.bar(players, per_values, color='#17becf')
    for bar, val in zip(bars, per_values):
        ax.text(bar.get_x() + bar.get_width()/2., bar.get_height() + 0.1,
                str(val), ha='center', va='bottom', fontsize=10)
    ax.set_title('效率值 (PER)', fontsize=14, fontweight='bold')
    ax.set_ylabel('场均效率')
    ax.grid(axis='y', alpha=0.3)
    plt.tight_layout()
    plt.savefig('球员数据对比.png', dpi=300, bbox_inches='tight')
    print("\n✅ 对比图表已保存为: 球员数据对比.png")
    plt.show()
def main():
    """
    主程序入口
    """
    # ================= 数据输入区域 =================
    # 请在此处修改数据(单位:场比赛、个)
    player_data = {
        '球员A': {
            '场次': 62,
            '得分': 1875,
            '篮板': 520,
            '助攻': 380,
            '抢断': 95,
            '盖帽': 45,
            '失误': 180
        },
        '球员B': {
            '场次': 58,
            '得分': 1500,
            '篮板': 750,
            '助攻': 220,
            '抢断': 60,
            '盖帽': 110,
            '失误': 150
        },
        '球员C': {
            '场次': 65,
            '得分': 1650,
            '篮板': 480,
            '助攻': 450,
            '抢断': 80,
            '盖帽': 30,
            '失误': 200
        }
    }
    # =================================================
    # 执行对比
    result = compare_players(player_data)
    # 控制台输出
    print("\n" + "="*60)
    print("           赛季累计数据对比分析")
    print("="*60)
    # 打印总量与场均数据
    print("\n【总量及场均数据】")
    print(result.to_string())
    # 打印效率排名
    print("\n【效率值排名】(效率值 = (得分+篮板+助攻+抢断+盖帽-失误)/场次)")
    per_rank = result[['效率值']].sort_values('效率值', ascending=False)
    for i, (player, row) in enumerate(per_rank.iterrows(), 1):
        print(f"  第{i}名: {player} - 效率值 {row['效率值']}")
    # 生成可视化图表
    plot_comparison(player_data)
    # 输出分析摘要
    print("\n【简要分析】")
    best_score = result['总分'].idxmax() if '总分' in result.columns else result['得分'].idxmax()
    best_rebound = result['篮板'].idxmax()
    best_assist = result['助攻'].idxmax()
    print(f"  🏀 得分王: {best_score} ({result.loc[best_score, '得分']}分)")
    print(f"  🏀 篮板王: {best_rebound} ({result.loc[best_rebound, '篮板']}个)")
    print(f"  🏀 助攻王: {best_assist} ({result.loc[best_assist, '助攻']}次)")
    print(f"  ⭐ 效率王: {per_rank.index[0]} (效率值 {per_rank.iloc[0]['效率值']})")
if __name__ == "__main__":
    main()

运行前准备

  1. 安装依赖库(在命令行/终端中执行):
    pip install pandas matplotlib
  2. 修改数据:在脚本的 main() 函数中找到 player_data 区域,替换成您想对比的球员数据。

使用示例与输出效果

输入示例数据(假设三位球员A、B、C的赛季数据如上代码所示):

运行后,控制台输出:

============================================================
           赛季累计数据对比分析
============================================================
【总量及场均数据】
        场次   得分   篮板   助攻   抢断   盖帽   失误   场均得分  场均篮板  场均助攻  ...
球员
球员A     62  1875   520   380    95    45   180     30.2      8.4      6.1  ...
球员B     58  1500   750   220    60   110   150     25.9     12.9      3.8  ...
球员C     65  1650   480   450    80    30   200     25.4      7.4      6.9  ...
【效率值排名】(效率值 = (得分+篮板+助攻+抢断+盖帽-失误)/场次)
  第1名: 球员A - 效率值 34.3
  第2名: 球员C - 效率值 31.5
  第3名: 球员B - 效率值 29.1
...
【简要分析】
  🏀 得分王: 球员A (1875分)
  🏀 篮板王: 球员B (750个)
  🏀 助攻王: 球员C (450次)
  ⭐ 效率王: 球员A (效率值 34.3)

同时生成可视化图表 球员数据对比.png,包含6个子图(总分、总篮板、总助攻、总抢断、总盖帽、效率值),每个柱子上方都有具体数字。


高级自定义建议

  1. 增加衍生指标:可以在 compare_players 函数中增加命中率、三分命中率、真实命中率等,只需在输入数据中增加相应的投篮命中/出手次数,然后在函数中计算即可。
  2. 支持更多球员:直接在 player_data 字典中添加新球员即可,无需修改其他代码。
  3. 对接真实数据源:可以将数据从Excel读取(使用 pd.read_excel),或从API抓取实时数据。

希望这个脚本对您有帮助!如果有特殊的需求(比如需要对比球队防守效率等),可以在此基础上扩展。

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