Como realizar Label Encoding em Python: Variáveis Categóricas para Numéricas

Quem trabalha com dados precisa identificar e entender como fazer Label Encoding, já que constantemente identificamos conjuntos de dados com variáveis categóricas na hora da análise.

Dessa forma esses dados estão representando atributos qualitativos em vez de valores numéricos. E se quisermos utiliza-los para análise e futuramente em machine learning por exemplo, para que possamos utilizar com o algoritmo eles precisam ser valores numéricos, afinal a máquina entende números.

Já sabemos que muitos algoritmos de aprendizado de máquina precisam de números para trabalhar, e é ai que entra o processo de Label Enconding.

Durante a análise e tratamento dos dados, atribuir valores numéricos para os dados categóricos nos permite utilizar em vários algoritmos. Aqui veremos o que é Label Encoding, onde podemos aplicar e como fazer isso com exemplos.

O que é Label Encoding?

Label Encoding é o processo onde você mapeia cada categoria e atribui valores numéricos para dados categóricos.

Essa é uma forma de converter os dados categóricos para numéricos para que possa ser utilizado nas análises e modelagem futuras.

Com o Label Encoding você atribui um número inteiro único para cada valor da variável categórica.

Veja um exemplo:

Imagine que temos uma variável categórica “regiões” com categorias como Norte, Nordeste, Centro-Oeste, Sudeste e Sul.

Dessa maneira podemos atribuir valores números como 0, 1, 2, 3, 4 para cada uma das categorias.

Isso nos permitirá representarmos os dados de forma numérica, que justamente é utilizado por algoritmos de machine learning.

Veja alguns exemplos de como podemos atribuir valores numéricos para variáveis categóricas.

Exemplo de Label Enconding em Python

Exemplo 1: Segmentação de Candidatos

Nesse exemplo temos um conjunto de dados com pessoas que se candidataram a vagas de emprego e ele traz características como Formação, Faixa de Idade e Estado Civil.

Label Encoding - Segmentação de Candidatos

A partir desses dados você pode aplicar o Label Encoding e atribuir valores numéricos para as variáveis categóricas. Com isso poderá representar os dados em formato de número adequado para utilização na análise de segmentação de candidatos.

Exemplo 2: Categorias de Produtos

Isso pode ser facilmente aplicado em dados de e-commerce ou qualquer produto ou serviço que esteja organizado por categorias ou departamentos.

O conjunto de dados contendo Nome do Produto e Categoria, você pode utilizar o Label Encoding e atribuir valores numéricos para elas.

Label Encoding - Categorias de Produtos

A partir disso você terá valores numéricos nas variáveis categóricas permitindo fazer a análise como na imagem acima.

Por que usar o Label Encoding?

Lembre-se na hora de utilizar os algoritmos em machine learning por exemplo, a máquina não entende palavras, sentimentos e textos, ela trabalha melhor com números.

Utilizar essa técnica ajudará você a tratar os dados para que possa utilizar em suas análises. Um bom exemplo é quando tratamos de análise de sentimentos, como explicar para a máquina que os dados passados representam informações como Feliz, Triste, Decepcionado, Cansado, Agitado?

Através do Label Encoding você transforma isso para que ela possa entender.

Utilizar o Label Enconding vai facilitar a utilização dos dados e permitir fazer muitas outras análises e aplicar algoritmos de machine learning.

Onde podemos utilizar Label Encoding?

Posso dizer que existem vários cenários possíveis para utilizar a técnica de Label Encoding para trabalhar com os dados categóricos.

– Visualização de Dados

Você pode utilizar o Label Encoding pensando na visualização de dados, já que ao atribuir valores numéricos poderá trabalhar a representação desses dados em gráficos. Talvez essa utilização seja a mais comum de todas.

Essa transformação de categórico para numérico pode gerar insights bem significativos para sua análise sobre os dados.

– Sistemas de recomendação

Quando falamos de sistemas de recomendação geralmente utilizamos variáveis categóricas para as preferências do usuário.

Ao transformar e trabalhar essas variáveis, podemos utilizar junto com os algoritmos de recomendação para processarem os dados e fazer recomendações personalizadas com base nas preferências do usuário.

– Processamento de Linguagem Natural (NLP  – Natural Language Processing)

O Label Encoding tem um papel muito importante aqui, já que pode converter as categorias como positivo, negativo, neutro em representações numéricas para serem utilizadas em aplicações NLP, um exemplo bem comum seria a análise de sentimentos.

