File size: 3,892 Bytes
c09a626
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from datasets import load_dataset
import requests
import json
import matplotlib.pyplot as plt

# Cargar modalidades y tareas desde un archivo JSON
with open("modalidades_tareas.json", "r") as file:
    MODALIDAD_TAREAS = json.load(file)

def validar_modalidades_tareas(modalidades_tareas):
    for modalidad, tareas in modalidades_tareas.items():
        if not isinstance(modalidad, str) or not isinstance(tareas, list):
            raise ValueError(f"Formato incorrecto para la modalidad: {modalidad}")
        for tarea in tareas:
            if not isinstance(tarea, str):
                raise ValueError(f"Formato incorrecto para la tarea: {tarea} en la modalidad {modalidad}")

# Validar el diccionario
validar_modalidades_tareas(MODALIDAD_TAREAS)

# Funci贸n para generar la gr谩fica de barras
def generar_grafica_barras(tareas_seleccionadas):
    # Contar la cantidad de tareas seleccionadas por modalidad
    conteo_modalidades = {}
    for modalidad, tareas in MODALIDAD_TAREAS.items():
        conteo_modalidades[modalidad] = len([tarea for tarea in tareas if tarea in tareas_seleccionadas])
    
    modalidades = list(conteo_modalidades.keys())
    cantidades = [conteo_modalidades[modalidad] for modalidad in modalidades]
    
    # Crear la gr谩fica de barras horizontal
    fig, ax = plt.subplots(figsize=(10, 6))
    ax.barh(modalidades, cantidades, color='skyblue', edgecolor='black')
    ax.set_xlabel('Cantidad de Tareas Seleccionadas')
    ax.set_ylabel('Modalidades')
    ax.set_title('Distribuci贸n de Tareas Seleccionadas por Modalidad')
    ax.invert_yaxis()  # Invertir el eje Y para que las modalidades aparezcan de arriba hacia abajo
    
    return fig

# Funci贸n para generar el encabezado del CSV
def generar_encabezado(tareas_seleccionadas):
    if not tareas_seleccionadas:
        raise ValueError("Debes seleccionar al menos una tarea.")
    
    columnas = ["id"]  # A帽adimos 'id' como primer elemento
    for tarea in tareas_seleccionadas:
        columnas.append(f"{tarea.lower().replace(' ', '_')}_label")
    return ",".join(columnas)

# Funci贸n para buscar datasets compatibles en HuggingFace
def buscar_datasets(tareas_seleccionadas, filtro_tama帽o=None, filtro_licencia=None):
    query = "+".join(tareas_seleccionadas)
    url = f"https://huggingface.co/api/datasets?search={query}"
    response = requests.get(url)
    datasets = response.json()
    
    resultados = []
    for dataset in datasets:
        # Aplicar filtros adicionales
        if filtro_tama帽o and dataset.get("size_categories") != filtro_tama帽o:
            continue
        if filtro_licencia and dataset.get("license") != filtro_licencia:
            continue
        resultados.append(f"- {dataset['id']}: {dataset['description']}")
    return "\n".join(resultados)

# Funci贸n para generar el dataset
def generar_dataset(encabezado, datasets_seleccionados, pagina_actual=1, filas_por_pagina=5):
    if not datasets_seleccionados:
        raise ValueError("Debes seleccionar al menos un dataset.")
    
    columnas = encabezado.split(",")
    filas = []
    
    # Cargar datos reales desde los datasets seleccionados
    for dataset_id in datasets_seleccionados.split("\n"):
        dataset_id = dataset_id.strip("- ").split(":")[0]  # Extraer ID del dataset
        try:
            dataset = load_dataset(dataset_id, split="train")
            inicio = (pagina_actual - 1) * filas_por_pagina
            fin = pagina_actual * filas_por_pagina
            for i, fila in enumerate(dataset[inicio:fin]):
                valores = [str(fila.get(col, "valor_default")) for col in columnas[1:]]  # Ignorar 'id'
                filas.append(f"id_{inicio + i}," + ",".join(valores))
        except Exception as e:
            filas.append(f"Error cargando dataset {dataset_id}: {str(e)}")
    
    contenido_csv = "\n".join([encabezado] + filas)
    return contenido_csv