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.
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.
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_hora | contagem | temperatura | sensacao_termica | umidade | velocidade_vento | clima | feriado | fim_de_semana | estacao |
---|---|---|---|---|---|---|---|---|---|---|
0 | 2015-01-04 00:00:00 | 182 | 3.00 | 2.00 | 93.0 | 6.0 | Nublado | Não | Sim | Inverno |
1 | 2015-01-04 01:00:00 | 138 | 2.75 | 2.25 | 93.0 | 5.0 | Céu limpo | Não | Sim | Inverno |
2 | 2015-01-04 02:00:00 | 134 | 2.50 | 2.50 | 96.5 | 0.0 | Céu limpo | Não | Sim | Inverno |
3 | 2015-01-04 03:00:00 | 72 | 2.00 | 2.00 | 100.0 | 0.0 | Céu limpo | Não | Sim | Inverno |
4 | 2015-01-04 04:00:00 | 47 | 2.00 | 2.00 | 93.0 | 6.5 | Céu limpo | Não | Sim | Inverno |
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.
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
clima | count | mean | std | min | 25% | 50% | 75% | max |
---|---|---|---|---|---|---|---|---|
Chuva com trovoadas | 14.0 | 583.428571 | 283.001689 | 150.0 | 302.00 | 620.5 | 765.00 | 1040.0 |
Chuva leve | 2141.0 | 712.966371 | 764.879409 | 0.0 | 150.00 | 471.0 | 981.00 | 6585.0 |
Céu limpo | 6150.0 | 1162.088943 | 1187.218019 | 10.0 | 196.00 | 745.0 | 1767.00 | 7860.0 |
Neve | 60.0 | 250.850000 | 470.588878 | 15.0 | 38.25 | 88.0 | 192.00 | 2894.0 |
Nublado | 3551.0 | 1195.124472 | 1014.745557 | 12.0 | 430.00 | 964.0 | 1673.50 | 5033.0 |
Parcialmente nublado | 5498.0 | 1266.925791 | 1076.500198 | 14.0 | 373.00 | 1050.5 | 1805.75 | 7531.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.
Além disso, podemos aplicar funções de agregação específicas para fazer essa agregação, como:
count()
para contagem;sum()
para soma;mean()
para média;median()
para median;min()
para valor mínimo;max()
para valor máximo;std()
para desvio padrão;var()
para variância.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
clima | contagem |
---|---|
Chuva com trovoadas | 8168 |
Chuva leve | 1528869 |
Céu limpo | 7153545 |
Neve | 15051 |
Nublado | 4246904 |
Parcialmente nublado | 6974570 |
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
clima | contagem |
---|---|
Céu limpo | 7146847 |
Parcialmente nublado | 6965558 |
Nublado | 4243887 |
Chuva leve | 1526461 |
Neve | 15051 |
Chuva com trovoadas | 8168 |
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.
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
clima | sum | mean | min | max |
---|---|---|---|---|
Chuva com trovoadas | 8168 | 583.428571 | 150 | 1040 |
Chuva leve | 1526461 | 712.966371 | 0 | 6585 |
Céu limpo | 7146847 | 1162.088943 | 10 | 7860 |
Neve | 15051 | 250.850000 | 15 | 2894 |
Nublado | 4243887 | 1195.124472 | 12 | 5033 |
Parcialmente nublado | 6965558 | 1266.925791 | 14 | 7531 |
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
estacao | clima | contagem |
---|---|---|
Inverno | Chuva com trovoadas | 228.000000 |
- | Chuva leve | 542.968153 |
- | Céu limpo | 760.163115 |
- | Neve | 318.409091 |
- | Nublado | 971.990635 |
- | Parcialmente nublado | 908.796070 |
Outono | Chuva com trovoadas | 242.000000 |
- | Chuva leve | 788.809249 |
- | Céu limpo | 1130.973451 |
- | Neve | 59.300000 |
- | Nublado | 1281.383778 |
- | Parcialmente nublado | 1304.220484 |
Primavera | Chuva com trovoadas | 798.428571 |
- | Chuva leve | 677.873162 |
- | Céu limpo | 1144.472603 |
- | Neve | 74.666667 |
- | Nublado | 1162.028607 |
- | Parcialmente nublado | 1199.101483 |
Verão | Chuva com trovoadas | 421.800000 |
- | Chuva leve | 905.160000 |
- | Céu limpo | 1471.312843 |
- | Nublado | 1393.618065 |
- | Parcialmente nublado | 1688.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/clima | Chuva com trovoadas | Chuva leve | Céu limpo | Neve | Nublado | Parcialmente nublado |
---|---|---|---|---|---|---|
Inverno | 228.000000 | 542.968153 | 760.163115 | 318.409091 | 971.990635 | 908.796070 |
Outono | 242.000000 | 788.809249 | 1130.973451 | 59.300000 | 1281.383778 | 1304.220484 |
Primavera | 798.428571 | 677.873162 | 1144.472603 | 74.666667 | 1162.028607 | 1199.101483 |
Verão | 421.800000 | 905.160000 | 1471.312843 | NaN | 1393.618065 | 1688.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.
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
estacao | clima | contagem | temperatura | sensacao_termica | umidade |
---|---|---|---|---|---|
Inverno | Chuva com trovoadas | 228 | 10.000000 | 6.500000 | 88.000000 |
- | Chuva leve | 340984 | 9.046576 | 7.188296 | 83.739650 |
- | Céu limpo | 927399 | 6.022336 | 3.811066 | 76.006148 |
- | Neve | 14010 | 4.375000 | 1.568182 | 87.829545 |
- | Nublado | 934083 | 8.754422 | 7.008585 | 78.369927 |
- | Parcialmente nublado | 1341383 | 7.887873 | 5.933096 | 76.405149 |
Outono | Chuva com trovoadas | 242 | 18.500000 | 18.500000 | 91.000000 |
- | Chuva leve | 409392 | 12.830443 | 12.222543 | 84.075145 |
- | Céu limpo | 1533600 | 12.233776 | 11.516962 | 74.282448 |
- | Neve | 593 | 7.400000 | 3.800000 | 91.550000 |
- | Nublado | 1295479 | 13.689416 | 13.331355 | 78.105341 |
- | Parcialmente nublado | 1833734 | 13.461830 | 13.035799 | 73.333926 |
Primavera | Chuva com trovoadas | 5589 | 9.785714 | 7.785714 | 63.071429 |
- | Chuva leve | 368763 | 10.186581 | 8.657169 | 80.169118 |
- | Céu limpo | 2005116 | 10.843322 | 9.775970 | 64.142694 |
- | Neve | 448 | 7.833333 | 5.083333 | 91.250000 |
- | Nublado | 934271 | 10.582090 | 9.302861 | 73.543532 |
- | Parcialmente nublado | 1536049 | 10.700234 | 9.370414 | 66.598556 |
Verão | Chuva com trovoadas | 2109 | 18.200000 | 18.200000 | 85.500000 |
- | Chuva leve | 407322 | 17.065556 | 17.064444 | 81.085556 |
- | Céu limpo | 2680732 | 18.930845 | 18.855653 | 61.675906 |
- | Nublado | 1080054 | 17.558710 | 17.545806 | 73.968387 |
- | Parcialmente nublado | 2254392 | 18.716854 | 18.685393 | 64.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.
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!
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:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.