1. Intro to Jupyter Notebook

What is Jupyter?

Jupyter notebook, formerly known as IPython (or Interactive Python), is a flexible and powerful open source research tool that can help you keep a narrative of your coding process. The name Jupyter is an acronym of the three core languages it was designed for: JUlia, PYThon, and R. Project Jupyter supports interactive data science and scientific computing across more than 40 programming languages.

https://jupyter.org/

Jupyter as Coding Diary

You can think of the notebook as a lab or field diary that keeps a detailed record of the steps you take as you develop scripts and programming workflows. Just as you would with a field notebook, it is important to develop good note-taking habits. This workshop is designed to impart a set of skills, tools, and best practices you can implement in your own research to enhance reprodubility, which will make modifications, collaboration, and publishing easier.

Jupyter Architecture

Jupyter is comprised of several components, some of which the user doesn't directly interact with, but should at least be aware of. On the front-end, the user will work with the:

  1. Web Application: Browser-based tool for interactive development of notebook documents
  2. Notebook Document: A representation of all content visible in the web application, including inputs and outputs of the computations, explanatory text, mathematics, images, and rich media representations of objects. These documents are internally JSON files and are saved with the .ipynb extension. Since JSON is a plain text format, they can be version-controlled and shared with colleagues.

Jupyter also has some back-end processes, including the:

  1. Kernel: A separate process responsible for running user code. For the purposes of this workshop, we will be working on Python kernels, although Jupyter is capable of interfacing with other programming languages as well.
  2. Notebook Server: ? Communicates with kernel and routes the Python programming language to the web browser.

Curious to learn more? Refer to these Jupyter documents:

http://jupyter-notebook.readthedocs.io/en/latest/notebook.html http://jupyter.readthedocs.io/en/latest/architecture/how_jupyter_ipython_work.html

Why are Jupyter Notebooks a powerful tool for conducting reproducible research?

Jupyter Notebooks are great because they facilitate:

  • Documentation and literate programming by combining rich-text narrative concepts & machine-readable code. The notebeook itself is a data-structure with metadata that can be easily read and parsed.
  • Exploration & development: Intermediate steps are saved in a clean, well documented format
  • Communication/Collaboration: sharing research with peers, collaborators, reviewers, public
  • Publishing: It is simple and quick switch between the development & publishing stage

Jupyter Ecosystem

There has been considerable development by both Project Jupyter and external collaborators that have yielded a multitude of options for Jupyter users. This diagram gives a sample of some of the possibilities.