Skip to content

Commit 568303a

Browse files
committed
implementação da IA para realizar previões de treinos
1 parent 660b803 commit 568303a

File tree

2 files changed

+162
-0
lines changed

2 files changed

+162
-0
lines changed

IA/chat.py

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
import pandas as pd
2+
from sklearn.ensemble import RandomForestClassifier
3+
from sklearn.model_selection import train_test_split
4+
from sklearn.preprocessing import LabelEncoder
5+
6+
# Dados fictícios de treino
7+
dados = {
8+
'idade': [25, 30, 35, 28, 22],
9+
'altura': [170, 180, 160, 175, 168],
10+
'peso': [70, 80, 60, 75, 65],
11+
'sexo': ['Masculino', 'Feminino', 'Masculino', 'Masculino', 'Feminino'],
12+
'atividade_fisica': ['Intermediário', 'Avançado', 'Iniciante', 'Sedentário', 'Intermediário'],
13+
'objetivo': ['Ganho de massa muscular', 'Emagrecimento', 'Condicionamento Físico', 'Melhora geral da saúde', 'Ganho de massa muscular'],
14+
'local_treino': ['Academia', 'Casa', 'Parque', 'Academia', 'Casa'],
15+
'duracao': ['Até 1 hora', 'Até 30 minutos', 'Até 1 hora', 'Mais de 1 hora', 'Até 45 minutos'],
16+
'titulo': ['Plano para aumento de massa muscular', 'Treino para emagrecimento rápido', 'Treino para resistência cardiovascular', 'Plano de saúde e bem-estar', 'Plano para aumento de massa muscular'],
17+
'descricao': ['Treino de força com foco em hipertrofia', 'Treino de alta intensidade para queima de gordura', 'Treino cardiovascular e funcional', 'Treino leve e funcional para melhorar saúde', 'Plano de treino com foco em hipertrofia'],
18+
'link_video': ['https://youtu.be/example1', 'https://youtu.be/example2', 'https://youtu.be/example3', 'https://youtu.be/example4', 'https://youtu.be/example5']
19+
}
20+
21+
# Criação de DataFrame
22+
df = pd.DataFrame(dados)
23+
24+
# Criando os LabelEncoders para todas as variáveis categóricas
25+
le_sexo = LabelEncoder()
26+
le_sexo.fit(['Masculino', 'Feminino'])
27+
28+
le_atividade_fisica = LabelEncoder()
29+
le_atividade_fisica.fit(['Sedentário', 'Iniciante', 'Intermediário', 'Avançado'])
30+
31+
le_objetivo = LabelEncoder()
32+
le_objetivo.fit(['Emagrecimento', 'Ganho de massa muscular', 'Condicionamento Físico', 'Melhora geral da saúde', 'Outro'])
33+
34+
le_local_treino = LabelEncoder()
35+
le_local_treino.fit(['Academia', 'Casa', 'Parque', 'Outro'])
36+
37+
le_duracao = LabelEncoder()
38+
le_duracao.fit(['Até 30 minutos', 'Até 45 minutos', 'Até 1 hora', 'Mais de 1 hora'])
39+
40+
# Transformando as variáveis categóricas do DataFrame
41+
df['sexo'] = le_sexo.transform(df['sexo'])
42+
df['atividade_fisica'] = le_atividade_fisica.transform(df['atividade_fisica'])
43+
df['objetivo'] = le_objetivo.transform(df['objetivo'])
44+
df['local_treino'] = le_local_treino.transform(df['local_treino'])
45+
df['duracao'] = le_duracao.transform(df['duracao'])
46+
47+
# Separando as variáveis preditoras e alvo
48+
X = df[['idade', 'altura', 'peso', 'sexo', 'atividade_fisica', 'objetivo', 'local_treino', 'duracao']]
49+
y = df[['titulo', 'descricao', 'link_video']]
50+
51+
# Dividindo os dados em treino e teste
52+
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
53+
54+
# Treinando o modelo de Random Forest
55+
modelo_titulo = RandomForestClassifier(n_estimators=100)
56+
modelo_titulo.fit(X_train, y_train['titulo']) # Treinando para o título
57+
58+
modelo_descricao = RandomForestClassifier(n_estimators=100)
59+
modelo_descricao.fit(X_train, y_train['descricao']) # Treinando para a descrição
60+
61+
modelo_link = RandomForestClassifier(n_estimators=100)
62+
modelo_link.fit(X_train, y_train['link_video']) # Treinando para o link
63+
64+
# Função para prever os resultados
65+
def prever_treino(idade, altura, peso, sexo, atividade_fisica, objetivo, local_treino, duracao):
66+
entrada = [[idade, altura, peso, le_sexo.transform([sexo])[0],
67+
le_atividade_fisica.transform([atividade_fisica])[0],
68+
le_objetivo.transform([objetivo])[0],
69+
le_local_treino.transform([local_treino])[0],
70+
le_duracao.transform([duracao])[0]]]
71+
72+
# Prevendo título, descrição e link
73+
titulo = modelo_titulo.predict(entrada)[0]
74+
descricao = modelo_descricao.predict(entrada)[0]
75+
link_video = modelo_link.predict(entrada)[0]
76+
77+
return titulo, descricao, link_video
78+
79+
# Função para pegar dados do usuário
80+
def coletar_dados_usuario():
81+
idade = int(input("Digite sua idade: "))
82+
altura = int(input("Digite sua altura (em cm): "))
83+
peso = int(input("Digite seu peso (em kg): "))
84+
sexo = input("Digite seu sexo (Masculino/Feminino): ")
85+
atividade_fisica = input("Qual seu nível de atividade física? (Sedentário/Iniciante/Intermediário/Avançado): ")
86+
objetivo = input("Qual seu objetivo? (Emagrecimento/Ganho de massa muscular/Condicionamento Físico/Melhora geral da saúde/Outro): ")
87+
local_treino = input("Onde você prefere treinar? (Academia/Casa/Parque/Outro): ")
88+
duracao = input("Qual a duração do treino? (Até 30 minutos/Até 45 minutos/Até 1 hora/Mais de 1 hora): ")
89+
90+
return idade, altura, peso, sexo, atividade_fisica, objetivo, local_treino, duracao
91+
92+
# Receber dados do usuário
93+
idade, altura, peso, sexo, atividade_fisica, objetivo, local_treino, duracao = coletar_dados_usuario()
94+
95+
# Prever o título, descrição e link com os dados inseridos
96+
titulo_previsao, descricao_previsao, link_video_previsao = prever_treino(idade, altura, peso, sexo, atividade_fisica, objetivo, local_treino, duracao)
97+
98+
# Exibir os resultados
99+
print(f"\nTítulo: {titulo_previsao}")
100+
print(f"Descrição: {descricao_previsao}")
101+
print(f"Link do vídeo: {link_video_previsao}")

