이번엔 코딩을 잘 모르는 사람도 이해할 수 있도록 입소문 시뮬레이션 코드를 아주 쉽게 풀어볼게요. 하나씩 천천히!
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️⃣ 전체 코드 흐름, 진짜 간단히!
- 사람 + 친구 관계 데이터 불러오기
- 네트워크X로 사람과 친구 관계 그리기
- 처음 소문 퍼진 1명 랜덤으로 선택
- for 반복문으로 시간 지나듯이 확산
- 확산된 사람 기록하고 그래프/네트워크로 보여주기
왜 이렇게 만들었을까?
- networkx → 사람+친구 관계 쉽게 다룸
- set → 소문 이미 들은 사람 중복 방지!
- random → 현실처럼 확률적으로 퍼지게 함
- for → 시간 단계별 시뮬레이션
- list → 기록 남겨서 나중에 그래프 그리기 가능
- matplotlib → 복잡한 데이터 대신 눈에 보이게!
이렇게 하면 비전문가도 소문 확산이 어떻게 흘러가는지 쉽게 이해하고, 코드를 따라갈 수 있어요.
다음엔 “왜 네트워크 구조에 따라 전파 속도가 달라질까?”를 쉽게 풀어볼게요!
'인공지능' 카테고리의 다른 글
| 🎥 OpenCV : 이미지 속 사람 검출하기 (2) | 2025.07.18 |
|---|---|
| 🎥 OpenCV 입문: 이미지 & 동영상 데이터 불러오기 (6) | 2025.07.17 |
| 📢 입소문 확산 시뮬레이션: 네트워크와 시계열 변화까지! (1) | 2025.07.15 |
| 🚚 물류 최적 운송경로 계산 & 네트워크 가시화 (3) | 2025.07.14 |
| 💰 물류 운송비용 함수 작성 & 최적화 (4) | 2025.07.11 |