Скачиваем датасет RIRO с Zenodo

riro zenodo r zen4R

Рассмотрены несколько способов загрузки последней версии датасета RIRO с репозитория Zenodo. Примеры кода приведены на языке R.

true , true
07-26-2021

Все версии датасета RIRO (Российского индекса научных организаций) публикуются в репозитории RIRO на платформе Zenodo. Набор таблиц можно скачать с Zenodo вручную или программными средствами, используя OAI-PMH Harvesting API или REST API.

Ниже показаны различные способы скачивания последней версии датасета RIRO с помощью кода на языке R. Последний способ скачивания подойдет для всех пользователей, в том числе и для тех, кто не использует языки программирования.

Открываем сессию в R, загружаем настройки и пакеты.

Show code
library(dplyr)
library(readr)
library(tidyr)
library(purrr)
library(DT)

onedrive <- list.dirs("C:/Users", recursive = FALSE) %>% 
  .[grepl("alexe|WD|lutay",.)] %>% list.dirs(., recursive = FALSE) %>% 
  .[grepl("onedrive",., ignore.case = TRUE)]

options(DT.options = list(pageLength = 6, dom = "Brtip",  
  deferRender = TRUE, ordering = TRUE, autoWidth = TRUE, scrollX = TRUE,
  language = list(
    url = 'https://cdn.datatables.net/plug-ins/1.10.11/i18n/Russian.json')))

Создаем директорию для хранения файлов RIRO.

Show code
riro_dir <- "D://RIRO_tables/"
if(!dir.exists(riro_dir)){dir.create(riro_dir)}

Способ 1. Пакет Zen4R

Show code
require("remotes")
remotes::install_github("eblondel/zen4R")
Show code
onedrive <- list.dirs("C:/Users", recursive = FALSE) %>% 
  .[grepl("alexe|WD|lutay",.)] %>% list.dirs(., recursive = FALSE) %>% 
  .[grepl("onedrive",., ignore.case = TRUE)]
your_zenodo_token <- read_file(paste0(onedrive, "/zenodo.txt"))

Осталось загрузить библиотеку zen4R, запросить последнюю версию DOI для ConceptID 4775290, получить список файлов и сохранить в приготовленную директорию.

Show code
library(zen4R)

# initialize a session
zenodo <- ZenodoManager$new(token = your_zenodo_token,  logger = "INFO")

# request the Concept ID (more info -> https://help.zenodo.org/#versioning)
# 4775290 is a concept ID common for all versions of RIRO - do not change it 
my_rec <- zenodo$getDepositionByConceptId("4775290")
last_doi <- my_rec$getLastDOI()
my_rec <- zenodo$getDepositionByDOI(last_doi)

# get the list of files with names and URLs
files <- my_rec$files %>% map_df(~.x %>% flatten()) %>% 
  select(filename, filesize, download)

# download it
walk2(files$download, paste0(riro_dir, files$filename), 
      ~download.file(url =.x, destfile = .y))

# At https://help.zenodo.org/#versioning Zenodo says that:
# Currently the Concept DOI resolves to the landing page of the latest version of your record. 
# This is not fully correct, and in the future we will change this to create a landing page 
# specifically representing the concept behind the record and all of its versions.
# so one day we may have to retrieve the latest DOI my_rec$getLastDOI() or smth else
Show code
list.files(riro_dir)
 [1] "v.1.1.1_table1_basic.csv"       "v.1.1.1_table10_monitoring.csv"
 [3] "v.1.1.1_table11_wos_names.csv"  "v.1.1.1_table12_elibrary.csv"  
 [5] "v.1.1.1_table2_geo.csv"         "v.1.1.1_table3_hierarchy.csv"  
 [7] "v.1.1.1_table4_ror.csv"         "v.1.1.1_table5_wiki.csv"       
 [9] "v.1.1.1_table6_scopus.csv"      "v.1.1.1_table7_mag.csv"        
[11] "v.1.1.1_table8_incites.csv"     "v.1.1.1_table9_scival.csv"     

Для тех, кто хотел бы избежать установки новых пакетов и регистрации, подойдет более прямолинейный способ.

Способ 2. Парсим сайт Zenodo

Show code
library(rvest)
library(stringr)

zenodo_links <- read_html("https://doi.org/10.5281/zenodo.4775290", 
                          encoding = "UTF-8") %>%  
  html_nodes(".btn-default") %>% html_attr("href") %>% 
  .[grepl("table", .)&grepl("csv", .)] %>% 
  paste0("https://zenodo.org", .)
  
files <-  data.frame(download = zenodo_links) %>% 
  mutate(filename = stringr::str_extract(download, "v\\..+?\\.csv"))

