File size: 3,729 Bytes
71175ed
 
 
 
 
 
 
 
 
 
 
 
 
 
4d4aeb8
 
71175ed
 
 
 
 
 
4d4aeb8
71175ed
 
 
 
656c276
 
 
71175ed
 
 
583fa69
 
 
 
 
 
 
 
 
71175ed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52ee224
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0cbacac
 
 
 
 
 
 
 
7c177db
 
71175ed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5b9fedf
 
 
 
 
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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)