\subsection{Introduction}\label{introduction}

Jupyter Notebooks are often used for data science and scientific
computing such as machine learning as the interactive design allow you
to experiment easily with your code. For our purpose, we will use
Notebooks as it's a useful tool to learn how to code as well as writing
reports.

\emph{Note on the difference between Notebook and Lab: Jupyter Notebook
offers a simplified, lightweight notebook authoring experience, where
as, JupyterLab offers a feature-rich, tabbed multi-notebook editing
environment with additional tools like a customizable interface layout
and system console}

\subsection{Setup and Installation}\label{setup-and-installation}

Jupyter Notebooks can be installed either from the Anaconda Navigator
home page or directly from your Conda terminal.

Terminal: \texttt{conda\ install\ conda-forge::jupyterlab}

\subsection{Notebook Basics}\label{notebook-basics}

Jupyter Notebooks are files which allows you to combine \emph{Code} and
\emph{Markdown} cells in one single document. The code cells, allow you
to interactively run python code and print and plot data in your
document. If you wish to update or change data your code you can re-run
the cell to update the output. The markdown cells allows you to write
text, titles and insert images in your documentation using the markup
language \emph{Markdown}.

To start a new notebook select
\texttt{File\ \textgreater{}\ New\ \textgreater{}\ Notebook} or right
click the file browser and select \texttt{New\ notebook}, this will
prompt you to select a kernel (the Jupyter notebook ``engine''). For
now, just select the default Kernel 3. This will start a new fresh
kernel for us to use. Next, it's recommended to rename the file.

Now that we have a blank notebook we can start to add cells. Add a cell
and change the type to Markdown. Add a title with the hash symbol
(\texttt{\#}). As shown below.

\begin{Shaded}
\begin{Highlighting}[]
\FunctionTok{\# Title here}
\end{Highlighting}
\end{Shaded}

Press \texttt{Shift\ +\ Enter} to run the cell. You just entered created
your first markdown cell. Now let's do the same but instead select code
as the cell type, we're going to add some python code to the document.

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{x }\OperatorTok{=} \DecValTok{4}
\NormalTok{y }\OperatorTok{=} \DecValTok{3}

\NormalTok{x}\OperatorTok{**}\DecValTok{2}\OperatorTok{+}\DecValTok{2}\OperatorTok{*}\NormalTok{y}
\end{Highlighting}
\end{Shaded}

Again, run the cell and see what happens. You should've gotten an output
of \texttt{22}. You can now use the notebook as a calculator, but there
is so much more we can do.

The order of running code matters. Think of the code cells as code
snippets. Every time you run a cell variable will be updated. This means
that the current state of all variables, functions, and imports depends
on the history of what cells have been executed and in what order. In
other words, if you run a later cell before running an earlier one that
defines a variable or function it needs, you will get an error. If you
change a variable in one cell and rerun it, that new value immediately
affects the results of any cells that use that variable afterward ---
but not any previously run results unless you rerun them too. Variables
and imports persist in memory between cells, but only based on the
current session state --- if you restart the kernel, you lose all
previous definitions unless you re-run the necessary cells. Therefore,
let's press the \texttt{Restart\ the\ kernel} button on the top window.3

Because of this, it's best practice to; Run cells in order, restart the
kernel and run all cells
(\texttt{Kernel\ -\textgreater{}\ Restart\ \&\ Run\ All}) to make sure
everything works cleanly and predictably and lastly, initialize
important variables or imports in early cells, so they are always
defined before they are needed.

\subsection{Making your document look good with
Markdown}\label{making-your-document-look-good-with-markdown}

Creating titles or headers is done with the hash symbol. The number of
hashes determines whether it's a sub-title \texttt{\#}, \texttt{\#\#},
\texttt{\#\#\#}

\subsubsection{Lists}\label{lists}

There are two types of list in - Bullet lists: \texttt{-\ item} -
Numbered lists: \texttt{1.\ item} \#\#\# Style - Emphasis:
\emph{italic}, \textbf{bold}, \texttt{monospace} \#\#\# Mathematical
Equation Markdown supports LaTeX format equations. Inline equation is
opened and closed with a single \texttt{\$}. For a block math a double
\texttt{\$\$} is used instead of single.

\begin{itemize}
\tightlist
\item
  Inline: This equation is inline \texttt{\$E\ =\ mc\^{}2\$} in with the
  markdown text.
\item
  Block: Whilst this is a block:
  \texttt{\$\$\textbackslash{}int\_0\^{}\textbackslash{}infty\ e\^{}\{-x\^{}2\}\ dx\ =\ \textbackslash{}frac\{\textbackslash{}sqrt\{\textbackslash{}pi\}\}\{2\}\$\$}
  \#\#\# Links and images You can insert links to a different local file
  or online urls like this: {[}Link{]}(file.md). I insert an image it's
  the same however start with an exclamation mark \texttt{!} like this:
  !{[}Image Caption{]}(picture.png)
\end{itemize}

\subsection{Exporting and Sharing}\label{exporting-and-sharing}

To export your notebook go to

\texttt{File} \textgreater{} \texttt{Download\ As}

You can then select these options.

\begin{itemize}
\tightlist
\item
  Notebook (\texttt{.ipynb})
\item
  HTML
\item
  PDF (requires LaTeX)
\item
  Markdown
\end{itemize}

For homework assignments, download an HTML version of your document,
then from your browser, save or print as a PDF. Alternatively, you can
install the LaTeX typesetting system and export your document directly
as PDF from jupyter.
