Python 实现赛季累计数据对比统计案例
下面我用一个完整的案例,展示如何用 Python 统计并对比多个赛季的累计数据(以 NBA 篮球数据为例)。

场景说明
假设我们要对比 3 个赛季 中几位球员的累计数据(得分、篮板、助攻),并可视化对比。
完整代码实现
基础数据准备与统计
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 构造模拟数据:球员 × 赛季 × 多场比赛
np.random.seed(42)
players = ['库里', '詹姆斯', '杜兰特', '字母哥']
seasons = ['2022-23', '2023-24', '2024-25']
records = []
for player in players:
for season in seasons:
# 每个赛季 10 场比赛
for game in range(10):
records.append({
'player': player,
'season': season,
'points': np.random.randint(15, 40),
'rebounds': np.random.randint(3, 15),
'assists': np.random.randint(2, 12),
})
df = pd.DataFrame(records)
print(df.head())
按赛季累计统计
# 按球员 + 赛季分组累计
season_stats = df.groupby(['player', 'season']).agg(
总得分=('points', 'sum'),
总篮板=('rebounds', 'sum'),
总助攻=('assists', 'sum'),
场均得分=('points', 'mean'),
).round(2).reset_index()
print(season_stats)
输出示例:
player season 总得分 总篮板 总助攻 场均得分
0 库里 2022-23 268 88 72 26.8
1 库里 2023-24 275 91 68 27.5
...
多赛季对比(透视表)
# 每个球员在不同赛季的累计得分对比
pivot_points = season_stats.pivot(
index='player', columns='season', values='总得分'
)
print(pivot_points)
# 计算赛季间增长
pivot_points['同比变化'] = (
pivot_points['2024-25'] - pivot_points['2023-24']
)
print(pivot_points)
可视化对比
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 图1:各球员赛季累计得分柱状图
pivot_points[seasons].plot(
kind='bar', ax=axes[0], rot=0, colormap='viridis'
)
axes[0].set_title('各球员赛季累计得分对比')
axes[0].set_ylabel('累计得分')
axes[0].legend(title='赛季')
# 图2:各球员场均得分折线图
pivot_avg = season_stats.pivot(
index='season', columns='player', values='场均得分'
)
pivot_avg.plot(kind='line', marker='o', ax=axes[1], colormap='tab10')
axes[1].set_title('球员场均得分趋势')
axes[1].set_ylabel('场均得分')
axes[1].grid(alpha=0.3)
plt.tight_layout()
plt.savefig('season_compare.png', dpi=120)
plt.show()
进阶:多维度综合对比
# 计算综合贡献值 = 得分 + 篮板*1.2 + 助攻*1.5
df['综合贡献'] = df['points'] + df['rebounds'] * 1.2 + df['assists'] * 1.5
summary = df.groupby(['player', 'season']).agg(
累计综合贡献=('综合贡献', 'sum'),
场均贡献=('综合贡献', 'mean'),
).round(1).reset_index()
# 找出每个球员表现最好的赛季
best_season = summary.loc[
summary.groupby('player')['累计综合贡献'].idxmax()
]
print("\n各球员最佳赛季:")
print(best_season)
核心分析思路
| 步骤 | 方法 | 目的 |
|---|---|---|
| 数据分组 | groupby(['player','season']) |
按维度累计 |
| 聚合统计 | agg(sum/mean/max) |
计算赛季总量 |
| 透视对比 | pivot() |
横向对比多赛季 |
| 变化计算 | 差值/增长率 | 反映趋势 |
| 可视化 | matplotlib/seaborn | 直观呈现 |
常见扩展方向
- 接入真实数据:用
nba_api或爬虫获取真实赛季数据 - 增长率分析:计算环比、同比增长率
- 排名对比:
rank()给出每赛季球员排名 - 交互可视化:用
plotly做可交互对比图 - 赛季对比雷达图:多维度(得分/篮板/助攻/命中率)对比
如果你有具体的数据来源(CSV、数据库、API)或想对比的维度(如球队、联赛),告诉我,我可以帮你定制完整方案。