Data & ML & AI/NetworkX
-
[NetworkX] 경로의 개념, 가장 짧은 경로 찾기Data & ML & AI/NetworkX 2022. 11. 1. 23:02
그래프를 그리고 나서 가장 유용하게 활용하는 방법 중 하나는 노드 간 거리를 활용하는 방법입니다. 어떤 노드가 가장 멀리 있는 노드인지, 이쪽 노드에서 저쪽 노드까지 얼마나 먼지를 계산할 수 있습니다. 그러러면 먼저 몇 가지 개념을 익혀야 하겠습니다. 경로 Path 단순히 선(엣지)에 의해 연결된 노드들의 순서를 의미함 X노드에서 Y노드로 가는 경로의 수는 다양함 예시) A에서 H로 가는 경로 A-B-C-E-H A-B-C-F-E-H A-K-B-C-F-E-H .... 경로의 길이 Path length 몇번 건너가면 도착하는가 즉, 몇개의 엣지로 이루어져 있는가 A-B-C-E-H (길이: 4) A-B-C-F-E-H (길이: 5) 노드 간의 길이 Distance between two nodes 노드 간 길이 ..
-
[NetworkX] Assignment 1 - Creating and Manipulating GraphsData & ML & AI/NetworkX 2022. 10. 30. 03:47
본 게시물은 Coursera의 Applied Social Network Analysis in Python(by Daniel Romero)를 통해 자습하며 작성한 게시물입니다. 이 Assignment는 Coursera Jupyter 콘솔에서만 제대로 진행할 수 있습니다. (데이터 파일을 따로 제공하지 않기 때문입니다.) 개괄 원본 Eight employees at a small company were asked to choose 3 movies that they would most enjoy watching for the upcoming company movie night. These choices are stored in the file `Employee_Movie_Choices.txt`. A secon..
-
[NetworkX] Projected Graph 투영그래프 (Bipartite Graph 활용)Data & ML & AI/NetworkX 2022. 10. 28. 01:33
Projected Graph 투영 그래프 X, Y 집단(set)로 이루어진 Bipartite Graph에서, X나 Y 둘 중 하나의 집단을 기준으로 투영한 그래프를 Projected Graph라고 합니다. 여기서 투영(projection)이란, 두개의 집단으로 나누어져 있어 복잡한 그래프(a)의 정보를 (b)나 (c)처럼 압축하는 과정을 의미합니다. 기존의 그래프가 (X1)-(Y1)-(X2), (X2)-(Y4)-(X4) 와 같은 형식이였다면, 중간의 Y집단을 생략하고 (X1)-(X2), (X2)-(X4)와 같이 정보를 단순화 시키는 겁니다. 같은 집단 내부에서도 서로 가깝고 먼 노드들이 있을텐데, 노드 간의 관계를 파악하기에 유용합니다. import networkx as nx from networkx.a..
-
[NetworkX] Bipartite Graph(양분 그래프) 그리기Data & ML & AI/NetworkX 2022. 10. 27. 23:18
샘플 Bipartite 그래프 생성 import networkx as nx from networkx.algorithms import bipartite X = set([1,2,3,4,5,6,7,8]) Y = set(['A','B','C','D','E','F']) B = nx.Graph() B.add_nodes_from(X, bipartite=0) B.add_nodes_from(Y, bipartite=1) B.add_edges_from([ (1,'A'),(1,'B'),(2,'A'),(2,'B'),(2,'D'),(3,'C'),(3,'E'),(4,'A'),(4,'D'), (5,'C'),(5,'E'),(6,'C'),(6,'F'),(7,'E'),(7,'F'),(8,'E') ]) 일반적인 그래프 그리기(비교용) nx..
-
[NetworkX] 양분그래프, Bipartite Graph (파이썬 네트워크 분석 9)Data & ML & AI/NetworkX 2022. 10. 22. 22:33
Bipartite Graph(양분그래프, 이분그래프) 요약 두개의 노드 집합으로 나누어지는 그래프 모든 엣지는 서로 다른 집합에 속한 노드끼리의 연결만으로 이루어진 그래프 즉, 같은 집합에 속한 노드끼리 엣지가 연결된 경우가 전혀 없는 그래프 from networkx.algorithms import bipartite 로 사용 가능 양분그래프란, 노드들이 두개의 집합으로 나누어지는 그래프를 의미합니다. 위의 사진 예시를 보죠. 두개의 집단이 있습니다. 오른쪽(R) 집단에는 농구팀 노드들이, 왼쪽(L) 집단에는 팬들이 있습니다. 모든 엣지는 [팬-팀(L-R)] 관계를 나타냅니다. 여기서 중요한건, L-R 관계가 아닌 엣지는 하나도 없다는 것입니다. L-L 관계와 R-R 관계인 엣지가 하나도 없습니다. 팬1이..
-
[NetworkX] 노드에 속성 부여하는 방법 (파이썬 네트워크 분석 8)Data & ML & AI/NetworkX 2022. 10. 16. 18:52
엣지에 속성을 부여하는 방법이 간단했던 것처럼, 노드에 속성을 부여하는 방법 또한 간단합니다. 1. 속성 부여하기 : G.add_node(), G.add_nodes_from() # 그래프 생성하기 G = nx.Graph() family = [('A','B',6),('E','J',15)] friend = [('B','C',13),('G','F',9)] coworker = [('C','F',21),('D','E',2),('E','I',10),('I','J',3),('E','H',9)] neighbor = [('C','E',25)] G.add_weighted_edges_from(friend, relation='family') G.add_weighted_edges_from(friend, relation='fri..
-
[NetworkX] add_edges_from의 사용방법Data & ML & AI/NetworkX 2022. 10. 14. 20:24
G.add_edge는 엣지 하나하나를 정의하기엔 편하지만, 한번에 여러개의 엣지를 정의하기엔 불편합니다. 때문에 NetworkX는 add_edges_from과 add_weighted_edges_from을 지원합니다. 각 노드의 속성으로 가중치값만 가지는 weight Graph라면 add_weighted_edges_from을 사용하는 것이 더 편리하겠지만, 2개 이상의 여러 속성들을 가진다면 add_edges_from을 쓰는것이 더 나을 수 있습니다. 그런데 멀티그래프(MultiGraph, 다중그래프)일때와 아닐때 사용방법에 차이가 조금 있습니다. 1. MultiGraph가 아닌 경우 : Graph(), DiGraph() 참조 : Graph.add_edges_from() 공식문서 # 공식문서 중 일부 발췌..
-
[NetworkX] 멀티그래프 데이터 읽기 (파이썬 네트워크 분석 7)Data & ML & AI/NetworkX 2022. 10. 12. 00:06
이전 글에서는 일반적인 무방향 그래프(nx.Graph())와 방향그래프(nx.DiGraph())의 데이터를 읽는 방법을 살펴보았습니다. https://brain-nim.tistory.com/48 다중그래프 (nx.MultiGraph(), nx.MultiDiGraph())에서는 아주 조금 다른 점이 있습니다. 일단 아래사진 우측의 그래프를 생성한 뒤 이어가겠습니다. (여기서는 nx.MultiDiGraph()를 예시로 합니다.) # 하지만 타자가 귀찮기 때문에 A~G 노드끼리 연결된 엣지만 작성했습니다. G = nx.MultiDiGraph() family = [('A','B',{'weight':6})] friend = [('A','B',{'weight':18}),('C','B',{'weight':13}),(..