OpenAlex4Gephi / OpenAlexEdges.R
Ifeanyi's picture
Upload 3 files
5fd4781
raw history blame
No virus
3.04 kB
authorPubEdges <- function(keywords,pub_start_date,pub_end_date){
keywords <- keywords
pub_start_date <- pub_start_date
pub_end_date <- pub_end_date
# create search engine function
search_engine <- function(keywords,pub_start_date,pub_end_date){
suppressPackageStartupMessages(library(openalexR))
suppressPackageStartupMessages(library(tidyverse))
options(openalexR.mailto = "idiayeifeanyi@yahoo.com")
# search engine
works_search <- oa_fetch(
entity = "works",
title.search = keywords,
cited_by_count = ">50",
from_publication_date = pub_start_date,
to_publication_date = pub_end_date,
options = list(sort = "cited_by_count:desc"),
verbose = FALSE
)
return(works_search)
}
# import nodes function
source("openAlexNodes.R")
# run author nodes function
author_nodes <- authorPubNodes(keywords,pub_start_date,pub_end_date)
# run search engine
search_data <- search_engine(keywords,pub_start_date,pub_end_date)
# grab authors and group them according to collaboration
authors_collaboration_groups <- list()
for (i in 1:nrow(search_data)){
authors_collaboration_groups[[i]] <- search_data$author[[i]][2]
}
# grab all authors
all_authors <- c()
for (i in 1:length(authors_collaboration_groups)) {
all_authors <- c(all_authors,authors_collaboration_groups[[i]][[1]])
}
# get length of each authors collaboration
authors_length <- c()
for(authors in 1:length(authors_collaboration_groups)){
authors_length <- c(authors_length,authors_collaboration_groups[[authors]] |> nrow())
}
# grab all publications
publications <- list()
for (i in 1:nrow(search_data)){
publications[[i]] <- rep(search_data$display_name[i], each = authors_length[i])
}
# place all publications in a vector
all_publications <- c()
for(i in 1:length(publications)){
all_publications <- c(all_publications,publications[[i]])
}
# create author_to_publication data frame
authors_to_publications <- data.frame(
Authors = all_authors,
Publications = all_publications
)
# create edges data frame
author_publication_edges <- data.frame(
Source = authors_to_publications$Authors,
Target = authors_to_publications$Publications,
Type = "directed",
Weight = 1.0
)
# replace edges with id from nodes data set
replace_edges_with_ids <- function(author_edges, author_nodes) {
# Create a lookup table for node values to their corresponding Ids
node_lookup <- setNames(author_nodes$Id, author_nodes$Node)
# Use the lookup table to replace Source and Target values in author_edges
author_edges$Source <- node_lookup[author_edges$Source]
author_edges$Target <- node_lookup[author_edges$Target]
return(author_edges)
}
# Call the function with your data frames
author_publication_edges <- replace_edges_with_ids(author_publication_edges, author_nodes)
return(author_publication_edges)
}