import gradio as gr from analisis import AnalizadorDatos analizador_global = None def cargar_y_mostrar(file): global analizador_global analizador = AnalizadorDatos(file.name) if not analizador.cargar_datos(): return "Error al cargar archivo", None, None analizador_global = analizador return ( f"Archivo cargado correctamente: {analizador.metadata['nombre']}\n" f"- Tamaño: {analizador.metadata['tamaño_mb']} MB\n" f"- Filas: {len(analizador.df)}\n" f"- Columnas: {len(analizador.df.columns)}\n", analizador.df.head(), [col['nombre_columna'] for col in analizador.nulos_por_columna] ) def generar_graficos(columnas): global analizador_global if not analizador_global: return None graficos = analizador_global.generar_graficos(columnas) return [gr.Image(value=v['path'], label=k) for k, v in graficos.items()] def generar_reporte(): global analizador_global if not analizador_global: return None, None reporte_path = analizador_global.generar_reporte() reporte_nulos = analizador_global.generar_reporte_nulos() return reporte_path, reporte_nulos with gr.Blocks(title="Análisis exploratorio avanzado con R y Python") as demo: gr.Markdown("## Exploración de datos con R, Python y Gradio") with gr.Row(): archivo_input = gr.File(label="Sube un archivo", file_types=[".csv", ".xlsx", ".json", ".parquet"]) cargar_btn = gr.Button("Cargar archivo") estado_carga = gr.Textbox(label="Estado de carga", interactive=False) df_preview = gr.Dataframe(label="Vista previa") columnas_selector = gr.CheckboxGroup(label="Selecciona columnas para análisis", choices=[]) cargar_btn.click( fn=cargar_y_mostrar, inputs=[archivo_input], outputs=[estado_carga, df_preview, columnas_selector] ) graficos_output = gr.Group(label="Gráficos generados") graficar_btn = gr.Button("Generar gráficos") graficar_btn.click(fn=generar_graficos, inputs=[columnas_selector], outputs=[graficos_output]) with gr.Row(): generar_reporte_btn = gr.Button("Generar reporte") reporte_html = gr.File(label="Descargar reporte") reporte_nulos = gr.Textbox(label="Análisis de nulos") generar_reporte_btn.click( fn=generar_reporte, inputs=[], outputs=[reporte_html, reporte_nulos] ) if __name__ == "__main__": demo.launch()