
    ՙ[jF              
          S r SSKrSSKrSSKrSSKrSSKJr  SSKrSSK	r	\" \
5      R                  5       R                  R                  r\S-  S-  S-  r\S-  S-  S-  rS	S
SSSS.r\" SS5       V s/ s H  n \" U 5      PM     sn rSS0rSS\S\S\S\S-  4S jjrS\4S jr\S:X  a  \R6                  " \" 5       5        ggs  sn f )a  
Scarica lo storico xG (expected goals) da Understat per le leghe coperte:
Premier League, La Liga, Bundesliga, Serie A, Ligue 1 (niente Serie B).

I dati arrivano dall'endpoint JSON interno del sito
(GET /getLeagueData/<lega>/<anno>, lo stesso usato dalla pagina web).

Uso:
    python scripts/download_xg.py
    python scripts/download_xg.py --seasons 2024 2025   # solo alcune stagioni

Output:
    data/raw/understat/<league>_<year>.json   (cache)
    data/processed/xg.csv                     (tutte le partite con xG)
    N)Pathdataraw	understat	processedzxg.csvE0SP1D1I1F1)EPLLa_liga
BundesligaSerie_ALigue_1i  i  z
User-AgentzkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36leagueyearforcereturnc                 <   [         R                  SSS9  [         U  SU S3-  nUR                  5       (       aB  U(       d;  [        SUR                   35        [
        R                  " UR                  SS95      $ SU  S	U 3n[        S
SU  S	U 3S.-  n[        S5       H  n [        R                  " XESS9nUR                  5         UR                  5       S   nUR                  [
        R                  " U5      SS9  [        SU  S	U S[        U5       S35        [         R"                  " S5        Us  $    [        SU 35        g ! [        R$                   a>  n	[        SUS-    SU SU	 35        [         R"                  " SUS-   -  5         S n	A	M  S n	A	ff = f)NTparentsexist_ok_z.jsonz
  [cache] zutf-8)encodingz$https://understat.com/getLeagueData//XMLHttpRequestzhttps://understat.com/league/)zX-Requested-WithReferer      )headerstimeoutdatesz
  [ok]    z: z partitegffffff?z	  [retry    z/3] z
  [FAIL]  )RAW_DIRmkdirexistsprintnamejsonloads	read_textHEADERSrangerequestsgetraise_for_status
write_textdumpslentimesleepRequestException)
r   r   r   cacheurlr!   attemptrespr   excs
             .C:\wamp64\www\Tigertips\scripts\download_xg.pyfetch_league_seasonr>   .   s   MM$M.$u--E||~~e
5::,'(zz%//7/;<<0$
@C-=&CF81TF$SU UG8
	*<<bAD!!#99;w'DTZZ-@JvhavRD	{(CDJJsOK  
Jse
	 (( 	*Igk]$se2cU;<JJqGaK())	*s   $BE		F3FFc                     [         R                  " SS9n U R                  SS[        SS9  U R                  SSS	S
9  U R	                  5       n/ n[
        R                  5        H  u  p4UR                   H  n[        X5UR                  S9nUc  M  U H  nUR                  S5      (       d  M  UR                  UUS   US   S   US   S   [        US   S   5      [        US   S   5      [        [        US   S   5      S5      [        [        US   S   5      S5      S.5        M     M     M     U(       d  [        S5        g[         R"                  " U5      n[         R$                  " US   5      R&                  R(                  US'   UR+                  SS/5      R-                  SS9n[.        R0                  R3                  SSS9  UR5                  [.        SS9  [        S5        [        S[7        U5       35        UR9                  S5       HI  u  pI[        S US! S"[7        U	5      S# S$U	S   R;                  5        S%U	S   R=                  5        35        MK     [        S&[.         35        g')(NzScarica xG storico da Understat)descriptionz	--seasons+z-Anni di inizio stagione, es. 2024 per 2024/25)nargsdefaulthelpz--force
store_truezIgnora la cache)actionrD   )r   isResultdatetimehtitleagoalsxGr   )r   rH   home_usaway_ushgagxg_hxg_azNessun dato scaricato.r$   dater   T)dropr   F)indexz
=== Riepilogo xG ===zPartite totali: z  z<5 z>6z   z -> z
Salvato in: r   )argparseArgumentParseradd_argumentDEFAULT_SEASONS
parse_argsLEAGUESitemsseasonsr>   r   r0   appendintroundfloatr(   pd	DataFrameto_datetimedtrT   sort_valuesreset_indexOUT_PATHparentr&   to_csvr4   groupbyminmax)
parserargsrowsr   coder   r   matchdfgrps
             r=   mainrw   H   sA   $$1RSF
3L  N
	,=NODDLLD&v4::FD|yy,," %j 1$Sz'2$Sz'2eGnS12eGnS12!%dC(8"91=!%dC(8"91=	 	 	 ! (& &'	d	B:/2277BvJ	*	+	7	7T	7	BBOO$6IIheI$	
"#	SWI
&'ZZ)	4)1SXbMS[__->,?tCKOODUCVWX *	N8*
%&    __main__)F)__doc__rX   r*   sysr5   pathlibr   pandasrd   r/   __file__resolverk   PROJECT_ROOTr%   rj   r]   r.   strr[   r-   boollistr>   ra   rw   __name__exit)ys   0r=   <module>r      s      
    H~%%'..55

%
'+
5& ;.9  $)t#45#4a3q6#45 ] ^ 3 t t 4*c *Z zHHTV [ 6s   4C