>

compose ()를 사용하여 두 개의 그래프를 병합 한 후 GML 파일을 쓰려고 할 때 다음 오류 메시지가 나타납니다.

NetworkXError: 'user_id' is not a valid key

배경은 다음을 사용하여 두 개의 GML 파일을 가져 오는 것입니다.

g = nx.read_gml(file_path + "test_graph_1.gml")
h = nx.read_gml(file_path + "test_graph_2.gml")

각 GML 파일의 각 노드 파일은 다음과 같이 구성됩니다 :

node [
id 9
user_id "1663413990"
file "wingsscotland.dat"
label "brian_bilston"
image "/Users/ian/development/gtf/gtf/img/1663413990.jpg"
type "friends"
statuses 21085
friends 737
followers 53425
listed 550
ffr 72.4898
lfr 0.1029
shape "triangle-up"
]

각 파일을 가져온 후 모든 노드 속성을 확인할 수 있습니다. 각 그래프 내에서 노드가 고유한지 확인하십시오.

또한 NetworkX는 기본적으로 'id'필드를 버리고 'label'을 노드의 식별자로 사용합니다. 그것은 user_id 속성을 유지합니다 (이것은 Twitter user_id이며 내 목적에 잘 맞습니다).

실행 중

list(f.nodes(data=True))

위의 노드에 대한 데이터는 다음과 같습니다.

('brian_bilston',
{'ffr': 72.4898,
'file': 'wingsscotland.dat',
'followers': 53425,
'friends': 737,
'image': '/Users/ian/development/gtf/gtf/img/1663413990.jpg',
'lfr': 0.1029,
'listed': 550,
'shape': 'triangle-up',
'statuses': 21085,
'type': 'friends',
'user_id': '1663413990'})

이 테스트의 경우, 그래프 g와 그래프 h가 공유하는 공통 노드가 하나 있습니다. 다른 모든 사용자는 user_id 및 레이블로 고유합니다.

그런 다음 다음을 사용하여 두 그래프를 병합합니다 :

f = nx.compose(g,h)

이 작동합니다.

그런 다음 그래프를 사용하여 새로운 GML을 작성합니다. f :

nx.write_gml(f, file_path + "one_plus_two.gml")

이 시점에서 위의 오류가 발생합니다 :

 NetworkXError: 'user_id' is not a valid key

모든 user_id의 고유성을 확인했습니다 (복제 한 경우).

uid = nx.get_node_attributes(f,'user_id')
print(uid)

어느 출력 :

{'brian_bilston': '1663413990', 
'ICMResearch': '100', 
'justcswilliams': '200', 
'MissBabington': '300', 
'ProBirdRights': '400', 
'FredSmith': '247775851', 
'JasWatt': '160952087', 
'Angela_Lewis': '2316946782', 
'Fuzzpig54': '130136162', 
'SonnyRussel': '828881340', 
'JohnBird': '448476934', 
'AngusMcAngus': '19785044'}

(가독성을 위해 형식화 됨)

따라서 모든 user_id는 내가 말할 수있는 한 독특합니다.

따라서 키의 고유성에 대한 질문이 아니라면 오류는 무엇입니까?

나는 이것에 대한 나의 생각을 소진했다!

포인터가 있으면 대단히 감사하겠습니다!


  • 답변 # 1

    이 문제를 NextworkX GitHub 리포지토리에 게시하여 관리자가 답변했습니다.

    참조 : https://github.com/networkx/networkx/issues/3100

    아래에 그의 답변을 올렸습니다 :

    와이즈 비즈 와이즈 비즈      

    또한 설명서에 이에 대한 메모를 추가해야합니다.

    Yes -- this is a known issue: see #2131

    The GML spec doesn't allow underscores in attribute names. We allow reading .gml files that don't correspond to the official GML spec. But we write only items that follow the spec. You should convert your attribute names to not include the underscore.

  • 이전 javascript - 이 JSON 검색 코드가 작동하지 않는 이유는 무엇입니까?
  • 다음 ansible - 보다 복잡한 서버 범위를위한 디렉토리 구조