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.