2014-07-18 2 views
2

나는그래프 가장자리를 기준으로 클러스터링을 수행하는 방법은 무엇입니까?

여기
x,y,6 
y,z,9 
y,p,5 
x,p,3 

, 문자 노드는 숫자는 가장자리이며, 다음으로 CSV있다. 그래프를 그렸습니다 :

Gph = nx.read_edgelist(filepath, delimiter=',', data=[('weight', int)]) 
G.edges(data=True) 

edge_labels = dict(((u, v), d['weight']) for u, v, d in Gph.edges(data=True)) 
pos = nx.random_layout(Gph) 
#pos = nx.pydot_layout(Gph) 
nx.draw(Gph, pos, with_labels=True) 
nx.draw_networkx_edges(Gph, pos, edge_color='b') 

plt.show() 

가장자리를 기준으로 노드를 클러스터하는 방법은 무엇입니까? 따라서 쌍은 클러스터의 요소가됩니다. x, y는 클러스터의 요소입니다.

+0

'Gph'와'G'를 바꾸는 것 같습니다. 이것에 대한 더 많은 코드가 있습니까? 당신이 우리에게 보여주지 않거나 또는 이것은 전사에서 나온 것입니까? – Brien

+0

@Brien 그냥 Gph ... 오타 .. 지금 업데이트했습니다. – Gworld

답변

1

nx.random_layout(Gph) 대신에 networkx에 의해 제공되는 spring_layout 알고리즘을 사용해보십시오. numpy이 설치되어 있어야하지만이 강제 알고리즘은 에지 가중치에 따라 노드를 클러스터링합니다.

다음은이 알고리즘에 대한 호출의 예입니다. 그러나 필요에 따라 매개 변수를 조정할 수 있습니다. 랜덤 레이아웃 선을이 선으로 대체하십시오.

pos = nx.spring_layout(Gph,scale=20) 
+0

spring_layout으로 해냈습니다. 하지만 어떻게 클러스터를 볼 수 있습니까? 클러스터가 표시되지 않도록 인쇄하고 싶습니다. – Gworld

+0

죄송합니다.이 작업을 수행 할 방법을 모르겠습니다. 내가 생각할 수있는 유일한 방법은이 알고리즘을 실행 한 다음 어느 노드가 서로 가깝고 어떤 노드가 서로 멀리 떨어져 있는지 살펴보고 보는 것입니다. – Brien

관련 문제