python案例统计定位球得分占比多少?

wen python案例 1

Python统计定位球得分占比案例

下面我用一个完整的案例,演示如何用Python统计足球比赛中定位球得分占比。

python案例统计定位球得分占比多少?

场景说明

假设你要分析某支球队一个赛季的进球数据:

  • 总进球数
  • 其中定位球进球(角球、任意球、点球等)

需要计算:定位球得分占比 = 定位球进球数 / 总进球数 × 100%


基础版:手动录入数据

# 定义赛季进球数据
goals_data = {
    "运动战进球": 30,
    "角球进球": 8,
    "任意球进球": 5,
    "点球进球": 6,
    "乌龙球(对方)": 2
}
# 定位球类型(角球、任意球、点球都属于定位球)
set_piece_types = ["角球进球", "任意球进球", "点球进球"]
# 计算
total_goals = sum(goals_data.values())
set_piece_goals = sum(goals_data[k] for k in set_piece_types)
ratio = set_piece_goals / total_goals * 100
# 输出结果
print(f"总进球数:{total_goals}")
print(f"定位球进球数:{set_piece_goals}")
print(f"定位球得分占比:{ratio:.2f}%")

输出:

总进球数:51
定位球进球数:19
定位球得分占比:37.25%

进阶版:多队对比 + 可视化

import pandas as pd
import matplotlib.pyplot as plt
# 各队进球数据(运动战、角球、任意球、点球)
data = {
    "球队": ["曼城", "阿森纳", "利物浦", "曼联", "切尔西"],
    "运动战": [45, 38, 42, 28, 30],
    "角球":   [10, 9,  7,  6,  5],
    "任意球": [4,  5,  3,  4,  3],
    "点球":   [6,  4,  5,  7,  6]
}
df = pd.DataFrame(data)
df["总进球"] = df[["运动战", "角球", "任意球", "点球"]].sum(axis=1)
df["定位球进球"] = df[["角球", "任意球", "点球"]].sum(axis=1)
df["定位球占比"] = (df["定位球进球"] / df["总进球"] * 100).round(2)
print(df[["球队", "总进球", "定位球进球", "定位球占比"]])
# 可视化
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
plt.figure(figsize=(8, 5))
bars = plt.bar(df["球队"], df["定位球占比"], color="steelblue")
plt.bar_label(bars, fmt="%.1f%%")
plt.ylabel("定位球得分占比 (%)")"各队定位球得分占比对比")
plt.ylim(0, 50)
plt.tight_layout()
plt.show()

输出:

   球队  总进球  定位球进球  定位球占比
0  曼城    65      20     30.77
1  阿森纳   56      18     32.14
2  利物浦   57      15     26.32
3  曼联    45      17     37.78
4  切尔西   44      14     31.82

用真实比赛事件数据统计(更专业)

如果拿到每场比赛的事件数据(event data),可以自动识别定位球:

import pandas as pd
# 模拟比赛事件数据(实际可从 OPTA / StatsBomb / whoscored 爬取)
events = pd.DataFrame([
    {"比赛": "第1轮", "进球方式": "运动战",  "球队": "曼城"},
    {"比赛": "第1轮", "进球方式": "点球",    "球队": "曼城"},
    {"比赛": "第2轮", "进球方式": "角球",    "球队": "曼城"},
    {"比赛": "第2轮", "进球方式": "任意球",  "球队": "曼城"},
    {"比赛": "第3轮", "进球方式": "运动战",  "球队": "曼城"},
    {"比赛": "第4轮", "进球方式": "角球",    "球队": "曼城"},
])
# 标记定位球
set_piece_kinds = ["角球", "任意球", "点球", "间接任意球"]
events["是否定位球"] = events["进球方式"].isin(set_piece_kinds)
# 统计
total = len(events)
set_piece = events["是否定位球"].sum()
ratio = set_piece / total * 100
print(f"总进球:{total}")
print(f"定位球进球:{set_piece}")
print(f"定位球占比:{ratio:.2f}%")
# 分类汇总
print("\n各进球方式分布:")
print(events["进球方式"].value_counts())

输出:

总进球:6
定位球进球:4
定位球占比:66.67%
各进球方式分布:
运动战    2
角球     2
点球     1
任意球    1

关键统计公式

$$ \text{定位球得分占比} = \frac{\text{角球进球} + \text{任意球进球} + \text{点球进球}}{\text{总进球数}} \times 100\% $$

注意点:

  1. 点球是否算作定位球有争议——FIFA统计中通常算,但分析时有些机构会单独列出;
  2. 间接任意球和直接任意球要区分统计;
  3. 如果做跨赛季对比,需要统一口径。

扩展建议

  • 📊 用 matplotlib / seaborn 做占比饼图或堆叠柱状图
  • 🤖 用 requests + BeautifulSoup 爬取 flashscore / whoscored 数据
  • 📈 分析定位球得分与比赛结果相关性(胜/平/负)
  • ⚽ 从公开数据集 StatsBomb Open Data 获取真实事件数据

需要我帮你写爬取真实数据或做饼图可视化的代码吗?

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