根据python案例,踩单车过人成功率?

wen python案例 1

本文目录导读:

根据python案例,踩单车过人成功率?

  1. 什么算“踩单车过人成功”?
  2. Python 案例:球员踩单车过人分析
  3. 如果数据来自 CSV
  4. 更细的分析维度
  5. 现实中的数据参考
  6. 完整可运行代码

用 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()

如果你想要,我可以继续帮你做:

  1. 真实比赛数据爬取 + 分析模板
  2. 踩单车 vs 其他过人动作成功率对比
  3. 用逻辑回归预测某次踩单车是否成功

你更想要哪一种?

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