Spaces:
Running
Running
Commit History
-
Equipos y variables: nombres lindos del diccionario + selección por tipo
- Diccionario (diccionario_variables.xlsx → vendor/data/var_dict.json vía scripts/build_var_dict.py): mapea columna → nombre legible + tipo. Si una columna no está en el diccionario, se deja su nombre crudo (tipo "Otras"). - Las variables se muestran/buscan por su nombre lindo (datalist por label); el front mapea label→columna al enviar. Resultados de búsqueda/perfil y labels del radar usan el nombre lindo. - Selección rápida por TIPO: botones (Ofensiva, Defensiva, Build-up/Posesión, Balón Parado, Transiciones, Disciplina/Control, Estrategia) que agregan todas las variables de ese tipo, tanto en la búsqueda como en el perfil. - /options ahora devuelve variables [{name,label,tipo}] y types {tipo:[cols]}. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>e672925
-
Equipos y variables: radar (mplsoccer) del perfil + buscador de equipos similares
- Radar: con ≥3 variables, el perfil genera un radar estilo football (mplsoccer, ejes con escala propia = mín/máx del pool) como PNG embebido en la respuesta. - Equipos similares: nueva sección que usa el equipo y variables del perfil y encuentra los más parecidos por DISTANCIA EUCLÍDEA en el espacio de z-scores, con scope "todas las ligas/temporadas" (default) o "su liga-temporada". - team_vars: similar_teams(), radar_png(), _zmatrix(); rutas /similar y radar_b64 en /profile. Frontend: radar + tabla de similares. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>e6c8e11 -
Equipos y variables: panel de perfil de equipo (z-score por variable)
Debajo de la búsqueda, un panel para elegir un equipo (liga+temporada), variables y contra qué comparar (su liga-temporada o todas las ligas/temporadas), que muestra el z-score del equipo en cada variable como gráfico de barras centradas en 0 (banda ±1 sombreada, verde/rojo según signo). - team_vars.teams() + team_vars.team_profile(); rutas /api/team-vars/teams y /profile. - home.html: sección "3. Perfil de un equipo" con selección de equipo/scope/variables (input con datalist) y el gráfico de z en CSS (sin libs extra). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>f0e6f0b
-
Equipos y variables: opción "todas las ligas/temporadas" (default) + buscador de variables
- team_vars: sentinela ALL ("__all__") en liga y temporada → el pool del z-score cruza todas las ligas/temporadas. Cada equipo del resultado trae competencia y temporada (para distinguir cuando el pool es global). - Frontend: selects con "Todas las ligas" / "Todas las temporadas" como default; la temporada usa la unión cuando la liga es "todas". El selector de variable pasa a input con datalist (buscador escribible). El resultado muestra liga·temporada. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>13141a1 -
Nueva sección "Equipos y variables": buscar equipos por z-score de variables
Sobre team_stats_all_leagues.csv (stats por partido/equipo de Azure), agregado a un perfil por (liga, temporada, equipo) = promedio por partido. El usuario elige variables y dirección (alto/medio/bajo); se calcula un z-score por variable dentro del pool (liga+temporada, mín. 5 partidos) y un puntaje: alto → z ; bajo → -z ; medio → -|z|. Suma por equipo → top 5 con desglose por variable (valor, z, puntaje). - scripts/build_team_stats_agg.py: baja el CSV (~870 MB), filtra estado "90 mins" (total del partido) + dedup por matchid, agrega → vendor/data/team_stats_agg.parquet (3.8 MB, bundleado; regenerable como matches_catalog). - team_vars.py: carga el agregado + scoring; routes_team_vars.py: /api/team-vars/{options,search}. - home.html: tab "Equipos y variables" (selección de variables + dirección + top 5). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>d1858cc
-
Recuperaciones: reescrito según LOGICA_RECUPERACIONES.md
- Zona de análisis x>=40 (rect oscuro + línea amarilla en 40); antes 33. - Agrupación por secuencia (sequenceId,matchId,period_id) con prioridad Tackle>Interception>BlockedPass>BallRecovery; Interception/Tackle requieren outcome_value==1. Outcome (sin_tiro/tiro/gol) buscando el primer tiro DESPUÉS de la recuperación EN LA SECUENCIA; last_passer/shooter/shot_xG de ese tiro. - Errores del rival con tiro en ventana de 5s (coords invertidas), dedup por tiro. - Marcadores: color por outcome (gris/rojo/verde, alphas), tamaño xG*800+100 (70 fijo sin tiro), forma por tipo. Histograma 40-100 (franjas de 10) + xG. - Barras de pasillo (5 corredores Y) naranjas desde x=40. - Panel: ofensivas -> tabla TOP10 con heatmap (rec/ultP/tiros/goles); defensivas -> stats por tipo (Tackle/Interception/BlockedPass/BallRecovery/Error). - Filtros fecha + venue (por equipo) preservados. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>f465e9f -
Nuevo reporte: Recuperaciones (mapa de cancha, of/def)
Reconstruido desde los ejemplos de "Pre partido gráficos" (la doc no especifica el gráfico). Mapa de recuperaciones por ubicación: forma=tipo (BallRecovery/Blocked, Interception, Tackle, Error rival), color=outcome (verde gol / rojo tiro / gris nada), tamaño≈xG. Histograma por banda de X, panel de stats por tipo y Top-10 jugadores (Rec/UltP/Tiro/Gol). 4 figuras (cada equipo of+def), nivel temporada. Franja "Zona de análisis" fija. Registrado en runner/catalogs/routes/datastore + card en la web. Asunciones (tamaño, UltP, x de la franja) a afinar. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>64a7749 -
Separar Centros del Multi-Tag en reportes independientes
triple_multitag vuelve a 4 figuras (solo multitag) y se agrega triple_centros como reporte propio (4 figuras, 2 paneles c/u). Cards separadas en la web, registros en runner/catalogs/routes/datastore. _build_report compartido. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>46cefb3 -
Triple Análisis: sumar gráfico de Centros (z-score, 2 paneles)
De la carpeta "Pre partido gráficos": agrega los centros_triple además del multitag. Reimplementado desde DOCUMENTACION_CENTROS_JUGADA_REGULAR.md + §12.6: 18 tags detalle (tipo·zona·lado, raso-área sub-dividido cutback/dividido por ángulo) + 9 agrupados. Figura de 2 paneles (desglose + vista agrupada), mismo estilo triple (xG/tiros/acciones vs liga). - analyze_all(): una sola preparación produce multitag + centros (~25s liga). - El reporte ahora da 8 figuras (multitag + centros, cada equipo of+def). - Refactor: _draw_panel reusable, _aggregate genérico. Tests + catálogo + card. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>b00743a
-
Nuevo reporte: Triple Análisis Multi-Tag (z-scores vs liga)
Reimplementación (desde LOGICA_NEGOCIO_ANALISIS.md §12.4) del gráfico de z-scores multi-tag: por cada categoría táctica (23 tags: transiciones, presión, build-up, centros, profundidad, ABP) muestra 3 métricas — xG, tiros y acciones — vs la distribución de la liga. 4 figuras por partido: cada equipo ofensivo + defensivo. - reports/triple_multitag.py: analizador vectorizado por posesión (~25s liga completa, no minutos) + figura estilo ejemplo + generate() -> ReportBundle. - Registrado en runner/catalogs/routes/datastore(prepare_vendor) + card en home.html. - No requiere NN; usa el preprocessed cacheado en RAM como bloques/post. - Tests del analizador, la figura y el registro. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>10f1622
-
Fix post-partido: orden de descarga + orientación real del partido
- Runner resuelve home/away/fecha vía web_meta.find_match (dataset bundleado), no vía match_index (que leía el preprocessed ANTES de descargarlo -> "No existe preprocessed cacheado"). Además usa el local/visitante REAL del partido. - Frontend: el post-partido busca el partido entre A y B en cualquier orientación (prefiere A=local si se jugó así; si no, usa la orientación real). "No existe" solo si no se jugó ninguna. Arregla casos como Racing vs Almería (se jugó con Almería de local). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>7d5bb88 -
Web: selector de liga/temporada (data completa) + post-partido funcional
- routes_meta dataset-driven: ligas/temporadas/equipos/partidos salen del dataset bundleado, intersecados con lo que tiene preprocessed en Azure ("data completa", auto-configurable). datastore.available_league_seasons() lista Azure. - web_meta.py: provee teams/matches/resolve por liga-temporada desde el bundle (subset ahora incluye is_home para armar home/away). - home.html: dropdowns de liga/temporada que recargan equipos y partidos; card de post-partido funcional (elegís un partido JUGADO -> genera). Solo se ofrecen partidos reales => no se puede generar uno inexistente. - post_match habilitado en el endpoint /run (gateado por NN + match_id requerido); post_match.generate devuelve ReportBundle para verse en la UI moderna. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>5409901 -
Deploy: modelo de ataque matchup GNN + artifacts bundleados (LFS)
Sobre la historia del Space (preserva login/proxy fixes). Agrega: - train_attack_matchup_gnn.py (modelo de producción nuevo) + integración en la app. - Artifacts bundleados en vendor/data/modeling vía git-LFS (subset 10MB + bundles), para servir sin Azure. - vendor_env apunta al bundle nuevo; .gitignore actualizado; tests del modelo. Activar en el Space con el secret RR_ENABLE_NN_PREDICTIONS=1. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>9da4e9c