google colab에서 graphviz 사용하기.

intro

  • 이제는 networkxmatplotlib를 너무 많이 사용해서, 이 둘을 사용해서 그림을 그릴 때가 편할때가 있습니다만, 가끔 graphviz의 layout을 이용해서 그림을 그려주고 싶을 때가 있습니다.

  • 대략 아래 그림처럼 뭔가 binary tree같은 애들을 그려주기가 편하죠. root node부터 그려주고, level이 같은 애들은 같은 층에 그려주니까요.

install it in colab

  • 전에도 얘기한 적이 있지만, 저는 이제 jupyter notebook을 쓰지 않고(정확히는 로컬에 서버를 돌려서 사용하지 않고), colab를 사용하고 있습니다.
  • 혹시 virtualenv를 사용하시는 분이 있는지 모르겠습니다만, 이걸 쓰는 목적은, 개별 프로젝트에 따라서 발생하는 의존성의 문제를 해결하기 위해서, 특정 폴더를 아예 별개의 환경으로 관리하기 위함이죠.
  • colab은 실행하기 전에 이미 깔려 있는 라이브러리들을 제외하고, 새로운 라이브러리를 설치해야 할 경우, 매번 라이브러리를 설치해야 합니다.
  • 처음에는 이게 꽤 불편하다고 생각했는데, 오히려 잡스러운 것들을 다 삭제해주고, 늘 환경을 바닐라 상태로 세팅할 수 있어서 더 좋은 것 같습니다. 저의 경우는요.

아무튼 install

  • 아무튼 설치합니다. 아래를 사용하면 설치할 수 있습니다.
    • -q는 설치하면서, output을 적게 출력한다는 것입니다. 큰 의미는 없어요.
## using graphviz 
!apt-get -qq install -y graphviz && pip install -q pydot
import pydot
## 아래 있는것은 필수는 아닌데, 가끔 에러가 생길 때가 있어서, 그냥 같이 해줌. 
!apt-get install graphviz libgraphviz-dev pkg-config
!pip install pygraphviz
import pygraphviz
  • 이제 아래의 코드를 사용해서 그래프를 그려주면 잘 그려지는 것을 알 수 있습니다.
plt.figure(figsize=(12, 6))
nx.draw_networkx(
    input_G
    pos=nx.drawing.nx_pydot.graphviz_layout(
        input_G, prog='dot'## prog='dot' 를 반드시 넣어야만 함. 
    )
)

plt.axis('off')
plt.show()

wrap-up

  • 앞서 비슷한 이야기를 했지만, 필요할 때마다, 패키지를 설치해서 돌리는 것이, 매번 노트북을 시작할때마다 조금 시간이 걸리는 문제는 있지만, 훨씬 효율적인 것 같습니다.
  • 매번 초기화해놓고 시작하니까, 이후에 문제가 생길 가능성도 확실히 줄어들고요

reference

댓글남기기