- O documento discute a combinação entre dados abertos e a linguagem R, apresentando o autor e seu blog sobre análises de dados. Ele também resume as principais funcionalidades da linguagem R e apresenta um caso de estudo sobre análise de dados do Portal da Transparência usando R. Por fim, o documento fornece dicas sobre como aprender R.
Dados Abertos e R: análises do Portal da Transparência
1. e Dados Abertos, uma
combinação perfeita
Sillas Teixeira Gonzaga
Blog Paixão por Dados
2. Sumário
• Sobre mim
• Sobre o blog
• Sobre R
• Case do Portal da Transparência
• Como aprender R
3. Sobre mim
• Aracajuano recém-chegado no Rio de Janeiro
• Engenheiro (porém sem CREA) de Produção pela UFS
• Intercâmbio na Coreia do Sul
• Autor do blog Paixão por Dados (sillasgonzaga.github.io)
4. Sobre o blog
• Análises sobre servidores públicos
federais
• Mapeamento do fluxo migratório
universitário no Brasil
• OLX Shiny
• Pacote mafs sobre previsão de
séries temporais
• Rbloggers-BR: Bot no Twitter
5. Sobre R
• Linguagem de programação gratuita e de código aberto
• Inicialmente voltada para fins estatísticos, teve seu escopo expandido
pelos seus mais de 10 mil pacotes no CRAN.
6. R não é apenas estatística:
https://sillasgonzaga.shinyapps.io/olxshiny2/
7. • Excelente linguagem para todo o pipeline de Analytics
1. Importação de arquivos (readr, readxl, haven, data.table)
2. Limpeza e tratamento de dados (dplyr, data.table, tidyr, stringr)
3. Gráficos (ggplot2, dygraphs, plotly)
4. Interface com bancos de dados (RPostgreSQL, RMySQL, RODBC)
5. Análise preditiva / Data Science (caret, forecast, rpart, e1071, knn,
randomForest)
6. Relatório analítico final (rmarkdown, knitr)
7. Dashboards interativas (shiny, shinydashboard)
9. Etapas:
1. Obter os dados
2. Limpar os dados
3. Definir as questões de análise
4. Análise exploratória e análise dos resultados
5. Divulgar resultados
11. O problema:
• Os arquivos são divididos por mês e não dá para baixar tudo de uma
vez só.
12. A solução:
baixarArquivo <- function(mes, ano, tipo = "C") {
# tipo = C (Civis) ou M (militares)
# mes = 01:12
# ano
link <- paste0(
"http://arquivos.portaldatransparencia.gov.br/downloads.asp?a=",
ano,
"&m=", mes,
"&d=", tipo,
"&consulta=Servidores")
pasta <- paste0("data/", ano, "-", mes, "-", "01")
arquivo <- paste0(pasta, "/arquivo.zip")
download.file(link, arquivo)
unzip(arquivo, exdir = pasta)
}
baixarArquivo("01", 2017)
13. Leitura dos dados
• Os arquivos podem chegar a ter cerca de 380MB com centenas de
milhares de linhas, o que inviabiliza utilizar programas como o Excel.
• Além disso, os datasets de cadastro de servidores e de remuneração
são fornecidos em arquivos diferentes.
15. 2º Passo: limpar os dados
• As IDs dos servidores se repetem?
length(df$Id_SERVIDOR_PORTAL) #Quantidade de IDs de servidores no
arquivo
## [1] 795107
length(unique(df$Id_SERVIDOR_PORTAL)) #Quantidade de IDs únicas
## [1] 681266
16. Definir as questões de análise e análise
exploratória
• Em qual estado é maior a proporção de servidores federais em
relação à população total?
17. Definir as questões de análise e análise
exploratória
• Em qual estado é maior a proporção de servidores federais em
relação à população total?
ggplot(data=df, aes(x=reorder(Estado, Proporcao), y=Proporcao,
fill=REGIAO)) +
geom_bar(stat="identity") + coord_flip() +
labs(title="Proporção de servidores por Estado", x="Estado",
y="Proporção da população n que é funcionário público") +
theme_economist()
18. • Quais órgãos públicos mais “empregam” servidores? E quais pagam
mais?
19. • Quais órgãos públicos mais “empregam” servidores? E quais pagam
mais?
aggSetor <-df %>%
group_by(ORG_LOTACAO) %>%
summarise(quantidade = n(),
salarioMedio = median(SALARIO))
aggSetor$escala <-
scale(aggSetor$salarioMedio) #necessário
para criar valores negativos para deixar as
disparidades mais evidentes
x <- treemap(aggSetor, index =
"ORG_LOTACAO", vSize = "quantidade", vColor
= "escala",type = "value", palette = "-
RdGy", lowerbound.cex.labels = 0.3, title
= "Treemap dos salários dos órgãos
federais brasileiros")
20. • A proporção de cargos comissionados é a mesma nos estados?
21. A proporção de cargos com
• A proporção de cargos comissionados é a mesma nos estados?
treemap(df, index =
c("UF_EXERCICIO",
"SITUACAO_VINCULO"),
vSize = "x")
22. • A quanto tempo os servidores estão no funcionalismo público,
estratificado por UF?
23. • A quanto tempo os servidores estão no funcionalismo público,
estratificado por UF?
ggplot(data=df, aes(x=UF_EXERCICIO,
y=anos.como.servidor, fill=UF_EXERCICIO)) +
geom_boxplot() +
facet_grid(. ~ REGIAO, scales="free") +
scale_y_continuous(breaks=escala) +
labs(title="Tempo médio dos servidores non
funcionalismo público por estado", x="Estado",
y="Tempo como servidor em anos") +
scale_fill_manual(values= coresEstados) +
guides(fill=FALSE) +
geom_hline(aes(yintercept =
median(df$anos.como.servidor, na.rm = TRUE)), color =
"green") +
theme(axis.text.x=element_text(angle=45)) +
theme_bw()
29. • 2 – Livros online:
• R for Data Science, Hadley Wickham
• R Graphics Cookbook , Winston Chang
• ggplot2: Elegant Graphics for Data Analysis, Hadley Wickham