目录

一、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_matrixprint("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"] * 10layer_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 pltnet = 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 pltnet = 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算法)