Aula 7 - Manipulando dados com dplyr
Last updated
Last updated
Aula 7 - Manipulando dados com dplyr
Aprender as operações básicas de tratamento de dados com o pacote dplyr, parte da coleção tidyverse.
Esse primeiro vídeo é um material introdutório que foi preparado para uma formação de alunos do projeto InfoSoc/UEL. Mas serve como uma visão geral sobre a importância do pacote {tidyverse}
Formato básico dos dados: Tidy data (Tabelas Retangulares) - Watch Video
Os dois vídeos seguintes tratam da base de dados dos Indicadores Sociais do Atlas Brasil IPEA,PNUD, FJP.
Importar dados do excel e ver sumário descritivo com {summarytools} - Watch Video
Tratamento de dados de indicadores sociais com {dplyr} - Watch Video
Manipulando dados com dplyr
# --------------------------
# ---------
# Primeiro vídeo # -------------
# 1. Importar os dados
library(tidyverse)
library(readxl)
munic_tbl <- read_excel("dados/Atlas 2013_municipal, estadual e Brasil.xlsx",
sheet = "MUN 91-00-10")
View(munic_tbl)
# 2. Inspeção inicial para identificar valores mínimos, média e máximos
# valores ausentes (na) e o formato da distribuição de frequência dos dados
@install.packages("summarytools")
library(summarytools)
view(dfSummary(munic_tbl))
# ---------
# Segundo vídeo # -------------
# Criar uma variável com o município por
# classe de tamanho de população
# classe de tamanho da população Total IBGE
#
# Até 5.000
# 5.001 a 20.000
# 20.001 a 100.000
# 100.001 a 500.000
# Mais de 500.000
# Classificação ONU para IDH e IDHM
# Muito baixo: 0 a 0,499.
# Baixo: 0,500 a 0,599.
# Médio: 0,600 a 0,699.
# Alto: 0,700 a 0,799.
# Muito alto: 0,800 a 1.
# Taxa de Urbanização
#Script de tratamento dos dados
library(tidyverse)
munic_tbl |>
select(ANO, UF, Codmun7, Município, IDHM, IDHM_E, IDHM_L, IDHM_R, POP, pesotot, pesourb, pesoRUR) %>%
mutate(classe_pop = case_when(
(POP < 5001) ~ "1) Até 5.000",
(POP > 5000 & POP < 20001) ~ "2) 5.001 a 20.000",
(POP > 20000 & POP < 100001) ~ "3) 20.001 a 100.000",
(POP > 100000 & POP < 500001) ~ "4) 100.001 a 500.000",
(POP > 500000) ~ "5) Mais de 500.000",
)) |>
mutate(classe_idhm = case_when(
(IDHM < 0.5) ~ "Muito baixo",
(IDHM >= 0.5 & IDHM < 0.6) ~ "Baixo",
(IDHM >= 0.6 & IDHM < 0.7) ~ "Médio",
(IDHM >= 0.7 & IDHM < 0.8) ~ "Alto",
(IDHM >= 0.8) ~ "Muito Alto",
)) |>
mutate(taxa_urbanizacao = (pesourb / pesotot) * 100) |>
mutate(urbano_rural = case_when(
(taxa_urbanizacao >= 50) ~ "Urbano",
(taxa_urbanizacao < 50) ~ "Rural")) -> m2_munic
m2_munic |>
group_by(ANO,urbano_rural) |>
summarise(media = mean(IDHM),total_de_municipios = n())
m2_munic |>
group_by(ANO,classe_pop) |>
summarise(media = mean(IDHM),total_de_municipios = n())
De todas as etapas que envolvem operações computacionais, certamente o tratamento de dados é a fase que mais consome tempo. Qualquer que seja a área, os dados raramente estarão prontos para a análise. Um bom tempo deverá ser dedicado para organizá-los de modo a que se possa extrair de uma coleção de informações algum tipo de conhecimento propriamente.
De modo geral, chama-se de tratamento de dados todas as etapas de planejamento (ou desenho) da estrutura de dados, a importação, limpeza, formatação e adequação, o tratamento dos casos faltantes, a ordenação, extração, combinação e manipulação das variáveis para análise.
Todas essas etapas podem ser feitas com o R somente ou em combinação com algum software especializado em gerenciamento de banco de dados.
O R básico possui um formato de linguagem compacto, para agilizar a digitação durante as consultas interativas. Mas, se esse tipo de notação favorece a rapidez na obtenção de respostas pelo console do computador, por outro lado, dificulta a documentação dos scripts mais longos, como normalmente se faz em pesquisa com dados sociais.
O código compacto também não é muito intuitivo. Várias funções e símbolos inseridos em uma única linha não é uma representação clara das etapas da análise. Pensando nisso, a ideia que deu origem ao pacote {dplyr}, segundo seu autor - Hadley Wickham*, procurou aproximar as funções do R da estratégia mais comumente usada por quem faz análise de dados: "dividir-calcular-combinar".
Essa estratégia de dividir e conquistar, concentra os passos para análise de dados em três conjuntos básicos de operações:
seleção dos casos e variáveis a serem estudadas em um conjunto de dados
aplicação de funções para cálculo de resultado para cada grupo selecionado
combinação dos resultados para a análise propriamente do material
O pacote {dplyr} foi criado exatamente para realizar essas operações de forma direta, tanto para quem escreve, quanto para quem lê os scripts. O termo dplyr significa algo como d, uma referência a dados e “plyr”, que soa em inglês como plier (“pláier”), que quer dizer "alicate" em tradução para o português. Ou seja, um “alicate” para manipular os dados. Faz também alusão a um conjunto de funções muito usadas no R básico para esse mesmo tipo de procedimento: apply(), sapply(), lapplay(). As funções do pacote {dplyr} necessariamente não substituem as funções apply(), do R básico, mas permitem que as operações fundamentais de tratamento de dados com o R sejam feitas de forma bem mais intuitiva.
O pacote dplyr possui funções específicas para realização de cada uma das etapas da análise de dados.
Para a escolha dos casos que serão analisados, utiliza-se a função filter()
A seleção e variáveis a serem estudadas é feita com a função select()
Pode-se reordenar os casos com a função arrange()
Para criar novas variáveis calculadas a partir das variáveis existentes ou de condições relacionadas aos casos selecionados, existe a função mutate()
Para apresentar resultados agregados, ou seja, para se extrair informações combinando a seleção de casos e variáveis, utiliza-se a função summarize()
O R básico possui uma função para apresentar um resumo dos dados, chamada de summary(). A função summarize() do pacote dplyr vai além, permite a construção de resultados conforme o objetivo de análise da pesquisa.
A função summarize() torna-se ainda mais versátil quando aplicada em conjunto com a função group_by(), que permite agrupar os casos para análise comparativa.
Todas essas funções podem ser conectadas em sequência com o conector (pipe) %>% do pacote {magritr}, que é instalado juntamente com o pacote {dplyr} ou com {tidyverse}.
O pacote dplyr possui várias outras funções que auxiliam o tratamento de dados. Algumas que podemos destacar:
rename() - permite renomear as variáveis
na.omit() - excluir os casos com valores omissos (no R são identificados como na)
count() - conta as categorias em uma variável
add_row() - adiciona casos (linhas) à sua base de dados
add_column() - adiciona variáveis (colunas) à sua base de dados
Há várias outras funções que podem ser utilizadas, conforme se pode observar na folha de referência sobre as funções do pacote {dplyr}: clique aqui para ver
Comparação entre Dplyr, R básico e SQL (Structured Query Language). O SQL que será utilizado no curso posterior sobre Construção de Indicadores Sociais com o R. Mas, para adiantar, segue uma visão inicial comparativa.
Selecionando casos e variáveis com o R básico, SQL e dplyr - Watch Video
Reproduz o script apresentado na videoaula
Importe a planilha do Atlas Brasil com os indicadores municipais
Crie uma visão descritiva dos dados com o pacote {summarytools}
Utilize o pacote {dplyr}, que faz parte do pacote {tidyverse] e selecione as seguintes variáveis ANO, UF, Codmun7, Município, IDHM, IDHM_E, IDHM_L, IDHM_R, POP, pesotot, pesourb, pesoRUR
Crie quatro novas variáveis na base sobre indicadores municipais:
classe de tamanho de população, conforme definição do IBGE
classe de IDHM, conforme definição do PNUD
taxa de urbanização
identificação de município rural ou urbano
Verifique se o IDHM médio varia entre 1991, 2000 e 2010 por identificação de município rural e urbano
Verifique se o IDHM médio varia entre 1991, 2000 e 2010 por classe de tamanho de população
Verifique se o IDHM Educação médio varia entre 1991, 2000 e 2010 por identificação de município rural e urbano
Verifique se o IDHM Educação médio varia entre 1991, 2000 e 2010 por classe de tamanho de população
Verifique se o IDHM Renda médio varia entre 1991, 2000 e 2010 por identificação de município rural e urbano
Verifique se o IDHM Renda médio varia entre 1991, 2000 e 2010 por classe de tamanho de população
Verifique se o IDHM Longevidade médio varia entre 1991, 2000 e 2010 por identificação de município rural e urbano
Verifique se o IDHM Longevidade médio varia entre 1991, 2000 e 2010 por classe de tamanho de população
Salve o seu script no diretório de projetos em uma pasta específica para os scripts.
Nesse curso introdutório, vamos dar ênfase às funções do pacote {tidyverse}, em especial ao pacote de manipulação e tratamento de dados {dplyr}. Mas, para quem quiser se aprofundar, vamos mostrar as funções do Tidyverse e a correspondência com o R básico. Esse conteúdo não é necessário para fazer as atividades propostas.
Na tabela a seguir, há uma comparação das funções do dplyr e do R básico, sendo que df significa um data.frame (a base de dados que se está analisando, por exemplo o Atlas Brasil). As letras x, y, z referem-se a variáveis na base de dados.
Por exemplo, usando dplyr para ordenar os dados que estão em uma base de dados, denominada de atlas_2013 (seria o df na tabela abaixo), pelo valor crescente da variável IDHM (seria o x na tabela abaixo), utiliza-se o seguinte código com o dplyr:
arrange(atlas_2013, IDHM)
No R básico, a função equivalente seria:
atlas_2013[order(IDHM), ,drop = FALSE]
dplyr
R básico
arrange(df, x)
df[order(x), , drop = FALSE]
distinct(df, x)
filter(df, x)
mutate(df, z = x + y)
pull(df, 1)
df[[1]]
pull(df, x)
df$x
rename(df, y = x)
names(df)[names(df) == "x"] <- "y"
relocate(df, y)
df[union("y", names(df))]
select(df, x, y)
select(df, starts_with("x")
df[grepl(names(df), "^x")]
summarise(df, mean(x))
slice(df, c(1, 2, 5))
df[c(1, 2, 5), , drop = FALSE]
Fonte: https://dplyr.tidyverse.org/articles/base.html
Este conteúdo digital é parte do curso online "Introdução aos Indicadores Sociais com o software R", de autoria do Prof. Ronaldo Baltar e da Prof.ª Cláudia Siqueira Baltar, como atividade do Projeto de extensão "Indicadores sociais como subsídio para o monitoramento e avaliação das ações dos municípios paranaenses em direção à Agenda 2030", vinculado ao ObPPP (Observatório de Populações e Políticas Públicas) e ao InfoSoc (Informática aplicada à Pesquisa Social), ambos projetos do Dept.º C. Soc. - CLCH/UEL.
df[!duplicated(x), , drop = FALSE],
df[which(x), , drop = FALSE],
df$z <- df$x + df$y,
df[c("x", "y")],
mean(df$x), , ,