进攻三区传球成功率计算(Java案例)
你提到的"Java案例"表述比较笼统,我按足球数据分析中最常见的实现场景给你讲清楚:如何用 Java 计算"进攻三区传球成功率",如果你指的是某个具体开源项目(如 Sportradar、StatsBomb 解析库)里的某个类,可以补充项目名,我再帮你定位。

指标定义
- 进攻三区(Final Third):通常指进攻方向上前场 1/3 区域,即
x > 2/3 * 场地长度(以球门线为起点)。 - 传球成功率 = 进攻三区内成功传球次数 / 进攻三区内传球总次数 × 100%
数据模型
public class PassEvent {
private double startX; // 起点 x 坐标(0~105,米制)
private double startY;
private double endX; // 终点 x 坐标
private double endY;
private boolean successful; // 是否成功
private int teamId;
private int playerId;
// getter / setter 略
}
核心计算代码
import java.util.List;
public class FinalThirdPassAnalyzer {
/** 场地长度(米),进攻三区起点 = 2/3 * 长度 */
private static final double PITCH_LENGTH = 105.0;
private static final double FINAL_THIRD_START = PITCH_LENGTH * 2.0 / 3.0; // ≈70
/**
* 计算某队进攻三区传球成功率
*/
public static double calcFinalThirdPassSuccessRate(List<PassEvent> passes, int teamId) {
int total = 0;
int success = 0;
for (PassEvent p : passes) {
// 过滤:只看该队、且传球起点在进攻三区
if (p.getTeamId() != teamId) continue;
if (p.getStartX() < FINAL_THIRD_START) continue;
total++;
if (p.isSuccessful()) success++;
}
if (total == 0) return 0.0;
return (double) success / total * 100.0;
}
/** 可选:按球员统计 */
public static double calcPlayerFinalThirdPassRate(List<PassEvent> passes, int playerId) {
int total = 0, success = 0;
for (PassEvent p : passes) {
if (p.getPlayerId() != playerId) continue;
if (p.getStartX() < FINAL_THIRD_START) continue;
total++;
if (p.isSuccessful()) success++;
}
return total == 0 ? 0.0 : (double) success / total * 100.0;
}
}
调用示例
public class Main {
public static void main(String[] args) {
List<PassEvent> passes = loadPasses(); // 从数据源解析
int teamId = 100;
double rate = FinalThirdPassAnalyzer.calcFinalThirdPassSuccessRate(passes, teamId);
System.out.printf("球队 %d 进攻三区传球成功率: %.2f%%%n", teamId, rate);
}
}
几个容易踩的坑
- 坐标系方向要统一:坐标是否以"进攻方向"为准?StatsBomb 数据每半场坐标方向会翻转,需先归一化到同一进攻方向,否则进攻三区判断会错。
- "起点在进攻三区" vs "终点在进攻三区":行业惯例一般按传球起点是否在进攻三区来归类,需和你的需求确认。
- 传中/角球是否计入:部分分析会排除 set-piece(定位球)传球,需加事件类型过滤。
- 失败定义:传球被拦截、出界、被断都算失败;但"传球后队友丢球"不算传球失败。
- 分母为 0:要处理无传球样本时的除零问题(上面代码已处理)。
如果你说的"Java案例"是某本书/某课程/某个 GitHub 仓库里的具体案例(Java 数据分析实战》、某个体育数据平台 SDK),把项目名或类名发我,我可以帮你对照那段代码解释它的计算逻辑和结果。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播