본문 바로가기
Graphy

그래프 만들고, 연결하기

by double-step 2023. 6. 23.
728x90
반응형
SMALL

이전까지는 그래프에 대한 이론을 설명하였다.

이번에는 이러한 이론을 바탕으로 그래프를 실제로 만들고 연결해보아야 한다.

 

코딩으로 옮기기전에 텍스트 파일을 미리 준비하였다.

미리 준비한 텍스트 파일

안에는 임의로 넣어둔 서울 지하철 역이다. 파일 제목은 node.txt로 해두었다.

그리고 이 텍스트 파일을 파이썬 파일과 같은 경로에 넣어두었다.

 다음은 그래프를 만드는 class를 구현하였다.

class StationNode:
# 지하철 역을 노드로 만들어 준다.

def __init__(self, station_name):
self.station_name = station_name

이렇게 클래스를 이용하여, 데이터가 들어올때 마다 노드를 하나 생성 한다.

그리고 다음에는 이렇게 생성된 노드를 하나의 그래프로 연결해주어야 한다.

 

def create_station_nodes(input_file):
#node.txt에서 읽어온 데이터 이용
stations = {} # 지하철 역 노드들을 담을 딕셔너리

# 파라미터로 받은 input_file 파일을 연다
with open(input_file,'r',encoding="utf-8") as stations_raw_file: #읽기모드 r로 인코딩 utf-8로 한글 파일 읽어오기
for line in stations_raw_file: # 파일을 한 줄씩 받아온다
subway_line = line.strip().split(" ") # 앞 뒤 띄어쓰기를 없애고 "-"를 기준점으로 데이터를 나눈다

for name in subway_line:
station_name = name.strip() # 앞 뒤 띄어쓰기 없애기
if station_name not in stations:
current_station = StationNode(station_name)
stations[station_name] = current_station

return stations

이전에 미리 넣어두었던, node.txt를 읽어오는데 이때 r(읽기모드)로 읽어 오면서, 한글이기에 utf-8로 인코딩 하여 한 줄 씩

읽어온다. 그리고 읽어오면서 공백을 기준으로 데이터를 나누고, 그 뒤에 앞 뒤 공백을 제거한다. 그리고 이를 name이라는

변수에 저장한다. 이 name이라는 변수를 다시  station_name이라는 변수에 저장하고 만약 이 station_name이 station안에 없으면 class StationNode 클래스를 이용하여 노드를 생성한다. 왜냐하면 노드가 중복되면 안되기 때문이다.

그리고 생성된 노드를 current_station에 저장하고 stations 이름에 저장한다. 반복문에 종료되면 그래프를 반환한다.

 

위의 코딩을 이어서 실행하고 결과를 보면 다음과 같다.

그래프 결과

넣어둔 데이터와 결과가 다른것을 볼 수 있는데 이는 가나다 순으로 저장되기 때문이다.

결과를 보면 가나다 순으로 하나씩 노드가 생성되어 그래프를 이루고 있는것을 볼 수 있다.

 

지금까지는 데이터를 이용하여 아주 간단한 그래프를 만들었다.

다음에는 이러한 그래프를 이용하여 인접행렬을 만들어 보겠다.

728x90
반응형
LIST

'Graphy' 카테고리의 다른 글

Graphy 인접행렬  (0) 2023.06.26
그래프 이론  (0) 2023.06.20