1 ORCID12

ORCID(영어: Open Researcher and Contributor ID)는 과학자와 다른 학문 저작자를 인식하기 위한 비영리 숫자 코드로 디지털 객체 식별자(DOI, Digital Object Identifier)와 비슷한 역할을 한다.

  • rOpenSci fulltext
  • rorcid: 과학자와 다른 학문 저작자를 인식하기 위한 비영리 숫자 코드

1.1 ORCID API

rorcid 팩키지를 설치하게 되면 orcid_auth() 명령어를 통해서 API KEY를 획득하게 된다. [1] "Bearer XXXXXXXXXXXXXXXXXXXXXX" 에서 XXXXXXXXXXXXX에 해당되는 문자를 복사하여 usethis::edit_r_environ() 명령어로 .Renviron 파일에 API KEY를 ORCID_TOKEN="4dsw1e14-7212-4129-9f07-aaf7b88ba88f"와 같이 저장시켜둔다.

library(tidyverse)
library(rorcid)

orcid_auth(reauth = TRUE)
[1] "Bearer c47b70c8-b8ad-413e-9df3-b5486a9ebe12"
# orcid_auth()
# 
# no ORCID token found; attempting OAuth authentication
# 
# Adding .httr-oauth to .gitignore
# Waiting for authentication in browser...
# Press Esc/Ctrl + C to abort
# Authentication complete.
# 
# [1] "Bearer XXXXXXXXXXXXXXXXXXXXXX"

# usethis::edit_r_environ()
# ORCID_TOKEN="4dsw1e14-7212-4129-9f07-aaf7b88ba88f"

1.2 헬로 월드

Mohsen Attaran를 특정하여 과학자 정보를 특정해보자. orcid_search() 함수에 성과 이름을 통해서 orcid를 특정할 수 있다. 특별한 정보를 찾을 수 없다.

mohsen_attaran <- rorcid::orcid_search(given_name = "Mohsen",  family_name = "Attaran")
mohsen_attaran
# A tibble: 1 x 3
  first  last    orcid              
  <chr>  <chr>   <chr>              
1 Mohsen Attaran 0000-0002-0358-4107

Smart offices 관련 논문[1]을 Newcastle University Business School의 Savvas Papagiannidis 교수가 저술했기에 이에 대한 내용을 찾아보자.

papagiannidis <- rorcid::orcid_search(given_name = "Savvas",  family_name = "Papagiannidis")
papagiannidis
# A tibble: 1 x 3
  first  last          orcid              
  <chr>  <chr>         <chr>              
1 Savvas Papagiannidis 0000-0003-0799-491X

Savvas Papagiannidis, ORCID iD를 웹브라우져를 통해 확인이 가능하다.

# webshot2::webshot(url = "https://orcid.org/0000-0003-0799-491X", file = "fig/papagiannidis.png")
knitr::include_graphics("fig/papagiannidis.png")

2 과학연구자 프로필

rorcid::browse(papagiannidis$orcid) 명령어를 통해 관련 내용을 좀더 깊이 들어갈 수 있다. 특별한 정보가 하들리 위컴(Hadley Wickham)으로 바꿔 한걸음 더 들어가보자.

hadley <- orcid_search(given_name = "hadley", family_name = "wickham")
#   first  last    orcid              
#   <chr>  <chr>   <chr>              
# 1 Hadley Wickham 0000-0003-4757-117X

hadley_list <- rorcid::orcid_person(hadley$orcid)

listviewer::jsonedit(hadley_list)

상기 정보를 통해 개인 프로필을 작성할 수 있다. 꼭 필요하다고 생각되는 값만 추출하여 데이터프레임으로 작성한다. purrr::pluck 함수를 사용해서 꼭 필요한 Attribute 만 추출하여 데이터프레임으로 제작한다.

hadley_df <- hadley_list %>% {
    dplyr::tibble(
      created_date = purrr::map_dbl(., purrr::pluck, "name", "created-date", "value", .default=NA_character_),
      given_name = purrr::map_chr(., purrr::pluck, "name", "given-names", "value", .default=NA_character_),
      family_name = purrr::map_chr(., purrr::pluck, "name", "family-name", "value", .default=NA_character_),
      orcid_identifier_path = purrr::map_chr(., purrr::pluck, "name", "path", .default = NA_character_),
      biography = purrr::map_chr(., purrr::pluck, "biography", "content", .default=NA_character_),
      emails = purrr::map(., purrr::pluck, "emails", "email", "email", .default=NA_character_),
      keywords = purrr::map(., purrr::pluck, "keywords", "keyword", "content", .default=NA_character_),
      researcher_urls = purrr::map(., purrr::pluck, "researcher-urls", "researcher-url", "url.value",  .default=NA_character_)
    )
  } %>% 
  mutate(created_date = as.POSIXct(created_date /1e3, tz = "UTC", origin="1970-01-01 00:00:00" ))

