变向突破次数对比
下面给你一份可直接运行的 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、中超官网)吗?告诉我你的数据长什么样,我直接帮你改。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播