world <- rnaturalearth::ne_countries(scale='medium', returnclass = 'sf')

General data read-in

all_full_names <- readr::read_tsv('data/names/full-names.tsv.xz') %>% distinct()
## 
## ── Column specification ───────────────────────────────────────────────────────────────────────────────
## cols(
##   fore_name = col_character(),
##   last_name = col_character(),
##   fore_name_simple = col_character(),
##   last_name_simple = col_character(),
##   full_name = col_character()
## )
nat_to_reg <- world %>% 
  select(- geometry) %>% 
  as_tibble() %>% 
  select(iso_a2, name, region_wb) %>% 
  rename('countries' = iso_a2,
         'country_name' = name,
         'region' = region_wb) %>% 
  mutate(country_name = country_name %>% 
           gsub('United States of America', 'United States', .))
nat_to_reg[nat_to_reg$country_name == 'Norway', 'countries'] <- 'NO'
nat_to_reg[nat_to_reg$country_name == 'Somaliland', 'countries'] <- 'SO'
nat_to_reg[nat_to_reg$country_name == 'France', 'countries'] <- 'FR'
nat_to_reg %>% filter(is.na(countries))
## # A tibble: 5 x 3
##   countries country_name            region               
##   <chr>     <chr>                   <chr>                
## 1 <NA>      Ashmore and Cartier Is. East Asia & Pacific  
## 2 <NA>      N. Cyprus               Europe & Central Asia
## 3 <NA>      Indian Ocean Ter.       East Asia & Pacific  
## 4 <NA>      Siachen Glacier         South Asia           
## 5 <NA>      Kosovo                  Europe & Central Asia
articles <- readr::read_tsv('data/pubmed/articles.tsv.xz') %>%
  mutate(year = substr(publication_date, 1, 4) %>% ymd(truncated = 2),
         publication_date = ymd(publication_date, truncated = 2)) %>% 
  filter(year(publication_date) < 2020)
## 
## ── Column specification ───────────────────────────────────────────────────────────────────────────────
## cols(
##   pmid = col_double(),
##   pmcid = col_character(),
##   doi = col_character(),
##   journal = col_character(),
##   publication_date = col_character(),
##   pmc_cited_by_count = col_double(),
##   title = col_character()
## )
# citations <- xml2::read_xml('data/pubmed/esummary/compbio-english.xml.xz')

corr_authors <- readr::read_tsv(
  'data/names/corresponding-authors.tsv.xz',
  col_types = readr::cols(fore_name_simple = readr::col_character())) %>%
  inner_join(articles, by = 'pmid') %>% 
  mutate(adjusted_citations = sqrt(pmc_cited_by_count + 1))

keynotes <- readr::read_tsv('data/iscb/keynotes.tsv') %>%
  mutate(publication_date = ymd(year, truncated = 2),
         year = ymd(year, truncated = 2)) %>% 
  left_join(select(all_full_names, - full_name), by = c('fore_name', 'last_name')) %>% 
  filter(year(year) < 2020, conference != 'PSB') # remove PSB, exclude ISCB Fellows and ISMB speakers in 2020 for now
## 
## ── Column specification ───────────────────────────────────────────────────────────────────────────────
## cols(
##   year = col_double(),
##   full_name = col_character(),
##   fore_name = col_character(),
##   last_name = col_character(),
##   conference = col_character(),
##   source = col_character(),
##   affiliations = col_character(),
##   afflcountries = col_character()
## )
keynotes %>% filter(is.na(fore_name_simple))
## # A tibble: 0 x 11
## # … with 11 variables: year <date>, full_name <chr>, fore_name <chr>, last_name <chr>,
## #   conference <chr>, source <chr>, affiliations <chr>, afflcountries <chr>, publication_date <date>,
## #   fore_name_simple <chr>, last_name_simple <chr>
large_jours <- articles %>%
  count(journal, sort = T) %>% 
  head(10)

nationalize_df <- read_tsv('https://raw.githubusercontent.com/greenelab/wiki-nationality-estimate/6ab0feeca430ae9997dbaf8f81707359be50a17d/data/NamePrism_results_authors.tsv') %>%
  rename('full_name' = X1) %>%
  distinct(full_name, .keep_all = T) %>%
  left_join(all_full_names, by = 'full_name')
## Warning: Missing column names filled in: 'X1' [1]
## 
## ── Column specification ──────────────────────────────────────────
## cols(
##   X1 = col_character(),
##   African = col_double(),
##   CelticEnglish = col_double(),
##   EastAsian = col_double(),
##   European = col_double(),
##   Greek = col_double(),
##   Hispanic = col_double(),
##   Jewish = col_double(),
##   Muslim = col_double(),
##   Nordic = col_double(),
##   SouthAsian = col_double()
## )
  • Number of articles from 1993-2019: 176773 (~ 100 articles with no authors).

  • Number of last authors: 176609.

corr_authors %>% 
  count(year, name = 'Number of articles with last authors') %>% 
  DT::datatable(rownames = F)

