用python画关系网络图-python networkx 包绘制复杂网络关系图

目录

创建一个图

节点

查看图上点和边的信息

图的属性设置

点的属性设置

边的属性设置

不同类型的图(有向图Directed graphs , 重边图 Multigraphs)

图的遍历

图生成和图上的一些操作

图上分析

图的绘制

1. 创建一个图

import networkx as nx

g = nx.Graph()

g.clear() #将图上元素清空

所有的构建复杂网络图的操作基本都围绕这个g来执行。

2. 节点

节点的名字可以是任意数据类型的,添加一个节点是

g.add_node(1)

g.add_node("a")

g.add_node("spam")

添加一组节点,就是提前构建好了一个节点列表,将其一次性加进来,这跟后边加边的操作是具有一致性的。

g.add_nodes_from([2,3])

or

a = [2,3]

g.add_nodes_from(a)

这里需要值得注意的一点是,对于add_node加一个点来说,字符串是只添加了名字为整个字符串的节点。但是对于add_nodes_from加一组点来说,字符串表示了添加了每一个字符都代表的多个节点,exp:

g.add_node("spam") #添加了一个名为spam的节点

g.add_nodes_from("spam") #添加了4个节点,名为s,p,a,m

g.nodes() #可以将以上5个节点打印出来看看

加一组从0开始的连续数字的节点

H = nx.path_graph(10)

g.add_nodes_from(H) #将0~9加入了节点

#但请勿使用g.add_node(H)

删除节点

与添加节点同理

g.remove_node(node_name)

g.remove_nodes_from(nodes_list)

3. 边

边是由对应节点的名字的元组组成,加一条边

g.add_edge(1,2)

e = (2,3)

g.add_edge(*e) #直接g.add_edge(e)数据类型不对,*是将元组中的元素取出

加一组边

g.add_edges_from([(1,2),(1,3)])

g.add_edges_from([("a","spam") , ("a",2)])

通过nx.path_graph(n)加一系列连续的边

n = 10

H = nx.path_graph(n)

g.add_edges_from(H.edges()) #添加了0~1,1~2 ... n-2~n-1这样的n-1条连续的边

删除边

同理添加边的操作

g.remove_edge(edge)

g.remove_edges_from(edges_list)

4. 查看图上点和边的信息

g.number_of_nodes() #查看点的数量

g.number_of_edges() #查看边的数量

g.nodes() #返回所有点的信息(list)

g.edges() #返回所有边的信息(list中每个元素是一个tuple)

g.neighbors(1) #所有与1这个点相连的点的信息以列表的形式返回

g[1] #查看所有与1相连的边的属性,格式输出:{0: {}, 2: {}} 表示1和0相连的边没有设置任何属性(也就是{}没有信息),同理1和2相连的边也没有任何属性

method

explanation

Return True if the graph contains the node n.

Return True if n is a node, False otherwise.

Return True if the edge (u,v) is in the graph.

Return the number of nodes in the graph.

Return the number of nodes in the graph.

Return the number of nodes.

Graph.degree([nbunch, weight])

Return the degree of a node or nodes.

Graph.degree_iter([nbunch, weight])

Return an iterator for (node, degree).

Graph.size([weight])

Return the number of edges.

Return the number of edges between two nodes.

Return a list of nodes with self loops.

Return a list of selfloop edges.

Return the number of selfloop edges.

5. 图的属性设置

为图赋予初始属性

g = nx.Graph(day="Monday")

g.graph # {'day': 'Monday'}

修改图的属性

g.graph['day'] = 'Tuesday'

g.graph # {'day': 'Tuesday'}

6. 点的属性设置

g.add_node('benz', money=10000, fuel="1.5L")

print g.node['benz'] # {'fuel': '1.5L', 'money': 10000}

print g.node['benz']['money'] # 10000

print g.nodes(data=True) # data默认false就是不输出属性信息,修改为true,会将节点名字和属性信息一起输出

7. 边的属性设置

通过上文中对g[1]的介绍可知边的属性在{}中显示出来,我们可以根据这个秀改变的属性

g.clear()

n = 10

H = nx.path_graph(n)

g.add_nodes_from(H)

g.add_edges_from(H.edges())

g[1][2]['color'] = 'blue'

g.add_edge(1, 2, weight=4.7)

g.add_edges_from([(3,4),(4,5)], color='red')

