Spaces:
Sleeping
Sleeping
| 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 | |
| columnas_disponibles = [col['nombre_columna'] for col in analizador.nulos_por_columna] | |
| 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(), | |
| gr.update(choices=columnas_disponibles) | |
| ) | |
| 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 procesar_nulos(metodo): | |
| global analizador_global | |
| if not analizador_global: | |
| return "Error: No hay datos cargados", None | |
| resultado = analizador_global.procesar_valores_nulos(metodo) | |
| df_actualizado = analizador_global.df.head() | |
| return resultado, df_actualizado | |
| 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") | |
| gr.Markdown("### Procesamiento de Valores Nulos") | |
| with gr.Row(): | |
| metodo_nulos = gr.Radio( | |
| choices=["media", "mediana", "moda"], | |
| label="Método para llenar valores nulos", | |
| info="Media/Mediana: para columnas numéricas. Moda: para todas las columnas", | |
| value="media" | |
| ) | |
| procesar_nulos_btn = gr.Button("Procesar valores nulos") | |
| resultado_nulos = gr.Textbox(label="Resultado del procesamiento", interactive=False) | |
| df_actualizado = gr.Dataframe(label="Vista previa actualizada") | |
| procesar_nulos_btn.click( | |
| fn=procesar_nulos, | |
| inputs=[metodo_nulos], | |
| outputs=[resultado_nulos, df_actualizado] | |
| ) | |
| 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] | |
| ) | |
| gr.Markdown("Gráficos generados") | |
| graficos_output = gr.Group() | |
| 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__": | |
| import os | |
| os.environ["MPLCONFIGDIR"] = "/tmp" # Evita warning de permisos | |
| print("✅ Lanzando Gradio...") | |
| demo.launch(server_name="0.0.0.0", server_port=7860) |