If we set a threshold at least 200 articles a year, we should only consider articles from 1998 on.

corr_authors <- corr_authors %>% 
  add_count(year, name = 'n_aut_yr') %>% 
  filter(n_aut_yr > 200) %>% 
  select(- n_aut_yr)

nrow(corr_authors)
## [1] 176110
save(nationalize_df, nat_to_reg, corr_authors, keynotes, large_jours, world, 
     file = 'Rdata/raws.Rdata')
LS0tCnRpdGxlOiAiU2F2ZSByYXcgZGF0YSBpbnRvIC5SZGF0YSB0byBiZSBsb2FkZWQgaW4gYnkgYW5hbHlzaXMgbm90ZWJvb2tzIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRoZW1lOiBmbGF0bHkKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCiAgICBoaWdobGlnaHQ6IHRhbmdvCmtuaXQ6IChmdW5jdGlvbihpbnB1dEZpbGUsIGVuY29kaW5nKSB7CiAgcm1hcmtkb3duOjpyZW5kZXIoaW5wdXRGaWxlLCBlbmNvZGluZyA9IGVuY29kaW5nLCBvdXRwdXRfZGlyID0gImRvY3MiKSB9KSAgICAKLS0tCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsdWJyaWRhdGUpCnNvdXJjZSgndXRpbHMvci11dGlscy5SJykKbGlicmFyeShybmF0dXJhbGVhcnRoKQp0aGVtZV9zZXQodGhlbWVfYncoKSArIHRoZW1lKGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSkpCmBgYAoKYGBge3J9CndvcmxkIDwtIHJuYXR1cmFsZWFydGg6Om5lX2NvdW50cmllcyhzY2FsZT0nbWVkaXVtJywgcmV0dXJuY2xhc3MgPSAnc2YnKQpgYGAKCiMjIyBHZW5lcmFsIGRhdGEgcmVhZC1pbgoKYGBge3J9CmFsbF9mdWxsX25hbWVzIDwtIHJlYWRyOjpyZWFkX3RzdignZGF0YS9uYW1lcy9mdWxsLW5hbWVzLnRzdi54eicpICU+JSBkaXN0aW5jdCgpCgpuYXRfdG9fcmVnIDwtIHdvcmxkICU+JSAKICBzZWxlY3QoLSBnZW9tZXRyeSkgJT4lIAogIGFzX3RpYmJsZSgpICU+JSAKICBzZWxlY3QoaXNvX2EyLCBuYW1lLCByZWdpb25fd2IpICU+JSAKICByZW5hbWUoJ2NvdW50cmllcycgPSBpc29fYTIsCiAgICAgICAgICdjb3VudHJ5X25hbWUnID0gbmFtZSwKICAgICAgICAgJ3JlZ2lvbicgPSByZWdpb25fd2IpICU+JSAKICBtdXRhdGUoY291bnRyeV9uYW1lID0gY291bnRyeV9uYW1lICU+JSAKICAgICAgICAgICBnc3ViKCdVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EnLCAnVW5pdGVkIFN0YXRlcycsIC4pKQpuYXRfdG9fcmVnW25hdF90b19yZWckY291bnRyeV9uYW1lID09ICdOb3J3YXknLCAnY291bnRyaWVzJ10gPC0gJ05PJwpuYXRfdG9fcmVnW25hdF90b19yZWckY291bnRyeV9uYW1lID09ICdTb21hbGlsYW5kJywgJ2NvdW50cmllcyddIDwtICdTTycKbmF0X3RvX3JlZ1tuYXRfdG9fcmVnJGNvdW50cnlfbmFtZSA9PSAnRnJhbmNlJywgJ2NvdW50cmllcyddIDwtICdGUicKbmF0X3RvX3JlZyAlPiUgZmlsdGVyKGlzLm5hKGNvdW50cmllcykpCgphcnRpY2xlcyA8LSByZWFkcjo6cmVhZF90c3YoJ2RhdGEvcHVibWVkL2FydGljbGVzLnRzdi54eicpICU+JQogIG11dGF0ZSh5ZWFyID0gc3Vic3RyKHB1YmxpY2F0aW9uX2RhdGUsIDEsIDQpICU+JSB5bWQodHJ1bmNhdGVkID0gMiksCiAgICAgICAgIHB1YmxpY2F0aW9uX2RhdGUgPSB5bWQocHVibGljYXRpb25fZGF0ZSwgdHJ1bmNhdGVkID0gMikpICU+JSAKICBmaWx0ZXIoeWVhcihwdWJsaWNhdGlvbl9kYXRlKSA8IDIwMjApCgojIGNpdGF0aW9ucyA8LSB4bWwyOjpyZWFkX3htbCgnZGF0YS9wdWJtZWQvZXN1bW1hcnkvY29tcGJpby1lbmdsaXNoLnhtbC54eicpCgpjb3JyX2F1dGhvcnMgPC0gcmVhZHI6OnJlYWRfdHN2KAogICdkYXRhL25hbWVzL2NvcnJlc3BvbmRpbmctYXV0aG9ycy50c3YueHonLAogIGNvbF90eXBlcyA9IHJlYWRyOjpjb2xzKGZvcmVfbmFtZV9zaW1wbGUgPSByZWFkcjo6Y29sX2NoYXJhY3RlcigpKSkgJT4lCiAgaW5uZXJfam9pbihhcnRpY2xlcywgYnkgPSAncG1pZCcpICU+JSAKICBtdXRhdGUoYWRqdXN0ZWRfY2l0YXRpb25zID0gc3FydChwbWNfY2l0ZWRfYnlfY291bnQgKyAxKSkKCmtleW5vdGVzIDwtIHJlYWRyOjpyZWFkX3RzdignZGF0YS9pc2NiL2tleW5vdGVzLnRzdicpICU+JQogIG11dGF0ZShwdWJsaWNhdGlvbl9kYXRlID0geW1kKHllYXIsIHRydW5jYXRlZCA9IDIpLAogICAgICAgICB5ZWFyID0geW1kKHllYXIsIHRydW5jYXRlZCA9IDIpKSAlPiUgCiAgbGVmdF9qb2luKHNlbGVjdChhbGxfZnVsbF9uYW1lcywgLSBmdWxsX25hbWUpLCBieSA9IGMoJ2ZvcmVfbmFtZScsICdsYXN0X25hbWUnKSkgJT4lIAogIGZpbHRlcih5ZWFyKHllYXIpIDwgMjAyMCwgY29uZmVyZW5jZSAhPSAnUFNCJykgIyByZW1vdmUgUFNCLCBleGNsdWRlIElTQ0IgRmVsbG93cyBhbmQgSVNNQiBzcGVha2VycyBpbiAyMDIwIGZvciBub3cKa2V5bm90ZXMgJT4lIGZpbHRlcihpcy5uYShmb3JlX25hbWVfc2ltcGxlKSkKCmxhcmdlX2pvdXJzIDwtIGFydGljbGVzICU+JQogIGNvdW50KGpvdXJuYWwsIHNvcnQgPSBUKSAlPiUgCiAgaGVhZCgxMCkKCm5hdGlvbmFsaXplX2RmIDwtIHJlYWRfdHN2KCdodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZ3JlZW5lbGFiL3dpa2ktbmF0aW9uYWxpdHktZXN0aW1hdGUvNmFiMGZlZWNhNDMwYWU5OTk3ZGJhZjhmODE3MDczNTliZTUwYTE3ZC9kYXRhL05hbWVQcmlzbV9yZXN1bHRzX2F1dGhvcnMudHN2JykgJT4lCiAgcmVuYW1lKCdmdWxsX25hbWUnID0gWDEpICU+JQogIGRpc3RpbmN0KGZ1bGxfbmFtZSwgLmtlZXBfYWxsID0gVCkgJT4lCiAgbGVmdF9qb2luKGFsbF9mdWxsX25hbWVzLCBieSA9ICdmdWxsX25hbWUnKQpgYGAKCgotIE51bWJlciBvZiBhcnRpY2xlcyBmcm9tIDE5OTMtMjAxOTogYHIgbnJvdyhhcnRpY2xlcylgICh+IDEwMCBhcnRpY2xlcyB3aXRoIG5vIGF1dGhvcnMpLgoKLSBOdW1iZXIgb2YgbGFzdCBhdXRob3JzOiBgciBucm93KGNvcnJfYXV0aG9ycylgLgoKCmBgYHtyfQpjb3JyX2F1dGhvcnMgJT4lIAogIGNvdW50KHllYXIsIG5hbWUgPSAnTnVtYmVyIG9mIGFydGljbGVzIHdpdGggbGFzdCBhdXRob3JzJykgJT4lIAogIERUOjpkYXRhdGFibGUocm93bmFtZXMgPSBGKQpgYGAKCioqSWYgd2Ugc2V0IGEgdGhyZXNob2xkIGF0IGxlYXN0IDIwMCBhcnRpY2xlcyBhIHllYXIsIHdlIHNob3VsZCBvbmx5IGNvbnNpZGVyIGFydGljbGVzIGZyb20gMTk5OCBvbi4qKgoKYGBge3J9CmNvcnJfYXV0aG9ycyA8LSBjb3JyX2F1dGhvcnMgJT4lIAogIGFkZF9jb3VudCh5ZWFyLCBuYW1lID0gJ25fYXV0X3lyJykgJT4lIAogIGZpbHRlcihuX2F1dF95ciA+IDIwMCkgJT4lIAogIHNlbGVjdCgtIG5fYXV0X3lyKQoKbnJvdyhjb3JyX2F1dGhvcnMpCmBgYAoKCmBgYHtyfQpzYXZlKG5hdGlvbmFsaXplX2RmLCBuYXRfdG9fcmVnLCBjb3JyX2F1dGhvcnMsIGtleW5vdGVzLCBsYXJnZV9qb3Vycywgd29ybGQsIAogICAgIGZpbGUgPSAnUmRhdGEvcmF3cy5SZGF0YScpCmBgYAoK