本文目录导读:

用 Python 分析“踩单车过人成功率”,核心是先明确统计口径,再做数据清洗和计算,下面给你一个完整案例。
什么算“踩单车过人成功”?
常见定义:
| 结果 | 说明 |
|---|---|
| 成功 | 踩单车后成功突破防守球员,球权仍在自己队 |
| 失败 | 被断球、被迫回传、犯规中断、出界 |
| 无效 | 踩了但没过人,也没丢球(可选) |
成功率公式:
[ \text{成功率} = \frac{\text{成功次数}}{\text{总尝试次数}} \times 100\% ]
Python 案例:球员踩单车过人分析
构造数据
import pandas as pd
data = {
"player": ["梅西", "梅西", "梅西", "梅西", "梅西",
"C罗", "C罗", "C罗", "C罗",
"内马尔", "内马尔", "内马尔", "内马尔", "内马尔", "内马尔"],
"action": ["踩单车", "踩单车", "踩单车", "踩单车", "踩单车",
"踩单车", "踩单车", "踩单车", "踩单车",
"踩单车", "踩单车", "踩单车", "踩单车", "踩单车", "踩单车"],
"result": ["成功", "成功", "失败", "成功", "失败",
"成功", "失败", "失败", "失败",
"成功", "成功", "成功", "失败", "成功", "失败"]
}
df = pd.DataFrame(data)
print(df.head())
计算每位球员的成功率
# 标记成功
df["is_success"] = df["result"] == "成功"
# 按球员统计
summary = df.groupby("player").agg(
总尝试次数=("action", "count"),
成功次数=("is_success", "sum")
)
summary["失败次数"] = summary["总尝试次数"] - summary["成功次数"]
summary["成功率"] = (summary["成功次数"] / summary["总尝试次数"] * 100).round(1)
print(summary)
输出示例:
总尝试次数 成功次数 失败次数 成功率
player
C罗 4 1 3 25.0
内马尔 6 4 2 66.7
梅西 5 3 2 60.0
可视化
import matplotlib.pyplot as plt
# 解决中文显示
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
summary["成功率"].plot(kind="bar", color="skyblue", edgecolor="black")"球员踩单车过人成功率")
plt.ylabel("成功率(%)")
plt.ylim(0, 100)
plt.xticks(rotation=0)
for i, v in enumerate(summary["成功率"]):
plt.text(i, v + 2, f"{v}%", ha="center")
plt.tight_layout()
plt.show()
如果数据来自 CSV
df = pd.read_csv("dribbles.csv")
df["is_success"] = df["result"] == "成功"
rate = (
df[df["action"] == "踩单车"]
.groupby("player")["is_success"]
.agg(总尝试="count", 成功="sum")
)
rate["成功率(%)"] = (rate["成功"] / rate["总尝试"] * 100).round(1)
print(rate.sort_values("成功率(%)", ascending=False))
更细的分析维度
可以继续加:
# 按比赛阶段
df.groupby(["player", "half"])["is_success"].mean()
# 按防守强度
df.groupby(["player", "defender_level"])["is_success"].mean()
# 按区域
df.groupby(["player", "zone"])["is_success"].mean()
# 用透视表
pd.pivot_table(
df,
index="player",
columns="zone",
values="is_success",
aggfunc="mean"
)
现实中的数据参考
如果指真实足球比赛,踩单车成功率通常没有统一官方统计,因为:
- Opta / StatsBomb 把踩单车归为“take-on / dribble”
- 不单独统计“踩单车”这个动作
- 一般统计的是过人成功率
现实里顶级边锋的过人成功率大约:
- 梅西巅峰:55%–65%
- 内马尔:50%–60%
- 普通边锋:35%–50%
- 后卫/中场:30%–45%
所以如果你问“踩单车过人成功率”,通常可以近似理解为:
踩单车后的过人成功率 ≈ 该球员整体过人成功率,略低 5%–10%
因为踩单车动作花哨,容易延误时机。
完整可运行代码
import pandas as pd
import matplotlib.pyplot as plt
data = {
"player": ["梅西"]*5 + ["C罗"]*4 + ["内马尔"]*6,
"result": ["成功","成功","失败","成功","失败",
"成功","失败","失败","失败",
"成功","成功","成功","失败","成功","失败"]
}
df = pd.DataFrame(data)
df["is_success"] = df["result"] == "成功"
summary = df.groupby("player")["is_success"].agg(
总尝试="count",
成功="sum"
)
summary["成功率(%)"] = (summary["成功"] / summary["总尝试"] * 100).round(1)
print(summary)
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
summary["成功率(%)"].plot(kind="bar", color="orange", edgecolor="black")"踩单车过人成功率")
plt.ylabel("成功率(%)")
plt.ylim(0, 100)
plt.tight_layout()
plt.show()
如果你想要,我可以继续帮你做:
- 真实比赛数据爬取 + 分析模板
- 踩单车 vs 其他过人动作成功率对比
- 用逻辑回归预测某次踩单车是否成功
你更想要哪一种?