如何解决从Julia DataFrame创建加权图
给出以下数据框:
| a | b | c | d |
|---|---|---|---|
| 1 | 0 | 1 | 0 |
| 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 |
如何有效地构建加权图,例如:
- 节点对应于列名;
- 如果两个顶点在DataFrame的同一行中都具有1,则将其连接 (例如,“ a”在第一行中连接到“ c”);
- 权重等于连接两个顶点的次数(例如边'a'-'c'的权重为2,而'c'-'d'的权重为1)。
这里是如何使用SimpleWeightedGraphs.jl和GraphPlot.jl手动构建此图的方法:
g = SimpleWeightedGraph(4)
add_edge!(g,1,3,2)
add_edge!(g,4,2,1)
add_edge!(g,1)
nodes = ["a","b","c","d"]
gplot(g,nodelabel=nodes,edgelinewidth=[2,1])
解决方法
在df
是您的数据帧的情况下,这样的事情应该起作用:
using LinearAlgebra
function gengraph(df)
g = SimpleWeightedGraph(ncol(df))
ew = Int[]
for i in 1:ncol(df),j in i+1:ncol(df)
w = dot(df[!,i],df[!,j])
if w > 0
push!(ew,w)
add_edge!(g,i,j,w)
end
end
gplot(g,nodelabel=names(df),edgelinewidth=ew)
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。