g.add_edges_from([(1,2,{'color':'blue'}), (2,3,{'weight':8})])

g[1][2]['weight'] = 4.7

g.edge[1][2]['weight'] = 4

8. 不同类型的图(有向图Directed graphs , 重边图 Multigraphs)

Directed graphs

DG = nx.DiGraph()

DG.add_weighted_edges_from([(1,2,0.5), (3,1,0.75), (1,4,0.3)]) # 添加带权值的边

print DG.out_degree(1) # 打印结果:2 表示:找到1的出度

print DG.out_degree(1, weight='weight') # 打印结果:0.8 表示:从1出去的边的权值和,这里权值是以weight属性值作为标准,如果你有一个money属性,那么也可以修改为weight='money',那么结果就是对money求和了

print DG.successors(1) # [2,4] 表示1的后继节点有2和4

print DG.predecessors(1) # [3] 表示只有一个节点3有指向1的连边

Multigraphs

简答从字面上理解就是这种复杂网络图允许你相同节点之间允许出现重边

MG=nx.MultiGraph()

MG.add_weighted_edges_from([(1,2,.5), (1,2,.75), (2,3,.5)])

print MG.degree(weight='weight') # {1: 1.25, 2: 1.75, 3: 0.5}

GG=nx.Graph()

for n,nbrs in MG.adjacency_iter():

for nbr,edict in nbrs.items():

minvalue=min([d['weight'] for d in edict.values()])

GG.add_edge(n,nbr, weight = minvalue)

print nx.shortest_path(GG,1,3) # [1, 2, 3]

9. 图的遍历

g = nx.Graph()

g.add_weighted_edges_from([(1,2,0.125),(1,3,0.75),(2,4,1.2),(3,4,0.375)])

for n,nbrs in g.adjacency_iter(): #n表示每一个起始点,nbrs是一个字典,字典中的每一个元素包含了这个起始点连接的点和这两个点连边对应的属性

print n, nbrs

for nbr,eattr in nbrs.items():

# nbr表示跟n连接的点,eattr表示这两个点连边的属性集合,这里只设置了weight,如果你还设置了color,那么就可以通过eattr['color']访问到对应的color元素

data=eattr['weight']

if data<0.5: print('(%d, %d, %.3f)' % (n,nbr,data))

10. 图生成和图上的一些操作

下方的这些操作都是在networkx包内的方法

subgraph(G, nbunch) - induce subgraph of G on nodes in nbunch

union(G1,G2) - graph union

disjoint_union(G1,G2) - graph union assuming all nodes are different

cartesian_product(G1,G2) - return Cartesian product graph

compose(G1,G2) - combine graphs identifying nodes common to both

complement(G) - graph complement

create_empty_copy(G) - return an empty copy of the same graph class

convert_to_undirected(G) - return an undirected representation of G

convert_to_directed(G) - return a directed representation of G

11. 图上分析

g = nx.Graph()

g.add_edges_from([(1,2), (1,3)])

g.add_node("spam")

nx.connected_components(g) # [[1, 2, 3], ['spam']] 表示返回g上的不同连通块

sorted(nx.degree(g).values())

通过构建权值图,可以直接快速利用dijkstra_path()接口计算最短路程

>>> G=nx.Graph()

>>> e=[('a','b',0.3),('b','c',0.9),('a','c',0.5),('c','d',1.2)]

>>> G.add_weighted_edges_from(e)

>>> print(nx.dijkstra_path(G,'a','d'))

['a', 'c', 'd']

12. 图的绘制

下面是4种图的构造方法,选择其中一个

nx.draw(g)

nx.draw_random(g) #点随机分布

nx.draw_circular(g) #点的分布形成一个环

nx.draw_spectral(g)

最后将图形表现出来

import matplotlib.pyplot as plt

plt.show()

将图片保存到下来

nx.draw(g)

plt.savefig("path.png")

修改节点颜色,边的颜色

g = nx.cubical_graph()

nx.draw(g, pos=nx.spectral_layout(g), nodecolor='r', edge_color='b')

plt.show()

13. 图形种类的选择

Graph Type

NetworkX Class

简单无向图

Graph()

简单有向图

DiGraph()

有自环

Grap(),DiGraph()

有重边

MultiGraph(), MultiDiGraph()

