
    I,%h                     Z    S SK rS SKrS SKJr  S SKJr  S SK	J
r
  S SKrS rSS jrSS jrg)	    N)Path)PdfPagesc                    [        U 5      nUR                  5       (       d  [        SU 35      eUR                  R	                  5       nUS:X  a   [
        R                  " USS9$ US:X  a   [
        R                  " US	S9$ US:X  a@  / SQnU H  n [
        R                  " XSS9s  $    [        SSR                  U5       35      e[        SU S35      e! [         a  n[        SU SU 35      eSnAff = f! [         a  n[        S
U SU 35      eSnAff = f! [         a     M  [         a  n[        SU SU 35      eSnAff = f)u  
Lee un archivo de datos (.csv, .xls o .xlsx) y devuelve un DataFrame de pandas.

Parámetros:
-----------
ruta_archivo : str o Path
    Ruta completa del archivo a leer.

Retorna:
--------
pd.DataFrame
    El contenido del archivo como un DataFrame.

Lanza:
------
FileNotFoundError
    Si el archivo no existe en la ruta especificada.
ValueError
    Si el archivo no puede ser leído o tiene un formato no soportado.
UnicodeDecodeError
    Si no se puede decodificar el CSV con los encodings comunes.
u   El archivo no se encontró: z.xlsxlrd)enginez!No se pudo leer el archivo .xls: z
Error: Nz.xlsxopenpyxlz"No se pudo leer el archivo .xlsx: z.csv)zutf-8z
ISO-8859-1latin1cp1252F)encoding
low_memoryu0   Error inesperado al leer CSV con codificación 'z': z7No se pudo leer el archivo CSV con las codificaciones: , z"Formato de archivo no soportado: 'z%'. Solo se permiten .csv, .xls, .xlsx)r   existsFileNotFoundErrorsuffixlowerpd
read_excel	Exception
ValueErrorread_csvUnicodeDecodeErrorjoin)ruta_archivoruta	extensioneencodings_a_probarencs         ic:\Users\julio\OneDrive\Documentos\Trabajo\IdeasFrscas\Necesidad de vivienda\../Funciones\Funciones_v2.pyleer_archivor    	   s   . D;;==">tf EFF!!#IF	U==f55 
g		V==j99 
f	H%Ca{{4%HH & !EdiiPbFcEde
 	

 =i[Hmnoo1  	U@iPQsSTT	U  	VA$yQRPSTUU	V &  a #STWSXX[\][^!_``asN   C ,C9 D
C6 C11C69
DDD
E)	E2EEc           
      J   [        U5       n[        R                  " SS9u  p4SU R                   SSR	                  U R
                  S S 5      U R                  S   S:  a  SOS	-    S
U R                  5       R                  5        SU R                  R                  5       R                  5        S3	nUR                  S5        UR                  SSUSSSS9  UR                  U5        [        R                  " 5         U R                  5       R                  5       nXfS:     R!                  SS9nUR"                  (       d^  [        R                  " SS9u  p4UR%                  SUSS9  UR'                  S5        UR                  U5        [        R                  " 5         U R)                  5       nXwS:*     nUR"                  (       d^  [        R                  " SS9u  p4UR%                  SUSS9  UR'                  S5        UR                  U5        [        R                  " 5         [        R                  " SS9u  p4UR                  S5        U R+                  5       R-                  S5      R/                  5       n	UR                  SSU	SSSS9  UR                  U5        [        R                  " 5         U R1                  SS9R
                  n
U
 H  nX   R                  SS 9R3                  S5      n[        R                  " SS9u  p4UR5                  UR6                  R9                  [:        5      UR<                  S!S"9  UR'                  S#U S$35        UR                  U5        [        R                  " 5         M     S S S 5        [?        S%U 35        g ! , (       d  f       N= f)&N)
      )figsizez&Resumen general:
        Dimensiones: z
        Columnas: r   r"      ... z
        Duplicados: z
        Tipos de datos: z	
        offg{Gz?g?   top	monospace)fontsizeverticalalignmentfamilyr   F)	ascendingbarhsalmon)kindaxcolorzValores nulos por columnagrayu!   Columnas con un solo valor único   object)includedropnaskyblue)r4   zTop 10 valores en ''u   ✅ Diagnóstico guardado en: ) r   pltsubplotsshaper   columns
duplicatedsumdtypesvalue_countsto_dictaxistextsavefigcloseisnullsort_valuesemptyplot	set_titlenuniquedescriberound	to_stringselect_dtypesheadr0   indexastypestrvaluesprint)df
nombre_pdfpdffigr3   textonulosunicosirrelevantesresumencolumnas_objcolvaloress                r   diagnostico_base_datos_pdfrf   D   s   	*	,,w/hhZ  99RZZ_-"((1+:JPRST U]]_((*+ ,//199;< =		 	
c52{[C		 		!ai ,,u,={{ll73GCJJFrJ:LL45KKIIK k*!!ll73GC6b?LL<=KKIIK ,,w/
++-%%a(224
1geKXC		 '''9AACg**%*8==bAGll73GCGGGMM((-w~~YGOLL.se156KKIIK  Y 
h 
*:,
78i 
	s   M1N
N"c                    U R                  5       n U R                  / SQ[        R                  SS9  U R                  U R                  SS9S:*  U R                  5       R                  5       U:  -     nU R                  USS9  U R                  SSS	9  U R                  SSS
9  U(       aX  [        S5        [        S[        U5       35        [        SU R                  S    35        [        SU R                  S    35        U $ )u  
Limpia un DataFrame eliminando columnas irrelevantes, 
reemplazando valores problemáticos y asegurando tipos adecuados.

Parámetros:
------------
df : pd.DataFrame
    Base de datos a limpiar.
drop_threshold : float, default=0.95
    Umbral de proporción de valores nulos o repetidos para eliminar una columna.
verbose : bool, default=True
    Si se desea imprimir resumen de limpieza.

Retorna:
--------
pd.DataFrame
    DataFrame limpio y listo para análisis.
)*NAzN/Azn/az--u   …r&   T)inplaceFr9   r%   )r@   rj   all)howrj   )droprj   u   🔍 Limpieza completa:z - Columnas eliminadas: z - Columnas restantes: z - Filas totales: r   )copyreplacenpnanr@   rO   isnameanrm   r:   reset_indexrY   lenr?   )rZ   drop_thresholdverbosecolumnas_irrelevantess       r   limpiar_base_viviendary   {   s    ( 
B JJ<bffdJS JJ	5	!Q	&2779>>+;n+LM GG)4G8 II%I& NNdN+ ')(-B)C(DEF'}56"288A;-01I    )zdiagnostico_datos.pdf)gffffff?T)pandasr   numpyrp   pathlibr   matplotlib.pyplotpyplotr=   matplotlib.backends.backend_pdfr   r    rf   ry    rz   r   <module>r      s)        4 9pv59n-rz   