如何分析 PHP 项目中双方射门转化率差异
在足球数据分析类 PHP 项目中,射门转化率(Shot Conversion Rate) 通常指:

转化率 = 进球数 / 射门数 × 100%
要对比双方(主队 vs 客队)的差异,可以从以下几个层面来做。
先看数据来源
通常数据库里会有这类表:
-- 比赛统计表 match_stats match_id | team_id | side | shots | shots_on_target | goals
或者原始事件表:
-- 事件表 match_events id | match_id | team_id | event_type | minute
- 如果只有汇总数据 → 直接算转化率
- 如果有事件流 → 更有价值(可算射正转化、定位球转化等)
SQL 层:一次性算出双方转化率
SELECT
match_id,
team_id,
side,
shots,
shots_on_target,
goals,
ROUND(goals / NULLIF(shots, 0) * 100, 2) AS conversion_rate,
ROUND(shots_on_target / NULLIF(shots, 0) * 100, 2) AS shot_accuracy
FROM match_stats
WHERE match_id = ?
ORDER BY side;
关键点:
NULLIF(shots, 0)防止除零 → 返回 NULL 而不是报错- 只算
shots > 0的比赛,避免无射门场次污染均值
PHP 层:计算并呈现差异
<?php
$stmt = $pdo->prepare("SELECT side, shots, goals FROM match_stats WHERE match_id = ?");
$stmt->execute([$matchId]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stats = [];
foreach ($rows as $r) {
$stats[$r['side']] = [
'shots' => (int)$r['shots'],
'goals' => (int)$r['goals'],
'rate' => $r['shots'] > 0
? round($r['goals'] / $r['shots'] * 100, 2)
: null,
];
}
$home = $stats['home'] ?? null;
$away = $stats['away'] ?? null;
if ($home && $away && $home['rate'] !== null && $away['rate'] !== null) {
$diff = $home['rate'] - $away['rate'];
echo "主队转化率: {$home['rate']}%<br>";
echo "客队转化率: {$away['rate']}%<br>";
echo "差异: " . ($diff >= 0 ? '+' : '') . "{$diff} 个百分点";
}
看“差异”的几种正确姿势
光看一场比赛的两个百分比意义不大,建议分三层:
单场差异
直接对比,如 主队 20% vs 客队 8%,差距 12 个百分点。
赛季平均差异(更稳)
SELECT
m.home_team_id,
m.away_team_id,
AVG(h.goals / NULLIF(h.shots,0)) * 100 AS home_avg,
AVG(a.goals / NULLIF(a.shots,0)) * 100 AS away_avg
FROM matches m
JOIN match_stats h ON h.match_id = m.id AND h.side = 'home'
JOIN match_stats a ON a.match_id = m.id AND a.side = 'away'
WHERE m.league_id = ?
GROUP BY m.home_team_id, m.away_team_id;
显著性 / 样本量检查
- 射门数 < 5 时,转化率波动极大(1 球就能让百分比跳 20%)
- 建议展示时附上
shots数,或加一个「样本不足」提示
function conversionLabel(?float $rate, int $shots): string {
if ($shots < 5) return '样本不足';
if ($rate === null) return '—';
return number_format($rate, 1) . '%';
}
推荐的展示维度(前端可视化)
| 指标 | 主队 | 客队 | 差异 |
|---|---|---|---|
| 射门数 | |||
| 射正数 | |||
| 进球 | |||
| 射门转化率 | Δ | ||
| 射正转化率 | Δ |
- 用条形图对比双率
- 差异用颜色区分(绿/红 or 正/负箭头)
- 括注样本量:
25% (5/20)
常见坑
- 除零:一定要
NULLIF或 PHP 里判断 - 点球算不算射门:需统一口径(很多数据源点球不计入 shots)
- 乌龙球:通常不计入球员射门、也不计入球队转化
- 加时赛:看要不要排除 90 分钟后事件
- 小数精度:比较时用
round()后再比,避免1+0.2类问题
如果你能贴一下你的表结构或现有查询代码,我可以直接帮你写出针对该项目的转化率对比逻辑(包括赛季级、单场级、以及显著性提示)。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播