
    adR                     Z    d dl mZ d dlZd dlZd dlmZ d dlm	Z	 d dl
T d Zd Zd Zd ZdS )	    N)html)dcc)*c                     | dk    rt           }n| dk    rt          }nt          }d |d                                         D             }|S )uj  
    Actualiza las opciones del menú desplegable de los estados en función de la pestaña seleccionada.
    Args:
        tab (str): Pestaña seleccionada en la aplicación Dash.
    Returns:
        list: Listado de opciones para el menú desplegable de los estados.
        Cada opción es un diccionario con una etiqueta ("label") y un valor ("value").
    tab-1tab-2c                     g | ]}||d S ))labelvalue ).0entidads     6/var/www/html/visualizacion-main/function_callbacks.py
<listcomp>z+update_dropdown_options.<locals>.<listcomp>   s6     Z Z Z" ")7;; Z Z Z    #Entidad Federativa donde se imparte)df_lic	df_masterdf_docunique)tabdfentidad_optionss      r   update_dropdown_optionsr   	   sl     g~ 	 Z Z&()N&O&V&V&X&XZ Z ZO r   c                    d}| dk    rt           }dt           d<   t          j        ||d         |j        dddd	d
|d         dg          }|                    |g d         |           |                    t          ddddd          t          dddd                     nG| dk    rt          }dt          d<   t          j        ||d         |j        dddd	d
t          d         dg          }|                    |g d         |           |                    t          ddddd          t          dddd                     nt          }dt          d<   t          j        ||d         |j        dddd	d
dgt          d                   }|                    |g d         |           |                    t          ddddd          t          dddd                     i ddd d!d"d!d#d!d$d!d%d!d&dd'd!d(d)d*d!d+d)d,d!d-d.d/d!d0dd1d!d2dd)d)d!d)dd)d)d!d3d)d4d.d3d)d)d5}|t||d7         |k             }t          |          dk    r|
                    |d!          }|                    dd8gdd8gd9t          |d                                         |d:                                         
          |d;d<           |                    t          |d                                                   t          |d:                                                   d
=           n|                    dd	d
=           |                    d>?           |                    d>d;t          dd	
          @           |                    dd	d
d>d;dAB           n|                    dd	d
=           |                    d>?           |                    d>d;t          dd	
          @           |                    dd	d
d>d;dAB           |                    t          g C          dDdDt          dddd          E           |S )FuZ  
    Genera una figura interactiva de dispersión en un mapa según la pestaña y estado seleccionados.
    Args:
        tab (str): Pestaña seleccionada en la aplicación Dash.
        estado (str): Estado seleccionado en el menú desplegable.
    Returns:
        plotly.graph_objects.Figure: Figura interactiva de dispersión en un mapa.
    u  
    <b>Institución/Universidad:</b> %{customdata[0]}<br>
    <b>Nombre del programa:</b> %{customdata[1]}<br>
    <b>¿Pertenece al PNPC?:</b> %{customdata[2]}<br>
    <b>Dirección física:</b> %{customdata[3]}<br>
    <b>Correo:</b> %{customdata[4]}<br>
    <b>Sede:</b> %{customdata[5]}<br>
    <b>Página web del programa:</b> <a href="%{customdata[6]}" target="_blank" style="color:white; font-weight:bold;">%{customdata[6]}</a><br>
    r   
   sizelatg@i  gOn7@gN@aY)r   lon#00667C)r   r   zoomheightcenterr   color_discrete_sequence)   Institución/Universidadz#Nombre de la Carrera (Licenciatura)   ¿Pertenece al PNPC?u!   Dirección física (Licenciatura)CorreozSede (Licenciatura)u5   Página web del programa de Licenciatura (si hubiera))
customdatahovertemplatezrgba( 36, 36, 36, 0.65)   Ralewaywhitezrgba( 36, 36, 36, 0.65 ))bgcolor	font_sizefont_family
font_colorbordercolorr   lrtb)
hoverlabelmarginr   #E85D7E)r%   u   Nombre del Programa (Maestría)    ¿Pertenece al PNPC? (Maestría)u   Dirección física (Maestría)r'   u   Sede (Maestría)u2   Página web del programa de Maestría (si hubiera)#7D5CB8)r   r   r!   r"   r#   r$   r   )r%   z Nombre del programa de Doctorado    ¿Pertenece al PNPC? (Doctorado)u   Dirección física (Doctorado)r'   zSede (Doctorado)u2   Página web del programa de Doctorado (si hubiera)Aguascalientes   zBaja California   zBaja California SurCampecheChiapas	Chihuahuau   Ciudad de MéxicoCoahuilaColima	   Durango
GuanajuatoGuerreroHidalgo   Jaliscou   Estado de Méxicou
   MichoacánMorelosg      @g      @)Nayaritu   Nuevo LeónOaxacaPueblau
   QuerétarozQuintana Roou   San Luis PotosíSinaloaSonoraTabasco
