
    1Q/ii                         S SK rS SKrS SKrS SKJr  SrS r	\R                  " SS9S 5       rS\R                  4S	 jrS
 rS\R                  S\4S jrS\4S jrS rg)    N)st_searchboxzZC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\Proyectos\REM\BD\BD_Mazatlan.xlsmc                     Ub!  US:X  d  [         R                  " U5      (       a  g X-
  U-  S-  $ ! [         a     gf = f)zFRegresa el cambio % entre dos valores, o None si no se puede calcular.Nr   d   )pdisnaZeroDivisionError)currentpreviouss     QC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\Proyectos\REM\resumen.pycalc_delta_pctr      sI    8q=BGGH,=,="h.44 s   	1 
>>F)show_spinnerc                 .   [         R                  " U 5      n[         R                  " US5      n[         R                  " US5      n[         R                  " US5      n[         R                  " US5      n[         R                  " US5      n[         R                  " US   SS9US'   [         R                  " US   SS9US'   S	UR                  ;   a  US	   R                  [        5      R                  R                  S
SSS9R                  R                  SSSS9R                  R                  5       US	'   [         R                  " US	   SS9R                  S5      US	'   OSUS	'   SUR                  ;   a  US   R                  [        5      R                  R                  S
SSS9R                  R                  SSSS9R                  R                  5       US'   [         R                  " US   SS9US'   S H  nXsR                  ;   d  M  X7   R                  [        5      R                  R                  S
SSS9R                  R                  SSSS9R                  R                  SSSS9R                  R                  SSSS9R                  R                  5       X7'   [         R                  " X7   SS9X7'   M     [        R                  " US   R                  5       US   S:g  -  US   US   -  [        R                  5      US'   USS/   R                  5       nSUS'   USS/   R                  5       n	SU	S'   USS/   R                  5       n
SU
S'   [         R                   " XU
/SS9nUR#                  USS/SS9nUR#                  USS/SS9nX#4$ )NVentasPreciosVertical
HorizontalLoteFechacoerce)errorsVentas_periodo, F)regex$r           Inventario_disponible)PrecioM2m2u   m²r   r   	Precio_m2Nombre_desarrolloZonaTipo_proyectoT)ignore_indexleftonhow)r   	ExcelFile
read_excelto_datetimecolumnsastypestrreplacestrip
to_numericfillnanpwherenotnanancopyconcatmerge)pathxlsventaspreciosvertical
horizontallotecolvertical_maphorizontal_maplote_mapzona_maps               r   	load_datarG      sc   
,,t
C]]3)FmmC+G}}S*-HsL1J==f%D nnVG_XFF7O~~gg&6xHGG 6>>)#$VC[Sb.Sb.S 	  $&==#$X$

&) 	  $'  &..0*+VC[Sb.Sb.S 	&' +---*+H+
&'
  //!WWS"EW2WWS"EW2WWT2UW3WWUBeW4UUW L ==hGGL   88!!34GDM)
GK 0&9:??AL$.L!!4f =>CCEN&2N?#(&12779H &H_yy,APTUH \\1  F mm1  G ?    r=   c                     [        U S   R                  5       R                  5       5      n[        U5      S:X  a  S S / 4$ US   n[        U5      S:  a  US   OS nX#U4$ )Nr   r      )sorteddropnauniquelen)r=   periodslast_periodprev_periods       r   get_periodsrT   r   sd    VG_++-4467G
7|qT2~"+K!$W!1'"+tKW,,rH   c                    X S   U:H     R                  5       nXS   U:H     R                  5       nUR                  / SQSS9S   R                  5       nUR                  / SQSS9R                  SSSS	9nUR	                  U/ SQS
S9nU$ )z~
KPIs por proyecto para un periodo:
- Unidades vendidas (Ventas_periodo)
- Precio promedio
- M2 promedio
- Precio_m2 promedio
r   r$   r"   r#   Fas_indexr   r   meanr   rZ   r!   rZ   Precio_promM2_promPrecio_m2_promr&   r'   )r8   groupbysumaggr:   )r=   r>   periodventas_p	precios_pventas_projprecios_projprojs           r   aggregate_proyecto_metricsrj   {   s     Wo/0557H(F2388:I 		?%	P	
 
  		?%	P	*"0 
 

  9  D KrH   
