library(rvest)
link <- "https://pt.wikipedia.org/wiki/Lista_de_munic%C3%ADpios_de_Goi%C3%A1s"
page <- read_html(link)
tabelawikipedia <- html_element(page, "table.sortable") %>%
html_table()
municipiosdegoias <- tabelawikipedia$`Município[7][8]`Indicadores 20A Municipais 2020
Realização dos cálculos para o indicador 20A para cada município do estado de Goiás
Lendo os Dados do FINBRA
A Tabela contendo esses dados foi retirada do site do Sincofi e o pacote readxl foi utilizado para ler o conjunto de dados.
Foram atribuidos os filtros para download da tabela
Exercíco: 2020
Escopo: Municípios
Tabela: Despesas por Função (Anexo I-E)
Pegando os nomes de todas as cidades de Goiás
Foi feito um web-scrapping de uma pagina da wikipédia referente a Lista de Municípios de Goiás.
O pacote rvest(Wickham 2024) foi necessário para fazer a raspagem dos dados.
O pacote dplyr também foi utilizado
Verificando quais municipios o conjunto de dados nao contempla
Primeiro, organizamos a coluna Instituição da tabela de dados Dsp2020 para deixar apenas os nomes dos municípios, o pacote stringr (Wickham 2023) foi necessário.
Após, foi feito um comparativo de quais cidades da Lista da Wikipédia não estão contempladas pelo conjunto de dados Dsp2020 filtrado pelos níveis requisitados na coluna Conta, e foi retornado as cidades faltantes.
Tive que tirar São Miguel do Passa-Quatro do vetor “quaisnaoestao” (na posição 10) pois já tem informações desse municipio em Dsp2020.
library(stringr)
munic <- unique(Dsp2020$Instituição)
munic <- str_replace(munic,"Prefeitura Municipal de ",'')
munic <- str_replace(munic," - GO",'')
quaisnaoestao <- setdiff(municipiosdegoias,munic)
quaisnaoestao <- quaisnaoestao[-10]Baixando os dados dos Municipios Faltantes
Depois de Baixar os dados dos municipios faltantes, dados baixados do Portal do Cidadão, compactei a pasta onde coloquei as tabelas e usei funções do pacote purrr (Wickham e Henry 2023) para ler toda essa pasta de uma vez, como uma lista de tabelas (cada elemento da lista é uma tabela referente a uma das cidades faltantes)
Baixei uma por uma as tabelas das despesas das cidades faltantes, não consegui fazer o web scrapping no site
nomes <- list.files(path="C:/Users/05681371166/Desktop/indicador 20A/8288349/despesas/cidades/",full.names = T)
lista_arquivos <- nomes %>%
purrr::map(readxl::read_excel)
nomes <- quaisnaoestao
names(lista_arquivos) <- nomesOrganizando o Conjunto de Dados
Aqui, eu substitui os valores da coluna Instituição pelos valores da variável “Cidades”, e agrupei as linhas pelo nome das Cidades, somando os valores da coluna “Valor” (que eram os valores referentes as despesas educacionais).
library(stringr)
Cidades <- Dsp2020$Instituição
Cidades <- str_replace(Cidades,"Prefeitura Municipal de ",'')
Cidades <- str_replace(Cidades," - GO",'')
Dsp2020$Instituição <- Cidades
Dsp2020 <- Dsp2020[,c(1,11)]Filtrando o ano de 2020 e as Unidades Orcamentarias e Juntando os Dados
Aqui, peguei aquela lista de tabelas (informações das cidades faltantes em Dsp2020), filtrei de todas as tabelas, as linhas onde a coluna “[ano].[ano]” valia “2020”, e destas, procurei dentro das colunas “[unidade_orcamentaria].[unidade_orcamentaria]” as palavras “EDUC” ,“FUNDEB” e “FUNDEF”, pois para cada tabela dentro da lista de tabelas, os valores referentes as despesas educacionais estavam dispostos por diferentes nomes de unidades orçamentárias.
Após realizar a filtragem, o agoritmo acrescenta uma linha no conjunto de dados Dsp2020, pegando o nome daquela cidade e a soma da coluna “[Measures].[valor]”, e ao final, temos as Despesas Municipais referentes ao ano de 2020 para quase todas as cidades de Goias.
Os pacotes tibble (Müller e Wickham 2023)e DT (Xie, Cheng, e Tan 2024) foram utilizados.
Instituição <- nomes
n <- nrow(Dsp2020)
for(j in 1:length(lista_arquivos)){
dados2020 <- lista_arquivos[[j]][lista_arquivos[[j]][,1]== "2020",]
atomic <- logical(nrow(dados2020))
for(i in 1:nrow(dados2020)){
atomic[i] <- as.logical(str_detect(as.character(dados2020[i,3]), "FUNDEB|EDUC|FUNDEF"))
}
n <- n + 1
Dsp2020[n,] <- tibble::tibble(Instituição[j],sum(dados2020[atomic,]$`[Measures].[valor]`))
}
rm(list = setdiff(ls(), c("Dsp2020")))
Dsp2020 |>
DT::datatable(options=list(pageLength=5))Lendo o PIB dos Municipios
Aqui, baixei do site do IBGE uma tabela referente ao PIB de cada Município do estado de Goiás, extraí as colunas “Ano”, “Nome do Município”, e as colunas referentes aos valores do PIB, e as linhas onde Ano era 2020.
Após, ordenamos em ordem alfabética a coluna Instituição de Dsp2020, e criamos um NovoDataFrame que juntava as colunas e linhas extraidas da tabela do IBGE referente ao PIB,Nome do Municipio e Ano, e a tabela de dados Dsp2020. Daí, verifiquei se as colunas referentes aos nomes dos municipios estavam iguais, e criei uma ultima coluna que calculava o indicador 20A para cada município.
Ao final, removi as colunas desnecessárias e deixei apenas a coluna com os nomes dos municípios e o indicador 20A.
O pacote plyr (Wickham 2011) foi utilizado
PIBMunicipios <- PIBMunicipios[PIBMunicipios[,"Ano"]==2020,]
PIBMunicipios <- PIBMunicipios[PIBMunicipios[,"Sigla da Unidade da Federação"]=="GO",]
PIBMunicipios <- as.data.frame(PIBMunicipios)
Dsp2020 <- plyr::arrange(Dsp2020,Instituição)
PIBMunicipios <- plyr::arrange(PIBMunicipios,`Nome do Município`)
#Dsp2020$Instituição == PIBMunicipios$`Nome do Município`
#Deu tudo TRUE
I20A <- cbind(Dsp2020,PIBMunicipios[,c(8,39)])
Indicador <- I20A[,2]/(I20A[,4]*1000)
I20A <- cbind(I20A,round(Indicador*100,3))
I20A <- I20A[,c(1,5)]
names(I20A) <- c("Nome do Municipio","Indicador 20 A")
rm(list = setdiff(ls(), c("I20A")))
I20A |>
DT::datatable(options=list(pageLength=10))