diff --git a/D1-Jupyter.ipynb b/D1-Jupyter.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..1a6520f063d9c56669d39bbb0162e2d0f327a663
--- /dev/null
+++ b/D1-Jupyter.ipynb
@@ -0,0 +1,542 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# INFO 103: Introduction to data science <br> Demo \\#1: Introduction to Jupyter <br> Author: JRW\n",
+    "#### Download Jupyter notebooks!\n",
+    "The first thing you will have to do is download Jupyter, which will get you Python too (if you don't already have it). The easiest way to do this (regardless of operating system) is through the Anaconda distribution, which is a Python version specially geared for data science! Go and download a version if you haven't already!\n",
+    "* https://www.anaconda.com/products/individual"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## About Project Jupyter\n",
+    "Project Jupyter is an open source project was born out of the IPython Project in 2014 as it evolved to support interactive data science and scientific computing across all programming languages. Jupyter will always be 100% open source software, free for all to use and released under the liberal terms of the modified BSD license\n",
+    "<br><br>\n",
+    "(The above was taken from the [Project Jupyter about page](http://jupyter.org/about.html).)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### In case you are unfamiliar with Jupyter\n",
+    "Jupyter runs a persistent python environment in the background. This means you can do all the usual Python stuff. Note: Jupyter also works with (has kernels for) the Julia and Ruby programming languages ([among others](https://github.com/jupyter/jupyter/wiki/Jupyter-kernels)). However, we'll only use Python. Regardless, commands are entered in code cells:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "6"
+      ]
+     },
+     "execution_count": 2,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "1+2+3"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "this is some text\n",
+      "\n",
+      "t\n",
+      "h\n",
+      "i\n",
+      "s\n",
+      " \n",
+      "i\n",
+      "s\n",
+      " \n",
+      "s\n",
+      "o\n",
+      "m\n",
+      "e\n",
+      " \n",
+      "t\n",
+      "e\n",
+      "x\n",
+      "t\n",
+      "\n",
+      "['these', 'are', 'some', 'words']\n",
+      "\n",
+      "these\n",
+      "are\n",
+      "some\n",
+      "words\n",
+      "\n",
+      "{'jake makes': 'examples', 'which are': 'boring'}\n",
+      "\n",
+      "jake makes examples\n",
+      "which are boring\n"
+     ]
+    }
+   ],
+   "source": [
+    "import numpy as np\n",
+    "import re\n",
+    "import json\n",
+    "import datetime\n",
+    "\n",
+    "## make some variables\n",
+    "mystring = \"this is some text\"\n",
+    "mylist = [\"these\", \"are\", \"some\", \"words\"]\n",
+    "mydict = {\n",
+    "    \"jake makes\": \"examples\",\n",
+    "    \"which are\": \"boring\"\n",
+    "}\n",
+    "\n",
+    "## print and traverse a string\n",
+    "print(mystring)\n",
+    "print(\"\")\n",
+    "for character in mystring:\n",
+    "    print(character)\n",
+    "print(\"\")\n",
+    "\n",
+    "## print and traverse a list\n",
+    "print(mylist)\n",
+    "print(\"\")\n",
+    "for myelement in mylist:\n",
+    "    print(myelement)\n",
+    "print(\"\")\n",
+    "\n",
+    "## print and traverse a dcit\n",
+    "print(mydict)\n",
+    "print(\"\")\n",
+    "for key in mydict:\n",
+    "    print(key,mydict[key])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'jake makes': 'examples', 'which are': 'boring'}"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "mydict"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'examples'"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "mydict['jake makes']"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Jupyter is good for code and project exposition\n",
+    "While comments in code help users and programmers to understand what's going on, Jupyter goes one step further by allowing you to break code down into separate, bite-sized pieces. As I am doing here, you can also intersperse markdown cells, which can be formatted to be much more readable. Also, you can do crazy stuff with $\\LaTeX$ and equations:\n",
+    "$$\\mu = \\frac{\\sum_{n=1}^N{x(x)}}{N}$$\n",
+    "and embed hyperlinks, for example, to the [Jupyter/IPython docs](http://ipython.readthedocs.io/en/stable/index.html). You can also make lists easily:\n",
+    "* thing 1\n",
+    "* thing 2\n",
+    "* etc"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# This is my title\n",
+    "## this is a smaller title"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## This is smaller title"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "$\\mu = \\frac{\\sum_{n=1}^n (x(n)}{N}$"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Jupyter is good for code and project exploration\n",
+    "Even though I wouldn't recommend writing your final, production-level code in Jupyter, it can definitely be helpful for a project when you are in the exploration and early-development stages. For all of its benefits, it's not hard to confuse yourself while developing in Jupyter, since the code execution is asynchronous. For example, you may create a variable, execute the cell, delete the cell, and continue to use the variable you've entered into memory. If you then shut down your notebook and try to run it all again a variable will be missing!"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Jupyter has lots of add-on \"magic\" features\n",
+    "Jupyter's magic features are usually related to system control and navigation. These are generally run with a preceeded \"%\" character. For example, the \"%whos\" magic command neatly tells you everything that's in your namespace (workspace):"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Variable    Type      Data/Info\n",
+      "-------------------------------\n",
+      "character   str       t\n",
+      "datetime    module    <module 'datetime' from '<...>b/python3.6/datetime.py'>\n",
+      "json        module    <module 'json' from '/Use<...>hon3.6/json/__init__.py'>\n",
+      "key         str       which are\n",
+      "mydict      dict      n=2\n",
+      "myelement   str       words\n",
+      "mylist      list      n=4\n",
+      "mystring    str       this is some text\n",
+      "np          module    <module 'numpy' from '/Us<...>kages/numpy/__init__.py'>\n",
+      "re          module    <module 're' from '/Users<...>nda/lib/python3.6/re.py'>\n"
+     ]
+    }
+   ],
+   "source": [
+    "%whos"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "There's also \"%lsmagic\", which lists all magic commands:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "application/json": {
+       "cell": {
+        "!": "OSMagics",
+        "HTML": "Other",
+        "SVG": "Other",
+        "bash": "Other",
+        "capture": "ExecutionMagics",
+        "debug": "ExecutionMagics",
+        "file": "Other",
+        "html": "DisplayMagics",
+        "javascript": "DisplayMagics",
+        "js": "DisplayMagics",
+        "latex": "DisplayMagics",
+        "perl": "Other",
+        "prun": "ExecutionMagics",
+        "pypy": "Other",
+        "python": "Other",
+        "python2": "Other",
+        "python3": "Other",
+        "ruby": "Other",
+        "script": "ScriptMagics",
+        "sh": "Other",
+        "svg": "DisplayMagics",
+        "sx": "OSMagics",
+        "system": "OSMagics",
+        "time": "ExecutionMagics",
+        "timeit": "ExecutionMagics",
+        "writefile": "OSMagics"
+       },
+       "line": {
+        "alias": "OSMagics",
+        "alias_magic": "BasicMagics",
+        "autocall": "AutoMagics",
+        "automagic": "AutoMagics",
+        "autosave": "KernelMagics",
+        "bookmark": "OSMagics",
+        "cat": "Other",
+        "cd": "OSMagics",
+        "clear": "KernelMagics",
+        "colors": "BasicMagics",
+        "config": "ConfigMagics",
+        "connect_info": "KernelMagics",
+        "cp": "Other",
+        "debug": "ExecutionMagics",
+        "dhist": "OSMagics",
+        "dirs": "OSMagics",
+        "doctest_mode": "BasicMagics",
+        "ed": "Other",
+        "edit": "KernelMagics",
+        "env": "OSMagics",
+        "gui": "BasicMagics",
+        "hist": "Other",
+        "history": "HistoryMagics",
+        "killbgscripts": "ScriptMagics",
+        "ldir": "Other",
+        "less": "KernelMagics",
+        "lf": "Other",
+        "lk": "Other",
+        "ll": "Other",
+        "load": "CodeMagics",
+        "load_ext": "ExtensionMagics",
+        "loadpy": "CodeMagics",
+        "logoff": "LoggingMagics",
+        "logon": "LoggingMagics",
+        "logstart": "LoggingMagics",
+        "logstate": "LoggingMagics",
+        "logstop": "LoggingMagics",
+        "ls": "Other",
+        "lsmagic": "BasicMagics",
+        "lx": "Other",
+        "macro": "ExecutionMagics",
+        "magic": "BasicMagics",
+        "man": "KernelMagics",
+        "matplotlib": "PylabMagics",
+        "mkdir": "Other",
+        "more": "KernelMagics",
+        "mv": "Other",
+        "notebook": "BasicMagics",
+        "page": "BasicMagics",
+        "pastebin": "CodeMagics",
+        "pdb": "ExecutionMagics",
+        "pdef": "NamespaceMagics",
+        "pdoc": "NamespaceMagics",
+        "pfile": "NamespaceMagics",
+        "pinfo": "NamespaceMagics",
+        "pinfo2": "NamespaceMagics",
+        "popd": "OSMagics",
+        "pprint": "BasicMagics",
+        "precision": "BasicMagics",
+        "profile": "BasicMagics",
+        "prun": "ExecutionMagics",
+        "psearch": "NamespaceMagics",
+        "psource": "NamespaceMagics",
+        "pushd": "OSMagics",
+        "pwd": "OSMagics",
+        "pycat": "OSMagics",
+        "pylab": "PylabMagics",
+        "qtconsole": "KernelMagics",
+        "quickref": "BasicMagics",
+        "recall": "HistoryMagics",
+        "rehashx": "OSMagics",
+        "reload_ext": "ExtensionMagics",
+        "rep": "Other",
+        "rerun": "HistoryMagics",
+        "reset": "NamespaceMagics",
+        "reset_selective": "NamespaceMagics",
+        "rm": "Other",
+        "rmdir": "Other",
+        "run": "ExecutionMagics",
+        "save": "CodeMagics",
+        "sc": "OSMagics",
+        "set_env": "OSMagics",
+        "store": "StoreMagics",
+        "sx": "OSMagics",
+        "system": "OSMagics",
+        "tb": "ExecutionMagics",
+        "time": "ExecutionMagics",
+        "timeit": "ExecutionMagics",
+        "unalias": "OSMagics",
+        "unload_ext": "ExtensionMagics",
+        "who": "NamespaceMagics",
+        "who_ls": "NamespaceMagics",
+        "whos": "NamespaceMagics",
+        "xdel": "NamespaceMagics",
+        "xmode": "BasicMagics"
+       }
+      },
+      "text/plain": [
+       "Available line magics:\n",
+       "%alias  %alias_magic  %autocall  %automagic  %autosave  %bookmark  %cat  %cd  %clear  %colors  %config  %connect_info  %cp  %debug  %dhist  %dirs  %doctest_mode  %ed  %edit  %env  %gui  %hist  %history  %killbgscripts  %ldir  %less  %lf  %lk  %ll  %load  %load_ext  %loadpy  %logoff  %logon  %logstart  %logstate  %logstop  %ls  %lsmagic  %lx  %macro  %magic  %man  %matplotlib  %mkdir  %more  %mv  %notebook  %page  %pastebin  %pdb  %pdef  %pdoc  %pfile  %pinfo  %pinfo2  %popd  %pprint  %precision  %profile  %prun  %psearch  %psource  %pushd  %pwd  %pycat  %pylab  %qtconsole  %quickref  %recall  %rehashx  %reload_ext  %rep  %rerun  %reset  %reset_selective  %rm  %rmdir  %run  %save  %sc  %set_env  %store  %sx  %system  %tb  %time  %timeit  %unalias  %unload_ext  %who  %who_ls  %whos  %xdel  %xmode\n",
+       "\n",
+       "Available cell magics:\n",
+       "%%!  %%HTML  %%SVG  %%bash  %%capture  %%debug  %%file  %%html  %%javascript  %%js  %%latex  %%perl  %%prun  %%pypy  %%python  %%python2  %%python3  %%ruby  %%script  %%sh  %%svg  %%sx  %%system  %%time  %%timeit  %%writefile\n",
+       "\n",
+       "Automagic is ON, % prefix IS NOT needed for line magics."
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "%lsmagic"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### What do \"%%\" magic commands do?\n",
+    "The double-percentage magic commands apply to a whole cell, for example the \"%%writefile\", which if entered as \"%%writefile PATH/NAME.EXTENSION\" at the top of a cell will write the cell's content to a file in the specified location. Also really cool are the language language-based magic commands that let you switch between programming languages. Note that these will not create persistent environments (kernels) for those languages. For example, we can use \"%%html\" to render a nice [example website](https://www.example.com) in Jupyter markdown:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n",
+       "<html>\n",
+       "<head>\n",
+       "  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n",
+       "  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\">\n",
+       "  <title></title>\n",
+       "  <meta name=\"Generator\" content=\"Cocoa HTML Writer\">\n",
+       "  <meta name=\"CocoaVersion\" content=\"1504.82\">\n",
+       "  <style type=\"text/css\">\n",
+       "    body {background-color: #f0f0f2}\n",
+       "    p.p2 {margin: 0.0px 0.0px 12.0px 0.0px; line-height: 14.0px; font: 12.0px 'Helvetica Neue'; color: #000000; -webkit-text-stroke: #000000}\n",
+       "    p.p3 {margin: 0.0px 0.0px 12.0px 0.0px; line-height: 14.0px; font: 12.0px 'Helvetica Neue'; color: #38488f; -webkit-text-stroke: #38488f}\n",
+       "    span.s1 {font-kerning: none; background-color: #ffffff}\n",
+       "    span.s2 {font: 12.0px 'Helvetica Neue'; font-kerning: none; color: #38488f; -webkit-text-stroke: 0px #38488f}\n",
+       "  </style>\n",
+       "</head>\n",
+       "<body>\n",
+       "<h1 style=\"margin: 0.0px 0.0px 16.1px 0.0px; line-height: 29.0px; font: 24.0px 'Helvetica Neue'; color: #000000; -webkit-text-stroke: #000000\"><span class=\"s1\"><b>Example Domain</b></span></h1>\n",
+       "<p class=\"p2\"><span class=\"s1\">This domain is established to be used for illustrative examples in documents. You may use this domain in examples without prior coordination or asking for permission.</span></p>\n",
+       "<p class=\"p3\"><span class=\"s1\"><a href=\"http://www.iana.org/domains/example\">More information...<span class=\"s2\"></span></a></span></p>\n",
+       "</body>\n",
+       "</html>\n"
+      ],
+      "text/plain": [
+       "<IPython.core.display.HTML object>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "%%html\n",
+    "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n",
+    "<html>\n",
+    "<head>\n",
+    "  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n",
+    "  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\">\n",
+    "  <title></title>\n",
+    "  <meta name=\"Generator\" content=\"Cocoa HTML Writer\">\n",
+    "  <meta name=\"CocoaVersion\" content=\"1504.82\">\n",
+    "  <style type=\"text/css\">\n",
+    "    body {background-color: #f0f0f2}\n",
+    "    p.p2 {margin: 0.0px 0.0px 12.0px 0.0px; line-height: 14.0px; font: 12.0px 'Helvetica Neue'; color: #000000; -webkit-text-stroke: #000000}\n",
+    "    p.p3 {margin: 0.0px 0.0px 12.0px 0.0px; line-height: 14.0px; font: 12.0px 'Helvetica Neue'; color: #38488f; -webkit-text-stroke: #38488f}\n",
+    "    span.s1 {font-kerning: none; background-color: #ffffff}\n",
+    "    span.s2 {font: 12.0px 'Helvetica Neue'; font-kerning: none; color: #38488f; -webkit-text-stroke: 0px #38488f}\n",
+    "  </style>\n",
+    "</head>\n",
+    "<body>\n",
+    "<h1 style=\"margin: 0.0px 0.0px 16.1px 0.0px; line-height: 29.0px; font: 24.0px 'Helvetica Neue'; color: #000000; -webkit-text-stroke: #000000\"><span class=\"s1\"><b>Example Domain</b></span></h1>\n",
+    "<p class=\"p2\"><span class=\"s1\">This domain is established to be used for illustrative examples in documents. You may use this domain in examples without prior coordination or asking for permission.</span></p>\n",
+    "<p class=\"p3\"><span class=\"s1\"><a href=\"http://www.iana.org/domains/example\">More information...<span class=\"s2\"></span></a></span></p>\n",
+    "</body>\n",
+    "</html>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### Not everyone has Jupyter even though you may want to share!\n",
+    "This is ok, because you can use the Jupyter/IPython notebook viewer facility:\n",
+    "\n",
+    "* https://nbviewer.jupyter.org\n",
+    "\n",
+    "All you have to do is get your notebook into a public location on the internet and then place its url in the specified location (in the website above). This will generate a link that people can visit, where the notebook can be viewed as html through ANY browser, regardless of whether or not they have Jupyter. In fact, supposing you have not downloaded Jupyter yet this is how you are viewing this introduction&mdash;here's the link for [this very notebook](https://nbviewer.jupyter.org/url/www.pages.drexel.edu/%7Ejw3477/documents/GettingStartedWithJupyter.ipynb)!"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### What to do next?\n",
+    "Well, next week's will play with different kinds of data, but for now feel free to check out the offical gallery of interesting Jupyter notebooks:\n",
+    "\n",
+    "* https://github.com/jupyter/jupyter/wiki/A-gallery-of-interesting-Jupyter-Notebooks\n",
+    "\n",
+    "For example, there is the xkcd-style plotifier:\n",
+    "\n",
+    "* http://nbviewer.jupyter.org/url/jakevdp.github.com/downloads/notebooks/XKCD_plots.ipynb\n",
+    "\n",
+    "Also, keep the Jupyter/IPython docs handy for reference:\n",
+    "\n",
+    "* http://ipython.readthedocs.io/en/stable/index.html"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.7.3"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}