2017-12-05 25 views
0

특정 데이터 세트에서 팬더 데이터 프레임 객체를 얻었고이 df의 열 사이의 상관 관계를 계산했습니다.대칭 가중치 행렬을 순환하지 않고 무 방향성 가중 그래프로 변환 할 수있는 방법이 있습니까?

다음 단계는이 상관 행렬에서 가중치 그래프로 이동하는 것입니다. 여기서 가중치는이 행렬에서 가져옵니다.

나는 약 100 개의 데이터 세트가 있으므로,이 목적을 위해 루핑을 사용하지 않는 것이 좋습니다 (또는 현명한 방법으로 수행하십시오).

"stack()"명령의 주된 문제점은 그래프가 방향이 지정되고 [(x, y) : weight0] 및 [(y, x) : weight0] 가장자리를 모두 포함한다는 것입니다. 그 복제본을 없애고 싶습니다. 여기 내 코드는 지금까지 있습니다 :

import pandas as pd 
import numpy as np 
import networkx as nx 



df1 = df1.corr() 
links = df1.stack().reset_index() 
links.columns = ['var1', 'var2','value'] 
links = links.loc[(links['var1'] != links['var2'])] 
G = nx.from_pandas_dataframe(links, 'var1', 'var2', 'value') 
+0

'명령과 함께 가장 큰 문제 "스택()"이다 : 현재 위치에서 np.fill_diagonal 작품 것을주의 그래프 위의 두 줄 사이에 다음 코드를 삽입하기 전에 대각선 0을 만들고 싶어 그래프가된다. [(x, y) : weight0] 및 [(y, x) : weight0]' 그래프가 흐트러진 이유가 무엇인지 생각합니다. '[((x, y) : valueA]'와'[(y, x) : valueB]'가 다르다면 x에서 y로 x에서 x로 갈 때 비용이 달라진다는 것을 의미합니다. 그 weight0 값을 가진 하나의 링크로 볼 수 있습니다. 이것은 무향이고 가중치가있는 그래프입니다. – alseether

+0

더 중점도 측정을 계산할 계획입니다.이 중복 정보는 계산 시간을 상당히 증가시킬 것이므로 이 "중복"을 제거하십시오. –

답변

0

당신은 상관 dataframe에서 더 직접적으로 갈 수 networkx하기 위해 (정말의 트림 단지 사각형 NumPy와 배열 인) :

correlation_matrix = df1.corr().values 
G = nx.from_numpy_matrix(correlation_matrix,create_using=nx.DiGraph()) 

당신이 경우

import numpy as np 
np.fill_diagonal(correlation_matrix, 0) 
+0

상관 행렬이 인접 행렬로 취해지기 때문에이 경우 그래프는 비 가중치가 적용됩니다. 상관 행렬을 가중치 그래프 –

+0

으로 변환하는 방법을 찾고있었습니다. https://networkx.github.io/documentation/networkx-1.7/reference/generated/networkx.convert.to_numpy_matrix.html "매트릭스 항목 웨이트 에지 속성이 지정됩니다. " –

+0

하지만 여기에는 from_numpy_matrix가 사용됩니다 (to_numpy_matrix는 링크를 보내 셨습니다). "weight"속성이 없습니다. 이런 식으로하면 좋을 것 같습니다. –