R网络图

R网络图,r,networking,graph,R,Networking,Graph,我有数据,其中X列是评论,然后是大多数评论都有的单词列。是否可以创建一个图,其中节点是评论,边是单词 X action age ago amazing american art author back bad beautiful beginning 1 1 1 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0

我有数据,其中X列是评论,然后是大多数评论都有的单词列。是否可以创建一个图,其中节点是评论,边是单词

X action age ago amazing american art author back bad beautiful beginning
1   1     1   0    0        0      0    0     0    0     0         0
2   0     0   0    0        0      0    0     0    0     0         0
3   0     0   0    0        0      0    0     0    1     0         0
4   1     3   0    0        0      2    1     0    0     0         0
5   0     0   1    0        1      0    0     2    0     1         0
另一个想法是根据使用的单词及其频率在图表中删除评论


多谢各位。非常感谢您的帮助。

使用您的示例数据,您可以创建包含节点(每个评论)和边(当两个评论使用同一个词时,两个评论是相连的)的图形。此外,您可以根据两篇评论共有多少单词来对边缘进行加权,此外,您还可以使用不同形状/颜色的边缘来表示不同的单词

有几种方法可以使用数据创建图形。首先,创建一个邻接矩阵,其中每一列和每一行都代表一个回顾。邻接矩阵只计算两个评论之间是否有一个共同的词。如果两篇评论共用一个词,则取值1,否则为零

邻接矩阵与此类似,后者表示列和行标签:

 Review A B C D 
    A   0 1 1 1 
    B   1 0 0 1   
    C   1 0 0 1   
    D   1 1 1 0
使用igraph包中的_adjuncy()中的R命令graph_,您可以创建一个图形并使用plot函数

其次,您还可以创建一个权重矩阵,计算两个评论之间共享的单词数。使用igraph包中的_adjuncy(,weighted=T)中的相同命令graph_,可以从该矩阵创建一个图。 您可以在此处找到关于igraph软件包的网络分析的详细介绍:

第三,可以从边和节点数据帧中指定图形

“节点”数据框将包含每个节点的简短id,可能还包含名称以及您可能希望包含的关于节点的所有其他信息:

 id long_review_name 
  R1       A
  R2       B 
  R3       C
  R4       D
“边缘”数据框收集有关两个审阅之间连接的所有信息。首先,也是最重要的一点,它将记录从和到列中的所有边。此外,它可以包含频率,如边缘上的权重和类型所表示的,这两个节点共享哪个单词连接:

 from   to  weight  type 
  R1    R2    1   american
  R1    R2    1   age
  R1    R3    2   american
  R1    R3    1   age 
  R1    R4    1   age 
  R2    R4    2   american

要将边和节点数据帧转换为图形,您需要使用命令graph_from_data_frame(d=链接,顶点=节点)

使用您的示例数据,可以创建包含节点(每个评论)和边(两个评论使用同一个词时是连接的)的图形。此外,您可以根据两篇评论共有多少单词来对边缘进行加权,此外,您还可以使用不同形状/颜色的边缘来表示不同的单词

有几种方法可以使用数据创建图形。首先,创建一个邻接矩阵,其中每一列和每一行都代表一个回顾。邻接矩阵只计算两个评论之间是否有一个共同的词。如果两篇评论共用一个词,则取值1,否则为零

邻接矩阵与此类似,后者表示列和行标签:

 Review A B C D 
    A   0 1 1 1 
    B   1 0 0 1   
    C   1 0 0 1   
    D   1 1 1 0
使用igraph包中的_adjuncy()中的R命令graph_,您可以创建一个图形并使用plot函数

其次,您还可以创建一个权重矩阵,计算两个评论之间共享的单词数。使用igraph包中的_adjuncy(,weighted=T)中的相同命令graph_,可以从该矩阵创建一个图。 您可以在此处找到关于igraph软件包的网络分析的详细介绍:

第三,可以从边和节点数据帧中指定图形

