python案例统计赛季累计数据对比如何?

wen python案例 3

Python 统计赛季累计数据对比案例

下面我用一个完整的案例来演示如何用 Python 统计和对比球员/球队的赛季累计数据。

python案例统计赛季累计数据对比如何?

完整案例代码

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# ========== 1. 构造模拟数据 ==========
data = {
    '球员': ['詹姆斯', '库里', '杜兰特', '字母哥', '东契奇',
             '詹姆斯', '库里', '杜兰特', '字母哥', '东契奇'],
    '赛季': ['2022-23', '2022-23', '2022-23', '2022-23', '2022-23',
             '2023-24', '2023-24', '2023-24', '2023-24', '2023-24'],
    '场次': [55, 56, 47, 63, 66, 71, 74, 75, 73, 70],
    '得分': [1590, 1645, 1335, 1972, 2138, 1822, 1956, 2032, 2222, 2370],
    '助攻': [385, 347, 255, 341, 529, 589, 379, 373, 476, 686],
    '篮板': [445, 265, 315, 741, 569, 518, 328, 498, 814, 647]
}
df = pd.DataFrame(data)
# ========== 2. 计算场均数据 ==========
df['场均得分'] = (df['得分'] / df['场次']).round(1)
df['场均助攻'] = (df['助攻'] / df['场次']).round(1)
df['场均篮板'] = (df['篮板'] / df['场次']).round(1)
print("=" * 60)
print("各球员赛季数据明细:")
print(df.to_string(index=False))
# ========== 3. 赛季对比:按球员透视 ==========
pivot_score = df.pivot(index='球员', columns='赛季', values='得分')
pivot_score['增长'] = pivot_score['2023-24'] - pivot_score['2022-23']
pivot_score['增长率%'] = ((pivot_score['增长'] / pivot_score['2022-23']) * 100).round(1)
print("\n" + "=" * 60)
print("赛季累计得分对比:")
print(pivot_score.sort_values('增长', ascending=False))
# ========== 4. 可视化对比 ==========
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 图1:各球员两个赛季得分对比
players = pivot_score.index.tolist()
x = np.arange(len(players))
width = 0.35
axes[0].bar(x - width/2, pivot_score['2022-23'], width, label='2022-23', color='#4A90E2')
axes[0].bar(x + width/2, pivot_score['2023-24'], width, label='2023-24', color='#E94B3C')
axes[0].set_xticks(x)
axes[0].set_xticklabels(players, rotation=30)
axes[0].set_ylabel('累计得分')
axes[0].set_title('球员赛季累计得分对比')
axes[0].legend()
axes[0].grid(axis='y', alpha=0.3)
# 图2:场均得分对比
pivot_avg = df.pivot(index='球员', columns='赛季', values='场均得分')
pivot_avg.plot(kind='barh', ax=axes[1], color=['#4A90E2', '#E94B3C'])
axes[1].set_title('球员场均得分对比')
axes[1].set_xlabel('场均得分')
axes[1].legend(title='赛季')
plt.tight_layout()
plt.savefig('season_compare.png', dpi=100)
plt.show()

输出结果示例

============================================================
各球员赛季数据明细:
球员  赛季    场次   得分  助攻  篮板  场均得分  场均助攻  场均篮板
詹姆斯  2022-23  55  1590  385  445   28.9   7.0   8.1
...
============================================================
赛季累计得分对比:
赛季      2022-23  2023-24    增长  增长率%
球员                                  
东契奇       2138     2370   232   10.9
...

核心知识点解析

数据对比常用方法

方法 用途 代码
pivot() 长表转宽表 df.pivot(index, columns, values)
groupby() 分组聚合 df.groupby('球员').sum()
diff() 差值对比 df.diff(axis=1)
pct_change() 增长率 df.pct_change(axis=1)

更优雅的对比写法

# 直接计算所有指标的增长率
metrics = ['得分', '助攻', '篮板']
for m in metrics:
    pivot = df.pivot(index='球员', columns='赛季', values=m)
    pivot['增长率'] = pivot.pct_change(axis=1).iloc[:, -1].round(3)
    print(f"\n【{m}】赛季对比:")
    print(pivot)

赛季汇总对比(联赛整体)

# 按赛季汇总整个联赛
season_summary = df.groupby('赛季').agg({
    '得分': ['sum', 'mean', 'max'],
    '助攻': 'sum',
    '篮板': 'sum'
}).round(1)
print(season_summary)

进阶:多赛季趋势对比

如果有多个赛季数据,可以画折线趋势图:

# 假设 df 有 2020-21 到 2023-24 多个赛季
fig, ax = plt.subplots(figsize=(10, 6))
for player in df['球员'].unique():
    player_data = df[df['球员'] == player]
    ax.plot(player_data['赛季'], player_data['场均得分'], 
            marker='o', label=player, linewidth=2)
ax.set_xlabel('赛季')
ax.set_ylabel('场均得分')
ax.set_title('球员场均得分赛季趋势')
ax.legend()
ax.grid(alpha=0.3)
plt.show()

实战建议

  1. 数据源:可从 Basketball-Reference 或 NBA 官方 API 获取真实数据
  2. 对比维度:累计数据看总量,场均数据看效率,命中率看质量
  3. 可视化重点:
    • 双赛季对比 → 柱状图(分组)
    • 多赛季趋势 → 折线图
    • 多指标对比 → 雷达图或热力图

需要我针对某个具体场景(如 NBA 真实数据抓取、足球联赛对比、多指标雷达图)再展开吗?

上一篇python案例统计马赛回旋使用频率如何?

下一篇当前分类已是最新一篇

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