Hoje eu quero te mostrar como tratar variáveis de texto de um dataset real! Aprenda 5 maneiras diferentes de fazer este tratamento.
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Fala impressionadores! Saber Tratar variáveis de texto é importante, pois muitas vezes temos variáveis de texto ao invés de apenas números, e os algoritmos de aprendizado de máquina precisam dessas informações em forma de número.
Como esses algoritmos não consegue utilizar variáveis com valores categóricos precisamos ajustá-las para usar um modelo de aprendizado de máquina!
Além disso, ainda vou falar sobre o apply em Python, sobre lambda function, OneHotEncoder e OrdinalEncoder!
E aí, quer ver como eliminar uma coluna no dataset, como verificar informações da base de dados, como eliminar colunas desnecessárias e muito mais?
Para começar vamos utilizar uma base de Previsão de Preço de Voo do Kaggle
Nesta base vamos ter diversas informações sobre os voos, se notarmos a maioria das informações são categóricas, em formato de texto!
Se tentarmos baixar essas informações para um modelo da forma que está, vamos ter um erro!
Então vamos fazer um passo a passo para corrigir essas informações antes de passar para o nosso modelo.
O primeiro passo será importar o Pandas, depois vamos dar um nome a nossa base (dados.csv) e visualizar as 3 primeiras linhas:
Index_col=[0] -> Se quando você importar a base de dados vier uma coluna enumerando as linhas, utilize o index como na imagem acima para excluir esta coluna que é desnecessária.
Observe que as colunas estão em inglês, caso seja mais fácil podemos traduzi-las antes de dar continuidade:
Agora, uma das primeiras coisas que podemos fazer é utilizar o “.info” para obter informações da base:
Temos muitas colunas de texto, podemos começar eliminando colunas desnecessárias:
Quais são as colunas desnecessárias?
São informações que não agregam valor nenhum a nossa análise, por exemplo, estamos analisando o preço de voo, assim, ter uma coluna com o nome de cada voo vai nos ajudar? Esta informação é relevante?
Colunas com valores que se distinguem muito um do outro também podem ser retirados, para isso nós vamos verificar a cardinalidade:
Aqui podemos ver quantos tipos de informação temos por colunas, na Classe temos 2 tipos de informações, por exemplo.
Já no voo temos 1561 tipos de informação. Se essa quantidade enorme não for relevante para a nossa análise, vale a pena excluir ao invés de ter que tratar esse volume de dados.
Verificando essa coluna “voo” percebemos que esta informação é irrelevante, portanto, vamos eliminar a coluna como na imagem acima.
Obs. Nem sempre vamos eliminar colunas com alta cardinalidade, a informação deve ser averiguada antes!
Apply e lambda function
O segundo modo de tratar nossa base é utilizando o apply em Python e o lambda function!
O apply nós vamos utilizar para aplicar alguma função e o lambda function é uma função que vamos escrever na própria linha de forma direta sem precisar gerar complexidade no código.
Vamos mostrar como fazer analisando a coluna Classe
Como a classe é só econômica ou executiva, podemos criar uma coluna com o valor 1, caso seja econômica e 0 no caso de ser executiva.
Observe que agora temos uma coluna numérica “econômica” e essa coluna pode ser usada em um modelo sem problemas.
Agora uma terceira opção de tratarmos os nossos dados:
Ao invés de criar a lambda function, podemos criar uma função separada, neste caso definimos a função para usá-la depois com o Apply.
Como exemplo vamos usar a coluna “Paradas”, vamos visualizar a coluna:
Nesta coluna os valores são 0, 1 ou (2 ou +)
Vamos então criar uma função para tratar esses valores, transformando os textos em números.
Feito isso vamos criar uma coluna e aplicar a nossa função
Pronto, conseguimos tratar e visualizar os dados!
Observe que a coluna nr_paradas tem a mesma informação da coluna de paradas, porém com os resultados numéricos.
Utilizando o OneHotEncoder!
Vamos utilizar o OneHotEncoder quando Não Existe uma relação de ordem entre os valores
Por exemplo, não existe uma relação de ordem entre as empresas aéreas (não podemos dizer que a SpiceJet vem antes da AirAsia ou o contrário)
Vamos transformar os rótulos de dados (os valores que existem nessa coluna empresa_aerea) em novas colunas seguindo os passos abaixo:
Sendo uma coluna com apenas 4 linhas:
O primeiro passo é pegar cada um dos valores dessa coluna (sem repetição) e transformar em uma nova coluna
Em seguida, para cada uma das linhas vamos atribuir o valor 1 se o valor da linha for igual ao nome da coluna.
Por exemplo, para a primeira linha o valor da coluna “passagem_aerea” é “SpiceJet”, então para a coluna SpiceJet nós vamos atribuir o valor 1, seguimos esse mesmo raciocínio para todas as colunas.
Por fim todas as linhas que não estiverem com o valor 1 receberão o valor 0.
Agora que já entendemos a dinâmica vamos começar a analisar pela coluna empresa_aerea
Podemos transformar esses valores (os rótulos de dados) em colunas.
Para isso vamos importar da nossa documentação OneHotEncoder.
Também podemos transformar isso em um dataframe do Pandas
Como selecionar o nome das colunas pela documentação?
Podemos somar os valores:
Poderíamos ter utilizado o OneHotEncoder inclusive com a coluna classe, observe:
Também podemos voltar no OneHotEncoder e definir o parâmetro drop como if_binary
Observe que conseguimos encontrar os mesmos valores de diferentes formas, cabe a você definir qual dos processos é melhor para seu código e utilizar a biblioteca.
Eu recomento o OneHotEncoder porque ele tem mais recursos, inclusive se aparecer um valor novo depois que o modelo estiver pronto, existe na biblioteca um parâmetro de como lidar com valores desconhecidos para tratar mais facilmente essa situação.
Podemos selecionar o máximo de categorias, limitar as categorias, é realmente bem completo!
Por fim vamos falar sobre o OrdinalEncoder
Vamos utilizar o OrdinalEncoder quando de fato EXISTE uma relação de ordem entre os valores
Por exemplo, existe uma ordem entre os horários de partida e de chegada.
Poderíamos ter utilizado o OrdinalEncoder inclusive com a coluna “paradas”
Então aqui da mesma maneira que fizemos antes, criando uma função, agora nós conseguimos o mesmo resultado com o OrdinalEncoder.
Agora você já tem as ferramentas para tratar as variáveis de texto dentro do seu código!
Eu sugiro que você realmente navegue por essas documentações para obter o melhor da ferramenta, tem muita coisa legal que pode ser feita!
Nesta aula trouxe 5 formas de fazer o tratamento de variáveis categóricas!
Existem muitas formas de fazer este tratamento na internet, mas, trouxe aqui as bibliotecas e modos que acredito serem mais interessantes.
Novamente agora que já vimos que é possível chegar em resultados iguais com diferentes recursos e que cada um deles tem seu diferencial cabe a você explorar as bibliotecas e escolher qual faz mais sentido para o seu projeto.
Eu fico por aqui! Espero que tenham gostado das dicas! Até mais,
Para acessar outras publicações de Ciência de Dados, clique aqui!
Expert em conteúdos da Hashtag Treinamentos. Auxilia na criação de conteúdos de variados temas voltados para aqueles que acompanham nossos canais.