File size: 2,110 Bytes
5012a96
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
"""Construye un catálogo de partidos (liga/temporada/fecha/local/visitante) para
TODAS las ligas Opta, a partir de los nombres de los xlsx en Azure
(raw/eventing/opta/Partidos/{liga}/{temporada}/{fecha} - {local} vs {visitante}.xlsx).

Listar nombres es barato (no descarga). El catálogo alimenta los selectores de la
web (ligas/temporadas/equipos/partidos) para todas las ligas, incluso las que no
están en el dataset del modelo. Sale a vendor/data/matches_catalog.parquet (chico).

Uso: python scripts/build_matches_catalog.py
"""

from __future__ import annotations

import re
import sys
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))

import pandas as pd

from racing_reports.datastore import DataStore

PAT = re.compile(r"^(\d{4}-\d{2}-\d{2}) - (.+?) vs (.+?)\.xlsx$")
OUT = Path(__file__).resolve().parents[1] / "vendor" / "data" / "matches_catalog.parquet"


def main() -> None:
    ds = DataStore()
    fs = ds._filesystem_client()
    base = "raw/eventing/opta/Partidos"
    rows = []
    skipped = 0
    for p in fs.get_paths(path=base, recursive=True):
        name = getattr(p, "name", "") or ""
        if not name.endswith(".xlsx"):
            continue
        parts = name.split("/")
        if len(parts) < 4:
            continue
        league, season, fname = parts[-3], parts[-2], parts[-1]
        m = PAT.match(fname)
        if not m:
            skipped += 1
            continue
        date, home, away = m.group(1), m.group(2).strip(), m.group(3).strip()
        rows.append({"league": league, "season": season, "date": date,
                     "home_team": home, "away_team": away})
    df = pd.DataFrame(rows).drop_duplicates(["league", "season", "date", "home_team", "away_team"])
    OUT.parent.mkdir(parents=True, exist_ok=True)
    df.to_parquet(OUT, index=False)
    print(f"Catálogo guardado en: {OUT}")
    print(f"Filas: {len(df)} | ligas: {df['league'].nunique()} | "
          f"combos liga-temporada: {df.groupby(['league','season']).ngroups} | xlsx sin parsear: {skipped}")


if __name__ == "__main__":
    main()