Isso permite que os algoritmos de machine learning compreendam e analisem os dados para gerarem um melhor resultado.

– Análise de Clustering

Podemos utilizar o Label Encoding na análise de agrupamento, onde precisamos transformar variáveis categóricas em numéricas para que o algoritmo de agrupamento possa identificar padrões dentro do grupo de dados.

Preparando os Dados para Label Encoding com Python

Assim como em qualquer análise e tratamento de dados antes de aplicarmos o Label Encoding é necessário preparar os dados.

A seguir veremos algumas etapas rotineiras na preparação de dados para trabalhar com Label Encoding.

Valores ausentes

Na maioria dos dados, encontrar valores ausentes é muito comum, principalmente em grandes volumes.

Para aplicarmos o label encoding com Python é necessário resolver a questão com esses valores ausentes antes de continuar.

E para tomar a decisão de remover ou não, existe um grande “depende”, cabe a você analisar e decidir se a ação pede que seja removido linhas ou colunas com esses valores ausentes caso eles não sejam importantes para sua analise.

Uma outra alternativa é atribuir aos valores ausentes usando técnicas como moda, mediana ou média ou até mesmo imputação utilizando outras técnicas, tudo vai depender do seu objetivo, por isso analise bem.

Variáveis ordinais

Aqui requer muita atenção também, pois caso seus dados contenham variáveis ordinais, é muito importante tratar de forma que preserve essa ordem para não atrapalhar na hora da analise.

Uma opção aqui é definir uma ordem predeterminada como guia para evitar perdas.

Algumas situações que podemos ver isso é na escolaridade (ensino fundamental, ensino médio, graduação, pós-graduação, etc.) ou outro exemplo seria nível profissional (Estagiário, Junior, Pleno e Sênior).

Nessas situações poderia definir para os rótulos valores como 0, 1, 2 , 3 … e para complementar pode ser criado um dicionário para mapear e especificar a ordem dos valores numéricos de acordo com cada item para preservar o entendimento.

Variáveis Nominais

Já caso se depare com variáveis nominais, você pode ainda utilizar o one-hot encoding, como uma alternativa ao label encoding, novamente reforço, tudo dependerá do seu objetivo e analise.

Em algumas situações você poderá aplicar ambas as técnicas e fazendo analise separada para comparar os resultados.

No caso do one-hot criamos colunas para cada categoria e utilizamos dados binários (0 ou 1), onde ele dirá se a categoria esta ou não presente.

Essa técnica pede atenção caso você tenha muitas categorias por exemplo. Pois pode aumentar significativamente o número de colunas.

Pré-processamento de dados

Assim como em qualquer análise, verifique os dados, veja como estão e faça a analise exploratória, veja o que é necessário ou não.

Realizar as etapas de limpeza de dados e tratamento pode facilitar o processo de Label Enconding é fundamental.

A normalização ou remoção de valores pode adiantar o seu serviço em relação ao que precisa ser feito. A execução de toda checagem e analise, pode facilitar seu trabalho já que pode poupar muito tempo evitando ações desnecessárias.

A limpeza e tratamento dos dados pode gerar ganho de desempenho tanto para análise quanto para parte de machine learning, e garantirá que os dados estejam no formato mais adequado.

Fazendo o Label Encoding com Python

Para fazer o Label Encoding em Python usaremos o sci-kit-learn, é uma biblioteca gratuita, de código aberto, para Machine Learning (Aprendizado de Máquina).

Abaixo tem o passo a passo de como fazer Label Encoding, eu utilizei o Jupyter Lab e vou disponibilizar o arquivo para download no GitHub no final do artigo para acesso.

Exemplo 1:

Importando as bibliotecas necessárias:

# Importando as bibliotecas necessárias
from sklearn.preprocessing import LabelEncoder
import pandas as pd

Criando o dataframe simples para testarmos:

# Criando o Dataframe para testarmos
df = pd.DataFrame({'formacao': ['Superior Completo', 'Ensino Médio Completo', 'Superior Completo', 'Ensino Médio Completo', 'Superior Completo', 'Superior Completo'],
                      'faixa de idade': ['25-34','18-24','34-44','45-54','25-34','45-54' ],
                      'estado civil': ['Casado','Solteiro','Casado','Solteiro','Solteiro','Divorciado']})

Crie uma instância do LabelEncoder para utilizar:

# Instanciando o LabelEncoder para utilização
label_encoder = LabelEncoder()

Aplicando o label encoding em Python na variável categórica estado civil, o mesmo pode ser aplicado para todas se desejar:

