SergioSCA commited on
Commit
2b833bb
·
verified ·
1 Parent(s): 58cf5d4

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -58
app.py CHANGED
@@ -2,6 +2,7 @@ import gradio as gr
2
  from datasets import load_dataset
3
  import requests
4
  import json
 
5
 
6
  # Cargar modalidades y tareas desde un archivo JSON
7
  with open("modalidades_tareas.json", "r") as file:
@@ -18,33 +19,24 @@ def validar_modalidades_tareas(modalidades_tareas):
18
  # Validar el diccionario
19
  validar_modalidades_tareas(MODALIDAD_TAREAS)
20
 
21
- # Función para actualizar las tareas según las modalidades seleccionadas
22
- def actualizar_tareas(modalidades_seleccionadas):
23
- tareas_disponibles = []
24
- for modalidad in modalidades_seleccionadas:
25
- if modalidad in MODALIDAD_TAREAS:
26
- tareas_disponibles.extend(MODALIDAD_TAREAS[modalidad])
27
- # Eliminar duplicados y devolver una lista de tareas disponibles
28
- return list(set(tareas_disponibles))
29
-
30
- # Función para generar el encabezado del CSV (ahora incluye 'id')
31
- def generar_encabezado(modalidades_seleccionadas, tareas_seleccionadas):
32
- if not modalidades_seleccionadas or not tareas_seleccionadas:
33
- raise ValueError("Debes seleccionar al menos una modalidad y una tarea.")
34
 
35
- columnas = ["id"] # Añadimos 'id' como primer elemento
36
- for modalidad in modalidades_seleccionadas:
37
- columnas.append(f"{modalidad.lower()}_input")
38
- columnas.append(f"{modalidad.lower()}_output")
39
- if modalidad == "Educación": # Caso especial para una nueva modalidad
40
- columnas.append("metodología_educativa")
41
- for tarea in tareas_seleccionadas:
42
- columnas.append(f"{tarea.lower().replace(' ', '_')}_label")
43
- return ",".join(columnas)
44
 
45
  # Función para buscar datasets compatibles en HuggingFace
46
- def buscar_datasets(modalidades_seleccionadas, tareas_seleccionadas, filtro_tamaño=None, filtro_licencia=None):
47
- query = "+".join(modalidades_seleccionadas + tareas_seleccionadas)
48
  url = f"https://huggingface.co/api/datasets?search={query}"
49
  response = requests.get(url)
50
  datasets = response.json()
