问题

我有一个通过textplot_network()函数quanteda包计算的网络图.对于最小的,请参考官方quanteda网站here . 我在下面报告的只是一个版本粘贴您在链接中可以找到的东西.

 library(quanteda)
load("data/data_corpus_tweets.rda")
tweet_dfm <- dfm(data_corpus_tweets, remove_punct = TRUE)
tag_dfm <- dfm_select(tweet_dfm, pattern = ("#*"))
toptag <- names(topfeatures(tag_dfm, 50))
topgat_fcm <- fcm_select(tag_fcm, pattern = toptag)
textplot_network(topgat_fcm, min_freq = 0.1, edge_alpha = 0.8, edge_size = 5)
 

产生的网络图如下:

enter image description here

如何计算图中呈现的每个节点的边缘数量?如果我使用fcm对象topgat_fcm上应用的函数topfeatures(),我获得了网络的顶部枢纽,这是检测到的coversion的计数.

有任何想法吗?

谢谢

  最佳答案

任何节点的边缘数量将是上三角形中的单元格数量,不包括对角线(因为某个特征与另一个实例在文档中共存不会在一个情节中产生“边缘”)。

让我们从一个简单的例子中解决这个问题.我将用六个字类型定义一个非常简单的三文档结构.

 library("quanteda", warn.conflicts = FALSE)
## Package version: 1.4.0
## Parallel computing: 2 of 12 threads used.
## See https://quanteda.io for tutorials and examples.
txt <- c("a b b c", "b d d e", "a e f f")
fcmat <- fcm(txt)
fcmat
## Feature co-occurrence matrix of: 6 by 6 features.
## 6 x 6 sparse Matrix of class "fcm"
##         features
## features a b c d e f
##        a 0 2 1 0 1 2
##        b 0 1 2 2 1 0
##        c 0 0 0 0 0 0
##        d 0 0 0 1 2 0
##        e 0 0 0 0 0 2
##        f 0 0 0 0 0 1
 

在这里,“a”有四个边缘,有“b”、“c”、“e”和“f”. “b”有三个边缘,有“c”、“d”和“e”(第一个文档中不包括“b”与自己的共生).

为了得到计数,我们可以将非零的单元格和,这些单元格可以使用rowSums()发生,或者如果您转换矩阵,计算“文档”频率的等效函数(虽然在这里,特性是“文档”).

不包括自我边缘,我们可以通过查看这个fcm的网络图来验证这些边缘。

 rowSums(fcmat > 0)
## a b c d e f 
## 4 4 0 2 1 1
docfreq(t(fcmat))
## a b c d e f 
## 4 4 0 2 1 1

textplot_network(fcmat)
 

为了排除自身边缘计数,我们需要零对角线.目前,这将在fcm上删除类定义,这意味着我们将无法在textplot_network()中使用它,但我们仍然可以使用我们的rowSums()方法按节点获取边缘计数,为您的问题提供答案.

 diag(fcmat) <- 0
rowSums(fcmat > 0)
## a b c d e f 
## 4 3 0 1 1 0
 

  相同标签的其他问题

rquantedanetwork-analysis