Alura > Cursos de Data Science > Cursos de Data Science > Conteúdos de Data Science > Primeiras aulas do curso Python: criando tabulações com groupby

Python: criando tabulações com groupby

Criando tabulações com groupby - Aplicando o método groupby

Olá, meu nome é Valquíria, sou a instrutora na Escola de Dados.

Audiodescrição: Valquíria Alencar se descreve como uma mulher branca. Tem olhos castanhos, cabelos loiros e ondulados na altura abaixo dos ombros e tatuagens aparentes. Usa piercing no septo e uma blusa rosa. Ao fundo, estúdio com iluminação azulada. À direita, uma estante com decorações e, à esquerda, uma planta.

Criando tabulações com groupby()

Hoje, vamos praticar estratégias de criar tabelas para resumir dados de maneira eficiente, utilizando a biblioteca Pandas com o método groupby().

Para relembrar como fazer esse processo, disponibilizaremos um notebook na próxima atividade, com mais detalhes, para consulta posterior.

Carregando dados

Vamos começar pelo carregamento dos dados que usaremos para praticar o groupby(). Primeiro, importamos a biblioteca Pandas:

import pandas as pd

Para executar o código, podemos utilizar o atalho "Shift + Enter" ou apertar o botão de "play" à esquerda da célula.

Agora, carregamos os dados no formato CSV e os armazenamos em uma variável chamada df.

df = pd.read_csv('https://raw.githubusercontent.com/vqrca/python_dados/refs/heads/main/Dados/contagem_bicicletas.csv')

Em seguida, verificamos as primeiras cinco linhas para entender o tipo de dados que temos:

df.head()
#data_horacontagemtemperaturasensacao_termicaumidadevelocidade_ventoclimaferiadofim_de_semanaestacao
02015-01-04 00:00:001823.002.0093.06.0NubladoNãoSimInverno
12015-01-04 01:00:001382.752.2593.05.0Céu limpoNãoSimInverno
22015-01-04 02:00:001342.502.5096.50.0Céu limpoNãoSimInverno
32015-01-04 03:00:00722.002.00100.00.0Céu limpoNãoSimInverno
42015-01-04 04:00:00472.002.0093.06.5Céu limpoNãoSimInverno

Os dados são de uma empresa de aluguel de bicicletas, contendo informações como data e hora do aluguel, contagem de bicicletas alugadas, temperatura, sensação térmica, umidade, velocidade do vento, clima, se era feriado, fim de semana e estação do ano.

Utilizando o método groupby()

Vamos trabalhar com o método groupby(), que agrupa informações de acordo com uma ou mais colunas e aplica métodos estatísticos para obter, por exemplo, a média, soma, variância, entre outros.

Vamos agrupar os dados pelo clima e aplicar o método describe() da biblioteca Pandas na coluna contagem de bicicletas para obter várias estatísticas descritivas.

Para fazer isso, criamos uma variável estatisticas_clima para armazenar esse agrupamento. Chamamos o dataframe chamado df, acrescentamos um ponto e chamamos o método groupby(). Entre parênteses e aspas, passamos a coluna pela qual agruparemos os dados. Nesse caso, a coluna clima.

Depois, entre colchetes e aspas, passamos a coluna que contém os dados nos quais aplicaremos a estatística. Nesse caso, é a coluna contagem. Por fim, fora dos colchetes, chamamos .describe() para aplicar as estatísticas descritivas.

Na linha seguinte, chamamos a variável novamente para poder visualizar o resultado.

estatisticas_clima = df.groupby('clima')['contagem'].describe()
estatisticas_clima
climacountmeanstdmin25%50%75%max
Chuva com trovoadas14.0583.428571283.001689150.0302.00620.5765.001040.0
Chuva leve2141.0712.966371764.8794090.0150.00471.0981.006585.0
Céu limpo6150.01162.0889431187.21801910.0196.00745.01767.007860.0
Neve60.0250.850000470.58887815.038.2588.0192.002894.0
Nublado3551.01195.1244721014.74555712.0430.00964.01673.505033.0
Parcialmente nublado5498.01266.9257911076.50019814.0373.001050.51805.757531.0

