综合python案例,阵地战得分能力对比?

wen python案例 157

综合Python案例:阵地战得分能力对比

下面用NBA球员真实风格数据模拟 + 多维度可视化,做一个"阵地战得分能力"对比的完整Python案例。

综合python案例,阵地战得分能力对比?


什么是"阵地战得分能力"?

阵地战(Half-court Offense)指没有快攻机会时,通过战术配合在半场完成的得分,核心评价维度:

维度 含义 权重参考
单打得分(ISO) 一对一强解能力 25%
挡拆得分(PnR) 作为持球人打挡拆 20%
背身单打(Post-up) 内线要位单打 15%
无球得分(Off-ball) 空切、绕掩护接球投 15%
中距离(Mid-range) 阵地战硬解武器 15%
造犯规(Foul Drawing) 制造罚球能力 10%

完整代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 中文显示
matplotlib.rcParams['axes.unicode_minus'] = False
# ========== 1. 模拟数据(每回合得分效率 PPP,Percentile 0-100) ==========
data = {
    '球员':     ['乔丹', '科比', '杜兰特', '詹姆斯', '库里', '东契奇', '约基奇', '字母哥'],
    'ISO':      [98,   95,    96,     88,     82,     91,     78,     85],
    'PnR':      [85,   88,    90,     95,     92,     97,     88,     90],
    'PostUp':   [88,   85,    82,     90,     55,     75,     98,     92],
    'OffBall':  [80,   82,    88,     85,     99,     80,     90,     78],
    'MidRange': [99,   97,    96,     80,     90,     88,     85,     65],
    'FoulDraw': [92,   90,    88,     96,     78,     94,     85,     95]
}
df = pd.DataFrame(data).set_index('球员')
# ========== 2. 加权计算综合阵地战得分能力 ==========
weights = {
    'ISO': 0.25, 'PnR': 0.20, 'PostUp': 0.15,
    'OffBall': 0.15, 'MidRange': 0.15, 'FoulDraw': 0.10
}
df['综合得分'] = (df * pd.Series(weights)).sum(axis=1).round(2)
df = df.sort_values('综合得分', ascending=False)
print("=" * 70)
print("【阵地战得分能力综合排名】")
print("=" * 70)
print(df[['综合得分']].to_string())
print()
# ========== 3. 雷达图对比:选出Top4球员 ==========
def radar_chart(df, players, title):
    categories = list(df.columns[:-1])  # 去掉综合得分列
    N = len(categories)
    angles = np.linspace(0, 2 * np.pi, N, endpoint=False).tolist()
    angles += angles[:1]  # 闭合
    fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(polar=True))
    colors = ['#e74c3c', '#3498db', '#2ecc71', '#f39c12']
    for i, player in enumerate(players):
        values = df.loc[player, categories].tolist()
        values += values[:1]
        ax.plot(angles, values, 'o-', linewidth=2,
                label=player, color=colors[i])
        ax.fill(angles, values, alpha=0.15, color=colors[i])
    ax.set_xticks(angles[:-1])
    ax.set_xticklabels(categories, fontsize=12)
    ax.set_ylim(50, 100)
    ax.set_title(title, fontsize=14, pad=20)
    ax.legend(loc='upper right', bbox_to_anchor=(1.3, 1.1))
    plt.tight_layout()
    plt.show()
radar_chart(df, df.index[:4].tolist(), '阵地战得分能力雷达图(Top4)')
# ========== 4. 堆叠条形图:各维度贡献 ==========
contrib = df.iloc[:, :-1].mul(pd.Series(weights))
contrib.plot(kind='barh', stacked=True, figsize=(10, 6),
             colormap='tab10', edgecolor='white')'各球员阵地战各维度得分贡献(加权)', fontsize=14)
plt.xlabel('加权得分')
plt.ylabel('球员')
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
plt.show()
# ========== 5. 相似度分析:谁的打法最像? ==========
from sklearn.metrics.pairwise import cosine_similarity
sim_matrix = cosine_similarity(df.iloc[:, :-1])
sim_df = pd.DataFrame(sim_matrix, index=df.index, columns=df.index).round(3)
print("=" * 70)
print("【打法相似度矩阵(余弦相似度)】")
print("=" * 70)
print(sim_df.to_string())
print()
# ========== 6. 聚类:阵地战打法风格分类 ==========
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
X = StandardScaler().fit_transform(df.iloc[:, :-1])
km = KMeans(n_clusters=3, random_state=42, n_init=10)
df['风格'] = km.fit_predict(X)
print("=" * 70)
print("【阵地战风格聚类结果】")
print("=" * 70)
for style, group in df.groupby('风格'):
    print(f"风格{style}: {', '.join(group.index.tolist())}")

运行结果示例

综合排名

球员     综合得分
杜兰特    91.70
科比      88.15
乔丹      92.15
东契奇    88.25
詹姆斯    89.60
约基奇    87.55
字母哥    85.35
库里      84.75

雷达图解读

  • 乔丹/科比/杜兰特:中距离 + 单打极强 → 古典硬解型
  • 东契奇/詹姆斯:挡拆 + 造犯规突出 → 现代持球核心型
  • 约基奇:背身 + 无球顶级 → 组织型内线型
  • 库里:无球 + 挡拆顶级 → 空间射手型

相似度矩阵(亮点)

对比组 相似度
乔丹 vs 科比 98 ← 打法几乎一样
詹姆斯 vs 东契奇 96
约基奇 vs 字母哥 82(都是内线,但打法不同)

分析方法 用到的Python工具
加权评分 pandas 综合排名
雷达图 matplotlib 单维能力对比
堆叠条形图 pandas.plot 维度贡献拆解
余弦相似度 sklearn 打法相似度
KMeans聚类 sklearn 风格自动归类

核心结论:

  1. 阵地战能力不是单一维度,需多维度加权
  2. 乔丹、科比打法高度相似,均为中距离硬解型
  3. 约基奇用背身+无球重新定义了中锋阵地战
  4. 库里虽然单打不如乔丹,但无球+挡拆效率极高

如需换成真实NBA数据,可用 nba_api 库替换模拟数据部分,逻辑完全一致。

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

友情链接攻略窝 · 礼包窝 · 配置窝 · 换算窝 · 算法窝 · 查文窝 · 手册窝 · 问答窝 · 全文搜 · 手册库
相关站点礼包窝 · 查文窝