开源
multiNetX:一款基于python的网络分析工具包
来源:元经纪     阅读:449
网站管理员
发布于 2023-03-14 09:02
查看主页

概述

multiNetX是一种基于Python语言开发的网络分析工具包,用于进行复杂网络分析和建模。它提供了各种功能,例如网络构建、度量计算、子图提取、可视化等,并支持多重网络分析。multiNetX可以应用于不同领域的研究,例如社会网络分析、生物网络分析、交通网络分析等。以下是一些multiNetX的应用: 1. 社会网络分析:multiNetX可以用于分析社交网络、组织网络和协作网络,从而探究社会结构和交互关系。 2. 生物网络分析:multiNetX可以用于分析大规模的生物信息学数据集,例如基因组、代谢途径、蛋白质相互作用网络等。 3. 交通网络分析:multiNetX可以用于分析城市交通网络、公共交通网络和航空网络,从而研究交通流量、优化路线和改进交通规划。 4. 金融网络分析:multiNetX可以用于分析金融市场中的投资者网络、公司网络和数据网络,从而预测市场走向和企业风险。 5. 工程网络分析:multiNetX可以用于分析电力网络、水力网络和能源网络,从而评估系统稳定性和优化设计。 总之,multiNetX是一种通用的网络分析工具包,可以应用于不同领域的复杂网络建模和分析。

如何安装 multiNetX

您必须在终端中执行以下命令:

pip install git+https://github.com/nkoub/multinetx.git

或者

[hidecontent type="logged" desc="隐藏内容:登录后可查看"]

  1. 将 multinetx 的存储库克隆到您的系统中:
    git clone https://github.com/nkoub/multinetx.git
  2. 在multinetx目录中输入:
    cd multinetx
  3. 然后简单地写:
    pip install .

如何使用 multiNetX

导入数值标准库

import numpy as np

导入包 MultiNetX

import multinetx as mx

创建多路复用第一种方式

创建三个 Erd"os-R'enyi 网络,每层有 N 个节点

N = 5
g1 = mx.generators.erdos_renyi_graph(N,0.5,seed=218)
g2 = mx.generators.erdos_renyi_graph(N,0.6,seed=211)
g3 = mx.generators.erdos_renyi_graph(N,0.7,seed=208)

创建一个 3Nx3N lil 稀疏矩阵。它将用于描述层互连

adj_block = mx.lil_matrix(np.zeros((N*3,N*3)))

定义层之间的互连类型(这里我们使用单位矩阵,从而将层之间的节点一对一连接)

adj_block[0:  N,  N:2*N] = np.identity(N)    # L_12
adj_block[0:  N,2*N:3*N] = np.identity(N)    # L_13
adj_block[N:2*N,2*N:3*N] = np.identity(N)    # L_23
    
# use symmetric inter-adjacency matrix
adj_block += adj_block.T

创建 MultilayerGraph 类的实例

mg = mx.MultilayerGraph(list_of_layers=[g1,g2,g3],
                        inter_adjacency_matrix=adj_block)

权重可以添加到边缘

mg.set_edges_weights(intra_layer_edges_weight=2,
                     inter_layer_edges_weight=3)

创建多路复用第二种方式

mg = mx.MultilayerGraph()

添加图层

mg.add_layer(mx.generators.erdos_renyi_graph(N,0.5,seed=218))
mg.add_layer(mx.generators.erdos_renyi_graph(N,0.6,seed=211))
mg.add_layer(mx.generators.erdos_renyi_graph(N,0.7,seed=208))

创建 MultilayerGraph 类的实例

mg.layers_interconnect(inter_adjacency_matrix=adj_block)

权重可以添加到边缘

mg.set_edges_weights(intra_layer_edges_weight=2,
                     inter_layer_edges_weight=3)

对象 mg 继承了 networkX Graph 的所有属性,因此我们可以计算邻接或拉普拉斯矩阵,它们的特征值等。

如何绘制多重网络

导入标准库
import numpy as np
import matplotlib.pyplot as plt
导入包 MultiNetX
import multinetx as mx
创建三个 Erd"os-R'enyi 网络,每层有 N 个节点
N = 50
g1 = mx.erdos_renyi_graph(N,0.07,seed=218)
g2 = mx.erdos_renyi_graph(N,0.07,seed=211)
g3 = mx.erdos_renyi_graph(N,0.07,seed=208)

边缘彩色网络(无互连层)

