Postado em em 13 de julho de 2024

Aprenda como usar a função melt do Pandas para te auxiliar na hora de separar informações e torná-las mais visuais e fáceis de trabalhar.

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:

Entenda a Função Melt do Pandas

Na aula de hoje, eu vou abordar a função melt do Pandas, uma função que te ajudará na hora de separar informações, tornando-as mais visuais e fáceis de trabalhar.

Essa função nos permite transformar um DataFrame de formato largo em um DataFrame longo. Basicamente, a ideia é pegar uma tabela com várias colunas e transformar essas colunas em linhas.

Geralmente, quando trabalhamos com dados, encontraremos bases de dados que não estão prontas para uso imediato. Portanto, precisamos fazer alguns tratamentos e transformações antes de começar a análise dos dados.

O método melt é uma dessas transformações possíveis. Além dele, também mostrarei como reorganizar os dados e utilizar o método rsplit para preparar sua base de dados para uma análise completa.

Faça o download do material disponível e venha comigo aprender a utilizar a função melt do Pandas.

Visualizando a Base de Dados

No material disponível para download, você encontrará a base de dados que utilizaremos ao longo desta aula.

Nela, temos dados fictícios que simulam o registro de satisfação dos clientes com a empresa. Esses dados incluem satisfação geral, satisfação com produtos e satisfação com serviços ao longo de três meses.

Podemos visualizar esses dados gerando o DataFrame com o Pandas e verificando as informações presentes.

import pandas as pd
BASE = "./dados/dados_satisfacao.csv"
dados = pd.read_csv(BASE)

dados
Visualizando a Base de Dados

As informações coletadas estão organizadas de forma que cada linha representa um cliente e suas respostas para cada categoria de satisfação em diferentes meses.

Note que os dados estão estruturados em um DataFrame largo (wide) e, para esta análise e visualização das informações, será melhor se estiverem dispostos em um formato longo (long). Para isso, a função melt será essencial.

Método melt do Pandas

O método melt serve para transformar um DataFrame de formato largo para um formato longo.

Em um DataFrame de formato largo, as colunas representam diferentes variáveis, e os dados de cada variável são mantidos separados.

No formato longo, os dados são reorganizados de modo que cada linha representa uma observação individual de uma variável específica.

O método melt “derrete” (ou seja, transforma) colunas selecionadas em duas colunas: uma que contém o nome das variáveis e outra que contém os valores dessas variáveis.

O uso da função melt é principalmente útil em três cenários:

1. Reorganizar os dados: Você precisa reorganizar seus dados para que cada observação seja representada por uma única linha. Isso é particularmente útil em preparação para análises que requerem um formato longo, como muitas funções de bibliotecas estatísticas e de visualização de dados.

2. Transformar múltiplas colunas em uma única coluna: Quando suas variáveis estão espalhadas em várias colunas e você deseja consolidá-las em uma única coluna para facilitar a manipulação e a análise.

3. Dados com diferentes categorias e períodos: Quando você tem dados que incluem diferentes categorias e períodos e você deseja transformar essas categorias e períodos em linhas distintas.

Para mais detalhes sobre o método melt, você pode conferir a documentação oficial aqui:

Aplicando a Função Melt

O melt pode ser aplicado tanto como uma função quanto como um método do Pandas, com algumas diferenças na sintaxe entre elas, mas a aplicação é a mesma.

Vamos utilizar a função melt passando para ela nosso DataFrame e os parâmetros id_vars, value_vars, var_name e value_name.

O id_vars são as colunas que permanecerão fixas e não serão derretidas. Elas servirão como identificadores do nosso novo DataFrame.

Por sua vez, o value_vars são as colunas que serão “derretidas”. Cada uma dessas colunas será transformada em uma linha da nova estrutura.

Já os parâmetros var_name é o nome que será criado para conter o nome das variáveis que anteriormente estavam em colunas. E value_name é o nome da nova coluna que será criada para conter o valor das variáveis.

# Usando melt para transformar o DataFrame
dados_melt = pd.melt(
    dados,
    id_vars=["cliente_id", "idade", "genero"],
    value_vars=[
        "satisfacao_geral_01-2024",
        "satisfacao_geral_02-2024",
        "satisfacao_geral_03-2024",
        "satisfacao_produto_01-2024",
        "satisfacao_produto_02-2024",
        "satisfacao_produto_03-2024",
        "satisfacao_servico_01-2024",
        "satisfacao_servico_02-2024",
        "satisfacao_servico_03-2024",
    ],
    var_name="categoria_mes",
    value_name="nota",
)

dados_melt

Método melt do Pandas

Repare que agora temos todas as categorias com os meses, que antes eram colunas, organizadas em linhas, assim como as notas. Dessa forma, temos uma visualização e organização mais eficaz dos dados, facilitando a análise posterior deles.

