变向突破次数对比
下面给你一份可直接运行的 Python 脚本,用于统计并对比球员/球队的变向突破次数,数据源支持 CSV 或手动字典,输出对比表格 + 可视化图表。

完整脚本
# -*- coding: utf-8 -*-
"""
变向突破次数对比脚本
功能:
1. 读取球员/球队变向突破数据(CSV 或内置字典)
2. 统计总次数、场均、成功率
3. 横向对比排序,输出表格
4. 生成柱状图 + 折线趋势图
"""
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 中文显示
matplotlib.rcParams['axes.unicode_minus'] = False
# ============ 1. 数据源(可替换为 pd.read_csv("data.csv")) ============
data = {
"球员": ["张三", "李四", "王五", "赵六", "孙七"],
"出场次数": [10, 10, 8, 10, 9],
"变向突破": [42, 35, 28, 50, 31], # 总次数
"成功次数": [30, 22, 18, 33, 20], # 突破成功
"被抢断": [12, 13, 10, 17, 11],
}
df = pd.DataFrame(data)
# ============ 2. 计算衍生指标 ============
df["场均突破"] = (df["变向突破"] / df["出场次数"]).round(2)
df["成功率%"] = (df["成功次数"] / df["变向突破"] * 100).round(1)
df["场均成功"] = (df["成功次数"] / df["出场次数"]).round(2)
# ============ 3. 排序 & 输出表格 ============
df_sorted = df.sort_values("变向突破", ascending=False).reset_index(drop=True)
print("=" * 70)
print("【变向突破次数对比表】")
print("=" * 70)
print(df_sorted.to_string(index=False))
print("=" * 70)
# 冠军/垫底快速点评
top = df_sorted.iloc[0]
low = df_sorted.iloc[-1]
print(f"🏆 突破王:{top['球员']} 总次数={top['变向突破']} 场均={top['场均突破']} 成功率={top['成功率%']}%")
print(f"⚠️ 最少: {low['球员']} 总次数={low['变向突破']} 场均={low['场均突破']} 成功率={low['成功率%']}%")
# ============ 4. 可视化 ============
fig, axes = plt.subplots(1, 3, figsize=(16, 5))
# 图1:总突破次数柱状图
axes[0].bar(df_sorted["球员"], df_sorted["变向突破"], color="#4C9BE8")
axes[0].set_title("变向突破总次数对比")
axes[0].set_ylabel("次数")
for i, v in enumerate(df_sorted["变向突破"]):
axes[0].text(i, v + 0.5, str(v), ha="center")
# 图2:场均突破 vs 成功率(双轴)
ax2 = axes[1]
ax2.bar(df_sorted["球员"], df_sorted["场均突破"], color="#F2A93B", label="场均突破")
ax2.set_ylabel("场均突破次数", color="#F2A93B")
ax2.set_title("场均突破 & 成功率")
ax2b = ax2.twinx()
ax2b.plot(df_sorted["球员"], df_sorted["成功率%"], "o-", color="#E74C3C", label="成功率%")
ax2b.set_ylabel("成功率 %", color="#E74C3C")
# 图3:成功 vs 被抢断 堆叠
axes[2].bar(df_sorted["球员"], df_sorted["成功次数"], label="成功", color="#2ECC71")
axes[2].bar(df_sorted["球员"], df_sorted["被抢断"],
bottom=df_sorted["成功次数"], label="被抢断", color="#E74C3C")
axes[2].set_title("突破结果构成")
axes[2].legend()
plt.tight_layout()
plt.savefig("breakthrough_compare.png", dpi=150)
plt.show()
print("✅ 图表已保存:breakthrough_compare.png")
运行效果示例
======================================================================
【变向突破次数对比表】
======================================================================
球员 出场次数 变向突破 成功次数 被抢断 场均突破 成功率% 场均成功
赵六 10 50 33 17 5.00 66.0 3.30
张三 10 42 30 12 4.20 71.4 3.00
李四 10 35 22 13 3.50 62.9 2.20
孙七 9 31 20 11 3.44 64.5 2.22
王五 8 28 18 10 3.50 64.3 2.25
======================================================================
🏆 突破王:赵六 总次数=50 场均=5.00 成功率=66.0%
⚠️ 最少: 王五 总次数=28 场均=3.50 成功率=64.3%
如何接你自己的数据
方式 A:CSV 文件
df = pd.read_csv("players.csv")
CSV 表头要求:球员,出场次数,变向突破,成功次数,被抢断
方式 B:Excel
df = pd.read_excel("players.xlsx", sheet_name="Sheet1")
方式 C:API / 爬虫 把返回的 JSON 转成 DataFrame 即可:
df = pd.DataFrame(json_data)
进阶扩展建议
| 需求 | 改动点 |
|---|---|
| 按球队对比 | 把 球员 换成 球队,聚合 groupby("球队").sum() |
| 按位置分组(后卫/前锋) | 加一列 位置,用 groupby 分别画图 |
| 时间趋势(月/赛季) | 增加 日期 列,用折线图展示变化 |
| 对比两个赛季 | 读取两份 df,做 merge 后画并排柱状图 |
| 导出报告 | df_sorted.to_excel("report.xlsx") |
需要我把它改成球队版、赛季趋势版,或者接入某个具体数据源(如 StatsBomb、Wyscout、中超官网)吗?告诉我你的数据长什么样,我直接帮你改。