TamaulipasTlaxcalaVeracruzu   Yucatán	ZacatecasNr      )xyr   zopen-street-map)domainr#   r!   stylebearing)mapbox_centerg@)mapbox_zoom)r!   r[   r#   )r#   r!   r[   )mapbox)layerszrgba(0,0,0,0))r_   plot_bgcolorpaper_bgcolorr8   )r   pxscatter_mapboxr   update_tracesupdate_layoutdictr   r   lengetupdate_mapboxesmeanfloat)r   estadohover_templater   figzoom_levels	df_estado
zoom_levels           r   render_contentrs      s   N g~ <,v$&uI$&F%('*/6y'I'I%'Z9B" " " 	R  )C  )C  )C  &D(6 	 	8 	8 	8T-!2&
 &
 &
 a1*** 	 	, 	, 	, 	, 
 ',	&$&uI$&F%('*/6y'I'I%.v%69BE E E 	R  )B  )B  )B  &C(6 	 	8 	8 	8T-!2&
 &
 &
 a1*** 	 	, 	, 	, 	, v$&uI$&F%('*/6y'I'I9B%+F^5 5 5 	R  )C  )C  )C  &D(6 	 	8 	8 	8T-!2&
 &
 &
 a1*** 	 	, 	, 	,!"!1! 	q! 	A	!
 	1! 	Q! 	R! 	A! 	!! 	1! 	a! 	A! 	2! 	1! 	R!  	a!!" 	2#!$ A! ! !KF  =
r?@FJK	y>>A 	$33JV1a&11	% 0 5 5 7 7 )% 0 5 5 7 79 9 9'      &+Ie,<,A,A,C,C&D&D&+Ie,<,A,A,C,C&D&DF F     
 &-i@@     #      'Y777     
 &-i@@.       	"))<< 	 	
 	
 	
 	c***#G333 	 	
 	
 	

 	"))<<*  	 	
 	
 	
 	   ))!qA+++ 	 		
 		
 		
 Jr   c                    g }|dk    r| dk    rt          t                    }t          t          t          d         dk                       }t          t          d         t          d                                         k             d         j        d         }t          d                                         }ns| dk    rt          t
                    }t          t
          t
          d	                             d
dg                             }t          t          d         t          d                                         k             d         j        d         }t          d                                         }n| dk    rt          t                    }t          t          t          d         d
k                       }t          t          d         t          d                                         k             d         j        d         }t          d                                         }nd}d}d}d}|
                    t          j        t          j        t          j        d          t          j        t!          j        dd          t!          j        d| d          g          gd          t          j        t          j        d          t          j        t!          j        dd          t!          j        d| d          g          gd          |
                    t          j        t          j        d          t          j        t!          j        d| d          t!          j        dd          t!          j        d| d          g          gd                    g                     |dk    r| dk    rt          t          d         |k             }nE| dk    rt
          t
          d         |k             }n"| dk    rt          t          d         |k             }d|j        v r>t          ||d         dk                       }t          ||d         dk                       }	|
                    t          j        t          j        d| d          t          j        t!          j        dd           t!          j        d| d          g          gd                     |
                    t          j        t          j        d| d          t          j        t!          j        d!d          t!          j        d|	 d          g          gd                     d	|j        v s	d|j        v rd|j        v r1t          ||d                             dd
g                             }n<d	|j        v r1t          ||d	                             dd
g                             }nd}|
                    t          j        t          j        d| d          t          j        t!          j        d"d          t!          j        d| d          g          gd                     |S )#u   
    Esta función se encarga de actualizar las estadísticas de la entidad federativa seleccionada
    y las coloca en las tarjetas correspondientes.
    vacior   r&   z	No aplica
Frecuencia   Árear   r   r:   Siu   Síztab-3r<   Por nivel educativozTotal de Programas:z
card-title	className	z	card-text!card border-secondary mb-3 shadowzTotal de Programas PNPC:card border-secondary mb-3u   Área de interés mayorzFrecuencia:r   u(   ¿La Institución es pública o privada?u   PúblicaPrivadazPara el estado de :u!   Total de Instituciones Públicas:cz Total de Instituciones Privadas:z.Total de Instituciones pertenecientes al PNPC:)rh   r   conteo_areas_licmaxilocr   isinconteo_areas_masterr   conteo_areas_docappenddbcColCard
CardHeaderCardBodyr   H4H5columns)
r   rm   cardstotal_programs
total_pnpcmax_areamax_area_freqrq   total_publicastotal_privadass
             r   update_statsr      sc   
 E Q
