Proyecto1-ML / app.py
guille03's picture
proyecto
62ec00a
Raw History Blame
2.79 kB
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 or not columnas:
return []
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]
).then(
lambda: [], # reset selección de columnas
inputs=[],
outputs=[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)