df_periodotipoc                    X S   U:H     R                  5       nUR                  (       a  gSUR                  ;  a  SUS'   UR                  S5      R	                  SSSS 4S	9nUS
   S:H  US   S:  -  nUS
   S:  US   -  nUS
   S:  US   ) -  n[        UR                  5       5      n[        UR                  5       5      n[        UR                  5       5      n	Xx-   n
XxX4$ )Nr$   )r   r   r   r   Ventas_detenidasFr"   )r   rb   )r   rb   c                 &    [        S U  5       5      $ )Nc              3   v   #    U  H/  n[        U5      R                  5       R                  5       S ;   v   M1     g7f))1trueu   sísixN)r/   r1   lower).0rt   s     r   	<genexpr>9clasificar_proyectos.<locals>.<lambda>.<locals>.<genexpr>   s,      :
OP!CFLLN  "&EEqs   79)any)ss    r   <lambda>&clasificar_proyectos.<locals>.<lambda>   s    c :
OP:
 7
rH   )inventario_totalventas_totaldetenidas_flagr}   r   r~   r   )r8   emptyr-   ra   rc   intrb   )rk   rl   df_trc   cond_vendidocond_detenidocond_disponiblen_dispn_vendn_detn_acts              r   clasificar_proyectosr      s   1T9:??ADzz-#( 
,,*
+
/
/9.* -
  0 C *+q0S5H15LML+,q0S9I5JKM-.2<L8M7MNO$$&'F!!#$F!!#$EOE5''rH   tituloc           	          SnSnUb"  US:  a
  SnSUS S3nOSnS	[        U5      S S3nS
U  SU SU SU S3	n[        R                  " USS9  g )NN/Az#999999r   z#00c853u   ↑ ,.1f%z#d50000u   ↓ z
    <div style="text-align:center; padding:8px 0;">
        <div style="font-size:13px; font-weight:600; color:#dddddd;">
            zc
        </div>
        <div style="font-size:20px; font-weight:700; margin-top:2px;">
            z:
        </div>
        <div style="font-size:12px; color:z ; margin-top:0px;">
            z
        </div>
    </div>
    T)unsafe_allow_html)absstmarkdown)r   valordelta	delta_txtdelta_colorhtmls         r   kpi_verticalr      s    IKA:#KuTl!,I#Ks5z$/q1I H  G ++6- 8K D KK-rH   c                   ^^C^D^E^F^G^H [         R                  " S5        [         R                  " S5        U R                  5       nUR                  5       nU(       a,  XfS   R	                  U5         nXwS   R	                  U5         nU(       a,  XfS   R	                  U5         nXwS   R	                  U5         nXfS   U:H     R                  5       mGTb  XfS   T:H     R                  5       OXfS   U:H     R                  5       S-  mHTb?  UR
                  TR
                  -
  S-  UR                  TR                  -
  -   mETES:  a  SmEOSmE[         R                  " S	5        S
TGR                  ;   a,  TGTGS
   S:     R                  S5      S   R                  5       nO"TGR                  S5      S   R                  5       nTb_  S
THR                  ;   a,  THTHS
   S:     R                  S5      S   R                  5       n	O(THR                  S5      S   R                  5       n	OUS-  n	TGR                  SS/5      S   R                  5       R                  S5      R                  5       n
THR                  SS/5      S   R                  5       R                  S5      R                  5       nTGR                  S5      S   R                  5       R                  5       nTb0  THR                  S5      S   R                  5       R                  5       OSnUTE-  nTb  UTE-  OS nS[        4UEUUGUH4S jjnU" S5      u  nnU" S5      u  nnU" S5      u  nn[         R                  " S5      u  nnnnU   [        X5      n[         R                  " SUS Ub  US S3OS5        S S S 5        S nU" UUUS5        U" UUUS5        U" UUUS5        [         R                  " S5        / SQn0 mFU HP  n[!        TGU5      u  nn n!n"Tb#  THR"                  (       d  [!        THU5      u  n#n$n%n&OS=n#=n$=n%n&UU U!U"U#U$U%U&S.TFU'   MR     UUUS.mCUUUS.mD[         R                  " S5      u  n'n(n)S[        4UCUDUF4S jjn*U*" U'S5        U*" U(S5        U*" U)S5        [         R$                  " S5        [         R                  " S5        [         R                  " S5      u  n'n(n)U'   [         R$                  " S 5        / n+S HQ  nUR'                  US5      n,U	R'                  US5      n-[        U,U-5      n.U+R)                  UU,U.b  U.S S3OSS!.5        MS     [         R*                  " [,        R.                  " U+5      S"S#9  S S S 5        U(   [         R$                  " S$5        / n/S H[  nU
R'                  US5      n0UR'                  US5      n1[        U0U15      n.U/R)                  U[1        U0S%5      U.b  U.S S3OSS&.5        M]     [         R*                  " [,        R.                  " U/5      S"S#9  S S S 5        U)   [         R$                  " S'5        [         R2                  " S(UR5                  S)5       S*35        Tb*  [         R2                  " S+TR5                  S)5       S*35        O[         R2                  " S,5        [         R2                  " S-5        S S S 5        [         R$                  " S5        [         R                  " S.5        TGR                  S/5      S   R                  5       R7                  5       n2U2R9                  SS0S19n2Tb1  THR                  S/5      S   R                  5       R7                  5       n3OU2R                  5       n3SU3S'   XwS   U:H     R                  5       n4U4R                  S/S0S29R;                  S3S4S5S69n5U2R=                  U3S/S7S8S99R=                  U5S/S7S:9n6U6R?                  S; SS<9U6S='   U6R9                  S>S0S19n6U6RA                  S5      R                  5       n7U7/ S?Q   RC                  S@SASBSCSDSE.SF9n8SG H,  n9U9U8R                  ;   d  M  U8U9   R1                  S%5      U8U9'   M.     U8R"                  (       d0  SH n:U8SA   R?                  U:5      U8SA'   [         R*                  " U8S"S#9  O[         RD                  " SI5        [         R$                  " S5        [         R                  " SJ5        [G        XgU5      n;Tb  [G        XgT5      n<ONU;R                  5       n<SU<S'   [H        RJ                  U<SK'   [H        RJ                  U<SL'   [H        RJ                  U<SM'   U;R=                  U</ SNQ   / SOQS7S8S99n=U=R?                  SP SS<9U=S='   [         RL                  " SQ/ SRQS"SS9n>U=R                  5       n?U>ST:w  a  U?U?S   U>:H     n?U?R9                  S>S0S19RA                  SU5      n?U?R"                  (       d~  U?/ SVQ   RC                  SWSXS/SYSZS[S\S]S^SV.	SF9n@S_ H,  n9U9W@R                  ;   d  M  W@U9   R1                  S%5      U@U9'   M.     W@S[   R?                  S` 5      U@S['   [         R*                  " U@S"S#9  O[         RD                  " Sa5        [         R$                  " S5        [         R                  " Sb5        TGR                  S/S/S0S29S   R                  5       RC                  SSY0SF9nATb3  THR                  S/S/S0S29S   R                  5       RC                  SSZ0SF9nBOWAR                  5       nBSUBSZ'   WAR=                  WBS/S/S7S:9nAUAR?                  Sc SS<9UAS['   UAS[   R?                  Sd 5      UAS['   [         R2                  " Se5        [         R*                  " UAR9                  / SfQ/ SgQS19S"S#9  g ! , (       d  f       GN= f! , (       d  f       GNJ= f! , (       d  f       GN= f! , (       d  f       GN= f)hNu   REM- Mazatlánub   Ideas Frescas - Dashboard de análisis de ventas y precios de proyectos inmobiliarios en Mazatlánr"   r$   r   r      rK   zKPIs generales del periodor   r   rl   c                 f  > T	T	S   U :H     nT
T
S   U :H     nUR                   (       d0  UR                  S5      S   R                  5       R                  5       OSnTbA  UR                   (       d0  UR                  S5      S   R                  5       R                  5       OSnUT-  nTb  UT-  OS nXV4$ )Nr$   r"   r   r   )r   ra   rb   )rl   df_actdf_prevunidades_actunidades_prev	absor_act
absor_prev
meses_diffperiodo_prevventas_actualventas_prevs          r   calc_absorcion_por_tipo/render_resumen.<locals>.calc_absorcion_por_tipoQ  s    }_=EFk/:dBC << NN./0@AEEGKKM 	 ' OO/01ABFFHLLN 	 !:-	*6*BMJ& 	 $$rH   r   r   r      u   Absorción último mes (Total)r    %r   c                     U    [        X5      n[        R                  " SU S3US Ub  US S3OS5        S S S 5        g ! , (       d  f       g = f)Nu   Absorción último mes ()r   r   r   )r   r   metric)rB   abs_actabs_prevlabelr   s        r   show_absorcion_tipo+render_resumen.<locals>.show_absorcion_tipow  sK    "75EII*5'34.%*%65,b!E SSs	   3?
ALoteszResumen de proyectos por tipo)r   r   r   )disp_actvend_actdet_actact_act	disp_prev	vend_prevdet_prevact_prev   
tipo_labelc                   > TU   nTR                  US5      nTR                  US 5      nUS   nUS   nUS   nUS   nUS   n	US   n
US   nUS	   nUS
:  a  Ub  X8-  nOSnUS
:  a  Ub  XL-  nOS nU    [        R                  " SU 35        [        XY5      n[        R                  " SU Ub  US S3OS5        [        Xj5      n[        R                  " SU Ub  US S3OS5        [        X{5      n[        R                  " SU Ub  US S3OS5        [        X5      n[        R                  " SUS Ub  US S3OS5        S S S 5        g ! , (       d  f       g = f)Nr   r   r   r   r   r   r   r   r   r   z#### zProyectos disponiblesr   r   r   zProyectos vendidoszProyectos detenidosu   Absorción prom x proyecto)getr   r   r   r   )rB   r   datar   r   r   r   r   r   r   r   r   r   absor_prom_actabsor_prom_prev
delta_disp
delta_vend	delta_detdelta_abs_promabsorciones_actualabsorciones_prevmetricss                      r   render_columna_tipo+render_resumen.<locals>.render_columna_tipo  s   z"$((S9#''
D9
#
#y/y/%	%	
#
# Q;7.$.N Na<H0&1O"OKK%
|,- (<JII'**4*@:d#2&e (<JII$**4*@:d#2&e 'w9III%))2)>9T""%E ,NLNII,!$'.<.H>$'r*e; SSs   5CE
Ez---z7Proyectos activos y promedio de unidades por desarrolloz**Proyectos activos por tipo**)TipozProyectos activos   Δ% vs periodo anteriorT)use_container_widthz0**Promedio de unidades vendidas por desarrollo**   )r   zUnidades prom. por desarrollor   u   **Resumen rápido**z- Periodo actual: **z%Y-%m-%dz**z - Periodo anterior comparado: **z(- No hay periodo anterior para comparar.u}   - Estos indicadores te dicen si el mercado está **acelerando** o **frenando** en unidades y en número de proyectos activos.u,   Top 3 Zonas con más ventas (periodo actual)r#   F)	ascendingrW   rY   r[   r\   r]   r&   )_act_prev)r(   r)   suffixesr'   c                 &    [        U S   U S   5      $ NVentas_periodo_actVentas_periodo_prevr   rows    r   r{    render_resumen.<locals>.<lambda>Q      N3';#<cBW>XYrH   )axisDelta_ventas_pctr   )r#   r   r   r^   r_   r`   zUnidades vendidasu    Δ% unidades vs periodo anteriorPrecio promedioM2 promedio   Precio promedio m²)r   r   r^   r_   r`   )r-   )r   r   r   c                 H    [         R                  " U 5      (       a  U S S3$ S$ Nr   r   r   r   r6   rt   s    r   	fmt_delta!render_resumen.<locals>.fmt_deltas  s!    $&HHQKKaXR=:U:rH   u>   No hay información suficiente para mostrar el Top 3 de zonas.u#   Top 10 proyectos que más vendieronr^   r_   r`   )r$   r"   r#   r   rV   c                 &    [        U S   U S   5      $ r   r   r   s    r   r{   r     r   rH   Segmento)Todosr   r   r   )optionsr@   r   
   )	r$   r"   r#   r   r   r   r^   r_   r`   r   ProyectoUnidades periodo actualUnidades periodo anterioru   Δ% unidadesPrecio prom.M2 prom.   Precio m² prom.)r   r   r   c                 H    [         R                  " U 5      (       a  U S S3$ S$ r   r   r   s    r   r{   r     s     rxx{{4m==rH   uC   No hay información suficiente para mostrar el Top 10 de proyectos.z1Vista por zona y tipo de proyecto (desarrollador)c                 &    [        U S   U S   5      $ )Nr   r   r   r   s    r   r{   r     s    N)*C0K,L
rH   c                 H    [         R                  " U 5      (       a  U S S3$ S$ r   r   r   s    r   r{   r     s     288A;;QtHB-9E9rH   u   Esta tabla te permite ver **qué zonas** son más fuertes para cada tipo de proyecto (vertical, horizontal, lote) y cómo se comportan vs el periodo anterior.)r#   r$   r   )TTF)'r   titlecaptionr8   isinyearmonth	subheaderr-   ra   nuniquerb   rZ   r/   r   r   r   r   r   r   append	dataframer   	DataFrameroundwritestrftimereset_indexsort_valuesrc   r:   applyheadrenameinforj   r4   r7   radio)Ir=   r>   periodo_selr   tipo_filterproyectos_seleccionados
ventas_selprecios_selactivos_actualactivos_prevprom_tipo_actualprom_tipo_prevunidades_total_actualunidades_total_prevabsor_total_actualabsor_total_prevr   abs_vert_actualabs_vert_prevabs_horiz_actualabs_horiz_prevabs_lote_actualabs_lote_prev	col_totalcol_vcol_hcol_l	delta_totr   tiposrl   r   r   r   r   r   r   r   r   col1col2col3r   rowsact_aact_pr   rows2apventas_zona_actualventas_zona_prevprecios_actualprecios_zona	top_zonastop3top3_displayrB   r   proj_actual	proj_prevproj_mergedsegmento_seldf_toptop_displayresumen_zona_tiporesumen_prevr   r   r   r   r   r   sI      `                                                               @@@@@@r   render_resumenr;     s    HHJJl
 J,,.K +> ? D DE\ ]^
!.A"B"G"GH_"`a ? ; @ @ MN
!o">"C"CK"PQ
 '2kABGGIM # 	g&,67<<>7+{:;@@BQF  !&&):)::b@KDUDUXdXjXjDjk
>J
 LL-. -"7"77-(?@1DEW_%&9;WY 	 '..?@ST\\^"k&9&99K(?@1DE)*=?  '..?@ST\\^L%) 	0CDEFVW			!		  	_.ABCDTU			!		  	123CDHHJNNP 
 # 	/01ABFFHLLN  /;,8,Dj($ 
%c % %, &=Z%H"O]'>|'L$n%<V%D"O] &(ZZ]"IueU 
"#5H	
		,!$'%.%:yb!	
 
 zJ/NwG
 LL01 /EG/CMSW/X,(GW#K,=,=7KKY]7^4Iy(H:;;I;	;Hx ! ""  	
 * $& "$ zz!}D$;S ; ;~ j)l+f% KK LLJKzz!}D$	
456D"&&tQ/E $$T1-E"5%0EKK%*@E@QeD\+<W\ 	 7 	R\\$'TB 
 

FG6D $$T1-A""4+A"1a(ELL16q!@E@QeD\+<W\ 	 7 	R\\%(dC 
 

)*
";#7#7
#C"DBG	
 #HH2<3H3H3T2UUWX HH?@
=	
 
  KK
 LL?@ 	f%&67;;=IIK  ,77E 8  '(89==?KKM 	 .224-.)* !W!5!DEJJLN 		%	(	*"0 
 

  #((V:K ) eV    %.OOY %4 %I ! %%&:e%LI >>!!!#D    v"5 B,$3
   $ I,&&& ,S 1 7 7 :L I 	; <H.<

%	
 	78 	\t<
PQKK
 LL67 -ZkRK.zU	$$&	&'	"##%66	- !vv	)&(ff	"###L	
 :" $ K '2&7&7Y '8 'K"# 88;L Fw/<?@ 4FKKBOF<< 

 
 6!'%/&?'B$2-%"4
  
 	0 DCk)))#.s#3#9#9!#<C  D '2.&A&G&G='
N# 	[d;
UVKK
 LLDE 		&/*U	;<L	N		)+DE	F	  Wfo.W?@PRSUV-/JKVL	 	 )--/4501)//O$ 0  ):(?(?	
 	 )@ )n% ):.(I(O(O9)n% HH	`
 LL"..<% /   !a 
T 
 
 
s3   ,/nBn.5B#o "Bo
n+.
n= 
o
o!)pandasr   numpyr4   	streamlitr   streamlit_searchboxr   	FILE_PATHr   
cache_datarG   r   rT   rj   r/   r   r   r;   rH   r   <module>rC     s|       ,i	 E"X #Xv- -%T(R\\ ( (B. .@\!rH   