hadley_df %>% 
  unnest(researcher_urls)
# A tibble: 2 x 8
  created_date        given_name family_name orcid_identifie~ biography emails
  <dttm>              <chr>      <chr>       <chr>            <chr>     <name>
1 2016-10-04 20:02:31 Hadley     Wickham     0000-0003-4757-~ <NA>      <chr ~
2 2016-10-04 20:02:31 Hadley     Wickham     0000-0003-4757-~ <NA>      <chr ~
# ... with 2 more variables: keywords <named list>, researcher_urls <chr>

rorcid::works() 함수를 사용해서 과학연구자 해들리 위컴이 저술한 논문에 대해 추출하여 정리한다.

hadley_works <- rorcid::works(hadley$orcid)

hadley_works_df <- hadley_works %>% 
  as.data.frame() %>% 
  janitor::clean_names() %>% 
  select(put_code, type, date = publication_date_year_value, journal = journal_title_value, 
         title = title_title_value, doi = url_value) %>% 
  mutate(doi = str_remove(doi, "https://doi.org/")) %>% 
  as_tibble() %>% 
  arrange(desc(date))

hadley_works_df
# A tibble: 46 x 6
   put_code type     date  journal              title                   doi     
      <int> <chr>    <chr> <chr>                <chr>                   <chr>   
 1 64917288 journal~ 2019  Journal of Open Sou~ Welcome to the Tidyver~ 10.2110~
 2 38589245 other    2015  <NA>                 R Packages              <NA>    
 3 38589244 journal~ 2013  Journal of Computat~ Graphical criticism: s~ <NA>    
 4 38589229 journal~ 2013  Journal of Computat~ The Generalized Pairs ~ <NA>    
 5 38589241 journal~ 2012  Journal of Computat~ ASA 2009 data expo      <NA>    
 6 38589201 journal~ 2012  R package version    rggobi: Interface betw~ <NA>    
 7 38589242 journal~ 2012  Journal of Statisti~ tourrGui: A gWidgets G~ <NA>    
 8 38589215 journal~ 2011  Journal of Statisti~ Dates and Times Made E~ <NA>    
 9 38589219 journal~ 2011  Computational Stati~ Mutable objects in R    <NA>    
10 38589216 journal~ 2011  IEEE Transactions o~ Product plots           <NA>    
# ... with 36 more rows

3 tidyverse 관련 논문

해드리 위컴이 tidyverse 생태계 구축에 지대한 영향을 미쳤기 때문에 관련 논문을 찾아 공저자를 찾아보자. “Welcome to the Tidyverse”[2] 논문을 시작점으로 시작해보자. 먼저, DOI가 “10.21105/joss.01686”이라 함께 작업한 공저자를 찾아낸다.

orcid(query = 'digital-object-ids:"10.21105/joss.01686"') 
# A tibble: 7 x 3
  `orcid-identifier.uri`            `orcid-identifier.pat~ `orcid-identifier.ho~
* <chr>                             <chr>                  <chr>                
1 https://orcid.org/0000-0003-4757~ 0000-0003-4757-117X    orcid.org            
2 https://orcid.org/0000-0002-7765~ 0000-0002-7765-6011    orcid.org            
3 https://orcid.org/0000-0002-2444~ 0000-0002-2444-4226    orcid.org            
4 https://orcid.org/0000-0002-4985~ 0000-0002-4985-5160    orcid.org            
5 https://orcid.org/0000-0001-9659~ 0000-0001-9659-6192    orcid.org            
6 https://orcid.org/0000-0001-7297~ 0000-0001-7297-9359    orcid.org            
7 https://orcid.org/0000-0002-6983~ 0000-0002-6983-2759    orcid.org            

다른 방식은 논문 제목을 “Welcome to the Tidyverse” 동일하게 query =에 넣어 확인한다.

