Vous pouvez consulter les mots clés / balises du site Web Cross Validated.
Les succursales en réseau
Une façon de le faire est de le représenter comme un réseau basé sur les relations entre les mots clés (à quelle fréquence ils coïncident dans le même article).
Lorsque vous utilisez ce script sql pour obtenir les données du site à partir de (data.stackexchange.com/stats/query/edit/1122036)
select Tags from Posts where PostTypeId = 1 and Score >2
Ensuite, vous obtenez une liste de mots clés pour toutes les questions avec un score de 2 ou plus.
Vous pouvez explorer cette liste en traçant quelque chose comme ceci:
Mise à jour: la même chose avec la couleur (basée sur les vecteurs propres de la matrice de relation) et sans la balise d'auto-étude
Vous pouvez nettoyer ce graphique un peu plus loin (par exemple, supprimer les balises qui ne se rapportent pas à des concepts statistiques comme les balises logicielles, dans le graphique ci-dessus, cela est déjà fait pour la balise 'r') et améliorer la représentation visuelle, mais je suppose que cette image ci-dessus montre déjà un bon point de départ.
Code R:
#the sql-script saved like an sql file
network <- read.csv("~/../Desktop/network.csv", stringsAsFactors = 0)
#it looks like this:
> network[1][1:5,]
[1] "<r><biostatistics><bioinformatics>"
[2] "<hypothesis-testing><nonlinear-regression><regression-coefficients>"
[3] "<aic>"
[4] "<regression><nonparametric><kernel-smoothing>"
[5] "<r><regression><experiment-design><simulation><random-generation>"
l <- length(network[,1])
nk <- 1
keywords <- c("<r>")
M <- matrix(0,1)
for (j in 1:l) { # loop all lines in the text file
s <- stringr::str_match_all(network[j,],"<.*?>") # extract keywords
m <- c(0)
for (is in s[[1]]) {
if (sum(keywords == is) == 0) { # check if there is a new keyword
keywords <- c(keywords,is) # add to the keywords table
nk<-nk+1
M <- cbind(M,rep(0,nk-1)) # expand the relation matrix with zero's
M <- rbind(M,rep(0,nk))
}
m <- c(m, which(keywords == is))
lm <- length(m)
if (lm>2) { # for keywords >2 add +1 to the relations
for (mi in m[-c(1,lm)]) {
M[mi,m[lm]] <- M[mi,m[lm]]+1
M[m[lm],mi] <- M[m[lm],mi]+1
}
}
}
}
#getting rid of < >
skeywords <- sub(c("<"),"",keywords)
skeywords <- sub(c(">"),"",skeywords)
# plotting connections
library(igraph)
library("visNetwork")
# reduces nodes and edges
Ms<-M[-1,-1] # -1,-1 elliminates the 'r' tag which offsets the graph
Ms[which(Ms<50)] <- 0
ww <- colSums(Ms)
el <- which(ww==0)
# convert to data object for VisNetwork function
g <- graph.adjacency(Ms[-el,-el], weighted=TRUE, mode = "undirected")
data <- toVisNetworkData(g)
# adjust some plotting parameters some
data$nodes['label'] <- skeywords[-1][-el]
data$nodes['title'] <- skeywords[-1][-el]
data$nodes['value'] <- colSums(Ms)[-el]
data$edges['width'] <- sqrt(data$edges['weight'])*1
data$nodes['font.size'] <- 20+log(ww[-el])*6
data$edges['color'] <- "#eeeeff"
#plot
visNetwork(nodes = data$nodes, edges = data$edges) %>%
visPhysics(solver = "forceAtlas2Based", stabilization = TRUE,
forceAtlas2Based = list(nodeDistance=70, springConstant = 0.04,
springLength = 50,
avoidOverlap =1)
)
Branches hiérarchiques
Je crois que ces types de graphiques de réseau ci-dessus se rapportent à certaines des critiques concernant une structure hiérarchique purement ramifiée. Si vous le souhaitez, je suppose que vous pouvez effectuer un clustering hiérarchique pour le forcer dans une structure hiérarchique.
Voici un exemple d'un tel modèle hiérarchique. Il faudrait encore trouver des noms de groupe appropriés pour les différents clusters (mais, je ne pense pas que ce clustering hiérarchique soit la bonne direction, donc je le laisse ouvert).
La mesure de distance pour le clustering a été trouvée par essais et erreurs (en faisant des ajustements jusqu'à ce que les clusters paraissent bien.
#####
##### cluster
library(cluster)
Ms<-M[-1,-1]
Ms[which(Ms<50)] <- 0
ww <- colSums(Ms)
el <- which(ww==0)
Ms<-M[-1,-1]
R <- (keycount[-1]^-1) %*% t(keycount[-1]^-1)
Ms <- log(Ms*R+0.00000001)
Mc <- Ms[-el,-el]
colnames(Mc) <- skeywords[-1][-el]
cmod <- agnes(-Mc, diss = TRUE)
plot(as.hclust(cmod), cex = 0.65, hang=-1, xlab = "", ylab ="")
Écrit par StackExchangeStrike