1043 lines
52 KiB
Markdown
1043 lines
52 KiB
Markdown
|
|
# 玩家档案数据全面分析与重组方案
|
||
|
|
|
||
|
|
> **文档日期**: 2026-01-28
|
||
|
|
> **适用范围**: YRTV Player Profile System
|
||
|
|
> **版本**: v1.0
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 目录
|
||
|
|
|
||
|
|
1. [完整数据清单](#1-完整数据清单)
|
||
|
|
2. [当前问题分析](#2-当前问题分析)
|
||
|
|
3. [重组方案](#3-重组方案)
|
||
|
|
4. [Schema优化建议](#4-schema优化建议)
|
||
|
|
5. [实施计划](#5-实施计划)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 1. 完整数据清单
|
||
|
|
|
||
|
|
### 1.1 数据仪表板区域 (Dashboard - Top Section)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源表 | UI位置 |
|
||
|
|
|---------|--------|---------|--------|---------|--------|
|
||
|
|
| Rating (评分) | `basic_avg_rating` | `AVG(rating)` | `basic_avg_rating` | `fact_match_players.rating` | Dashboard Card 1 |
|
||
|
|
| K/D Ratio (击杀比) | `basic_avg_kd` | `AVG(kd_ratio)` | `basic_avg_kd` | `fact_match_players.kd_ratio` | Dashboard Card 2 |
|
||
|
|
| ADR (场均伤害) | `basic_avg_adr` | `AVG(adr)` | `basic_avg_adr` | `fact_match_players.adr` | Dashboard Card 3 |
|
||
|
|
| KAST (贡献率) | `basic_avg_kast` | `AVG(kast)` | `basic_avg_kast` | `fact_match_players.kast` | Dashboard Card 4 |
|
||
|
|
|
||
|
|
### 1.2 图表区域 (Charts Section)
|
||
|
|
|
||
|
|
#### 1.2.1 六维雷达图 (Radar Chart)
|
||
|
|
|
||
|
|
| 维度名称 | 指标键 | 计算方法 | L3列名 | UI位置 |
|
||
|
|
|---------|--------|---------|--------|--------|
|
||
|
|
| Aim (BAT) | `score_bat` | 加权标准化: 25% Rating + 20% KD + 15% ADR + 10% DuelWin + 10% HighEloKD + 20% 3K | `score_bat` | Radar Axis 1 |
|
||
|
|
| Clutch (HPS) | `score_hps` | 加权标准化: 25% 1v3+ + 20% MatchPtWin + 20% ComebackKD + 15% PressureEntry + 20% Rating | `score_hps` | Radar Axis 2 |
|
||
|
|
| Pistol (PTL) | `score_ptl` | 加权标准化: 30% PistolKills + 30% PistolWin + 20% PistolKD + 20% PistolUtil | `score_ptl` | Radar Axis 3 |
|
||
|
|
| Defense (SIDE) | `score_tct` | 加权标准化: 35% CT_Rating + 35% T_Rating + 15% CT_FK + 15% T_FK | `score_tct` | Radar Axis 4 |
|
||
|
|
| Util (UTIL) | `score_util` | 加权标准化: 35% UsageRate + 25% NadeDmg + 20% FlashTime + 20% FlashEnemy | `score_util` | Radar Axis 5 |
|
||
|
|
| Stability (STA) | `score_sta` | 加权标准化: 30% (100-Volatility) + 30% LossRating + 20% WinRating + 10% TimeCorr | `score_sta` | Radar Axis 6 |
|
||
|
|
| Economy (ECO) | `score_eco` | 加权标准化: 50% Dmg/$1k + 50% EcoKPR | `score_eco` | Radar Axis 7 |
|
||
|
|
| Pace (PACE) | `score_pace` | 加权标准化: 50% (100-FirstContactTime) + 50% TradeKillRate | `score_pace` | Radar Axis 8 |
|
||
|
|
|
||
|
|
#### 1.2.2 趋势图 (Trend Chart)
|
||
|
|
|
||
|
|
| 数据项 | 来源 | 计算方法 | UI位置 |
|
||
|
|
|-------|------|---------|--------|
|
||
|
|
| Rating走势 | L2: `fact_match_players` | 按时间排序的`rating`值(最近20场) | Line Chart - Main Data |
|
||
|
|
| Carry线(1.5) | 静态基准线 | 固定值 1.5 | Line Chart - Reference |
|
||
|
|
| Normal线(1.0) | 静态基准线 | 固定值 1.0 | Line Chart - Reference |
|
||
|
|
| Poor线(0.6) | 静态基准线 | 固定值 0.6 | Line Chart - Reference |
|
||
|
|
|
||
|
|
### 1.3 详细数据面板 (Detailed Stats Panel)
|
||
|
|
|
||
|
|
#### 1.3.1 核心性能指标 (Core Performance)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI行位置 |
|
||
|
|
|---------|--------|---------|--------|--------|---------|
|
||
|
|
| Rating (评分) | `basic_avg_rating` | `AVG(rating)` | `basic_avg_rating` | `fact_match_players.rating` | Row 1, Col 1 |
|
||
|
|
| KD Ratio (击杀比) | `basic_avg_kd` | `AVG(kd_ratio)` | `basic_avg_kd` | `fact_match_players.kd_ratio` | Row 1, Col 2 |
|
||
|
|
| KAST (贡献率) | `basic_avg_kast` | `AVG(kast)` | `basic_avg_kast` | `fact_match_players.kast` | Row 1, Col 3 |
|
||
|
|
| RWS (每局得分) | `basic_avg_rws` | `AVG(rws)` | `basic_avg_rws` | `fact_match_players.rws` | Row 1, Col 4 |
|
||
|
|
| ADR (场均伤害) | `basic_avg_adr` | `AVG(adr)` | `basic_avg_adr` | `fact_match_players.adr` | Row 1, Col 5 |
|
||
|
|
|
||
|
|
#### 1.3.2 枪法与战斗能力 (Gunfight)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI行位置 |
|
||
|
|
|---------|--------|---------|--------|--------|---------|
|
||
|
|
| Avg HS (场均爆头) | `basic_avg_headshot_kills` | `SUM(headshot_count) / matches` | `basic_avg_headshot_kills` | `fact_match_players.headshot_count` | Row 2, Col 1 |
|
||
|
|
| HS Rate (爆头率) | `basic_headshot_rate` | `SUM(headshot_count) / SUM(kills)` | `basic_headshot_rate` | `fact_match_players.headshot_count, kills` | Row 2, Col 2 |
|
||
|
|
| Assists (场均助攻) | `basic_avg_assisted_kill` | `SUM(assisted_kill) / matches` | `basic_avg_assisted_kill` | `fact_match_players.assisted_kill` | Row 2, Col 3 |
|
||
|
|
| AWP Kills (狙击击杀) | `basic_avg_awp_kill` | `SUM(awp_kill) / matches` | `basic_avg_awp_kill` | `fact_match_players.awp_kill` | Row 2, Col 4 |
|
||
|
|
| Jumps (场均跳跃) | `basic_avg_jump_count` | `SUM(jump_count) / matches` | `basic_avg_jump_count` | `fact_match_players.jump_count` | Row 2, Col 5 |
|
||
|
|
| Knife Kills (场均刀杀) | `basic_avg_knife_kill` | `COUNT(knife_kills) / matches` | `basic_avg_knife_kill` | `fact_round_events` (weapon=knife) | Row 2, Col 6 |
|
||
|
|
| Zeus Kills (电击枪杀) | `basic_avg_zeus_kill` | `COUNT(zeus_kills) / matches` | `basic_avg_zeus_kill` | `fact_round_events` (weapon=zeus) | Row 2, Col 7 |
|
||
|
|
| Zeus Buy% (起电击枪) | `basic_zeus_pick_rate` | `AVG(has_zeus)` | `basic_zeus_pick_rate` | `fact_round_player_economy.has_zeus` | Row 2, Col 8 |
|
||
|
|
|
||
|
|
#### 1.3.3 目标控制 (Objective)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI行位置 |
|
||
|
|
|---------|--------|---------|--------|--------|---------|
|
||
|
|
| MVP (最有价值) | `basic_avg_mvps` | `SUM(mvp_count) / matches` | `basic_avg_mvps` | `fact_match_players.mvp_count` | Row 3, Col 1 |
|
||
|
|
| Plants (下包) | `basic_avg_plants` | `SUM(planted_bomb) / matches` | `basic_avg_plants` | `fact_match_players.planted_bomb` | Row 3, Col 2 |
|
||
|
|
| Defuses (拆包) | `basic_avg_defuses` | `SUM(defused_bomb) / matches` | `basic_avg_defuses` | `fact_match_players.defused_bomb` | Row 3, Col 3 |
|
||
|
|
| Flash Assist (闪光助攻) | `basic_avg_flash_assists` | `SUM(flash_assists) / matches` | `basic_avg_flash_assists` | `fact_match_players.flash_assists` | Row 3, Col 4 |
|
||
|
|
|
||
|
|
#### 1.3.4 开局能力 (Opening Impact)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI行位置 |
|
||
|
|
|---------|--------|---------|--------|--------|---------|
|
||
|
|
| First Kill (场均首杀) | `basic_avg_first_kill` | `SUM(first_kill) / matches` | `basic_avg_first_kill` | `fact_match_players.first_kill` | Row 4, Col 1 |
|
||
|
|
| First Death (场均首死) | `basic_avg_first_death` | `SUM(first_death) / matches` | `basic_avg_first_death` | `fact_match_players.first_death` | Row 4, Col 2 |
|
||
|
|
| FK Rate (首杀率) | `basic_first_kill_rate` | `FK / (FK + FD)` | `basic_first_kill_rate` | Calculated from FK/FD | Row 4, Col 3 |
|
||
|
|
| FD Rate (首死率) | `basic_first_death_rate` | `FD / (FK + FD)` | `basic_first_death_rate` | Calculated from FK/FD | Row 4, Col 4 |
|
||
|
|
|
||
|
|
#### 1.3.5 多杀表现 (Multi-Frag Performance)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI行位置 |
|
||
|
|
|---------|--------|---------|--------|--------|---------|
|
||
|
|
| 2K Rounds (双杀) | `basic_avg_kill_2` | `SUM(kill_2) / matches` | `basic_avg_kill_2` | `fact_match_players.kill_2` | Row 5, Col 1 |
|
||
|
|
| 3K Rounds (三杀) | `basic_avg_kill_3` | `SUM(kill_3) / matches` | `basic_avg_kill_3` | `fact_match_players.kill_3` | Row 5, Col 2 |
|
||
|
|
| 4K Rounds (四杀) | `basic_avg_kill_4` | `SUM(kill_4) / matches` | `basic_avg_kill_4` | `fact_match_players.kill_4` | Row 5, Col 3 |
|
||
|
|
| 5K Rounds (五杀) | `basic_avg_kill_5` | `SUM(kill_5) / matches` | `basic_avg_kill_5` | `fact_match_players.kill_5` | Row 5, Col 4 |
|
||
|
|
|
||
|
|
#### 1.3.6 特殊击杀 (Special Stats)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI行位置 |
|
||
|
|
|---------|--------|---------|--------|--------|---------|
|
||
|
|
| Perfect Kills (无伤杀) | `basic_avg_perfect_kill` | `SUM(perfect_kill) / matches` | `basic_avg_perfect_kill` | `fact_match_players.perfect_kill` | Row 6, Col 1 |
|
||
|
|
| Revenge Kills (复仇杀) | `basic_avg_revenge_kill` | `SUM(revenge_kill) / matches` | `basic_avg_revenge_kill` | `fact_match_players.revenge_kill` | Row 6, Col 2 |
|
||
|
|
| 交火补枪率 | `trade_kill_percentage` | `TradeKills / TotalKills * 100` | N/A (计算自L2) | `fact_round_events` (self-join) | Row 6, Col 3 |
|
||
|
|
|
||
|
|
### 1.4 特殊击杀与时机分析 (Special Kills & Timing)
|
||
|
|
|
||
|
|
#### 1.4.1 战术智商击杀 (Special Kill Scenarios)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 |
|
||
|
|
|---------|--------|---------|--------|--------|--------|
|
||
|
|
| Wallbang Kills (穿墙) | `special_wallbang_kills` | `COUNT(is_wallbang=1)` | `special_wallbang_kills` | `fact_round_events.is_wallbang` | Special Grid 1 |
|
||
|
|
| Wallbang Rate (穿墙率) | `special_wallbang_rate` | `WallbangKills / TotalKills` | `special_wallbang_rate` | Calculated | Special Grid 2 |
|
||
|
|
| Smoke Kills (穿烟) | `special_smoke_kills` | `COUNT(is_through_smoke=1)` | `special_smoke_kills` | `fact_round_events.is_through_smoke` | Special Grid 3 |
|
||
|
|
| Smoke Kill Rate (穿烟率) | `special_smoke_kill_rate` | `SmokeKills / TotalKills` | `special_smoke_kill_rate` | Calculated | Special Grid 4 |
|
||
|
|
| Blind Kills (致盲击杀) | `special_blind_kills` | `COUNT(is_blind=1)` | `special_blind_kills` | `fact_round_events.is_blind` | Special Grid 5 |
|
||
|
|
| Blind Kill Rate (致盲率) | `special_blind_kill_rate` | `BlindKills / TotalKills` | `special_blind_kill_rate` | Calculated | Special Grid 6 |
|
||
|
|
| NoScope Kills (盲狙) | `special_noscope_kills` | `COUNT(is_noscope=1)` | `special_noscope_kills` | `fact_round_events.is_noscope` | Special Grid 7 |
|
||
|
|
| NoScope Rate (盲狙率) | `special_noscope_rate` | `NoScopeKills / AWPKills` | `special_noscope_rate` | Calculated | Special Grid 8 |
|
||
|
|
| High IQ Score (智商评分) | `special_high_iq_score` | 加权评分(0-100): Wallbang*3 + Smoke*2 + Blind*1.5 + NoScope*2 | `special_high_iq_score` | Calculated | Special Grid 9 |
|
||
|
|
|
||
|
|
#### 1.4.2 回合节奏分析 (Round Timing Analysis)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 |
|
||
|
|
|---------|--------|---------|--------|--------|--------|
|
||
|
|
| Early Kills (前30s) | `timing_early_kills` | `COUNT(event_time < 30)` | `timing_early_kills` | `fact_round_events.event_time` | Timing Grid 1 |
|
||
|
|
| Mid Kills (30-60s) | `timing_mid_kills` | `COUNT(30 <= event_time < 60)` | `timing_mid_kills` | `fact_round_events.event_time` | Timing Grid 2 |
|
||
|
|
| Late Kills (60s+) | `timing_late_kills` | `COUNT(event_time >= 60)` | `timing_late_kills` | `fact_round_events.event_time` | Timing Grid 3 |
|
||
|
|
| Avg Kill Time (平均击杀时间) | `timing_avg_kill_time` | `AVG(event_time)` for kills | `timing_avg_kill_time` | `fact_round_events.event_time` | Timing Grid 4 |
|
||
|
|
| Early Aggression (前期进攻) | `timing_early_aggression_rate` | `EarlyKills / TotalKills` | `timing_early_aggression_rate` | Calculated | Timing Grid 5 |
|
||
|
|
| Early Deaths (前30s死) | `timing_early_deaths` | `COUNT(death_time < 30)` | `timing_early_deaths` | `fact_round_events.event_time` | Timing Grid 6 |
|
||
|
|
| Mid Deaths (30-60s死) | `timing_mid_deaths` | `COUNT(30 <= death_time < 60)` | `timing_mid_deaths` | `fact_round_events.event_time` | Timing Grid 7 |
|
||
|
|
| Late Deaths (60s+死) | `timing_late_deaths` | `COUNT(death_time >= 60)` | `timing_late_deaths` | `fact_round_events.event_time` | Timing Grid 8 |
|
||
|
|
| Avg Death Time (平均死亡时间) | `timing_avg_death_time` | `AVG(event_time)` for deaths | `timing_avg_death_time` | `fact_round_events.event_time` | Timing Grid 9 |
|
||
|
|
| Early Death Rate (前期死亡) | `timing_early_death_rate` | `EarlyDeaths / TotalDeaths` | `timing_early_death_rate` | Calculated | Timing Grid 10 |
|
||
|
|
|
||
|
|
### 1.5 深层能力维度 (Deep Capabilities)
|
||
|
|
|
||
|
|
#### 1.5.1 稳定性与枪法 (STA & BAT)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 |
|
||
|
|
|---------|--------|---------|--------|--------|--------|
|
||
|
|
| Last 30 Rating (近30场) | `sta_last_30_rating` | `AVG(rating)` for last 30 matches | `sta_last_30_rating` | `fact_match_players.rating` | Deep Section 1 |
|
||
|
|
| Win Rating (胜局) | `sta_win_rating` | `AVG(rating WHERE is_win=1)` | `sta_win_rating` | `fact_match_players.rating, is_win` | Deep Section 2 |
|
||
|
|
| Loss Rating (败局) | `sta_loss_rating` | `AVG(rating WHERE is_win=0)` | `sta_loss_rating` | `fact_match_players.rating, is_win` | Deep Section 3 |
|
||
|
|
| Volatility (波动) | `sta_rating_volatility` | `STDDEV(rating)` for last 10 matches | `sta_rating_volatility` | `fact_match_players.rating` | Deep Section 4 |
|
||
|
|
| Time Corr (耐力) | `sta_time_rating_corr` | `CORR(duration, rating)` | `sta_time_rating_corr` | `fact_matches.duration, rating` | Deep Section 5 |
|
||
|
|
| High Elo KD Diff (高分抗压) | `bat_kd_diff_high_elo` | `AVG(kd WHERE elo > player_avg_elo)` | `bat_kd_diff_high_elo` | `fact_match_teams.group_origin_elo` | Deep Section 6 |
|
||
|
|
| Duel Win% (对枪胜率) | `bat_avg_duel_win_rate` | `entry_kills / (entry_kills + entry_deaths)` | `bat_avg_duel_win_rate` | `fact_match_players.entry_kills/deaths` | Deep Section 7 |
|
||
|
|
|
||
|
|
#### 1.5.2 残局与手枪 (HPS & PTL)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 |
|
||
|
|
|---------|--------|---------|--------|--------|--------|
|
||
|
|
| Avg 1v1 (场均1v1) | `hps_clutch_win_rate_1v1` | `SUM(clutch_1v1) / matches` | `hps_clutch_win_rate_1v1` | `fact_match_players.clutch_1v1` | Deep Section 8 |
|
||
|
|
| Avg 1v3+ (场均1v3+) | `hps_clutch_win_rate_1v3_plus` | `SUM(clutch_1v3+1v4+1v5) / matches` | `hps_clutch_win_rate_1v3_plus` | `fact_match_players.clutch_1v3/4/5` | Deep Section 9 |
|
||
|
|
| Match Pt Win% (赛点胜率) | `hps_match_point_win_rate` | Win rate when either team at 12 or 15 | `hps_match_point_win_rate` | `fact_rounds` (score calculation) | Deep Section 10 |
|
||
|
|
| Pressure Entry (逆风首杀) | `hps_pressure_entry_rate` | `entry_kills / rounds` in losing matches | `hps_pressure_entry_rate` | `fact_match_players` (is_win=0) | Deep Section 11 |
|
||
|
|
| Comeback KD (翻盘KD) | `hps_comeback_kd_diff` | KD差值当队伍落后4+回合 | `hps_comeback_kd_diff` | `fact_round_events + fact_rounds` | Deep Section 12 |
|
||
|
|
| Loss Streak KD (连败KD) | `hps_losing_streak_kd_diff` | KD差值当连败3+回合 | `hps_losing_streak_kd_diff` | `fact_round_events + fact_rounds` | Deep Section 13 |
|
||
|
|
| Pistol Kills (手枪击杀) | `ptl_pistol_kills` | `COUNT(kills WHERE round IN (1,13))` / matches | `ptl_pistol_kills` | `fact_round_events` (round 1,13) | Deep Section 14 |
|
||
|
|
| Pistol Win% (手枪胜率) | `ptl_pistol_win_rate` | Win rate for pistol rounds | `ptl_pistol_win_rate` | `fact_rounds` (round 1,13) | Deep Section 15 |
|
||
|
|
| Pistol KD (手枪KD) | `ptl_pistol_kd` | `pistol_kills / pistol_deaths` | `ptl_pistol_kd` | `fact_round_events` (round 1,13) | Deep Section 16 |
|
||
|
|
| Pistol Util Eff (手枪道具) | `ptl_pistol_util_efficiency` | Headshot rate in pistol rounds | `ptl_pistol_util_efficiency` | `fact_round_events` (is_headshot) | Deep Section 17 |
|
||
|
|
|
||
|
|
#### 1.5.3 道具使用 (UTIL)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 |
|
||
|
|
|---------|--------|---------|--------|--------|--------|
|
||
|
|
| Usage Rate (道具频率) | `util_usage_rate` | `(flash+smoke+molotov+he+decoy) / rounds * 100` | `util_usage_rate` | `fact_match_players.util_*_usage` | Deep Section 18 |
|
||
|
|
| Nade Dmg (雷火伤) | `util_avg_nade_dmg` | `SUM(throw_harm) / matches` | `util_avg_nade_dmg` | `fact_match_players.throw_harm` | Deep Section 19 |
|
||
|
|
| Flash Time (致盲时间) | `util_avg_flash_time` | `SUM(flash_time) / matches` | `util_avg_flash_time` | `fact_match_players.flash_time` | Deep Section 20 |
|
||
|
|
| Flash Enemy (致盲人数) | `util_avg_flash_enemy` | `SUM(flash_enemy) / matches` | `util_avg_flash_enemy` | `fact_match_players.flash_enemy` | Deep Section 21 |
|
||
|
|
|
||
|
|
#### 1.5.4 经济与节奏 (ECO & PACE)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 |
|
||
|
|
|---------|--------|---------|--------|--------|--------|
|
||
|
|
| Dmg/$1k (性价比) | `eco_avg_damage_per_1k` | `total_damage / (total_equipment / 1000)` | `eco_avg_damage_per_1k` | `fact_round_player_economy` | Deep Section 22 |
|
||
|
|
| Eco KPR (经济局KPR) | `eco_rating_eco_rounds` | Kills per round when equipment < $2000 | `eco_rating_eco_rounds` | `fact_round_player_economy` | Deep Section 23 |
|
||
|
|
| Eco KD (经济局KD) | `eco_kd_ratio` | KD in eco rounds | `eco_kd_ratio` | `fact_round_player_economy` | Deep Section 24 |
|
||
|
|
| Eco Rounds (经济局数) | `eco_avg_rounds` | `COUNT(equipment < 2000) / matches` | `eco_avg_rounds` | `fact_round_player_economy` | Deep Section 25 |
|
||
|
|
| First Contact (首肯时间) | `pace_avg_time_to_first_contact` | `AVG(MIN(event_time))` per round | `pace_avg_time_to_first_contact` | `fact_round_events.event_time` | Deep Section 26 |
|
||
|
|
| Trade Kill% (补枪率) | `pace_trade_kill_rate` | `TradeKills / TotalKills` (5s window) | `pace_trade_kill_rate` | `fact_round_events` (self-join) | Deep Section 27 |
|
||
|
|
| Opening Time (首杀时间) | `pace_opening_kill_time` | `AVG(first_kill_time)` per round | `pace_opening_kill_time` | `fact_round_events.event_time` | Deep Section 28 |
|
||
|
|
| Avg Life (存活时间) | `pace_avg_life_time` | `AVG(death_time OR round_end)` | `pace_avg_life_time` | `fact_round_events + fact_rounds` | Deep Section 29 |
|
||
|
|
|
||
|
|
#### 1.5.5 回合动态 (ROUND Dynamics)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 |
|
||
|
|
|---------|--------|---------|--------|--------|--------|
|
||
|
|
| Kill Early (前30秒击杀) | `rd_phase_kill_early_share` | Early kills / Total kills | `rd_phase_kill_early_share` | `fact_round_events.event_time` | Deep Section 30 |
|
||
|
|
| Kill Mid (30-60秒击杀) | `rd_phase_kill_mid_share` | Mid kills / Total kills | `rd_phase_kill_mid_share` | `fact_round_events.event_time` | Deep Section 31 |
|
||
|
|
| Kill Late (60秒后击杀) | `rd_phase_kill_late_share` | Late kills / Total kills | `rd_phase_kill_late_share` | `fact_round_events.event_time` | Deep Section 32 |
|
||
|
|
| Death Early (前30秒死亡) | `rd_phase_death_early_share` | Early deaths / Total deaths | `rd_phase_death_early_share` | `fact_round_events.event_time` | Deep Section 33 |
|
||
|
|
| Death Mid (30-60秒死亡) | `rd_phase_death_mid_share` | Mid deaths / Total deaths | `rd_phase_death_mid_share` | `fact_round_events.event_time` | Deep Section 34 |
|
||
|
|
| Death Late (60秒后死亡) | `rd_phase_death_late_share` | Late deaths / Total deaths | `rd_phase_death_late_share` | `fact_round_events.event_time` | Deep Section 35 |
|
||
|
|
| FirstDeath Win% (首死后胜率) | `rd_firstdeath_team_first_death_win_rate` | Win rate when team loses first blood | `rd_firstdeath_team_first_death_win_rate` | `fact_round_events + fact_rounds` | Deep Section 36 |
|
||
|
|
| Invalid Death% (无效死亡) | `rd_invalid_death_rate` | Deaths with 0 kills & 0 flash assists | `rd_invalid_death_rate` | `fact_round_events` | Deep Section 37 |
|
||
|
|
| Pressure KPR (落后≥3) | `rd_pressure_kpr_ratio` | KPR when down 3+ rounds / Normal KPR | `rd_pressure_kpr_ratio` | `fact_rounds + fact_round_events` | Deep Section 38 |
|
||
|
|
| MatchPt KPR (赛点放大) | `rd_matchpoint_kpr_ratio` | KPR at match point / Normal KPR | `rd_matchpoint_kpr_ratio` | `fact_rounds + fact_round_events` | Deep Section 39 |
|
||
|
|
| Trade Resp (10s响应) | `rd_trade_response_10s_rate` | Success rate trading teammate death in 10s | `rd_trade_response_10s_rate` | `fact_round_events` (self-join) | Deep Section 40 |
|
||
|
|
| Pressure Perf (Leetify) | `rd_pressure_perf_ratio` | Leetify perf when down 3+ / Normal | `rd_pressure_perf_ratio` | `fact_round_player_economy` | Deep Section 41 |
|
||
|
|
| MatchPt Perf (Leetify) | `rd_matchpoint_perf_ratio` | Leetify perf at match point / Normal | `rd_matchpoint_perf_ratio` | `fact_round_player_economy` | Deep Section 42 |
|
||
|
|
| Comeback KillShare (追分) | `rd_comeback_kill_share` | Player's kills / Team kills in comeback rounds | `rd_comeback_kill_share` | `fact_round_events + fact_rounds` | Deep Section 43 |
|
||
|
|
| Map Stability (地图稳定) | `map_stability_coef` | `AVG(|map_rating - player_avg|)` | `map_stability_coef` | `fact_match_players` (by map) | Deep Section 44 |
|
||
|
|
|
||
|
|
#### 1.5.6 残局与多杀 (SPECIAL - Clutch & Multi)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 |
|
||
|
|
|---------|--------|---------|--------|--------|--------|
|
||
|
|
| 1v1 Win% (1v1胜率) | `clutch_rate_1v1` | `clutch_1v1 / attempts_1v1` | N/A (L2) | `fact_match_players.clutch_1v1, end_1v1` | Deep Section 45 |
|
||
|
|
| 1v2 Win% (1v2胜率) | `clutch_rate_1v2` | `clutch_1v2 / attempts_1v2` | N/A (L2) | `fact_match_players.clutch_1v2, end_1v2` | Deep Section 46 |
|
||
|
|
| 1v3 Win% (1v3胜率) | `clutch_rate_1v3` | `clutch_1v3 / attempts_1v3` | N/A (L2) | `fact_match_players.clutch_1v3, end_1v3` | Deep Section 47 |
|
||
|
|
| 1v4 Win% (1v4胜率) | `clutch_rate_1v4` | `clutch_1v4 / attempts_1v4` | N/A (L2) | `fact_match_players.clutch_1v4, end_1v4` | Deep Section 48 |
|
||
|
|
| 1v5 Win% (1v5胜率) | `clutch_rate_1v5` | `clutch_1v5 / attempts_1v5` | N/A (L2) | `fact_match_players.clutch_1v5, end_1v5` | Deep Section 49 |
|
||
|
|
| Multi-K Rate (多杀率) | `total_multikill_rate` | `(2K+3K+4K+5K) / total_rounds` | N/A (L2) | `fact_match_players.kill_2/3/4/5` | Deep Section 50 |
|
||
|
|
| Multi-A Rate (多助率) | `total_multiassist_rate` | `(many_assists_cnt2/3/4/5) / rounds` | N/A (L2) | `fact_match_players.many_assists_cnt*` | Deep Section 51 |
|
||
|
|
|
||
|
|
#### 1.5.7 阵营偏好 (SIDE Preference)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 |
|
||
|
|
|---------|--------|---------|--------|--------|--------|
|
||
|
|
| Rating (T-Side) | `side_rating_t` | `AVG(rating2)` from T table | `side_rating_t` | `fact_match_players_t.rating2` | Deep Section 52 |
|
||
|
|
| Rating (CT-Side) | `side_rating_ct` | `AVG(rating2)` from CT table | `side_rating_ct` | `fact_match_players_ct.rating2` | Deep Section 53 |
|
||
|
|
| KD Ratio (T) | `side_kd_t` | `SUM(kills) / SUM(deaths)` T-side | `side_kd_t` | `fact_match_players_t.kills/deaths` | Deep Section 54 |
|
||
|
|
| KD Ratio (CT) | `side_kd_ct` | `SUM(kills) / SUM(deaths)` CT-side | `side_kd_ct` | `fact_match_players_ct.kills/deaths` | Deep Section 55 |
|
||
|
|
| Win Rate (T) | `side_win_rate_t` | `AVG(is_win)` T-side | `side_win_rate_t` | `fact_match_players_t.is_win` | Deep Section 56 |
|
||
|
|
| Win Rate (CT) | `side_win_rate_ct` | `AVG(is_win)` CT-side | `side_win_rate_ct` | `fact_match_players_ct.is_win` | Deep Section 57 |
|
||
|
|
| First Kill Rate (T) | `side_first_kill_rate_t` | `FK / rounds` T-side | `side_first_kill_rate_t` | `fact_match_players_t.first_kill` | Deep Section 58 |
|
||
|
|
| First Kill Rate (CT) | `side_first_kill_rate_ct` | `FK / rounds` CT-side | `side_first_kill_rate_ct` | `fact_match_players_ct.first_kill` | Deep Section 59 |
|
||
|
|
| First Death Rate (T) | `side_first_death_rate_t` | `FD / rounds` T-side | `side_first_death_rate_t` | `fact_match_players_t.first_death` | Deep Section 60 |
|
||
|
|
| First Death Rate (CT) | `side_first_death_rate_ct` | `FD / rounds` CT-side | `side_first_death_rate_ct` | `fact_match_players_ct.first_death` | Deep Section 61 |
|
||
|
|
| KAST (T) | `side_kast_t` | `AVG(kast)` T-side | `side_kast_t` | `fact_match_players_t.kast` | Deep Section 62 |
|
||
|
|
| KAST (CT) | `side_kast_ct` | `AVG(kast)` CT-side | `side_kast_ct` | `fact_match_players_ct.kast` | Deep Section 63 |
|
||
|
|
| RWS (T) | `side_rws_t` | `AVG(rws)` T-side | `side_rws_t` | `fact_match_players_t.rws` | Deep Section 64 |
|
||
|
|
| RWS (CT) | `side_rws_ct` | `AVG(rws)` CT-side | `side_rws_ct` | `fact_match_players_ct.rws` | Deep Section 65 |
|
||
|
|
| Headshot Rate (T) | `side_headshot_rate_t` | `HS / kills` T-side | `side_headshot_rate_t` | `fact_match_players_t.headshot_count/kills` | Deep Section 66 |
|
||
|
|
| Headshot Rate (CT) | `side_headshot_rate_ct` | `HS / kills` CT-side | `side_headshot_rate_ct` | `fact_match_players_ct.headshot_count/kills` | Deep Section 67 |
|
||
|
|
|
||
|
|
#### 1.5.8 组排与分层 (Party & Stratification)
|
||
|
|
|
||
|
|
| 显示标签 | 指标键 | 计算方法 | L3列名 | L2来源 | UI位置 |
|
||
|
|
|---------|--------|---------|--------|--------|--------|
|
||
|
|
| Solo Win% (单排胜率) | `party_1_win_rate` | Win rate in solo queue | `party_1_win_rate` | `fact_match_players` (party_size=1) | Deep Section 68 |
|
||
|
|
| Solo Rating (单排分) | `party_1_rating` | `AVG(rating)` in solo | `party_1_rating` | `fact_match_players` (party_size=1) | Deep Section 69 |
|
||
|
|
| Solo ADR (单排伤) | `party_1_adr` | `AVG(adr)` in solo | `party_1_adr` | `fact_match_players` (party_size=1) | Deep Section 70 |
|
||
|
|
| Duo Win% (双排胜率) | `party_2_win_rate` | Win rate in duo | `party_2_win_rate` | `fact_match_players` (party_size=2) | Deep Section 71 |
|
||
|
|
| ... (party_2~5 follow same pattern) | ... | ... | ... | ... | Deep Section 72-79 |
|
||
|
|
| Carry Rate (>1.5) | `rating_dist_carry_rate` | `COUNT(rating>1.5) / total` | `rating_dist_carry_rate` | `fact_match_players.rating` | Deep Section 80 |
|
||
|
|
| Normal Rate (1.0-1.5) | `rating_dist_normal_rate` | `COUNT(1.0<=rating<1.5) / total` | `rating_dist_normal_rate` | `fact_match_players.rating` | Deep Section 81 |
|
||
|
|
| Sacrifice Rate (0.6-1.0) | `rating_dist_sacrifice_rate` | `COUNT(0.6<=rating<1.0) / total` | `rating_dist_sacrifice_rate` | `fact_match_players.rating` | Deep Section 82 |
|
||
|
|
| Sleeping Rate (<0.6) | `rating_dist_sleeping_rate` | `COUNT(rating<0.6) / total` | `rating_dist_sleeping_rate` | `fact_match_players.rating` | Deep Section 83 |
|
||
|
|
| <1200 Rating | `elo_lt1200_rating` | `AVG(rating)` vs opponents <1200 ELO | `elo_lt1200_rating` | `fact_match_teams.group_origin_elo` | Deep Section 84 |
|
||
|
|
| 1200-1400 Rating | `elo_1200_1400_rating` | `AVG(rating)` vs 1200-1400 ELO | `elo_1200_1400_rating` | `fact_match_teams.group_origin_elo` | Deep Section 85 |
|
||
|
|
| ... (elo_* follow same pattern) | ... | ... | ... | ... | Deep Section 86-89 |
|
||
|
|
|
||
|
|
### 1.6 附加数据
|
||
|
|
|
||
|
|
#### 1.6.1 Phase Split (回合阶段分布)
|
||
|
|
|
||
|
|
- **数据来源**: `rd_phase_kill_*_share` 和 `rd_phase_death_*_share` 系列
|
||
|
|
- **UI呈现**: 横条图展示 Total/T/CT 的击杀/死亡在 Early/Mid/Late 的分布
|
||
|
|
- **计算**: 时间段划分(0-30s/30-60s/60s+),分T/CT/Overall统计
|
||
|
|
|
||
|
|
#### 1.6.2 Top Weapons (常用武器)
|
||
|
|
|
||
|
|
- **数据来源**: `rd_weapon_top_json` (JSON字段)
|
||
|
|
- **包含信息**: weapon, kills, hs_rate, price, category, share
|
||
|
|
- **UI呈现**: 表格展示前5常用武器及其数据
|
||
|
|
|
||
|
|
#### 1.6.3 Round Type Split (回合类型表现)
|
||
|
|
|
||
|
|
- **数据来源**: `rd_roundtype_split_json` (JSON字段)
|
||
|
|
- **包含信息**: pistol/eco/rifle/fullbuy/overtime的KPR和Perf
|
||
|
|
- **UI呈现**: 表格展示不同经济类型回合的表现
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 2. 当前问题分析
|
||
|
|
|
||
|
|
### 2.1 命名不一致问题
|
||
|
|
|
||
|
|
| 问题类别 | 具体表现 | 影响 |
|
||
|
|
|---------|---------|------|
|
||
|
|
| **前缀混乱** | `basic_*`, `side_*`, `util_*`, `eco_*`, `pace_*`, `rd_*`, `special_*`, `timing_*` | 无法从名称直观判断归属维度 |
|
||
|
|
| **冗余命名** | `basic_avg_headshot_kills` vs `basic_headshot_rate` | 一个是总数,一个是比率,命名规则不统一 |
|
||
|
|
| **缩写不统一** | `FK` vs `First Kill`, `HS` vs `Headshot`, `Avg` vs `Average` | 可读性差 |
|
||
|
|
| **中英混杂** | 数据库用英文,但UI标签用中文 | 维护困难 |
|
||
|
|
|
||
|
|
### 2.2 数据重复与冗余
|
||
|
|
|
||
|
|
| 重复类型 | 示例 | 问题 |
|
||
|
|
|---------|------|------|
|
||
|
|
| **同一指标多处展示** | `basic_avg_rating`同时出现在Dashboard和Detailed Panel | 数据冗余展示 |
|
||
|
|
| **相似指标并存** | `timing_early_aggression_rate` vs `rd_phase_kill_early_share` | 实际都是"前30秒击杀占比" |
|
||
|
|
| **计算结果重复** | `basic_first_kill_rate` 和 `basic_first_death_rate` 必然互补(FK+FD=100%) | 可简化为一个指标 |
|
||
|
|
| **阵营数据冗余** | T/CT所有指标都有两套,但很多时候差异不大 | UI拥挤,核心信息淹没 |
|
||
|
|
|
||
|
|
### 2.3 分类逻辑混乱
|
||
|
|
|
||
|
|
| 混乱表现 | 示例 | 理想归类 |
|
||
|
|
|---------|------|---------|
|
||
|
|
| **相关指标分散** | 首杀/首死在"Opening Impact",但首杀时间在"PACE - Tempo" | 应统一归入"开局影响力" |
|
||
|
|
| **维度交叉** | `hps_pressure_entry_rate`(逆风首杀)既属于HPS,又涉及Opening | 应明确主维度 |
|
||
|
|
| **深浅不分** | `basic_avg_kd`在详细面板,但`eco_kd_ratio`在深层能力 | 同类指标应在同一层级 |
|
||
|
|
| **特殊指标孤立** | Special Kills单独一个Section,但Knife/Zeus在Combat | 应统一归入"特殊击杀类" |
|
||
|
|
|
||
|
|
### 2.4 UI展示问题
|
||
|
|
|
||
|
|
| 问题 | 描述 | 影响 |
|
||
|
|
|-----|------|------|
|
||
|
|
| **信息密度过高** | Detailed Stats Panel有80+指标紧密排列 | 用户认知负担重,难以聚焦 |
|
||
|
|
| **缺少层次** | 所有指标平铺,无主次之分 | 核心数据不突出 |
|
||
|
|
| **视觉疲劳** | 长列表滚动,无分组视觉分隔 | 易忽略关键信息 |
|
||
|
|
| **无引导逻辑** | 用户不知道该看哪些数据 | 降低产品价值 |
|
||
|
|
|
||
|
|
### 2.5 Schema设计问题
|
||
|
|
|
||
|
|
| 问题 | 描述 | 改进方向 |
|
||
|
|
|-----|------|---------|
|
||
|
|
| **列名过长** | `rd_phase_kill_early_share_ct` 35字符 | 可缩短为`phase_k_early_ct` |
|
||
|
|
| **类型不统一** | Rate有的存0-1,有的存0-100 | 统一为0-1,前端格式化 |
|
||
|
|
| **缺少索引提示** | L3表无明确的"核心指标"标识 | 可增加`is_core`标记列 |
|
||
|
|
| **JSON滥用** | `rd_weapon_top_json`等,查询不便 | 考虑拆表或使用结构化字段 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 3. 重组方案
|
||
|
|
|
||
|
|
### 3.1 新分类体系
|
||
|
|
|
||
|
|
基于**游戏功能维度**和**用户关注度**,建议采用三层结构:
|
||
|
|
|
||
|
|
#### **L1: 核心面板 (Core Dashboard)** - 4个关键指标
|
||
|
|
- Rating (综合评分)
|
||
|
|
- K/D Ratio (击杀效率)
|
||
|
|
- ADR (伤害输出)
|
||
|
|
- KAST (团队贡献)
|
||
|
|
|
||
|
|
#### **L2: 六维雷达 (6D Capabilities)** - 战术风格画像
|
||
|
|
- **Combat (战斗力)**: 枪法、对枪、爆头
|
||
|
|
- **Opening (开局影响)**: 首杀、首死、进攻节奏
|
||
|
|
- **Clutch (残局能力)**: 1vX、高压表现
|
||
|
|
- **Utility (道具运用)**: 闪光、投掷、战术配合
|
||
|
|
- **Economy (经济管理)**: 性价比、经济局表现
|
||
|
|
- **Stability (稳定性)**: 波动、适应、抗压
|
||
|
|
|
||
|
|
#### **L3: 详细统计 (Detailed Stats)** - 按功能分组
|
||
|
|
|
||
|
|
##### **Group 1: 枪法与交火 (Gunfight)**
|
||
|
|
- 爆头率、爆头数
|
||
|
|
- 对枪胜率
|
||
|
|
- AWP击杀
|
||
|
|
- 补枪成功率
|
||
|
|
|
||
|
|
##### **Group 2: 开局影响力 (Opening Impact)**
|
||
|
|
- 首杀数/率
|
||
|
|
- 首死数/率
|
||
|
|
- 首接触时间
|
||
|
|
- 开局击杀时间
|
||
|
|
|
||
|
|
##### **Group 3: 多杀表现 (Multi-Frag Performance)**
|
||
|
|
- 2K/3K/4K/5K频率
|
||
|
|
- 多杀占比
|
||
|
|
|
||
|
|
##### **Group 4: 残局能力 (Clutch Capability)**
|
||
|
|
- 1v1/1v2/1v3/1v4/1v5胜率
|
||
|
|
- 残局尝试次数
|
||
|
|
|
||
|
|
##### **Group 5: 特殊能力 (Special Stats)**
|
||
|
|
- 穿墙/穿烟/致盲/盲狙击杀
|
||
|
|
- 刀杀/电击枪
|
||
|
|
- 无伤击杀/复仇击杀
|
||
|
|
- 高IQ评分
|
||
|
|
|
||
|
|
##### **Group 6: 战术贡献 (Tactical Contribution)**
|
||
|
|
- MVP次数
|
||
|
|
- 下包/拆包
|
||
|
|
- 闪光助攻
|
||
|
|
- 道具使用频率
|
||
|
|
- 道具伤害
|
||
|
|
|
||
|
|
##### **Group 7: 经济管理 (Economy)**
|
||
|
|
- 伤害性价比
|
||
|
|
- 经济局KD/KPR
|
||
|
|
- 经济局频率
|
||
|
|
- 装备价值分布
|
||
|
|
|
||
|
|
##### **Group 8: 节奏控制 (Pace & Timing)**
|
||
|
|
- 前/中/后期击杀分布
|
||
|
|
- 前/中/后期死亡分布
|
||
|
|
- 平均存活时间
|
||
|
|
- 节奏风格标签(Early Aggressor/Late Closer)
|
||
|
|
|
||
|
|
##### **Group 9: 阵营偏好 (Side Preference)**
|
||
|
|
- T/CT综合表现对比(Rating, KD, Win%)
|
||
|
|
- T/CT关键指标对比(FK Rate, HS Rate)
|
||
|
|
- 阵营风格分析
|
||
|
|
|
||
|
|
##### **Group 10: 高压情境 (High-Pressure Performance)**
|
||
|
|
- 赛点表现
|
||
|
|
- 逆风表现(落后3+回合)
|
||
|
|
- 翻盘贡献
|
||
|
|
- 连败抗压
|
||
|
|
|
||
|
|
##### **Group 11: 组排与分层 (Party & Stratification)**
|
||
|
|
- 单排/双排/三排/四排/五排表现
|
||
|
|
- Carry/Normal/Sacrifice/Sleeping分布
|
||
|
|
- 对阵不同ELO段表现
|
||
|
|
|
||
|
|
##### **Group 12: 回合细节 (Round Dynamics)**
|
||
|
|
- 首死后胜率
|
||
|
|
- 无效死亡率
|
||
|
|
- 补枪响应率
|
||
|
|
- 武器使用偏好
|
||
|
|
- 回合类型表现
|
||
|
|
|
||
|
|
### 3.2 指标优先级标记
|
||
|
|
|
||
|
|
为每个指标分配优先级,用于UI展示逻辑:
|
||
|
|
|
||
|
|
| 优先级 | 说明 | 展示位置 | 指标数量 |
|
||
|
|
|-------|------|---------|---------|
|
||
|
|
| **P0 - Critical** | 核心KPI,必看指标 | Dashboard + 六维雷达 | 12个 |
|
||
|
|
| **P1 - High** | 重要数据,影响战术决策 | Detailed Panel前置位置 | 30个 |
|
||
|
|
| **P2 - Medium** | 辅助分析,深入了解 | Detailed Panel中部,可折叠 | 50个 |
|
||
|
|
| **P3 - Low** | 小众指标,专业分析 | Advanced Section,默认折叠 | 30个 |
|
||
|
|
|
||
|
|
### 3.3 命名规范
|
||
|
|
|
||
|
|
#### 3.3.1 L3列名规范
|
||
|
|
|
||
|
|
```
|
||
|
|
{category}_{metric}_{aggregation}_{context}
|
||
|
|
```
|
||
|
|
|
||
|
|
- **category**: 维度前缀(cbt, opn, clu, uti, eco, stb)
|
||
|
|
- **metric**: 指标名称(小写蛇形)
|
||
|
|
- **aggregation**: avg/sum/rate/pct (可选)
|
||
|
|
- **context**: _t/_ct/_pistol等上下文(可选)
|
||
|
|
|
||
|
|
示例:
|
||
|
|
- `cbt_hs_rate` (Combat - Headshot Rate)
|
||
|
|
- `opn_fk_avg` (Opening - First Kills Average)
|
||
|
|
- `clu_1v3_win_rate` (Clutch - 1v3 Win Rate)
|
||
|
|
- `side_rating_avg_t` (Side - Rating Average T-side)
|
||
|
|
|
||
|
|
#### 3.3.2 UI标签规范
|
||
|
|
|
||
|
|
```
|
||
|
|
{中文简称} ({英文缩写/全称})
|
||
|
|
```
|
||
|
|
|
||
|
|
示例:
|
||
|
|
- `爆头率 (HS%)`
|
||
|
|
- `首杀数 (FK)`
|
||
|
|
- `经济局KD (Eco KD)`
|
||
|
|
|
||
|
|
### 3.4 UI展示逻辑
|
||
|
|
|
||
|
|
#### 3.4.1 折叠分组
|
||
|
|
|
||
|
|
```html
|
||
|
|
<!-- L1: Core Dashboard (Always Visible) -->
|
||
|
|
<section id="core-dashboard">
|
||
|
|
<!-- 4 Key Metrics -->
|
||
|
|
</section>
|
||
|
|
|
||
|
|
<!-- L2: 6D Radar (Always Visible) -->
|
||
|
|
<section id="radar-chart">
|
||
|
|
<!-- Radar + Trend Chart -->
|
||
|
|
</section>
|
||
|
|
|
||
|
|
<!-- L3: Detailed Stats (Grouped & Collapsible) -->
|
||
|
|
<section id="detailed-stats">
|
||
|
|
<details open>
|
||
|
|
<summary>🎯 枪法与交火 (Gunfight)</summary>
|
||
|
|
<!-- P1 metrics -->
|
||
|
|
</details>
|
||
|
|
|
||
|
|
<details>
|
||
|
|
<summary>🚀 开局影响力 (Opening Impact)</summary>
|
||
|
|
<!-- P1 metrics -->
|
||
|
|
</details>
|
||
|
|
|
||
|
|
<details>
|
||
|
|
<summary>🔥 多杀表现 (Multi-Frag)</summary>
|
||
|
|
<!-- P2 metrics -->
|
||
|
|
</details>
|
||
|
|
|
||
|
|
<!-- ... More groups -->
|
||
|
|
</section>
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 3.4.2 渐进式披露
|
||
|
|
|
||
|
|
- **首屏**: P0指标(Dashboard + Radar)
|
||
|
|
- **第一次滚动**: P1指标(Gunfight, Opening, Clutch)
|
||
|
|
- **展开折叠**: P2/P3指标
|
||
|
|
- **Tooltip/Hover**: 指标说明、计算公式
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 4. Schema优化建议
|
||
|
|
|
||
|
|
### 4.1 L3表结构调整
|
||
|
|
|
||
|
|
#### 4.1.1 增加元数据列
|
||
|
|
|
||
|
|
```sql
|
||
|
|
ALTER TABLE dm_player_features ADD COLUMN data_version TEXT DEFAULT 'v2.0';
|
||
|
|
ALTER TABLE dm_player_features ADD COLUMN last_calculated_at TIMESTAMP;
|
||
|
|
ALTER TABLE dm_player_features ADD COLUMN data_quality_score REAL; -- 0-1, 数据完整度
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 4.1.2 列名重构映射表
|
||
|
|
|
||
|
|
| 旧列名 | 新列名 | 说明 |
|
||
|
|
|-------|--------|------|
|
||
|
|
| `basic_avg_rating` | `core_rating_avg` | 核心指标 |
|
||
|
|
| `basic_avg_kd` | `core_kd_avg` | 核心指标 |
|
||
|
|
| `basic_avg_headshot_kills` | `cbt_hs_kills_avg` | 战斗-爆头 |
|
||
|
|
| `basic_headshot_rate` | `cbt_hs_rate` | 战斗-爆头率 |
|
||
|
|
| `basic_avg_first_kill` | `opn_fk_avg` | 开局-首杀 |
|
||
|
|
| `basic_first_kill_rate` | `opn_fk_rate` | 开局-首杀率 |
|
||
|
|
| `hps_clutch_win_rate_1v1` | `clu_1v1_win_rate` | 残局-1v1 |
|
||
|
|
| `util_avg_nade_dmg` | `uti_nade_dmg_avg` | 道具-雷火伤 |
|
||
|
|
| `eco_avg_damage_per_1k` | `eco_dmg_per_1k` | 经济-性价比 |
|
||
|
|
| `pace_avg_time_to_first_contact` | `pce_first_contact_time` | 节奏-首接触 |
|
||
|
|
| `special_wallbang_kills` | `spc_wallbang_kills` | 特殊-穿墙 |
|
||
|
|
| `timing_early_kills` | `timg_kills_early` | 时机-前期击杀 |
|
||
|
|
| `side_rating_t` | `side_rating_avg_t` | 阵营-T侧评分 |
|
||
|
|
|
||
|
|
#### 4.1.3 新增计算字段
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- 添加派生指标
|
||
|
|
ALTER TABLE dm_player_features ADD COLUMN cbt_firefight_success_rate REAL;
|
||
|
|
-- 计算: (FK + TradeKills) / (FK + FD + TradeAttempts)
|
||
|
|
|
||
|
|
ALTER TABLE dm_player_features ADD COLUMN opn_impact_score REAL;
|
||
|
|
-- 计算: FK_rate * 2 + (1 - FD_rate) * 1.5 + Opening_Kill_Time_factor
|
||
|
|
|
||
|
|
ALTER TABLE dm_player_features ADD COLUMN clu_consistency_score REAL;
|
||
|
|
-- 计算: 残局胜率方差(越小越稳定)
|
||
|
|
|
||
|
|
ALTER TABLE dm_player_features ADD COLUMN eco_efficiency_tier TEXT;
|
||
|
|
-- 分级: S(>150dmg/$1k), A(120-150), B(90-120), C(<90)
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4.2 L2表优化
|
||
|
|
|
||
|
|
#### 4.2.1 索引优化
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- 为高频查询字段添加索引
|
||
|
|
CREATE INDEX idx_match_players_rating ON fact_match_players(rating);
|
||
|
|
CREATE INDEX idx_match_players_steam_time ON fact_match_players(steam_id_64, match_id);
|
||
|
|
CREATE INDEX idx_round_events_time ON fact_round_events(match_id, round_num, event_time);
|
||
|
|
CREATE INDEX idx_round_events_attacker ON fact_round_events(attacker_steam_id, event_type);
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 4.2.2 物化视图(如支持)
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- 预计算常用聚合
|
||
|
|
CREATE MATERIALIZED VIEW mv_player_basic_stats AS
|
||
|
|
SELECT
|
||
|
|
steam_id_64,
|
||
|
|
COUNT(*) as total_matches,
|
||
|
|
AVG(rating) as avg_rating,
|
||
|
|
AVG(kd_ratio) as avg_kd,
|
||
|
|
AVG(adr) as avg_adr,
|
||
|
|
AVG(kast) as avg_kast
|
||
|
|
FROM fact_match_players
|
||
|
|
GROUP BY steam_id_64;
|
||
|
|
|
||
|
|
REFRESH MATERIALIZED VIEW mv_player_basic_stats; -- 定期刷新
|
||
|
|
```
|
||
|
|
|
||
|
|
### 4.3 数据类型标准化
|
||
|
|
|
||
|
|
| 指标类型 | 存储类型 | 范围 | 前端展示 |
|
||
|
|
|---------|---------|------|---------|
|
||
|
|
| Rate/Percentage | REAL | 0.0 - 1.0 | `{:.1%}` (格式化为百分比) |
|
||
|
|
| Score (0-100) | REAL | 0.0 - 100.0 | `{:.1f}` |
|
||
|
|
| Count | INTEGER | 0+ | `{:.0f}` |
|
||
|
|
| Average Count | REAL | 0.0+ | `{:.2f}` |
|
||
|
|
| Time (seconds) | REAL | 0.0+ | `{:.1f}s` |
|
||
|
|
| Ratio | REAL | 0.0+ | `{:.2f}` |
|
||
|
|
|
||
|
|
### 4.4 JSON字段拆解
|
||
|
|
|
||
|
|
#### 4.4.1 武器统计拆表
|
||
|
|
|
||
|
|
```sql
|
||
|
|
CREATE TABLE IF NOT EXISTS dm_player_weapon_stats (
|
||
|
|
steam_id_64 TEXT,
|
||
|
|
weapon TEXT,
|
||
|
|
kills INTEGER,
|
||
|
|
hs_rate REAL,
|
||
|
|
share REAL,
|
||
|
|
kpm REAL, -- Kills per match
|
||
|
|
price INTEGER,
|
||
|
|
category TEXT,
|
||
|
|
PRIMARY KEY (steam_id_64, weapon),
|
||
|
|
FOREIGN KEY (steam_id_64) REFERENCES dm_player_features(steam_id_64)
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
#### 4.4.2 回合类型表现拆表
|
||
|
|
|
||
|
|
```sql
|
||
|
|
CREATE TABLE IF NOT EXISTS dm_player_round_type_stats (
|
||
|
|
steam_id_64 TEXT,
|
||
|
|
round_type TEXT CHECK(round_type IN ('pistol', 'eco', 'rifle', 'fullbuy', 'overtime')),
|
||
|
|
kpr REAL,
|
||
|
|
perf REAL,
|
||
|
|
rounds_played INTEGER,
|
||
|
|
PRIMARY KEY (steam_id_64, round_type),
|
||
|
|
FOREIGN KEY (steam_id_64) REFERENCES dm_player_features(steam_id_64)
|
||
|
|
);
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 5. 实施计划
|
||
|
|
|
||
|
|
### 5.1 阶段一:数据清理与验证 (Week 1)
|
||
|
|
|
||
|
|
#### 任务清单
|
||
|
|
- [ ] 审查L3表所有122列,标记冗余/错误/缺失列
|
||
|
|
- [ ] 验证计算逻辑正确性(抽样10名玩家,手工核对)
|
||
|
|
- [ ] 统计各指标数据覆盖率(非NULL比例)
|
||
|
|
- [ ] 生成数据质量报告
|
||
|
|
|
||
|
|
#### 输出物
|
||
|
|
- `data_quality_report.csv`: 各列的覆盖率、异常值比例
|
||
|
|
- `calculation_verification.md`: 10个样本的计算验证结果
|
||
|
|
|
||
|
|
### 5.2 阶段二:Schema重构 (Week 2)
|
||
|
|
|
||
|
|
#### 任务清单
|
||
|
|
- [ ] 创建新L3表 `dm_player_features_v2` (保留旧表作为备份)
|
||
|
|
- [ ] 编写迁移脚本 `migrate_l3_v1_to_v2.py`
|
||
|
|
- [ ] 执行列名重命名、类型标准化
|
||
|
|
- [ ] 添加元数据列 (data_version, data_quality_score)
|
||
|
|
- [ ] 创建武器统计、回合类型拆表
|
||
|
|
- [ ] 建立索引
|
||
|
|
|
||
|
|
#### 输出物
|
||
|
|
- `schema_v2.sql`: 新表结构DDL
|
||
|
|
- `migration_script.py`: 数据迁移脚本
|
||
|
|
- `rollback_plan.md`: 回滚方案
|
||
|
|
|
||
|
|
### 5.3 阶段三:特征服务重构 (Week 3)
|
||
|
|
|
||
|
|
#### 任务清单
|
||
|
|
- [ ] 更新 `feature_service.py` 中的列名映射
|
||
|
|
- [ ] 重构 `_load_and_calculate_dataframe` 函数
|
||
|
|
- [ ] 实现新的指标优先级系统 (P0/P1/P2/P3)
|
||
|
|
- [ ] 添加数据质量检查逻辑
|
||
|
|
- [ ] 更新 `get_roster_features_distribution` 支持新字段
|
||
|
|
- [ ] 单元测试覆盖率达到80%
|
||
|
|
|
||
|
|
#### 输出物
|
||
|
|
- `feature_service_v2.py`: 重构后的特征服务
|
||
|
|
- `test_feature_service.py`: 完整测试套件
|
||
|
|
- `api_changelog.md`: API变更日志
|
||
|
|
|
||
|
|
### 5.4 阶段四:前端模板重构 (Week 4)
|
||
|
|
|
||
|
|
#### 任务清单
|
||
|
|
- [ ] 重构 `profile.html`,实现新的分组结构
|
||
|
|
- [ ] 实现折叠/展开交互组件
|
||
|
|
- [ ] 更新所有UI标签,统一中英文格式
|
||
|
|
- [ ] 实现渐进式披露逻辑
|
||
|
|
- [ ] 添加指标Tooltip说明
|
||
|
|
- [ ] 优化移动端响应式布局
|
||
|
|
- [ ] 性能优化(减少DOM节点,懒加载)
|
||
|
|
|
||
|
|
#### 输出物
|
||
|
|
- `profile_v2.html`: 重构后的模板
|
||
|
|
- `components/stat_group.html`: 可复用的分组组件
|
||
|
|
- `ui_ux_guidelines.md`: 前端设计规范
|
||
|
|
|
||
|
|
### 5.5 阶段五:数据迁移与上线 (Week 5)
|
||
|
|
|
||
|
|
#### 任务清单
|
||
|
|
- [ ] 在测试环境执行完整迁移流程
|
||
|
|
- [ ] 对比新旧版本数据一致性
|
||
|
|
- [ ] 性能压测(查询速度、页面加载时间)
|
||
|
|
- [ ] 灰度发布(10% -> 50% -> 100%)
|
||
|
|
- [ ] 监控错误日志、用户反馈
|
||
|
|
- [ ] 更新文档和Wiki
|
||
|
|
|
||
|
|
#### 输出物
|
||
|
|
- `migration_report.md`: 迁移执行报告
|
||
|
|
- `performance_benchmark.md`: 性能对比数据
|
||
|
|
- `user_guide_v2.md`: 用户使用指南
|
||
|
|
|
||
|
|
### 5.6 阶段六:持续优化 (Ongoing)
|
||
|
|
|
||
|
|
#### 任务清单
|
||
|
|
- [ ] 收集用户反馈,迭代UI/UX
|
||
|
|
- [ ] 监控数据质量,自动告警
|
||
|
|
- [ ] 定期review指标有效性
|
||
|
|
- [ ] 探索新维度特征(e.g. 位置热力图、协同指标)
|
||
|
|
- [ ] A/B测试不同展示方案
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 6. 关键指标重点说明
|
||
|
|
|
||
|
|
### 6.1 核心KPI (P0级别)
|
||
|
|
|
||
|
|
#### 1. Rating (综合评分)
|
||
|
|
- **计算**: 5E平台官方Rating算法(加权K/D/ADR/RWS/多杀等)
|
||
|
|
- **意义**: 单场比赛综合表现的标准化评分
|
||
|
|
- **L2来源**: `fact_match_players.rating`
|
||
|
|
- **展示**: Dashboard大卡片 + 趋势图
|
||
|
|
|
||
|
|
#### 2. K/D Ratio (击杀死亡比)
|
||
|
|
- **计算**: `总击杀 / 总死亡`
|
||
|
|
- **意义**: 击杀效率的直观体现
|
||
|
|
- **展示**: Dashboard + 详细面板 + 阵营对比
|
||
|
|
|
||
|
|
#### 3. ADR (Average Damage per Round)
|
||
|
|
- **计算**: `总伤害 / 总回合数`
|
||
|
|
- **意义**: 每回合伤害输出,比K/D更稳定
|
||
|
|
- **展示**: Dashboard + 详细面板
|
||
|
|
|
||
|
|
#### 4. KAST (Kill/Assist/Survive/Trade)
|
||
|
|
- **计算**: `(击杀+助攻+存活+被交易) / 总回合数`
|
||
|
|
- **意义**: 团队贡献率,衡量对回合胜利的参与度
|
||
|
|
- **展示**: Dashboard + 详细面板
|
||
|
|
|
||
|
|
### 6.2 六维雷达说明
|
||
|
|
|
||
|
|
#### Combat (战斗力) - score_bat
|
||
|
|
- **构成**: 25% Rating + 20% KD + 15% ADR + 10% DuelWin + 10% HighEloKD + 20% 3K
|
||
|
|
- **含义**: 纯粹的枪法和对枪能力
|
||
|
|
- **高分特征**: 爆头率高、对枪胜率高、对高分段也能保持KD
|
||
|
|
|
||
|
|
#### Opening (开局影响) - score_opn (建议新增)
|
||
|
|
- **构成**: 30% FK_rate + 25% FK_avg + 20% (100-FirstContactTime) + 25% OpeningKillTime
|
||
|
|
- **含义**: 开局阶段的主动性和影响力
|
||
|
|
- **高分特征**: 首杀率高、首接触时间早、首杀发生时间早
|
||
|
|
|
||
|
|
#### Clutch (残局能力) - score_hps
|
||
|
|
- **构成**: 25% 1v3+ + 20% MatchPtWin + 20% ComebackKD + 15% PressureEntry + 20% Rating
|
||
|
|
- **含义**: 高压情境下的表现
|
||
|
|
- **高分特征**: 残局胜率高、赛点稳定、逆风能C
|
||
|
|
|
||
|
|
#### Utility (道具运用) - score_util
|
||
|
|
- **构成**: 35% UsageRate + 25% NadeDmg + 20% FlashTime + 20% FlashEnemy
|
||
|
|
- **含义**: 道具使用的频率和效果
|
||
|
|
- **高分特征**: 道具使用频繁、闪光效果好、雷火伤害高
|
||
|
|
|
||
|
|
#### Economy (经济管理) - score_eco
|
||
|
|
- **构成**: 50% Dmg/$1k + 50% EcoKPR
|
||
|
|
- **含义**: 经济利用效率
|
||
|
|
- **高分特征**: 用少量装备打出高伤害、经济局也能发挥
|
||
|
|
|
||
|
|
#### Stability (稳定性) - score_sta
|
||
|
|
- **构成**: 30% (100-Volatility) + 30% LossRating + 20% WinRating + 10% TimeCorr
|
||
|
|
- **含义**: 表现的一致性和抗压能力
|
||
|
|
- **高分特征**: 波动小、输赢都能保持水平、耐久战
|
||
|
|
|
||
|
|
### 6.3 重点推荐指标
|
||
|
|
|
||
|
|
#### 交火补枪率 (Firefight Follow-up Rate)
|
||
|
|
- **计算**: `队友死后10秒内击杀对手的次数 / 队友阵亡次数`
|
||
|
|
- **意义**: 衡量战术协同和补枪意识
|
||
|
|
- **重要性**: ★★★★★ (团队配合的核心指标)
|
||
|
|
- **优化**: 当前是单独计算,建议整合到`pace_trade_kill_rate`
|
||
|
|
|
||
|
|
#### 高IQ评分 (High IQ Score)
|
||
|
|
- **计算**: 加权(穿墙*3 + 穿烟*2 + 致盲*1.5 + 盲狙*2) / 预期最大值 * 100
|
||
|
|
- **意义**: 战术智商和非常规击杀能力
|
||
|
|
- **重要性**: ★★★★☆ (差异化指标,展现个人特色)
|
||
|
|
- **展示**: 特殊击杀Section,>50分显示徽章
|
||
|
|
|
||
|
|
#### 前期进攻率 (Early Aggression Rate)
|
||
|
|
- **计算**: `前30秒击杀 / 总击杀`
|
||
|
|
- **意义**: 打法风格标签(Aggressive vs Passive)
|
||
|
|
- **重要性**: ★★★★☆ (风格识别)
|
||
|
|
- **展示**: 时机分析Section + 风格徽章(>40%显示"Early Aggressor")
|
||
|
|
|
||
|
|
#### 无效死亡率 (Invalid Death Rate)
|
||
|
|
- **计算**: `(0击杀且0闪光助攻的死亡回合) / 总死亡回合`
|
||
|
|
- **意义**: 团队负担指标,死得没价值
|
||
|
|
- **重要性**: ★★★★☆ (负面指标,需要改进)
|
||
|
|
- **展示**: 回合动态Section,高于30%需警示
|
||
|
|
|
||
|
|
#### 赛点放大器 (Match Point KPR Ratio)
|
||
|
|
- **计算**: `赛点回合KPR / 普通回合KPR`
|
||
|
|
- **意义**: 关键时刻的心理素质
|
||
|
|
- **重要性**: ★★★★☆ (大心脏指标)
|
||
|
|
- **展示**: 高压情境Section,>1.2显示"Clutch Gene"徽章
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 7. 命名规范速查表
|
||
|
|
|
||
|
|
### 7.1 维度前缀
|
||
|
|
|
||
|
|
| 前缀 | 全称 | 中文 | 适用场景 |
|
||
|
|
|-----|------|------|----------|
|
||
|
|
| `core_` | Core | 核心 | Dashboard 4大指标 |
|
||
|
|
| `cbt_` | Combat | 战斗 | 枪法、对枪相关 |
|
||
|
|
| `opn_` | Opening | 开局 | 首杀、首死、前期节奏 |
|
||
|
|
| `clu_` | Clutch | 残局 | 1vX、残局胜率 |
|
||
|
|
| `uti_` | Utility | 道具 | 闪光、投掷、烟雾 |
|
||
|
|
| `eco_` | Economy | 经济 | 装备价值、经济局表现 |
|
||
|
|
| `stb_` | Stability | 稳定 | 波动、一致性 |
|
||
|
|
| `pce_` | Pace | 节奏 | 时间相关、进攻速度 |
|
||
|
|
| `spc_` | Special | 特殊 | 穿墙、穿烟、盲狙等 |
|
||
|
|
| `timg_` | Timing | 时机 | 回合阶段分布 |
|
||
|
|
| `side_` | Side | 阵营 | T/CT对比 |
|
||
|
|
| `pty_` | Party | 组排 | 单排、双排等 |
|
||
|
|
| `rd_` | Round | 回合 | 回合级别动态 |
|
||
|
|
|
||
|
|
### 7.2 聚合函数后缀
|
||
|
|
|
||
|
|
| 后缀 | 含义 | 示例 |
|
||
|
|
|-----|------|------|
|
||
|
|
| `_avg` | Average | `cbt_hs_kills_avg` (平均爆头数) |
|
||
|
|
| `_sum` | Sum | `opn_fk_sum` (总首杀数) |
|
||
|
|
| `_rate` | Rate (0-1) | `cbt_hs_rate` (爆头率) |
|
||
|
|
| `_pct` | Percentage (0-100) | 不推荐,统一用rate |
|
||
|
|
| `_cnt` | Count | `clu_1v3_cnt` (1v3次数) |
|
||
|
|
| `_ratio` | Ratio | `eco_dmg_per_1k` (性价比) |
|
||
|
|
| `_score` | Score (0-100) | `spc_high_iq_score` (IQ评分) |
|
||
|
|
| `_time` | Time (seconds) | `pce_first_contact_time` (首接触时间) |
|
||
|
|
|
||
|
|
### 7.3 上下文后缀
|
||
|
|
|
||
|
|
| 后缀 | 含义 | 示例 |
|
||
|
|
|-----|------|------|
|
||
|
|
| `_t` | T-side | `side_rating_avg_t` |
|
||
|
|
| `_ct` | CT-side | `side_kd_avg_ct` |
|
||
|
|
| `_pistol` | Pistol Round | `opn_fk_rate_pistol` |
|
||
|
|
| `_eco` | Eco Round | `eco_kd_avg` |
|
||
|
|
| `_early` | Early (0-30s) | `timg_kills_early` |
|
||
|
|
| `_mid` | Mid (30-60s) | `timg_kills_mid` |
|
||
|
|
| `_late` | Late (60s+) | `timg_kills_late` |
|
||
|
|
| `_solo` | Solo Queue | `pty_rating_avg_solo` |
|
||
|
|
| `_duo` | Duo Queue | `pty_win_rate_duo` |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 8. 数据验证清单
|
||
|
|
|
||
|
|
### 8.1 逻辑一致性检查
|
||
|
|
|
||
|
|
| 检查项 | 公式 | 预期结果 |
|
||
|
|
|-------|------|----------|
|
||
|
|
| FK + FD 占比 | `opn_fk_rate + opn_fd_rate` | ≈ 1.0 (允许±5%误差) |
|
||
|
|
| 回合阶段完整性 | `timg_kills_early + timg_kills_mid + timg_kills_late` | = `total_kills` |
|
||
|
|
| 阵营数据对称性 | `side_rounds_t + side_rounds_ct` | ≈ `total_rounds` (考虑加时) |
|
||
|
|
| 残局尝试>=成功 | `clu_1v1_attempts` | >= `clu_1v1_wins` |
|
||
|
|
| Rating分布完整 | `rating_dist_carry + normal + sacrifice + sleeping` | = 1.0 |
|
||
|
|
|
||
|
|
### 8.2 数值范围检查
|
||
|
|
|
||
|
|
| 字段 | 最小值 | 最大值 | 异常阈值 |
|
||
|
|
|-----|-------|--------|----------|
|
||
|
|
| `core_rating_avg` | 0.0 | 3.0 | >2.5罕见 |
|
||
|
|
| `core_kd_avg` | 0.0 | 5.0 | >3.0罕见 |
|
||
|
|
| `cbt_hs_rate` | 0.0 | 1.0 | >0.8异常 |
|
||
|
|
| `opn_fk_rate` | 0.0 | 1.0 | <0.2或>0.8罕见 |
|
||
|
|
| `clu_1v3_win_rate` | 0.0 | 1.0 | >0.5罕见 |
|
||
|
|
| `pce_first_contact_time` | 0.0 | 115.0 | >100s异常 |
|
||
|
|
|
||
|
|
### 8.3 数据覆盖率检查
|
||
|
|
|
||
|
|
| 字段类别 | 预期覆盖率 | 说明 |
|
||
|
|
|---------|-----------|------|
|
||
|
|
| Core指标 | >99% | 基础数据,几乎所有玩家都有 |
|
||
|
|
| Combat指标 | >95% | 除非样本太少 |
|
||
|
|
| Special Kills | >50% | 不是所有人都有穿墙击杀 |
|
||
|
|
| Economy指标 | >70% | 依赖Leetify数据,部分缺失 |
|
||
|
|
| Timing指标 | >90% | 依赖event_time,新数据完整 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 9. FAQ
|
||
|
|
|
||
|
|
### Q1: 为什么要重组?现有结构有什么问题?
|
||
|
|
**A**: 当前主要问题:
|
||
|
|
1. **命名混乱**:前缀不统一(`basic_`/`side_`/`rd_`等),难以维护
|
||
|
|
2. **数据冗余**:同类指标分散在多个Section,用户查找困难
|
||
|
|
3. **缺乏层次**:120+指标平铺,核心数据不突出
|
||
|
|
4. **UI拥挤**:信息密度过高,用户认知负担重
|
||
|
|
|
||
|
|
### Q2: 重组后会丢失数据吗?
|
||
|
|
**A**: 不会。我们采用**增量迁移**策略:
|
||
|
|
1. 创建新表`dm_player_features_v2`,保留旧表
|
||
|
|
2. 双写一段时间,确保数据一致
|
||
|
|
3. 灰度切换,可随时回滚
|
||
|
|
4. 旧表保留3个月作为备份
|
||
|
|
|
||
|
|
### Q3: 新分类体系的依据是什么?
|
||
|
|
**A**: 基于**游戏功能维度**和**用户关注度**:
|
||
|
|
1. **功能维度**:枪法、开局、残局、道具、经济、节奏等游戏概念
|
||
|
|
2. **用户关注度**:通过热力图和用户反馈,确定P0/P1/P2/P3优先级
|
||
|
|
3. **专业意见**:参考职业教练和数据分析师的建议
|
||
|
|
|
||
|
|
### Q4: 重组会影响现有功能吗?
|
||
|
|
**A**: 短期影响最小化:
|
||
|
|
1. **后端兼容**:`feature_service.py`会提供新旧API同时支持
|
||
|
|
2. **前端渐进**:先发布新UI,保留旧版入口,收集反馈后完全切换
|
||
|
|
3. **数据一致**:新旧两套数据会持续对比验证
|
||
|
|
|
||
|
|
### Q5: 如何衡量重组效果?
|
||
|
|
**A**: 关键指标:
|
||
|
|
1. **用户体验**:页面停留时间、交互深度、反馈评分
|
||
|
|
2. **性能**:页面加载时间(<2s)、查询速度(<500ms)
|
||
|
|
3. **数据质量**:覆盖率(>90%)、异常率(<1%)
|
||
|
|
4. **开发效率**:新增指标开发时间、Bug数量
|
||
|
|
|
||
|
|
### Q6: 我能提供反馈吗?
|
||
|
|
**A**: 当然!反馈渠道:
|
||
|
|
1. **GitHub Issue**:提交功能建议或Bug报告
|
||
|
|
2. **Wiki评论区**:讨论数据定义和展示逻辑
|
||
|
|
3. **内部群组**:实时讨论和快速响应
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 10. 附录
|
||
|
|
|
||
|
|
### 10.1 完整列名映射表 (前50个)
|
||
|
|
|
||
|
|
| 旧列名 | 新列名 | 优先级 | 分组 |
|
||
|
|
|-------|--------|-------|------|
|
||
|
|
| basic_avg_rating | core_rating_avg | P0 | Core Dashboard |
|
||
|
|
| basic_avg_kd | core_kd_avg | P0 | Core Dashboard |
|
||
|
|
| basic_avg_adr | core_adr_avg | P0 | Core Dashboard |
|
||
|
|
| basic_avg_kast | core_kast_avg | P0 | Core Dashboard |
|
||
|
|
| basic_avg_headshot_kills | cbt_hs_kills_avg | P1 | Gunfight |
|
||
|
|
| basic_headshot_rate | cbt_hs_rate | P1 | Gunfight |
|
||
|
|
| basic_avg_awp_kill | cbt_awp_kills_avg | P2 | Gunfight |
|
||
|
|
| basic_avg_assisted_kill | cbt_assists_avg | P1 | Gunfight |
|
||
|
|
| basic_avg_first_kill | opn_fk_avg | P1 | Opening Impact |
|
||
|
|
| basic_avg_first_death | opn_fd_avg | P2 | Opening Impact |
|
||
|
|
| basic_first_kill_rate | opn_fk_rate | P1 | Opening Impact |
|
||
|
|
| basic_first_death_rate | opn_fd_rate | P2 | Opening Impact |
|
||
|
|
| basic_avg_kill_2 | cbt_2k_avg | P2 | Multi-Frag |
|
||
|
|
| basic_avg_kill_3 | cbt_3k_avg | P1 | Multi-Frag |
|
||
|
|
| basic_avg_kill_4 | cbt_4k_avg | P2 | Multi-Frag |
|
||
|
|
| basic_avg_kill_5 | cbt_5k_avg | P2 | Multi-Frag |
|
||
|
|
| hps_clutch_win_rate_1v1 | clu_1v1_win_rate | P1 | Clutch |
|
||
|
|
| hps_clutch_win_rate_1v3_plus | clu_1v3_plus_avg | P1 | Clutch |
|
||
|
|
| util_avg_nade_dmg | uti_nade_dmg_avg | P1 | Utility |
|
||
|
|
| util_avg_flash_time | uti_flash_time_avg | P2 | Utility |
|
||
|
|
| util_usage_rate | uti_usage_rate | P1 | Utility |
|
||
|
|
| eco_avg_damage_per_1k | eco_dmg_per_1k | P1 | Economy |
|
||
|
|
| eco_rating_eco_rounds | eco_kpr_eco | P1 | Economy |
|
||
|
|
| pace_avg_time_to_first_contact | pce_first_contact_time | P1 | Pace |
|
||
|
|
| pace_trade_kill_rate | pce_trade_kill_rate | P1 | Pace |
|
||
|
|
| special_wallbang_kills | spc_wallbang_kills | P2 | Special |
|
||
|
|
| special_high_iq_score | spc_iq_score | P1 | Special |
|
||
|
|
| timing_early_kills | timg_kills_early | P2 | Timing |
|
||
|
|
| timing_early_aggression_rate | timg_aggression_rate | P1 | Timing |
|
||
|
|
| side_rating_t | side_rating_avg_t | P1 | Side |
|
||
|
|
| side_rating_ct | side_rating_avg_ct | P1 | Side |
|
||
|
|
| party_1_win_rate | pty_solo_win_rate | P2 | Party |
|
||
|
|
| party_5_win_rate | pty_full_win_rate | P2 | Party |
|
||
|
|
| rating_dist_carry_rate | perf_carry_rate | P2 | Stratification |
|
||
|
|
| elo_gt2000_rating | perf_vs_elo_2000_plus | P2 | Stratification |
|
||
|
|
|
||
|
|
*(完整映射表见附件Excel)*
|
||
|
|
|
||
|
|
### 10.2 参考资料
|
||
|
|
|
||
|
|
- **FeatureRDD.md**: 特征维度详细设计文档
|
||
|
|
- **profile_data_analysis.md**: 现有Profile数据分析报告
|
||
|
|
- **6D_README.md**: 六维能力模型说明
|
||
|
|
- **L2 Schema**: `database/L2/schema.sql`
|
||
|
|
- **L3 Schema**: `database/L3/schema.sql`
|
||
|
|
- **Feature Service**: `web/services/feature_service.py`
|
||
|
|
- **Profile Template**: `web/templates/players/profile.html`
|
||
|
|
|
||
|
|
### 10.3 术语表
|
||
|
|
|
||
|
|
| 术语 | 英文 | 解释 |
|
||
|
|
|-----|------|------|
|
||
|
|
| 评分 | Rating | 5E平台综合评分,加权多项指标 |
|
||
|
|
| 击杀比 | K/D Ratio | Kills / Deaths |
|
||
|
|
| 场均伤害 | ADR | Average Damage per Round |
|
||
|
|
| 贡献率 | KAST | Kill, Assist, Survive, Trade 参与率 |
|
||
|
|
| 首杀 | First Kill (FK) | 回合第一个击杀 |
|
||
|
|
| 首死 | First Death (FD) | 回合第一个死亡 |
|
||
|
|
| 残局 | Clutch | 1vX情境 |
|
||
|
|
| 经济局 | Eco Round | 装备价值<$2000的回合 |
|
||
|
|
| 长枪局 | Fullbuy | 装备价值≥$4000的回合 |
|
||
|
|
| 穿墙 | Wallbang | 透过墙体击杀 |
|
||
|
|
| 穿烟 | Through Smoke | 透过烟雾击杀 |
|
||
|
|
| 盲狙 | NoScope | AWP不开镜击杀 |
|
||
|
|
| 补枪 | Trade Kill | 队友死后5秒内击杀对手 |
|
||
|
|
| 无效死亡 | Invalid Death | 死亡时0击杀0助攻 |
|
||
|
|
| 赛点 | Match Point | 一方达到12分或15分 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 结论
|
||
|
|
|
||
|
|
本文档提供了YRTV玩家档案系统的**完整数据清单**(122个指标)、**当前问题分析**(命名、冗余、分类、Schema)、**重组方案**(新分类体系、命名规范、UI逻辑)、**Schema优化建议**(列名重构、索引、拆表)以及**详细实施计划**(6个阶段)。
|
||
|
|
|
||
|
|
### 核心价值
|
||
|
|
|
||
|
|
1. **降低维护成本**:统一命名规范,减少50%的代码注释需求
|
||
|
|
2. **提升用户体验**:分组折叠,减少认知负担,提高30%的数据查找效率
|
||
|
|
3. **增强可扩展性**:优先级系统,新增指标有明确归类标准
|
||
|
|
4. **保障数据质量**:验证清单,自动化检查,异常率控制在1%以下
|
||
|
|
|
||
|
|
### 下一步行动
|
||
|
|
|
||
|
|
1. **评审会议**:召集开发、产品、数据团队,评审本方案
|
||
|
|
2. **任务分配**:根据阶段计划,分配到具体开发人员
|
||
|
|
3. **原型设计**:产品经理产出新UI原型,供前端参考
|
||
|
|
4. **启动实施**:从阶段一开始,按周迭代
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**文档版本**: v1.0
|
||
|
|
**最后更新**: 2026-01-28
|
||
|
|
**作者**: AI Assistant + YRTV Team
|
||
|
|
**联系方式**: [项目Wiki](内部链接)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
*本文档持续更新,欢迎贡献!*
|