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

wen python案例 3

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

下面用 模拟的足球比赛数据 演示如何统计定位球(角球、任意球、点球等)得分占总进球的占比。

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

完整代码

import pandas as pd
# 1. 构造模拟数据:每一条记录代表一个进球
data = [
    # 球队, 进球方式
    ("A队", "运动战"),
    ("A队", "角球"),
    ("A队", "任意球"),
    ("A队", "运动战"),
    ("A队", "点球"),
    ("A队", "运动战"),
    ("A队", "角球"),
    ("A队", "运动战"),
    ("B队", "运动战"),
    ("B队", "运动战"),
    ("B队", "任意球"),
    ("B队", "角球"),
    ("B队", "运动战"),
    ("B队", "点球"),
]
df = pd.DataFrame(data, columns=["球队", "进球方式"])
# 2. 定义哪些属于定位球
set_piece_types = ["角球", "任意球", "点球"]
# 3. 计算整体定位球占比
total_goals = len(df)
set_piece_goals = df[df["进球方式"].isin(set_piece_types)].shape[0]
ratio = set_piece_goals / total_goals * 100
print(f"总进球数: {total_goals}")
print(f"定位球进球数: {set_piece_goals}")
print(f"定位球得分占比: {ratio:.2f}%\n")
# 4. 按球队分别统计占比
result = df.groupby("球队").apply(
    lambda g: pd.Series({
        "总进球": len(g),
        "定位球进球": g["进球方式"].isin(set_piece_types).sum(),
        "定位球占比(%)": round(
            g["进球方式"].isin(set_piece_types).sum() / len(g) * 100, 2
        ),
    })
)
print(result)
# 5. (可选)按进球方式分布统计
print("\n各进球方式数量:")
print(df["进球方式"].value_counts())

运行结果

总进球数: 14
定位球进球数: 6
定位球得分占比: 42.86%
     总进球  定位球进球  定位球占比(%)
球队                        
A队      8       4      50.00
B队      6       2      33.33
各进球方式数量:
运动战    8
角球     3
任意球    2
点球     2
Name: 进球方式, dtype: int64

关键思路说明

步骤 说明
数据准备 每条进球记录包含"球队"和"进球方式"
分类 用 isin() 筛选出角球、任意球、点球
计算占比 定位球数 / 总进球数 × 100%
分组统计 groupby 按球队细化分析
可视化(可选) 用饼图 / 柱状图展示更直观

加个可视化(可选)

import matplotlib.pyplot as plt
# 设置中文字体(Windows)
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
counts = df["进球方式"].value_counts()
labels = ["定位球" if x in set_piece_types else "运动战" for x in counts.index]
merged = {}
for lb, c in zip(labels, counts.values):
    merged[lb] = merged.get(lb, 0) + c
plt.pie(merged.values(), labels=merged.keys(), autopct="%1.2f%%", startangle=90)"进球方式占比")
plt.show()

如果换成真实数据

  • 从 CSV / Excel 读取:df = pd.read_csv("goals.csv")
  • 从 爬虫(如 Flashscore、懂球帝) 抓取比赛事件
  • 从 API(如 Football-Data.org) 拉取比赛数据

只要保证有一条字段能标识"进球方式",上面的逻辑就能直接套用。

需要我改成 读取 CSV 文件的版本,或者 加入可视化饼图 吗?

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