Separando Colunas com o Método Rsplit

Mesmo obtendo uma melhor disposição dos dados a partir do método melt, podemos melhorar ainda mais a visualização deles. Se observarmos o nosso DataFrame atual, veremos que temos uma mesma coluna para categoria e data.

Seria interessante dividirmos essa coluna em duas novas: uma apenas para categoria e outra para data.

Podemos fazer isso utilizando o método rsplit (right split), uma função de string em Python que divide um texto (string) em uma lista de substrings, semelhante ao método split.

A diferença entre eles é que o rsplit divide a string a partir do final, ou seja, da direita para a esquerda, enquanto o método split divide a partir do começo.

Como nosso objetivo é separar a data da categoria, o método rsplit se torna mais efetivo, pois podemos passar o underscore como separador e definir o número de divisões como 1. Dessa forma, ao encontrar o primeiro _, o método irá separar a string em duas partes.

Isso é útil quando precisamos dividir uma string em partes específicas utilizando um separador que aparece mais de uma vez, como nesse caso em que queremos dividir em categoria e mês.

Vamos criar essas duas colunas no nosso DataFrame dados_melt e utilizar o método rsplit.

Como parâmetros, vamos definir o separador (sep), o número de divisões que serão feitas (n=1) e o expand=True, que expande a divisão em várias colunas, retornando um DataFrame que é então atribuído às colunas categoria e mes.

Feito isso, podemos remover a coluna original categoria_mes utilizando o método drop.

# Separando 'categoria_mes' em 'categoria' e 'mes'
dados_melt[["categoria", "mes"]] = dados_melt["categoria_mes"].str.rsplit(
    "_", n=1, expand=True
)

dados_melt = dados_melt.drop(columns=["categoria_mes"])

dados_melt

Separando Colunas com o Método Rsplit

Assim, temos as categorias e os meses separados em colunas distintas.

Para mais detalhes sobre o método rsplit, você pode conferir a documentação oficial aqui:

Ajustando os Tipos de Dados

Se verificarmos as informações desse DataFrame resultante, veremos que a coluna mes está sendo reconhecida como object, ou seja, texto.

dados_melt.info()

Info do DataFrame

Como vimos na aula sobre Otimizar DataFrames, um dos principais pontos é ajustarmos os dados para que eles sejam reconhecidos e utilizados de forma correta.

Por isso, usaremos a função to_datetime para converter a coluna mes em uma coluna de data.

# coluna mes para datetime
dados_melt["mes"] = pd.to_datetime(dados_melt["mes"], format="%m-%Y")

dados_melt

coluna de data

Agora que a coluna mes passou a ser do tipo data, podemos exibir apenas o mês na coluna, ao invés da data completa.

# pegar apenas o mês da data
dados_melt["mes"] = dados_melt["mes"].dt.month

dados_melt

exibir apenas o mês

Tipo Categórico

Assim como fizemos a conversão da coluna mes para o tipo data, podemos fazer a conversão das colunas genero e categoria em tipos categóricos.

Esse tipo de dado é útil para fazermos agrupamentos e categorizações, conforme vimos na aula Como Criar Categorias no Pandas.

Utilizar os tipos categóricos em colunas com poucos valores únicos facilita as análises que podemos construir.

# colunas 'genero' e 'categoria' para categorias
dados_melt["genero"] = dados_melt["genero"].astype("category")
dados_melt["categoria"] = dados_melt["categoria"].astype("category")

dados_melt

Tipo Categórico
dados_melt.info()

Info final do dataframe

Feitas essas conversões, temos nossos dados preparados para uma manipulação e análise mais eficiente e assertiva. A partir disso, podemos construir e realizar diferentes análises de dados, de acordo com nosso objetivo.

Conclusão – Entenda a Função Melt do Pandas

Na aula de hoje, você aprendeu a utilizar o método melt para transformar múltiplas colunas em uma única coluna, tornando a análise e visualização dos dados mais eficiente e prática.

Vimos também como utilizar o método rsplit para separar uma coluna em duas ou mais, com base em um padrão.

Por fim, vimos a importância da transformação dos tipos de dados para data e tipo categórico, facilitando e otimizando as análises futuras que podemos fazer.

Caso queira conhecer outras formas e métodos de reorganização de dados com Pandas, deixo aqui a nossa aula sobre como fazer Reshaping no Pandas.

Além disso, se você fizer o download do material disponível, encontrará uma aplicação bônus desse mesmo processo sendo feito com o método wide_to_long.

Hashtag Treinamentos

Para acessar outras publicações de Ciência de Dados, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Posts mais recentes da Hashtag Treinamentos