JupyterLab에서 Jupyter notebook (ipynb)의 차이를 쉽게 볼 수 있습니다.

TL;DR



Jupyter Notebook에서 분석을 진행할 때 버전을 관리하고 싶습니다. 익스텐션을 이용해, 차분을 보기 쉽게 표시할 수 있도록 해 보았습니다.

JupyterLab 환경 구축



이번 기사에서는 아래와 같은 환경을 이용합니다.
  • docker-compose 사용
  • docker-compose 설치는 여기을 참조하십시오

  • 컨테이너 이미지의 기반은 kaggle-images 을 이용

  • Jupyter notebook의 버전 제어에 필요한 JupyterLab 확장은 다음과 같습니다.
  • jupyterlab-git

  • nbdime
  • 이것은 jupyterlab-git 설치와 함께 설치됩니다


  • 환경 구축



    아래의 2 파일을 작성합니다.
  • Dockerfile
  • docker-compose.yml

  • Dockerfile
    FROM gcr.io/kaggle-images/python:v74
    
    RUN apt-get update && \
        apt-get install -y git \
        curl
    
    RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - &&\
        apt-get install -y nodejs
    
    RUN pip install -U pip \
        jupyterlab && \
        pip install jupyterlab-git
    
    RUN jupyter lab build
    

    docker-compose.yml
    version: "3"
    services:
      jupyter:
        build: .
        volumes:
          - $PWD:/tmp/work
        working_dir: /tmp/work
        ports:
          - 8888:8888
        command: jupyter lab --ip=0.0.0.0 --allow-root --no-browser
    

    Docker 이미지 빌드



    상기 2 파일을 작성 후, 같은 디렉토리에서 빌드합니다.
    $ docker-compose build
    

    컨테이너 시작



    빌드 후 컨테이너를 시작합니다.
    $ docker-compose up
    

    시작 후 http://localhost:8888/ 에 액세스하고 token 을 입력하여 JupyterLab 에 액세스할 수 있습니다.
    token 은 기동 후에 출력되는 예: jupyterlab-gitnbdime 에 해당하는 부분입니다.

    Extension Manager 사용



    시작 후 Exxtension Manager를 Enable합니다.


    두 개의 확장이 설치되어 있습니다.


    노트북을 Git으로 버전 관리하기



    Git 리포지토리 를 Clone



    필요한 리포지토리를 복제합니다. 이미 Notebook 등이 있는 경우는 git init 등을 합니다.



    리포지토리 URL 입력


    Notebook ( http://acb729d0c5ce:8888/?token=45d10c660d2e85f0c8d59995a04667c154542ae79f27f65d )을 만들고 first commit 합니다.
    $ git config --global user.email "[email protected]"
    $ git config --global user.name "Your Name"
    $ git add test.ipynb
    $ git commit -m "first commit"
    

    first commit 후에 Notebook에서 분석을 진행했다고 가정합니다. 예를 들어 df.head() 라는 코드를 추가했다고 가정합니다.

    git diff에서의 차이 표시



    우선, 45d10c660d2e85f0c8d59995a04667c154542ae79f27f65d 커멘드로 확인했을 경우는, 아래와 같이 Notebook 의 메타데이타등의 차분이 표시되어 버려 매우 이해하기 어렵습니다.
    # git diff
    diff --git a/test.ipynb b/test.ipynb
    index f6c1f17..5af6074 100644
    --- a/test.ipynb
    +++ b/test.ipynb
    @@ -2,7 +2,7 @@
      "cells": [
       {
        "cell_type": "code",
    -   "execution_count": 1,
    +   "execution_count": 6,
        "metadata": {},
        "outputs": [],
        "source": [
    @@ -21,7 +21,7 @@
       },
       {
        "cell_type": "code",
    -   "execution_count": 4,
    +   "execution_count": 7,
        "metadata": {},
        "outputs": [],
        "source": [
    @@ -30,12 +30,164 @@
       },
       {
        "cell_type": "code",
    -   "execution_count": 5,
    +   "execution_count": 8,
        "metadata": {},
        "outputs": [],
        "source": [
         "df = pd.read_csv(data_dir + \"train.csv\")"
        ]
    +  },
    +  {
    +   "cell_type": "code",
    :
    
    

    JupyterLab nbdime의 차이 표시



    JupyterLab에서 nbdime을 사용하여 diff를 확인한 경우 다음과 같습니다. 핑크의 왼쪽은 변경 전, 녹색의 오른쪽은 변경 후입니다.


    매우보기 쉽고 차이가 표시된다고 생각합니다.

    참고


  • Jupyter Notebook Manifesto: Best practices that can improve the life of any developer using Jupyter notebooks
  • 좋은 웹페이지 즐겨찾기