本文目录导读:

下面为你提供一个Python案例,用于统计定位球(如角球、任意球、点球等)在总进球中的得分占比。
我们以足球比赛数据为例,假设有一份包含进球方式的数据集,计算“定位球进球数占总进球数的比例”。
示例数据(模拟)
# 模拟进球数据:每个元素是一个字典,包含进球的类型
goals = [
{"player": "Messi", "type": "open_play"},
{"player": "Ronaldo", "type": "free_kick"}, # 定位球(任意球)
{"player": "Salah", "type": "penalty"}, # 定位球(点球)
{"player": "Mbappe", "type": "open_play"},
{"player": "Kane", "type": "corner"}, # 定位球(角球)
{"player": "Lewandowski", "type": "open_play"},
{"player": "Neymar", "type": "free_kick"}, # 定位球
{"player": "Haaland", "type": "open_play"},
{"player": "Benzema", "type": "penalty"}, # 定位球
{"player": "De Bruyne", "type": "open_play"},
]
判断是否为定位球
定位球一般包括:
free_kick(任意球)penalty(点球)corner(角球)throw_in(界外球,较少直接进球)indirect_free_kick(间接任意球)
为简化,我们只统计上述前3种常见定位球。
# 定义定位球类型集合
set_piece_types = {"free_kick", "penalty", "corner"}
# 统计
total_goals = len(goals)
set_piece_goals = sum(1 for g in goals if g["type"] in set_piece_types)
# 计算占比
ratio = set_piece_goals / total_goals * 100
print(f"总进球数: {total_goals}")
print(f"定位球进球数: {set_piece_goals}")
print(f"定位球得分占比: {ratio:.2f}%")
输出结果:
总进球数: 10
定位球进球数: 5
定位球得分占比: 50.00%
更通用的版本(支持自定义分类)
from typing import List, Dict
def calculate_set_piece_ratio(goals: List[Dict], set_piece_types: set = {"free_kick", "penalty", "corner"}) -> float:
"""
计算定位球进球占比
:param goals: 进球数据列表,每个元素需包含 'type' 键
:param set_piece_types: 定位球类型集合
:return: 定位球占比(百分比)
"""
total = len(goals)
if total == 0:
return 0.0
set_piece_count = sum(1 for g in goals if g.get("type") in set_piece_types)
return set_piece_count / total * 100
# 使用
ratio = calculate_set_piece_ratio(goals)
print(f"定位球得分占比: {ratio:.2f}%")
从 CSV / Excel 文件读取数据
如果你的数据在文件中(goals.csv):
player,type Messi,open_play Ronaldo,free_kick Salah,penalty ...
可以使用 pandas:
import pandas as pd
df = pd.read_csv("goals.csv")
set_piece_types = {"free_kick", "penalty", "corner"}
total_goals = len(df)
set_piece_goals = df["type"].isin(set_piece_types).sum()
ratio = set_piece_goals / total_goals * 100
print(f"定位球得分占比: {ratio:.2f}%")
可视化(饼图)
import matplotlib.pyplot as plt
labels = ['定位球', '其他']
sizes = [set_piece_goals, total_goals - set_piece_goals]
colors = ['#ff9999', '#66b3ff']
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)'定位球得分占比')
plt.axis('equal')
plt.show()
真实场景扩展建议
在实际应用(如足球分析平台)中,你可能需要:
- 区分直接/间接定位球
- 按比赛、赛季、球队分组统计
- 结合 xG(预期进球) 数据
- 输出为报告或仪表盘
如果需要更具体的案例(如从某个比赛API获取数据、统计某支球队的定位球占比),请告诉我,我可以为你定制代码。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播