2  Produção científica

A produção científica do proponente se compara a produção dos bolsistas de produtividade mais produtivos. Para sustentar tal afirmação, os currículos Lattes dos 239 bolsistas de produtividade da área Economia foram analisados via código do software R (R Core Team, 2018) e pacote getLattes (Souza, 2020), de autoria do proponente. O período de análise foi de 2021 a 2023, respeitando o período de avaliação dos programas de pós-graduação.

Código
library(dplyr)
library(DT)
library(fs)
library(getLattes) 
library(janitor) 
library(lubridate) 
library(purrr) 
library(rio)
library(tibble)
library(tictoc) 
library(tidyr)
library(xml2)
source('utils.R')

3 PQ Economia

Baixado em http://plsql1.cnpq.br/divulg/RESULTADO_PQ_102003.curso.

3.1 Pesquisadores

Código
readr::read_csv2('rawfiles/pq-economia-ids.csv') |>
  janitor::clean_names() |>
  dplyr::mutate(nome = stringr::str_trim(nome)) |>  
  dplyr::select(nome, nivel, instituicao, link, id) -> 
  pq_economia

pq_economia |>
  dplyr::mutate(nome = paste0('<a href="', link, '">', nome, '</a>')) |>
  dplyr::select(- link, -id) |> 
  DT::datatable(caption = 'PQ Economia', rownames = FALSE, filter = 'bottom', extensions = 'Buttons', escape = FALSE, options = list(dom = 'Blfrtip', pageLength = 10)) 

3.2 Artigos por autor

Artigos publicados e aceitos.

Publicação entre 2021 e 2023.

Código
zips_xmls <- fs::dir_ls('curriculos')

purrr::map(zips_xmls, safely(read_xml)) |> 
  purrr::map(pluck, 'result') ->
  curriculos

## dados gerais
purrr::map(curriculos, safely(getDadosGerais)) |>
  purrr::map(pluck, 'result') |>
  dplyr::bind_rows() |>
  dplyr::select(nome_completo, id) ->
  dados_gerais

rio::export(dados_gerais, 'rawfiles/dados-gerais.rds')

## artigos publicados
purrr::map(curriculos, safely(getArtigosPublicados)) |>
  purrr::map(pluck, 'result') |>
  dplyr::bind_rows() ->
  artigos_publicados

artigos_publicados |>
  dplyr::mutate(ano_do_artigo = as.numeric(ano_do_artigo)) |>
  dplyr::filter(ano_do_artigo %in% 2021:2023) ->
  artigos_publicados

rio::export(artigos_publicados, 'rawfiles/artigos-publicados.rds')

## artigos aceitos
purrr::map(curriculos, safely(getArtigosAceitos)) |>
    purrr::map(pluck, 'result') |>
    dplyr::bind_rows() |>
    dplyr::select(id, titulo_do_artigo, ano_do_artigo, doi, titulo_do_periodico_ou_revista, issn) -> 
    artigos_aceitos

artigos_aceitos |>
  dplyr::mutate(ano_do_artigo = as.numeric(ano_do_artigo)) |>
  dplyr::filter(ano_do_artigo %in% 2021:2023) ->
  artigos_aceitos

rio::export(artigos_aceitos, 'rawfiles/artigos-aceitos.rds')

## livros publicados
purrr::map(curriculos, safely(getLivrosPublicados)) |>
  purrr::map(pluck, 'result') |>
  dplyr::bind_rows() ->
  livros_publicados

livros_publicados |>
  dplyr::mutate(ano = as.numeric(ano)) |>
  dplyr::filter(ano %in% 2021:2023) ->
  livros_publicados

rio::export(livros_publicados, 'rawfiles/livros-publicados.rds')
Código
# ------------------------------
# importar qualis 2017 2020

tibble(qualis = c('A1', 'A2', 'A3', 'A4', 'B1', 'B2', 'B3', 'B4', 'C'), 
       pontos = c(100, 80, 60, 40, 25, 15, 10, 5, 0)) -> 
       pontos_qualis

