인공지능

📝 입소문 시뮬레이션 코드, 진짜 쉽게 이해하기!

존카터 2025. 7. 15. 16:42

이번엔 코딩을 잘 모르는 사람도 이해할 수 있도록 입소문 시뮬레이션 코드를 아주 쉽게 풀어볼게요. 하나씩 천천히!


1️⃣ NetworkX 라이브러리? 그게 뭐야?

네트워크는 **점(노드)**과 **선(엣지)**로 이루어진 그림이라고 생각하면 돼요.

  • 점(노드) → 사람
  • 선(엣지) → 친구 관계(연결)

networkx는 이런 네트워크 그림을 쉽게 그려주는 파이썬 도구예요.

G = nx.Graph()         # 네트워크(그래프) 틀 만들기
G.add_node('A')        # 사람 A 추가
G.add_edge('A', 'B')   # A와 B가 친구라서 연결!

➡️ 네트워크X를 쓰면 사람과 친구 관계를 손쉽게 표현할 수 있어요.


2️⃣ set(집합) 자료형이 왜 필요할까?

set중복 없이 모으는 상자라고 생각하면 돼요.

infected = {"P1"}   # 처음엔 1명만 소문을 앎
infected.add("P2")  # 소문 퍼져서 한 명 추가
  • 리스트([])랑 비슷하지만 같은 값이 두 번 안 들어감!
  • 그래서 “소문을 이미 들은 사람”을 저장할 때 완전 좋아요. 중복 걱정 NO!

3️⃣ random 모듈은 뭐지?

소문이 확률적으로 퍼진다고 했잖아요? 그 확률을 흉내 내주는 게 random이에요.

random.choice(list(G.nodes))  # 랜덤으로 한 명 뽑기!
random.random() < 0.3         # 30% 확률로 True

➡️ 이렇게 하면 현실처럼 운이 좋으면(확률) 소문이 퍼지고, 아니면 안 퍼지고를 표현할 수 있어요.


4️⃣ for 반복문은 왜 쓸까?

입소문은 시간이 지날수록 퍼지죠? 그래서 **시간 단계(t)**를 흘려보내면서 반복해야 해요.

for t in range(1, 11):
    # 1단계~10단계까지 소문 퍼뜨리기!

➡️ 매 단계마다 소문이 새로 퍼지는 걸 시뮬레이션할 수 있어요.


5️⃣ 리스트(list)로 기록 남기기!

소문이 얼마나 퍼졌는지 시간별 기록도 남겨야 그래프를 그릴 수 있어요.

spread_history = []
spread_history.append(len(infected))  # 지금 소문 아는 사람 수 저장

➡️ 이렇게 하면 t=1,2,3… 때 몇 명이 아는지 한눈에 볼 수 있어요.


6️⃣ matplotlib는 그림 도구!

  • 시계열 그래프: 시간별 소문 전파 속도 보기
  • 네트워크 그림: 친구 관계 + 소문 퍼진 사람 색칠
plt.plot(range(len(spread_history)), spread_history, marker='o')  # 시간 vs 소문자 수
plt.show()

nx.draw(G, pos, with_labels=True, node_color='red')  # 네트워크 그림

➡️ 복잡한 숫자 대신 한눈에 보이도록 그림으로 표현!


7️⃣ 전체 코드 흐름, 진짜 간단히!

  1. 사람 + 친구 관계 데이터 불러오기
  2. 네트워크X로 사람과 친구 관계 그리기
  3. 처음 소문 퍼진 1명 랜덤으로 선택
  4. for 반복문으로 시간 지나듯이 확산
  5. 확산된 사람 기록하고 그래프/네트워크로 보여주기

왜 이렇게 만들었을까?

  • networkx → 사람+친구 관계 쉽게 다룸
  • set → 소문 이미 들은 사람 중복 방지!
  • random → 현실처럼 확률적으로 퍼지게 함
  • for → 시간 단계별 시뮬레이션
  • list → 기록 남겨서 나중에 그래프 그리기 가능
  • matplotlib → 복잡한 데이터 대신 눈에 보이게!

이렇게 하면 비전문가도 소문 확산이 어떻게 흘러가는지 쉽게 이해하고, 코드를 따라갈 수 있어요.

다음엔 “왜 네트워크 구조에 따라 전파 속도가 달라질까?”를 쉽게 풀어볼게요!