复杂网络分析——networkx的使用

1. 基本图操作

导包
import networkx as nx
import matplotlib.pyplot as plt
建立一个空的无向图G
G = nx.Graph()     # DiGraph() 有向图
添加一个节点a
G.add_node('a')
加点集合
G.add_nodes_from(['b','c','d','e'])    
加边
G.add_edge('a','b')
G.add_edges_from([('b','c'),('a','d')])

2. 其他方法

1.节点数量
print("01. 图G的节点数:",G.number_of_nodes()) 
2. 输出全部的节点
print("02. 图G的全部节点:",G.nodes())  
3. 输出全部的边
print("03. 图G的全部边:",G.edges())
4. 输出边的数量
print("04. 图G的边数:",G.number_of_edges())  
5. 检查节点n是否在G中,如在,返回true。
print("05. 节点n是否在G中:", 'n' in G)  
6. 图中各节点的度
print("06. 图G的各节点的度:",nx.degree(G))
7. 图中单个节点的度
print("07. 节点a的度:",nx.degree(G,'a'))
8. 图G的度频率
print("08. 图G的度频率:",nx.degree_histogram(G))
9. 图G的密度 [无向]:d = 2m/n(n-1) [有向]:d=m/n(n-1)
print("09. 图G的密度:",nx.density(G))
10. 图G的信息
print("10. 图G的信息:",nx.info(G))
11. 返回删除所有边的图G的副本
G_1 = nx.create_empty_copy(G)
12. 判断图G是否是有向图
print("12. 图G是否是有向图:",nx.is_directed(G))
13. 返回无向图G的 有向图视图
G_2 = nx.to_directed(G)
14. 返回有向图G的 无向图视图
G_3 = nx.to_undirected(G_2)
15. 图G是否是空图,即图G是否无边
print("15. 图G是否没有边:",nx.is_empty(G))
16. 给图G 添加/设置 中心节点,中心节点与其他节点序列均有边相连,序列中第一个节点为中心节点
G_4 = nx.Graph()  
nx.add_star(G_4,['a','c','b','e','d'])
G_4.add_node('f')
G_4.add_edge('f','c')
17. 给图G 添加/设置 一条路径,路径顺序为节点序列顺序
G_5 = nx.DiGraph()  # 有向图
nx.add_path(G_5,['a','b','c','d','e'])
18. 给图G 添加/设置 环
G_6 = nx.DiGraph()  # 有向图
nx.add_cycle(G_6,['a','b','c','d','e'])
19. 子图
G_7 = nx.subgraph(G_6,['a','b','c'])
20. 图G 去掉特定点和边
G_8 = nx.cycle_graph(['a','b','c','d','e'])   # 产生一个无向环
G_8 = nx.restricted_view(G_8, ['e'], [('c', 'd'), ('a', 'b')])
21. 图G 改变所有边的方向
G_9 = nx.DiGraph()
nx.add_path(G_9,['a','b','c','d','e'])
G_9 = nx.reverse_view(G_9)
22. 图G 返回由指定边组成的子图
G_10 = nx.path_graph(['a','b','c','d','e'])
G_10 = G_10.edge_subgraph([('b', 'c'), ('d', 'e')])
23. 邻居节点
print("23. 星型图G_4中心节点a的邻居节点",list(nx.neighbors(G_4,'a')))
24. 非邻居节点
print("24. 星型图G_4中心节点a的非邻居节点",list(nx.non_neighbors(G_4,'a')))
25. 共同邻居节点
G_11 = nx.complete_graph(['a','b','c','d','e'])  # 完全图
print("25. 节点a和节点c的 共同邻居节点",list(nx.common_neighbors(G_11,'a','c')))
26. 返回图中不存在的边
G_12 = nx.create_empty_copy(G_11) # 将完全图中的边全部去掉
print("26. 图G_12中不存在的边:",list(nx.non_edges(G_12)))
27. 返回图中自环的边
G_13 = nx.MultiDiGraph() # or Graph, DiGraph, MultiDiGraph, etc
G_13.add_nodes_from(['a','b'])    
G_13.add_edge('a', 'a')
G_13.add_edge('a', 'b')
print("27. 图G_13中存在自环的边:",list(nx.selfloop_edges(G_13)))
28. 图中自环的数量
print("28. 图G_13中自环的数量:",nx.number_of_selfloops(G_13))
29. 图中存在自环的节点
print("29. 图G_13中存在自环的节点:",list(nx.nodes_with_selfloops(G_13)))
30. 判断是否存在加权边
G_14 = nx.DiGraph()
G_14.add_edge('a', 'b', weight=1)
print("30. 图G_14是否存在有权边:",nx.is_weighted(G_14))
31. 判断是否存在权值为负的边
G_15 = nx.DiGraph()
edges = [("a", "b", 3), ("b", "c", -5), ("c", "d", -2)]
G_15.add_weighted_edges_from(edges)
print("31. 图G_14是否存在权值为负的边:",nx.is_negatively_weighted(G_15))
32. 判断是否路径是否存在
print("32. 图G_4中是否存在c-a-b的路径:",nx.is_path(G_4,['c','a','b']))
33. 计算指定路径的权值
print("31. 图G_15中a-d路径的权值:",nx.path_weight(G_15,['a','b','c','d'],'weight'))
34. ER随机图 【fast_gnp_random_graph /// erdos_renyi_graph 】
G_er = nx.fast_gnp_random_graph(n=10, p=0.35, directed=True)   # n:节点个数    p: 边存在的概率   directed: 是否有向图  
35. WS小世界网络
G_ws = nx.watts_strogatz_graph(n=10, k=4, p=0.21) # n:节点个数    k: 与附件k个节点相连   p: 随机重连概率
36. BA无标度网络
G_ba = nx.barabasi_albert_graph(n=300, m=1)  # n:节点个数   m: 新节点连接到现有节点的边数

你可能感兴趣的:(复杂网络,networkx,复杂网络,网络分析)