{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 01 - Introduction to JupyterNotebooks\n", "\n", "COMET Team
*Anneke Dresselhuis, Jonathan Graves* \n", "2023-01-12\n", "\n", "## Outline\n", "\n", "### Prerequisites\n", "\n", "- None!\n", "\n", "### Outcomes\n", "\n", "This notebook is an introduction to JupyterNotebooks. After completing\n", "this notebook, you will be able to:\n", "\n", "- Describe the structure of a JupyterNotebook and the role of\n", " different kinds of cells\n", "- Understand the relationship between a notebook, the editor, the\n", " kernel and output\n", "- Understand the directory structure of a JupyterHub and its relation\n", " to your notebook\n", "- Write, edit, and execute code in a JupyterNotebook\n", "- Write, edit, and view text in a Jupyter notebook\n", "- Develop basic troubleshooting skills to use when facing technical\n", " challenges with JupyterNotebooks\n", "- Export Jupyter notebooks to other standard file types\n", " (e.g., `.html`,  `.pdf`)\n", "\n", "### Sources\n", "\n", "This notebook is informed by the following sources which are great tools\n", "to check out if you’re interested in furthering your knowledge of\n", "Notebooks and Data Science best practices more broadly.\n", "\n", "- [Data Science: A First Introduction, *Chapter\n", " 11*](https://datasciencebook.ca/getting-started-with-jupyter.html)\n", "- [Jupyter Notebook Tutorial: The Definitive\n", " Guide](https://www.datacamp.com/tutorial/tutorial-jupyter-notebook)\n", "\n", "# Working with Jupyter\n", "\n", "In this notebook we’ll be learning about what **JupyterNotebooks** are\n", "and how they work. If you’re reading this, you’re already connected to a\n", "Notebook and are one step closer to becoming a Jupyter expert! Notebooks\n", "are easily accessed through **JupyterHub**, which is a web-based\n", "interactive integrated development environment (IDE) typically\n", "maintained by an organization or institution. These hubs often have\n", "different software and tools for collaboration preconfigured for\n", "students like you to use. Both JuptyerHub and JupyterNotebooks stem from\n", "**Jupyter**, which is a connected system of open-source tools designed\n", "to support interactive, web-based computing ().\n", "\n", "In this Notebook, we will specifically be using **JupyterLab**; the\n", "classic interface is similar, but you may notice some labeling\n", "differences.\n", "\n", "Throughout the COMET Jupyter Notebooks, we’ll bring together theoretical\n", "learning instruction, hands-on coding opportunities and automatic\n", "feedback to create a comprehensive learning environment. You’ll also\n", "notice sections like this:\n", "\n", "> ****🔎 Let’s think critically****\n", ">\n", "> > 🟠 Some critical questions or \n", "> > 🟠 Context will go here!\n", "\n", "These sections will invite you to pause and reflect on your learning\n", "through different lenses. We invite you to think about the series of\n", "critical questions or context presented 🔎 sections - bonus points if\n", "you also discuss with your peers! Happy learning!\n", "\n", "## Key Terms\n", "\n", "Below are a few key terms that define and contextualize components of\n", "the technical environment which Jupyter operates in. As you work through\n", "this notebook, try to identify the various (largely invisible) processes\n", "and infrastructures that enable you to read the contents of this\n", "notebook, run code cells and write text in the notebook, among other\n", "things.\n", "\n", "- An **Integrated Development Environment (IDE)** is a type of\n", " software application that can be used to work on coding tasks.\n", " JupyterHub is an IDE that works really well for collaborative\n", " econometric analyses because it contains various features that allow\n", " users to write, upload, co-develop and give feedback on files.\n", "- **Open source** is a copyright term which refers to a source code\n", " that is made freely available for modification and sharing. Jupyter\n", " and JupyterNotebooks are an example of an open source project\n", " because anyone can access the code and documentation used to make\n", " them.\n", "- **Cloud based** describes any computing services or resources that\n", " rely on the internet to function. If you are reading this notebook\n", " in a browser, for example, your device has used an internet protocol\n", " to request access to this notebook from the server that stores this\n", " notebook (the server said yes!) \n", "- The **Client-server relationship** is the underlying relationship\n", " that allows the internet to exist as we know it. **Client** refers\n", " to the computer asking for information on the internet and\n", " **server** refers to the computer that responds to requests.\n", "- A **Kernel** is an execution environment which connects Notebooks\n", " with programming languages in order to allow code (written in R or\n", " Python, for example) to be executed in the Notebook. Clients (you)\n", " can send instructions to a kernel to perform operations on data. \\>\n", " For example, when the operation $1+1$ is typed into a\n", " JupyterNotebook, the web browser (that you are viewing the notebook\n", " in) sends a request to the kernel (for this notebook, the *R* kernel\n", " is being used) which computes the request and sends the answer back\n", " to your notebook, producing the result: $2$\n", "\n", "One final term to consider as you begin using notebooks for econometrics\n", "is **reproducibility**. Reproducibility is a core priority in empirical\n", "economics and data science. It means ensuring the creation of analyses\n", "that can reliably re-produce the same results when analyzing the same\n", "data at a later time; reproducibility is a key component of the\n", "scientific method. Notebooks allow us to write executable code, attach\n", "multimedia and leave meaningful text annotations and discussion\n", "throughout our analysis, all of which contribute to a reproducible and\n", "transparent data workflow.\n", "\n", "> **🔎 **Let’s think critically****\n", ">\n", "> > 🟠 How might the two concepts of **open source** and\n", "> > **accessibility** be connected? \n", "> > 🟠 Who might benefit from econometrics analyses that are\n", "> > **reproducible**?\n", "\n", "## The Lay of the Land\n", "\n", "### Cells\n", "\n", "Notebooks are composed of different types of **cells**. The most common\n", "types we will work with are **Code** and **Markdown** cells.\n", "\n", "Running a code cell can be done in a few different ways, but the most\n", "common are:\n", "\n", "- Selecting the cell you wish to run and pressing `Shift + Enter` on\n", " your keyboard\n", "- Selecting the cell you wish to run and clicking the **Run** button\n", " in the menu above the worksheet (this button looks like a standard\n", " “play” button)" ], "id": "1c8ed4e7-3914-4530-aee0-78e5f2ca3009" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# A Code cell looks like this and can execute computations! Press Shift+Enter to compute the operation.\n", "2 + 2" ], "id": "20963729-b9dc-48d5-93d8-29918bce9510" }, { "cell_type": "markdown", "metadata": {}, "source": [ "Do you see the answer appear below the cell? Cells can include many\n", "things, including very complicated operations. Try running the next\n", "cell:" ], "id": "911ac91a-f7f4-424b-aff2-7bf5c837cd05" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "source(\"getting_started_intro_to_jupyter_tests.r\")" ], "id": "f583dbfb-4e86-4cec-a36a-e7b1d5efdde6" }, { "cell_type": "markdown", "metadata": {}, "source": [ "This cell executed a script called `testing_intro_to_jupyter.r` that,\n", "among other things, printed that text. However, cells can contain things\n", "other than just code. In fact, we’ve been reading cells all along!\n", "\n", "When you double click on this current cell, you can see what a\n", "**Markdown** cell looks like and how it can hold formatted text such as:\n", "\n", "- lists,\n", "- mathematical variables like $x$ and $y$,\n", "- links like this one to the Jupyter Homepage\n", " (https://www.jupyter.org)!\n", "\n", "Markdown is a simple plain text language that uses a basic syntax to add\n", "features like bold and italics to text.\n", "\n", "- adding two asterisks \\*\\* on either side of a word or phrase makes\n", " it **bold**\n", "- adding one underscore \\_ on either side of a word or phrase makes it\n", " *italicized*\n", "\n", "There are many other types of formatting that Markdown supports.\n", "\n", "> *Fun fact*: Social platforms like Discord, Facebook, Twitter and\n", "> LinkedIn also use the Markdown language to add flavour to text! You\n", "> can learn more about the features of the Markdown language on your own\n", "> by checking out this [Markdown\n", "> Cheatsheet](https://www.markdownguide.org/cheat-sheet/).\n", "\n", "### Self Tests\n", "\n", "One of the most useful features of notebooks is the opportunity to get\n", "immediate feedback on your work using tests that are built into\n", "particular cells by your instructor. Correct answers produce a\n", "`\"Success!\"` message while incorrect answers produce a\n", "`\"Solution is incorrect\"` message. Always be sure to read through test\n", "questions carefully because notebooks are not very forgiving when it\n", "comes to uppercase/lowercase mix-ups, typos or unspecified spaces\n", "between words. Time for some practice!" ], "id": "710680fd-1e15-4968-9952-acae71f1962a" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Replace ... with your answer to the following question\n", "# What country is the University of British Columbia in?\n", "# Be sure to use uppercase for the first letter and keep the \"\"\n", "\n", "answer_1 <- \"...\"\n", "\n", "test_1()" ], "id": "25524db5-e56b-4b94-a3ee-268080b6108b" }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now try this one:" ], "id": "2139d253-fb09-46cf-bdc0-d09b3062400d" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Replace ... with your answer\n", "# What is 2 + 2?\n", "# Your answer should be a single digit\n", "\n", "answer_2 <- ...\n", "\n", "test_2()" ], "id": "58cec130-9ce8-4211-b8e7-e5deefed3a62" }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Directories\n", "\n", "Notebooks are stored in **directories** in JupyterHub. It can be helpful\n", "to think about JupyterHub as an actual hub - that is, a place where\n", "different hub users (holding individual Jupyter accounts) can gather to\n", "share and collaborate on files. Directories store files in a similar way\n", "that a folder on our computer does. The only difference is, with\n", "JupyterHub, the cloud-based format allows directories to be used either\n", "individually or collaboratively. The directory browser is located on the\n", "lefthand side of the notebook interface and can be used to store other\n", "files including:\n", "\n", "- Images\n", "- Data Files\n", "- Other Code files\n", "- etc." ], "id": "0a7d56d4-30e4-4a24-b65b-23dad59f4e23" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Replace ... with your answer to: In one word, where are Notebooks stored?\n", "# Be sure to use lowercase letters and keep the \"\"\n", "\n", "answer_3 <- \"...\"\n", "\n", "test_3()" ], "id": "08d16577-8f42-4e86-a7a0-a48e0681cb5e" }, { "cell_type": "markdown", "metadata": {}, "source": [ "By default, when we use a function that requires a file, Jupyter will\n", "look in the notebook’s directory, unless specified otherwise.\n", "\n", "![Welcome to Jupyter](attachment:media/welcome_to_jupyter.png)\n", "\n", "The image above is visualized in the notebook by calling a pre-loaded\n", "image from the directory into the Notebook using the following\n", "instructions:\n", "\n", "`![Welcome to Jupyter](welcome_to_jupyter.png)`\n", "\n", "> See if you can spot the `welcome_to_jupyter.png` file in this\n", "> notebook’s directory under: “media”\n", "\n", "## Running Code\n", "\n", "### Identifying Kernel Status\n", "\n", "After using `Shift + Enter` or pressing the **Run** button, we are able\n", "to tell if a code cell is running by looking at the kernel symbol at the\n", "top right of our window. When the symbol is empty, the kernel is not\n", "busy and is ready to execute code. When the symbol is filled in, the\n", "kernel is busy executing code. When we are executing a simple operation,\n", "the kernel symbol will usually flicker on for a brief moment before\n", "turning off again. When we are executing a series of complex operations\n", "or loading a large data set, the kernel may be filled in for longer as\n", "it has to work harder to perform these operations.\n", "\n", "![Kernel Symbol Off](attachment:media/kernel_symbol_off.png) \n", "Kernel is not running\n", "\n", "![Kernel Symbol On](attachment:media/kernel_symbol_on.png) \n", "Kernel is running" ], "attachments": { "media/kernel_symbol_off.png": { "image/png": "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\n3l42/mXiZHu76VwkT0SaPJqYeGsCAK4YgK/FExPjNRMTX2uQYh8A0JEzreWndAyiPjFr19vYE/oe\nDa8D/7Bpnf+XM/5zBpMVOIB/zn8CqNEY4Qz6ybAAAABiZVhJZk1NACoAAAAIAAIBEgADAAAAAQAB\nAACHaQAEAAAAAQAAACYAAAAAAAOShgAHAAAAEgAAAFCgAgAEAAAAAQAAAHqgAwAEAAAAAQAAAD4A\nAAAAQVNDSUkAAABTY3JlZW5zaG90W0g1IAAAAjxpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4\nOnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4w\nIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJk\nZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAg\nICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICAgICAg\nICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAg\nPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjYyPC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgICAg\nPGV4aWY6VXNlckNvbW1lbnQ+U2NyZWVuc2hvdDwvZXhpZjpVc2VyQ29tbWVudD4KICAgICAgICAg\nPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjEyMjwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAg\nIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2Ny\naXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgriPVhFAAAKZElEQVR4Ae1bW1BURxr+\nuKkIESIICEaJYHABg6DGJKCmkoju1mYtd/fFfVOftHywtNTSp31Qq7xWWWVZ64NatVu18rK7sqm9\nSDYsQsBs5KJRKpiIEBSCclO5C5j9vz4enAxnhhlhhhmn/6oz55zuPn36/F//l/77n6AfhaDpledA\n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\n" }, "media/kernel_symbol_on.png": { "image/png": "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\n83fyzwtwC5gJxAqcE3gmsCIoJugsmCZYL/haiCCkJhQoVCDUITQvzCdsLZwsXCc8LIIXURMJFikS\neSjyXVRM1FX0kGiT6IwYu5i5WKJYndiIOJ24rniUeLn4XxIYCTWJUInTEr2SCEllyWDJUskeKYSU\nihRF6rRUnzRaWl06Qrpc+oUMrYy+TJxMncy4LKuslWyabJPs5x3COzx25O14uOOXnLJcmFyF3Ct5\noryFfJr8LfkvCpIKZIVShb8U6RRNFFMUmxUXlKSUApTKlIaUScrWyoeUO5TXVFRVqCqXVd6rCqv6\nqJ5SfaHGrGanlqP2SB2tbqCeot6i/lNDRSNG45rGnKaMZqhmreaMlphWgFaF1oS2oLav9jntMR1+\nHR+dszpjugK6vrrlum/1hPT89Sr1pvUl9EP0L+p/NpAzoBrcMPhuqGG41/CuEdLI1CjL6Jkx0djZ\nuMR41ETQJMikzmTeVNk0yfSuGdrM0izP7IU5jznZvMZ83kLVYq9FpyWtpaNlieVbK0krqtUta4S1\nhfVx6xEbEZsImyZbYGtue9z2tZ2YXZTdbXuMvZ19qf2Ug7xDssNDR5LjLsdaxyUnA6dcp1fO4s6x\nzh0uDC5eLjUu312NXPNdx9x2uO11e+LO6U5xb/bAerh4VHosehp7nvCc9FL2yvAa3Cm2M2Fnlzen\nd5j3nV0Mu3x3NfigfVx9an1WfW19y30X/cz9TvnNkw3JReSP/nr+Bf7vA7QD8gOmA7UD8wNngrSD\njge9D9YNLgyepRhSSigLIWYhZ0K+h9qGVoWuh7mG1Yfjwn3Cb0YQI0IjOnfz7k7Y3RcpFZkRORal\nEXUiap5qSa2MhqJ3RjfHMMMv9d2x4rEHY8fjdOJK437Eu8Q3JDAlRCR075Hck7lnOtEk8UISKomc\n1JEskJyaPL5Xf++5fdA+v30dKUIp6SmT+033V6cSUkNTn6bJpeWnfTvgeuBWOk/6/vSJg6YH6zLo\nM6gZLw5pHjpzGHWYcvhZpmLmycxfWf5Zj7PlsguzV3PIOY+PyB8pPrJ+NPDos1yV3LJjmGMRxwbz\ndPOq85nyE/MnjlsfbyzgL8gq+HZi14muQqXCM0WEotiisWKr4uaTwiePnVwtCS4ZKDUorT/FfSrz\n1PfT/qf7y/TKLp/hOZN9Zvks5ezQOdNzjeWi5YXnMefjzk9VuFQ8vKB2oaaSszK7cq0qomqs2qG6\n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\noAMABAAAAAEAAAA1AAAAAEFTQ0lJAAAAU2NyZWVuc2hvdKbHcSIAAAI8aVRYdFhNTDpjb20uYWRv\nYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJY\nTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcv\nMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFi\nb3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8x\nLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4w\nLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj41MzwvZXhpZjpQaXhlbFlEaW1lbnNp\nb24+CiAgICAgICAgIDxleGlmOlVzZXJDb21tZW50PlNjcmVlbnNob3Q8L2V4aWY6VXNlckNvbW1l\nbnQ+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xMjE8L2V4aWY6UGl4ZWxYRGltZW5z\naW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAg\nICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KOtsQjQAACc9J\nREFUeAHtW1lQVNkZ/pplZEdcIGhMyGhwgQFxcElGGUfHJVUzLjVTlbdYmrzok6VP+pQHtcoqfbDK\nssoXU5VK8pCXgDOpRBMI6ii4MYASnBlcwpSow76DCOT/Tnvwdve9DXRfoO2+f1Vzz37O/b/7n/Mv\nB1dpaekoHJpyDhQUFEz5HFYTRFlVOOXhwwEH5PDB0vJNHJAtWRM+FQ7I4YOl5Zs4IFuyZvor2tra\ncP/+fTXx7du3wbwdFGPHIM4YwXOgv78fx48fVwMtXrwYDx8+RHx8PI4dOxb04I4kB81CewYgoGlp\naR6DzZkzxyMfaMYBOVDO2djv6dOnOHz4MNrb27F3714cOHAAO3fuhC7nMxhyQA6Gezb1HRgY8BmJ\n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\n/R9FImL3yxAYKgAAAABJRU5ErkJggg==\n" }, "media/welcome_to_jupyter.png": { "image/png": "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\nEAQgAECI/wPFOmPc8QZ5jQAAAABJRU5ErkJggg==\n" } }, "id": "8912a95f-c2fb-4169-bd3c-f9ca50c7d529" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# When a kernel is filled in, is it a) running or b) not running?\n", "# Replace ... with the answer: \"a\" or \"b\"\n", "# Be sure to use lowercase letters and keep the \"\"\n", "\n", "answer_4 = \"...\"\n", "\n", "test_4()" ], "id": "368fd0aa-4d7e-4789-9363-c470c57dda58" }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are a few other kernel images that can occur (like a bomb) which\n", "indicate that the kernel has crashed or been disconnected; they usually\n", "mean your notebook has encountered a problem and you need to refresh the\n", "page.\n", "\n", "#### Things to watch out for\n", "\n", "When a code cell is run, it will execute all of the code contained in\n", "the cell and produce an output (if applicable) directly below the\n", "particular code cell being run. Outputs can include printed text or\n", "numbers, data frames and data visualizations. Code cells can be run\n", "individually or as a group; we can even run the entirety of a Notebook\n", "depending on which command you select in the **Run** menu in Jupyter.\n", "\n", "***The most important principle to remember for Jupyter is that the\n", "order in which cells are written and run in matters***.\n", "\n", "What does this mean?\n", "\n", "Notebooks are typically written to be executed from top to bottom in a\n", "linear fashion. Running all cells from top to bottom can be achieved by\n", "going to **Run** \\> **Run All Cells** in the menu. When cells are run in\n", "a non-linear order, however, Jupyter can get confused and render objects\n", "in unintended ways.\n", "\n", "Let’s see an example of how this can create unexpected results.\n", "\n", "Try running these cells in the following orders\n", "\n", "1. cell 1, cell 2, cell 3\n", "\n", "then try\n", "\n", "1. cell 2, cell 1, cell 3" ], "id": "1a84eb23-160b-4f47-92af-3cf2428c4ca9" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#cell 1: assigns object_a to 2+2\n", "object_a <- 2+2" ], "id": "e766761e-b9ef-49d7-8888-0a96ba354018" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#cell 2: assigns object_a to 1+2\n", "object_a <- 1+2" ], "id": "bccbc604-f0da-40be-9582-9a724db25dee" }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#cell 3: prints object_a\n", "object_a" ], "id": "3fcc2146-09ea-452a-abbc-e596108a5518" }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you may have noticed, different values are assigned to `object_a` in\n", "different code cells. The kernel will always use the most recent value\n", "that has been assigned to `object_a`, which is why different values are\n", "printed in cell 3 depending on the order in which cells 1 and 2 are run.\n", "\n", "The rule of thumb, then, is to ***always write and execute code from the\n", "start to the finish so as to avoid any discrepancies.***\n", "\n", "## Troubleshooting\n", "\n", "Sometimes Notebooks are *not* run from start to finish or other things\n", "go awry which can produce an error. If you are ever in this situation,\n", "one of the first things to do is select the **Kernel** \\> **Restart\n", "Kernel and Run All Cells** function. This will restart the Notebook\n", "session and will clear the Notebook’s “memory” from all objects and\n", "commands that have been previously run.\n", "\n", "If you run into a situation where your kernel is stuck (ie, it is filled\n", "in) for a very long time, you can also try these fixes:\n", "\n", "1. At the top of your screen, click **Kernel**, then **Interrupt\n", " Kernel**.\n", "2. If that doesn’t help, click **Kernel**, then **Restart Kernel…** If\n", " you do this, you will have to run your code cells from the start of\n", " your notebook up until where you paused your work.\n", "3. If that still doesn’t help, restart Jupyter. First, save your work\n", " by clicking **File** at the top left of your screen, then **Save\n", " Notebook**. Next, if you are accessing Jupyter using a JupyterHub\n", " server, from the **File** menu click **Hub Control Panel**. Choose\n", " **Stop My Server** to shut it down, then the **Start My Server**\n", " button to start it back up. If you are running Jupyter on your own\n", " computer, from the **File** menu click **Shut Down**, then start\n", " Jupyter again. Finally, navigate back to the notebook you were\n", " working on.\n", "4. If none of these things work, speak to your TA or instructor about\n", " the issue.\n", "\n", "## Exporting\n", "\n", "Notebooks automatically save our work as we write and edit our document.\n", "When we are ready to export our file, we can choose from a few different\n", "output formats including: `.html`, `.pdf` and Jupyter’s own `.ipynb`\n", "(which is a more readable form of a `.json` file). Be sure you export\n", "your files in the format specified by your instructor!\n", "\n", "To export your file, go to **File** \\> **Save and Export As…** \\> Then\n", "select your format of choice and save the file with an intuitive name\n", "that describes its contents.\n", "\n", "# Your Turn!\n", "\n", "A few notes about writing your own Notebooks:\n", "\n", "- Cells can be added to notebooks (when the cell is selected,\n", " indicated by a blue highlight on the lefthand side) by using the `+`\n", " arrow near the top right of the the window (not the blue button).\n", " Alternatively, you can use the `a` key to add a cell above your\n", " current cell, and `b` to add a cell below your current cell.\n", "- Cells can be deleted by right-clicking on the cell and selecting\n", " **Delete Cells**. Alternatively, you can double click the `d` key to\n", " delete a current cell.\n", "- A cell’s status (as either a code or markdown cell) is always\n", " indicated and can be changed in the dropdown bar of the menu.\n", "\n", "> ***Note***: Regarding keyboard shortcuts: keys will do different\n", "> things depending on which **mode** you are in. Editing mode lets you\n", "> edit cells, in which case hitting the `a` key will type the letter\n", "> *a*. Command mode will let you control JupyterLab, in which case\n", "> hitting the `a` key will insert a new cell. You can switch between\n", "> these modes by hitting `Esc` or `Enter`.\n", "\n", "You can also view a list of all of the different keyboard commands\n", "available under the *Settings \\> Advanced Settings Editor* in the\n", "Settings menu, then selecting *Keyboard Shortcuts*.\n", "\n", "Try executing the following tasks:\n", "\n", "1. Add a **markdown cell** below that says: “I can make markdown\n", " cells!”\n", "2. Add a **markdown cell** above that contains the previous message,\n", " but this time, in *italics*.\n", "3. Add a **code cell** below that operates the equation $2$ \\* $3$.\n", "4. Add a **code cell** below that assigns the value $4$ to an object\n", " titled `object_1`. \\> As seen previously, you can use the following\n", " formula to assign a number or operation to an object: \n", " `object_name <- # or equation` \n", " When you are working with numbers, you don’t need to attach “” as we\n", " did above with text answers.\n", "5. Add a code cell below that assigns the value $10$ to an object\n", " titled `object_2`.\n", "6. Add a code cell below to see what happens when you compute:\n", " `object_1 + object_2`." ], "id": "d67749d7-ad3c-411b-9392-7d533acf9680" } ], "nbformat": 4, "nbformat_minor": 5, "metadata": { "kernelspec": { "name": "ir", "display_name": "R", "language": "r" } } }