SlideShare a Scribd company logo
1 of 33
e Dados Abertos, uma
combinação perfeita
Sillas Teixeira Gonzaga
Blog Paixão por Dados
Sumário
• Sobre mim
• Sobre o blog
• Sobre R
• Case do Portal da Transparência
• Como aprender R
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)
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
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.
R não é apenas estatística:
https://sillasgonzaga.shinyapps.io/olxshiny2/
• 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)
Caso de estudo: Portal da Transparência
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
1º passo: obter os dados
O problema:
• Os arquivos são divididos por mês e não dá para baixar tudo de uma
vez só.
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)
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.
A solução
library(data.table)
df_cadastro <- fread("data/2017-01-01/20170131_Cadastro.csv")
df_remuneracao <- fread("data/2017-01-01/20170131_Remuneracao.csv")
setkey(df_cadastro, "ID_SERVIDOR_PORTAL")
setkey(df_remuneracao, "ID_SERVIDOR_PORTAL")
df <- merge(df_cadastro, df_remuneracao, all.x = TRUE)
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
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?
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()
• Quais órgãos públicos mais “empregam” servidores? E quais pagam
mais?
• 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")
• A proporção de cargos comissionados é a mesma nos estados?
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")
• A quanto tempo os servidores estão no funcionalismo público,
estratificado por UF?
• 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()
5º passo: divulgação dos resultados
• knitr + rmarkdown
Bônus: Crie seu blog!
https://github.com/daattali/beautiful-jekyll
Como aprender R?
• Etapa 0
Como aprender R?
• Etapa 0
• 1 – Cursos online
• 2 – Livros online:
• R for Data Science, Hadley Wickham
• R Graphics Cookbook , Winston Chang
• ggplot2: Elegant Graphics for Data Analysis, Hadley Wickham
• 3 – Documentação e sites de pacotes
• ?dplyr::group_by
• http://rmarkdown.rstudio.com/
• http://shiny.rstudio.com/
• http://ggplot2.org/
• https://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html
• ...
• 4 – Blogs
• http://rbloggers.com/
• http://twitter.com/rbloggersbr
• https://github.com/sillasgonzaga/referencias-R/blob/master/README.md
• 5 – Pratique!
Muito obrigado!

More Related Content

Viewers also liked

Building brands through social e commerce
Building brands through social e commerce Building brands through social e commerce
Building brands through social e commerce eTailing India
 
Brics nations call for ease of e commerce facilitation
Brics nations call for ease of e commerce facilitationBrics nations call for ease of e commerce facilitation
Brics nations call for ease of e commerce facilitationeTailing India
 
Import membersv2
Import membersv2Import membersv2
Import membersv2maxford1979
 
Presentation purpose (1)
Presentation purpose (1)Presentation purpose (1)
Presentation purpose (1)Tammy Carter
 
تفاعلات البروتينات اثناء تصنيع الاغذية
تفاعلات البروتينات اثناء تصنيع الاغذيةتفاعلات البروتينات اثناء تصنيع الاغذية
تفاعلات البروتينات اثناء تصنيع الاغذيةMohamed Hassanien
 

Viewers also liked (8)

Equipment
EquipmentEquipment
Equipment
 
Building brands through social e commerce
Building brands through social e commerce Building brands through social e commerce
Building brands through social e commerce
 
Modelosatomicos
ModelosatomicosModelosatomicos
Modelosatomicos
 
Brics nations call for ease of e commerce facilitation
Brics nations call for ease of e commerce facilitationBrics nations call for ease of e commerce facilitation
Brics nations call for ease of e commerce facilitation
 
Import membersv2
Import membersv2Import membersv2
Import membersv2
 
Presentation purpose (1)
Presentation purpose (1)Presentation purpose (1)
Presentation purpose (1)
 
Optical fibres
Optical fibresOptical fibres
Optical fibres
 
تفاعلات البروتينات اثناء تصنيع الاغذية
تفاعلات البروتينات اثناء تصنيع الاغذيةتفاعلات البروتينات اثناء تصنيع الاغذية
تفاعلات البروتينات اثناء تصنيع الاغذية
 