O resultado mostra uma coluna com o clima e, em relação à contagem de bicicletas, temos colunas de contagem, média, desvio padrão, valor mínimo, quartis (25%, 50%, 75%) e valor máximo. Isso nos permite resumir várias informações sobre a contagem de bicicletas de acordo com o clima daquele momento.

Utilizando funções de agregação específicas

Além disso, podemos aplicar funções de agregação específicas para fazer essa agregação, como:

Por exemplo, se queremos agrupar pelo clima e obter a soma das contagens de bicicletas para cada clima, podemos usar a função sum():

soma_clima = df.groupby('clima')['contagem'].sum()
soma_clima
climacontagem
Chuva com trovoadas8168
Chuva leve1528869
Céu limpo7153545
Neve15051
Nublado4246904
Parcialmente nublado6974570

O resultado é uma tabela contendo o clima e a soma das contagens na coluna contagem.

Para facilitar a análise, podemos até ordenar a soma da contagem do maior para o menor valor usando o método sort_values() com o parâmetro ascending igual a False:

soma_clima = df.groupby('clima')['contagem'].sum().sort_values(ascending=False)
soma_clima
climacontagem
Céu limpo7146847
Parcialmente nublado6965558
Nublado4243887
Chuva leve1526461
Neve15051
Chuva com trovoadas8168

Dessa forma, descobrimos que a maior quantidade de bicicletas são alugadas com o céu limpo, enquanto menos são alugadas quando o clima é chuvoso com trovoadas.

Utilizando várias funções de agregação

Além de usar uma função específica de agregação, também é possível aplicar várias funções ao mesmo tempo com o método agg().

Na próxima célula de código, também vamos agrupar pelo clima para calcular a contagem. Para passar várias funções, vamos acrescentar o .agg() e, entre parênteses e colchetes, vamos listar as funções que queremos utilizar entre aspas.

Nesse exemplo, vamos calcular a soma, média, valor mínimo e máximo da contagem para cada clima.

soma_clima = df.groupby('clima')['contagem'].agg(['sum', 'mean', 'min', 'max'])
soma_clima
climasummeanminmax
Chuva com trovoadas8168583.4285711501040
Chuva leve1526461712.96637106585
Céu limpo71468471162.088943107860
Neve15051250.850000152894
Nublado42438871195.124472125033
Parcialmente nublado69655581266.925791147531

Agrupando os dados por mais de uma coluna

Até agora, agrupamos os dados por apenas uma coluna, que é o clima. No entanto, é possível fazer esse agrupamento por mais de uma coluna.

Na próxima célula de código, podemos fazer um exemplo onde agrupamos pela estação do ano e clima. Basta chamar o dataframe df com o método groupby(). Entre colchetes, passamos as colunas estacao e clima, cada uma entre aspas.

Fora do groupby(), acrescentamos a coluna contagem, entre colchetes e aspas, e chamamos a função .mean() para calcular a média.

df_estacao_clima = df.groupby(['estacao', 'clima'])['contagem'].mean()
df_estacao_clima
estacaoclimacontagem
InvernoChuva com trovoadas228.000000
-Chuva leve542.968153
-Céu limpo760.163115
-Neve318.409091
-Nublado971.990635
-Parcialmente nublado908.796070
OutonoChuva com trovoadas242.000000
-Chuva leve788.809249
-Céu limpo1130.973451
-Neve59.300000
-Nublado1281.383778
-Parcialmente nublado1304.220484
PrimaveraChuva com trovoadas798.428571
-Chuva leve677.873162
-Céu limpo1144.472603
-Neve74.666667
-Nublado1162.028607
-Parcialmente nublado1199.101483
VerãoChuva com trovoadas421.800000
-Chuva leve905.160000
-Céu limpo1471.312843
-Nublado1393.618065
-Parcialmente nublado1688.683146

