R語言社群主題檢測演算法應用案例

tecdat發表於2020-12-03

原文連結: http://tecdat.cn/?p=5658

 

使用R檢測相關主題的社群

 

建立主題網路

對於Project Mosaic,我正在通過分析抽象文字和共同作者社交網路來研究UNCC在社會科學和計算機和資訊學方面的出版物。

我遇到的一個問題是:如何衡量主題之間的關係(相關性)?特別是,我想建立一個連線類似主題的網路視覺化,並幫助使用者更輕鬆地瀏覽大量主題(在本例中為100個主題)。

 

資料準備

我們的第一步是載入作為LDA輸出的主題矩陣。LDA有兩個輸出:字主題矩陣和文件主題矩陣。

作為載入平面檔案的替代方法,您可以使用topicmodels包lda函式的輸出來建立任何單詞主題和文件主題矩陣。

# load in author-topic matrix, first column is wordauthor.topic <- read.csv("./author_topics.csv", stringsAsFactors = F)# load in word-topic matrix, first column is wordtop.words <- word.topics[order(-word.topic[,i])]name$topic_name[i] <- paste(top.words[1:5], collapse = " + ")}# rename topicscolnames(author.topic) <- c("author_name",name$topic_name)

與摘要是文件的標準LDA不同,我執行了一個“以作者為中心”的LDA,其中所有作者的摘要被合併並被視為每個作者的一個文件。我跑這是因為我的最終目標是使用主題建模作為資訊檢索過程來確定研究人員的專業知識。

建立靜態網路

在下一步中,我使用每個主題的單詞概率之間的相關性建立一個網路。

首先,我決定只保留具有顯著相關性(20%+相關性)的關係(邊緣)。我使用20%,因為它對於100個觀察維基百科的樣本具有0.05的統計顯著性水平。

cor_threshold <- .2接下來,我們使用相關矩陣來建立igraph資料結構,刪除所有具有小於20%最小閾值相關性的邊。library(igraph)讓我們繪製一個簡單的igraph網路。par(mar=c(0, 0, 3, 0))y30")title("Strength Between Topics Based On Word Probabilities", cex.main=.8)

 

每個數字代表一個主題,每個主題都有編號以識別它。

使用社群檢測,特別是igraph中的標籤傳播演算法來確定網路中的群集。

clp <- cluster_label_prop(graph)class(clp)title("Community Detection in Topic Network", cex.main=.8)
 

社群檢測發現了13個社群,以及每個孤立主題的多個額外社群(即沒有任何聯絡的主題)。

與我最初的觀察結果類似,該演算法找到了我們在第一個圖中識別的三個主要聚類,但也新增了其他較小的聚類,這些聚類似乎不適合三個主要聚類中的任何一個。

 

V(graph)$community <- clp$membershipV(graph)$degree <- degree(graph, v = V(graph))

動態視覺化

在本節中,我們將使用visNetwork允許R中的互動式網路圖的包。

首先,讓我們呼叫庫並執行visIgraph一個互動式網路,但是使用igraph圖形設定在igraph結構(圖形)上執行。

library(visNetwork)

 

這是一個良好的開端,但我們需要有關網路的更多詳細資訊。

讓我們通過建立visNetwork資料結構走另一條路。為此,我們將igraph結構轉換為visNetwork資料結構,然後將列表分成兩個資料幀:節點和邊緣。

data <- toVisNetworkData(graph)nodes <- data[[1]]

 

刪除沒有連線的節點(主題)(度= 0)。

nodes <- nodes[nodes$degree != 0,]

 

讓我們新增顏色和其他網路引數來改善我們的網路。

library(RColorBrewer)col <- brewer.pal(12, "Set3")[as.factor(nodes$community)]nodes$shape <- "dot"s$betweenness))+.2)*20 # Node sizenodes$color.highlight.background <- "orange"

 

最後,讓我們用互動式情節建立我們的網路。您可以使用滑鼠滾輪進行縮放。

visNetwork(nodes, edges) %>%visOptions(highlightNearest = TRUE, selectedBy = "community", nodesIdSelection = TRUE)

 

首先,有兩個下拉選單。第一個下拉選單允許您按名稱查詢任何主題(按單詞概率排名前五個單詞)。

第二個下拉選單突出顯示了我們演算法中檢測到的社群。

最大的三個似乎是:

  • 計算(灰色,簇4)
  • 社交(綠藍,簇1)
  • 健康(黃色,簇2)

檢測到的較小社群有什麼獨特之處?你能解釋一下嗎?

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69982319/viewspace-2739020/,如需轉載,請註明出處,否則將追究法律責任。

相關文章