파이썬에서 networkx 패키지를 쓰다보면 그래프를 파일로 출력해야 할 때가 많습니다. 예전에는 pajek파일 형식(.net)으로 뽑았는데요. 이 형식에는 꽤 제약이 많은 것 같습니다. 무엇보다도 node의 id를 새로 정의해서 edgelist에 사용하기 때문에 상당히 헷갈리기 쉽지요.


그래서 저는 gexf 형식을 즐겨씁니다. 이 형식은 그래프를 위한 xml이라고 하는데요. 파일 용량이 조금 커지긴 하지만 그냥 에디터에서 읽어도, gephi에서 읽어도 모두 직관적으로 사용할 수 있습니다.


그러나 문제가 있는데 G[1]['class'] = "A" 등과 같이 attribute를 정해준 뒤에 gexf로 출력하라고 하면 다음과 같은 문제가 생깁니다. 


AttributeError: 'str' object has no attribute 'copy' 

에러의 발생위치는 write_gexf 함수.... -.-!!!!!


이를 해결하는 방법은 구글링하면 나오는데 생각보다 쉽습니다. Attribute를 정해줄 때 다음과 같이 해야합니다. 

(x) G[1]['class'] = "A"

(o) G.node[1]['class'] = "A"


두번째 방법으로 G.node를 직접 써주어야 합니다.


출처: https://groups.google.com/forum/#!msg/networkx-discuss/Irx4j6G-srs/yR8GFtMmQB8J

NetworkX 를 사용하다가 문득 확인해봤다.


혹시 아니면 어쩌지...하면서!


G = DiGraph() 로 네트워크 인스턴스를 생성 후에 다음과 같이 두 개의 링크를 추가해보았다.


>>>G.add_edge(1,2)

>>>G.add_edge(1,3)


그리고 나서 확인!

>>> G.in_edges(1)

[]

>>>G.out_edges(1)

[(1, 2), (1, 3)]


즉, G.add_edge(u,v)는 u -> v 인 방향의 링크를 만들어준다. 따라서 G[u][v]역시 u->v 인 링크의 attribute를 보여준다.

'Study > Computer' 카테고리의 다른 글

MS Word가 갑자기 비정상적으로 종료될 때  (0) 2013.10.01
골치덩어리 unicode와 UTF-8  (1) 2013.09.23
연속된 숫자 뭉치를 뽑아내기.  (1) 2013.09.04
Amazon EC2 사용하기  (0) 2013.08.27
BeautifulSoup4 사용하기  (0) 2013.08.23

+ Recent posts