Jupyter Notebook Introduction
Jupyter Notebook is a browser-based document that interleaves executable code cells, rich output, and Markdown prose. It was built for data exploration - code and its results stay side by side - and it has become the standard environment for notebooks across Python and many other languages via kernels.
What It Is
- A document format: .ipynb files are JSON containing cells, metadata, and outputs.
- A server: jupyter notebook serves files from a directory over HTTP and WebSocket.
- A kernel model: code runs in a separate process (the kernel) that speaks a messaging protocol; the browser is just a client.
Why Notebooks
- Exploration: iterate on data questions with immediate visual feedback.
- Reproducibility: the analysis, the data loads, and the conclusions live in one artifact.
- Communication: Markdown cells make a notebook a report anyone can read, not just run.
- Sharing: export to HTML, PDF, or scripts for audiences without Python.
Anatomy of a Notebook
- Cells - the units: code cells, Markdown cells, and raw text cells.
- Outputs - text, images, HTML, and errors from executing code cells.
- Kernel state - variables persist between cells in a session until you restart.
- Metadata - kernel name, language info, and cell properties stored in the .ipynb JSON.
The Mental Model
Treat the notebook as a scratchpad with memory: each cell runs in the shared kernel namespace, so order matters. A cell that uses df works only if an earlier cell defined df. Restart-and-run-all is the way to verify a notebook runs cleanly top to bottom.
Summary
Jupyter Notebook is a browser document of executable code, output, and Markdown, powered by a kernel process that keeps variables alive across cells. It is the standard tool for exploratory data work and for sharing analyses with results included. Keep the mental model simple: cells share one namespace, order matters, and run-all verifies the story end to end.