目录
一、Pymnet介绍
二、安装步骤
三、多层网络的构建
1、单层网络的构建
2、双层随机网络的构建和可视化
3、多路复用网络图的可视化
四、总结
一、Pymnet介绍
官网:
Pymnet是一个用于网络分析和建模的Python库。它提供了各种网络分析工具,例如中心性、聚类和社区检测等指标,以及用于生成和可视化网络的工具。Pymnet是建立在流行的NetworkX库之上的,并为网络分析提供了额外的功能和方便函数。Pymnet可用于各种应用,包括社交网络分析、生物网络分析和交通网络分析。
主要特点包括:
- 纯Python实现
- 可处理一般的多层网络
- 支持多层网络和多重网络的数据结构
- 对于稀疏网络具有可扩展性的实现:内存使用量随着边数和节点数呈线性扩展
- 基于规则的耦合边生成和惰性计算
- 各种网络分析方法、转换、读取和写入网络、网络模型等
- 可视化(使用Matplotlib或D3作为后端)
- 与NetworkX集成,用于单层网络分析
二、安装步骤
Github官网:
将下载的文件解压到conda的site-packages目录下:
进入目录
cd D:\python\anaconda\Lib\site-packages\Multilayer-networks-library-master
构建和安装
python setup.py build
python setup.py install
安装成功:
导入成功:
三、多层网络的构建
1、单层网络的构建
通过Pymnet库构建单层网络的过程如下:
创建一个空的单层网络
net = pymnet.MultiplexNetwork()
向网络中添加节点
net.add_node(1)
net.add_node(2)
net.add_node(3)
向网络中添加边
net[1,2] = 1
net[2,3] = 1
这里我们使用 get_multilayer_network_projection()
方法将网络投影到第一个层,得到一个 networkx
图形对象。
可以使用 net
对象的 show()
方法可视化该网络
net.show()
这将显示一个简单的单层网络,其中节点用圆圈表示,边用线条表示。
完整的示例代码如下:
from pymnet import *
# MultilayerNetwork 是库中的基本网络类——所有其他类型的网络都是它的特例。
# 为了获得单体网络对象,可以简单地构造一个具有 0 个方面的多层网络。
net = MultilayerNetwork(aspects=0)
net.add_node(1)
net.add_node(2)
print(list(net))
print(net[1].deg())
2、双层随机网络的构建和可视化
通过er_mutilayer方法来创建:
Generate multilayer Erdos-Renyi network.
The produced multilayer network has a single aspect.
import pymnet
# 构建一个包含两个层,每个层有10个节点的ER网络
net = pymnet.models.er_multilayer(10, 2, p=0.2)
# 输出adjacency_matrix
print("adjacency_matrix: ", net.get_supra_adjacency_matrix())
将上述代码进行可视化
import pymnet
# 构建一个包含两个层,每个层有10个节点的ER网络
net = pymnet.models.ER_multilayer([10, 10], p=0.2)
# 设置节点和层的颜色和形状
node_colors = ["red"] * 10 + ["blue"] * 10
layer_colors = ["lightgray", "lightblue"]
node_shapes = ["o"] * 10 + ["s"] * 10
# 绘制网络
pymnet.draw(net, layerLabelRule=None, nodeLabelRule=None, nodeColorDict=node_colors,
layerColorDict=layer_colors, nodeShapeDict=node_shapes)
# 显示绘制结果
pymnet.show()
我写的这个还有点问题待修改。
看一下官网的实例。
# — coding: utf-8 –
from pymnet import *
import matplotlib.pyplot as plt
net = models.er_multilayer(5, 2, 0.2)
fig = draw(net)
fig.savefig("net.pdf")
3、多路复用网络图的可视化
# — coding: utf-8 –
from pymnet import *
import matplotlib.pyplot as plt
net = models.er_multilayer(5, 2, 0.2)
fig = draw(net)
fig2=draw(er(10,3*[0.4]),layout="spring")
fig2.savefig("net2.pdf")
# — coding: utf-8 –
from pymnet import *
fig3 = draw(er(10, 3 * [0.3]),
layout="circular",
layershape="circle",
nodeColorDict={(0, 0): "r", (1, 0): "r", (0, 1): "r"},
layerLabelRule={},
nodeLabelRule={},
nodeSizeRule={"rule": "degree", "propscale": 0.05})
fig3.savefig("net3.pdf")
我们首先创建了一个三层的空白网络,然后添加了一些层和节点以及它们之间的连接。接下来,我们设置了节点和层的颜色和形状,并使用 pymnet.draw()
函数创建了一个绘图对象。我们使用 lambda
函数将层名称作为标签,并将节点标签设置为 None
,这样绘图对象中的节点将不会显示标签。然后,我们使用循环遍历每个节点并设置其形状。最后,我们使用 pymnet.show()
函数显示绘图结果。
在可视化网络时,可以使用 pymnet.draw()
函数的一些参数来设置节点和层的颜色、形状和标签。例如,我们可以使用 nodeColorDict
参数来设置节点颜色字典,使用 layerColorDict
参数来设置层颜色字典,使用 nodeShapeDict
参数来设置节点形状字典,使用 layerLabelRule
参数来设置层标签规则,使用 nodeLabelRule
参数来设置节点标签规则等等。
在 PyMNet
中,还提供了许多其他函数和类,可以用于更高级的多层网络分析和操作,例如层与层之间的投影、多层网络的布局和可视化等等。
四、总结:
PyMNet
是一个 Python 库,可以用于多层网络的分析和可视化。它提供了一些方便的函数和类,使用户能够轻松地创建、操作和可视化多层网络。
相关文章:
【复杂网络建模】——Python可视化重要节点识别(PageRank算法)