Similar to Dados Abertos e R: análises do Portal da Transparência

Big data para programadores convencionais
Big data para programadores convencionaisBig data para programadores convencionais
Big data para programadores convencionaisRoberto Oliveira
 
Web Data Mining com R: pré-processamento de dados [no R]
Web Data Mining com R: pré-processamento de dados [no R]Web Data Mining com R: pré-processamento de dados [no R]
Web Data Mining com R: pré-processamento de dados [no R]Fabrício Barth
 
TDC2017 - Misturando dados com Pentaho para insights mais significativos
TDC2017 - Misturando dados com Pentaho para insights mais significativosTDC2017 - Misturando dados com Pentaho para insights mais significativos
TDC2017 - Misturando dados com Pentaho para insights mais significativosAmbiente Livre
 
R: a alternativa ao SPSS e ao NVivo em software livre
R: a alternativa ao SPSS e ao NVivo em software livreR: a alternativa ao SPSS e ao NVivo em software livre
R: a alternativa ao SPSS e ao NVivo em software livreLuis Borges Gouveia
 
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SWPLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SWInstituto Federal de Sergipe
 
Pré-processamento [no R] e Análise Exploratória - Curso de Big Data
Pré-processamento [no R] e Análise Exploratória - Curso de Big DataPré-processamento [no R] e Análise Exploratória - Curso de Big Data
Pré-processamento [no R] e Análise Exploratória - Curso de Big DataFabrício Barth
 
Introdução a Ciência de Dados
Introdução a Ciência de DadosIntrodução a Ciência de Dados
Introdução a Ciência de DadosNauber Gois
 
Worskshop Grafos Comexport
Worskshop Grafos ComexportWorskshop Grafos Comexport
Worskshop Grafos ComexportErick Araújo
 
Algoritmos e Técnicas de Programação - Aula 06
Algoritmos e Técnicas de Programação - Aula 06Algoritmos e Técnicas de Programação - Aula 06
Algoritmos e Técnicas de Programação - Aula 06thomasdacosta
 
Mercado De Trabalho Curitibano
Mercado De Trabalho CuritibanoMercado De Trabalho Curitibano
Mercado De Trabalho Curitibanoricardophp
 
Visão Geral De Desenvolvimento Web Sre 2012
Visão Geral De Desenvolvimento Web   Sre 2012Visão Geral De Desenvolvimento Web   Sre 2012
Visão Geral De Desenvolvimento Web Sre 2012Carlos Casalicchio
 
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE  para produtos da Lacertae SWPLANO DE PROJETO DE SOFTWARE  para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SWMatheus Costa
 
Sobre o workshop "Raspagem de dados para mulheres"
Sobre o workshop "Raspagem de dados para mulheres"Sobre o workshop "Raspagem de dados para mulheres"
Sobre o workshop "Raspagem de dados para mulheres"Patricia Minamizawa
 
Desenvolvimento Web com Java Script Full Stack
Desenvolvimento Web com Java Script Full StackDesenvolvimento Web com Java Script Full Stack
Desenvolvimento Web com Java Script Full StackErick Petrucelli
 
Repositório Social de Serviços Web
Repositório Social de Serviços WebRepositório Social de Serviços Web
Repositório Social de Serviços WebHenrique Dias
 

Similar to Dados Abertos e R: análises do Portal da Transparência (20)

SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python
 
Dataprev
DataprevDataprev
Dataprev
 
Big data para programadores convencionais
Big data para programadores convencionaisBig data para programadores convencionais
Big data para programadores convencionais
 
Google BigQuery
Google BigQueryGoogle BigQuery
Google BigQuery
 
Web Data Mining com R: pré-processamento de dados [no R]
Web Data Mining com R: pré-processamento de dados [no R]Web Data Mining com R: pré-processamento de dados [no R]
Web Data Mining com R: pré-processamento de dados [no R]
 