创建多路复用网络
mg = mx.MultilayerGraph(list_of_layers=[g1,g2,g3])
为边缘设置权重
mg.set_intra_edges_weights(layer=0,weight=1)
mg.set_intra_edges_weights(layer=1,weight=2)
mg.set_intra_edges_weights(layer=2,weight=3)
绘制邻接矩阵和多重网络
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(121)
ax1.imshow(mx.adjacency_matrix(mg,weight='weight').todense(),
		  origin='upper',interpolation='nearest',cmap=plt.cm.jet_r)
ax1.set_title('supra adjacency matrix')

ax2 = fig.add_subplot(122)
ax2.axis('off')
ax2.set_title('edge colored network')
pos = mx.get_position(mg,mx.fruchterman_reingold_layout(g1),
					  layer_vertical_shift=0.2,
					  layer_horizontal_shift=0.0,
					  proj_angle=47)
mx.draw_networkx(mg,pos=pos,ax=ax2,node_size=50,with_labels=False,
				 edge_color=[mg[a][b]['weight'] for a,b in mg.edges()],
				 edge_cmap=plt.cm.jet_r)
plt.show()

常规互连复用

定义层与层之间的互连类型
adj_block = mx.lil_matrix(np.zeros((N*3,N*3)))

adj_block[0:  N,  N:2*N] = np.identity(N)    # L_12
adj_block[0:  N,2*N:3*N] = np.identity(N)    # L_13
#adj_block[N:2*N,2*N:3*N] = np.identity(N)    # L_23
adj_block += adj_block.T
创建 MultilayerGraph 类的实例
mg = mx.MultilayerGraph(list_of_layers=[g1,g2,g3], 
						inter_adjacency_matrix=adj_block)

mg.set_edges_weights(inter_layer_edges_weight=4)

mg.set_intra_edges_weights(layer=0,weight=1)
mg.set_intra_edges_weights(layer=1,weight=2)
mg.set_intra_edges_weights(layer=2,weight=3)
绘制邻接矩阵和多重网络
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(121)
ax1.imshow(mx.adjacency_matrix(mg,weight='weight').todense(),
		  origin='upper',interpolation='nearest',cmap=plt.cm.jet_r)
ax1.set_title('supra adjacency matrix')

ax2 = fig.add_subplot(122)
ax2.axis('off')
ax2.set_title('regular interconnected network')
pos = mx.get_position(mg,mx.fruchterman_reingold_layout(mg.get_layer(0)),
					  layer_vertical_shift=1.4,
					  layer_horizontal_shift=0.0,
					  proj_angle=7)
mx.draw_networkx(mg,pos=pos,ax=ax2,node_size=50,with_labels=False,
				 edge_color=[mg[a][b]['weight'] for a,b in mg.edges()],
				 edge_cmap=plt.cm.jet_r)
plt.show()

一般复用复用

定义层与层之间的互连类型
adj_block = mx.lil_matrix(np.zeros((N*4,N*4)))

adj_block[0  :  N ,   N:2*N] = np.identity(N)   # L_12
adj_block[0  :  N , 2*N:3*N] = np.random.poisson(0.005,size=(N,N))   # L_13
adj_block[0  :  N , 3*N:4*N] = np.random.poisson(0.006,size=(N,N))   # L_34
adj_block[3*N:4*N , 2*N:3*N] = np.random.poisson(0.008,size=(N,N))   # L_14
adj_block += adj_block.T
adj_block[adj_block>1] = 1
创建 MultilayerGraph 类的实例
mg = mx.MultilayerGraph(list_of_layers=[g1,g2,g3,g1],
						inter_adjacency_matrix=adj_block)

mg.set_edges_weights(inter_layer_edges_weight=5)

mg.set_intra_edges_weights(layer=0,weight=1)
mg.set_intra_edges_weights(layer=1,weight=2)
mg.set_intra_edges_weights(layer=2,weight=3)
mg.set_intra_edges_weights(layer=3,weight=4)
绘制邻接矩阵和多重网络
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(121)
ax1.imshow(mx.adjacency_matrix(mg,weight='weight').todense(),
		  origin='upper',interpolation='nearest',cmap=plt.cm.jet_r)
ax1.set_title('supra adjacency matrix')

ax2 = fig.add_subplot(122)
ax2.axis('off')
ax2.set_title('general multiplex network')
pos = mx.get_position(mg,mx.fruchterman_reingold_layout(mg.get_layer(0)),
					  layer_vertical_shift=.3,
					  layer_horizontal_shift=0.9,
					  proj_angle=.2)
