ValueError: s must be a scalar, or float array-like with the same size as x and y

이상해씨·2023년 6월 28일
0

에러

ValueError: s must be a scalar, or float array-like with the same size as x and y

상황

networkx로 네트워크 그래프를 그리는 상황.
그래프를 그리는 과정에서 발생
nx.draw_networkx_nodes

원인

node_sizes length와 G number of nodes 길이의 불일치

  • 불일치를 확인하는 코드
print("node_sizes length:", len(node_sizes))
print("G number of nodes:", len(G.nodes))

for node, size in zip(G.nodes, node_sizes):
    if size <= 0:
        print("Invalid node size detected:", node, size)

해결방법

1. 길이가 일치하지 않는 이유 확인

# related_words 딕셔너리의 키 값들과 G 그래프의 노드들을 확인

related_words_keys = set(related_words.keys())
graph_nodes = set(G.nodes())
print("Missing nodes in graph:", related_words_keys - graph_nodes)
print("Extra nodes in graph:", graph_nodes - related_words_keys)



# related_words 딕셔너리에서 빈도수가 0인 단어들을 확인

zero_frequency_words = [word for word, freq in related_words.items() if freq == 0]
print("Words with zero frequency:", zero_frequency_words)



# related_words 딕셔너리의 길이와 G 그래프의 노드 수 확인

print("Length of related_words:", len(related_words))
print("Number of nodes in G graph:", G.number_of_nodes())

1. Extra nodes in graph

  • related_words 딕셔너리에는 존재하지 않는 노드들을 G 그래프에서 발견한 경우를 의미
  • G 그래프에 존재하지만, related_words 딕셔너리에는 없는 노드. (G 존재O, dict X)

2. Missing nodes in graph

  • related_words 딕셔너리에는 존재하는 단어들 중에서 G 그래프에서 발견하지 못한 경우
  • related_words 딕셔너리에 있는 단어들 중 G 그래프에 포함되지 않은 노드. (G 존재 X, dict O)

3. Words with zero frequency

  • 빈도가 0인 단어들의 수

4. Length of related_words

  • dict의 길이

5. Number of nodes in G graph

  • G 그래프의 수

2. 길이 일치하지 않는 경우 해결

1. Extra nodes in graph

  • 불필요한 노드 제거
# 노드 제거 코드
unnecessary_nodes = [node for node in G.nodes() if node not in related_words.keys()]
G.remove_nodes_from(unnecessary_nodes)

# 제거 확인 코드
if len(G.nodes()) != len(node_sizes):
    print("Mismatch between graph nodes and node_sizes")

2. Missing nodes in graph

  • 누락된 노드 추가
# 누락된 노드 추가
missing_nodes = [node for node in related_words.keys() if node not in G.nodes()]
G.add_nodes_from(missing_nodes)

# 추가 확인 
if set(G.nodes()) != set(related_words.keys()):
    print("Mismatch between graph nodes and related_words")

3. Words with zero frequency

  • 빈도가 0인 단어 확인
words_with_zero_frequency = set(G.nodes()) - set(related_words.keys())
print("Words with zero frequency:", words_with_zero_frequency)
  • 빈도 0인 단어 빼고 추출
# 빈도수가 0인 단어를 제외한 related_words 추출
non_zero_words = {word: count for word, count in related_words.items() if count > 0}

4. Length of related_words

  • 길이 확인
if len(related_words) != len(G.nodes()):
    print("Mismatch between length of related_words and number of nodes in G graph")

5. Number of nodes in G graph

  • G 그래프의 수
# 빈도수가 0인 단어를 제외한 related_words 추출
non_zero_words = {word: count for word, count in related_words.items() if count > 0}

# 그래프의 노드와 크기(node_sizes) 간의 일치 확인
if len(G.nodes()) != len(node_sizes):
    print("Mismatch between graph nodes and node_sizes")

# 그래프의 노드와 빈도수(non_zero_words) 간의 일치 확인
if set(G.nodes()) != set(non_zero_words.keys()):
    print("Mismatch between graph nodes and non_zero_words")

참고

  • chatGPT
profile
공부에는 끝이 없다

0개의 댓글