{ "cells": [ { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Literate / reproducible exploratory data analysis using Jupyter Notebooks\n", "\n", "Tony Hirst\n", "\n", "*Computing and Communications*\n", "\n", "https://blog.ouseful.info\n", "https://github.com/ouseful-demos/" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "skip" } }, "source": [ "Jupyter notebooks are a browser based, interactive environment widely used in computational research and commercial data science environments. Notebooks provide a blended research environment within which rich text (HTML), code and outputs generated from code, such as charts and tables, or even static or interactive maps, can be created and displayed.\n", " \n", "Using simple analysis scripts, typically written using Python or R, researchers can create narrated, readable, reproducible, shareable research workflows as well as all-in-one “text+source code” versions of research papers, where the code used to produce analyses reported in the paper is self-contained within the notebook itself.\n", " \n", "In this workshop you will have an opportunity to see how notebooks can be used and even try them out yourself. All you need is a desktop computer, laptop, tablet or even phone running a Chrome or Firefox browser." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Play Along" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Reproducibility...\n", "\n", "Can you:\n", "\n", "- find that data source again?\n", "- clean the data the same way as last time?\n", "- generate the same diagram?\n", "- recreate the analysis?\n", "- get the code to work the same way?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Literate Computing\n", "\n", "Is there:\n", " \n", "- a clear linear narrative;\n", "- comments, qualifications and context to help you make sense, a year down, the line of:\n", " - your data?\n", " - your code?\n", " - your analyses?\n", " - your results?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Jupyter...\n", "\n", "- is an ecosystem of tools and protocols for helping you:\n", " - access self-contained computational environments\n", " - create rich, interactive documents that blend:\n", " - text;\n", " - code;\n", " - code outputs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# This is a presentation powered by a Jupyter Notebook...\n", "\n", "...one possible interface you can use to access Jupyter computing environments." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Using Code\n", "\n", "Code is entered and executed via code cells. The execution environment is determined by the notebook kernel attached to the notebook.\n", "\n", "This notebook has been associated with an Python kernel. Which means we can write — and execute — Python code in the cells:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "hello world\n" ] } ], "source": [ "print(\"hello world\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# [`Jupyter_py_and_R.ipynb` Demo](./Jupyter_py_and_R.ipynb)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# [`Food Standards Agency.ipynb` Demo](./Food%20Standards%20Agency.ipynb)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## Text Analysis\n", "\n", "A wide range of packages support analysis of English, as well as classical, texts." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Spacy — Visualise Sentence Morphology" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", " This\n", " DET\n", "\n", "\n", "\n", " is\n", " VERB\n", "\n", "\n", "\n", " a\n", " DET\n", "\n", "\n", "\n", " sentence.\n", " NOUN\n", "\n", "\n", "\n", " \n", " \n", " nsubj\n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " det\n", " \n", " \n", "\n", "\n", "\n", " \n", " \n", " attr\n", " \n", " \n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import spacy\n", "from spacy import displacy\n", "\n", "nlp = spacy.load(\"en_core_web_sm\")\n", "doc = nlp(\"This is a sentence.\")\n", "displacy.render(doc, style=\"dep\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Spacy — Semantic Tagging" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
The current Chancellor of \n", "\n", " the Open University\n", " ORG\n", "\n", " is \n", "\n", " Martha Lane Fox\n", " PERSON\n", "\n", ".
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "text = \"The current Chancellor of the Open University is Martha Lane Fox.\"\n", "\n", "nlp = spacy.load(\"en_core_web_sm\")\n", "doc = nlp(text)\n", "displacy.render(doc, style=\"ent\")\n" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# NLTK - Text Analysis Package\n", "\n", "(See also: CLTK - Classical Languages Text Analysis)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[nltk_data] Downloading package punkt to /Users/tonyhirst/nltk_data...\n", "[nltk_data] Unzipping tokenizers/punkt.zip.\n" ] }, { "data": { "text/plain": [ "['austen-emma.txt',\n", " 'austen-persuasion.txt',\n", " 'austen-sense.txt',\n", " 'bible-kjv.txt',\n", " 'blake-poems.txt',\n", " 'bryant-stories.txt',\n", " 'burgess-busterbrown.txt',\n", " 'carroll-alice.txt',\n", " 'chesterton-ball.txt',\n", " 'chesterton-brown.txt',\n", " 'chesterton-thursday.txt',\n", " 'edgeworth-parents.txt',\n", " 'melville-moby_dick.txt',\n", " 'milton-paradise.txt',\n", " 'shakespeare-caesar.txt',\n", " 'shakespeare-hamlet.txt',\n", " 'shakespeare-macbeth.txt',\n", " 'whitman-leaves.txt']" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import nltk\n", "#nltk.download('gutenberg')\n", "#nltk.download('punkt')\n", "\n", "nltk.corpus.gutenberg.fileids()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Load Text and View sentences" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[['[',\n", " 'The',\n", " 'Tragedie',\n", " 'of',\n", " 'Macbeth',\n", " 'by',\n", " 'William',\n", " 'Shakespeare',\n", " '1603',\n", " ']'],\n", " ['Actus', 'Primus', '.']]" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from nltk.corpus import gutenberg\n", "\n", "macbeth_sentences = gutenberg.sents('shakespeare-macbeth.txt')\n", "macbeth_sentences[:2]" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Text Concordance" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "slideshow": { "slide_type": "-" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Displaying 2 of 2 matches:\n", "er of an houre Lad . Yet heere ' s a spot Doct . Heark , she speaks , I will s\n", "ce the more strongly La . Out damned spot : out I say . One : Two : Why then '\n" ] } ], "source": [ "# Load full text\n", "macbeth = nltk.Text(nltk.corpus.gutenberg.words('shakespeare-macbeth.txt'))\n", "\n", "# Text concordances\n", "macbeth.concordance(\"spot\")" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Dispersion Plots" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY8AAAEWCAYAAACe8xtsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAZtElEQVR4nO3de5hlVX3m8e8rqKitINKDSgyleEexhdYAA9IkjoLibdQBRkdwNIgzOqMJ8RKNtI9Rw8ULUWdUDBFF8ZaYENRH0JF4QcECuSmoqO0FLzRiKygq4G/+2Kvsw7GqulZVdVc3/f08z3nOPmvvvdbaq06ft/bau0+lqpAkqcdtlroDkqQtj+EhSepmeEiSuhkekqRuhockqZvhIUnqZnjoViPJJ5IcscA6jkzy+QXW8dUkqxZSx2JajHGZR5urk5y2KdvUpmV4aEkkWZPk0YtZZ1UdXFWnLmado5JMJKkk17fHT5KcmeQ/jfVj96o6Z2P1o9fGGpck707y2zYW1yY5O8kD51HPor8XtPEZHlK/HapqGfAw4Gzgo0mOXKrOJNl2qdoGjm9j8UfA1cC7l7Av2oQMD212khyS5KIk65Kcm2SPVr5b+w13z/b6nknWTk0RJTknyXNH6vnzJJcnuS7J10b2e1mSb42UP2U+/ayqH1fVScBq4Lgkt2n1//436SSPTDKZ5BftTOWNrXzqLOaoJD9M8qMkx4z0/TYj/fxpkg8l2XFs3+ck+R7w/5Jsl+S0tu26JF9OsvP4uLR6X5nku0muTvKeJNuP1XtEku8luSbJK+Y4Fr8C3g88ZLr1SZ7YpvPWtf48qJW/F/hj4N/aGcxLen8OWhqGhzYrSR4OnAI8D7gb8A7gjCS3r6pvAS8FTktyR+AfgVOnmyJK8nSGD/VnAXcBngj8tK3+FrA/sD3w6lbfPRbQ7X8G/gPwgGnWnQScVFV3AXYDPjS2/kDgfsBjgJeOTN+8EHgycABwT+BnwNvG9j0AeBDwWOCIdjz3Yhi3o4EbpunPke1xIHAfYBnw1rFt9mvH8mfAq6Y+6GeTZBnwDOAr06y7P3A68CJgOfBxhrC4XVX9N+B7wBOqallVHb+htrR5MDy0uTkKeEdVnVdVN7e5+t8AewNU1cnAlcB5wD2AmX4zfi7DlMqXa3BlVX231fHhqvphVf2uqj4IfBN45AL6/MP2vOM0624E7ptkp6q6vqq+NLb+1VX1y6q6lCEMD2/lRwOvqKofVNVvGILwaWNTVKvbvje0du4G3LeN2wVV9Ytp+vMM4I1V9e2quh54OXDYWL2vrqobqupi4GKG6bmZHJNkHcPPZBlDMI07FPhYVZ1dVTcCJwJ3APadpV5t5gwPbW52Bf6yTW+sax9M92L47XvKyQzTI29pH6zTuRfDGcYfSPKskWmxda2unRbQ513a87XTrHsOcH/gijaVdMjY+u+PLH+X9ce5K8O1lKk+Xg7cDOw8w77vBT4JfKBNgx2f5LbT9OeerZ3RNrcdq/fHI8u/YgiFmZxYVTtU1d2r6ont7HDWNqvqd63vu0yzrbYQhoc2N98HXts+kKYed6yq0+H30yNvBv4BWD11HWCGenYbL0yyK0P4vAC4W1XtAFwGZAF9fgrDxeKvj6+oqm9W1eEM01rHAR9JcqeRTe41svzHrD+L+T5w8Ng4bFdVV41WP9LOjVX16qp6MMNv9IcwTNmN+yFDMI22eRPwkzke63zcos0kYTjuqWPxq723QIaHltJt24Xeqce2DB/sRyf5kwzulOTxSe7c9jkJmKyq5wIfA94+Q93vYphS2avVc98WHHdi+LBaC5Dk2cxwkXdDkuyc5AXAscDL22/U49s8M8nytm5dKx7d7m+S3DHJ7sCzgQ+28rcDr219JsnyJE+apS8HJnlokm2AXzBMY/1BfxiuPbw4yb1bEL8O+GBV3dRz7J0+BDw+yZ+1s6G/ZJiKPLet/wnD9RdtQQwPLaWPM1zUnXqsrqpJ4M8ZLuL+jGEu/UiA9uF5EPD8tv9fAHsmecZ4xVX1YeC1DHcAXQf8C7BjVX0NeAPwRYYPrYcCX+js97okvwQuBR4HPL2qTplh24OArya5niH4DmvXKKb8ezvGTzNMAZ3Vyk8CzgDOSnId8CXgT2bp092BjzAEx+Wt3vdOs90prfyzwHeAXzNcnN9oqurrwDOBtwDXAE9guED+27bJ64FXtim6Y2aoRpuZ+MegpE0vyQTDh/dtN/Jv/dJG4ZmHJKmb4SFJ6ua0lSSpm2cekqRuS/mFapvMTjvtVBMTE0vdDUnaolxwwQXXVNXy6dZtFeExMTHB5OTkUndDkrYoSb470zqnrSRJ3QwPSVI3w0OS1M3wkCR1MzwkSd0MD0lSN8NDktTN8JAkdTM8JEndDA9JUjfDQ5LUzfCQJHUzPCRJ3QwPSVI3w0OS1M3wkCR1MzwkSd0MD0lSN8NDktTN8JAkdTM8JEndDA9JUjfDQ5LUzfCQJHUzPCRJ3QwPSVI3w0OS1M3wkCR1MzwkSd0MD0lSN8NDktTN8JAkdTM8JEndDA9JUjfDQ5LUzfCQJHUzPCRJ3QwPSVI3w0OS1M3wkCR1MzwkSd0MD0lSN8NDktTN8JAkdTM8JEndDA9JUjfDQ5LUzfCQJHUzPCRJ3QwPSVK3DYZHQiWcNvJ624S1CWfOp8GENQk7dWy/KmHfkdfvTnjafNqej9Wrh8fo6+mWAVatmv71xMT67Ue3Gd9/urbnuu1c65nP+oXsN90242M63zp6+jFbH3r709PGXNdtjPZna2sh4z8xATvsMHNdi30ss72HesZ4sdru3b+3jrluP/4enmnfjfXeSlXNvkG4HrgS2KeKGxIOBl4P/KCKQ7obDGuAlVVcM8ftVwPXV3Fie/1u4MwqPjLXNleuXFmTk5O9XZ1qH4CpYUqmX57t9ejzTHXN1PZct93QMcy1ncWsd6ZtxsdhPu0sdGxG+9Dbn542ZqpzQ++djdmPhY7/hsZusY9ltvfQeNsb2m8x2u7dH/rqmGub4z+H0ef51Dd9G7mgqlZOt26u01YfBx7flg8HTh/p2CMTvpjwlYRzEx7QyrdJODHhsoRLEl44Ut9LEi5NOD/hvm375Qn/lPDl9viPCRPA0cCLEy5K2L/t/6jW1rc35VmIJGkw1/D4AHBYwnbAHsB5I+uuAPav4uHAq4DXtfKjgAlgRRV7AO8b2efnVTwUeCvw5lZ2EvCmKh4BPBV4VxVrgLe38hVVfK5tew9gP+AQ4O+m63CSo5JMJplcu3btHA9TkjQX285loyouaWcBhzOchYzaHjg14X5AAbdt5Y8G3l7FTa2Oa0f2OX3k+U0j2z945HT0LgnLZujSv1TxO+BrCTtP3+d6J/BOGKatNnSMkqS5m1N4NGcAJwKrgLuNlL8G+EwVT2kBc84c6qpplm8D7F3Fr0c3HJ3bHPGb0U3m0J4kaRH1hMcpwLoqLk1YNVK+PXBVWz5ypPxs4HkJn6nipoQdR84+DmWYbjoU+GIrOwt4IXACQMKKKi4CrgPu0tHPRXXssTO/Hl93wAHTv9511/Xbn3POzPvP1vaGtp1rPfNZv5D9ptumt70N1TGf/i/W2M61jQ2t21h9WIy2xrffdVdYt27muhb7WObbxmL0Y6F1LPS9OdftppY3xc9jypzutqq65fRRC49jqjgkYR/gVOCXwMeAZ1YxkbAtcDxwEHAjcHIVb213W30QOJjhDOLwKq5st+++DXgQQ6h9toqjE+4PfAT4HUO4PIeRu62m69+4hdxtJUlbq9nuttpgeNwaGB6S1G8xbtWVJOn3DA9JUjfDQ5LUzfCQJHUzPCRJ3QwPSVI3w0OS1M3wkCR1MzwkSd0MD0lSN8NDktTN8JAkdTM8JEndDA9JUjfDQ5LUzfCQJHUzPCRJ3QwPSVI3w0OS1M3wkCR1MzwkSd0MD0lSN8NDktTN8JAkdTM8JEndDA9JUjfDQ5LUzfCQJHUzPCRJ3QwPSVI3w0OS1M3wkCR1MzwkSd0MD0lSN8NDktTN8JAkdTM8JEndDA9JUjfDQ5LUzfCQJHUzPCRJ3QwPSVI3w0OS1M3wkCR1MzwkSd26wiOhEk4beb1twtqEMxfakYRVc6kn4X8lXJ7wvoTbJ3wq4aKEQxfah63B6tVL3YO5ma2fW8oxLKXNZYxWr16aviy0zfnuv7mM+6aQqpr7xuF64EpgnypuSDgYeD3wgyoOWVBHwirgmA3Vk3AF8OgqfpCwN/C3VTx6tn1WrlxZk5OTC+nerUYCHT/yJTNbP7eUY1hKm8sYJcPzpu7LQo9/vvtvLuO+WJJcUFUrp1s3n2mrjwOPb8uHA6evb4hHJnwx4SsJ5yY8oJVvk3BiwmUJlyS8sJUflHBFwoXAfx6pZ3XCMSOvL0uYSHg7cB/gEwkvBU4DHtHOPHabx7FIkuZhPuHxAeCwhO2APYDzRtZdAexfxcOBVwGva+VHARPAiir2AN7X9j8ZeAKwF3D3DTVcxdHAD4EDqzgOeC7wuSpWVPGt0W2THJVkMsnk2rVr53GYkqSZdIdHFZcwBMHhDGcho7YHPpxwGfAmYPdW/mjgHVXc1Oq4Fngg8J0qvllFwfprKYuhqt5ZVSurauXy5csXs2pJ2urN926rM4ATGZmyal4DfKaKhzCcUWw3z/pvGuvbfOuRJG0E285zv1OAdVVc2i50T9keuKotHzlSfjbwvITPVHFTwo4MU1wTCbu1KafDR7ZfA8OF84Q9gXvPs58ac+yxS92DuZmtn1vKMSylzWWMlqofC213vvtvLuO+KXTfbVXFsrGyVbS7pBL2AU4Ffgl8DHhmFRMJ2wLHAwcBNwInV/HWhIOANwO/Aj4H7NbquQPwr8AuDNdU9gEOrmJNwhpgZRXXzPUOLe+2kqR+s91t1RUeWyrDQ5L6LfatupKkrZzhIUnqZnhIkroZHpKkboaHJKmb4SFJ6mZ4SJK6GR6SpG6GhySpm+EhSepmeEiSuhkekqRuhockqZvhIUnqZnhIkroZHpKkboaHJKmb4SFJ6mZ4SJK6GR6SpG6GhySpm+EhSepmeEiSuhkekqRuhockqZvhIUnqZnhIkroZHpKkboaHJKmb4SFJ6mZ4SJK6GR6SpG6GhySpm+EhSepmeEiSuhkekqRuhockqZvhIUnqZnhIkroZHpKkboaHJKmb4SFJ6mZ4SJK6GR6SpG6GhySp27zCI+HmhIsSLk64MGHfxe7YrcHq1cNj1KpV869rQ8u99czXdHUsRr29Vq2CiYmF1TFTv8d/dqM/t/F9pnu9kLLx59nGdr7jvtg/r9Wr14/RUrwXltLWdrxTUlX9O4Xrq1jWlh8L/HUVByx25xbLypUra3JycpO3mwzPo0Oc3PJ1T11T+8203FvPfE1Xx2LUO59+wMLananf43XPNubTvR7vV09Z1S2fx7eZS/83ZLF/XqP9XIr3wlK6NR9vkguqauV06xZj2uouwM+GhliW8Ol2NnJpwpNa+UTC5QknJ3w14ayEO7R1e7UzmIsTTki4rJUfmfDW9QfBmQmr2vLhrf7LEo5bhGOQJHWYb3jcoU1bXQG8C3hNK/818JQq9gQOBN6Q0H4n4X7A26rYHVgHPLWV/yPwwioeNpeGE+4JHAf8KbACeETCk/9wuxyVZDLJ5Nq1a+d3lJKkac03PG6oYkUVDwQOAt7TQiLA6xIuAT4F7ALs3Pb5ThUXteULgImEHYAdqvhsK3/vHNp+BHBOFWuruAl4H/Co8Y2q6p1VtbKqVi5fvnyehylJms62C62gii8m7AQsBx7Xnveq4saENcB2bdPfjOx2MwzTVrO4iVuG23YzbShJ2rQWHB4JDwS2AX4KbA9c3YLjQGDX2fatYl3CuoT9qvg88IyR1WuA/5FwG4YzmEe28vOBv2+B9TPgcOAtCz2OjeHYY/+w7IB53lYwWtdMy/Pt00L6spj19jrgAFizZmF1zNTv8fLRn9v4ug29nk/Z+PNM5jvui/3zOvZYOOecjVP35m5rO94p873b6mbg0qmXDHdbfax9oP8bsAyYBPYGDm7bnVnFQ9r+xwDLqlidsBdwClDAWcDjqnhImwY7DdgLuBy4K7C6inMSDgf+urX9sSpeOlt/l+puK0naks12t9W8wmNjSZhgJGQWi+EhSf029q26kqStzIKveSymKtbA4p51SJIWn2cekqRuhockqZvhIUnqZnhIkroZHpKkboaHJKmb4SFJ6mZ4SJK6GR6SpG6GhySpm+EhSepmeEiSuhkekqRuhockqZvhIUnqZnhIkroZHpKkboaHJKmb4SFJ6mZ4SJK6GR6SpG6GhySpm+EhSepmeEiSuhkekqRuhockqZvhIUnqZnhIkroZHpKkboaHJKmb4SFJ6mZ4SJK6GR6SpG6GhySpm+EhSepmeEiSuhkekqRuhockqZvhIUnqZnhIkroZHpKkboaHJKmb4SFJ6mZ4SJK6GR6SpG6GhySpm+EhSeqWqlrqPmx0SdYC353n7jsB1yxid7Z0jsd6jsV6jsV6t6ax2LWqlk+3YqsIj4VIMllVK5e6H5sLx2M9x2I9x2K9rWUsnLaSJHUzPCRJ3QyPDXvnUndgM+N4rOdYrOdYrLdVjIXXPCRJ3TzzkCR1MzwkSd0Mj1kkOSjJ15NcmeRlS92fjSXJmiSXJrkoyWQr2zHJ2Um+2Z7v2sqT5O/bmFySZM+Reo5o238zyRFLdTw9kpyS5Ookl42ULdqxJ9mrje2Vbd9s2iOcuxnGYnWSq9p746IkjxtZ9/J2XF9P8tiR8mn/3SS5d5LzWvkHk9xu0x1dnyT3SvKZJF9L8tUk/7uVb5XvjWlVlY9pHsA2wLeA+wC3Ay4GHrzU/dpIx7oG2Gms7HjgZW35ZcBxbflxwCeAAHsD57XyHYFvt+e7tuW7LvWxzeHYHwXsCVy2MY4dOL9tm7bvwUt9zJ1jsRo4ZpptH9z+TdweuHf7t7LNbP9ugA8Bh7XltwPPX+pjnmUs7gHs2ZbvDHyjHfNW+d6Y7uGZx8weCVxZVd+uqt8CHwCetMR92pSeBJzalk8FnjxS/p4afAnYIck9gMcCZ1fVtVX1M+Bs4KBN3eleVfVZ4Nqx4kU59rbuLlX1pRo+Ld4zUtdmZ4axmMmTgA9U1W+q6jvAlQz/Zqb9d9N+q/5T4CNt/9Fx3exU1Y+q6sK2fB1wObALW+l7YzqGx8x2Ab4/8voHrezWqICzklyQ5KhWtnNV/agt/xjYuS3PNC63pvFarGPfpS2Pl29pXtCmYk6ZmqahfyzuBqyrqpvGyjd7SSaAhwPn4Xvj9wwPAexXVXsCBwP/M8mjRle234y2ynu6t+Zjb/4vsBuwAvgR8Ial7c6mlWQZ8E/Ai6rqF6Prtvb3huExs6uAe428/qNWdqtTVVe156uBjzJMPfyknVrTnq9um880Lrem8VqsY7+qLY+XbzGq6idVdXNV/Q44meG9Af1j8VOGqZxtx8o3W0luyxAc76uqf27Fvjcaw2NmXwbu1+4QuR1wGHDGEvdp0SW5U5I7Ty0DjwEuYzjWqTtDjgD+tS2fATyr3V2yN/Dzdhr/SeAxSe7apjYe08q2RIty7G3dL5Ls3eb8nzVS1xZh6oOyeQrDewOGsTgsye2T3Bu4H8MF4Gn/3bTf0j8DPK3tPzqum5328/oH4PKqeuPIKt8bU5b6iv3m/GC4g+IbDHePvGKp+7ORjvE+DHfEXAx8deo4GeaoPw18E/gUsGMrD/C2NiaXAitH6vrvDBdOrwSevdTHNsfjP51hOuZGhnnn5yzmsQMrGT5wvwW8lfatDpvjY4axeG871ksYPiDvMbL9K9pxfZ2RO4Vm+nfT3mvntzH6MHD7pT7mWcZiP4YpqUuAi9rjcVvre2O6h19PIknq5rSVJKmb4SFJ6mZ4SJK6GR6SpG6GhySpm+EhNUnelORFI68/meRdI6/fkOQvFlD/6iTHzLDuqCRXtMf5SfYbWbd/+2bXi5LcIckJ7fUJne1PJPmv8+2/NMrwkNb7ArAvQJLbADsBu4+s3xc4dy4VjfxP6rlsewjwPIaviXkgcDTw/iR3b5s8A3h9Va2oqhuAo4A9quqv5tpGMwEYHloUhoe03rnAPm15d4b/wHVd+9/BtwceBFzY/hfxCUkua3+P4VCAJKuSfC7JGcDXWtkrknwjyeeBB8zQ7kuBv6qqawBq+DbXUxm+Z+y5wH8BXpPkfa3uZcAFSQ5N8vTWj4uTfLa1uU3r35fbFxo+r7Xzd8D+7QzmxYs5cNr6zPm3I+nWrqp+mOSmJH/McJbxRYZvOt0H+DlwaVX9NslTGb4o8GEMZydfnvrgZvh7GA+pqu8k2Yvh6zlWMPxbuxC4YJqmd5+mfBI4oqr+pk1hnVlVHwFIcn1VrWjLlwKPraqrkuzQ9n0Ow9djPKKF3heSnMXw9yeOqapDFjZSkuEhjTuXITj2Bd7IEB77MoTHF9o2+wGnV9XNDF+U9+/AI4BfAOfX8PctAPYHPlpVvwJoZw2L7QvAu5N8CJj68r7HAHskmfoeqe0ZvnvqtxuhfW2lnLaSbmnqusdDGaatvsRw5jHX6x2/nEebXwP2Givbi+G7xmZVVUcDr2T45tYLktyN4XuWXtiukayoqntX1Vnz6Jc0I8NDuqVzgUOAa2v4KvJrgR0YAmQqPD4HHNquLSxn+POt509T12eBJ7c7pO4MPGGGNo8Hjmsf/CRZARwJ/J8NdTbJblV1XlW9CljLECKfBJ7fvlKcJPdv35h8HcOfVJUWzGkr6ZYuZbiO8f6xsmVTF7QZ/ubJPgzfRFzAS6rqx0keOFpRVV2Y5INtu6sZvq78D1TVGUl2Ac5NUgwf8s+s9X+xbjYnJLkfw9nGp1tblzDcWXVh+7rvtQx/4vQS4OYkFwPvrqo3zaF+aVp+q64kqZvTVpKkboaHJKmb4SFJ6mZ4SJK6GR6SpG6GhySpm+EhSer2/wHK1qvNnpqHRwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "macbeth.dispersion_plot(['Macbeth', 'Macduff', 'Banquo'])" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Other examples\n", "\n", "https://github.com/ouseful-demos/getting-started-with-notebooks" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Reproducible Computing Environments\n", "\n", "Computing environments where you guarantee that certain software packages:\n", "\n", "- are installed;\n", "- are available." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Reproducible Computing Environments Using Jupyter Tools\n", "\n", "\n", "- MyBinder\n", "- repo2docker" ] } ], "metadata": { "celltoolbar": "Slideshow", "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.6" } }, "nbformat": 4, "nbformat_minor": 4 }