| 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 |
| ) |