আপনি ক্রস ভ্যালিডেটেড ওয়েবসাইটের কীওয়ার্ড / ট্যাগগুলিতে সন্ধান করতে পারেন ।
একটি নেটওয়ার্ক হিসাবে শাখা
এটি করার একটি উপায় হ'ল কীওয়ার্ডগুলির মধ্যে সম্পর্কের ভিত্তিতে একটি নেটওয়ার্ক হিসাবে এটির পরিকল্পনা করা (তারা প্রায়শই একই পোস্টে মিলিত হয়)।
আপনি যখন এই স্কেল-স্ক্রিপ্টটি ব্যবহার করেন সাইট থেকে ডেটা পাওয়ার জন্য (data.stackexchange.com/stats/query/edit/1122036)
select Tags from Posts where PostTypeId = 1 and Score >2
তারপরে আপনি 2 বা ততোধিক স্কোর সহ সমস্ত প্রশ্নের জন্য কীওয়ার্ডগুলির একটি তালিকা পাবেন।
আপনি নীচের মতো কিছু ষড়যন্ত্র করে সেই তালিকাটি অন্বেষণ করতে পারেন:
আপডেট: রঙের সাথে একই (সম্পর্কের ম্যাট্রিক্সের ইগেনভেেক্টরগুলির উপর ভিত্তি করে) এবং স্ব-অধ্যয়ন ট্যাগ ছাড়াই
আপনি এই গ্রাফটি আরও কিছুটা পরিষ্কার করতে পারেন (উদাহরণস্বরূপ, উপরের গ্রাফটিতে এটি 'আর' ট্যাগের জন্য সম্পন্ন হয়েছে এমন সফ্টওয়্যার ট্যাগগুলির মতো পরিসংখ্যানগত ধারণার সাথে সম্পর্কিত নয় এমন ট্যাগগুলি নিয়ে যান) এবং ভিজ্যুয়াল উপস্থাপনাটি উন্নত করতে পারেন তবে আমার ধারণা উপরের এই চিত্রটি ইতিমধ্যে একটি দুর্দান্ত সূচনা পয়েন্ট দেখায়।
আর-কোড:
#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)
)
শ্রেণিবদ্ধ শাখা
আমি বিশ্বাস করি যে এই ধরণের নেটওয়ার্ক গ্রাফগুলি উপরের খাঁটি শাখাগত শ্রেণিবদ্ধ কাঠামো সম্পর্কিত কিছু সমালোচনার সাথে সম্পর্কিত। আপনি যদি পছন্দ করেন তবে আমি অনুমান করি যে আপনি এটিকে শ্রেণিবদ্ধ কাঠামোতে বাধ্য করার জন্য একটি শ্রেণিবিন্যাস-ক্লাস্টারিং করতে পারেন।
নীচে যেমন শ্রেণিবদ্ধ মডেলের উদাহরণ দেওয়া আছে। বিভিন্ন ক্লাস্টারের জন্য এখনও একটির জন্য সঠিক গ্রুপের নাম সন্ধান করা প্রয়োজন (তবে, আমি মনে করি না যে এই শ্রেণিবদ্ধ ক্লাস্টারিংটি ভাল দিক, সুতরাং আমি এটি উন্মুক্ত রেখেছি)।
ক্লাস্টারিংয়ের জন্য দূরত্বের পরিমাপটি পরীক্ষা এবং ত্রুটির দ্বারা পাওয়া গেছে (ক্লাস্টারগুলি সুন্দর না হওয়া পর্যন্ত সামঞ্জস্য করা।
#####
##### 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 ="")
লিখেছেন স্ট্যাকএক্সচেঞ্জ স্ট্রাইক