
    \j!                        S r SSKrSSKrSSKJr  SSKrSSKrSSK	r	SSK
r
\" \5      R                  5       R                  R                  r\S-  S-  S-  rS\R                   4S jrS\4S	 jr\S
:X  a  \R*                  " \" 5       5        gg)u  
Profili arbitro (Premier League): severità, cartellini, falli, "lascia giocare".

Per ogni arbitro con almeno --min-matches partite:
  - gialli/partita, rossi/partita, falli fischiati/partita
  - cartellini per falllo (severità a parità di fischi)
  - bias casa: differenza gialli ospiti - gialli casa vs media lega

Include un test di AFFIDABILITÀ split-half: dividiamo le partite di ogni
arbitro in due metà (alternate cronologicamente) e correliamo i gialli/partita
tra le due metà. Correlazione alta = la severità è un tratto stabile e
predittivo; vicina a zero = è rumore e non va usata in un modello.

Uso:
    python scripts/referee_profiles.py
    python scripts/referee_profiles.py --min-matches 50

Output: data/processed/referee_profiles.csv
    N)Pathdata	processedzreferee_profiles.csvreturnc                    [         R                  " U R                  U R                  U R                  U R
                  SS9n[        R                  " SXR                  4S9nUR                  5         UR                  R                  SS/5       H  n[        R                  " X#   SS9X#'   M     US	   US
   -   US'   US   US   -   US'   US   US   -   US'   UR                  SS/S9$ )N	tigertips)hostportuserpassworddatabasea2  
        SELECT m.referee, m.match_date,
               m.home_yellow, m.away_yellow, m.home_red, m.away_red,
               m.home_fouls, m.away_fouls
        FROM matches m
        JOIN leagues l ON l.id = m.league_id
        WHERE l.code = %s AND m.referee IS NOT NULL
        ORDER BY m.match_date
    )paramsreferee
match_datecoerce)errorshome_yellowaway_yellowyellowshome_redaway_redreds
home_fouls
away_foulsfouls)subset)pymysqlconnectr	   r
   r   r   pdread_sqlleagueclosecolumnsdrop
to_numericdropna)argsconndfcs       3C:\wamp64\www\Tigertips\scripts\referee_profiles.pyloadr,   #   s    ??						$(MMKID	  
{{n
&B 	JJLZZ__i67beH5 8}%=(99ByMJ"Z.0BvJ\"R%55BwK99Y0911    c                     [         R                  " SS9n U R                  SSSS9  U R                  S[        SS	9  [        R
                  " U 5        U R                  5       n[        U5      nUR                  (       a  [        S
UR                   35        gUS   R                  5       n[        SUR                   S[        U5       SUS SUS   R                  5       S S3	5        UR                  S5      R                  SSSSSSS9nUS   US   -   US   -  US '   US!   US"   -
  US#'   XDS$   UR                  :     R!                  SS%S&9n[        S'[        U5       S(UR                   S)35        [        S*S+ S,S- S.S/ S0S1 S2S1 S3S4 S5S6 35        UR#                  5        H7  u  pV[        US+ US$   S7 US   S8 US   S9 US   S: US    S; US#   S< 35        M9     US   R%                  5       US   R'                  5       -
  n[        S=US   R'                  5       S S>US   R%                  5       S S?US S@35        / nUR                  S5       H  u  pY[        U	5      UR                  :  a  M   U	R!                  SA5      R)                  SBSC9n	U	R*                  S S SD2   U	R*                  SS SD2   pUR-                  XZS   R                  5       US   R                  5       45        M     [.        R0                  " U/ SEQSF9n[3        [4        R6                  " USG   USH   5      SI   5      nUSJ:  a  SDU-  SU-   -  O
[3        SK5      n[        SLUSM SNUSM S@35        USO:  a  SPnOUSQ:  a  SRnOSSn[        STU 35        [8        R;                  SUUR                   SV35      nUR=                  SW5      R?                  U5        [        SXU 35        gY)ZNzProfili arbitro per lega)descriptionz--leagueE0zCodice lega (default E0))defaulthelpz--min-matches   )typer1   z(Nessuna partita con arbitro per la lega    r   zLega z | partite analizzate: z | media lega: z.2fz	 gialli, r   z.1fz falli a partita
r   )r   size)r   mean)r   r7   )r   r7   )r   r7   )r   r7   )partite	gialli_pgrossi_pgfalli_pggialli_casagialli_ospitir9   r:   r;   cartellini_per_fallor=   r<   	bias_casar8   F)	ascendingz=== Profili (z arbitri con >= z partite) ===Arbitroz<16nz>5gialliz>8rossiz>7falliz
cart/falloz>11z	bias osp.z>10z>5.0fz>8.2fz>7.2fz>7.1fz>11.3fz>+10.2fu   
Spread severità: z -> z gialli/partita (delta )r   T)r$      )r   meta_ameta_b)r#   rH   rI   )r   r5   nanu0   
Affidabilità split-half (gialli/partita): r = z.3fz" (Spearman-Brown campione intero: g      ?u:   la severità è un TRATTO STABILE: vale la pena modellarlag      ?zAsegnale reale ma moderato: utile con regolarizzazione (shrinkage)u:   quasi tutto rumore: l'identità dell'arbitro aggiunge pocoz
Verdetto: referee_profiles_z.csv   z
Profili salvati in: r   ) argparseArgumentParseradd_argumentintconfigadd_db_args
parse_argsr,   emptyprintr!   r7   lengroupbyaggmin_matchessort_valuesiterrowsmaxminreset_indexilocappendr   	DataFramefloatnpcorrcoefOUT_PATH	with_nameroundto_csv)parserr'   r)   
league_avgprofnamerspreadhalvesgrpevenoddhdfr_fullverdictout_paths                   r+   mainrx   8   s3   $$1KLF

D7QR
c2>
vD	dB	xx8FGI##%J	E$++5c"gYoIbk&6&6&8%==OQ R ::i $$#%!"+- % D %)$5Z8H$HDQ[L\#\D	 _-]0CCDY4#3#334@@X]@^D	M#d)$4T5E5E4Fm
TU	YsOC8HR=WRL#{3/1 2==?c
1Y<.q~e.D:u%a
mE%:)*621[>'2JL 	M #
 +""$tK'8'<'<'>>F	 k!2!6!6!8 =T+""$S))@AO P FZZ	*	s8d&&&ool+77T7BHHSqSM388ADqD>ct)_113S^5H5H5JKL + ,,v'F
GCbkk#h-X7=>A !BQUa!e_E%LF	=aW E..4S\< =3wN	
TUN	Jwi
 !!!$5dkk]$"GHHJJqM"	"8*
-.r-   __main__)__doc__rN   syspathlibr   numpyrd   pandasr   r   rR   __file__resolveparentPROJECT_ROOTrf   rb   r,   rQ   rx   __name__exit r-   r+   <module>r      s   (  
     H~%%'..55& ;.1GG2",, 2*@c @F zHHTV r-   