Visual studio code, pipenv를 활용한 강화학습 개발 환경 꾸리기(4)

Jupyter Notebook

강화학습 예제를 돌려보기 전에 먼저 이전 예제를 바탕으로 Jupyter Notebook을 VS code 위에서 사용하는 법을 알아보겠습니다. 아마 Anaconda를 사용해 보신 분들이라면 Jupyter Notebook이 익숙할 것입니다. Jupyter Notebook의 장점으로 셀기반 대화형 환경, 웹을 통한 접속 지원, 시각화 지원 등이 있습니다. 본 포스트에서는 간단히 소개하도록 하겠습니다. 더 많은 정보가 필요하신 분들은 검색을 해보셔도 좋습니다.

먼저 extensions에서 Jupyter를 검색해서 설치하도록 하겠습니다.

jupyter

Jupyter Notebook


다음으로 Jupyter 환경에서 Python을 실행하기 위해 ipykernel 을 설치하겠습니다. 터미널에서 간단히 설치해 주시면 됩니다.

pipenv install ipykernel


그럼 빈 Jupyter Notebook 파일을 하나 생성해 볼까요? VS code -> File 메뉴 -> New File -> Jupyter Notebook 순서로 눌러주세요. 파일명 저장을 한번 해주겠습니다. 저는 quickstart.ipynb 로 했습니다.

Jupyter Notebook은 cell 단위로 코드 블럭을 지정할 수 있습니다. Quickstart 페이지에 회색 코드 박스들 하나씩 Jupyter 코드 cell에 복사하겠습니다. 다음 코드를 복사하기 위해서는 code cell을 추가해주고 뭔가 설명, 주석을 남기고 싶으면 Markdown cell을 추가해 주석을 남겨줍시다.

code and markdown

Cell 추가 버튼


Jypyter Notebook에서 Python을 실행하기 위해서 적절한 Python kernel을 선택해 주겠습니다. 오른쪽 위에 Select Kernel 버튼을 눌러 우리가 지금 들어와있는 가상환경의 Python 인터프리터를 선택해주세요. 만약 한번에 보이지 않는다면 Select Another Kernel을 눌르고 Python environment를 누르면 원하는, 가상환경 Python을 찾을 수 있습니다.

Select Kernel

커널 선택 버튼


그리고 이것 저것 버튼을 누르며 코드를 실행해보세요. Cell의 코드들 라인 넘버가 없네요. 불편합니다! cell 밖을 한번 클릭하고 Shift + L 키를 한번 눌러줍시다. Run All 을 눌러서 모든 cell을 실행해보기도 하고 Interrupt 를 눌러서 실행중인 코드를 멈춰보기도 하면서 익숙해 지면 좋겠습니다.

Cell 왼쪽에 실행버튼을 눌러서 하나의 cell만 실행하고 바로 output을 얻어보기도 합시다. 실행버튼 밑으로 열어서 Debug Cell 버튼이 있는지도 확인해 봅시다. 디버그 모드로 실행하면 Break point 기능 등 다양한 디버그 기능을 사용할 수 있습니다.

run and debug

Cell 실행 버튼과 debug 버튼


pandas

다음으로 pandas 패키지를 깔아봅시다 pandas는 데이터 조작 및 분석을 위한 패키지입니다.

pipenv install pandas


pandas를 이용해 메모리에 저장된 데이터를 열어볼까요? 먼저 quickstart.ipynb 코드를 한번 실행해 주세요. 실행이 완료된 후 하단 패널에 JUPYTER 탭을 클릭해 봅시다. 저장된 VARIABLES를 바로바로 확인할 수 있는데 X 라는 변수에 저장된 내용도 보여지는군요. 좀 더 편한 창으로 보기 위해 아래 그림과 같이 아이콘을 클릭해보면

data viewer

pandas data viewer


데이터 뷰어를 통해 데이터를 상세하게 확인할 수 있고 또 데이터 뷰어에서 바로 수정까지 할 수 있습니다.

모두가 알다시피 사실 프로그래밍, 개발에 있어 대부분의 시간을 차지하는 것은 디버깅입니다. 많은 시간을 절약하는 방법, 그리고 코딩의 고수가 되는 방법은 당연히 디버깅을 잘하는 것이겠죠. 데이터 뷰어를 통해 데이터를 확인하고 수정하는 것만으로도 꽤나 디버깅에 큰 도움이 되지만 아직 부족합니다. 이 포스트 시리즈에서 breakpoint를 이용한 디버깅 방법도 추후 알아볼 예정입니다. 일단 그전에 강화학습 예제부터 먼저 돌려보겠습니다.