File size: 17,263 Bytes
fcc1cf1 3b48b04 ddd5e15 d10af90 fcc1cf1 e21ed46 240c707 e6e1322 240c707 e6e1322 e21ed46 e6e1322 e21ed46 e6e1322 e21ed46 e6e1322 e21ed46 e6e1322 240c707 b667701 e6e1322 240c707 b667701 240c707 e6e1322 d10af90 e6e1322 240c707 e6e1322 81baf26 e6e1322 b667701 7869e46 b667701 12026ba b667701 e21ed46 e6e1322 b667701 aeb33b1 b667701 81baf26 b667701 87719e9 b667701 dadf642 b667701 7fc46e3 b667701 7f05f47 b667701 7f05f47 b667701 87719e9 b667701 fcc1cf1 5bfab3a 7f05f47 b461ce1 7f05f47 |
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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 |
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]
# Análise comportamental detalhada usando embeddings
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])
# Gera embeddings para personalização
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
) |