参考资源

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要绘制关联规则网络图,可以使用Pythonnetworkx库和matplotlib库。 首先,需要导入相关的库: ```python import networkx as nx import matplotlib.pyplot as plt ``` 然后,构建关联规则的有向: ```python G = nx.DiGraph() ``` 接着,添加节点和边: ```python G.add_node('A') G.add_node('B') G.add_node('C') G.add_node('D') G.add_edge('A', 'B', weight=0.8) G.add_edge('C', 'B', weight=0.6) G.add_edge('D', 'B', weight=0.5) G.add_edge('C', 'D', weight=0.4) G.add_edge('A', 'D', weight=0.3) ``` 其中,节点表示商品或者属性,边表示两个节点之间的关联规则,权重表示置信度或者支持度。 最后,绘制网络图: ```python pos = nx.spring_layout(G, seed=42) edges = G.edges() weights = [G[u][v]['weight'] for u,v in edges] nx.draw_networkx_nodes(G, pos, node_size=1000) nx.draw_networkx_edges(G, pos, width=weights) nx.draw_networkx_labels(G, pos, font_size=20, font_family='Arial') plt.axis('off') plt.show() ``` 这样就可以得到一个简单的关联规则网络图。你可以根据自己的需求调整节点大小、颜色、边宽度等参数,进一步美化形。 ### 回答2: Python中有多种绘库可以用于绘制关联规则网络图,如NetworkX和Graph-tool等。下面以NetworkX为例,简要介绍如何使用Python绘制关联规则网络图。 首先,我们需要导入NetworkX库: ```python import networkx as nx ``` 接下来,我们可以创建一个空的无向或有向: ```python G = nx.Graph() # 创建无向 G = nx.DiGraph() # 创建有向 ``` 然后,我们可以添加节点和边到中,以反映关联规则的元素和它们之间的关系: ```python G.add_node("A") # 添加节点A G.add_nodes_from(["B", "C", "D"]) # 添加多个节点 G.add_edge("A", "B") # 添加边(A, B) G.add_edges_from([("A", "C"), ("B", "C"), ("C", "D")]) # 添加多条边 ``` 接下来,我们可以使用绘函数将绘制出来: ```python nx.draw(G, with_labels=True) # 绘制,默认为Spring布局 # 使用其他布局绘制 nx.draw_random(G, with_labels=True) # 随机布局 nx.draw_circular(G, with_labels=True) # 圆形布局 nx.draw_spectral(G, with_labels=True) # 谱布局 ``` 最后,我们可以使用Matplotlib库展示绘制形: ```python import matplotlib.pyplot as plt plt.show() # 展示形 ``` 通过以上的步骤,我们可以使用Python中的NetworkX绘制关联规则的网络图。你可以根据实际需求,添加节点、边以及选择合适的布局进行绘制,以便更直观地展示关联规则的相关元素和它们之间的关系。 ### 回答3: Python可以用于绘制关联规则网络图。关联规则网络图是一种可视化工具,用于展示不同物品之间的关联关系。在绘制关联规则网络图的过程中,我们可以使用Python的相关库和工具来完成。 首先,我们可以使用Python的关联规则挖掘库,如mlxtend或pyfpgrowth,来从数据集中提取关联规则。这些库提供了一些常用的关联规则挖掘算法,如Apriori算法或FP-Growth算法。 然后,我们可以使用Python网络图绘制库,如NetworkX或graph-tool,来绘制关联规则网络图。这些库支持绘制各种类型的网络图括有向和无向。 首先,我们需要将提取的关联规则转换为的形式。我们可以将每个物品作为的节点,将关联规则中的两个物品之间的关联关系作为中的边。可以使用Python的数据结构来表示,例如使用字典来表示节点和边的关系。 然后,我们可以使用绘库中的函数和方法来可视化形。我们可以设置节点的样式和边的样式,如节点的大小、颜色和标签,边的粗细和颜色等。我们还可以使用布局算法来调整节点的位置,以便更清晰地显示网络图。 在绘制完关联规则网络图后,我们可以使用Python的交互式可视化库,如matplotlib或Plotly,将形保存为像文件或网页,以便在其他地方进行展示或分享。 总而言之,使用Python可以方便地绘制关联规则网络图。通过使用相关的数据挖掘和网络图绘制库,我们可以从数据集中提取关联规则,并使用合适的样式和布局来可视化这些规则的关联关系

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值