Anda dapat melihat kata kunci / tag dari situs web Cross Validated.
Cabang sebagai jaringan
Salah satu cara untuk melakukan ini adalah dengan memplotnya sebagai jaringan berdasarkan hubungan antara kata kunci (seberapa sering mereka bertepatan dalam posting yang sama).
Saat Anda menggunakan skrip sql ini untuk mendapatkan data situs dari (data.stackexchange.com/stats/query/edit/1122036)
select Tags from Posts where PostTypeId = 1 and Score >2
Kemudian Anda mendapatkan daftar kata kunci untuk semua pertanyaan dengan skor 2 atau lebih tinggi.
Anda dapat menjelajahi daftar itu dengan merencanakan sesuatu seperti berikut ini:
Pembaruan: sama dengan warna (berdasarkan vektor eigen dari matriks relasi) dan tanpa tag belajar sendiri
Anda dapat membersihkan grafik ini sedikit lebih jauh (mis. Mengambil tag yang tidak berhubungan dengan konsep statistik seperti tag perangkat lunak, dalam grafik di atas ini sudah dilakukan untuk tag 'r') dan meningkatkan representasi visual, tapi saya kira bahwa gambar di atas sudah menunjukkan titik awal yang bagus.
Kode-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)
)
Cabang hierarkis
Saya percaya bahwa jenis grafik jaringan di atas berhubungan dengan beberapa kritik mengenai struktur hierarki yang murni bercabang. Jika Anda suka, saya kira Anda bisa melakukan pengelompokan hierarkis untuk memaksanya ke dalam struktur hierarkis.
Di bawah ini adalah contoh model hierarkis tersebut. Kita masih perlu menemukan nama grup yang tepat untuk berbagai kluster (tapi, saya tidak berpikir bahwa pengelompokan hierarkis ini adalah arah yang baik, jadi saya membiarkannya terbuka).
Ukuran jarak untuk pengelompokan telah ditemukan oleh coba-coba (membuat penyesuaian sampai kelompok tampak bagus.
#####
##### 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 ="")
Ditulis oleh StackExchangeStrike