Assim, obtemos a média de contagem de biciletas dos climas por estação do ano.

Para facilitar a visualização, podemos transformar o clima em colunas usando o método unstack(). Basta chamar a variável df_estacao_clima que criamos anteriormente e chamar esse método.

df_estacao_clima_unstack = df_estacao_clima.unstack()
df_estacao_clima_unstack
estacao/climaChuva com trovoadasChuva leveCéu limpoNeveNubladoParcialmente nublado
Inverno228.000000542.968153760.163115318.409091971.990635908.796070
Outono242.000000788.8092491130.97345159.3000001281.3837781304.220484
Primavera798.428571677.8731621144.47260374.6666671162.0286071199.101483
Verão421.800000905.1600001471.312843NaN1393.6180651688.683146

O resultado obtido é uma tabela com cada estação em uma linha e cada clima em uma coluna. Dessa forma, fica mais fácil entender qual o valor médio da contagem para cada um dos climas de acordo com a estação.

Aplicando diferentes funções de agregação

Por fim, podemos aplicar diferentes funções de agregação ao mesmo tempo para diferentes colunas.

Imagina que queremos fazer um agrupamento por duas colunas, estacao e clima. Mas também queremos fazer agregações diferentes para vários valores. Por exemplo, queremos calcular a soma para contagem, a média da temperatura, a média da sensacao_termica e a média da umidade.

Para isso, criamos uma variável que armazene um dicionário com as funções desejadas para cada coluna:

agregacoes = {
    'contagem': 'sum',
    'temperatura': 'mean',
    'sensacao_termica': 'mean',
    'umidade': 'mean'
}

Feito isso, criamos uma variável para armazenar o resultado de df.groupby(), passando as colunas estacao e clima. Depois, chamamos o método .agg() e passar a variável agregacoes.

df_agregacoes = df.groupby(['estacao', 'clima']).agg(agregacoes)
df_agregacoes
estacaoclimacontagemtemperaturasensacao_termicaumidade
InvernoChuva com trovoadas22810.0000006.50000088.000000
-Chuva leve3409849.0465767.18829683.739650
-Céu limpo9273996.0223363.81106676.006148
-Neve140104.3750001.56818287.829545
-Nublado9340838.7544227.00858578.369927
-Parcialmente nublado13413837.8878735.93309676.405149
OutonoChuva com trovoadas24218.50000018.50000091.000000
-Chuva leve40939212.83044312.22254384.075145
-Céu limpo153360012.23377611.51696274.282448
-Neve5937.4000003.80000091.550000
-Nublado129547913.68941613.33135578.105341
-Parcialmente nublado183373413.46183013.03579973.333926
PrimaveraChuva com trovoadas55899.7857147.78571463.071429
-Chuva leve36876310.1865818.65716980.169118
-Céu limpo200511610.8433229.77597064.142694
-Neve4487.8333335.08333391.250000
-Nublado93427110.5820909.30286173.543532
-Parcialmente nublado153604910.7002349.37041466.598556
VerãoChuva com trovoadas210918.20000018.20000085.500000
-Chuva leve40732217.06555617.06444481.085556
-Céu limpo268073218.93084518.85565361.675906
-Nublado108005417.55871017.54580673.968387
-Parcialmente nublado225439218.71685418.68539364.894757

A tabela resultante contém as quatro estações do ano, os climas para cada estação, além da soma da contagem e a média da temperatura, da sensação térmica e da umidade.

Dica: Podemos melhorar o resultado renomeando as colunas com o método rename() da biblioteca Pandas.

Próximos passos

Revisamos várias funcionalidades do método groupby(). Agora, sabemos como resumir informações e agrupar dados por diferentes colunas.

Depois deste vídeo, haverá exercícios para praticar e reforçar essas habilidades nesse conteúdo. Até mais!

Sobre o curso Python: criando tabulações com groupby

O curso Python: criando tabulações com groupby possui 12 minutos de vídeos, em um total de 13 atividades. Gostou? Conheça nossos outros cursos de Data Science em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Data Science acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas