R e dados abertos, uma perfeita combinação

33
e Dados Abertos, uma combinação perfeita Sillas Teixeira Gonzaga Blog Paixão por Dados

Transcript of R e dados abertos, uma perfeita combinação

Page 1: R e dados abertos, uma perfeita combinação

e Dados Abertos, uma combinação perfeita

Sillas Teixeira GonzagaBlog Paixão por Dados

Page 2: R e dados abertos, uma perfeita combinação

Sumário• Sobre mim• Sobre o blog• Sobre R• Case do Portal da Transparência• Como aprender R

Page 3: R e dados abertos, uma perfeita combinação

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)

Page 4: R e dados abertos, uma perfeita combinação

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

Page 5: R e dados abertos, uma perfeita combinação

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.

Page 6: R e dados abertos, uma perfeita combinação

R não é apenas estatística:

https://sillasgonzaga.shinyapps.io/olxshiny2/

Page 7: R e dados abertos, uma perfeita combinação

• Excelente linguagem para todo o pipeline de Analytics1. 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)

Page 8: R e dados abertos, uma perfeita combinação

Caso de estudo: Portal da Transparência

Page 9: R e dados abertos, uma perfeita combinação

Etapas:1. Obter os dados2. Limpar os dados3. Definir as questões de análise4. Análise exploratória e análise dos resultados5. Divulgar resultados

Page 10: R e dados abertos, uma perfeita combinação

1º passo: obter os dados

Page 11: R e dados abertos, uma perfeita combinação

O problema:

• Os arquivos são divididos por mês e não dá para baixar tudo de uma vez só.

Page 12: R e dados abertos, uma perfeita combinação

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)

Page 13: R e dados abertos, uma perfeita combinação

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.

Page 14: R e dados abertos, uma perfeita combinação

A soluçãolibrary(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)

Page 15: R e dados abertos, uma perfeita combinação

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

Page 16: R e dados abertos, uma perfeita combinação

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?

Page 17: R e dados abertos, uma perfeita combinação

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()

Page 18: R e dados abertos, uma perfeita combinação

• Quais órgãos públicos mais “empregam” servidores? E quais pagam mais?

Page 19: R e dados abertos, uma perfeita combinação

• 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")

Page 20: R e dados abertos, uma perfeita combinação

• A proporção de cargos comissionados é a mesma nos estados?

Page 21: R e dados abertos, uma perfeita combinação

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")

Page 22: R e dados abertos, uma perfeita combinação

• A quanto tempo os servidores estão no funcionalismo público, estratificado por UF?

Page 23: R e dados abertos, uma perfeita combinação

• 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 no\n 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()

Page 24: R e dados abertos, uma perfeita combinação

5º passo: divulgação dos resultados

• knitr + rmarkdown

Page 25: R e dados abertos, uma perfeita combinação

Bônus: Crie seu blog!

https://github.com/daattali/beautiful-jekyll

Page 26: R e dados abertos, uma perfeita combinação

Como aprender R?• Etapa 0

Page 27: R e dados abertos, uma perfeita combinação

Como aprender R?• Etapa 0

Page 28: R e dados abertos, uma perfeita combinação

• 1 – Cursos online

Page 29: R e dados abertos, uma perfeita combinação

• 2 – Livros online:• R for Data Science, Hadley Wickham• R Graphics Cookbook , Winston Chang• ggplot2: Elegant Graphics for Data Analysis, Hadley Wickham

Page 30: R e dados abertos, uma perfeita combinação

• 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• ...

Page 31: R e dados abertos, uma perfeita combinação

• 4 – Blogs• http://rbloggers.com/• http://twitter.com/rbloggersbr• https://github.com/sillasgonzaga/referencias-R/blob/master/README.md

Page 32: R e dados abertos, uma perfeita combinação

• 5 – Pratique!

Page 33: R e dados abertos, uma perfeita combinação

Muito obrigado!