IA/requirements.txt

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
aiohappyeyeballs==2.4.4
2+
aiohttp==3.11.11
3+
aiosignal==1.3.2
4+
annotated-types==0.7.0
5+
anyio==4.8.0
6+
attrs==25.1.0
7+
certifi==2025.1.31
8+
charset-normalizer==3.4.1
9+
dataclasses-json==0.6.7
10+
distro==1.9.0
11+
frozenlist==1.5.0
12+
greenlet==3.1.1
13+
h11==0.14.0
14+
httpcore==1.0.7
15+
httpx==0.28.1
16+
httpx-sse==0.4.0
17+
idna==3.10
18+
jiter==0.8.2
19+
joblib==1.4.2
20+
jsonpatch==1.33
21+
jsonpointer==3.0.0
22+
langchain==0.3.17
23+
langchain-community==0.3.16
24+
langchain-core==0.3.33
25+
langchain-openai==0.3.3
26+
langchain-text-splitters==0.3.5
27+
langsmith==0.3.6
28+
marshmallow==3.26.1
29+
multidict==6.1.0
30+
mypy-extensions==1.0.0
31+
numpy==2.2.2
32+
openai==1.61.1
33+
orjson==3.10.15
34+
packaging==24.2
35+
pandas==2.2.3
36+
propcache==0.2.1
37+
pydantic==2.10.6
38+
pydantic-settings==2.7.1
39+
pydantic_core==2.27.2
40+
python-dateutil==2.9.0.post0
41+
python-dotenv==1.0.1
42+
pytz==2025.1
43+
PyYAML==6.0.2
44+
regex==2024.11.6
45+
requests==2.32.3
46+
requests-toolbelt==1.0.0
47+
scikit-learn==1.6.1
48+
scipy==1.15.1
49+
six==1.17.0
50+
sniffio==1.3.1
51+
SQLAlchemy==2.0.37
52+
tenacity==9.0.0
53+
threadpoolctl==3.5.0
54+
tiktoken==0.8.0
55+
tqdm==4.67.1
56+
typing-inspect==0.9.0
57+
typing_extensions==4.12.2
58+
tzdata==2025.1
59+
urllib3==2.3.0
60+
yarl==1.18.3
61+
zstandard==0.23.0

0 commit comments

Comments
 (0)