Çapraz Doğrulanmış web sitesinin anahtar kelimelerine / etiketlerine bakabilirsiniz .
Bir ağ olarak şubeler
Bunu yapmanın bir yolu, anahtar kelimeler arasındaki ilişkilere dayanarak onu bir ağ olarak planlamaktır (aynı yazıda ne sıklıkta çakışırlar).
Sitenin verilerini almak için bu sql komut dosyasını kullandığınızda (data.stackexchange.com/stats/query/edit/1122036)
select Tags from Posts where PostTypeId = 1 and Score >2
Ardından, 2 veya daha yüksek puan alan tüm sorular için bir anahtar kelime listesi edinebilirsiniz.
Aşağıdakine benzer bir şey çizerek bu listeyi keşfedebilirsiniz:
Güncelleme: renk ile aynı (ilişki matrisinin özvektörlerine dayanarak) ve kendi kendine çalışma etiketi olmadan
Bu grafiği biraz daha temizleyebilirsiniz (örneğin, yazılım etiketleri gibi istatistiksel kavramlarla ilgili olmayan etiketleri çıkarın, yukarıdaki grafikte bu 'r' etiketi için zaten yapılmıştır) ve görsel gösterimi iyileştirin, ancak sanırım Yukarıdaki bu görüntü zaten güzel bir başlangıç noktası gösterir.
R-kod:
#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)
)
Hiyerarşik dallar
Yukarıdaki ağ grafiklerinin, tamamen dallanmış bir hiyerarşik yapıya yönelik eleştirilerin bir kısmı ile ilgili olduğuna inanıyorum. İsterseniz, onu hiyerarşik bir yapıya zorlamak için hiyerarşik bir kümeleme gerçekleştirebileceğinizi tahmin ediyorum.
Aşağıda böyle bir hiyerarşik model örneğidir. Biri hala çeşitli kümeler için uygun grup isimleri bulmaya ihtiyaç duyacaktır (ancak bu hiyerarşik kümelemenin iyi bir yön olduğunu sanmıyorum, bu yüzden onu açık bırakıyorum).
Kümelenme için uzaklık ölçüsü deneme yanılma sonucu bulunmuştur (kümeler güzel görünene kadar ayarlamalar yapılmıştır.
#####
##### 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 ="")
StackExchangeStrike tarafından yazıldı.