【复杂网络建模】——Pytmnet进行多层网络分析与可视化

目录

一、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算法)

猜你喜欢

转载自blog.csdn.net/lxwssjszsdnr_/article/details/130458947