Dies ist ein R-Code, der für den Beitrag "Zentrale Personen in einem Co-Autorennetzwerk ermitteln mit R und igraph" verwendet wurde. Der Beitrag findet sich unter: https://www.christianhmeyer.de/zentrale-personen-in-einem-co-autorennetzwerk-ermitteln-mit-r-und-igraph/ ---Beginn--- #Benötigte Pakete (Libraries) laden library(igraph) library(stringr) #Optionen setzen options(stringsAsFactors = FALSE) #Daten einlesen/laden file_path <- "C:/Users/C/Desktop/ranalyse/netzwerke/blog_UA/1UAEurope_authors.txt" data <- read.csv2(file_path, header = FALSE, sep = ";", fill = TRUE, encoding = "UTF-8", na.strings = "") #Daten säubern: überflüssige Leerzeichen löschen authors <- as.data.frame(apply(data, 2, str_trim)) #Zahl der eindeutigen Personen ermitteln und sortieren unique_authors <- data.frame(V1 = as.character(unique(unlist(authors), use.names = TRUE))) unique_authors <- data.frame(V1 = as.character(sort(unique_authors$V1))) #Anzahl der Publikationen je Autor/i ermitteln no.publications <- data.frame(table(unlist(authors))) #Zählen der Publikationen pro Autor/in no.publications <- no.publications[order(no.publications$Freq, decreasing = TRUE), ] #Sortieren nach Anzahl #Anzahl der Autorinnen bzw. Autoren per Publikation und darstellen no.authors <- data.frame(V1 = apply(authors, 1, function(x) sum(!is.na(x)))) barplot(table(no.authors), xlab="Anzahl der Autor/innen pro Paper", ylab = "Häufigkeit") #Schrittweises Erstellen der Edgelist #1. Alle Publikationen mit nur einer/m Autor/in eleminieren (Subset) subs.authors <- subset(authors, authors$V2 != "NA") subs.authors2 <- subs.authors[1:nrow(subs.authors),1:5] #2. Schleife (Loop) zur Darstellung aller Verbindungen innerhalb eines Papers net.edges <- data.frame(aut1=character(), aut2=character()) #Erstellen eines leeren Dataframes for(i in 1:nrow(subs.authors2)) { noNA <- (subs.authors2[i,]) #Zwischenspeicher noNA <- noNA[!is.na(noNA)] #Entfernen der NA res <- combn(noNA, m=2) #Erstellen aller Zweierkombinationen res <- as.data.frame(res) #Umwandeln zum Dataframe res <- t(res) #Transponieren net.edges <- rbind(net.edges, res) #Zur Edegelist hinzufügen } # Erstellen des Visualisierung # Graph aus Edgeliste erstellen (macht igraph) g1 <- graph.data.frame(net.edges, directed = FALSE) #Vereinfachen des zugrundeliegenden Matrix g1s <- simplify(g1, remove.multiple = TRUE, remove.loops = TRUE) #Visualisieren des Gesamtnetzwerkes set.seed(195) plot(g1s, vertex.size=3, vertex.shape="circle", vertex.label.cex=0.85, edge.width=0.2) # Überschrift der Visualisierung headline <- "Autor/inn/en-Netzwerk COST Action Urban Agriculture Europe" title(paste("\n", headline, sep = ""), cex.main=1, col.main="black") paste("\n", headline, sep = "") #Berechnen von Netzwerkkennzahlen bzw. Zentralitäten decomp.g1s <- decompose.graph(g1s) #Zerlegen des gesamten Netzwerkes (Graph g1s) in seine Komponenten g1_dg <- decomp.g1s[[1]] #Degree-Zentralität degree.g1_dg <- data.frame(V1 = degree(g1_dg, mode="all")) #Nähe-Zentralität closeness.g1_dg <- data.frame(V2 = closeness(g1_dg)) #Zwischenzentralität betweenness.g1_dg <- data.frame(V3 = betweenness(g1_dg)) #Erstellen eines zusammenfassenden Dataframes names.g1_dg <- rownames(degree.g1_dg) net.measures <- data.frame(V1 = names.g1_dg, V2 = degree.g1_dg, V3 = closeness.g1_dg, V4 = betweenness.g1_dg, row.names = NULL) colnames(net.measures) <- c("Name", "Degree", "Closeness", "Betweeness") ---Ende---