기본 적인 그래프 생성 및 수치 값 확인 코드
# -*- coding: utf-8 -*-
import networkx as net
import networkx.algorithms as algo
import matplotlib.pyplot as plt
import pprint # pprint.pprint 사용을 위한 import
g = net.balanced_tree(2,3) # 이 부분에서 각 그래프의 이름과 매개변수를 지정하면 그래프가 변합니다.
net.draw(g)
plt.show()
print "radius : %d" % algo.radius(g) # 이하 수치 값들은 algo. 호출 뿐 아니라 net. 호출로도 가능합니다.
print "diameter : %d" % algo.diameter(g) # 각 그래프 별 edge 혹은 node를 갖지 않는 그래프는 radius등의 값이 불러지
# 지 않습니다. 실행이 안되기 때문에 주석처리 혹은 삭제후 실행합니다.
# 코드 파일 실행 외에 직접 실행 명령어 입력시에는 알아서....
print "center nodes : %s" % algo.center(g)
print "periphery nodes : %s" % algo.periphery(g)
print "Clustering Coefficient"
pprint.pprint(algo.clustering(g), indent=3) #pprint.pprint 는 pretty print 의미로 indent값 만큼의 들여쓰기 정렬됩니다.
print "Average Clustering Coefficient : %s" % algo.average_clustering(g)
balanced_tree (2,3) 앞 : 자식노드수 뒤 : 트리의 높이 |
|
radius : 3 diameter : 6 center nodes : [0] periphery nodes : [7, 8, 9, 10, 11, 12, 13, 14] Clustering Coefficient { 0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0, 5: 0.0, 6: 0.0, 7: 0.0, 8: 0.0, 9: 0.0, 10: 0.0, 11: 0.0, 12: 0.0, 13: 0.0, 14: 0.0} Average Clustering Coefficient : 0.0 |
barbell_graph (3,1) 앞 : 완전그래프의 노드 수 뒤 : 사이를 연결하는 노드 |
|
radius : 2 diameter : 4 center nodes : [3] periphery nodes : [0, 1, 5, 6] Clustering Coefficient { 0: 1.0, 1: 1.0, 2: 0.3333333333333333, 3: 0.0, 4: 0.3333333333333333, 5: 1.0, 6: 1.0} Average Clustering Coefficient : 0.666666666667 |
complete_graph (5) 완전 그래프의 노드 수 |
| radius : 1 diameter : 1 center nodes : [0, 1, 2, 3, 4] periphery nodes : [0, 1, 2, 3, 4] Clustering Coefficient { 0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0, 4: 1.0} Average Clustering Coefficient : 1.0 |
complete_bipartite _graph (4,2) 앞 조건의 노드들이 뒷 조건의 노드들과 전부 연결 |
| radius : 2 diameter : 2 center nodes : [0, 1, 2, 3, 4, 5] periphery nodes : [0, 1, 2, 3, 4, 5] Clustering Coefficient { 0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0, 5: 0.0} Average Clustering Coefficient : 0.0 |
circular_ladder _graph (5) n개로 cycle생성 후 옆에 같은 쌍을 생성 |
|
radius : 3 diameter : 3 center nodes : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] periphery nodes : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Clustering Coefficient { 0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0, 5: 0.0, 6: 0.0, 7: 0.0, 8: 0.0, 9: 0.0} Average Clustering Coefficient : 0.0 |
cycle_graph (5) n개의 노드를 원으로 연결 |
| radius : 2 diameter : 2 center nodes : [0, 1, 2, 3, 4] periphery nodes : [0, 1, 2, 3, 4] Clustering Coefficient { 0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0} Average Clustering Coefficient : 0.0 |
dorogovtsev_ goltsev _mendes_graph (3) Dorogovtsev-Goltsev-Mendes Graph |
|
radius : 2 diameter : 3 center nodes : [0, 1, 2] periphery nodes : [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] Clustering Coefficient { 0: 0.25, 1: 0.25, 2: 0.25, 3: 0.5, 4: 0.5, 5: 0.5, 6: 1.0, 7: 1.0, 8: 1.0, 9: 1.0, 10: 1.0, 11: 1.0, 12: 1.0, 13: 1.0, 14: 1.0} Average Clustering Coefficient : 0.75 |
empty_graph (5) n개의 노드와 0개의 엣지 그래프 |
| radius : None diameter : None center nodes : None periphery nodes : None Clustering Coefficient {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0} Average Clustering : 0.0 |
grid_2d_graph (3,2, True) grid_graph에서 와 같은 의미에서 3번째 매개변수에 True를 주게되면 그 각자 이웃들과연결 되는 그래프 |
| radius : 2 diameter : 2 center nodes : [(0, 1), (0, 0), (2, 1), (2, 0), (1, 0), (1, 1)] periphery nodes : [(0, 1), (0, 0), (2, 1), (2, 0), (1, 0), (1, 1)] Clustering Coefficient { (0, 0): 0.3333333333333333, (0, 1): 0.3333333333333333, (1, 0): 0.3333333333333333, (1, 1): 0.3333333333333333, (2, 0): 0.3333333333333333, (2, 1): 0.3333333333333333} Average Clustering Coefficient : 0.333333333333 |
grid_graph ([3,2]) n*n 형의 격자판 그래프 |
radius : 2 diameter : 3 center nodes : [(1, 0), (1, 1)] periphery nodes : [(0, 1), (0, 0), (2, 1), (2, 0)] Clustering Coefficient { (0, 0): 0.0, (0, 1): 0.0, (1, 0): 0.0, (1, 1): 0.0, (2, 0): 0.0, (2, 1): 0.0} Average Clustering Coefficient : 0.0 | |
hypercube_graph (3) 한 노드가 n개의 엣지를 가지는 4차원 입체 도형 그래프 |
|
radius : 3 diameter : 3 center nodes : [(1, 1, 0), (0, 1, 1), (1, 0, 0), (0, 0, 1), (1, 0, 1), (0, 0, 0), (0, 1, 0), (1, 1, 1)] periphery nodes : [(1, 1, 0), (0, 1, 1), (1, 0, 0), (0, 0, 1), (1, 0, 1), (0, 0, 0), (0, 1, 0), (1, 1, 1)] Clustering Coefficient { (0, 0, 0): 0.0, (0, 0, 1): 0.0, (0, 1, 0): 0.0, (0, 1, 1): 0.0, (1, 0, 0): 0.0, (1, 0, 1): 0.0, (1, 1, 0): 0.0, (1, 1, 1): 0.0} Average Clustering Coefficient : 0.0 |
ladder_graph (5) 길이가 n개인 사다리 모양의 그래프 |
|
radius : 3 diameter : 5 center nodes : [2, 7] periphery nodes : [0, 4, 5, 9] Clustering Coefficient { 0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0, 5: 0.0, 6: 0.0, 7: 0.0, 8: 0.0, 9: 0.0} Average Clustering Coefficient : 0.0 |
lollipop_graph (5, 3) (사탕!?) 앞 : n개의 완전그래프를 이룬다 뒤 : n개의 막대를 이룬다 |
radius : 2 diameter : 4 center nodes : [5] periphery nodes : [0, 1, 2, 3, 7] Clustering Coefficient { 0: 1.0, 1: 1.0, 2: 1.0, 3: 1.0, 4: 0.6, 5: 0.0, 6: 0.0, 7: 0.0} Average Clustering Coefficient : 0.575 |
|
null_graph no nodes no edges |
|
radius : None diameter : None center nodes : None periphery nodes : None Clustering Coefficient { } Average Clustering : None |
path_graph (5) n개의 노드를 일렬로 정렬 그래프 |
|
radius : 2 diameter : 4 center nodes : [2] periphery nodes : [0, 4] Clustering Coefficient { 0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0} Average Clustering Coefficient : 0.0 |
star_graph (5) 한개의 센터노드를가지고 n개의 아웃 노드를 가지는 그래프 |
|
radius : 1 diameter : 2 center nodes : [0] periphery nodes : [1, 2, 3, 4, 5] Clustering Coefficient { 0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0, 5: 0.0} Average Clustering Coefficient : 0.0 |
trivial_graph one node no deges |
|
radius : None diameter : None center nodes : None periphery nodes : None Clustering Coefficient { 0: 0.0 } Average Clustering : 0.0 |
wheel_graph (5) 1개의 센터 노드가 n-1 개의 cycle 그래프에 연결되는 그래프 | |
radius : 1 diameter : 2 center nodes : [0] periphery nodes : [1, 2, 3, 4] Clustering Coefficient { 0: 0.6666666666666666, 1: 0.6666666666666666, 2: 0.6666666666666666, 3: 0.6666666666666666, 4: 0.6666666666666666} Average Clustering Coefficient : 0.666666666667
|
Jeong |
Networkx 에서의 기본적으로 지원되는 그래프들이 어떤 것이며 매개변수로 어떤것을 넣었을 시에 자신이 원하는 그래프를 그릴수 있는지 알고 있다면 모든 노드 엣지들을 번거롭게 추가하는 수고스러움을 덜 수 있기에 알아두면 좋을 것 같다. center nodes 와 periphery nodes 의 정의에 의하여 눈으로 보기에 많은 edges를 보유하고 있다고 하여도 센터노드라 볼수 없는 경우가 있으며 얼마없는 edges를 가지고 있어도 주변 모든 다른 노드들까지의 거리로 인하여 센터노드가 될 수 도 있다. 한 그래프 안에 서로 다른 edges를 가지고 있다 하여도 센터가 될수도 아닐수도 있다. Clustering Coefficient 값은 자신과 이웃 노드들이 완전 그래프에 가까워 질 수록 값이 높아진다. 완전 그래프일시에 값 : 1 Clustering Coefficient 는 내 주변 이웃노드들이 서로를 잘 아는가에 대한 값이며 노드 자신의 중요도에 대한 수치 값은 아니지만, 실제 생활에서 예로 들시에는 다같이 모여서 많은 사람이 즐길 수 있는 많은 친구들을 알고 있다는 것으로 보면 좋은 수치 값으로 생각된다. center nodes : 그래프의 radius와 같은 eccentricity를 가진 노드 periphery nodes : 그래프의 diameter과 같은 eccentricity를 가진 노드 eccentricity : 노드 v의 그래프 안에서 다른 모든 노드들로의 최단경로 거리중 가장 큰 값 eccentricity의 수치는 주어진 그래프 안에서의 위치가 중간 쪽인가 바깥 쪽인가를 나타내는 수치로 값이 작아 중간에 있다고 하여 중요하다까지의 판단은 옳지 않을 경우가 있을 수 있다고 생각한다. |
Shin |
NetworkX 의 제공 해주는 다양한 그래프들에 대해서 학습할 수 있었으며, 참고한 사이트를 통해 필요한 그래프를 어렵지 않게 찾고 사용할 수 있을 것 같다.
radius, diameter , center node, periphery node 와 같이 매번 눈으로보고 확인하고 구해내기 어려운 것들을 간단하게 구할 수 있는 NetworkX는 참 유용하였고 우리가 계속 공부해야할 커다란 소셜 네트워크를 분석하는 부분에서 더욱 유용하게 사용할 수 있는 모듈인 것 같다. 원래 배웠던 내용을 다시한번 복습하는 계기가 된 것 같다. 살짝 헷갈렸던 coefficient 값에 대한 개념을 다시 잡을 수 있었다. 이 값도 함수 하나로 쉽게 구해질 수 있어서 이 모듈의 중요성을 다시한번 생각하게 되었다. 하지만 이 모듈에 없었던 Average Clustering coefficient 값을 구하는 것이 그리 어렵지 않았는데 이도 구할 수 있는 함수가 어디 하나 구현 되어 있었다면 더 편하게 사용할 수 있을 것 같다는 생각을 했다. eccentricity 값을 이용하여 그래프의 radius와 같은 eccentricity 를 가진노드, diameter와 같은 eccentricity를 가진 노드를 구할 수 있었고, 그것으로 center node와 periphery node 를 구한 다는 것이 잘 이해가 안됬었는데 이번 과제를 통해 확실하게 이해를 할 수 있었다. 이번 과제를 하면서 그래프 하나하나의 모양, 다양한 값들을 알게되어, 앞으로 다양한 소셜네트워크를 분석하는데 많은 도움이 될 수 있을 것 같다. |
'Python' 카테고리의 다른 글
python 디렉토리(폴더) 안애 파일 목록 불러오기 (0) | 2013.04.04 |
---|---|
python 스트링 값 비교 ( string compare) (0) | 2013.04.04 |
Twitter, Facebook 소셜 그래프 특성 분석 (0) | 2013.03.28 |
Python 한글 인코딩 에러 (0) | 2013.03.17 |
python networkx gragh 안에 메소드 추가해보기( jaccard, cosine ) (0) | 2013.02.26 |