R网络图
我有数据,其中X列是评论,然后是大多数评论都有的单词列。是否可以创建一个图,其中节点是评论,边是单词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 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条评论,这将如何影响你答案中的代码