Group By e Reshape em Pandas

Alguns tantos exemplos de agrupamentos em pandas

O objetivo aqui, é utilizar o conjunto de dados de Cidades Digitais obtidos atraves do Portal Brasileiro de Dados Abertos para fazer diferentes análises: agrupamentos, somas, pivôs — conceitos muito comuns quando se trabalha com Business Intelligence.

Notebook de estudo

Acesse o Jupyter Notebook para consultar os conceitos que serão abordados sobre manipulação de dados com Pandas em DataFrames.

O Projeto de Cidades Digitais foi planejado para modernizar a gestão e ampliar o acesso ao serviço público, bem como promover o desenvolvimento dos municípios brasileiros através da tecnologia.

Importar pacotes

Começamos importandos os pacotes de praxe.

Importar o conjunto de dados

Aqui usamos a função read_csv(), passamos o arquivo csv como parâmetro, indicamos o separador de colunas sep (verifique o arquivo) e determinamos o enconding — forma como os caracteres foram colocados dentro do arquivo.

Visualizar conjunto de dados

Contabilizar registros

Podemos utilizar a função count() para contabilizar quantos registros temos para cada coluna do DataFrame.

Deletar coluna

Podemos ainda, se necessário, deletar uma coluna.

Agrupar

Podemos fazer agrupamento por uma das colunas especificadas. Se você já trabalhou com linguagem SQL, você com certeza já ouviu falar em groupby.

Depois de realizar o agrupamento, gravamos em um DataFrame — evite alterar o DataFrame original. Sempre que fizer qualquer mudança, grave o resultado em outro DataFrame para que possa comparar qualquer mudança.

Verificar tipo do objeto

É um objeto do tipo DataFrame Agrupado — o próprio Pandas já compreendeu que queremos agrupar os dados. Ao criar o objeto desse tipo abaixo, ele vai oferecer métodos e atributos próprios do DataFrameGroupBy.

Atributo do novo objeto

Podemos chamar um atributo específico desse objeto. Este atributo groups só existe porque o objeto do Pandas foi criado como sendo DataFrameGroupBy.

Temos um DataFrame completamente agrupado — mostra cada uma das UFs como chaves e para cada uma dessas chaves, uma série de valores totais.

Número de grupos

Se desejar visualizar o número de grupos, podemos chamar a função len para o atributo groups. Um grupo para cada Unidade da Federação.

Verificar tamanho do objeto

Para visualizar o tamanho desse objeto, podemos chamar o método size — gravamos o resultado na variável ordenaUF

Verificar tamanho dos grupos

Na sequência vamos ordenar por grupos, ou seja, vamos ordenar esse DataFrame pelos grupos que foram criados no momento do agrupamento.

Vamos adicionar o parâmetro ascending=FALSE, para termos uma ordenação de valores decrescente. Abaixo podemos identficar o tamanho de cada grupo.

Agrupar por 2 colunas

Agora vamos fazer o agrupamento por duas colunas e gravar em outro objeto. E então, faremos o mesmo procedimento que o anterior: coletar o tamanho, colocar em uma variável total, usar essa variável para ordenar os grupos.

Veja que agora a quantidade de registros mudou — fizemos dois agrupamentos simultâneos por UF e STATUS, retornando o total para cada uma dessa combinações a partir do agrupamento.

Isso é reconhecido como Pivô, podemos pivotar os dados, ou seja, ir analisando os dados por diferentes ângulos e assim coletando diferentes perspectivas e insights.

O dataset cidadesDigitais acima, continua intacto — apenas removemos IBGE. Tudo que foi feito de agrupamento até agora, foi gravado em outro objeto.

Definir índice

Agora vamos definir o índice que desejamos para a nossa tabela. Podemos utilizar o método set_index, ou seja, dentro da lista de colunas que temos em nosso DataFrame, vamos escolher uma para ser o índice.

Podemos usar qualquer coluna como índice e depois usá-la para fatiar esse mesmo DataFrame. Chamamos o objeto cidadesDigitais e definimos o índice com o método set_index:

Agora vamos fazer um agrupamento pelo índice — isso é muito poderoso. Podemos realizar várias operações de slicing através do índice, ao invés de usar índices numéricos, podemos usar nomes específicos dentro da coluna, que agora passa a ser o nosso índice.

Múltiplos Índices

Podemos passar uma lista de colunas como índices.

Agora temos duas colunas se comportando como índices. Também podemos inverter a ordem dos índices.

Fazemos o agrupamento novamente, e em seguida, podemos somar. Teremos cada uma das Unidades Federais, o Status para cada uma das unidades e o total de população e pontos atendidos para cada uma das combinações.

Programação

Fizemos agrupamentos por vários níveis diferentes — isso comumento é feito com a linguagem SQL — fizemos isso com duas linhas em Pandas.

A vantagem de utilizar a linguagem de programação como R, Python, Scala, JavaScript, etc… é que temos flexibilidade. Podemos utilizar a programação da forma que desejarmos, para alcançar os objetivos em análise de dados.

Quando utilizamos uma ferramenta visual, que não tem programação, dependemos exclusivamente do que a ferramenta oferece. Com a programação, o limite é a criatividade. O que fizemos aqui acima, foi meramente pegar duas colunas como índices, agrupá-las e somá-las. Resultado disso foi uma tabela com informações bastante importantes.

O nosso trabalho principal é conhecer, compreender e saber como usar os métodos que acompanham cada objeto! Essa é a estratégia em programação.

A partir do tipo de objeto que estamos trabalhando, devemos verificiar na documentação quais métodos e atributos para o objeto — geralmente DataFrames.

Agregação

Assim como fizemos a soma a partir do agrupamento, podemos agora fazer uma agregação pela soma

Podemos ainda fazer agregações para soma, média e até mesmo tamanho. Estamos chamando esses parâmetros são funções a partir do NumPy.

Em uma mesma tabela, colocamos várias informações diferentes. Fizemos isso com algumas pouquíssimas linhas de código. Isso daria muito trabalho para se fazer no Excel.

Várias colunas como índice

Podemos ainda, definir várias colunas da tabela como índice.

Conseguimos chegar em um nível de granularidade bem baixo de informação fazendo vários agrupamentos, com várias colunas diferentes. Por último, fazemos a soma:

Agora temos um resultado final. que é completamente diferente dos últimos resultados. Fomos apenas olhando para os dados por diferentes perspectivas, transformando linha em coluna, coluna em linha, definimos colunas como índices, fomos agrupando por esses índices, fizemos agregações, e assim conseguimos fazer resumos a partir dos dados.

Não temos nada de Machine Learning, Inteligência Artifical — ferramentas de BI avançadas fazem o mesmo do que foi proposto aqui através de Pandas.

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