@@ -56,9 +48,6 @@ def buscar_datasets(modalidades_seleccionadas, tareas_seleccionadas, filtro_tama
56
  continue
57
  if filtro_licencia and dataset.get("license") != filtro_licencia:
58
  continue
59
- # Filtrar por modalidad específica
60
- if "Educación" in modalidades_seleccionadas and "educación" not in dataset["tags"]:
61
- continue
62
  resultados.append(f"- {dataset['id']}: {dataset['description']}")
63
  return "\n".join(resultados)
64
 
@@ -90,28 +79,22 @@ def generar_dataset(encabezado, datasets_seleccionados, pagina_actual=1, filas_p
90
  with gr.Blocks() as demo:
91
  gr.Markdown("# Diseñador de Modelos de Redes Neuronales y Generador de Datasets Multimodales")
92
 
93
- # Panel 1: Selección de Modalidades
94
- with gr.Row():
95
- modalidades = list(MODALIDAD_TAREAS.keys())
96
- modalidades_seleccionadas = gr.CheckboxGroup(choices=modalidades, label="Selecciona Modalidades")
97
-
98
- # Panel 2: Configuración de Tareas (Corregido)
99
  with gr.Row():
100
- gr.Markdown("### Selecciona Tareas")
101
- tareas_disponibles = gr.CheckboxGroup(choices=[], label="Tareas Disponibles", interactive=True, elem_classes=["expanded-checkbox"])
102
- modalidades_seleccionadas.change(
103
- fn=lambda modalidades: actualizar_tareas(modalidades), # Usamos una lambda para simplificar
104
- inputs=modalidades_seleccionadas,
105
- outputs=tareas_disponibles
106
  )
107
-
108
- # Panel 3: Generar Encabezado del CSV
109
  with gr.Row():
110
- btn_generar_encabezado = gr.Button("Generar Encabezado del CSV")
111
- encabezado_generado = gr.Textbox(label="Encabezado Generado", interactive=False)
112
- btn_generar_encabezado.click(generar_encabezado, inputs=[modalidades_seleccionadas, tareas_disponibles], outputs=encabezado_generado)
113
 
114
- # Panel 4: Buscar Datasets Compatibles con Filtros Adicionales
115
  with gr.Row():
116
  with gr.Column():
117
  filtro_tamaño = gr.Dropdown(choices=["small", "medium", "large"], label="Filtrar por Tamaño")
@@ -120,11 +103,11 @@ with gr.Blocks() as demo:
120
  datasets_encontrados = gr.Textbox(label="Datasets Encontrados", interactive=False)
121
  btn_buscar_datasets.click(
122
  buscar_datasets,
123
- inputs=[modalidades_seleccionadas, tareas_disponibles, filtro_tamaño, filtro_licencia],
124
  outputs=datasets_encontrados
125
  )
126
 
127
- # Panel 5: Generar Dataset con Paginación
128
  with gr.Row():
129
  pagina_actual = gr.Number(value=1, label="Página Actual")
130
  filas_por_pagina = gr.Number(value=5, label="Filas por Página")
@@ -133,19 +116,9 @@ with gr.Blocks() as demo:
133
  btn_descargar_csv = gr.File(label="Descargar CSV")
134
  btn_generar_dataset.click(
135
  generar_dataset,
136
- inputs=[encabezado_generado, datasets_encontrados, pagina_actual, filas_por_pagina],
137
  outputs=vista_previa_csv
138
  )
139
 
140
- # Estilo CSS para expandir el área de selección de tareas
141
- demo.css = """
142
- .expanded-checkbox {
143
- max-height: 200px; /* Altura máxima */
144
- overflow-y: auto; /* Scroll vertical si es necesario */
145
- border: 1px solid #ccc; /* Borde para mejorar la visibilidad */
146
- padding: 10px; /* Espaciado interno */
147
- }
148
- """
149
-
150
  # Ejecutar la aplicación
151
  demo.launch()
 
2
  from datasets import load_dataset
3
  import requests
4
  import json
5
+ import matplotlib.pyplot as plt
6
 
7
  # Cargar modalidades y tareas desde un archivo JSON
8
  with open("modalidades_tareas.json", "r") as file:
 
19
  # Validar el diccionario
20
  validar_modalidades_tareas(MODALIDAD_TAREAS)
21
 
22
+ # Función para generar la gráfica de barras
23
+ def generar_grafica_barras():
24
+ modalidades = list(MODALIDAD_TAREAS.keys())
25
+ cantidades = [len(MODALIDAD_TAREAS[modalidad]) for modalidad in modalidades]
26
+
27
+ # Crear la gráfica de barras horizontal
28
+ fig, ax = plt.subplots(figsize=(10, 6))
29
+ ax.barh(modalidades, cantidades, color='skyblue', edgecolor='black')
30
+ ax.set_xlabel('Cantidad de Tareas')
31
+ ax.set_ylabel('Modalidades')
32
+ ax.set_title('Cantidad de Tareas por Modalidad')
33
+ ax.invert_yaxis() # Invertir el eje Y para que las modalidades aparezcan de arriba hacia abajo
 
34
 
35
+ return fig
 
 
 
 
 
 
 
 
36
 
37
  # Función para buscar datasets compatibles en HuggingFace
38
+ def buscar_datasets(tareas_seleccionadas, filtro_tamaño=None, filtro_licencia=None):
39
+ query = "+".join(tareas_seleccionadas)
40
  url = f"https://huggingface.co/api/datasets?search={query}"
41
  response = requests.get(url)
42
  datasets = response.json()
 
48
  continue
49
  if filtro_licencia and dataset.get("license") != filtro_licencia:
50
  continue
 
 
 
51
  resultados.append(f"- {dataset['id']}: {dataset['description']}")
52
  return "\n".join(resultados)
53
 
 
79
  with gr.Blocks() as demo:
80
  gr.Markdown("# Diseñador de Modelos de Redes Neuronales y Generador de Datasets Multimodales")
81
 
82
+ # Panel 1: Lista de Tareas Disponibles
 
 
 
 
 
83
  with gr.Row():
84
+ gr.Markdown("### Tareas Disponibles")
85
+ tareas_disponibles = gr.Textbox(
86
+ label="Tareas",
87
+ value="\n".join([tarea for tareas in MODALIDAD_TAREAS.values() for tarea in tareas]),
88
+ interactive=False
 
89
  )
90
+
91
+ # Panel 2: Gráfica de Barras
92
  with gr.Row():
93
+ gr.Markdown("### Distribución de Tareas por Modalidad")
94
+ grafica_barras = gr.Plot(label="Gráfica de Barras")
95
+ grafica_barras.update(generar_grafica_barras())
96
 
97
+ # Panel 3: Buscar Datasets Compatibles con Filtros Adicionales
98
  with gr.Row():
99
  with gr.Column():
100
  filtro_tamaño = gr.Dropdown(choices=["small", "medium", "large"], label="Filtrar por Tamaño")
 
103
  datasets_encontrados = gr.Textbox(label="Datasets Encontrados", interactive=False)
104
  btn_buscar_datasets.click(
105
  buscar_datasets,
106
+ inputs=[tareas_disponibles, filtro_tamaño, filtro_licencia],
107
  outputs=datasets_encontrados
108
  )
109
 
110
+ # Panel 4: Generar Dataset con Paginación
111
  with gr.Row():
112
  pagina_actual = gr.Number(value=1, label="Página Actual")
113
  filas_por_pagina = gr.Number(value=5, label="Filas por Página")
 
116
  btn_descargar_csv = gr.File(label="Descargar CSV")
117
  btn_generar_dataset.click(
118
  generar_dataset,
119
+ inputs=[datasets_encontrados, pagina_actual, filas_por_pagina],
120
  outputs=vista_previa_csv
121
  )
122
 
 
 
 
 
 
 
 
 
 
 
123
  # Ejecutar la aplicación
124
  demo.launch()