{ "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.3.5" }, "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[![Py4Life](https://raw.githubusercontent.com/Py4Life/TAU2015/gh-pages/img/Py4Life-logo-small.png)](http://py4life.github.io/TAU2015/)\n", "# Using web APIs with Python - 9.6.2015\n", "### Last update: 9.6.2015\n", "### Tel-Aviv University / 0411-3122 / Spring 2015" ] }, { "cell_type": "code", "collapsed": true, "input": [ "%matplotlib inline\n", "from IPython.display import HTML\n", "import matplotlib.pyplot as plt\n", "import requests\n", "import pandas as pd\n", "import numpy as np\n", "import seaborn as sns\n", "sns.set_style('white')\n", "sns.set_context('talk', font_scale=1.2)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "The Very Hungry Caterpillar example" ] }, { "cell_type": "code", "collapsed": false, "input": [ "HTML('

Hmm, I don't know about this caterpillar rearing manual. I thought P.rapae had an obligate association w/ Brassica. pic.twitter.com/M10dqbOYlN

— Christie Bahlai (@cbahlai) \u05de\u05d0\u05d9 10, 2015
')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "

Hmm, I don't know about this caterpillar rearing manual. I thought P.rapae had an obligate association w/ Brassica. pic.twitter.com/M10dqbOYlN

— Christie Bahlai (@cbahlai) \u05de\u05d0\u05d9 10, 2015
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [ "" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "HTML('

This is a terrible dataset about caterpillar diet. How did it got published? pic.twitter.com/XkAq51HxEP

— Timoth\u00e9e Poisot (@tpoi) \u05d0\u05e4\u05e8\u05d9\u05dc 23, 2015
')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "

This is a terrible dataset about caterpillar diet. How did it got published? pic.twitter.com/XkAq51HxEP

— Timoth\u00e9e Poisot (@tpoi) \u05d0\u05e4\u05e8\u05d9\u05dc 23, 2015
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ "" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "HTML('

@tpoi @kara_woo @cbahlai pic.twitter.com/5lj9EzuKjW

— Yoav Ram (@yoavram) May 10, 2015
')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "

@tpoi @kara_woo @cbahlai pic.twitter.com/5lj9EzuKjW

— Yoav Ram (@yoavram) May 10, 2015
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "HTML('

[blog] How hungry are caterpillars anyway? http://t.co/SvImkHYHhR #opendata

— Timoth\u00e9e Poisot (@tpoi) May 10, 2015
')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "

[blog] How hungry are caterpillars anyway? http://t.co/SvImkHYHhR #opendata

— Timoth\u00e9e Poisot (@tpoi) May 10, 2015
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will learn how to use the Global Biotic Interactions (globi) **web API** with Python to check **[How hungry are caterpillars anyway?](http://timotheepoisot.fr/2015/05/10/hungry-caterpillars/)** (sort of).\n", "\n", "## Web API\n", "First, what is a web API?\n", "\n", "Modern web APIs use are RESTful Application Programming Interface that return responses in JSON format (or sometimes XML) over HTTP (or securely over HTTPS - guess what the S stands for).\n", "\n", "- HTTP: a protocol for transfering text files on the internet\n", "- JSON: a file format, very similar to Python's `dict`.\n", "- REST: a common convention for designing web applications that allow querying and retrieving (and sometimes creating, changing and deleting) data.\n", "\n", "A web API is a language that allows computers to talk to computers (so my computer, running Python, to talk to a computer abroad used as the server for globi). \n", "\n", "The nouns of the languages are URLs. These are Universal Resource Locations (also sometimes URI, with Identifier) and are used to identify resources on the World Wide Web. For example, our course website URL is at . This URL has structure (protocol - HTTP; domain - github.io, used by github to host user websites; subdomain - py4life, used to denote the github user Py4Life; and TAU2015 - the resource requested.\n", "\n", "The verbs of this language are GET, POST, PATCH and DELETE (there are a bunch of others but these are the major ones) that allow us to retrieve a resource and change it (add a new resource with POST, modify and existing one with PATCH, and delete it with DELETE). These are the basic things we can do on the web to things that are represented by URLs.\n", "\n", "So I can read lecture 1 by doing a GET on . \n", "I can create send form on the web by doing a POST. \n", "But machines like to talk to one another using all the verbs, asking each other for resources, adding new resources, changing and deleting existing ones.\n", "\n", "See this nice post by Ryan Tomayko on [explaining REST](http://www.looah.com/source/view/2284).\n", "\n", "## Using the API\n", "\n", "Let's try it, following [Poisot's lead on _The Very Hungry Caterpillar_](http://timotheepoisot.fr/2015/05/10/hungry-caterpillars/).\n", "\n", "We will use [_requests_](http://docs.python-requests.org/en/latest/) - a Python HTTP library _for humans_ - to connect to the globi [API](http://www.globalbioticinteractions.org/). _requests_ is much better and nicer than `urllib` is, and it should be installed, but if not just use `conda install requests` or `pip install requests`.\n", "\n", "For our purpose we only need to GET information from the API, and we want to get infromation regarding interactions, so the base URL is - the protocol is HTTP (this is the language we use), the `globalbioticinteractions.org` is the organization we are talking with, through their `api` subdomain, and we are interested in `interaction` resources.\n", "\n", "Which interactions? This is specified using parameters - you put a `?` before the parameters, separate them with `&`, and spcify them by `key=value`. This is similar to how we call a function in Python using `(...)`, `, `, and `=` for the same purposes.\n", "\n", "We want interactions where the source taxon is Pireis and the type of interaction is eats - what does Pieris eats! \n", "\n", "The URL is: `http://api.globalbioticinteractions.org/interaction?sourceTaxon=Pieris&interactionType=eats`. \n", "\n", "How do I know the name of the domain, the interaction endpoint and the parameter names? From the [API docs](https://github.com/jhpoelen/eol-globi-data/wiki/API)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "response = requests.get(\"http://api.globalbioticinteractions.org/interaction?sourceTaxon=Pieris&interactionType=eats\")\n", "print(\"OK:\", response.ok)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "OK: True\n" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The respose payload is in JSON format. `JSON` is very similar to `dict`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(response.text[:500])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "{\n", " \"columns\" : [ \"source_taxon_external_id\", \"source_taxon_name\", \"source_taxon_path\", \"source_specimen_life_stage\", \"source_specimen_basis_of_record\", \"interaction_type\", \"target_taxon_external_id\", \"target_taxon_name\", \"target_taxon_path\", \"target_specimen_life_stage\", \"target_specimen_basis_of_record\", \"latitude\", \"longitude\", \"study_title\" ],\n", " \"data\" : [ [ \"EOL:174006\", \"Pieris marginalis\", \"Animalia | Bilateria | Protostomia | Ecdysozoa | Arthropoda | Hexapoda | Insecta | Pterygota | Neop\n" ] } ], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Calling the `json` method will return the payload as a `dict`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "payload = response.json()\n", "print(type(payload))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 22 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we need to work out the details of how the data is kept inside this `dict`. We can look it up in the API, but we might be able to do it on our own by just looking at the keys and values. This is why `json` is a nice format - it is just as easily read by humans as it is rad by machines, becoming the developer's work easier." ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(len(payload))\n", "print(payload.keys())\n", "print(payload['data'][:3])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "2\n", "dict_keys(['data', 'columns'])\n", "[['EOL:174006', 'Pieris marginalis', 'Animalia | Bilateria | Protostomia | Ecdysozoa | Arthropoda | Hexapoda | Insecta | Pterygota | Neoptera | Holometabola | Lepidoptera | Papilionoidea | Pieridae | Pierinae | Pierini | Pierina | Pieris | Pieris marginalis', None, None, 'eats', 'EOL:29914', 'Rubus', 'Plantae | Tracheophyta | Magnoliopsida | Rosales | Rosaceae | Rubus | Rubus status', None, None, None, None, None], ['EOL:174006', 'Pieris marginalis', 'Animalia | Bilateria | Protostomia | Ecdysozoa | Arthropoda | Hexapoda | Insecta | Pterygota | Neoptera | Holometabola | Lepidoptera | Papilionoidea | Pieridae | Pierinae | Pierini | Pierina | Pieris | Pieris marginalis', None, None, 'eats', 'EOL:37457', 'Arabis', 'Plantae | Tracheophyta | Magnoliopsida | Brassicales | Brassicaceae | Arabis', None, None, None, None, None], ['EOL:174006', 'Pieris marginalis', 'Animalia | Bilateria | Protostomia | Ecdysozoa | Arthropoda | Hexapoda | Insecta | Pterygota | Neoptera | Holometabola | Lepidoptera | Papilionoidea | Pieridae | Pierinae | Pierini | Pierina | Pieris | Pieris marginalis', None, None, 'eats', 'EOL:37718', 'Rorippa', 'Plantae | Tracheophyta | Magnoliopsida | Brassicales | Brassicaceae | Rorippa', None, None, None, None, None]]\n" ] } ], "prompt_number": 27 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The response has two fields, `columns` and `data`, corresponding to the data frame's column names and rows. That's great because we can push it right into a `pandas.DataFrame`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(payload['columns'])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['source_taxon_external_id', 'source_taxon_name', 'source_taxon_path', 'source_specimen_life_stage', 'source_specimen_basis_of_record', 'interaction_type', 'target_taxon_external_id', 'target_taxon_name', 'target_taxon_path', 'target_specimen_life_stage', 'target_specimen_basis_of_record', 'latitude', 'longitude', 'study_title']\n" ] } ], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "print(payload['data'][0])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['EOL:174006', 'Pieris marginalis', 'Animalia | Bilateria | Protostomia | Ecdysozoa | Arthropoda | Hexapoda | Insecta | Pterygota | Neoptera | Holometabola | Lepidoptera | Papilionoidea | Pieridae | Pierinae | Pierini | Pierina | Pieris | Pieris marginalis', None, None, 'eats', 'EOL:29914', 'Rubus', 'Plantae | Tracheophyta | Magnoliopsida | Rosales | Rosaceae | Rubus | Rubus status', None, None, None, None, None]\n" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We are lucky, sometimes it takes much more work to process the response into the data frame we like so much." ] }, { "cell_type": "code", "collapsed": false, "input": [ "df = pd.DataFrame(payload['data'], columns=payload['columns'])\n", "print(df.shape)\n", "df.head()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(232, 14)\n" ] }, { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
source_taxon_external_idsource_taxon_namesource_taxon_pathsource_specimen_life_stagesource_specimen_basis_of_recordinteraction_typetarget_taxon_external_idtarget_taxon_nametarget_taxon_pathtarget_specimen_life_stagetarget_specimen_basis_of_recordlatitudelongitudestudy_title
0EOL:174006Pieris marginalisAnimalia | Bilateria | Protostomia | Ecdysozoa...NoneNoneeatsEOL:29914RubusPlantae | Tracheophyta | Magnoliopsida | Rosal...NoneNoneNoneNoneNone
1EOL:174006Pieris marginalisAnimalia | Bilateria | Protostomia | Ecdysozoa...NoneNoneeatsEOL:37457ArabisPlantae | Tracheophyta | Magnoliopsida | Brass...NoneNoneNoneNoneNone
2EOL:174006Pieris marginalisAnimalia | Bilateria | Protostomia | Ecdysozoa...NoneNoneeatsEOL:37718RorippaPlantae | Tracheophyta | Magnoliopsida | Brass...NoneNoneNoneNoneNone
3EOL:174006Pieris marginalisAnimalia | Bilateria | Protostomia | Ecdysozoa...NoneNoneeatsEOL:37667CardaminePlantae | Tracheophyta | Magnoliopsida | Brass...NoneNoneNoneNoneNone
4EOL:176683Pieris rapaeAnimalia | Arthropoda | Insecta | Lepidoptera ...NoneNoneeatsEOL:467679Centaurea melitensisPlantae | Tracheophyta | Magnoliopsida | Aster...NoneNoneNoneNoneNone
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ " source_taxon_external_id source_taxon_name \\\n", "0 EOL:174006 Pieris marginalis \n", "1 EOL:174006 Pieris marginalis \n", "2 EOL:174006 Pieris marginalis \n", "3 EOL:174006 Pieris marginalis \n", "4 EOL:176683 Pieris rapae \n", "\n", " source_taxon_path \\\n", "0 Animalia | Bilateria | Protostomia | Ecdysozoa... \n", "1 Animalia | Bilateria | Protostomia | Ecdysozoa... \n", "2 Animalia | Bilateria | Protostomia | Ecdysozoa... \n", "3 Animalia | Bilateria | Protostomia | Ecdysozoa... \n", "4 Animalia | Arthropoda | Insecta | Lepidoptera ... \n", "\n", " source_specimen_life_stage source_specimen_basis_of_record interaction_type \\\n", "0 None None eats \n", "1 None None eats \n", "2 None None eats \n", "3 None None eats \n", "4 None None eats \n", "\n", " target_taxon_external_id target_taxon_name \\\n", "0 EOL:29914 Rubus \n", "1 EOL:37457 Arabis \n", "2 EOL:37718 Rorippa \n", "3 EOL:37667 Cardamine \n", "4 EOL:467679 Centaurea melitensis \n", "\n", " target_taxon_path \\\n", "0 Plantae | Tracheophyta | Magnoliopsida | Rosal... \n", "1 Plantae | Tracheophyta | Magnoliopsida | Brass... \n", "2 Plantae | Tracheophyta | Magnoliopsida | Brass... \n", "3 Plantae | Tracheophyta | Magnoliopsida | Brass... \n", "4 Plantae | Tracheophyta | Magnoliopsida | Aster... \n", "\n", " target_specimen_life_stage target_specimen_basis_of_record latitude \\\n", "0 None None None \n", "1 None None None \n", "2 None None None \n", "3 None None None \n", "4 None None None \n", "\n", " longitude study_title \n", "0 None None \n", "1 None None \n", "2 None None \n", "3 None None \n", "4 None None " ] } ], "prompt_number": 12 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Using the data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see what each caterpillar eats. We got the `eats` interactions, so let's just leave the source and target taxons:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "cols = df.columns.tolist()\n", "cols.remove('source_taxon_name')\n", "cols.remove('target_taxon_name')\n", "print(cols)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['source_taxon_external_id', 'source_taxon_path', 'source_specimen_life_stage', 'source_specimen_basis_of_record', 'interaction_type', 'target_taxon_external_id', 'target_taxon_path', 'target_specimen_life_stage', 'target_specimen_basis_of_record', 'latitude', 'longitude', 'study_title']\n" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "df.drop(labels=cols, axis=1, inplace=True)\n", "df.head()" ], "language": "python", "metadata": { "scrolled": true }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
source_taxon_nametarget_taxon_name
0Pieris marginalisRubus
1Pieris marginalisArabis
2Pieris marginalisRorippa
3Pieris marginalisCardamine
4Pieris rapaeCentaurea melitensis
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ " source_taxon_name target_taxon_name\n", "0 Pieris marginalis Rubus\n", "1 Pieris marginalis Arabis\n", "2 Pieris marginalis Rorippa\n", "3 Pieris marginalis Cardamine\n", "4 Pieris rapae Centaurea melitensis" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we count how many target taxons occur for each source taxon. For that, we group by source and aggregate by length (I made sure before that each source-target pair appears only once. How??). \n", "\n", "The `groupby` made `source_taxon_name` become an index rather than a column and that's why we call `reset_index`." ] }, { "cell_type": "code", "collapsed": false, "input": [ "table = df.groupby(by='source_taxon_name').aggregate(len).reset_index()\n", "table.head()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
source_taxon_nametarget_taxon_name
0Pieris brassicae55
1Pieris brassicoides3
2Pieris canidia10
3Pieris cheiranthi1
4Pieris deota1
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 15, "text": [ " source_taxon_name target_taxon_name\n", "0 Pieris brassicae 55\n", "1 Pieris brassicoides 3\n", "2 Pieris canidia 10\n", "3 Pieris cheiranthi 1\n", "4 Pieris deota 1" ] } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally we rename the columns to make them more meaningful and we sort the table by the number of target taxons. Then we print and plot:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "table = table.rename(columns={'source_taxon_name':'Pieris species', 'target_taxon_name': 'Number of known items in diet'})\n", "table = table.sort('Number of known items in diet', ascending=False)\n", "table" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Pieris speciesNumber of known items in diet
12Pieris rapae91
0Pieris brassicae55
11Pieris napi51
2Pieris canidia10
13Pieris virginiensis6
8Pieris marginalis4
1Pieris brassicoides3
6Pieris krueperi3
5Pieris ergane2
7Pieris mannii2
10Pieris naganum2
3Pieris cheiranthi1
4Pieris deota1
9Pieris melete1
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ " Pieris species Number of known items in diet\n", "12 Pieris rapae 91\n", "0 Pieris brassicae 55\n", "11 Pieris napi 51\n", "2 Pieris canidia 10\n", "13 Pieris virginiensis 6\n", "8 Pieris marginalis 4\n", "1 Pieris brassicoides 3\n", "6 Pieris krueperi 3\n", "5 Pieris ergane 2\n", "7 Pieris mannii 2\n", "10 Pieris naganum 2\n", "3 Pieris cheiranthi 1\n", "4 Pieris deota 1\n", "9 Pieris melete 1" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "table.plot(x=\"Pieris species\", y=\"Number of known items in diet\", kind=\"barh\", legend=False)\n", "plt.ylabel('Number of known items in diet')\n", "plt.grid(False)\n", "sns.despine()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nzKyP+//ddJ6gYlAPjwAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "A very hungry caterpillar\n", "![caterpillar](http://1.bp.blogspot.com/-gZhDuc_eD_U/U8To75wL9UI/AAAAAAAAOD4/Q7LDDM7B3H4/s1600/the-very-hungry-caterpillar-2.jpg)\n", "\n", "Pieris rapae\n", "![Pieris rapae](http://upload.wikimedia.org/wikipedia/commons/b/b4/Pieris.rapae.caterpillar.jpg)\n", "\n", "Pieris brassicae\n", "![Pieris brassicae](http://upload.wikimedia.org/wikipedia/commons/5/52/Pieris.brassicae.caterpillar.jpg)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fin\n", "This notebook is part of the _Python Programming for Life Sciences Graduate Students_ course given in Tel-Aviv University, Spring 2015.\n", "\n", "The notebook was written using [Python](http://pytho.org/) 3.4.1 and [IPython](http://ipython.org/) 3.1.0 (download from [PyZo](http://www.pyzo.org/downloads.html)).\n", "\n", "The code is available at https://github.com/Py4Life/TAU2015/blob/master/globi_caterpillars.ipynb.\n", "\n", "The notebook can be viewed online at http://nbviewer.ipython.org/github/Py4Life/TAU2015/blob/master/globi_caterpillars.ipynb.\n", "\n", "This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.\n", "\n", "![Python logo](https://www.python.org/static/community_logos/python-logo.png)" ] } ], "metadata": {} } ] }