TDC2017 - Misturando dados com Pentaho para insights mais significativos
TDC2017 - Misturando dados com Pentaho para insights mais significativosTDC2017 - Misturando dados com Pentaho para insights mais significativos
TDC2017 - Misturando dados com Pentaho para insights mais significativos
 
R: a alternativa ao SPSS e ao NVivo em software livre
R: a alternativa ao SPSS e ao NVivo em software livreR: a alternativa ao SPSS e ao NVivo em software livre
R: a alternativa ao SPSS e ao NVivo em software livre
 
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SWPLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
 
Pré-processamento [no R] e Análise Exploratória - Curso de Big Data
Pré-processamento [no R] e Análise Exploratória - Curso de Big DataPré-processamento [no R] e Análise Exploratória - Curso de Big Data
Pré-processamento [no R] e Análise Exploratória - Curso de Big Data
 
Introdução a Ciência de Dados
Introdução a Ciência de DadosIntrodução a Ciência de Dados
Introdução a Ciência de Dados
 
Data science
Data scienceData science
Data science
 
Worskshop Grafos Comexport
Worskshop Grafos ComexportWorskshop Grafos Comexport
Worskshop Grafos Comexport
 
Algoritmos e Técnicas de Programação - Aula 06
Algoritmos e Técnicas de Programação - Aula 06Algoritmos e Técnicas de Programação - Aula 06
Algoritmos e Técnicas de Programação - Aula 06
 
Mercado De Trabalho Curitibano
Mercado De Trabalho CuritibanoMercado De Trabalho Curitibano
Mercado De Trabalho Curitibano
 
Visão Geral De Desenvolvimento Web Sre 2012
Visão Geral De Desenvolvimento Web   Sre 2012Visão Geral De Desenvolvimento Web   Sre 2012
Visão Geral De Desenvolvimento Web Sre 2012
 
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE  para produtos da Lacertae SWPLANO DE PROJETO DE SOFTWARE  para produtos da Lacertae SW
PLANO DE PROJETO DE SOFTWARE para produtos da Lacertae SW
 
R para Iniciantes
R para IniciantesR para Iniciantes
R para Iniciantes
 
Sobre o workshop "Raspagem de dados para mulheres"
Sobre o workshop "Raspagem de dados para mulheres"Sobre o workshop "Raspagem de dados para mulheres"
Sobre o workshop "Raspagem de dados para mulheres"
 
Desenvolvimento Web com Java Script Full Stack
Desenvolvimento Web com Java Script Full StackDesenvolvimento Web com Java Script Full Stack
Desenvolvimento Web com Java Script Full Stack
 
Repositório Social de Serviços Web
Repositório Social de Serviços WebRepositório Social de Serviços Web
Repositório Social de Serviços Web
 

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)
  • 8. Caso de estudo: Portal da Transparência
  • 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
  • 10. 1º passo: obter os dados
  • 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.
  • 14. A solução library(data.table) df_cadastro <- fread("data/2017-01-01/20170131_Cadastro.csv") df_remuneracao <- fread("data/2017-01-01/20170131_Remuneracao.csv") setkey(df_cadastro, "ID_SERVIDOR_PORTAL") setkey(df_remuneracao, "ID_SERVIDOR_PORTAL") df <- merge(df_cadastro, df_remuneracao, all.x = TRUE)
  • 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()
  • 24. 5º passo: divulgação dos resultados • knitr + rmarkdown
  • 25. Bônus: Crie seu blog! https://github.com/daattali/beautiful-jekyll
  • 28. • 1 – Cursos online
  • 29. • 2 – Livros online: • R for Data Science, Hadley Wickham • R Graphics Cookbook , Winston Chang • ggplot2: Elegant Graphics for Data Analysis, Hadley Wickham
  • 30. • 3 – Documentação e sites de pacotes • ?dplyr::group_by • http://rmarkdown.rstudio.com/ • http://shiny.rstudio.com/ • http://ggplot2.org/ • https://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html • ...
  • 31. • 4 – Blogs • http://rbloggers.com/ • http://twitter.com/rbloggersbr • https://github.com/sillasgonzaga/referencias-R/blob/master/README.md
  • 32. • 5 – Pratique!