我有数据,其中X-column正在审核,然后是大多数评论所拥有的单词列。是否可以创建一个图表,其中节点将是评论,边缘将是单词?
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
另一个想法是根据使用的单词及其频率对图表中的评论进行攻击。
非常感谢你。任何帮助表示赞赏。
答案 0 :(得分:1)
使用您的示例数据,可以创建包含节点(每个评论)和边缘的图形(两个评论在使用相同的单词时连接)。此外,您可以根据两个评论共有多少单词对边缘进行加权,而且您可以使用不同的边缘形状/颜色来表示不同的单词。
有几种方法可以使用您的数据创建图表。首先,创建一个邻接矩阵,其中每个列和每行代表一个评论。 adjecency矩阵只计算两次评论之间是否有共同词。如果两个评论共享一个共同的单词,则取值为1,否则为零。
adjency矩阵看起来与此类似,后者表示列和行标签:
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包中的R命令graph_from_adjency(),您可以创建图形并使用绘图函数。
其次,您还可以创建一个权重矩阵,用于计算两次审核之间共享的单词数量。使用igraph包中的相同命令graph_from_adjency(,weighted = T),您可以从该矩阵创建图形。 您可以在此处找到有关igraph包的网络分析的详细介绍:http://kateto.net/networks-r-igraph
Review A B C D
A 0 2 3 1
B 2 0 0 2
C 3 0 0 2
D 1 2 2 0
第三,您可以从边缘和节点数据帧中指定图形。
节点数据框将包含每个节点的短标识,可能包含您可能希望包含的有关节点的名称和所有其他信息:
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 = links,vertices = nodes)。
答案 1 :(得分:1)
以下是探索数据关系的三种方法:
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
<强>输出:强>
数据:强>
df <- read.table(header=T, text="
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")
PS:可能有一条捷径。 2(评论为节点和单词作为边缘) - 随意添加它。