File size: 2,478 Bytes
b5ce52a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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()