-
Notifications
You must be signed in to change notification settings - Fork 0
/
1.1 networkx Basics
69 lines (58 loc) · 4.39 KB
/
1.1 networkx Basics
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# networkX 的基础性质
*networkX提供了很多处理network的函数,我需要知道的是networkX如何input 网络信息,并且知道哪些函数来处理这些网络信息;在这之前,先看下networkX的基本函数*
## networkX的一些基本函数
### node and edge attributes
-*how to access edge attributes*
` import networkx as nx
G = nx. Graph() # 生成Graph类的对象,G
G.add_edges('A','B', weight=6, relation='family')
G.add_edges('B','C', weight=13, relation='friend') # 输入了A-B-C点组成的edges,以及edges所拥有的属性
# to get list of all edges
G.edges() # 用G的edges()方法获得edges的部分信息-这里没有参数输入,返回值是形成edges的点组成的元组对,并通过list返回
[('A','B'),('C','B')]
# to get list of all edges with attributes
G.edges(data=True) # 用G对象的edges()方法,并设置参数-获得edges的相关属性,这里data=True, 表示得到edges的所有属性。返回的格式还是list; 其中每个edge都是一个元组对;元组对中包括两个信息:一是edge的nodes以及edge的属性,属性统一用字典格式返回
[('A','B',{'relation': 'family', 'weight': 6}),('C','B',{'relation:'friend', 'weight': 13})]
# to get list of all edges with certain attribute 'relation'
G.edges(relation=True) # 还是用G的edges()方法,返回值还是list, list中还是以元组对表示edge的信息,每个元组包含我们access的信息,这里参数是relation=True,表示我们提取的信息是 edge的relation属性
[('A','B','famliy'),('C','B','friend')] # 由于参与已经规定了relation属性,返回的元组中就是字典的value, 并且不需要key(relation),因此,元组中属性就不再以字典返回属性
# to get attributes of particular edge
G.edge['A']['B'] 因为G的edge信息是list, 这里索引方法还是用中括号索引。索引方法是按照nodes来索引edge属性
# 因为networkX中edges属性是字典储存的,因此返回值一定是字典
{'relation':'family', 'weight':6}
# to get the weight of certain edge (B,C)
G.edge['B']['C']['weight'] ## 返回字典中的value
13 '
-*how to access node attributes*
> The nodes can also have a particular attribute
node 主要储存的信息是产生edges的对象的信息,这些信息和edges属性一样,以字典格式储存、索引
` >>> import networkx as nx
>>> G = nx.Graph()
>>> G.add_edges('A', 'B', weight=6, relation='family')
>>> G.add_edges('C', 'B', weight=13, relation='friend')
>>>
>>> G.add_node('A', role='trader')
>>> G.add_node('B', role='trader')
>>> G.add_node('C', role='manager')
>>>
>>> # To get list of all the nodes
>>> G.nodes() # 返回值是list,因为是node 因此不需要元组格式
['A', 'C', 'B']
>>>
>>> # To get list of all the nodes with attributes
>>> G.nodes(data=True) # 返回还是list, 其中node的属性以字典格式返回
[('A', {'role': 'trader'}), ('C', {'role': 'manager'}), ('B', {'role': 'trader'})]
>>>
>>> # To get attribute for a particular Node
>>> G.node['A']['role'] #对特定点属性的索引
'trader'
'
## networkX的一些基本函数的应用:Bipartite Graph
> Bipartite Graphs - a graph is a bipartite graph if it has two sets of nodes which we call L and R, and every single edge connects a node from L to R
> So, no edge connects a node from L to another node in L, and no edge connects a node in R to another node in R
Bipartite Graph是一类特殊性质的网络图,他是分割的set形成是网络。对我来讲,似乎不太重要。这里就省略关于bipartite的函数的介绍。
***
*可以看出,networkX提供的基本方法,可以用于构建、所以网络;主要的信息储存在nodes & edges 当中;多我来说,我们关注的现象一般会用一些本身的属性(node属性,比如资产规模,地址等)*
*还有一些更重要的信息是edges上的信息,这些各种link\connection\dependecy所形成的edge才是更重要的信息,这些信息都是以edges属性的方法储存在字典当中;那么问题是如何将这些信息输入到edge和node的字典当中*
*一般不会一个一个输入这些input,因为我们关注的现象必然是规模庞大的,这并不适合手动输入;那么问题是如何获得这些node和edge的信息*
*并且把这些信息构建成一个networkX能够识别的文件*