image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Geovani Santos
Geovani Santos12/02/2025 11:43
Compartilhe

🐍 Python para Dados: Analisar Consultorias com Python e Descobrir Insights Valiosos

    A análise de dados é uma etapa essencial para entender os padrões e comportamentos em diversos contextos.

    Neste artigo, mostrarei como usei Python para descobrir quais são os assuntos mais solicitados nas consultorias jurídicas, utilizando técnicas de processamento de texto e visualizações, como nuvens de palavras.

    🤔 Problema:

    Embora o sistema permita identificar quais especialidades têm maiores taxas de cancelamento e aceitação, não havia um entendimento claro sobre os principais assuntos ou temas relacionados a essas consultorias. Isso dificultava a análise detalhada e estratégica para melhorar os resultados.

    💡Solução:

    Implementei uma solução que analisa as descrições das consultorias para identificar e quantificar as palavras-chave mais frequentes. Essa análise é cruzada com a especialidade previamente registrada no sistema para validar a coerência e relevância dos assuntos identificados. A visualização desses dados no dashboard permite que tomadores de decisão compreendam os temas predominantes nas consultorias, otimizando estratégias para reduzir cancelamentos e aumentar a eficiência no atendimento.

    1. Por que usei Python para análise de textos em consultorias?

    • Escolhi Python porque, além de ser a linguagem com a qual tenho mais experiência, estava aprofundando meus estudos na área durante minha pós-graduação. Coincidentemente, naquela semana, tive uma aula sobre PLN (Processamento de Linguagem Natural), o que me inspirou a aplicá-lo como solução para o meu problema..
    • Utilizei recursos como NLTK, Pandas e Matplotlib, que tornam o processo de análise mais fácil.

    🚀 2. Estrutura do código e Explicação:

    🛑OBS: O arquivo CSV deve ser construído como abaixo. coluna [observation], como no exemplo:🛑

    image

    🛠️ Importação das bibliotecas:

    • pandas: Manipula e analisa dados tabulares, como arquivos CSV.
    • re: Processa texto com expressões regulares para limpeza e formatação.
    • nltk: Fornece ferramentas para processamento de linguagem natural, como tokenização e remoção de stopwords.
    • collections.Counter: Conta a frequência de palavras ou itens em listas.
    • matplotlib.pyplot: Cria gráficos e visualizações.
    • wordcloud: Gera nuvens de palavras com base na frequência de termos.
    • unidecode: Remove acentos e caracteres especiais de strings.
    • tkinter: Cria interfaces gráficas, como janelas para selecionar arquivos.

    image

    📤Carregamento do arquivo CSV:

    Função principal:

    • A função open_file abre uma janela para escolher o arquivo CSV.
    • Se o arquivo for carregado, a coluna observation é usada para análise. Caso contrário, um erro é levantado.
    • Usei a interface gráfica (Tkinter) função (filedialog.askopenfilename) para selecionar o arquivo de entrada.

    image

    🧹 Limpeza e preparação do texto:

    Neste passo, o texto é processado para facilitar a análise. Isso inclui:

    • Converter para minúsculas.
    • Remover acentos, números, pontuações e palavras curtas.
    • Tokenizar o texto em palavras individuais.
    • Filtrar palavras irrelevantes (stopwords).

    Função principal:

    • A limpeza e tokenização garantem que apenas palavras relevantes permaneçam para a análise.

    image

    image

    🔢 Contagem das palavras mais frequentes:

    Usei a biblioteca collections.Counter para calcular a frequência de cada palavra no texto processado.

    Função principal:

    • Identifica os assuntos mais discutidos nas consultorias com base nas palavras mais comuns.

    image

    image

    ☁️ Criação da nuvem de palavras com a biblioteca WordCloud.

    Criei uma visualização gráfica das palavras mais frequentes para facilitar a interpretação dos resultados.

    Função principal:

    • A nuvem de palavras destaca as palavras mais frequentes em tamanhos maiores, proporcionando uma visão intuitiva dos tópicos mais solicitados.

    image

    🪜 3. Passo a passo para executar o código:

    • Execute o script Python.
    • Escolha o arquivo CSV com as consultorias.
    • O script realizará a limpeza e mostrará as palavras mais frequentes.
    • Visualize os resultados em uma nuvem de palavras.

    🧑‍💻 4. Código Completo:

    import pandas as pd
    import re
    from nltk.corpus import stopwords
    from nltk.tokenize import word_tokenize
    from collections import Counter
    import matplotlib.pyplot as plt
    from wordcloud import WordCloud
    import nltk
    from unidecode import unidecode
    import tkinter as tk
    from tkinter import filedialog
    
    
    # Função para abrir e carregar um arquivo CSV
    def open_file():
      """
      Abre um diálogo para selecionar um arquivo CSV e o carrega em um DataFrame.
      Retorna None se nenhum arquivo for selecionado.
      """
      file_path = filedialog.askopenfilename(title="Selecione o arquivo CSV", filetypes=[("CSV files", "*.csv")])
      return pd.read_csv(file_path, encoding='utf-8') if file_path else None
    
    
    # Carregar dados
    df = open_file()
    if df is not None:
      df['observation'] = df['observation'].fillna("Sem texto")
      text = df['observation'].str.cat(sep=' ')
    else:
      raise ValueError("Nenhum arquivo carregado ou inválido.")
    
    
    # Baixar recursos do NLTK
    nltk.download('punkt')
    nltk.download('stopwords')
    
    
    
    
    # Função para limpar texto
    def clean_text(text):
      """
      Realiza a limpeza do texto:
      - Converte para minúsculas
      - Remove acentos, números, pontuação e palavras curtas
      """
      text = text.lower()
      text = unidecode(text)  # Remove acentos de forma mais direta
      text = re.sub(r'\d+', '', text)  # Remove números
      text = re.sub(r'\s+', ' ', text)  # Remove espaços extras
      text = re.sub(r'[^\w\s]', '', text)  # Remove pontuação
      text = re.sub(r'\b\w{1,2}\b', '', text)  # Remove palavras curtas
      return text.strip()
    
    
    # Limpeza do texto
    cleaned_text = clean_text(text)
    
    
    # Tokenização
    words = word_tokenize(cleaned_text)
    
    
    # Stopwords
    stop_words = set(stopwords.words('portuguese'))
    
    
    # Stopwords personalizadas
    custom_stopwords = {
      "gostaria", "texto", "boa", "saber", "anos", "pra",
      "fazer", "tarde", "preciso", "valor", "ola",
      "agora", "porem", "nome", "bom", "quero", "fiz",
      "quer", "dia", "sobre", "casa", "caso"
      "meses", "dias", "noite", "q", "tudo",
      "pois", "tirar", "queria", "sendo", "2",
      "onde", "3", "1", "30", "outra", "4", "ano", "desde",
      "entrei", "7", "hoje", "outra", "4", "ano", "desde",
      "de", "em", "e", "ser", "esta", "vai", "foi", "vai", "esta",
      "sera", "bem", "como", "sim", "nao", "ja", "bem", "vou",
      "mais", "menos", "aqui", "ali", "la", "vem", "vai", "da", "do",
      "meu", "minha", "seu", "sua", "com", "para", "por", "se",
      "ele", "ela", "eles", "elas", "ta", "ok", "ok", "ate",
      "nunca", "sempre", "vez", "vezes", "tambem", "quase", "perto",
      "15", "20", "5", "10", "oi", "ola", "ai", "entao", "todos",
      "coisa", "fazendo", "parte", "comigo", "ficar", "veio", "ficou", 
      "faz", "ainda", "bem", "assim", "ola", "oi", "problemas",
      "pediu", "pedi", "consigo", "pode", "fiz", "faco", "ajuda",
      "quero", "querendo", "sei", "poderia", "porque", "mim", "posso",
      "nada", "mes", "ter", "algumas", "fez", "nada", "alguns", "deu",
      "pessoa", "apos", "paga", "feito", "consegui", "dr", "reais",
      "moro", "tempo", "quais", "loja", "querem", "disse", "apos", "entrar",
      "chamo", "sair", "pedir", "outro", "carteira", "obrigada", "apenas",
      "ex", "nao", "dois", "dona", "antes", "todo", "6", "atras", "certo",
      "total", "ja", "so", "ate", "ha", "contato"
    }
    
    
    # Combinar stopwords padrão com personalizadas
    stop_words.update(custom_stopwords)
    
    
    # Filtrar palavras indesejadas
    words = [word for word in words if word not in stop_words]
    
    
    # Contagem de palavras
    word_counts = Counter(words)
    
    
    # Exibir as 50 palavras mais comuns
    most_common_words = word_counts.most_common(50)
    print(most_common_words)
    
    
    # Gerar nuvem de palavras
    wordcloud = WordCloud(width=800, height=400, background_color='white').generate_from_frequencies(word_counts)
    
    
    # Exibir nuvem de palavras
    plt.figure(figsize=(10, 5))
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis('off')
    plt.show()
    
    
    

    Conclusão:

    Com base nas informações coletadas e analisadas em nosso dashboard, descobrimos que Direito Trabalhista e Direito da Família são as consultorias com maior número de solicitações.

    image

    Quantidade de palavras encontrada:

    empresa: 1422, pensao: 979, trabalho: 925, processo: 848, contrato: 828, pai: 820, pagar: 803, meses: 758, filho: 732, direito: 663, mae: 658, conta: 647, caso: 575, filha: 567, dinheiro: 561, carro: 559, duvida: 490, advogado: 456, duvidas: 394, recebi: 382, marido: 382, problema: 358, direitos: 356, paguei: 353, guarda: 350, acordo: 346, imovel: 346, banco: 345, divida: 329, pagamento: 327, estao: 325, filhos: 323, alimenticia: 308, aluguel: 300, moto: 300, compra: 297, contra: 296, receber: 293, preso: 276, comprei: 269, salario: 248, devo: 241, servico: 239, orientacao: 232, situacao: 228, trabalhei: 226, justica: 221, terreno: 221, trabalhar: 216, causa: 216

    Referências:

    NLTK

    Pandas

    Matplotlib

    Tkinter

    Compartilhe
    Comentários (0)