PL/Python

graphviz 설치 및 기본 사용법 개요

PIYA 2022. 10. 18.

포스팅 목적

결정트리나 네트워크 등을 시각화해주는 라이브러리 graphviz에 대해 간단하게 알아본다.

이로 만들어진 그래프를 dot graph라 하며,

dot language를 이용하여 그래프를 나타낼 수 있다.

 

자세히 쓸 일은 아직 없어서, 기본적인 설치방법과 실행법만 포스팅한다.

 

설치방법

1. graphviz 실행파일을 설치한다

    홈페이지에 들어가 자신의 운영체제에 맞는 EXE installer를 다운받는다.

    웬만한 경우에 윈도우는 64-bit을 받으면 된다.

 

2. 래퍼모듈 설치

    설치한 graphviz를 컨트롤하는 wrapper 모듈을 설치해야한다.

    커맨드창에서는 pip install graphviz,

    아나콘다에서는 conda install python-graphviz 를 입력해 설치한다

 

3. OS 환경변수 구성

    설치과정에서 all user에 대해 path추가를 선택하면 따로 설정할 필요 없다.

    설치과정에서 세팅하지 않았을 경우 실행경로를 시스템 환경변수에 추가한다.

 

4. 재부팅

    설치과정을 마무리하려면 재부팅이 필요하다

 

아주아주 기본 사용법

1. 결정트리 준비

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import export_graphviz
import graphviz

# DecisionTree Classifier 생성
dt_clf = DecisionTreeClassifier()

# 붓꽃 데이터를 로딩하고, 학습과 테스트 데이터 셋으로 분리
iris_data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris_data.data, iris_data.target, test_size=0.2)

# DecisionTreeClassifier 학습
dt_clf.fit(X_train, y_train)

 

2. dot 파일로 내보내고 주피터노트북에서 확인

fit 시킨 dt_clf를 받아서 tree.dot 파일을 만든다.다시 읽어들이면 주피터 노트북 상에서 시각화된것을 볼 수 있다.

# export_graphviz()의 호출 결과로 out_file로 지정된 tree.dot파일을 생성함
export_graphviz(dt_clf,
                out_file="tree.dot",
                class_names=iris_data.target_names,
                feature_names=iris_data.feature_names,
                impurity=True,
                filled=True)

# 생성한 tree.dot파일을 읽어서 jupyter notebook 상에서 시각화
with open("tree.dot") as f:
    dot_graph = f.read()
graphviz.Source(dot_graph)

 

3. png파일로 저장하기

똑같이 export_graphviz 수행 후,render함수를 사용하여 png로 저장한다.

dot_data = export_graphviz(dt_clf,
                           out_file=None,
                           class_names=iris_data.target_names,
                           feature_names=iris_data.feature_names,
                           impurity=True,
                           filled=True,
                           rounded=True)
                           
graph = graphviz.Source(dot_data)
graph.render(filename='test', format='png')

 

결과물

 

맺음말

딱히 쓸말이 없다

댓글