FAPESP - Alavancando a Ciência Brasileira
Quem é a FAPESP?
A FAPESP - Fundação de Amparo à Pesquisa do Estado de São Paulo - é uma das principais agências de fomento à pesquisa científica e tecnológica do país. Com autonomia garantida por lei, a FAPESP está ligada à Secretaria de Desenvolvimento Econômico.
Com um orçamento anual correspondente a 1% do total da receita tributária do Estado, a FAPESP apoia a pesquisa e financia a investigação, o intercâmbio e a divulgação da ciência e da tecnologia produzida em São Paulo.
Para ilustrar a receita e a quantidade de despachos realizados pela FAPESP, foi realizada a raspagem dos dados de 2 tabelas disponíveis no site da FAPESP.
Vamos trabalhar - Pacotes necessários
# Carregando pacotes --------------------------------------------------------------------------
library(tidyverse)
library(httr)
library(xml2)
library(rvest)
# Tirar conotação cientifica ------------------------------------------------------------------
options(scipen = 999)Primeiro passo - Raspando as informações sobre as receitas da FAPESP
No próprio site da FAPESP há uma seção com as estatisticas da instituição. Na seção que detalha as receitas da FAPESP há uma tabela contendo todas as receitas. A tabela abaixo (Figura 1) foi a primeira motivação para a raspagem dos dados.
Para extrair os dados da tabela foi realizada a inspeção do HTML para verificar a forma de requisição. Na aba “rede” nota-se que o primeiro item evolução-das-receitas apresenta bastante requisições e tem um conteudo do tipo HTML. Ainda, ao inspecionar a aba “visualizar” notei que a tabela esta presente neste objeto, me dando indícios que a requisição deste item me permitiria chegar a tabela alvo. A requisição deste item é do tipo GET e o Status deve ser 200.
# GET URL -------------------------------------------------------------------------------------
url_fapesp <- "https://fapesp.br/9250/evolucao-das-receitas"
get_url_fapesp <- httr::GET(url_fapesp)
# verificando status da requisição
get_url_fapesp## Response [https://fapesp.br/9250/evolucao-das-receitas]
## Date: 2022-04-13 12:17
## Status: 200
## Content-Type: application/json
## Size: 69.5 kB
## <!DOCTYPE html>
## <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
## <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
## <!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
## <!--[if gt IE 8]><!-->
## <html class="no-js" lang="pt-BR">
## <!--<![endif]-->
##
## <head>
## <meta charset="utf-8">
## ...
Conforme podemos observar, a requisição foi realizada com sucesso. Em seguida, ainda nas ferramentas de desenvolvedor, mas agora na aba elementos, ao clicar na tabela, identifiquei a tag table (Figure 3) e, investi uma tentativa nela para ver se conseguia extrair a tabela.
Após ler o HTML, busquei a tag table e, utilizando a função html_table do pacote rvest verifiquei que obtive sucesso em acessar a tabela de receitas da FAPESP. Contudo, ainda era necessário organizar a tabela visto que as colunas númerivas vieram como strings.
# Scraping o html --------------------------------------------------------------------------------
tb_fapesp <-
get_url_fapesp |>
read_html() |>
xml_find_all(xpath = "//table") |>
rvest::html_table(header = TRUE)
head(tb_fapesp)## [[1]]
## # A tibble: 61 x 7
## Exercícios Receitas `Transferências do ~ `Outras receita~ `Total da receita ~
## <int> <chr> <chr> <chr> <chr>
## 1 2022 R$ 499.489.652 50.125.824 549.615.476
## 2 2021 R$ 1.693.258.505 91.327.446 1.784.585.951
## 3 2020 R$ 1.405.370.233 35.924.513 1.441.294.746
## 4 2019 R$ 1.350.534.401 102.661.381 1.453.195.782
## 5 2018 R$ 1.179.770.909 190.507.777 1.370.278.686
## 6 2017 R$ 1.111.410.356 227.584.193 1.338.994.548
## 7 2016 R$ 1.057.714.553 245.520.259 1.303.234.812
## 8 2015 R$ 1.045.335.371 105.405.812 1.150.741.183
## 9 2014 R$ 998.745.173 181.061.609 1.179.806.782
## 10 2013 R$ 957.047.596 83.040.285 1.040.087.881
## # ... with 51 more rows, and 2 more variables: ...
Para limpeza da tabela foi utilizada funções para ajustar o nome das variáveis (utilizando o pacotes Janitor), extrair pontos entre os números (pacote Stringr) e conversáo do tipo da variável. Após os ajustes,nota-se que as colunas agora apresentam tipo e nome adequado para análise.
# Arrumando a base de dados
fapesp_arrumada <- tb_fapesp[[1]] |>
janitor::clean_names() |> # arrumando os nomes
mutate( # tirando o ponto dos vetores de caracteres para converter em numeric
transferencias_do_tesouro = as.numeric(str_remove_all(transferencias_do_tesouro,
pattern = "[.]")),
outras_receitas = as.numeric(str_remove_all(outras_receitas,
pattern = "[.]")),
total_da_receita_do_ano = as.numeric(str_remove_all(total_da_receita_do_ano,
pattern = "[.]")),
reversao_de_diferimento_de_receitas_saldos_de_exercicios_anteriores = as.numeric(str_remove_all(reversao_de_diferimento_de_receitas_saldos_de_exercicios_anteriores,
pattern = "[.]")),
total = as.numeric(str_remove_all(total,
pattern = "[.]"))
) |>
dplyr::mutate(
total = total/1000000,
)## Warning in mask$eval_all_mutate(quo): NAs introduzidos por coerção
glimpse(fapesp_arrumada)## Rows: 61
## Columns: 7
## $ exercicios <int> 20~
## $ receitas <chr> "R~
## $ transferencias_do_tesouro <dbl> 49~
## $ outras_receitas <dbl> 50~
## $ total_da_receita_do_ano <dbl> 54~
## $ reversao_de_diferimento_de_receitas_saldos_de_exercicios_anteriores <dbl> NA~
## $ total <dbl> NA~
Segue abaixo documentação tabela obtida:
exercicios = ano da receita;
receitas = moeda no qual a receita foi recebida;
transferencias_do_tesouro = recurso com origem do tesouro;
outras_receitas = valor obtido por meio de outros recursos;
total_da_receita_do_ano = total da receita no ano;
reversao_de_diferimento_de_receitas_saldos_de_exercicios_anteriores = recurso recebido por meio de reversão de diferimento de receitas/saldo de anos anteriores;
total = total da receita no ano;
Por fim, foi criado um .csv da base de dados organizada para utilização futura.
# Criando um .csv ----------------------------------------------------------------------------
fapesp_arrumada |>
filter(exercicios >= 1994 & exercicios < 2022) |>
write_csv(file = "adjusted_data/fapesp_receitas_1994_2021.csv")Segundo passo - Raspando as informações sobre os despachos da FAPESP
Ainda no site da FAPESP, mas agora na página onde se encontra as informações sobre Prazos médios para análise e quantidade de propostas despachadas (2010 a 2019) também há uma tabela (Figura 4). Esta tabela, em particular a parte que detalha todos os despachos, foi a segunda motivação para a raspagem dos dados.
Em seguida, foi realizada a inspeção do HTML para verificar a forma de requisição. Na aba “rede” verifiquei que o primeiro item https://fapesp.br/estatisticas/analise também apresentava um elevado número de requisições e tinha conteúdo do tipo HTML, dando indício que a requisição deste item me daria a tabela alvo. A requisição deste item é do tipo GET e o Status deve ser 200.
# GET URL -------------------------------------------------------------------------------------
url_fapesp_despacho <- "https://fapesp.br/estatisticas/analise"
get_url_fapesp_despacho <- httr::GET(url_fapesp_despacho)
# verificando status da requisição
get_url_fapesp_despacho## Response [https://fapesp.br/estatisticas/analise]
## Date: 2022-04-13 12:17
## Status: 200
## Content-Type: application/json
## Size: 142 kB
## <!DOCTYPE html>
## <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
## <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
## <!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
## <!--[if gt IE 8]><!-->
## <html class="no-js" lang="pt-BR">
## <!--<![endif]-->
##
## <head>
## <meta charset="utf-8">
## ...
Conforme podemos observar, a requisição foi realizada com sucesso, ou seja, status 200. Desta vez, a requisição devolvia um json. Em seguida inspecionei o HMTL e, novamente, busquei a tag table conforme identificado na página (Figure 6) e a tabela anteriormente extraida.
Após checar a tag table utilizando a função html_table do pacote rvest, novamente, obtive sucesso em acessar a tabela que, assim como a outra tabela, também precisa de uma faxina.
# Scraping o html ------------------------------------------------------------------------------
get_url_fapesp_despacho <-
get_url_fapesp_despacho |>
read_html() |>
xml_find_all(xpath = "//table") |>
rvest::html_table(header = TRUE) |>
purrr::pluck(1)
head(get_url_fapesp_despacho)## # A tibble: 6 x 12
## `` `` `2010` `2011` `2012` `2013` `2014` `2015` `2016` `2017` `2018`
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 TODOS~ Quant~ 17.946 18.553 19.551 20.020 20.135 19.171 19.753 19.428 19.594
## 2 TODOS~ Prazo~ 78 69 65 70 66 64 65 72 69
## 3 TODOS~ TODOS~ TODOS ~ TODOS ~ TODOS~ TODOS~ TODOS~ TODOS~ TODOS~ TODOS~ TODOS~
## 4 AUXÍL~ AUXÍL~ AUXÍLI~ AUXÍLI~ AUXÍL~ AUXÍL~ AUXÍL~ AUXÍL~ AUXÍL~ AUXÍL~ AUXÍL~
## 5 Auxíl~ Quant~ 459 497 552 621 642 653 587 643 544
## 6 Auxíl~ Prazo~ 48 42 43 48 50 55 57 62 58
## # ... with 1 more variable: 2019 <chr>
Para limpeza da tabela foi utilizada funções para ajustar o nome das variáveis (utilizando o pacote Janitor), extrair pontos entre os números (utilizando o pacote Stringr), conversáo do tipo da variável e, por fim, uma pivotagem (utilizando o pacote Tidyr). Após os ajustes pode-se observar que as colunas agora apresentam tipo e nome adequado para análise do total de despachos por ano.
# Arrumando a base - TOTAL DE DESPACHOS
total_despachos <-
get_url_fapesp_despacho[1:2,2:12] |>
janitor::clean_names() |>
mutate(
x2010 = as.numeric(x2010),
x2011 = as.numeric(x2011),
x2012 = as.numeric(x2012),
x2013 = as.numeric(x2013),
x2014 = as.numeric(x2014),
x2015 = as.numeric(x2015),
x2016 = as.numeric(x2016),
x2017 = as.numeric(x2017),
x2018 = as.numeric(x2018),
x2019 = as.numeric(x2019)
) |>
pivot_longer(cols = !x,names_to = "Ano",values_to = "Quantidade") |>
mutate(
Ano = as.factor(str_remove_all(string = Ano, pattern = "[x]")),
Quantidade = as.numeric(Quantidade*1000)
) |>
rename(
despachos = x
)
glimpse(total_despachos)## Rows: 20
## Columns: 3
## $ despachos <chr> "Quantidade", "Quantidade", "Quantidade", "Quantidade", "Qu~
## $ Ano <fct> 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,~
## $ Quantidade <dbl> 17946, 18553, 19551, 20020, 20135, 19171, 19753, 19428, 195~
Segue abaixo documentação tabela obtida:
despachos = quantidade ou prazo de despachos por ano;
Ano = Ano referência;
Quantidade = quantidade total ;
Por fim, foi criado um .csv da base de dados organizada para análise.
# Criando um .csv -----------------------------------------------------------------------------
total_despachos |>
write_csv(file = "adjusted_data/fapesp_despachos_2010-2019.csv")Verificando a receita da FAPESP
Como podemos verificar no gráfico abaixo, a FAPESP apresenta uma progressiva receita desde 1994, indicando um progressivo investimento na ciência.
Quantidade e prazo médio (em dias) para despacho de resultados da FAPESP
Com o aumento das receitas anuais é de se esperar que a FAPESP apresente também uma elevada demanda de trabalho para avaliar e responder a pesquisadores do estado de São Paulo fazendo pedidos de financiamento. Realmente, podemos observar uma quantidade elevada de despachos pela FAPESP. Esses despachos acontecem em aproximadamente 70-60 dias após a submissão.
CONSIDERAÇÕES FINAIS
Após realizada a raspagem das informações podemos observar o crescente aumento da receita da FAPESP, mostrando um incentivo do estado na pesquisa cientítica. Cumpre destacar que mesmo nos 2 últimos anos, com as incertezas causadas pela pandemia da COVID-19 e cortes do governo federal, ainda assim houve um aumento da receita. É claro que esses aumentos demonstram um incentivo do estado, mas numa perspectiva de desenvolvimento do país e considerando que o estado de São Paulo tem uma das maiores arrecadações do país, não é nada demais especular maiores investimentos do que os atuais 1% para que possamos, de fato, ALAVANCAR A CIÊNCIA BRASILEIRA QUE CONTA COM PESQUISADORES GENIAIS E RECONHECIDOS MUNDIALMENTE.