Jupyter Notebook: 셀 단위로 탐색하기

Jupyter Notebook의 셀 구조와 커널 개념을 이해하고, 실행 순서가 위치와 다를 수 있다는 가장 흔한 함정과 Restart & Run All의 중요성까지 데이터 탐색 관점에서 정리합니다.

· 6 min read · PALDYN Team

지난 글에서 그래프를 그렸지만, 스크립트를 매번 처음부터 다시 실행해 결과를 확인하는 일은 번거롭다. 데이터를 다룰 때는 “이 컬럼을 한 번 봐 볼까”, “이 그래프만 다시 그려 볼까” 하는 식의 짧은 시도가 끝없이 이어진다. Jupyter Notebook은 코드를 셀 단위로 쪼개 즉시 실행하고 결과를 바로 아래에서 확인하게 해 줘서, 이런 탐색적 작업에 잘 맞는다.

셀: 코드와 설명을 한 문서에

노트북은 여러 개의 셀로 이루어진다. 셀에는 크게 두 종류가 있다. 코드 셀은 파이썬을 실행하고 그 결과(표, 그래프, 출력)를 바로 아래에 보여 주고, 마크다운 셀은 제목·설명·수식을 서식 있는 텍스트로 작성한다. 분석 과정과 그에 대한 설명을 한 문서에 함께 담을 수 있다는 점이 노트북의 매력이다.

셀: 코드와 설명을 한 문서에

코드 셀에는 작은 편의가 하나 있다. 셀의 마지막 표현식은 print 없이도 자동으로 출력된다. 그래서 df.head()만 적어도 표가 셀 아래에 그려진다. 셀 왼쪽의 [1], [2] 같은 번호는 그 셀이 몇 번째로 실행됐는지를 나타낸다 — 이 번호가 바로 다음에 이야기할 함정의 핵심 단서다.

커널: 노트북 뒤의 살아 있는 파이썬

각 노트북 뒤에는 커널(kernel) 이라는 파이썬 프로세스가 하나 돌고 있다. 셀을 실행하면 그 코드가 커널로 보내져 실행되고, 커널은 변수 같은 상태를 계속 기억한다. 한 셀에서 df를 만들면, 다른 셀에서 그 df를 그대로 쓸 수 있는 이유다. 노트북이 스크립트보다 가벼운 까닭도 여기 있다. 무거운 데이터 로딩을 한 번 해 두면, 그 뒤로는 이미 메모리에 올라온 데이터를 가지고 계속 실험할 수 있다.

가장 흔한 함정: 위치 ≠ 실행 순서

노트북 초보자가 거의 반드시 겪는 버그가 있다. 셀이 화면에 놓인 순서와, 실제로 실행된 순서가 다를 수 있다는 점이다. 위에서 아래로 차근차근 실행했다면 문제없지만, 중간 셀을 고쳐 다시 실행하거나 위아래를 오가다 보면 커널의 상태가 화면과 어긋난다.

실행 순서 함정: 위치 ≠ 실행 순서

# 셀 A를 실행: x = 10
x = 10

# 셀 B를 실행: x = 99   (아래에 있지만 먼저 실행했다면)
x = 99

# 셀 C: 화면상 가운데지만 마지막에 실행하면
print(x)    # 커널이 기억하는 마지막 x를 출력

화면상의 위치가 아니라 실행 번호([n]) 가 진실이다. 셀을 이리저리 실행하다 보면, 정작 다른 사람이(또는 미래의 내가) 위에서 아래로 실행했을 때는 재현되지 않는 결과가 만들어진다.

해결책: Restart & Run All

이 함정을 막는 습관은 간단하다. 분석을 어느 정도 끝냈으면 Kernel → Restart & Run All을 눌러, 깨끗한 커널에서 모든 셀을 위에서 아래로 다시 실행해 본다. 여기서 에러 없이 같은 결과가 나오면, 그 노트북은 재현 가능한 상태다.

Kernel ▸ Restart & Run All
  → 커널 상태를 모두 비우고
  → 첫 셀부터 마지막 셀까지 순서대로 재실행

커밋하거나 공유하기 전에 이 한 번을 돌리는 것만으로, “내 컴퓨터에선 됐는데”라는 흔한 사고를 크게 줄일 수 있다.

알아 두면 편한 매직 커맨드

Jupyter에는 %로 시작하는 매직 커맨드가 있어 자주 쓰인다.

%timeit sum(range(1000))     # 한 줄 실행 시간 측정
%matplotlib inline           # 그래프를 셀 안에 표시
%who                         # 정의된 변수 목록
!pip install seaborn         # 셸 명령(앞에 !)

Jupyter Notebook은 탐색적 데이터 분석의 작업대다. 셀로 코드를 쪼개 즉시 확인하고, 커널이 상태를 기억해 준다. 다만 그 편리함의 이면에 “실행 순서” 함정이 있으니, 마무리는 늘 Restart & Run All로 점검하자. 다음 글에서는 이렇게 탐색한 데이터로 예측 모델을 만드는 첫걸음, scikit-learn을 다룬다.


지난 글: matplotlib 기초: 첫 그래프 그리기

다음 글: scikit-learn 입문: fit과 predict의 흐름


읽어주셔서 감사합니다. 😊