tidyverse_orcid <- orcid(query = 'work-titles:"Welcome to the Tidyverse"')
tidyverse_orcid
# A tibble: 7 x 3
  `orcid-identifier.uri`            `orcid-identifier.pat~ `orcid-identifier.ho~
* <chr>                             <chr>                  <chr>                
1 https://orcid.org/0000-0002-7765~ 0000-0002-7765-6011    orcid.org            
2 https://orcid.org/0000-0002-2444~ 0000-0002-2444-4226    orcid.org            
3 https://orcid.org/0000-0002-4985~ 0000-0002-4985-5160    orcid.org            
4 https://orcid.org/0000-0001-9659~ 0000-0001-9659-6192    orcid.org            
5 https://orcid.org/0000-0001-7297~ 0000-0001-7297-9359    orcid.org            
6 https://orcid.org/0000-0003-4757~ 0000-0003-4757-117X    orcid.org            
7 https://orcid.org/0000-0002-6983~ 0000-0002-6983-2759    orcid.org            

4 tidyverse 공동저자

tidyverse 논문 저작에 참여한 공저자를 함께 찾아보자. “Welcome to the Tidyverse” 논문저작에 참여한 공저자의 ORCID를 추출하여 앞서 해들리 위컴과 마찬가지로 정보를 추출한다.

tidyverse_team <- rorcid::orcid_person(tidyverse_orcid$`orcid-identifier.path`)

listviewer::jsonedit(tidyverse_team)

추출한 데이터가 JSON에 기반한 리스트 형식 데이터라 이를 데이터프레임으로 변환시킨다.

tidyverse_member_info <- tidyverse_team %>% {
    dplyr::tibble(
      created_date = purrr::map_dbl(., purrr::pluck, "name", "created-date", "value", .default=NA_character_),
      given_name = purrr::map_chr(., purrr::pluck, "name", "given-names", "value", .default=NA_character_),
      family_name = purrr::map_chr(., purrr::pluck, "name", "family-name", "value", .default=NA_character_),
      orcid_identifier_path = purrr::map_chr(., purrr::pluck, "name", "path", .default = NA_character_),
      biography = purrr::map_chr(., purrr::pluck, "biography", "content", .default=NA_character_),
      researcher_urls = purrr::map(., purrr::pluck, "researcher-urls", "researcher-url", .default=NA_character_),
      emails = purrr::map_chr(., purrr::pluck, "emails", "email", "email", .default=NA_character_),
      keywords = purrr::map(., purrr::pluck, "keywords", "keyword", "content", .default=NA_character_),
      external_ids = purrr::map(., purrr::pluck, "external-identifiers", "external-identifier", .default=NA_character_)
    )
  } %>%
  dplyr::mutate(created_date = anytime::anydate(created_date/1000)) %>% 
  arrange(created_date)
tidyverse_member_info
# A tibble: 7 x 9
  created_date given_name family_name orcid_identifie~ biography researcher_urls
  <date>       <chr>      <chr>       <chr>            <chr>     <named list>   
1 2016-04-16   Lucy       D'Agostino~ 0000-0001-7297-~ <NA>      <df[,16] [1 x ~
2 2016-04-16   Jennifer   Bryan       0000-0002-6983-~ <NA>      <chr [1]>      
3 2016-10-05   Hadley     Wickham     0000-0003-4757-~ <NA>      <df[,16] [2 x ~
4 2018-02-27   Romain     Francois    0000-0002-2444-~ I make o~ <df[,16] [1 x ~
5 2018-05-22   Garrett    Grolemund   0000-0002-7765-~ <NA>      <chr [1]>      
6 2018-05-25   Mara       Averick     0000-0001-9659-~ <NA>      <chr [1]>      
7 2018-08-23   Alex       Hayes       0000-0002-4985-~ <NA>      <chr [1]>      
# ... with 3 more variables: emails <chr>, keywords <named list>,
#   external_ids <named list>

1. Papagiannidis S, Marikyan D. Smart offices: A productivity and well-being perspective. International Journal of Information Management. 2020;51:102027.

2. Wickham H, Averick M, Bryan J, Chang W, McGowan LD, François R, et al. Welcome to the tidyverse. Journal of Open Source Software. 2019;4:1686. doi:10.21105/joss.01686.

 

데이터 과학자 이광춘 저작

kwangchun.lee.7@gmail.com