Módulo 1 | Aula 2
Introdução à Linguagem de Programação
Agrupamento de dados
Agrupamento de dados é o processo de agrupar informações baseadas em uma ou mais categorias. Isso permite que você resuma as observações e obtenha insights de maneira mais clara. Basicamente, você pega os dados de várias linhas ou colunas e realiza operações matemáticas ou estatísticas, como somar, contar ou calcular a média, para transformar um grande volume de informações em um resumo mais simples e fácil de interpretar.
Por exemplo, ao agrupar os dados de atendimentos de diferentes meses nos anos de 2017 a 2024, podemos calcular a soma total de atendimentos por ano ou a média de atendimentos por município. Dessa forma, conseguimos identificar padrões e tendências sem precisar analisar cada detalhe individualmente.
No R, os dois principais argumentos usados para realizar a agregação de dados no pacote {dplyr} são group_by() e summarise().
- Com group_by(), agrupamos os dados de acordo com uma ou mais colunas, ou seja, criamos "subgrupos" baseados nos valores dessas colunas.
- Em seguida, utilizamos summarise(), escolhemos o nome da nova coluna que será criada e aplicamos uma operação matemática ou estatística (como soma, média etc.), referenciando a coluna sobre a qual queremos fazer o cálculo.
Sintaxe
# Estrutura básica para agrupar e sumarizar dados
dados %>%
group_by(nome_da_variável_de_agrupamento) %>%
summarize(
nova_variável = função()
)
Por exemplo, se quisermos calcular a soma de uma coluna de "atendimentos" para cada "município" e "ano", primeiro agrupamos as observações por essas categorias com group_by() e, em seguida, usamos summarise() para realizar a soma.
Exemplo de aplicação
# Agregando dados por ano e município
dados_agregados <- dados %>%
group_by(ano, município) %>%
summarize(atendimentos_totais = sum(atendimentos))
Com este código, a gente transforma a tabela de entrada na tabela de saída representadas adiante.
| ENTRADA: Tabela de Atendimentos por Município (Antes da agregação) | |||
|---|---|---|---|
| ano | mes | municipio | atendimentos |
| 2017 | Jan | Salvador | 300 |
| 2017 | Fev | Salvador | 280 |
| 2017 | Jan | Feira de Santana | 150 |
| 2017 | Fev | Feira de Santana | 160 |
| 2018 | Jan | Salvador | 310 |
| 2018 | Fev | Salvador | 290 |
| SAÍDA: Tabela após agregação (Exemplo de soma por município e ano) | ||
|---|---|---|
| ano | municipio | atendimentos_totais |
| 2017 | Salvador | 580 |
| 2017 | Feira de Santana | 310 |
| 2018 | Salvador | 600 |
Prática com o banco de dados: agrupando o número de óbitos por mês
No código a seguir estamos utilizando o dplyr para agrupar o número de óbitos por mês, a partir de uma coluna de data (dt_DTOBITO). Veja como o código funciona:
Na Prática!
Comando:
Saída:
Para agrupar os óbitos por mês, primeiro usamos a função month() (do pacote lubridate) para extrair o mês da data de óbito e criar a variável mes_obito. Em seguida, aplicamos group_by() para reunir todas as linhas pertencentes ao mesmo mês.
Dentro de summarise(), calculamos duas estatísticas importantes:
- total_obitos = n(), que conta quantas ocorrências há em cada mês;
- idade_media = mean(idade_anos, na.rm = TRUE), que calcula a idade média dos óbitos naquele mês.
O resultado final é uma tabela com:
- mes_obito – mês do óbito
- total_obitos – número total de óbitos,
- idade_media – idade média para cada mês.
Para praticar, você pode usar a famosa biblioteca iris. Ela é amplamente utilizada para treinos e estudos, pois é simples e bem documentada. Além disso, muitas pessoas usam o iris para exemplos. Então, se você enfrentar algum problema, há grandes chances de encontrar soluções em fóruns e na documentação disponível online. Para instalar você já sabe, mas não custa lembrar: use a função: install.packages("iris") e depois ative o pacote quando for usar: library(iris).
Acesse este link para ver a documentação.
Junções (joins)
Ao trabalhar com dados, é muito comum nos depararmos com a necessidade de combinar dois ou mais dataframes. Felizmente, o pacote {dplyr} nos oferece uma série de funções, chamadas de joins, que permitem realizar essa tarefa com facilidade. Cada tipo de join tem um nome e um comportamento específicos, e escolher o certo depende do resultado que você deseja obter.
- Left Join: retorna todas as linhas da tabela à esquerda e as correspondências da tabela à direita. Se não houver correspondência, os resultados da tabela à direita serão nulos. Comando: left_join()
- Inner Join: retorna apenas as linhas que têm correspondência em ambas as tabelas envolvidas. Comando: inner_join()
- Right Join: retorna todas as linhas da tabela à direita e as correspondências da tabela à esquerda. Se não houver correspondência, os resultados da tabela à esquerda serão nulos. Comando: right_join()
- Full join: retorna todas as linhas quando há uma correspondência em uma das tabelas. Inclui todas as linhas da tabela à esquerda e da tabela à direita, preenchendo com nulos quando não houver correspondência. Comando: full_join()
- Anti Join: retorna as linhas da tabela à esquerda que não têm correspondência na tabela à direita. Comando: anti_join()
- Semi Join: rretorna as linhas da tabela à esquerda que têm pelo menos uma correspondência na tabela à direita, mas sem retornar dados da tabela à direita. Comando: semi_join()
A ideia central dos joins é simples: a junção entre dois Dataframes só pode ocorrer se eles tiverem colunas com observações em comum, que atuem como chave para conectar as informações de um Dataframe ao outro.
Suponha que temos dois Dataframes: o primeiro contém a soma total de atendimentos por município, e o segundo possui o código IBGE de cada um deles. Para combinar essas tabelas corretamente, precisamos de uma coluna que funcione como uma chave de ligação. No Brasil, o código IBGE é o identificador único de cada município, o que garante que possamos distinguir cidades com nomes iguais.
Por exemplo, podemos ter dois municípios chamados “São João”, mas cada um terá um código IBGE distinto. Isso nos permite unir as informações de forma precisa, sem confundir os dados de municípios com o mesmo nome.
Para unir as tabelas usando o código IBGE como chave, em R (com o pacote dplyr).
Sintaxe
# Estrutura básica para juntar tabelas com left_join
tabela_unida <- tabela_esquerda %>%
left_join(populacao, by = "nome_da_coluna_chave")
Exemplo de aplicação
# Juntando as tabelas de atendimentos e população
tabela_unida <- atendimentos_totais %>%
left_join(populacao, by = "codigo_ibge")
| Tabela 1: Atendimentos Totais | ||
|---|---|---|
| codigo_ibge | municipio | atendimentos_totais |
| 2910800 | Salvador | 5000 |
| 2927408 | Feira de Santana | 1200 |
| 2905701 | Camaçari | 800 |
| Tabela 2: População | |
|---|---|
| codigo_ibge | populacao |
| 2910800 | 2886698 |
| 2927408 | 619609 |
| 2905701 | 304732 |
A tabela final ficará assim:
| codigo_ibge | municipio | atendimentos_totais | populacao |
|---|---|---|---|
| 2910800 | Salvador | 5000 | 2886698 |
| 2927408 | Feira de Santana | 1200 | 619609 |
| 2905701 | Camaçari | 800 | 304732 |