|
import gradio as gr |
|
import plotly.graph_objects as go |
|
from sentence_transformers import SentenceTransformer |
|
import numpy as np |
|
|
|
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2') |
|
|
|
def get_semantic_similarity(text1, text2): |
|
"""Calcula similaridade semântica entre dois textos""" |
|
embedding1 = model.encode(text1) |
|
embedding2 = model.encode(text2) |
|
return np.dot(embedding1, embedding2) / (np.linalg.norm(embedding1) * np.linalg.norm(embedding2)) |
|
|
|
def analyze_profile_behaviors(profile, value): |
|
"""Analisa comportamentos profissionais específicos""" |
|
behaviors = { |
|
'D': """No ambiente profissional, você demonstra uma forte orientação para resultados e ação. |
|
Suas características principais incluem: |
|
• Abordagem direta e decisiva na resolução de problemas |
|
• Forte capacidade de iniciativa e autodireção |
|
• Preferência por desafios e situações competitivas |
|
• Habilidade natural para liderar e influenciar |
|
• Foco constante em eficiência e produtividade |
|
• Capacidade de tomar decisões rápidas sob pressão""", |
|
'I': """No ambiente profissional, você demonstra forte orientação para pessoas e relacionamentos. |
|
Suas características principais incluem: |
|
• Excelente habilidade de comunicação e persuasão |
|
• Capacidade natural de motivar e inspirar outros |
|
• Criatividade e entusiasmo em novas iniciativas |
|
• Facilidade para networking e construção de relações |
|
• Adaptabilidade em ambientes sociais diversos |
|
• Energia positiva e otimismo contagiante""", |
|
'S': """No ambiente profissional, você demonstra forte orientação para estabilidade e cooperação. |
|
Suas características principais incluem: |
|
• Excelente capacidade de trabalho em equipe |
|
• Consistência e confiabilidade nas entregas |
|
• Paciência e diplomacia no trato com pessoas |
|
• Lealdade e comprometimento com a equipe |
|
• Habilidade para manter a calma sob pressão |
|
• Foco em criar ambientes harmoniosos""", |
|
'C': """No ambiente profissional, você demonstra forte orientação para qualidade e precisão. |
|
Suas características principais incluem: |
|
• Excepcional atenção aos detalhes e precisão |
|
• Pensamento analítico e sistemático |
|
• Excelente capacidade de planejamento |
|
• Foco em qualidade e excelência |
|
• Habilidade para análise crítica |
|
• Disciplina e organização exemplares""" |
|
} |
|
return behaviors.get(profile) |
|
|
|
def analyze_leadership_style(primary, secondary): |
|
"""Analisa estilo de liderança baseado na combinação de perfis""" |
|
styles = { |
|
'D': { |
|
'D': "Liderança diretiva e orientada a resultados, com forte capacidade de decisão e foco em eficiência", |
|
'I': "Liderança carismática e orientada a resultados, combinando assertividade com habilidades interpessoais", |
|
'S': "Liderança estável e decisiva, equilibrando resultados com harmonia da equipe", |
|
'C': "Liderança estratégica e analítica, com foco em resultados precisos e bem planejados" |
|
}, |
|
'I': { |
|
'D': "Liderança inspiradora e dinâmica, motivando através do entusiasmo e orientação para ação", |
|
'I': "Liderança altamente carismática e social, com foco em motivação e engajamento", |
|
'S': "Liderança colaborativa e motivacional, criando ambientes positivos e estáveis", |
|
'C': "Liderança comunicativa e estruturada, combinando entusiasmo com organização" |
|
}, |
|
'S': { |
|
'D': "Liderança consistente e equilibrada, mantendo estabilidade com momentos de assertividade", |
|
'I': "Liderança apoiadora e participativa, focando em harmonia e colaboração", |
|
'S': "Liderança extremamente estável e confiável, com forte foco em cooperação", |
|
'C': "Liderança metódica e paciente, combinando consistência com atenção aos detalhes" |
|
}, |
|
'C': { |
|
'D': "Liderança analítica e decisiva, baseada em dados e orientada a resultados", |
|
'I': "Liderança sistemática e comunicativa, equilibrando precisão com relacionamentos", |
|
'S': "Liderança detalhista e cooperativa, focando em qualidade e estabilidade", |
|
'C': "Liderança altamente analítica e estruturada, com foco em excelência e precisão" |
|
} |
|
} |
|
return styles.get(primary, {}).get(secondary, "Estilo de liderança equilibrado e adaptativo") |
|
|
|
def analyze_decision_making(primary, secondary): |
|
"""Analisa processo de tomada de decisão""" |
|
decision_styles = { |
|
'D': "Processo decisório rápido e direto, focado em resultados imediatos e eficiência", |
|
'I': "Decisões baseadas em intuição e impacto nas pessoas, com consideração pelo entusiasmo geral", |
|
'S': "Processo decisório cuidadoso e considerado, buscando estabilidade e consenso", |
|
'C': "Tomada de decisão analítica e detalhada, baseada em dados e análise minuciosa" |
|
} |
|
return decision_styles.get(primary, "Processo decisório equilibrado") |
|
|
|
def generate_profile_analysis(perfil_data): |
|
"""Gera análise completa do perfil""" |
|
perfis_ordenados = sorted(perfil_data.items(), key=lambda x: x[1], reverse=True) |
|
perfil_principal = perfis_ordenados[0] |
|
perfil_secundario = perfis_ordenados[1] |
|
|
|
|
|
context = f"Perfil {perfil_principal[0]} com {perfil_principal[1]:.1f}% e {perfil_secundario[0]} com {perfil_secundario[1]:.1f}%" |
|
comportamentos = analyze_profile_behaviors(perfil_principal[0], perfil_principal[1]) |
|
lideranca = analyze_leadership_style(perfil_principal[0], perfil_secundario[0]) |
|
|
|
|
|
profile_context = model.encode(context) |
|
behavior_context = model.encode(comportamentos if comportamentos else "") |
|
leadership_context = model.encode(lideranca if lideranca else "") |
|
|
|
return f"""# Análise Detalhada do Perfil DISC |
|
|
|
## Perfil Predominante ({perfil_principal[0]}: {perfil_principal[1]:.1f}%) |
|
{comportamentos} |
|
|
|
## Estilo de Liderança |
|
{lideranca} |
|
|
|
## Processo Decisório |
|
{analyze_decision_making(perfil_principal[0], perfil_secundario[0])} |
|
|
|
## Combinação de Perfis |
|
A combinação de {perfil_principal[0]} ({perfil_principal[1]:.1f}%) com {perfil_secundario[0]} ({perfil_secundario[1]:.1f}%) sugere: |
|
• Capacidade de equilibrar {get_profile_strength(perfil_principal[0])} com {get_profile_strength(perfil_secundario[0])} |
|
• Versatilidade em diferentes contextos profissionais |
|
• Potencial para adaptação em situações diversas |
|
|
|
## Recomendações para Desenvolvimento |
|
{generate_development_recommendations(perfil_principal[0], perfil_principal[1])} |
|
|
|
## Contribuições para Equipe |
|
{generate_team_contributions(perfil_principal[0], perfil_secundario[0])} |
|
|
|
## Ambiente de Trabalho Ideal |
|
{generate_ideal_environment(perfil_principal[0])} |
|
""" |
|
|
|
def get_profile_strength(profile): |
|
"""Retorna força principal de cada perfil""" |
|
strengths = { |
|
'D': "direcionamento e resultados", |
|
'I': "comunicação e influência", |
|
'S': "estabilidade e cooperação", |
|
'C': "análise e precisão" |
|
} |
|
return strengths.get(profile, "adaptabilidade") |
|
|
|
def generate_development_recommendations(profile, value): |
|
"""Gera recomendações de desenvolvimento personalizadas""" |
|
recommendations = { |
|
'D': f"""Considerando seu perfil D ({value:.1f}%), foque em: |
|
• Desenvolvimento de escuta ativa e empatia |
|
• Prática de paciência em processos longos |
|
• Inclusão de mais perspectivas nas decisões |
|
• Equilíbrio entre velocidade e qualidade""", |
|
'I': f"""Considerando seu perfil I ({value:.1f}%), foque em: |
|
• Desenvolvimento de habilidades analíticas |
|
• Atenção aos detalhes e documentação |
|
• Gestão eficiente do tempo |
|
• Equilíbrio entre socialização e entregas""", |
|
'S': f"""Considerando seu perfil S ({value:.1f}%), foque em: |
|
• Desenvolvimento de assertividade |
|
• Adaptação mais rápida a mudanças |
|
• Expressão mais frequente de opiniões |
|
• Tomada de decisão mais ágil""", |
|
'C': f"""Considerando seu perfil C ({value:.1f}%), foque em: |
|
• Desenvolvimento de flexibilidade |
|
• Agilidade na tomada de decisão |
|
• Habilidades de comunicação interpessoal |
|
• Equilíbrio entre perfeição e praticidade""" |
|
} |
|
return recommendations.get(profile) |
|
|
|
def generate_team_contributions(primary, secondary): |
|
"""Analisa contribuições para equipe""" |
|
contributions = { |
|
'D': { |
|
'D': "Forte liderança e foco em resultados rápidos", |
|
'I': "Liderança carismática com orientação para resultados", |
|
'S': "Direcionamento com consideração pela estabilidade", |
|
'C': "Liderança analítica focada em resultados precisos" |
|
}, |
|
'I': { |
|
'D': "Motivação da equipe com foco em ação", |
|
'I': "Alto engajamento e energia positiva", |
|
'S': "Comunicação efetiva com estabilidade", |
|
'C': "Entusiasmo balanceado com precisão" |
|
}, |
|
'S': { |
|
'D': "Estabilidade com capacidade de ação", |
|
'I': "Suporte consistente com comunicação efetiva", |
|
'S': "Alta confiabilidade e cooperação", |
|
'C': "Consistência com atenção aos detalhes" |
|
}, |
|
'C': { |
|
'D': "Análise precisa orientada a resultados", |
|
'I': "Qualidade com boa comunicação", |
|
'S': "Precisão com estabilidade", |
|
'C': "Excelência técnica e organização" |
|
} |
|
} |
|
return contributions.get(primary, {}).get(secondary, "Contribuições equilibradas para a equipe") |
|
|
|
def generate_ideal_environment(profile): |
|
"""Gera descrição do ambiente ideal de trabalho""" |
|
environments = { |
|
'D': """Ambiente ideal para sua produtividade: |
|
• Dinâmico e desafiador |
|
• Autonomia nas decisões |
|
• Oportunidades de liderança |
|
• Foco em resultados rápidos""", |
|
'I': """Ambiente ideal para sua produtividade: |
|
• Colaborativo e interativo |
|
• Oportunidades de networking |
|
• Reconhecimento frequente |
|
• Projetos variados""", |
|
'S': """Ambiente ideal para sua produtividade: |
|
• Estável e previsível |
|
• Trabalho em equipe |
|
• Processos bem definidos |
|
• Mudanças graduais""", |
|
'C': """Ambiente ideal para sua produtividade: |
|
• Estruturado e organizado |
|
• Foco em qualidade |
|
• Tempo para análise |
|
• Clareza nas expectativas""" |
|
} |
|
return environments.get(profile) |
|
|
|
DISC_QUESTIONS = [ |
|
{"pergunta": "Em situações de trabalho em equipe, você geralmente:", |
|
"opcoes": [("D", "Assume a liderança e toma decisões rápidas"), |
|
("I", "Motiva o grupo e mantém o ambiente animado"), |
|
("S", "Apoia os colegas e mantém a harmonia"), |
|
("C", "Analisa detalhadamente antes de agir")]}, |
|
{"pergunta": "Quando enfrenta um desafio no trabalho, você:", |
|
"opcoes": [("D", "Enfrenta diretamente e busca soluções imediatas"), |
|
("I", "Discute com outros e busca diferentes perspectivas"), |
|
("S", "Mantém a calma e segue um processo estabelecido"), |
|
("C", "Pesquisa todas as informações disponíveis primeiro")]}, |
|
{"pergunta": "Em reuniões profissionais, você costuma:", |
|
"opcoes": [("D", "Ir direto ao ponto e focar em resultados"), |
|
("I", "Participar ativamente e compartilhar ideias"), |
|
("S", "Ouvir atentamente e contribuir quando solicitado"), |
|
("C", "Tomar notas e questionar os detalhes")]}, |
|
{"pergunta": "Ao lidar com mudanças no ambiente de trabalho, você:", |
|
"opcoes": [("D", "Abraça a mudança e lidera a implementação"), |
|
("I", "Entusiasma os outros sobre as novas possibilidades"), |
|
("S", "Adapta-se gradualmente seguindo o processo"), |
|
("C", "Analisa os impactos antes de aceitar")]}, |
|
{"pergunta": "Sob pressão no trabalho, você tende a:", |
|
"opcoes": [("D", "Tornar-se mais direto e focado em resultados"), |
|
("I", "Buscar apoio e interação com a equipe"), |
|
("S", "Manter a calma e seguir metodicamente"), |
|
("C", "Concentrar-se em detalhes e procedimentos")]} |
|
] |
|
|
|
def create_disc_plot(percentuais): |
|
"""Cria o gráfico de visualização do perfil DISC""" |
|
cores = {'D': '#FF4B4B', 'I': '#FFD700', 'S': '#4CAF50', 'C': '#2196F3'} |
|
fig = go.Figure(data=[go.Bar(x=list(percentuais.keys()), |
|
y=list(percentuais.values()), |
|
marker_color=[cores[k] for k in percentuais.keys()], |
|
text=[f'{v:.1f}%' for v in percentuais.values()], |
|
textposition='auto')]) |
|
|
|
fig.update_layout( |
|
title={ |
|
'text': 'Perfil DISC', |
|
'y':0.95, |
|
'x':0.5, |
|
'xanchor': 'center', |
|
'yanchor': 'top', |
|
'font': {'size': 24, 'color': '#333333'} |
|
}, |
|
yaxis_range=[0, 100], |
|
template='plotly_white', |
|
height=400, |
|
margin=dict(l=40, r=40, t=60, b=40), |
|
paper_bgcolor='rgba(0,0,0,0)', |
|
plot_bgcolor='rgba(0,0,0,0)', |
|
yaxis_title="Percentual (%)", |
|
xaxis_title="Dimensões DISC" |
|
) |
|
|
|
return fig |
|
|
|
def calcular_perfil(respostas): |
|
"""Calcula os percentuais do perfil DISC""" |
|
contagem = {k: sum(1 for r in respostas if r and r.startswith(k)) for k in 'DISC'} |
|
total = sum(contagem.values()) |
|
return {k: (v/total)*100 if total > 0 else 0 for k, v in contagem.items()} |
|
|
|
def process_results(*answers): |
|
"""Processa as respostas e gera resultados""" |
|
if any(a is None for a in answers): |
|
gr.Warning("Por favor, responda todas as questões antes de prosseguir.") |
|
return None, None |
|
|
|
respostas_processadas = [a.split(' - ')[0] if a else None for a in answers] |
|
perfil = calcular_perfil(respostas_processadas) |
|
plot = create_disc_plot(perfil) |
|
report = generate_profile_analysis(perfil) |
|
|
|
return plot, report |
|
|
|
def create_interface(): |
|
"""Cria a interface do usuário""" |
|
with gr.Blocks(theme=gr.themes.Soft( |
|
primary_hue="blue", |
|
secondary_hue="purple", |
|
neutral_hue="slate", |
|
font=["Inter", "ui-sans-serif", "system-ui"] |
|
)) as iface: |
|
gr.Markdown( |
|
""" |
|
# 🎯 Análise de Perfil DISC |
|
### Descubra suas características comportamentais dominantes |
|
|
|
Uma análise personalizada do seu perfil comportamental DISC: |
|
- **D (Dominância)**: Foco em resultados e assertividade |
|
- **I (Influência)**: Foco em relacionamentos e comunicação |
|
- **S (Estabilidade)**: Foco em cooperação e consistência |
|
- **C (Conformidade)**: Foco em qualidade e precisão |
|
|
|
--- |
|
""") |
|
|
|
with gr.Row(): |
|
with gr.Column(scale=2): |
|
radios = [] |
|
for i, q in enumerate(DISC_QUESTIONS): |
|
radio = gr.Radio( |
|
choices=[f"{p} - {d}" for p, d in q['opcoes']], |
|
label=f"{i+1}. {q['pergunta']}", |
|
container=True, |
|
scale=2 |
|
) |
|
gr.Markdown("---") |
|
radios.append(radio) |
|
|
|
with gr.Row(): |
|
analyze_btn = gr.Button("📊 Analisar Perfil", size="lg", variant="primary") |
|
reset_btn = gr.Button("🔄 Novo Teste", size="lg", variant="secondary") |
|
|
|
with gr.Row(): |
|
plot = gr.Plot(label="Gráfico de Perfil DISC") |
|
|
|
with gr.Row(): |
|
output = gr.Markdown() |
|
|
|
analyze_btn.click( |
|
fn=process_results, |
|
inputs=radios, |
|
outputs=[plot, output], |
|
api_name="analyze" |
|
) |
|
|
|
reset_btn.click( |
|
fn=lambda: [None]*(len(radios)+2), |
|
outputs=radios+[plot, output], |
|
api_name="reset" |
|
) |
|
|
|
gr.Markdown(""" |
|
--- |
|
### 📝 Informações Importantes |
|
|
|
• O teste DISC é uma ferramenta de autoconhecimento e desenvolvimento profissional |
|
• Os resultados refletem tendências comportamentais naturais |
|
• Use as informações para desenvolvimento pessoal e melhor comunicação em equipe |
|
|
|
© 2024 DISC Analysis Tool |
|
""") |
|
|
|
return iface |
|
|
|
if __name__ == "__main__": |
|
iface = create_interface() |
|
iface.launch( |
|
share=True, |
|
server_name="0.0.0.0", |
|
server_port=7860 |
|
) |