Spaces:
Sleeping
Sleeping
File size: 2,194 Bytes
eb039d8 | 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 | import random
from typing import List, Dict, Union
from smolagents.tools import tool
import pandas as pd
@tool
def generate_data_table(
topic: str,
columns: List[str],
num_rows: int,
data_ranges: Dict[str, List[Union[int, str]]]
) -> Dict:
"""
Gera uma tabela de dados fictícios sobre um determinado tópico.
Útil para criar dados para questões que envolvem tabelas de dupla entrada e gráficos (EF02MA22, EF03MA26).
Args:
topic (str): O tópico geral da tabela (ex: "Vendas de Frutas", "Notas de Alunos").
columns (List[str]): Uma lista com os nomes das colunas (ex: ["Mês", "Maçãs", "Bananas"]).
num_rows (int): O número de linhas (registros) a serem gerados.
data_ranges (Dict): Um dicionário onde cada chave é um nome de coluna e o valor é uma lista
de possíveis valores ou um intervalo [min, max] para números.
Exemplo: {"Mês": ["Jan", "Fev", "Mar"], "Maçãs": [100, 500]}
Returns:
Um dicionário contendo a tabela como uma lista de dicionários e também em formato Markdown.
"""
table_data = []
for _ in range(num_rows):
row = {}
for col in columns:
if col not in data_ranges:
row[col] = None
continue
range_info = data_ranges[col]
if isinstance(range_info[0], str):
# Se for uma lista de strings, escolhe uma aleatoriamente
row[col] = random.choice(range_info)
elif isinstance(range_info[0], int) and len(range_info) == 2:
# Se for uma lista de 2 números, gera um inteiro aleatório no intervalo
row[col] = random.randint(range_info[0], range_info[1])
table_data.append(row)
# Converte para um DataFrame do Pandas para fácil formatação
df = pd.DataFrame(table_data)
# Formata a tabela em Markdown para fácil visualização
markdown_table = df.to_markdown(index=False)
return {
"topic": topic,
"table_as_list_of_dicts": table_data,
"table_as_markdown": markdown_table
} |