rio::import('rawfiles/Qualis_2017_2020_oficial.csv')  |> 
  tibble::as_tibble() |>
  dplyr::rename(revista = titulo, qualis = estrato) |> 
  dplyr::arrange(revista) |> 
  tratamento_issn(issn) |>
  tratamento_nome_revista(revista) |>
  dplyr::distinct(issn, revista, qualis, .keep_all = TRUE) |>
  dplyr::left_join(pontos_qualis) ->
  qualis

# ------------------------------
#### importar dados de produção científica 

rio::import('rawfiles/dados-gerais.rds') |>
  tibble::as_tibble() ->
  dados_gerais

# ------------------------------
# artigos

rio::import('rawfiles/artigos-publicados.rds') -> artigos_publicados 
rio::import('rawfiles/artigos-aceitos.rds') -> artigos_aceitos

dplyr::bind_rows(artigos_publicados, artigos_aceitos) |>
    dplyr::rename(revista = titulo_do_periodico_ou_revista) |>
    dplyr::rename(titulo = titulo_do_artigo) |>
    dplyr::rename(ano = ano_do_artigo) |>
    tratamento_issn(issn) |>
    tratamento_nome_revista(revista) |>
    dplyr::select(id, titulo, ano, revista, issn) |>
    dplyr::left_join(dados_gerais) ->
    artigos

artigos |>
    dplyr::left_join(qualis |> dplyr::select(issn, qualis, pontos), relationship = "many-to-many") |>
    dplyr::distinct(.keep_all = TRUE) ->
    artigos_qualis

artigos_qualis |> 
  dplyr::group_by(nome_completo) |>
  dplyr::summarise(pontos = sum(pontos, na.rm = T), artigos = n()) |>
  dplyr::arrange(desc(pontos)) |>
  dplyr::full_join(dados_gerais, by = join_by(nome_completo)) -> 
  autor_pontos

artigos_qualis |>
    dplyr::left_join(pontos_qualis) ->
    artigos_qualis

artigos_qualis |>
    dplyr::group_by(nome_completo, qualis) |>
    dplyr::tally() |>
    tidyr::pivot_wider(names_from = qualis, values_from = n) |>
    dplyr::ungroup() ->
    a1

artigos_qualis |>
    dplyr::group_by(nome_completo) |>
    dplyr::summarise(pontos = sum(pontos)) |> 
    dplyr::ungroup() ->
    a2

dplyr::full_join(a1, a2) |>
    dplyr::select(nome_completo, pontos, A1, A2, A3, A4) ->
    autor_qualis

# autor_pontos |>
#   dplyr::left_join(pq_economia |> dplyr::select(id, instituicao, link), by = 'id') |>
#   dplyr::rename(nome = nome_completo) |> 
#   dplyr::mutate(nome = paste0('<a href="', link, '">', nome, '</a>')) |>
#   dplyr::select(nome, instituicao, artigos, pontos_qualis = pontos) |> 
#   DT::datatable(caption = 'PQ Economia - Pontos Qualis', rownames = TRUE, filter = 'bottom', extensions = 'Buttons', escape = FALSE, options = list(dom = 'Blfrtip', pageLength = 10)) 

# ---------
# Scopus e WoS

# scopus
readr::read_delim('rawfiles/scimagojr_2019.csv', delim = ',') |>
  janitor::clean_names() |>
  dplyr::filter(type == 'journal') |>
  dplyr::select(sourceid, title, issn, sjr) |>
  tidyr::separate_rows(issn, sep = ',') |>
  dplyr::mutate(issn = stringr::str_trim(issn)) |>
  dplyr::distinct(issn, .keep_all = TRUE) |>
  dplyr::select(issn) |> 
  dplyr::mutate(scopus = 1) -> 
  scopus