# download it
if(length(list.files(riro_dir))!=12){
  walk2(files$download, paste0(riro_dir, files$filename), 
        ~download.file(url =.x, destfile = .y))
}

files %>% write_excel_csv(paste0(onedrive, "/OpenRIROblog/latest_riro_links.csv"))

Способ 3. Файл с прямыми URL-ссылками

CSV-файл с прямыми ссылками на таблицы последней версии хранится в корневой папке сайта с именем latest_riro_links.csv. Код для скачивания файлов с помощью R такой же, как выше.

Show code
read_csv("https://openriro.github.io/latest_riro_links.csv") %>% 
  mutate(download = paste0('<a href=\"',download,'\" target=\"_blank\">',download,'</a>')) %>% 
  datatable(rownames = FALSE, escape = FALSE,
            options = list(pageLength = 6, deferRender = FALSE,
                           dom = "Brtip",  autoWidth = FALSE))

Обращаем Ваше внимание, что в таблице выше ссылки приведены в качестве примера для того, чтобы показать содержимое файла csv.

Acknowledgments

Allaire J, Xie Y, McPherson J, Luraschi J, Ushey K, Atkins A, Wickham H, Cheng J, Chang W, Iannone R (2021). rmarkdown: Dynamic Documents for R. R package version 2.7, <URL: https://github.com/rstudio/rmarkdown>.

Blondel E (2021). zen4R: Interface to ‘Zenodo’ REST API. R package version 0.4-3, <URL: https://github.com/eblondel/zen4R>.

Henry L, Wickham H (2020). purrr: Functional Programming Tools. R package version 0.3.4, <URL: https://CRAN.R-project.org/package=purrr>.

Wickham H (2020). tidyr: Tidy Messy Data. R package version 1.1.2, <URL: https://CRAN.R-project.org/package=tidyr>.

Wickham H (2019). stringr: Simple, Consistent Wrappers for Common String Operations. R package version 1.4.0, <URL: https://CRAN.R-project.org/package=stringr>.

Wickham H (2021). rvest: Easily Harvest (Scrape) Web Pages. R package version 1.0.0, <URL: https://CRAN.R-project.org/package=rvest>.

Wickham H, Francois R, Henry L, Muller K (2021). dplyr: A Grammar of Data Manipulation. R package version 1.0.3, <URL: https://CRAN.R-project.org/package=dplyr>.

Wickham H, Hester J (2020). readr: Read Rectangular Text Data. R package version 1.4.0, <URL: https://CRAN.R-project.org/package=readr>.

Xie Y (2020). knitr: A General-Purpose Package for Dynamic Report Generation in R. R package version 1.30, <URL: https://yihui.org/knitr/>.

Xie Y (2015). Dynamic Documents with R and knitr, 2nd edition. Chapman and Hall/CRC, Boca Raton, Florida. ISBN 978-1498716963, <URL: https://yihui.org/knitr/>.

Xie Y (2014). “knitr: A Comprehensive Tool for Reproducible Research in R.” In Stodden V, Leisch F, Peng RD (eds.), Implementing Reproducible Computational Research. Chapman and Hall/CRC. ISBN 978-1466561595, <URL: http://www.crcpress.com/product/isbn/9781466561595>.

Xie Y, Allaire J, Grolemund G (2018). R Markdown: The Definitive Guide. Chapman and Hall/CRC, Boca Raton, Florida. ISBN 9781138359338, <URL: https://bookdown.org/yihui/rmarkdown>.

Xie Y, Cheng J, Tan X (2021). DT: A Wrapper of the JavaScript Library ‘DataTables’. R package version 0.17, <URL: https://CRAN.R-project.org/package=DT>.

Xie Y, Dervieux C, Riederer E (2020). R Markdown Cookbook. Chapman and Hall/CRC, Boca Raton, Florida. ISBN 9780367563837, <URL: https://bookdown.org/yihui/rmarkdown-cookbook>.

Reuse

Text and figures are licensed under Creative Commons Attribution CC BY 4.0. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".

Citation

For attribution, please cite this work as

Lutai & Sterligov (2021, July 26). Russian Index of Research Organizations: Скачиваем датасет RIRO с Zenodo. Retrieved from https://openriro.github.io/posts/download-riro-with-r/

BibTeX citation

@misc{lutai2021скачиваем,
  author = {Lutai, Aleksei and Sterligov, Ivan},
  title = {Russian Index of Research Organizations: Скачиваем датасет RIRO с Zenodo},
  url = {https://openriro.github.io/posts/download-riro-with-r/},
  year = {2021}
}