“节点”数据框将包含每个节点的简短id,可能还包含名称以及您可能希望包含的关于节点的所有其他信息:

 id long_review_name 
  R1       A
  R2       B 
  R3       C
  R4       D
“边缘”数据框收集有关两个审阅之间连接的所有信息。首先,也是最重要的一点,它将记录从和到列中的所有边。此外,它可以包含频率,如边缘上的权重和类型所表示的,这两个节点共享哪个单词连接:

 from   to  weight  type 
  R1    R2    1   american
  R1    R2    1   age
  R1    R3    2   american
  R1    R3    1   age 
  R1    R4    1   age 
  R2    R4    2   american

要将边和节点数据帧转换为图形,您需要使用命令graph_from_data_frame(d=链接,顶点=节点)

以下是三种探索数据关系的方法:

par(mfrow=c(1,3))

# two mode network (reviews+words)
library(igraph)
set.seed(1)
g <- graph_from_data_frame(subset(reshape2::melt(df, 1), !!value, -value)[2:1])
V(g)$type <- bipartite.mapping(g)$type 
plot(g, layout = layout_as_bipartite(g)[, 2:1], vertex.color = V(g)$type+1L)

# just the reviews:
library(reshape2)
lst <- with(subset(melt(df, 1), !!value)[2:1], split(X, variable))
lst <- lst[lengths(lst)>1]
lst <- lapply(lst, function(x) t(combn(x, m=2)))
g <- graph_from_edgelist(do.call(rbind, lst), dir = F)
E(g)$label <- rep(names(lst), sapply(lst, nrow))
plot(g)

# review clustering
df[-1] %>% dist(meth="bin") %>% hclust %>% plot
par(mfrow=c(1,3))
#双模网络(评论+文字)
图书馆(igraph)
种子(1)

g以下是三种探索数据关系的方法:

par(mfrow=c(1,3))

# two mode network (reviews+words)
library(igraph)
set.seed(1)
g <- graph_from_data_frame(subset(reshape2::melt(df, 1), !!value, -value)[2:1])
V(g)$type <- bipartite.mapping(g)$type 
plot(g, layout = layout_as_bipartite(g)[, 2:1], vertex.color = V(g)$type+1L)

# just the reviews:
library(reshape2)
lst <- with(subset(melt(df, 1), !!value)[2:1], split(X, variable))
lst <- lst[lengths(lst)>1]
lst <- lapply(lst, function(x) t(combn(x, m=2)))
g <- graph_from_edgelist(do.call(rbind, lst), dir = F)
E(g)$label <- rep(names(lst), sapply(lst, nrow))
plot(g)

# review clustering
df[-1] %>% dist(meth="bin") %>% hclust %>% plot
par(mfrow=c(1,3))
#双模网络(评论+文字)
图书馆(igraph)
种子(1)

g非常感谢你的想法。我会尝试做你建议的图表。我如何从我的数据中创建一个熟练的矩阵?在R中,在excel?中,邻接矩阵用于一维图。最短的方法是创建lukeA描述的图形,然后从igraph包中应用get.adjacence命令。非常感谢您的想法。我会尝试做你建议的图表。我如何从我的数据中创建一个熟练的矩阵?在R中,在excel?中,邻接矩阵用于一维图。最短的方法是按照lukeA所述创建图形,然后从igraph包中应用get.adjacence命令。谢谢您的回答。在第一个代码中“!!value,-value”是什么意思?另外,我忘了提到我有csv格式的数据,它包括260多个单词和大约3000条评论,这将如何影响您答案中的代码?
!!value
value==TRUE
的缩写,
-value
从子集中删除名为value的列。逗号分隔或空格分隔的数据并不重要。从概念上讲,200个单词中的2个单词也没关系;实际上,结果可能会太忙。但那是另一个问题。谢谢你的回答。在第一个代码中“!!value,-value”是什么意思?另外,我忘了提到我有csv格式的数据,它包括260多个单词和大约3000条评论,这将如何影响你答案中的代码