# WoS
readr::read_delim('rawfiles/JournalHomeGrid.csv', delim = ',') |>
  tibble::as_tibble() |>
  janitor::clean_names() |>
  dplyr::rename(revista = full_journal_title) |> 
  tratamento_nome_revista(revista) |>
  dplyr::distinct(revista, .keep_all = TRUE) |>
  dplyr::mutate(wos = 1) |>
  dplyr::select(revista, wos) ->
  wos

artigos |>
  dplyr::left_join(scopus) |>
  dplyr::mutate(scopus = ifelse(is.na(scopus), 0, 1)) |>
  dplyr::left_join(wos) |>
  dplyr::mutate(wos = ifelse(is.na(wos), 0, 1)) ->
  artigos_indexados

artigos_indexados |>
  dplyr::select(nome_completo, scopus) |>
  dplyr::group_by(nome_completo) |>
  dplyr::summarise(scopus = sum(scopus)) ->
  autor_scopus

artigos_indexados |>
  dplyr::select(nome_completo, wos) |>
  dplyr::group_by(nome_completo) |>
  dplyr::summarise(wos = sum(wos)) ->
  autor_wos 

artigos |> 
    dplyr::distinct(nome_completo, titulo, .keep_all = TRUE) |> 
    dplyr::group_by(nome_completo) |>
    dplyr::summarise(total = n()) ->
    autor_total

autor_scopus |> 
    dplyr::full_join(autor_wos, by = join_by(nome_completo)) |>
    dplyr::full_join(autor_qualis, by = join_by(nome_completo)) |>
    dplyr::full_join(autor_total, by = join_by(nome_completo)) |>
    dplyr::full_join(dados_gerais, by = join_by(nome_completo)) |> 
    dplyr::mutate(As = A1 + A2 + A3 + A4) |>
    dplyr::select(nome_completo, total, wos, scopus, As, id) ->
    artigos_final

artigos_final |>
  dplyr::select(- total) |> 
  dplyr::left_join(autor_pontos, by = join_by(nome_completo, id)) |>
  dplyr::left_join(pq_economia |> dplyr::select(id, link), by = 'id') |>
  dplyr::rename(nome = nome_completo, WoS = wos, Scopus = scopus, A1aA4 = As, pontos_qualis = pontos) |> 
  dplyr::mutate(nome = paste0('<a href="', link, '">', nome, '</a>')) |>
  dplyr::select(- link, - id) |> 
  dplyr::relocate(artigos, .after = nome) |> 
  dplyr::arrange(dplyr::desc(artigos)) |> 
  DT::datatable(caption = 'PQ Economia - Artigos - WoS, Scopus, Qualis', rownames = TRUE, filter = 'bottom', extensions = 'Buttons', escape = FALSE, options = list(dom = 'Blfrtip', pageLength = 5)) 

3.3 Artigos por percentil

Código
artigos_final |>
  dplyr::full_join(pq_economia, by = 'id') |>
  dplyr::filter(!is.na(nome)) |>
  dplyr::mutate(total = ifelse(is.na(total), 0, total)) |> 
  dplyr::mutate(wos = ifelse(is.na(wos), 0, wos)) |> 
  dplyr::mutate(scopus = ifelse(is.na(scopus), 0, scopus)) |> 
  dplyr::mutate(As = ifelse(is.na(As), 0, As)) -> 
  df

print('Artigos Publicados - Quantidade')
[1] "Artigos Publicados - Quantidade"
Código
round(quantile(df$total, probs = seq(0, 1, 1/10)), 1)
  0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
 0.0  2.8  4.0  5.0  7.0  8.0 11.0 13.0 16.0 19.0 40.0 
Código
print('Artigos Publicados - Web of Science')
[1] "Artigos Publicados - Web of Science"
Código
round(quantile(df$wos, probs = seq(0, 1, 1/10)), 1)
  0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
   0    0    1    2    2    2    3    4    5    8   31 
Código
print('Artigos Publicados - Scopus')
[1] "Artigos Publicados - Scopus"
Código
round(quantile(df$scopus, probs = seq(0, 1, 1/10)), 1)
  0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
   0    0    1    2    2    3    4    5    7   10   32 
