Tabela Dinâmica em Pandas

Um guia prático para aumentar habilidades de análise de dados

Pandas é uma biblioteca popular de análise e manipulação de dados para Python. Ele fornece uma grande variedade de funções para manipular, transformar e analisar dados.

Neste artigo, trabalharemos em algumas tarefas típicas de análise e manipulação de dados em um conjunto de dados de supermercado. O foco não é uma função particular dos Pandas. Em vez disso, focamos na tarefa dada e tentamos implementar uma solução eficiente.

import numpy b np
import pandas as pd

Nota: o parâmetro parse_dates armazena a coluna de data com o tipo de dados datatime. É importante quando se trabalha com datas e horários.

Vamos supor que, para uma determinada filial, precisamos calcular a maior diferença nas vendas totais entre dois dias consecutivos. Pode nos ajudar a entender os fatores que aumentam as vendas. Também podemos descobrir se há uma situação extraordinária.

É melhor projetar nossa solução antes de escrever o código. Podemos abordar essas tarefas da seguinte forma:

  • Filtrar dados (ou seja, linhas) que pertencem ao ramo de interesse
  • Selecione as colunas de valor de vendas e data e total
  • Agrupar os pontos de dados por data e calcular a soma
  • Classifique os resultados por data
  • Calcule a diferença entre duas datas consecutivas
  • Selecione o máximo

Parece uma operação altamente complicada. No entanto, os pandas fornecem funções versáteis e poderosas que nos permitem enfrentar essas tarefas facilmente.

solução

df[df.branch == 'A'][['date','total']].groupby(
'date', as_index = False).sum()['total'].diff().max()
  1. A primeira linha filtra pontos de dados que pertencem à filial A e seleciona as colunas data e total.
  2. A segunda linha agrupa as linhas por data.

A saída do grupo por função é automaticamente classificada por data porque usamos a data como coluna de agrupamento. Se não, poderíamos usar a função sort_values após a função groupby.

3. A terceira linha calcula o valor total para cada grupo (ou seja, todos os dias). Em seguida, selecionamos a coluna total e aplicamos a função diff(). Ele calcula a diferença entre uma linha e sua linha anterior. Como as filas são dias consecutivos, acabamos obtendo a diferença entre o valor de vendas de dois dias consecutivos. Finalmente, usamos a função máxima para ver a diferença máxima.

Sabemos a maior diferença, mas não é útil sem saber a data. Assim, devemos melhorar um pouco nossa solução.

df_sub = df[df.Branch == 'A'][['Date','Total']].groupby('Date', as_index=False).sum()
  1. A primeira operação cria um dataframe que contém as vendas diárias totais da filial A.
  2. O segundo cria uma coluna com a diferença entre os totais de dois dias consecutivos. Finalmente, classificamos as linhas com base na diferença na ordem descendente.

A primeira fila de df_sub mostra a data com a maior diferença em relação ao dia anterior.

Podemos confirmar o resultado verificando os valores totais em 2019–02–16 e 2019–02–17.

multiplas soluções

É importante notar que esta não é necessariamente a única solução para esta tarefa. Pandas fornece várias funções e técnicas que o tornam uma ferramenta versátil e poderosa para análise de dados. Assim, podemos chegar a múltiplas soluções para uma determinada tarefa.

As vendas são divididas em 6 linhas de produtos. Para uma determinada filial, podemos querer transformar o dataframe em um formato no qual as linhas de produtos são representadas como colunas. As datas constituirão as linhas e os valores são o valor total das vendas em cada dia.

Podemos abordar essas tarefas da seguinte forma:

  • Filtrar os pontos de dados (ou seja, linhas) que pertencem ao ramo de interesse
  • Selecione a linha de produtos, data e colunas totais
  • Agrupar os pontos de dados por linha e data do produto e calcular a soma das vendas totais para cada grupo
  • Transformar o dataframe de formato longo para amplo
df_new = df.query('branch == "A"')[['prod_line','date','total']]\
.groupby(['prod_line','date'], as_index=False).sum()\
.pivot_table(index='date', columns='prod_line', fill_value=0)

Usamos a função de consulta apenas para demonstrar uma maneira diferente de filtrar linhas. Em seguida, selecionamos as colunas desejadas e aplicamos a função groupby.

A função pivot_table cria uma tabela dinâmica como no excel. O parâmetro de índice representa as linhas que são datas em nosso caso. Os valores na tabela pivô tornam-se o valor total das vendas, uma vez que são as únicas opções apropriadas. Se houver vários candidatos para valores, podemos especificá-lo usando o parâmetro de valores.

Se não houver vendas em uma linha de produtos em uma determinada data, o valor se torna “NaN”, mas podemos alterá-lo usando o parâmetro fill_value.

visão geral do novo dataframe

df_new.head()

conclusão

Pandas é simples e eficiente. A sintaxe é altamente intuitiva, o que torna o código fácil de entender. No entanto, dominar pandas requer prática como qualquer outra ferramenta faz.

Uma coisa é saber o que uma função faz, mas devemos ser capazes de combinar múltiplas funções para realizar uma determinada tarefa.

Obrigado.

Composing a repository of books (i bought), authors (i follow) & blogs (direct ones) for my own understanding.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store