mx.draw_networkx(mg,pos=pos,ax=ax2,node_size=50,with_labels=False,
				 edge_color=[mg[a][b]['weight'] for a,b in mg.edges()],
				 edge_cmap=plt.cm.jet_r)
plt.show()

如何绘制 3D 多重网络

导入特定库

import numpy as np #  to use matrix
import matplotlib.pyplot as plt # to use plot
import networkx as nx # to use graphs
import multinetx as mx # to use multinet
import math # to use floor
import matplotlib.cm as cmx # to use cmap (for data color values)
import matplotlib.colors as colors # to use cmap (for data color values)
import matplotlib.cbook as cb # to test if an object is a string

from mpl_toolkits.mplot3d import Axes3D # to use 3D plot

创建多网

N1 = 10
g1 = nx.cycle_graph(N1)
N2 = 2*N1
g2 = nx.cycle_graph(N2)

adj_block = mx.lil_matrix(np.zeros((N1+N2,N1+N2)))

for i in range(N1):
    adj_block[i,N1+2*i] = 1

adj_block += adj_block.T

mg = mx.MultilayerGraph(list_of_layers=[g1,g2],inter_adjacency_matrix=adj_block)

按层绘制多路复用网络

# Create the figure
fig = plt.figure()
# Create 3D axes
ax = fig.add_subplot(111, projection='3d')

pos = mx.get_position3D(mg)


intra_c = ['b','r']
inter_c = 'grey'
layer_c = ['b','r']

mg.set_edges_weights(inter_layer_edges_weight=1, intra_layer_edges_weight=1)
edge_color=[mg[a][b]['weight'] for a,b in mg.edges()]


mx.FigureByLayer(mg, pos, ax, intra_edge_color=intra_c,node_color=layer_c, inter_edge_color=inter_c)
ax.axis('off')
(-1.0999999812245371,
 1.0999999991059304,
 -1.0999999595281706,
 1.0999999980727702)

按节点和边绘制多路复用网络

# Create the figure
fig = plt.figure()
# Create 3D axes
ax = fig.add_subplot(111, projection='3d')
# Get position of all nodes
pos = mx.get_position3D(mg)
# Set edges weights
mg.set_intra_edges_weights(layer=0,weight=1)
mg.set_intra_edges_weights(layer=1,weight=2)
mg.set_edges_weights(inter_layer_edges_weight=3)

# Get edges and nodes color
edge_color=[mg.edges.get((a,b))['weight'] for a,b in mg.edges()]
node_color=[i for i in mg.nodes]

# Plot multiplex network using options
mx.Figure3D(mg, pos, ax, edge_color=edge_color, node_color=node_color, 
         node_shape = 'D', edge_linewidth = 0.5, node_linewidth = 0,
         edge_style = 'dashed', label = 'Node', with_labels = True,
         font_size = 8, font_color = 'red', font_weight = 'heavy', 
         font_family = 'fantasy')
# Print legend
ax.legend(scatterpoints=1)
/home/icarrasco/fnh_k/multinetx_display/multinetx/draw.py:439: MatplotlibDeprecationWarning: The is_string_like function was deprecated in version 2.1.
  if not cb.is_string_like(label):

<matplotlib.legend.Legend at 0x7fcc9b69fbe0> 

按节点和边绘制部分复用网络

# Create the figure
fig = plt.figure()
# Create 3D axes
ax = fig.add_subplot(111, projection='3d')

# Get position of nodes
pos = mx.get_position3D(mg)
# Choose some edges
edge_list = [(0, 1),(0, 10),(0, 9),(1, 2),(1, 12),(2, 3),(2, 14),(3, 16),(3, 4),(4, 18),(4, 5),(5, 20),(5, 6),(6, 22),(6, 7),(7, 8),(7, 24)]
# Choose the edges color
edge_color = [np.random.randint(1,100) for i in edge_list]
# Choose some nodes
node_list = [0,2,4,6,8,10,12,14,16,18,20]
# Choose the nodes color
node_color = [0,2,4,6,8,10,12,14,16,18,20]
# Plot the partial mutiplex network
mx.Figure3D(mg, pos, ax, node_list=node_list, node_color=node_color, edge_list=edge_list, edge_color = edge_col

[/hidecontent]

 
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 开源
第六期普洱青年读书会举行
shell_gpt:一个AI生成代码的工具
新版福州地铁 气象服务系统将亮相
腾讯汉字守护计划:102个生僻字将进入国际编码流程,推出云输入解决方案
打造智慧“云仓”  赋能创新增效

首页

分类

定制方案

消息

我的