Código
print('Artigos Publicados - Qualis A')
[1] "Artigos Publicados - Qualis A"
Código
round(quantile(df$As, probs = seq(0, 1, 1/10)), 1)
  0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  7.4 11.2 37.0 

3.4 Livros por autor

  • 13 autores publicaram mais de 1 livro.
Código
rio::import('rawfiles/livros-publicados.rds') |>
  tibble::as_tibble() |>
  dplyr::group_by(id) |>
  dplyr::distinct(.keep_all = TRUE) |>
  dplyr::count(sort = T, name = 'livros') |>
  dplyr::ungroup() |>
  dplyr::full_join(pq_economia, by = 'id') |>
  dplyr::filter(!is.na(nome)) |>
  dplyr::mutate(livros = ifelse(is.na(livros), 0, livros)) ->
  livros

livros |>
  dplyr::mutate(nome = paste0('<a href="', link, '">', nome, '</a>')) |>
  dplyr::select(nome, livros) |>
  DT::datatable(caption = 'PQ Economia - Livros', rownames = TRUE, filter = 'bottom', extensions = 'Buttons', escape = FALSE, options = list(dom = 'Blfrtip', pageLength = 10)) 

3.5 Livros por percentil

Código
rio::import('rawfiles/livros-publicados.rds') |>
  tibble::as_tibble() |>
  dplyr::group_by(id) |>
  dplyr::distinct(.keep_all = TRUE) |>
  dplyr::count(sort = T, name = 'livros') |>
  dplyr::ungroup() |>
  dplyr::full_join(pq_economia, by = 'id') |>
  dplyr::filter(!is.na(nome)) |>
  dplyr::mutate(livros = ifelse(is.na(livros), 0, livros)) -> 
  livros 

print('Livros Publicados - Quantidade')
[1] "Livros Publicados - Quantidade"
Código
round(quantile(livros$livros, probs = seq(0, 1, 1/10)), 1)
  0%  10%  20%  30%  40%  50%  60%  70%  80%  90% 100% 
   0    0    0    0    0    0    0    0    0    1    3 

4 Proponente

Baixado em http://plsql1.cnpq.br/divulg/RESULTADO_PQ_102003.curso.

4.1 Artigos

Artigos publicados e aceitos.

Publicação entre 2021 e 2023.

Código
zips_xmls <- fs::dir_ls('curriculo-proponente')

purrr::map(zips_xmls, safely(read_xml)) |> 
  purrr::map(pluck, 'result') ->
  curriculos

## dados gerais
purrr::map(curriculos, safely(getDadosGerais)) |>
  purrr::map(pluck, 'result') |>
  dplyr::bind_rows() |>
  dplyr::select(nome_completo, id) ->
  dados_gerais

## artigos publicados
purrr::map(curriculos, safely(getArtigosPublicados)) |>
  purrr::map(pluck, 'result') |>
  dplyr::bind_rows() ->
  artigos_publicados

artigos_publicados |>
  dplyr::mutate(ano_do_artigo = as.numeric(ano_do_artigo)) |>
  dplyr::filter(ano_do_artigo %in% 2021:2023) ->
  artigos_publicados

## artigos aceitos
purrr::map(curriculos, safely(getArtigosAceitos)) |>
    purrr::map(pluck, 'result') |>
    dplyr::bind_rows() |>
    dplyr::select(id, titulo_do_artigo, ano_do_artigo, doi, titulo_do_periodico_ou_revista, issn) -> 
    artigos_aceitos

artigos_aceitos |>
  dplyr::mutate(ano_do_artigo = as.numeric(ano_do_artigo)) |>
  dplyr::filter(ano_do_artigo %in% 2021:2023) ->
  artigos_aceitos

## livros publicados
purrr::map(curriculos, safely(getLivrosPublicados)) |>
  purrr::map(pluck, 'result') |>
  dplyr::bind_rows() ->
  livros_publicados

livros_publicados |>
  dplyr::mutate(ano = as.numeric(ano)) |>
  dplyr::filter(ano %in% 2021:2023) ->
  livros_publicados
Código
# ------------------------------
# importar qualis 2017 2020

tibble(qualis = c('A1', 'A2', 'A3', 'A4', 'B1', 'B2', 'B3', 'B4', 'C'), 
       pontos = c(100, 80, 60, 40, 25, 15, 10, 5, 0)) -> 
       pontos_qualis

rio::import('rawfiles/Qualis_2017_2020_oficial.csv')  |> 
  tibble::as_tibble() |>
  dplyr::rename(revista = titulo, qualis = estrato) |> 
  dplyr::arrange(revista) |> 
  tratamento_issn(issn) |>
  tratamento_nome_revista(revista) |>
  dplyr::distinct(issn, revista, qualis, .keep_all = TRUE) |>
  dplyr::left_join(pontos_qualis) ->
  qualis

# ------------------------------
# artigos

dplyr::bind_rows(artigos_publicados, artigos_aceitos) |>
    dplyr::rename(revista = titulo_do_periodico_ou_revista) |>
    dplyr::rename(titulo = titulo_do_artigo) |>
    dplyr::rename(ano = ano_do_artigo) |>
    tratamento_issn(issn) |>
    tratamento_nome_revista(revista) |>
    dplyr::select(id, titulo, ano, revista, issn) |>
    dplyr::left_join(dados_gerais) ->
    artigos

artigos |>
    dplyr::left_join(qualis |> dplyr::select(issn, qualis, pontos), relationship = "many-to-many") |>
    dplyr::distinct(.keep_all = TRUE) ->
    artigos_qualis

artigos_qualis |> 
  dplyr::group_by(nome_completo) |>
  dplyr::summarise(pontos = sum(pontos, na.rm = T), artigos = n()) |>
  dplyr::arrange(desc(pontos)) |>
  dplyr::full_join(dados_gerais, by = join_by(nome_completo)) -> 
  autor_pontos

artigos_qualis |>
    dplyr::left_join(pontos_qualis) ->
    artigos_qualis

artigos_qualis |>
    dplyr::group_by(nome_completo, qualis) |>
    dplyr::tally() |>
    tidyr::pivot_wider(names_from = qualis, values_from = n) |>
    dplyr::ungroup() ->
    a1

artigos_qualis |>
    dplyr::group_by(nome_completo) |>
    dplyr::summarise(pontos = sum(pontos)) |> 
    dplyr::ungroup() ->
    a2

dplyr::full_join(a1, a2) |>
    dplyr::select(nome_completo, pontos, A1, A2, A3, A4) ->
    autor_qualis

# ---------
# Scopus e WoS

# scopus
readr::read_delim('rawfiles/scimagojr_2019.csv', delim = ',') |>
  janitor::clean_names() |>
  dplyr::filter(type == 'journal') |>
  dplyr::select(sourceid, title, issn, sjr) |>
  tidyr::separate_rows(issn, sep = ',') |>
  dplyr::mutate(issn = stringr::str_trim(issn)) |>
  dplyr::distinct(issn, .keep_all = TRUE) |>
  dplyr::select(issn) |> 
  dplyr::mutate(scopus = 1) -> 
  scopus

# WoS
readr::read_delim('rawfiles/JournalHomeGrid.csv', delim = ',') |>
  tibble::as_tibble() |>
  janitor::clean_names() |>
  dplyr::rename(revista = full_journal_title) |> 
  tratamento_nome_revista(revista) |>
  dplyr::distinct(revista, .keep_all = TRUE) |>
  dplyr::mutate(wos = 1) |>
  dplyr::select(revista, wos) ->
  wos

artigos |>
  dplyr::left_join(scopus) |>
  dplyr::mutate(scopus = ifelse(is.na(scopus), 0, 1)) |>
  dplyr::left_join(wos) |>
  dplyr::mutate(wos = ifelse(is.na(wos), 0, 1)) ->
  artigos_indexados

artigos_indexados |>
  dplyr::select(nome_completo, scopus) |>
  dplyr::group_by(nome_completo) |>
  dplyr::summarise(scopus = sum(scopus)) ->
  autor_scopus

artigos_indexados |>
  dplyr::select(nome_completo, wos) |>
  dplyr::group_by(nome_completo) |>
  dplyr::summarise(wos = sum(wos)) ->
  autor_wos 

artigos |> 
    dplyr::distinct(nome_completo, titulo, .keep_all = TRUE) |> 
    dplyr::group_by(nome_completo) |>
    dplyr::summarise(total = n()) ->
    autor_total

autor_scopus |> 
    dplyr::full_join(autor_wos, by = join_by(nome_completo)) |>
    dplyr::full_join(autor_qualis, by = join_by(nome_completo)) |>
    dplyr::full_join(autor_total, by = join_by(nome_completo)) |>
    dplyr::full_join(dados_gerais, by = join_by(nome_completo)) |> 
    dplyr::mutate(As = A1 + A2 + A3 + A4) |>
    dplyr::select(nome_completo, total, wos, scopus, As, id) ->
    artigos_final

artigos_final |>
  dplyr::select(- total) |> 
  dplyr::left_join(autor_pontos, by = join_by(nome_completo, id)) |>
  dplyr::mutate(link = 'http://lattes.cnpq.br/6380212729787758') |> 
  dplyr::rename(nome = nome_completo, WoS = wos, Scopus = scopus, A1aA4 = As, pontos_qualis = pontos) |> 
  dplyr::mutate(nome = paste0('<a href="', link, '">', nome, '</a>')) |>
  dplyr::select(- link, - id) |> 
  dplyr::relocate(artigos, .after = nome) |> 
  dplyr::arrange(dplyr::desc(artigos)) |> 
  DT::datatable(caption = 'Proponente - Artigos - WoS, Scopus, Qualis', rownames = TRUE, filter = 'bottom', extensions = 'Buttons', escape = FALSE, options = list(dom = 'Blfrtip', pageLength = 5)) 
Código
dplyr::bind_rows(artigos_publicados, artigos_aceitos) |>
  dplyr::rename(revista = titulo_do_periodico_ou_revista) |>
  dplyr::rename(titulo = titulo_do_artigo) |>
  dplyr::rename(ano = ano_do_artigo) |>
  tratamento_issn(issn) |>
  tratamento_nome_revista(revista) |>
  dplyr::select(titulo, ano, doi) |>
  dplyr::mutate(link = paste('http://dx.doi.org/', doi)) |>
  dplyr::mutate(titulo = paste0('<a href="', link, '">', titulo, '</a>')) |>
  dplyr::select(titulo, ano) |> 
  dplyr::arrange(dplyr::desc(ano)) |> 
  DT::datatable(caption = 'Proponente - Artigos', rownames = TRUE, filter = 'bottom', extensions = 'Buttons', escape = FALSE, options = list(dom = 'Blfrtip', pageLength = 12)) 

4.2 Livros

Código
livros_publicados |>
  dplyr::left_join(dados_gerais |> dplyr::rename(nome = nome_completo), by = join_by(id)) |>
  dplyr::mutate(link = 'http://lattes.cnpq.br/6380212729787758') |> 
  dplyr::mutate(nome = paste0('<a href="', link, '">', nome, '</a>')) |>
  dplyr::select(nome, ano, titulo_do_livro) |>
  dplyr::mutate(titulo_do_livro = paste0('<a href="', 'https://doi.org/10.5281/zenodo.10009165', '">', titulo_do_livro, '</a>')) |>
  DT::datatable(caption = 'PQ Economia - Livros', rownames = TRUE, filter = 'bottom', extensions = 'Buttons', escape = FALSE, options = list(dom = 'Blfrtip', pageLength = 10))