'> 	 [[Nv45DEG GJ'(8(F(8(F(J(J(L(L)M NNUWW[\]_H,\:>>@@MMG^ 	 ^^N)$FGLLdTY][[\^ ^J*+>|+L.A,.O.S.S.U.U,V WW^``defhH/=AACCMMG^ 	 [[Nv@ATIJL LJ'(8(F(8(F(J(J(L(L)M NNUWW[\]_H,\:>>@@MMNJ"HM 	GHN+@AAL$(G,A6B%D %D %D$(G,A,A,A6A%C %C %C!" 
 #F   HN+@AAL$(G,F6B%D %D %D$(G,=,=,=6A%C %C %C!" 
 #?   LL #/H I I #(,X:E)G )G )G(,:F)H )H )H(,0D]0D0D:E)G )G )G%&	!" 	!" 'J   =02 24	
 4	
 4	
j  R'> 		Xv&KLPVVWII G^ 	X!),Q"RV\"\]II G^ 	Xv&KLPVVWI
 69JJ &	 )$NOS]]^` `N )$NOS\\]_ _N LL'EF'E'E'EFF $(K25!7 !7 !7 $(=^(=(=2=!? !? !? 
 B      LL'EF'E'E'EFF $(J2>!@ !@ !@ $(=^(=(=2=!? !? !? 
 B    $ .1BB 	Fhlul}F} 	1Y5FF  i(JKPPRWY]Q^__`b b

3y7HH  i(JKPPRWY]Q^__`b b

 
 LL'EF'E'E'EFF $$T`l!n !n !n $(9Z(9(92=!? !? !? 
 B    " Lr   c                    g }d}t          j        t          ddddddg d          }|                    ddt	          d	
          t	          dddd          t	          dd          t	          dd          dddd
  
         t          j        |          }|                    t          j	        t          j
        t          j        d          t          j        |          gd          g                     t          j        t          g ddg d          }|                    t          j	        t          j
        t          j        d          t          j        t          j        |                    gd          g                     |                    t	          dddd          t	          dd          d           t          j        t          ddd d!g d"d#dd$d%&          }|                    ddt	          d	
          t	          dddd          t	          dd          t	          dd          d'd(dd)d*d+d,-           |                    t          j        t          j	        t          j
        t          j        d.          t          j        t          j        |                    gd          g          g                     |S )/u   
    Esta función se encarga de actualizar las estadísticas generales del dataframe
    y generar gráficos de algunos totales.
    r   Tipo de ProgramaTotalzTotal de Programas)r   r   )r    r9   r;   )rX   rY   colorlabelsr$   z#242424T)remover2   r*   r,   )r   r   2   pixels(   v)
ra   rb   modebarr8   legend_fontfontlegend_entrywidthlegend_entrywidthmodelegend_itemwidthlegend_orientation)figurery   r~   rz   )zNivel educativor   r%   )pathvaluesr$   u1   Gráfico de Sunburst por Nivel Educativo y Estador}      )r8   r   grid_columnsNivelrv   rw   group)r   rw   rv   u    Frecuencia de áreas de interészNivel de estudio)rv   r   )rX   rY   r   barmode
hover_datatitler   i,  trace   hleftmiddle)ra   rb   r   r8   r   r   r   legend_itemsizingr   r   r   legend_title_sidelegend_valignu2   Gráfico de Áreas de Interés por Nivel Educativo)rc   bar	df_totalsrf   rg   r   Graphr   r   r   r   r   r   sunburstdf_combined	df_conteoRow)r   r   r   ro   graphfig_sunburst	fig_areass          r   update_general_statsr     s   
 EJ
&0GCU"6-?A A*6 *6 *6  C 
 
 
 a1Q'''
 
 
 
 
 
 &'    . IS!!!E	LL'<==U++ ;   	 	
 
 
 ;{ 2u 2u 2u ~E _) _) _)* * *L 
LLHNKM ML,!?!?!?@@
 >  	
 
	
 
	
   a1Q'''
 
 
      yG|7T["B"B"BJl-9DVWWY Y YI 
 
 
 a1Q'''
 
 
 
 
 
 !& +    2 
LLGPR RSYi%@%@%@AA
 B  	 
 

 	 	  $ Lr   )plotly.expressexpressrc   pandaspddash_bootstrap_componentsr   dashr   r   datar   rs   r   r   r   r   r   <module>r      s              ' ' ' '                  ,r r rjl l l^~ ~ ~ ~ ~r   