如何用 Java 分析足球比赛"半场结束前攻势"
你提到"这个 Java 案例",但没有贴出代码,我先按常见的足球数据分析场景,给你一套通用的分析思路 + 可运行代码,你可以对照自己的案例替换字段。

核心分析逻辑
"半场结束前攻势"通常指 40-45分钟(或含补时) 这一段,判断进攻强度的指标:
| 指标 | 含义 |
|---|---|
| 射门次数 | 最直接 |
| 射正次数 | 质量 |
| 危险进攻 / 进攻三区触球 | 压制力 |
| 角球、定位球 | 施压信号 |
| 控球率变化 | 是否主动压上 |
| xG(预期进球) | 综合质量 |
关键点:要对比"这段时间"与"全场平均"或"对手半场其他时段",才能说"攻势强"。
示例代码(假设你的事件数据是 List
import java.util.*;
import java.util.stream.*;
public class HalfTimeAttackAnalyzer {
// 事件类型
enum EventType { SHOT, SHOT_ON_TARGET, CORNER, DANGEROUS_ATTACK, GOAL }
static class Event {
int minute; // 比赛分钟
int teamId; // 球队
EventType type;
double xg = 0; // 可选
Event(int m, int t, EventType ty, double x) {
minute = m; teamId = t; type = ty; xg = x;
}
}
/** 判断是否为"半场结束前"窗口:40' 到 45'+补时 */
static boolean isEndOfHalfWindow(int minute) {
return minute >= 40 && minute <= 45; // 若有补时数据可改为 <=47
}
public static void main(String[] args) {
List<Event> events = List.of(
new Event(12, 1, EventType.SHOT, 0.05),
new Event(41, 1, EventType.DANGEROUS_ATTACK, 0),
new Event(42, 1, EventType.SHOT, 0.08),
new Event(43, 1, EventType.CORNER, 0),
new Event(44, 1, EventType.SHOT_ON_TARGET, 0.15),
new Event(45, 2, EventType.SHOT, 0.03),
new Event(44, 2, EventType.DANGEROUS_ATTACK, 0)
);
analyze(events, 1); // 分析球队1
}
static void analyze(List<Event> events, int teamId) {
// 1. 半场结束前窗口事件
List<Event> endHalf = events.stream()
.filter(e -> e.teamId == teamId && isEndOfHalfWindow(e.minute))
.toList();
// 2. 全场事件(用于对比基准)
List<Event> all = events.stream()
.filter(e -> e.teamId == teamId)
.toList();
long shotsEnd = count(endHalf, EventType.SHOT, EventType.SHOT_ON_TARGET);
long onTarget = count(endHalf, EventType.SHOT_ON_TARGET);
long corners = count(endHalf, EventType.CORNER);
long dangerAtk = count(endHalf, EventType.DANGEROUS_ATTACK);
double xgEnd = endHalf.stream().mapToDouble(e -> e.xg).sum();
// 3. 全场每分钟均值(注意:全场按90分钟,半场窗口按5-7分钟)
int windowMinutes = 7; // 40-45含补时约5-7分钟
long shotsAll = count(all, EventType.SHOT, EventType.SHOT_ON_TARGET);
double shotsPerMinAll = shotsAll / 90.0;
double shotsPerMinEnd = shotsEnd / (double) windowMinutes;
System.out.println("=== 半场结束前(40'~45'+)攻势分析 ===");
System.out.println("射门次数: " + shotsEnd);
System.out.println("射正次数: " + onTarget);
System.out.println("角球: " + corners);
System.out.println("危险进攻: " + dangerAtk);
System.out.println("xG合计: " + String.format("%.2f", xgEnd));
System.out.printf("射门频率: 全场 %.2f 次/分, 末段 %.2f 次/分%n",
shotsPerMinAll, shotsPerMinEnd);
// 4. 结论判断
if (shotsPerMinEnd > shotsPerMinAll * 1.5) {
System.out.println("半场结束前攻势明显增强(>1.5倍全场均值)");
} else if (shotsPerMinEnd > shotsPerMinAll) {
System.out.println("半场结束前攻势略强于平均");
} else {
System.out.println("半场结束前攻势不明显");
}
}
static long count(List<Event> list, EventType... types) {
Set<EventType> set = Set.of(types);
return list.stream().filter(e -> set.contains(e.type)).count();
}
}
输出示例:
=== 半场结束前(40'~45'+)攻势分析 ===
射门次数: 2
射正次数: 1
角球: 1
危险进攻: 1
xG合计: 0.23
射门频率: 全场 0.03 次/分, 末段 0.29 次/分
半场结束前攻势明显增强(>1.5倍全场均值)
看结果的 4 个要点
- 绝对值 + 相对值一起看:光看"末段射了3脚"没意义,要对比全场均值 / 对手同时段。
- 窗口定义要一致:40-45 还是 35-45?含不含补时?不同口径结论会变。
- 区分主动 vs 被动:若末段攻势强但失球也集中,可能是压上被反击——要同时看对方反击数据。
- 样本量:单场5分钟样本太小,建议多场聚合(如该队本赛季所有半场末段)。
如果你能提供更多信息
请把你案例中的关键代码片段(数据模型、分析方法)贴出来,我可以:
- 指出它现在是怎么判断"攻势"的、有没有 bug;
- 帮你改成上面这种"窗口对比 + 阈值"的方式;
- 或适配你已有的字段命名。
你现在的案例里,事件数据是什么结构?是按分钟统计还是逐事件?告诉我我再具体化。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播