# Adicionei a coluna estado civil encoder com os dados gerados do Label Encoding,
# mas no caso dependendo da sua analise pode sobrescrever os dados da coluna estado civil, fiz apenas para ilustrar
df['estado civil encoder']= label_encoder.fit_transform(df['estado civil']) 
df.head()

No caso aqui, aplicamos o label encoding à variável categórica “estado civil” que desejamos mudar.

Eu utilizei o método fit_transform que já ajusta os dados e transforma, mas caso deseje saber outra maneira de fazer pode ler a documentação sobre os métodos .fit() e .transform() nesse link da documentação.

Invertendo e restaurando os dados numéricos para categóricos em Python:

Existe o método .inverse_transform() que reverte a alteração feita para o formato anterior. Essa é uma boa opção caso deseje recuperar a alteração.

# Invertendo o Label Encoding em python
# Esse método ele volta 
df['estado civil encoder']= label_encoder.inverse_transform(df['estado civil encoder']) 
df.head()

Ainda no mesmo Jupyter notebook seguimos com o exemplo 2:

#lendo os dados do dataset
df_iris = pd.read_csv('dados/iris/Iris.csv')
df_iris.head()
#aplicaremos o Label Enconding na colua Species
# identificando quantos valores unicos existem
# veja que a saída de dados é no formato categórico
df_iris['Species'].unique()
# Aqui instanciamos o Label Encoder (não precisaria já que foi instanciado antes)
label_encoder = LabelEncoder()
label_encoder.fit(df_iris['Species'])
# Aqui fazemos a transformação para numérico
df_iris['Species'] = label_encoder.transform(df_iris['Species'])
df_iris['Species'].unique()

Alguns benefícios do utilizar o Label Encoding

  • Uma forma de simplificar a utilização dos dados já que converte em numérico os valores categóricos permitindo assim realizar análises estatísticas, utilização com Machine Learning e criação de gráficos específicos.
  • Reduz o consumo de memória já que dados numéricos ocupam menos memória que dados categóricos, o que pode facilitar principalmente quando trabalhar com grande volume de dados.
  • Facilidade e flexibilidade para suas análises, já que essa técnica pode ser aplicada a múltiplas variáveis categóricas, o que pode facilitar na hora de realizar o pré-processamento dos dados, tratamento e limpeza.
  • Melhora o desempenho em determinados algoritmos, já que em machine learning muitos algoritmos funcionam melhor com dados numéricos do que com categóricos. Pode gerar uma excelente otimização.
  • Ordinalidade, principalmente se a variavel categórica tiver essa ordenação naturalmente no conjunto, isso pode ser importante em determinados tipos de analise que precise realizar.

Limitações do Label Encoding

Como nem tudo é perfeito, ao utilizar essa técnica é importante ficar atento a certos pontos.

O Label Encoding converte os dados categóricos em numéricos, mas atribui um número exclusivo (começando em 0) a cada classe de dados.

Isso pode levar à geração de questões prioritárias durante o treinamento de modelos de conjuntos de dados.

Um label com um valor alto pode ser considerado de alta prioridade do que um label com um valor mais baixo.

Label Encoding não é adequado para modelos lineares como Regressão Logística.

Quando usar Label Enconding?

Não é regra e sim uma recomendação, cabe a você analisar e tomar a decisão junto a equipe.

Quando tive um número baixo de categorias (entre 10 e 15 é uma recomendação).

Quanto mais categorias mais difícil interpretar, isso porque ela passa a se comportar como variável numérica podendo dificultar a análise.

Espero que tenha aprendido um pouco mais sobre como realizar Label Encoding em Python

O label encoding é um técnica extremamente útil e valiosa quando se trata de análise de dados e machine learning quando o assunto é trabalhar com variáveis categóricas.

Essa técnica permite transformar atributos qualitativos em numéricos, ampliando assim sua utilização por muito mais algoritmos e análises.

Você pode utilizar label encoding em diversas aplicações que vão desde a visualização de dados, análise de cluster, até NLP e muito mais.

A biblioteca sci-kit-learn fornece ferramentas extremamente úteis para realizar esse trabalho de forma simples e rápida, gerando assim ganho de tempo. Minha recomendação é que leia a documentação e estude mais sobre as possíveis aplicações dessa técnica.

O conteúdo foi útil? Tem alguma dúvida ou o que você gostaria de saber mais? Fique à vontade para entrar em contato!

Link para o código do Jupyter Notebook no GitHub

https://github.com/dadlevelmax/label-encoding-python

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *