{ "cells": [ { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "# Analyzing data with Pandas\n", "\n", "This lesson assumes some programming background, but not necessarily with Python. Our focus is less on the details of the Python language and more on what tools like `pandas` and `matplotlib` allow us to do with tabular data. However, if you're new to Python, this notebook will give you some familiarity with general Python behavior.\n", "\n", "We will learn how to do the following:\n", "\n", "* Reading and manipulating tabular data with `pandas`\n", "* Visualization and plotting data with `matplotlib`\n", "\n", "and possibly as a bonus:\n", "\n", "* Simple linear regression modeling of data with `scikit-learn`\n", "\n", "\n", "This lesson is based on the [Software Carpentry](http://software-carpentry.org/) [``python-intermediate-mosquitoes``](https://github.com/swcarpentry/python-intermediate-mosquitoes) lesson, and uses its datasets." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Getting started" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We are interested in understanding the relationship between the weather and the number of mosquitos occuring in a particular year so that we can plan mosquito control measures accordingly. Since we want to apply these mosquito control measures at a number of different sites we need to understand both the relationship at a particular site and whether or not it is consistent across sites. The data we have to address this problem comes from the local government and are stored in tables in comma-separated values (CSV) files. Each file holds the data for a single location, each row holds the information for a single year at that location, and the columns hold the data on both mosquito numbers and the average temperature and rainfall from the beginning of mosquito breeding season. The first few rows of our first file look like:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "year,temperature,rainfall,mosquitos\r\n", "2001,80,157,150\r\n", "2002,85,252,217\r\n", "2003,86,154,153\r\n", "2004,87,159,158\r\n" ] } ], "source": [ "%cat A1_mosquito_data.csv | head -n 5" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "And we have five files to work with:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A1_mosquito_data.csv A3_mosquito_data.csv B2_mosquito_data.csv\r\n", "A2_mosquito_data.csv B1_mosquito_data.csv\r\n" ] } ], "source": [ "%ls *.csv" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "**Note**: commands preceded with a `%` are known as \"magics\". These are specfic to the notebook environment. They are *not* Python commands." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Since this is tabular data, our tool of choice is [``pandas``](http://pandas.pydata.org/), a library that provides special data structures for doing fast numerical operations on tabular data. Internally, ``pandas`` uses [``numpy``](http://www.numpy.org/) to do the heavy lifting." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Importing a library in this way allows us to use the components defined inside of it. First, we'll read in a single dataset using the ``pandas.read_csv`` function:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", "
yeartemperaturerainfallmosquitos
0200180157150
1200285252217
2200386154153
3200487159158
4200574292243
5200675283237
6200780214190
7200885197181
8200974231200
9201074207184
\n", "
" ], "text/plain": [ " year temperature rainfall mosquitos\n", "0 2001 80 157 150\n", "1 2002 85 252 217\n", "2 2003 86 154 153\n", "3 2004 87 159 158\n", "4 2005 74 292 243\n", "5 2006 75 283 237\n", "6 2007 80 214 190\n", "7 2008 85 197 181\n", "8 2009 74 231 200\n", "9 2010 74 207 184" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.read_csv('A1_mosquito_data.csv')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This reads the CSV from disk and deserializes it into a [``pandas.DataFrame``](http://pandas.pydata.org/pandas-docs/stable/dsintro.html#dataframe). But unless we attach a name to the `DataFrame` the function returns, we cannot keep working with the object in memory. We'll attach the name `data` to this `DataFrame`:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "data = pd.read_csv('A1_mosquito_data.csv')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", "
yeartemperaturerainfallmosquitos
0200180157150
1200285252217
2200386154153
3200487159158
4200574292243
5200675283237
6200780214190
7200885197181
8200974231200
9201074207184
\n", "
" ], "text/plain": [ " year temperature rainfall mosquitos\n", "0 2001 80 157 150\n", "1 2002 85 252 217\n", "2 2003 86 154 153\n", "3 2004 87 159 158\n", "4 2005 74 292 243\n", "5 2006 75 283 237\n", "6 2007 80 214 190\n", "7 2008 85 197 181\n", "8 2009 74 231 200\n", "9 2010 74 207 184" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Now we can refer to the `DataFrame` directly, without having to read it from disk every time. A `DataFrame` is an **object**. We can see what type of object it is with the Python builtin, ``type``:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "pandas.core.frame.DataFrame" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(data)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "It turns out that in Python, **everything** is an object. We'll see what this means as we go, but the most important aspect of this is that in Python we have **names**, and we assign these to **objects**. Any name can point to any object, and more than one name can point to a single object." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Anyway, a ``DataFrame`` allows us to get at individual components of our tabular data. We can get single columns like:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "0 2001\n", "1 2002\n", "2 2003\n", "3 2004\n", "4 2005\n", "5 2006\n", "6 2007\n", "7 2008\n", "8 2009\n", "9 2010\n", "Name: year, dtype: int64" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data['year']" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Or multiple columns with:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", "
rainfalltemperature
015780
125285
215486
315987
429274
528375
621480
719785
823174
920774
\n", "
" ], "text/plain": [ " rainfall temperature\n", "0 157 80\n", "1 252 85\n", "2 154 86\n", "3 159 87\n", "4 292 74\n", "5 283 75\n", "6 214 80\n", "7 197 85\n", "8 231 74\n", "9 207 74" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[['rainfall', 'temperature']]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Slicing can be used to get back subsets of rows:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", "
yeartemperaturerainfallmosquitos
0200180157150
1200285252217
\n", "
" ], "text/plain": [ " year temperature rainfall mosquitos\n", "0 2001 80 157 150\n", "1 2002 85 252 217" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[0:2]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Python indices are 0-based, meaning counting goes as 0, 1, 2, 3...; this means that the first row is row 0, the second row is row 1, etc. It's best to refer to row 0 as the \"zeroth row\" to avoid confusion.\n", "\n", "This slice should be read as \"get the 0th element up to and not including the 2nd element\". The \"not including\" is important, and the cause of much initial frustration. It does take some getting used to." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "What if we want a single row?" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "ename": "KeyError", "evalue": "1", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m/home/alter/.virtualenvs/ldsp/lib/python3.6/site-packages/pandas/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 2133\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2134\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2135\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32mpandas/index.pyx\u001b[0m in \u001b[0;36mpandas.index.IndexEngine.get_loc (pandas/index.c:4433)\u001b[0;34m()\u001b[0m\n", "\u001b[0;32mpandas/index.pyx\u001b[0m in \u001b[0;36mpandas.index.IndexEngine.get_loc (pandas/index.c:4279)\u001b[0;34m()\u001b[0m\n", "\u001b[0;32mpandas/src/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13742)\u001b[0;34m()\u001b[0m\n", "\u001b[0;32mpandas/src/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13696)\u001b[0;34m()\u001b[0m\n", "\u001b[0;31mKeyError\u001b[0m: 1", "\nDuring handling of the above exception, another exception occurred:\n", "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/home/alter/.virtualenvs/ldsp/lib/python3.6/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 2057\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_multilevel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2058\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2059\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2060\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2061\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_getitem_column\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/home/alter/.virtualenvs/ldsp/lib/python3.6/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m_getitem_column\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 2064\u001b[0m \u001b[0;31m# get column\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2065\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mis_unique\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2066\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_item_cache\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2067\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2068\u001b[0m \u001b[0;31m# duplicate columns & possible reduce dimensionality\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/home/alter/.virtualenvs/ldsp/lib/python3.6/site-packages/pandas/core/generic.py\u001b[0m in \u001b[0;36m_get_item_cache\u001b[0;34m(self, item)\u001b[0m\n\u001b[1;32m 1384\u001b[0m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcache\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1385\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mres\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1386\u001b[0;31m \u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_data\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1387\u001b[0m \u001b[0mres\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_box_item_values\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalues\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1388\u001b[0m \u001b[0mcache\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mres\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/home/alter/.virtualenvs/ldsp/lib/python3.6/site-packages/pandas/core/internals.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, item, fastpath)\u001b[0m\n\u001b[1;32m 3541\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3542\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misnull\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3543\u001b[0;31m \u001b[0mloc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3544\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3545\u001b[0m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0misnull\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/home/alter/.virtualenvs/ldsp/lib/python3.6/site-packages/pandas/indexes/base.py\u001b[0m in \u001b[0;36mget_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 2134\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2135\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2136\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_loc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_maybe_cast_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2137\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2138\u001b[0m \u001b[0mindexer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_indexer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mkey\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmethod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtolerance\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtolerance\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32mpandas/index.pyx\u001b[0m in \u001b[0;36mpandas.index.IndexEngine.get_loc (pandas/index.c:4433)\u001b[0;34m()\u001b[0m\n", "\u001b[0;32mpandas/index.pyx\u001b[0m in \u001b[0;36mpandas.index.IndexEngine.get_loc (pandas/index.c:4279)\u001b[0;34m()\u001b[0m\n", "\u001b[0;32mpandas/src/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13742)\u001b[0;34m()\u001b[0m\n", "\u001b[0;32mpandas/src/hashtable_class_helper.pxi\u001b[0m in \u001b[0;36mpandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13696)\u001b[0;34m()\u001b[0m\n", "\u001b[0;31mKeyError\u001b[0m: 1" ] } ], "source": [ "data[1]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "For a DataFrame, this is ambiguous, since a single value is interpreted as a column name. We can only get at rows by slicing at the top level:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
yeartemperaturerainfallmosquitos
1200285252217
\n", "
" ], "text/plain": [ " year temperature rainfall mosquitos\n", "1 2002 85 252 217" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[1:2]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Or we could use `.iloc`:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "year 2002\n", "temperature 85\n", "rainfall 252\n", "mosquitos 217\n", "Name: 1, dtype: int64" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.iloc[1]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Getting a single row in this way returns a `Series`:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "pandas.core.series.Series" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(data.iloc[1])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "A `Series` is a 1-D column of values, having all the same datatype. Since each of the datatypes of our columns were integers, we got a `Series` with dtype `int64` this time. If we had columns with, e.g. strings, then we'd get back dtype `object`, which is a catchall for ``pandas``." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can also get the data in our ``Series`` as a raw ``numpy`` array:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "numpy.ndarray" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(data.iloc[1].values)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Pandas is a relatively young library (started seeing widening use around 2011), but it's built on top of the venerable ``numpy`` array, which makes it possible to do fast numerical work in Python. A `Series` is basically a 1-D ``numpy`` array with the ability to select by labeled indices:" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Subsetting data" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "More usefully than simple slicing, we can use boolean indexing to subselect our data. Say we want only data for years beyond 2005?" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", "
yeartemperaturerainfallmosquitos
5200675283237
6200780214190
7200885197181
8200974231200
9201074207184
\n", "
" ], "text/plain": [ " year temperature rainfall mosquitos\n", "5 2006 75 283 237\n", "6 2007 80 214 190\n", "7 2008 85 197 181\n", "8 2009 74 231 200\n", "9 2010 74 207 184" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[data['year'] > 2005]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There's no magic here; we get a boolean index directly from a comparison:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "0 False\n", "1 False\n", "2 False\n", "3 False\n", "4 False\n", "5 True\n", "6 True\n", "7 True\n", "8 True\n", "9 True\n", "Name: year, dtype: bool" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gt_2005 = data['year'] > 2005\n", "gt_2005" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "And using this `Series` of bools will then give only the rows for which the `Series` had `True`:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", "
yeartemperaturerainfallmosquitos
5200675283237
6200780214190
7200885197181
8200974231200
9201074207184
\n", "
" ], "text/plain": [ " year temperature rainfall mosquitos\n", "5 2006 75 283 237\n", "6 2007 80 214 190\n", "7 2008 85 197 181\n", "8 2009 74 231 200\n", "9 2010 74 207 184" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[gt_2005]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This is the same behavior as ``numpy`` arrays: using most binary operators, such as ``+``, ``*``, ``>``, ``&``, work element-wise. With a single value on one side (such as ``2005``), we get the result of the operation for each element." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "A ``DataFrame`` is an *object*, and objects have **methods**. These are functions that are *part of* the object itself, often doing operations on the object's data. One of these is ``DataFrame.mean``:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "year 2005.5\n", "temperature 80.0\n", "rainfall 214.6\n", "mosquitos 191.3\n", "dtype: float64" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.mean()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We get back the mean value of each column as a single ``Series``. There's more like this:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "year 2010\n", "temperature 87\n", "rainfall 292\n", "mosquitos 243\n", "dtype: int64" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.max()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There's also ``DataFrame.describe``, which gives common descriptive statistics of the whole `DataFrame`:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", "
yeartemperaturerainfallmosquitos
count10.0000010.00000010.00000010.00000
mean2005.5000080.000000214.600000191.30000
std3.027655.45690250.31721633.23335
min2001.0000074.000000154.000000150.00000
25%2003.2500074.250000168.500000163.75000
50%2005.5000080.000000210.500000187.00000
75%2007.7500085.000000246.750000212.75000
max2010.0000087.000000292.000000243.00000
\n", "
" ], "text/plain": [ " year temperature rainfall mosquitos\n", "count 10.00000 10.000000 10.000000 10.00000\n", "mean 2005.50000 80.000000 214.600000 191.30000\n", "std 3.02765 5.456902 50.317216 33.23335\n", "min 2001.00000 74.000000 154.000000 150.00000\n", "25% 2003.25000 74.250000 168.500000 163.75000\n", "50% 2005.50000 80.000000 210.500000 187.00000\n", "75% 2007.75000 85.000000 246.750000 212.75000\n", "max 2010.00000 87.000000 292.000000 243.00000" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.describe()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This is, itself, a ``DataFrame``:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "count 10.000000\n", "mean 80.000000\n", "std 5.456902\n", "min 74.000000\n", "25% 74.250000\n", "50% 80.000000\n", "75% 85.000000\n", "max 87.000000\n", "Name: temperature, dtype: float64" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.describe()['temperature']" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Documentation is a key part of Python's design. In the notebook, you can get a quick look at the docs for a given Python function or method with:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "data.describe?" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Or more generally (built-in Python behavior):" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on method describe in module pandas.core.generic:\n", "\n", "describe(percentiles=None, include=None, exclude=None) method of pandas.core.frame.DataFrame instance\n", " Generate various summary statistics, excluding NaN values.\n", " \n", " Parameters\n", " ----------\n", " percentiles : array-like, optional\n", " The percentiles to include in the output. Should all\n", " be in the interval [0, 1]. By default `percentiles` is\n", " [.25, .5, .75], returning the 25th, 50th, and 75th percentiles.\n", " include, exclude : list-like, 'all', or None (default)\n", " Specify the form of the returned result. Either:\n", " \n", " - None to both (default). The result will include only\n", " numeric-typed columns or, if none are, only categorical columns.\n", " - A list of dtypes or strings to be included/excluded.\n", " To select all numeric types use numpy numpy.number. To select\n", " categorical objects use type object. See also the select_dtypes\n", " documentation. eg. df.describe(include=['O'])\n", " - If include is the string 'all', the output column-set will\n", " match the input one.\n", " \n", " Returns\n", " -------\n", " summary: NDFrame of summary statistics\n", " \n", " Notes\n", " -----\n", " The output DataFrame index depends on the requested dtypes:\n", " \n", " For numeric dtypes, it will include: count, mean, std, min,\n", " max, and lower, 50, and upper percentiles.\n", " \n", " For object dtypes (e.g. timestamps or strings), the index\n", " will include the count, unique, most common, and frequency of the\n", " most common. Timestamps also include the first and last items.\n", " \n", " For mixed dtypes, the index will be the union of the corresponding\n", " output types. Non-applicable entries will be filled with NaN.\n", " Note that mixed-dtype outputs can only be returned from mixed-dtype\n", " inputs and appropriate use of the include/exclude arguments.\n", " \n", " If multiple values have the highest count, then the\n", " `count` and `most common` pair will be arbitrarily chosen from\n", " among those with the highest count.\n", " \n", " The include, exclude arguments are ignored for Series.\n", " \n", " See Also\n", " --------\n", " DataFrame.select_dtypes\n", "\n" ] } ], "source": [ "help(data.describe)" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "--------------\n", "### Challenge: obtain the standard deviation of mosquito count for years in which the rainfall was greater than 200:" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "One way we could do this is to first grab the ``\"mosquitos\"`` column, then use a fancy index obtained from comparing the ``\"rainfall\"`` column to ``200``. We can then call the ``std`` method of the resulting ``Series``:" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "24.587937421969063" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data['mosquitos'][data['rainfall'] > 200].std()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Note that this is a key part of the power of ``pandas`` objects: operations for subsetting and calculating descriptive statistics can often be stacked to great effect.\n", "\n", "-----------------------" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "What if we know our temperatures are in fahrenheit, but we want them in celsius? We can convert them." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "0 26.666667\n", "1 29.444444\n", "2 30.000000\n", "3 30.555556\n", "4 23.333333\n", "5 23.888889\n", "6 26.666667\n", "7 29.444444\n", "8 23.333333\n", "9 23.333333\n", "Name: temperature, dtype: float64" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(data['temperature'] - 32) * 5 / 9" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This gives us back a new ``Series`` object. If we want to change the values in our existing ``DataFrame`` to be these, we can just set the column to this new ``Series``:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "data['temperature'] = (data['temperature'] - 32) * 5 / 9" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "0 26.666667\n", "1 29.444444\n", "2 30.000000\n", "3 30.555556\n", "4 23.333333\n", "5 23.888889\n", "6 26.666667\n", "7 29.444444\n", "8 23.333333\n", "9 23.333333\n", "Name: temperature, dtype: float64" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data['temperature']" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Similarly, it's also possible to add new columns. We could add one giving us, e.g. the ratio of rainfall to mosquitos:" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "data['rainfall / mosquitos'] = data['rainfall'] / data['mosquitos']" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", "
yeartemperaturerainfallmosquitosrainfall / mosquitos
0200126.6666671571501.046667
1200229.4444442522171.161290
2200330.0000001541531.006536
3200430.5555561591581.006329
4200523.3333332922431.201646
5200623.8888892832371.194093
6200726.6666672141901.126316
7200829.4444441971811.088398
8200923.3333332312001.155000
9201023.3333332071841.125000
\n", "
" ], "text/plain": [ " year temperature rainfall mosquitos rainfall / mosquitos\n", "0 2001 26.666667 157 150 1.046667\n", "1 2002 29.444444 252 217 1.161290\n", "2 2003 30.000000 154 153 1.006536\n", "3 2004 30.555556 159 158 1.006329\n", "4 2005 23.333333 292 243 1.201646\n", "5 2006 23.888889 283 237 1.194093\n", "6 2007 26.666667 214 190 1.126316\n", "7 2008 29.444444 197 181 1.088398\n", "8 2009 23.333333 231 200 1.155000\n", "9 2010 23.333333 207 184 1.125000" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "It's probably a bit silly to have such a column. So, let's get rid of it:" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "del data['rainfall / mosquitos']" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", "
yeartemperaturerainfallmosquitos
0200126.666667157150
1200229.444444252217
2200330.000000154153
3200430.555556159158
4200523.333333292243
5200623.888889283237
6200726.666667214190
7200829.444444197181
8200923.333333231200
9201023.333333207184
\n", "
" ], "text/plain": [ " year temperature rainfall mosquitos\n", "0 2001 26.666667 157 150\n", "1 2002 29.444444 252 217\n", "2 2003 30.000000 154 153\n", "3 2004 30.555556 159 158\n", "4 2005 23.333333 292 243\n", "5 2006 23.888889 283 237\n", "6 2007 26.666667 214 190\n", "7 2008 29.444444 197 181\n", "8 2009 23.333333 231 200\n", "9 2010 23.333333 207 184" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Don't like the order of your columns? We can make a ``DataFrame`` with a different column order by selecting them out in the order we want:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", "
rainfallyearmosquitostemperature
0157200115026.666667
1252200221729.444444
2154200315330.000000
3159200415830.555556
4292200524323.333333
5283200623723.888889
6214200719026.666667
7197200818129.444444
8231200920023.333333
9207201018423.333333
\n", "
" ], "text/plain": [ " rainfall year mosquitos temperature\n", "0 157 2001 150 26.666667\n", "1 252 2002 217 29.444444\n", "2 154 2003 153 30.000000\n", "3 159 2004 158 30.555556\n", "4 292 2005 243 23.333333\n", "5 283 2006 237 23.888889\n", "6 214 2007 190 26.666667\n", "7 197 2008 181 29.444444\n", "8 231 2009 200 23.333333\n", "9 207 2010 184 23.333333" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[['rainfall', 'year', 'mosquitos', 'temperature']]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can even have duplicates:" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", "
rainfallyearmosquitostemperatureyear
0157200115026.6666672001
1252200221729.4444442002
2154200315330.0000002003
3159200415830.5555562004
4292200524323.3333332005
5283200623723.8888892006
6214200719026.6666672007
7197200818129.4444442008
8231200920023.3333332009
9207201018423.3333332010
\n", "
" ], "text/plain": [ " rainfall year mosquitos temperature year\n", "0 157 2001 150 26.666667 2001\n", "1 252 2002 217 29.444444 2002\n", "2 154 2003 153 30.000000 2003\n", "3 159 2004 158 30.555556 2004\n", "4 292 2005 243 23.333333 2005\n", "5 283 2006 237 23.888889 2006\n", "6 214 2007 190 26.666667 2007\n", "7 197 2008 181 29.444444 2008\n", "8 231 2009 200 23.333333 2009\n", "9 207 2010 184 23.333333 2010" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data[['rainfall', 'year', 'mosquitos', 'temperature', 'year']]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Remember: this returns a copy. It does not change our existing ``DataFrame``:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", "
yeartemperaturerainfallmosquitos
0200126.666667157150
1200229.444444252217
2200330.000000154153
3200430.555556159158
4200523.333333292243
5200623.888889283237
6200726.666667214190
7200829.444444197181
8200923.333333231200
9201023.333333207184
\n", "
" ], "text/plain": [ " year temperature rainfall mosquitos\n", "0 2001 26.666667 157 150\n", "1 2002 29.444444 252 217\n", "2 2003 30.000000 154 153\n", "3 2004 30.555556 159 158\n", "4 2005 23.333333 292 243\n", "5 2006 23.888889 283 237\n", "6 2007 26.666667 214 190\n", "7 2008 29.444444 197 181\n", "8 2009 23.333333 231 200\n", "9 2010 23.333333 207 184" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Plotting data from a DataFrame" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Just as ``pandas`` is the de-facto library for working with tabular data, ``matplotlib`` is the de-facto library for producing high-quality plots from numerical data. A saying often goes that matplotlib makes easy things easy and hard things possible when it comes to making plots." ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We need to tell the notebook to render plots in the notebook itself:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Before we use ``matplotlib`` explicitly, ``pandas`` objects feature convenience methods for common plotting operations. These use ``matplotlib`` internally, so everything we learn later about ``matplotlib`` objects applies to these. For example, we can plot both ``\"temperature\"`` and ``\"mosquitos\"`` as a function of ``\"year\"``:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data.plot(x='year', y=['temperature', 'mosquitos'])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Let's load a larger dataset:" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "data = pd.read_csv('A2_mosquito_data.csv')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This dataset has 51 rows, instead of just 10:" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "51" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "len(data)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data.plot(x='year', y=['temperature', 'mosquitos'])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There are [other convenience methods](http://pandas.pydata.org/pandas-docs/stable/visualization.html) for different ways of plotting the data. For example, we can get a kernel-density estimate:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nf1tMbsodDq9wAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "data['mosquitos'].plot.kde()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "These convenience methods are great, but for more complex plots we can, and should, use ``matplotlib`` directly. We can make a multi-paneled figure giving both \"temperature\" and \"rainfall\" for each \"year.\"" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAARUAAAF1CAYAAADGGn64AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsfXmcHVWZ9vN2Okun053OHsKSsCUKDEQTRHFEWQZFcUHH\nQewZRkdF8VMcHecbx4gz+gmDnzvzOWgUZlQad8dlZhxQBETAQId9gIQdIQnphCydpLP2+/3x1kud\nrq7lVNWpuvd2n+f369+9t/pW1bm1PPW86yFmhoeHh4crtDV6AB4eHmMLnlQ8PDycwpOKh4eHU3hS\n8fDwcApPKh4eHk7hScXDw8MpPKl4eHg4hScVDw8Pp/Ck4uHh4RSeVDw8PJyivdEDyIvZs2fzokWL\nGj0MD49xh9WrV29i5jlZ32s5Ulm0aBH6+/sbPQwPj3EHInrS5nve/PHw8HCK2kiFiCYR0beI6GYi\n+j0RnURExxPRKiK6nYiuJCJPckXQ1wcsWgS0tclrX1+jR+QxjlHnTfxXAAaY+RUA3g7g6wC+CuB9\nzPwSAATgLTWOZ2ygrw+44ALgyScBZnm94AJPLB4NQ52kcjyA3wEAMz8G4GAAC5j5ruD//wXgFTWO\nZ2xgxQpg166Ry3btkuUeHg1AnaRyH4AzAICITgIwC4DZIWobgJ64FYnoAiLqJ6L+gYGBygfaUnjq\nqXzLPTwqRp2k8k0A+4noJgAXAXgksv+ZAGIZg5lXMvNyZl4+Z05mRGt84bDD8i338KgYdZLKawD8\niplfCeByAP0A1hHR0uD/5wC4tsbxjA1ccgkwefLIZVOnynIPjwagzjyVewFcTUQfA7AbwF8CmA/g\nSiIaBvA7Zr6uxvGMDfT2AjfeCHzzm/J54UIhlN7ehg7LY/yiNqXCzE8y8yuCvz9h5nXMfCczL2Pm\nE5n5w7UMZCyGX2fMkNeXvQx44glPKEUwFq+LBqHlMmpLQcOvGi3R8CvQ2jfimjXyunNnY8fRqhir\n10WDML6SzcZq+HXtWnn1pFIMY/W6aBDGF6mMxfDr/v3Ao4/Ke08qxTAWr4sGYnyRylgMvz7xBLBv\nHzB9uieVohiL10UDMb5I5ZJLJNxqotXDr+pPefGLhVT8jJP5MRaviwZifJFKby+wciUwaZJ8XrhQ\nPreyM079KS96ETA8DOzZ09jxtCL0umgLboeDD27966KBGF+kAsiFcuyx8v6RR1r/wlmzRkLKCxfK\nZxsTyIdPR6O3F5g4Ud7/7GetcV006Xkcf6QCALt3y+vQUGPH4QJr1wJLlgCdnfI5i1R8VXM89u0L\nVd66dY0diw2a+DyOT1JRMhkLjs01a/KRig+fxmPHjvB9K5BKE5/H8UkqqlSiJ6XVsGOH3ACLF9uT\nig+fxmNwMHy/fn3jxmGLJj6PnlRaGeqkzaNUDj00fvl4D5+apNIKSqWJw+CeVFoZSip5lMrLXz56\n2cSJPnzaaqRyySXAlCkjlzVJGHz8kQpzSCqt7lNZswYgAo46yo5Unn4a+PnPgaVLJVpEJBciczzZ\njCcoqXR3t4b509sL/O3fhp+bKD1i/JHK3r3h+2ZVKrahwjVrRO52dKSTim7v0EPl/+efL5m4w8Oy\njbY24Jhjmi40WSuUVBYvbg2lAgCvCLqvvva1xarTKwpJj68qZSBUKUBzkkqeilkNJwPJpBLdHgB8\n4hPA3LmyvZtuEqWiEbHxWqGrpLJkCbB6tdRUtTf57aHn7Lnn8q9bYWX2+FMqJqk0o/ljGypkDsPJ\nQDKpZG1vxQrJ0cja31iHhpQXL5Zju3FjY8djAyWVLVvyr1thSHp8k0ozKhXbUOGGDXIjLF4snzs6\n5DVKKlnba+LQZK0wzR+gNUwgvX6LkEqF5338kYqZRduMpGIbKtRCQlUqbW3idI2SStb2mjg0WSsG\nB+UYHnmkfG4FUjGVSt5C0vnz45c7OO/jj1SaXanYNrI2w8mKzs7RpJJVgesrdAWDg0BXF7BggXxu\nJVLZty/ftcwM9MTMhuPovI9vUiniU8nrMc/7/d5e4F3vCj/HhQr7+oCPflTen3JKuM04UuntBb72\nteTtaYWuTn0yf37ThCZHoOriOSWVefMk1J4VVi47Hhe/x1TdNiaQuc8HH5RrR1MLXIakmbml/pYt\nW8alcMMNzMLVzB/4QL51r76aeerUcH1APl99tZvvK776VfnuG9+Yb5vHHsv85jePXmfLFvneF7+Y\nvM+77pLv/PjH6WNrBIoexzx4y1uYX/hCeT9/PvO7313deFz9no9/PFz/3nsr3yeAfra4R8e3Uslr\n/uT1mBf1sOtTZ/v2fNuMUyrmdrq7k/epsr8ZE7/qKJ7bsUOUCiDHIs38KTseV78nj1KpsQDRk0oe\n5PWYF/Wwp5FK2jbLkMrs2ZKX0Yy+hDoiVGr+AMBBB6WTa9nxuPo9Jqlk5arUGOUbv6QyZUp+n0re\nSEnRyEoaqaRtswyptLWJP6UZSaWOCNXgIDBtmrzPUiplx+Pq9wwNiT8EyFYqNUb5xi+pzJqVX6l8\n6lPhSVSkecyLRlbSSOWSS8KclOg2y5AKkH0zNQqXXDI6u9V1hMpUKgsWSPLb/v3J4ykTMbvkkrB1\nZZH1FUND4lgGskkl7bpxjPFLKjNn5ieVDRvExaUX37x56R5zjazMmiWfJ0yw87CnkUpvr5AbMNpr\nX5ZUsmR/o9DbCxx9dPi5iuK5qPnDDDz7bPJ4Vq6U8wkAhxySbzwHDkjdlSqjOXOK/R4llba2bFLp\n7QW++MXwc4UFiLWRCgmuIKLfEtHtRHQqEf0xEd1JRDcGf2+ofCBqh86cmb+f69//PbBsGXD99fK/\nb34z+6T09gKf/rS8P3AAOO207H2qfTw0NDqFHgD++I/l9T//c2QhWV1KpYrwbto2h4eBZ54Jb+L7\n73d/M0SVCpB+LN72tjDh7Lbbssdj/r53vlOS7Fatkv9dfnmx3zM0JGqjp8cupPya18jrVVdVOj1u\nnUrlDAAzmfkUAG8H8BUAxwP4LDO/Kvj7eeWjyKNUon1AmYEHHpAiPCBeScTB3M/q1dnfNy8Qs8+H\nYts2eY0mMLkglc2b0zvyV9EbNWubjzwiv+HMM+Xzww8X31cc9u6VvzykMjAgZAfk7wusJPnrX9ut\nn4ShITFpZsywIxWtb1KFVBHqJJUDALqIqA3ADAA7ALwAwHsC9bKSiKr9tUA+UokLww0NAV/+sry3\nJRVVR0T2pDJ9evI+tm6VV/2OorNTlE1U3eg2si4mvZk2bEj+ThWhyaxt6jF7+9vlVUsUXEFvNtP8\nAdJJxfxfkb7Au3cDn/uc3fpJ8KSCWwDMB/AQgBsA/CuA+wH8XaBe1gH4x7gViegCIuonov6BgYFy\no9i9W9LgOzuzSSUp3KYXVB6lMmkS8IIXZJPKvn1y8hctSt6HKpU4UgFGX6Tbt8uFpOZDEmxupipC\nk1nb7O+Xc/bGNwoxa4mCK6gaVFKZO1fMlDT/Uh5SSfp9zzxjt34STFKxaX8wBknlYwB+ycyLARwB\nYAWAHzOz3mU/ALA0bkVmXsnMy5l5+RxNJy+K3bslnBxXfBdFUrjt0EPlostDKlOnij+mvz/9u6pC\ndB6fNFKJM3+AeFLJMn0AO9lfRWgya5urV0u3uq4uWeZaqURJpb1dHKBpx8EknLLXUVFS2bVr3CuV\nyQC0ScVWALsB9BNRUBaK0wBk3HEOoKSSZCqYSAodXnqp3KR5zJ+ODmD5crkY0y5WvTjSSGXrVlEd\n0bHVQSpVFCBeckk4a2R0m8PDwJ13CiEDUkBZFamYN9tBB7kzf9KuoyQ/mA28+YPPAziViG4EcBOA\nSwG8C8B3iegGAKcA+KfKR2EqFSB9QrG0aVLzkIqpVIB0E8iGVLZtE5USzZkpSyqzZslTOk326zHR\nnIcFC8qHJnt7gbe+deQ4dJsPPyw3vR67JUvE/HE5Z3RUqQDyu1yZP3rMtPrcJg3ABkoqM2fatT/Q\n/eh1UhFqIxVmfo6Z3xREeV7GzN9m5t8w80uY+VRm/jNm3lb5QHbvlhOhpGJzQRx0UNjXVW+eIqSy\ndKnI3bKksnXraH8KUJ5U2tqyn9CAHIOTTpL3//EfbkKThx8uJDlvHnDGGeE29VgtXy6vS5YICaQ5\nk/MiiVSyzB9NPLMhhd5e8ZO99a12aQA2MJXK/v3Z2xmDSqU5EFUqWc5abS04d+7I5UXMn2nTsp21\n6nDLUipVkApgn6ui43LVknPLFlFfZ58N/Pd/h2Zpf7+cr2OOkc/aP8alszaJVDZuTDaP160LE/Js\nj8G6daGJqShKKvv3y5+SCpBtAimpjBWl0jQYGgp9KkA2qezcKevEkco2S2GlSgXIdtbqhXHoofLk\nTjN/onBBKjZKRbcZt6+i2LJFbo7Xv15+3803y/LVq4ETTgjT9LXTnUu/SjSkDISRsKSs2nXrwi5x\nNsdgxw4hL92uoiipqNk+dWo+UunoyI4ClsT4I5W8SkUbIJdRKiapLF8u0j3pxtULY+ZMucjrNH+A\nbF+Cuc24fRWFksoZZ4jv4Re/CJ20avoAQrZTptSjVID483TggJCNjsXmGOgxdaVUlFTyKpWKTR+g\nBKkQ0QlEtIqI/oeI/paIXupyYJUhSipZJ9QFqaj5A2Q7a7dskQtt0qTkfeRRKsz5SeW550a2iIhD\nVaTS2QmcfrqQytq1ciPoMQPE73P00W6VyuCgKCGzjWcaqWzcKIR30EH2pKDbqZJUsnJVmp1UAPwz\ngL+AhImvAfAZJyOqGo1WKuqsTTKB9OZK20cepbJzpxBL3PfjoPI8Ta3s3et+lkfzd7/+9cCjjwLf\n+Y58NpUK4D6srG0PzGha2nEwCSIvqbg2f8aSUgGwj5nXAmBmfqbktuqDmacClCOVXbuSy+NNmEql\nsxN44QvTlUoaqRw4IDeBrVKxrftR2HSAM+uRqiCVs8+W18svl+P2wheO/O6SJcBjj6XnGOWBWUyo\n0KzaOKViksq0aa1j/uzcWbmTFihHBOuJ6D0AOonozQAKTD7SABRVKtFMXr1J4wr+ojCVCiD+kl/+\nMr4iN4tU9HOc8pgwQSS8C1JJc9aaY3JBKswjf/chh0j0a8cOuXmOOmrkMVq8WMj1scfK7xuIJ5Xv\nfU+Uy2c+M/ocKUHkNX86OuJLK8qSSleXXfuDFlAq7wVwKIABACcDeLeTEVWNvHkqGzfKDTllysjl\nepPamEAmqfT1Ab//vdjkcRW5zz2XTipJdT+K6EWal1Rs6n9ck8rOnaI6Zs6Uz319I/cfPUYaAXLl\nrDX70+r+L7hAiCtu/zq2+fPzkcqCBfEJi2qi5oFJKm1tdlm1zUwqREQAVjDzJ5n5bGb+KDO3llLJ\nY/5ETR/AnlT27QvzCYDsaUazlEpS3Y+iLKnMmgVMnFgvqejNoL876xhproorv0pUqWRVTa9bJ9fE\nxIn5SCXqTwFk/eHh9HYTcTBJBWh9Ugna9c8kopcS0ST9czy2aqCkoiejalIx8wmA7IrcLFJJanug\nKEsqmlWb5lOpmlSyjtHMmdKo25VSiZJK1v7Xrw8JwpZU1q8f7U/R9YEwV8YWY41UApwO4LsA1gR/\nDzkZUZU4cECegFOmyM1jk2NQllSUtJRU0ipy9+2T8agZ0N0tF7w2AwKqVypAdgKcbrNMha2JKKnY\nVEIvWVKdUsnav5kZm9f8iSIptygLcaTS6iFlZj6amQ83/o5wObBKYHbSB+RGr0up6MlPq/KN3ly6\nD/MpVrVSAbJT9XWb8+ZVQyo2ldAuw8pmJ32b/ecllcFBOYdJ5g+Q/zjqdWurVA4ckGuxmUmFiG4g\not8Yf9e7HFhhpPU6jZJKVqOm4WFpG+hSqWjFqo7BrFhNIhVzH0UdtdHoRhqysmp1mwcdVA2p6DFK\nm5Jz1y7JanXRJzeqVHT/qkw6O8P9798vD5o8pJIUTtb1ATdKJY1U9DqsIaTcnv2VRLwveG2DNFc6\ns/xwSkK99noA1WsPyAWRV6k895wQi0tS0bHccEPYuFrhilTMbW7fLhfexInp4zSxYIGMxcyvMbF9\nu9zsc+cCmzbZbzcJ0d8NyDFKqn7u6wN++lN5b0bQdL082LNHzM4o6er+X/ta4A9/CLdrZtMCcrz3\n7BGyiU4jokjKptX1AXekwjw6wgTUVqEMlDN/1gR/DzLzdwFYZIFVjCyvfRyppJ3MpMQ3IDw5ec0f\nxcKFUgNkpsPbkMrWrbKtaFMjRZxSyWP6ANlZtbpN28SvLGzZIjeC7ThXrBgdLSnaJzeumNDEsmXS\n7FyvqyhB2JBCVaRCFJYWzJghJk6Sw7dGUimsVIjoAuNjJ4Ajk75bG7K89nmVShqpTJggJ6iIUgHC\n1gZ/+ENYQq+OtiylkuSkBdyQipkAd0SMq0y3WaYXiAnNzYlOsJUEl31y44oJTSxfLsrk7ruBk08e\nbcqYpJCkHs1kuSjKkMqUKaEqUef+li3xv6UVlAqAg4y/yWiG5Lcsr72SipkyX5RUALmIbEklTqkA\nIt0VtkolrY7HJalkKRVXpGKG0W3gsk9uFqlEC0CjNTy2SmXq1PjzUIZUzAdVVqp+i5DKEDN/Kvi7\nDMDZrgZVGFlee5fmD2BXVBjNU1HoDZCXVJIaNCk6O+V3ajZoGfMnKQK0fbuMoVGk4rJPbhapHHyw\nRLlMUtEOdYA9qcRl09quH4eov6uVSYWI3kVEtwH4OBHdGvzdBuD97oeXE+q11xMVjRoUMX/a2kJp\nGYUNqSSZP4ccItuOksq0aaFTtaj5Y+63CKlkZdWaSsUksKLISyp6nvWYlpnCM67ptQmikY211q8P\ns2kBO1Iwk+WicE0qSbkquv1mJBUAPwJwHoD/Cl7PA3AugOMcjqs4entlWsmentFTO6pqsA0pb9wo\nmZtJnbLyKJWo+TNxojy9TD9A9ObSp2de8wcIL6IipHLNNeJH+L//Nz5ca5IKkH9O6ijykgog5/UD\nHxCH9WOPFe+Tm6VUACGVBx+UYxpNt8+jVOKg10VdSqUZq5SZeRszPwHxoRwCYCGARZDs2uZAV5dc\nLNEirSJKJcn0AcopFUCesFGlYt5c7e2yXhGlUpRUsorpzG0WfcpGUYRUADl+e/eWa4JtQyrqrL3n\nntEEkXUMmNNJpa3Nbg6qKMaS+WPgBwA+AeCrAC4H8GT612tEV5fcFNHuZUV8Ki5IxQz9mcgilbh9\n5FEqebu+AXbTmroklWjbgzxQv1SZ2RGzQspA6Kzt789PKoOD8r8kUtFtlCWVri5R1C1OKt3MfBZk\nDp+TIGqlOaAXSLTXSRyp7N+f3OzHBanoyY9z0i1cKCFlVQVm24O4fezeLfkZtqSiiV15SCUrXKu5\nEK5IZedOOQdJfqs0xEXQ8sJGqSxYIG0OVq2SayKP+ZMWTja3UZZUiETBppGK1rtVjDKk0k5EUwF0\nMPMeiBnUHNALJJoIFJemDySbQDakEi34iyLaoMnEYYfJDaUXXtwT2wxbZxUTAiMv8iJ1P1nhWj2m\nrkglmpuTB65IZeLEeCWpUGfttdeKssqjVNIS38xtlCUVID1VX4sJ4x5ujlGGVL4C4CLI1KWPAHDU\nhssBspSKnoy0Rk179shNnEUqzOkXRBqpRG+KLPMnK0UfKE8qWeFac5suSCUuRd8W3d1CsGVJxaYu\natkyYPNmed+spKIzFcahpgploGBGbdCkaT0zfz/4/L2sJk3BOv8C4FgAUwD8HYDNAL4BgADcB+A9\nzJzy2LeEHjwb8weIVyoDA/KaRSqA3GhJF2ZS/QwwklROPFHGEUcqmi9Th1LRKMpf/7XU9Rx0EPC5\nz4XL40glby8QE2VIBRjtl8qLaIVyEszm26Yp094uEai6zR+dnN1EWvuDnTtrI5UyTZo+QURtwWeb\nrm9nAJjJzKcAeDtE6XwVwPuY+SUQYnlLkfGMQppSmTAhLPxKIxWdRMqWVJJgo1SeemrkfD/Rfej2\ns9oeAOVJBRAC+clP5P2//dvIcK2NUkmrFI+iLKkcdlg9SsXcxznnjPxNaaSwbp38P20fdZo/NaBM\nlfIUAPcQ0X26gJnfnvL9AwC6AiKaASlAXMDMdwX//y/IJO0/LDEmQRqpmI6qNJ9KVjYtYE8qSUql\ns1MSzZ58MvnmijN/qlQqCv3dehwUWaSSVSkehQulctNNxdYFRvenjUNfH/B3fxd+fuaZkb8pi1SS\nsmkVdZFKDTkqQDmfysUAPgDg68ZfGm4BMB/SIe4GAD/DyA782wCk3C05kEQqWoSlSPOpuCKVaI1G\nFCrfs0iFuT6lAoRp6HlJxSYkbcIFqWzfHh6bvLBRKlm/KY0U0rJpFXlJ5cAByc+JI5WtW+ObaNeo\nVMqQyr0AXgfgLyHK48GM738MwC+ZeTGAIwBcCMC82mdCOvOPAhFdQET9RNQ/MBD7lZFIi/7EkUrV\nSiWNVFS+p5GKdu2ycdROmiTmXVlSmT5doiJ5SSVvBfGWLWIm5WkiZaJsBMiGVLJ+k41SSUNeUokG\nHBTa/iBu2pgWIZVvAngYwGIAWwFckfH9yZDZDBF8fyuAnUS0NFh2DoBr41Zk5pXMvJyZl8+Jzr8T\nB1fmz5Qp6SeirPkDhEolKbRq7mPbNpHRWTeBXqRlSEWbMKWRiklgirwVxBrxsm17EEUdpJL1m5JI\nISubVpGXVJKKVNOyaluEVGYz8zcA7GXmGwHMyvj+5wGcSkQ3QhLmLgXwLgBXEtEdkGjSdSXGE0Lz\nDrJIJUupzJ2bbgu7Mn927pRpPoF0Utm6VT5n3YAmqWTlYKQhjVT0Ao3eEHkriOMS/vKgDlLJ+k1J\npDA4KNeWDans3y8mjQ2S6snSSKXG6E8ZR+0QES0BACKaB3HEJoKZnwPwpph/LYtZVh7TptmTSpJP\nJc30AeIL/qLIMn/0prj7bnmNOmGjSiXNSaswSaW7u3jCUxKpTJsWFllGbyh1xqqzduZMmb40qeCv\naIq+Ys4cIc0ipMJsF1LWsa9YISbPYYcJoejyzs54Eylp/uQoTDMyqaOfiSRSMRs1RdEiSuUiiHP2\nRQB+CuCjTkbkClpUaEJnJ1TYKJU0TJwo28tSKlnmDyDFambbA0VUqdhMtB4llaJIIhVzm3FP6d5e\n4FWvkvcf/Wh6BXFZUmlrk5u8SP2P9pa18ef09krV+/Dw6Or3uGPQ1we88pXy/iMfSQ+r500iTCKV\n226T19NPHxnK37tXyjWaXakw81oiOhdSqbyWmS0mFa4RSaRiqoa0CcU2bgSOPz57P2n1P8x2jloA\nePzxeNs9qlTykEpbmxtSMZsp25AKED4tNQs1CVu2AIcfXnyMQPEEOJtiQhtEj0E0rP7ss+lhdRek\n0tcH/J//I++jzcDPOmvkfipGmSk63gcJE18MYDUR/YWzUblAEqmY5k9bm5yY6MlktlMqQDqpqJc+\njVRmzx7ZET1u+0CoVIqYP0Uxd65cwGntKbNIJavbflmlAhQnFZtiQhtEj0HesLoLUlmxIlwe3WeN\nFcpAOfPnQgDHM/ObICbQ37gZkiN0dWWHlIH4nirbt4tkLEsqSTLVhM5rA2STSl6l4oJUgJEmkEul\nUqbtgYmFC0UNRFtdZMElqQwNhYWlecPqLkglbZ8tRCobmXkXADDzToxMZGs84pRKNPkNiCcVmxwV\nRRqppDVoMpFGKqYzOI+jdseOxpGKkgWQTio7dkhehQtSAfL7VVySChCe77xhdRekkrbPFiKVfUR0\nMxF9loiuAwAiupSILnU0tnKwMX+A+JaSrkklTakA6aQyebL8bdvWOkplaCgMj6aRSlK9U14Ubdbk\nmlT0OOQNq7sglbR91tifFihHKt+HJMA9AKAPwL8hnKy98bAJKQOju7/19UnBGCC9brOm07Qxf7KU\nit5cV10VX4DX3S3hyeHh1iAV/T2TJqX7VMr0UjFRNFclq+m1LaKkoI25NZKX1Zg7b2Fm3MMqrRl4\nzUqlTJ7KvwM4FZIpCwBg5h+UHpErmH1qNXKR5VOJeu3Xr8+eTrOs+dPXB/zsZ+HnuAK87u7wKWxr\n/ui+y5CKZi8rqcS1p4wjFSWLI48EHnpITJy45uFl634UcTMT2KAqpQLIufvYx4A/+RN5WORdP60w\nM8lX19sL3HkncMUVEk3U676FzJ+fAXgtgJcFfy91MiJX6OqSJ7ueAObReSrAyBswr9ceGFnwF4WN\n+bNixehMyug+u7ul7SRgr1TMdYuio0OOo5LKrl1yTKOkossVShZHHTWyEDIKV6SiMxPkJRWXIWVg\nJCnkiSDmLcxMCwAsWCD/Nx90NXbSB8oplWFmfq+zkbiGWVQ4daok/zDHK5VnnpH3RabT7O6WBKo4\nwrIxf2z22d0N3H+/vLdVKua6ZWAmwMXVEum+hobC90oWOp3rpk3S4iEKV6QCFAsrV6lU8kQQ8xZm\nRqeaMWFOBKcPoBZSKquJ6L1EdIr+ORuVC0SLCqNd3xSm+VNkOs20+h8b88dmn93dYXPuvErF5vtp\nsCUV84YwlQqQ7Kx1SSpFmjUNDorfxyY1Pg1xxyCPs3/CBHHG2xZmDg3J9+NqwMx5sBU1K5UypHIy\npPXBhcHf+5yMyBWKkEqR6TTTSMUmT8Vmn+ZN3KxKpSipTJhQXikAolSefjrfbIm2Xd+yUJZUdBvR\nwsxoyYZeF2mlH3HzYO/YISQU3V5FKEMq+5n5Dcx8XvCX1vWtftiSiulT6e0FvvKV8H8202mWVSrq\ntV+4MEyEi+7TvInr9KkAxUmFCDjiCPmcRiozZrjp8L5w4ciZCWzQzKTS2wuccUb42bwu0irf4+bB\nrrFCGShHKmuJqJeIXkBEi4losbNRuUC0+XWSHaohZXW0vuhF8vrjH48uHItDWVIB0ovVzH0AjSGV\ngQEZWx5S6ekJo0dJYWUX2bSKx4LJHA47LLsvLiD//9GP5HjbfD8NVZAKEJ7r884beV2kKZWuLrn2\no+ZPjaRSxlF7dPD37uAzAzit9IhcIY/5c+CA+CwmTQLWBGk2iy05sqz5k2cfkybZTQblmlSGhyVM\nnIdUZsyQc9DenqxUyvZSUfT1Af/8z/I+WkwX91DQcK2en6zvZyGNVGbPtt9GlFSUGKKV4lmV7wsW\njDZ/WkG3j8dnAAAgAElEQVSpMPOpAN4M4K8BvIaZm4dQgNEtJdNIBQhVxdq1IsfVH5CFLKUycWLY\nvb8odB/Tp9uZCq5JBZAL25ZUlCyI5KbKMn/KYsWK0XU/aakARVIH0jBpkviGoqQyY4a9EziOVJQY\n8pLKQQc1VKmUqVI+D1Kl3AfgYiJ6p7NRuUAenwoQXmRr1ogctp0eMotUyqoUcx82Tlog/E06+XcZ\nxJGK6YdIUyqAhJKrJpW8qQBFUgfSQDSaFGxzVBTR9bUVpW7LhI1SiZJKTZEfoJxP5a8h1ckDAP4R\n0hqyeZBEKtGTEe3+tnatvekDZJs/ZW9qcx+24WG9gMp0fVNESWXKlJFPXxtSqdqnkjcVoEjqQBZc\nk4pO7N7REfq0FLbmj/oJW0WpABgK5lBmZt4PIGGW8wahvV1uABufCiCqgllIZckS+/1oqC5JqTSa\nVMoiSirRbRZVKppp64JU8qYCFEkdyIJrUlHT54/+KPRpKWxIxZx9odmjP0SktT6/JqJrABxCRJcD\nuNPpyFzALCq0MX/WrxdWz6NUiJLrfxpl/kyZEo6rLGbNkm3Zkkq0R0qST2Vw0E3bAyAMy2u0ad68\n9FSA3l7gssvCzzapA1lwTSpqvixdGm5PYeNTMbfRAkrllwDAzJ+BVCmvBPArZm6uJk3AyPYHWUpl\n584w8pNHqQDJpOLK/NEZ+H78Y7vw5zXXyOv995cPl06YIMSQRCpKYHpD7NolkbSo+WPWRvX1Accc\nI+8vu6zc+BS9vcB9wWSZ//t/ZxPEy18urz/9qV3qQBZMUti/X4i0UaQSzaptoZAymPk3AH7jaCzu\nYXZ/szF/VHLmUSpAulIpSyp9fcDFF4efbcOlehOXDZcCYQJcHKlEnZTR1PtZs+QmGxyUdaPVt5s3\nlx+fYt48qVhevTr7u3nzSLLQ2Rk+wDZvluOfZ9vTpkkjbq3o1msxjlSyFLCZVTs83PzmD4AXEtFV\ncX/OR1cWplJJS34D5EStWSMn65BD8u2nSvMnrfdo0vddhkuBdFIB4klFGy9pIaGaQFWMz8SyZUB/\nf/b3qiAVPQZFth01I3Vi9yOPHLlNIJ/5MzQkBNfkSmUrZDKw5kdXV3gx2/hU1q6Vytq8s+V1d8en\nh7swfxodLgXk5rjzTnmK2pKK6VMB5Dwcfng14zOxfLn0p8lqUNXMpKJNuRYsGOnTApJbeJiYNk2u\n/XXrai8mBIqRygZm/pbzkVSBri6xl4GQVKKz9UV9Kpqmnwfd3aE/xoQL8yep+jYtLJrn+zZQpTJx\nYjapRLu5qVLRsHIV4zOxLJib7q67wnl34mAzrW0emMfg2WfltYxSWb9eSMX0aQHJqRFRaFi55rYH\nQDHzpznaRdog6qiNKxfXm37rVumWldefAqQ7asuaP80QLp07V8KTW7bkVypR86eK8ZlQUskygWym\ntc2DKswfNWPMok7b0g/Nqq25Py1QgFSYuVCLAyL6GBHdaPytJaJXEtGdxrI3FNl2IqIh5bgsWV12\n//0i7/NGfvr6gO9+V056NNLiQqnYVDGX+b4N9OYoYv5ESUXHp6ULLsYXHeuhh2Y7a/OGfLOgx0A7\nvrW326cA6PpAuA1zYvcipKJZtQ1QKiWLUuzBzJcBuAwAiOhVkELEYwF8lpm/X8lONfqjdmgcqWgq\n+113yec8pJLWR7S3112eSm9vvpsu7/ezYN58SaQyMCDvte2Bfk9rgMxclT/7M+Ad7wD+/u+BSyuY\nfMHGWbtxo0SLXKGzM7zONm6UnJk8vjmTVLZvHzmxu/q0APtm6mr+uGrunQNlMmoLgYg6AHwJkub/\nAgDvIaLfEtFKInL7y80+tUmkAsgJevhheZ/H/EmLZOzfL/kaLvJUGg0bUjGVSk9PeENNmCDEYqbq\nP/64HJ+8qtAWy5fL+dSM0jhUoVQAOQ5Ftm2ur07/subP7t3SuAoY26QC4L0AfsjMmwDcD+DvmPkU\nAOsgNUSjQEQXEFE/EfUP6BPRBmb9TxapAHLy8khWmz6i45FUolmy0VT9tWvltYj/ygamszYOeZpS\n28IlqWjSmqlUtm2TPJY85g8QHuuxSipE1A7g/QC+Hiy6kpnV+P0BgKVx6zHzSmZezszL52gqtg1s\nSUVPaN6LPC0CYzuRWCsgL6lEJweLpuoXzVy2RZazdnBQbtBWIhVATMyipNIiVcpF8HIADzKzXmEP\nEFGQ3YPTAFhkLeWASSpxU54qVE3kvcjTIhljSal0dYXHLo1UkuZGjiqVNWtkWdmZCZMwZ44Qe5Kz\n1nWOClCt+aO+n40b85OKmvVjVakAOB3ADcbnCwF8l4huAHAKgH9yure85k9epaKRDFUs06eHkQzb\nVpKtAKLwJkkileFhefonkYrpU8lbCV4Ey5Y1hlQGBoQYyioVTWAzx5mHVJSQHnlEzl+NirlWUmHm\nTzLzl43Pv2HmlzDzqcz8Z8yc4lkrALNPbRKp9PUBd9wh7z//+fzFbb29EvVZsAB485vDqMtYMn/6\n+oANG+T9aaeNPkbmDRHXIjJOqVTlT1G0t8tTOjplKFAtqTz+eLFtT5wof0oqqjTMbeUhlc5OeQDs\n2SPv82aJl0AjHLX1wWwpGZfarCFhzVIcGJDPRapmo5miY8X80WOksyg+/fToY2SSSpxSmT1bSFZn\nztuwoVql0tcH/Pzn8t7sWatjbkZS0W2o+aNKw9xWHlIBQmKq0fQBxgupJCkVl8Vt0Rnyxor5Y3OM\n9IbauFFCxXFKBRC1oo7DKkllxQp5Qpswx6ykksfpnwWXpBJVKtOmybW7cWM+BazE5EnFIbJIxWVx\n28KFMt+xtv0bK+aPzTHSG0pzImxIpUrzJ2vMGzdK6kDZmQlNVEkq6tPySqUJkOVTcdmrdOFCMRHU\n9zBWzB+bY5SHVNasyTdbQRFkjdl1jgowmlSKqKDOzrBdgUkqgCeVpkF7uxz8JFJxWdy2cKG8qgk0\nVpSKzTHKIhWz/YHOVhCtFneJrDFXQSodHUKWW7fK8SiSF9LZGYaATZ8KMJJUJk6UTOUs6DZqzFEB\nxjqpAGGlchypuCy+U1JRiT1WlIrNMYqSSjT/xGx/UEc4Wces5HbIISPHXAWpaAc8oPi2OztDpRun\nVJ59Nl/lu1cqFWHaNElx3rs3PqScNeWoLVRaR5VKq5MKkH2M9Gb6wx/kNcn8UVKpOpwMyBi1V+81\n14wccxWkArghFUWa+WNLKv/zP/Jq29vYEcY+qXR1hYlXthOEFUF3tzj/oqRS5T6bBVnmz6RJQu73\n3SeOyKqVikL3o85hQNo3bNrU/KQSZ/6oz87mQdXXB3zuc+HnaFi9QowPUtEixKr9G2ZYWZ8orpoA\nNTNMUmlrGzmDoWL2bODWW+V9HUoFEPU4efLIrnxFmlLbwhWp6CTrJnSbTz5pdx3nnQrWIcYXqVSt\nGkxScTWRWCtAf+fevSPbHpiYNQt45hl5X5dSmTBBokymUqki8U3hilSipo+5TVtSqboXcAo8qbiE\nkgqzuwZNrYC2tvC3Jk0Opn6Vjg7g4IPrGRcgqshUKq1AKlHTx9zmtm1211UVU7taYnyQyr5gRtY6\nSGVwUE68q4nEWgV6QySRioaVFy+utQ4FS5YAjz4qmb5Aa5BKmlIB7Eil6l7AKRgfpKKog1QAUSvj\nyfwBsklFlUpd/hTF4sXyUNFZFVqVVMxkOhtSqaJXsSXGPqmYDq+qScUMK48n8wcIb4i4Hil9fcC3\nvy3vr7uuttAmgNERoI0bwxaXLtHXB/ziF/L+/PPz/8a+PuAf/kHeX3nl6PUnTQq7EtpeV67SJXJi\n7JNKo5SKN38EWuWs/WK3basttAkgVEbqVynSlDoL+hu1c/369fl+o66v7SG2bIlfXxVQkz+sPKm4\nxNy5so/xrFSipFL1NKdZmD1b1JNJKq5Nn7K/0XZ9TypNApNUqj4ZRGICPfXU+POpqJkZJZUGhjaf\nx+LFI80f16RS9jfaru9JpUlQp1IBwrCyN38EDQxtPo8lS6pVKmV/o+36nlSaBI0iFW/+CBoY2nwe\nixeHs/U9+6x7Uin7G23X96TSJKibVA47TC7cbdvGj1Lp6wN++EN5//73j3QwNjC0+Tw0AnTPPUIs\nrkml7G+0XV+ztT/xiVoLBHODmVvqb9myZZwLDzzALDmuzNu351u3CL71rXB/F19c/f4ajauvZp46\nNfzNgHy++upGjyzEvffKuC67TF6/+c1Gjyg/rr6aedKkhh5nAP1scY96peIaGlYGml6mOkGjozs2\nOOooUQA33yyfXc6hXBdWrAibjyua7TgHGD+k0tYmneCqhkkq48H8aYboThY6OuS83HKLfK4im7Zq\ntMJxDjD2SUVDnVOm1NOG4OCDw8Sq8UAqzRDdscHixdLqEWhNUmmV44zxQCoTJsjNXVezpIkTwyrc\n8WD+NEN0xwZmuwWXU3PUhVY5zhgPpAKICVTnDa4m0HhQKs0Q3bGBpusXbUrdaLTKcUaNpEJEHyOi\nG42/tUR0AhGtIqLbiehKInI/nr4+qal45pl6wnB9fcCdd8r7Cy9s3rCfSzSocC0XtNXlzp3NHY5N\nQyscZ6AxIWUArwJwNYCbAbwoWHYVgLdmrZsrpFx3uLMVwqvjEVdfzdzR4c9LScAypEzy3fpARB0A\nbgXwRgA3MPORwfI/BXAKM1+Utv7y5cu5v7/fbmeLFo2cilSxcGHYX8Ml6t6fhx38eXECIlrNzMuz\nvtcIn8p7AfwQwH4AW4zl2wD0xK1ARBcQUT8R9Q9oa0gb1B2Ga6Gw37iCPy+1olZSIaJ2AO8H8HUA\nzwHoNv49E0AsYzDzSmZezszL5+Tx3NcdhmuhsN+4gj8vtaJupfJyAA8y82Zm3g1gIxEtDf53DoBr\nne6t7jBcC4X9xhX8eakVdZPK6QBuMD5fBOBKIroDwHpmvs7p3uoOw7VQ2G9cwZ+XWlG7o7Yscjlq\nPTw8nKGZHbUeHh5jGJ5UPDw8nKLlzB8iGgAQk3QwCrMBbKp4OGXR7GNs9vEBzT/GZh8fYD/Ghcyc\nGX5tOVKxBRH129h/jUSzj7HZxwc0/xibfXyA+zF688fDw8MpPKl4eHg4xVgmlZWNHoAFmn2MzT4+\noPnH2OzjAxyPccz6VDw8PBqDsaxUPDw8GoCWJRUiOpeILgven0ZEvyei24joCiJpRktE5xPRPUGF\n8wXBsuMrbwxlMT4iekekadUDRPQ6IjqEiH4bjPHfiaiyNmWWx/BiIrolOIbnBsuabYxfCMZ4BxG9\nvo4xEtFkIvp+cB39nojOJKLTiejOYByXBN+bSERXB+O4lYheECwf9d1GjM/4/vPHufT4bJquNNMf\nhAh/BWA3gMsAEIC1AOYH//9XAH8K4GAAj0LaKUwF8AiADhRoDFXF+CLrvADAfwNoB/AdAOcEyz8J\n4G8beAyPBnBb8P8eAM8E75tpjK8B8KNg2QwADwOYVPUYAbwDwBXB+znBftcAWBAsux7AiQDeBeAr\nwbJTAPxn8FtGfbdB4xtxnIP/lRpfyykVZh4GcBakhQIgB2wXM28IPt8O4BUAzgDwc2beysy7ALwW\nwETIgbor+O5/Bd9txPgAAMHTdiWADzPzfgCvBPCLqsaXc4zDECKeBKALwB6Wq6yZxng8gN8F62yB\ntNQ4toYxPgnga8H7IQDTAKxj5nXBsl8ivA5/Eiy7GcBSAIsTvlv7+GKOM8qOr+VIBQCCm284+LgJ\nwDQiOizo1/IaAJMBLAAwk4h+RkS3APgTyIG1agxVw/gUbwTwEDM/GHxuD9avbHw5xvgYgKchT617\nAHy3Ccd4H4BTiaiNiI4AcEywvNIxMvMNzHwPER0HedJfAWCz8RXd5yxdHhAym8uaYHzR44yy46th\ndq1qwczDRHQ+RA4zgK0AngCwA3Jw3gT5nbcBuAmWjaFqGJ/iowAuND7vJaIJzHygjvFljPF8yJP/\nCIhiuZWI+pppjMz8SyJaDuBGCPE8DnlKVz5GIvokxAT7MMQ0NJ/mus/nAEwPvk/B2J9fFvluI8YX\nh1Lja0mlYiI4UecBeDWAMyFS/ecQEtkZsPAeADshLSyrbQxlPz4Q0WEAupj5PmOVWwC8rq7xZYxx\nMoDNzDzMzDshT6ymGiMRvQzAU8x8CoCPABhg5vVVj5GIzoP4JE5k5ush/p5DiGgBEU0AcDZEIVwP\n4C3Baq+GmEBJ323E+OJQanxjQakwEf0BwCoABwB8h5kfAKT/AxHdDHE8/ZiZHyIibQw1DOB37Lox\nVI7xQeztGyKrrADQR0QrII7mi6scX9oYiehRAF8PjmE7gJ8Gy5tpjNMB/CMRvTv46vuC16rHeBaA\nwwFcS+HMlx+C+B/2A/hecL09BuDbRNQPebD9eaC6Rn23EeOLW7Hs+Hzym4eHh1O0vPnj4eHRXPCk\n4uHh4RSeVDw8PJzCk4qHh4dTeFLx8PBwCk8qHqVBRJ8ioq8bn6cR0RNE9KJGjsujMfAhZY/SIKJJ\nAFYD+CtmvoOIPg+pE1pRYFttQT2KR4vCk4qHExDRSwF8BcB7AFwNyeZcBOBySJX4JgDvhqTXXwVJ\nzOqEJLF9mYhuhNQatTHzO2oevodDePPHwwmY+feQ0ohfAXgfM++BVF//NTO/ApKd+TEAcwH0B2n1\nrwPwQWMz13tCaX20fJq+R1PhcgAnM/OtwecTAFwRpIlPgtSU7AZwTOCD2QNggrH+6hrH6lERPKl4\nuMQwRpbQrwFwHjOvJ6JTIU2U3gFgPTN/OigGfEP9w/SoEp5UPKrEhZCivgmQcvoLIUTzfSI6A9KK\nYiMR/WkDx+jhGN5R6+Hh4RTeUevh4eEUnlQ8PDycouV8KrNnz+ZFixY1ehgeHuMOq1ev3sTMc7K+\nVwmpEFEXZIqEGZBQ4gcgjXM/B+nadR0zryCiiZCeo0cHy/8qq8PUokWL0N/fX8WwPTw8UkBET9p8\nryql8hEANzHzl4joNACfBnAUgFOZeR0RXU9EJ0KmV9jMzH9ORKcA+ALCvqIeHh4tiKp8Kr9GOJ3D\nTADbYT8niodHQzF/PkA0+m/+/EaPrDVQCakw8y3MvIGIfgmgD8D9sJwThSqahrRZ4S/g5sOzz+Zb\n7jESVc0jfAgRtTPzWQCWQOa2iZtHZNScKHEVqkR0Aclcvv0DA5VPMVMr/AXsMdZQlSr4Z8gcJwCw\nC1Khajsnyigw80pmXs7My+fMyXQ+e3h4NBBVOWpXQOaL+d/BPt4HKRzLnBOlovF4eHjUhEpIJZgs\nK25C5+si39sL4G1VjMHDQzF/frw5OW8esGHD6OUe5TCunKIe4xN5/Vbz5uVb7jESnlQajLQL1UeD\nGoMNGwBmYM4c4MUvlmVXXulVjS08qTQYGzYAn/qUvN+7N/l7PhpUP7ZvB844Azj6aOA732n0aFoH\nnlSaAJs2AdOnAxMnpn/PK5f6sGeP/E2fDvzFXwA33gg89VSjR9Ua8KTSBNi8GZg9O986qlx88lw1\nGByU1+5uoLdX3l9zTePG00rwpNIE2LQpP6kofPJcNiZPjl+e5s/avl1eu7qAI44AXv5yMYF8T7Ns\ntFzrg7GITZu8sqgKt94qZsyllwK//a0c6zvuyF5PSaW7e2RIus14DPuQdDw8qTQBNm0CjjtO3s+b\n51VGWcTlpXz846JYjjrKbhsmqXg1mA+eVJoApk8l+uST2S088iDpZt+zBxgastuG6VPxyAfvU2kw\nhoaAnTuBWbPi/+8TsdzCllRMpeKRD55UHKJIJGZz0BAiyVGriVgf+xjQ3g4cOCCfVdF40skHTyrV\nw5OKQxSxvbNIRXHwwcD+/UC088OGDcA3viHvjzxSCMckHY+RyEsqXV3VjWWswpNKg7Fpk7zakAoA\nPPPM6P89/bS8bt3qblxjFXv2AMOjOvaMxvbtojI7O70azAtPKg2GkkqST0VhSyo+jyL5Zp82TV53\n787exvbtYvoQhSbovffK/37wA68G0+BJpcFwqVQOHBCn73jHhg3A/ffL++99LzQJP/MZWWZjAg0O\njvanqG/Mk0k6PKk0GOpTmTkz/Xvz5kni1bp1o/+npAJ4E0gR52jt6JDXPErFxKxZwIQJPj8lC55U\nHKKI7b1pE9DTk11M2N4uT8okpaL72LbNbqxjHXF5JkoqNkoljlTa2oC5c71SyYInFYdQ21tl9pe/\nnG17b9qU7U9RLFgwmlQGB4VINCPXKxVBXPQmL6nERX58xnM2PKlUAJXX+rRMQ55iwoMPHk0q+tmT\nykikmT9FlQogatErlXR4UqkAetHqhZ2GPG0P4khF/SnHHiuvnlQEVZg/gFcqNvCkUgH0oq1CqWzZ\nMvKmUFJRpdLsPpW6+r+UNX/ioj9AWKyYFrqv4jdmbbOZ+up4UqkAec0fW59KXFhZSeWYY+S12ZVK\nXRW/27cDU6aMdIDbksrwcDKpzJsnbT/TjnMVvzFrm81USe1JpQLYmj9DQ8CuXfmUCjCaVGbPlraH\nU6Y0P6nUhTjzxZZUdu4UJZKkVADvV0mDJ5UKYGv+2Nb9KJJI5ZBD5P306aNJpZlkcZ2IUxq2pJJW\n96Ohe+9XSYYnlQpgSyq2KfoKJRUzAc4klZ6e0T6VZpLFdSIuJJyXVFpFqTRbzx1PKhVAfSpZ5o9t\nir6iu1vqV5KUSk+PN38UZcyfNFLxSiUbnlQqQF6lkqfptRlWHhoSE6qVSKWuit8482fKFHnNIpW0\nrm8zZojzN02pVPEbi67biEpqTyoVoCqfCjAyq1bNoDSfSrNBs47fFsyg/fWvV1PxG6dU2tvlr4xS\n0VT9NKWiv/Hss+XzF79Y/jdu2AD8v/8n77NU0rx5je2rUwmpENFkIvo+Ed1ORL8nojOJ6G3B5xuD\nv5cE3/0iEfUT0R1E9MdVjKduqPmzc6dUDidBlUpWMaEJU6loODnNp9Ks0Btj165qtp+UZt/RUY5U\nAPus2h075FXPc1noQyqrcdTAQPp1VzWqanx9HoDnmPlcIpoD4FYA/w7gg8y8Sr9ERKcDOJKZlxPR\n4QB+BuD4isZUG8yLdscOURBx0GLC9hxn4eCDRaEMD8eTSlSpJGWANrrB0MaN8mrbiS0vkjJi85BK\n0s1rOzWHkkq0W19RDA5KlbSacUkYHhYVPHeum/3mRVXmz5MAvha8HwIwDcALAVxMRDcT0WeJaAKA\nMwD8BACY+XEAbUSU47ndnBgaAiZNkvdpJlCRScQOPhjYt0/WVVLRqFBPj3Q2M0v7N2wA7rlH3jda\nFptIUyplw+B79kiCWlWkYqtU9Ny7VCpdXXIskh4K+gBrpCO5ElJh5huY+R4iOg7ArwB8AcDvAFwE\n4JUA5gC4EMAsAJuNVbcB6Iluj4guCEyk/gFXtF8hhobCp0RaBKjIdKdmrsrTTwuRaEczvaCiakVV\ngT45G439+0N/UhyplA2Dp5kJtqQyZUr4YIhi3jw5plltKaswf/Q3qd8m+vezn8n/xxypAAARfRLA\nNQA+wcyfB/B5Zn6MmYcB/AjAUgDPATCNgx4Ao04BM69k5uXMvHzOnDlVDdkJmEUpKKlkKRXbHBVF\nlFT0MyAEA4z2qyip7Npl15+1agwMhLUzVfhU0nwiNqSSlKKvmD9fiPG557K3A1RDKmljA8YgqRDR\neQBOBHAiM19PRJMAPEVEM4KvnAagH8D1AN4SrPNCAFuZ2aK2t3mxb5/cuLakUlSprFs3MkcFCEkl\nSakwV+fDyAMdD1ANqaSFhG2VShqp2OSqMFfjU1FVWmZsVaMqR+1ZAA4HcC2F6X5/A+DXRDQI4GEA\nVzHzXiJ6PRHdBWAvgAsqGk9t0AtWT65r82f+fAlrqlI54YTwf1mkAkhEqrMz3z5dw7zgq1QqSeZP\n1j6zSMXMqtWWE1EMDcnDZdIkUTQHDoiTtQxslMr06bLPRvrMKiEVZj4/4V/fi/nuRVWMoVFQJ6la\naUlKZdcu+ctr/rS3C2E98YTcnKZSyfKpAM3RGFtJpaurMebP5s2jl0fXT7t5bdSAqpSFC4GHH5Zz\nkvdcRzE4mB21UyfumDN/xjNUqWSZP0US3xQHHwzccYdI7DjzJ8mnAjSHs1Yv+MMPjzdFymak1mX+\npKkBHcPhh8urC7+KjVIBPKmMOdiaP0VS9BUHHww89JC8t/WptAVnuhmUysaNwOTJYkbEKZUNG2Rq\nDQB4//vzh8HLOmqzSKWnR0wMG6WipOLCr+JJZZxCL9jp06VGpAqlsmBBGD0xSWXqVDGP4kjl0EPl\nfbMolXnzZLxJ5o+Sn02jqyiyfCploz9qYqSRnB7nRYvk1SsVj8JQn8qUKXJhJt0UedsemDDDyCap\nEMXX/zz7LHDEEfK+GZTKs8+KeWhDKjZ9fqPQdeIiJS6UChC2lUyCa/Nnzx6JLNqSik0eTVXwpOIY\nesF2dMgFUJX5A0gUJ1oCEK3/2blTbly9uMeDUtEnelvM1Z1FKnv2yF8WqdgqFVekYlv3AwjhHTiQ\nnUdTFcYVqdTRBS1KKllKJU8xISBjfec75f3OnXLjmL8hWv+jTtpmUiobN9qTSlGlknTzdXTIDbdv\nX/z/bW9eW6WiiqysTyUPqTQ6V2VckUodXdBszZ/Nm6U3R55iQiD7NySRSrMoleHhfKRS1KeSpDSy\nGjVlVSgr1MRIqgbW4zxtmqjRskpFt5eHVBqVqzKuSKUO5DF/yuYtxCHqU4mSSqOVypYtkuKupLJv\nn3yOooxSSXO0uiKV+fPDauCkMQBCKnPm1Gv+eKVSIaLmTh3IY/4U8adkIepTUVJZsEDCuI1WKnqh\nq1kAxN/gjVIqaTkuJrLUwI4dokInT3ajVDypNAkacVBNUsmK/lRFKnFKZc4ceWo2WqnoOVGlAsSb\nQLpsx478UYwsnwowsj1EdF3ATqkAydfYjh1yvInkPNfpU9GWl55UxghMn0qa+VOk7scGPT1CHOqI\n3LhRLu6pUyVaVLVSyXKGK8nNmxfe4HGkYpJf3jHXYf5kKRUzp6RupUKU3fKySnhSgdsuaHqxKqns\n2C1pBNQAAB/YSURBVBE/RWZRn0pWCruGmNUEUqcoUI9SsZ1JL0upmOPMawK5cNSWbTGgSgUQlTg4\nKKHqoshDKkBjE+DGNanoDe/SSz40JHZ0W5tc2MwjbxB9kg8NAV/4Qv6wdlJzHv0N0fqfjRvDOqQ6\nlEoWnn1WqnVnzrQnlTzOWmY786esUunqkgeHrVIBsgsZ05CXVLJC3lViXJNKESdgFnbvDnuI6gVg\n3hRVh7Wj9T8mqTSLT2XOHCHdLFLRGzvPedJGVGWUClF2ewh9ENgoFSWVMn6VwUGpN0rqRhdF0yoV\nIrqNiG6N/N1GRLfWNcAyyOrjWQWpDA2FF66SShX7SUIaqcQplbqnRTXNsSxSOeggeZ9HqWRFb2yi\nP93d6dFCPWZPPAFcfXX8MTOVirbBKONXsa37UTQyVT8r9epttYyiImzYALz5zcC99wKPPBIu/+lP\ngXPOqcYUMEmlyJO2LMyeKsPD8nRMUyp1T4uqKfpAdkj5qKOANWvyHb8s88VGqWSZPjbHLE6p1E0q\n+/ZJXlAV+VBpyCKV96b87+MuB1IVVq0CXvWqkcuqVBBxSqVIAldRmD4V7ThWp08la0qQZ58FFi+W\n91lKRZ/8eY5flqPVBanYoBlIBZDjXTepZPlU1iT8PVTxuJzgmWekl+tJJ41crienihsszqfSKPNH\nw7cmqVTtU1FH8hveEC574olwualUkkLKe/dKlq2aP3mOX1nzJ6vrW55x6Ha0vqusT6UoqQD1mrmp\npMLM32LmbwH4AYBHADwe/L3e/VDcY1UwbVmUVPQJUrVSiTN/qp5LWOeFiSOVadOSQ9yusW1beJxX\nr5bXHTuEdLN8Kvq5jFKp0vzJwoEDsn39/e3tQiyNUirmaxRVmLm20Z8fAvgEgK8C+ApksrCmx6pV\nklm4dOnI5Y00fzZskDl2TzghPiRcFm1tYf1PnFI5cECUQNXYuhU4+WS5oZRUzBwVIJlUVE3NnJne\n6CoOWebP5MlhSD9p/bKkElf8VzYBriyp1AlbUulm5rMA3ATgpQAWVTYih1i1Sghl8uSRyxtt/qxb\nJ7U4VSGJVPTJaf7uqpTT1q2iNI49NplUJk0SEkwilc5OucFdKhUiOT9Z0Z80ZB0zs0JZUTepzJwp\nhN7MpNJORFMBdDDzHgALKxyTExw4APT3jzZ9gPrMn44OSfSqm1S0qFB706qjTnMvTL+K+jqmTwc+\n+EHgRS8Cjj46nAS+KLZtk20uWyakov4UICQ5ovj2ByappBVlxsGmIDCtUZONUtFjpub1L34xUm3G\nJarNmVOvT6WtrXGp+rak8hUAHwLQT0SPAHisuiG5wf/8j1yccaTS3i5Pq6pJhWh0/c/+/XKzV00q\nqlRmzw7nm4lTKoAQ8LZt8nRbsUKmlPjhD4vvf3hYttfTI6SyaRPw1FMj634UU6eOvsGjSiWv+ZM1\niXkSqQwP57t5layjmbKulQpzflIBGpcAl5X8tix4+ygz/xMzXwGZdfDc6odWDklOWoXW5biGaf7o\nfsybQhOS6iIVVQVAvFIBQtLr6QH+1/+S9+edVzxKoM5gVSqAqBW9wM2Za22USl7zJyt5LYlUdu6U\ncdv6VJJCxWmkUsRJrhOTlSEVjQrGfcc1spTKd4joQwCuDiZJvwDAW4PXpsbtt0sJ+FFHxf9/2rTq\nlQow2iewbp281uVTMUklSals2SKvM2a4iRJoNm9PD3D88aIclFRmzRLnqyKLVPIqFRufSBKp2Nb9\nKLq7RfVGlUqc+TN7tjjId+zIH97NW/ejMPvonnmmkPlf/qWE6l0HCExkkcqHIROoTwZwUOSvqbFq\nFfCSlyQ/sfLa6raIkkp0P3WQiulTsVEqJgm4gBYzTp8ux0KdtdpF30TcNKQ6vqlTiyuVNLgiFSIh\nSRuloupsYCA/cZchlY0bZTz/8R/AW94i49CHSFVIzahl5msh8yH/hJnvr3Yo7rBjh/hUzjkn+TtV\nmD/aULlZSMWcKB5IVipKKjNmZG87qYjOfCpGSWrZMnFmLlkyWm67dtTaJK8lkYpt1zcTs2bZKxWg\nmF+lDKns3Qv09ckxPvdc4NZbxUSPmukuYeuofSURPUpE64hoPRGtS/syEU0mou8T0e1E9HsiOpOI\nTieiO4noDiK6JPjeRCK6mohWBcWKLyjzY1RWdnXJDfXpTyfLyirMH7NBkyLO/FHPfFXQm3lw0E6p\n6JPLRqnYPGXjSGXTJqnBsiEV/VwkpFyn+QMIWdg6aoH6SQUALr9c7oFXvCJ8cETnhnIJ217u7wHw\ncma2tcDOA/AcM59LRHMA3ApgGMCpzLyOiK4nohMBHA9gMzP/ORGdAuALAF6X8zc8jzyysqtLIhIu\nYbaSNPcTVSrz5uXvop8H5lxAcUqlTvMHCJ21cROMT506OnwdVSraUjJuHp8otm8Pm3wnIYtU8ty8\ns2YBa9eOXGY2vVaY5k9eFCEVU1E+8IC8treH52TLluoq0W2VytM5CAWQjNuvBe+HAEwDsI6ZVeH8\nEsArAJwB4CfBspsBRHJfq4OmrLuELalUafoAI8khTqmkOWpdJMNFSeqEE8KwdhypxIWUJ02Sm0BV\ng+25sjF/kpLfXCoVzVEyvwfUp1SSHrBK+FX6VaybNBHRr4jon4joUiK6NO27zHwDM99DRMcB+BWA\nKwCYh34bgB4As3Q5MzMAJqJRYwoiT/1E1D/gYqZrVOOoTTN/NJTYSFLRGzVOqUyYIERrdpY7+WSR\nzHmjBKZSmT9fiEPnx1mxYqRJmuRTUQLMW1JRp6MWCB21ZqjYrFBWdHVJ1GvTpmSC1rKFKIqaP2lo\nBlL5IYCrIdXJWqmcCiL6JIBrIDVDP4BEkRQzAQwAeE6XExFBuGVUWxlmXsnMy5l5+RwzyaEElFRc\nFtclKZXh4fB/jSQV7WgWp1R6ekZHypYuBe6+O3+jn61b5RhMmpRtkmaRit7gNn6VAwdGdoxLgkvz\nZ/ZsSWg0SS8uUU276m/aBPz617Ls8svl+lOS2bUrPsQ8pkiFiJYHb9fH/KWtdx6AEyGJctcDWAvg\nECJaQEQTAJwNUTDXA3hLsNqrISZQLZg2TS7CMs2Io0giFUAujL17xaaumlRMn0r0qRjXqGnr1nh/\nytKlMu4nnkjeXtxyTdG3gUulomRZlFQGB0Vl2rZsBMKsWtOsiVMqQJiqf/XVogzPDVJIs4hXf3tW\ni8s8aKSj9nQA/RDHqwkGcF3KemcBOBwSjtZlH4L4UvYD+B4zP0REjwH4NhH1A9gJ4M/zDX8kshoE\nmTAvVlehNbOTvsJ80iqB1aVUOjpGX4hJSiUunKzV3XffHc7FvGED8JGPAF/6knz+xjeAd7975HpJ\nJBWHjg4Jw+/bFybFFVUqtkqjo0NMVeb4XrN6yWZNwg6MTNXXY5SUUj97tuSNrF4NvPrV9hHAwUEZ\ns0vnfpVKJStP5bPB6zvN5UT0gYz1zk/413WR7+2Fw5aVeex+s1LZkUX1vE8lSamoQ69KUjFvkKGh\nMGKiN0gepXLccbL+PfdIW07FqlVSeHjXXfHRjDykYraUNElFl+dRKrZ5JuaEYh0d5bKI4xywO3bE\nk/Ts2cCPfywK+XOfy962wmXdz7x5cnwb7lMhos8S0WYi2kZEuwG8proh1YMqKpWzzB9NfDuownzk\nrBskTqls3Rp/E3R0SMLa3XeHy/btA+68U1p0dnbGRzPymj/ASBOorFKxJZWkSuU8iCsqjJKA5k/9\n4Aehw/q88+xDukVIJW0ql56eJiAVAK+CpOb/G4DFaIEq5SxU0agpjlTMm6KObNosxCkVddTGQZ21\nivvukyf8S16SPJ2nqVSyfDBxza937SrmU8lj/kT3WRRJSsX0qZStpypCKmmYMaM5SGVfYKpMZuan\nALy4uiHVgyoaNcWFlKNKZcIEd+ZWESQplTRSeeopaaINjKz+njMnW6lkTX6WpVSqNH9ckEpPj5iI\nplLZsaNYl7ak5WOVVG4hon8AsJOIvgkgh3+8OdEo8+egg+wyQ6tCtPm11oEk1f2ccIK83nuvvK5a\nJWSyaJGdUslCFqlMniy+lirMn6RJ2vOgrW1k/1ntfRIX/UmCSbxvepMUYEabPrkmlSqjP1kh5cOJ\n6EuQnJIvArgb0gD7ruqGVA8aZf400vQBRmcSZ6XomxEgQEjlpJPERxDXzWz3bolyufKpaC1XHvMn\nr1Ipm0VsFhXqTAB5SMXEokUSwjfzp8aaUvkWgK0ADoMQyVmQNgiPpK3UCkiq2C2DuJByZ6fcGKpU\nqiaVrBskqlTMFP2k9ebPF1LZuhV46KGw8VVcNzPNps0TUgZCUhkeHulTAeyLCov6VDZsAJ4MWrmv\nXJm/14h5HMomqi1cKOdHzU3dpktSqdpRmxX5nsDMnwIAIjqDmd9e3VDqRRVKZfdu8ZmYTYiIworo\ndeuAV77S3f7ikHUjTJsmSmL/fsl7sCkmPOEECSv398tnJZU5c+QGMHvI5CWVqFLRG90kFVulojlH\n5vGPQ5xPJa7VpS1mzQoTBOMqlPPkTy1aJK9PPBFGlqpQKjt2jMwNcokspWJO5tCg6Z6rgdrqrs0f\n0/RRdHfLRbtlS+PNn2j7A5teKkuXSn+am4N85xNPlNe4yIdur6j5Y1YoK/IoFZu6nThSiXb6zwOz\nqDBOqWQ5q00sDFrKq3IaHpZj4ppUgOr8KlmkwgnvxwRcVyoPDcVn53Z1yZzAQONJJWr22fRSWbpU\nnmrf/rbkreh348r587ZRsCGVPD4Vm5vPNamYRYVxSiUPTKUCxM8hVBZVk0qW+bOMiG4FQACOMd4z\nM59czZDqg+tKZc3QjNvPgw/K+0aTSlGlAsiFfr6RKx2nVKK9VLIQzVNRcjErdru7gccfz96WTYMm\nIJ1UijTPmj1bTMpdu8r7VHp6ZF1VKlUUE+q5rsqvkkUqx1ez2+aAa1JJM3/0idNoUklSKkkkEK2L\n+fa35W/ePOCmm2RZMymVoqSycaMcm6T2A2kwiwrLKhWiMAIEVEMqem4aQirM3BLTmxZFFeZPklJR\nNJpU4pRKR8foWRwVadmgav6UUSoTJ4pz25VP5ZBDsr+XpFSKTlehim3z5vKkAohfpZWVSgPTsBqP\nvEola2qFNJ8KICX1M2eWH3cZxCkVm4bXcejpEUKIKpW2NvubKjpLYZJS0ZaScdDzcvfd0jU+a8oL\n16RiKhUXJFC1UvGkUiHykkpWDUeST0Ul+YIF6ZNc1YE4pVK0N61OqWqSis5MmOd3mtN0JCkVIFlV\n5q2taW+XvyipFG1GXoVS2bZNzk2VpNKo6M+YRt3mT6NNH8CtUgFGJ8Bt3Wpv+ihslArg1v8VbdTk\nUqm0tcVfB7bQCNCTT1ZDKlOmyJ9XKhWgCkdtmvnTDKTiUqkAo1P1i2yv0aSyf7+ojKKkMmOGKDNV\nKtOmlVOkZq5KFaQCVJuqP65JxbVSsTF/Go2oUknqpaLISvuPKpU8vVQUZkf9NPMnz/w/WTBJRXNM\nipJKe7sQqSqVsgRg5qpURSpVpuqPa1Lp6pL8gn373Gwvav6oA/GDH5TPl1+ef7Jz1+jokDHozZvW\nSwXIzgatQqkQJbePcAWTVMokvik0qzapP23ebXV0hEpFG5a7hFcqFSHvxZr11I6SiovJzl3D7Kg/\nPCzKoqxP5bnnwo5mRZWKksquXfLZNB+ylEpSo+o0kogjlTKzRmpWbd5eKnEwc1W0jYJrB78nlYqQ\nt1J5wwbgZS+T/qyATKtqPrWTfCrNBq1UHhwUYinrUxkeDi9QF0ol+lROI//775d2A5dealdbozBJ\npUwxoUKVSt5eKknQXBXXxYSKKnuqjGtSyatUtmyRfiJnny0nRS9GQC7iJJ9Ks0F9SS6mOzUT4IaH\n5VjmVSrRkHKUVNKUype+JKT03vfm36dL80d7qrgwf4CRSqUqUvFKpQLkJZXf/EZunDPPFKlsmjE6\n/UYrkIoqlaxeKjbQHI2BgXAmxqqVipmEeNVVsu6sWfl8VVFSmTw538yEUaj544oEFi4UktqwoRpS\n6ekRUzXvRHE2GNekktf8ufZaufBOOkmeaqZSiWvQ1KzQ5teulUrR7WWRSrSlpAtfVZRU5s4t57eY\nPVt+w8CAO/MHEPOuKqXCHJZVuMS4JpU8SoUZuO464LTT5AKPKpW4OX9cTHZeBdRR61qp5K37UURD\nylFSydNS0hZRn0rZc6IJcNu2uSEBDStv2VIdqej2XcOTCuwu1rVrxXH26lfL5ySlYpJKnuY8dULN\nHxdKxSSVMkpFZymMIxXAvqjQFlGlUpZU9DgAbpUKUC2pVOGsHdekksf8uS6YW/HMM+V17lwJpWqO\nS6uZP6ajtoxSmTJFtrdpUzmlAsgxTCKVKpWKC1JRpQK4IYH588NQuVcqLYQspWI6BC+6SJYdeaQs\n15wGTfyKM3+aFaajVk2LMtAEuDJKBRCfRBqpVKFUhodFcZbJUQHcK5W2NuCww+R9VY5aoAVJhYjO\nJaLLgvdvI6LbiejG4O8lwfIvElE/Ed1BRH9c5Xii6OiQk5dEKmkOQX2yqQkUZ/40K0ylopNhlYGm\n6pdVKrt2hclvUXR3h+cpiQDyqI2ODqn5GRiQV5dKxQWpAKFfxSsVAETURkS/gkzxoXgxgA8y86uC\nv9uJ6HQARzLzcgB/BuBfqhhP8jiL1//ohW1Ohg60Bql0dsrN+9xz5fwpiqhSKZKnAtgrlW8FV9V1\n1xX3Vek+tRlSs5k/QOhX8aQCgJmHIXMEvd9Y/AIAFxPRzcGE7xMAnAHgJ8E6jwNoI6Ja2xiZtnq0\nCVMakpRKq/hUAOCZZ9yRioaUOzvzT/ugymTbNvFRJTlq9Txdf734G17+8uJjdk0qEyeGeS4ulMr8\n+cCVV8r7D384u/FUXnR2jpyixSUqM3+YeT8AM7XmFgAXAXglgDkALgQwC4AxCy22ARh1mRPRBYGJ\n1D8QN89mCeicPEC+PIeoUmk1nwoAPP10OSetQqc/LVL3A4SkotXOWY7a668HTj65WD9ZhZ4n7bBW\n1qcChH4VF8qi6roxouqyaut01H6emR8LVMyPACwF8BwA8zLsATBqym9mXsnMy5l5+RzHs5trq8Ii\n602Z0ro+FUBIxZVSGRqSydKKbE/JQZ8XaUplYAC46y7gjDOKjxcYTSoucofUBHLlU6kaLU0qRDQJ\nwFNEpM/F0wD0A7gewFuC77wQwFZmdujjz0aRUOW8ecL0ZgJcK5k/etOmTcyeB/qEfuSRckoljVT0\n6f+LX8jr6afn348JPU9PPCF9dk2fSF6o2XzHHfL52GMb3+LCBlX1VMmaosMJmHkvEf0NgF8T0SCA\nhwFcFSx/PRHdBZkN8YI6xmNi2jTgD3/I/p45YbZi7txQqbSS+WM+SV0pFUDm5jnqqPzr2yoVAPjp\nT+X98uX592PC9KnMmVMuAtaMLS5sMGPGyDmbXaFSUmHmfzPefw/A92K+c1GVY8hCmaSqefOA9evl\nfSuZP+ZN61Kp7N9fvVK57jpJQGwveeWa5k8RIhwLmDEDeOwx99sd18lvwEhSyVurE2f+JM2f00yo\nSqkU3V4epbJnT3l/ChCSys6dbpy0rlFH3VhL+1SaGWaeyoYNwM9/Lu9vvTU7/0Hrf5jDBk2NnoLD\nBlUpFaAYqegNrtGfaFRn/nzpYaP40IfK+yxsCj8biTrqxpRU4kz7Mhj3pNLVJUlX2g7xvvvk9dhj\ns9edO1fyKrZubZ0GTYB7pdLTE5ojRcwfnaUwKaRchc+i2UmlDvT0yHXvsvk74EnleVtdD+x990km\no03DHpXNGzcmz/nTjDBvWhekQhSqlSLb01kK08wf13BJKs3a4iILVWXVjntSiVYq33cf8Ed/ZLeu\nmVXbKv1pAffmDxCSShGlAoxs1FQ3qZT1qTRri4sseFKpCGal8t69wJo19qRiZtW2kvkzYUJIgC6U\nChA6a4tuz/SjtJpSaVVU1VOlljyVZoYqlcFBIZT9+4srlVYhFUB+t4vkt/nzR/o2XvtaeZ03L9+T\nWkll0qTy4WIbmKpyvJOKVyqOYfpU1ElrSyqzZok/4NlnW8v8AUQNTJ5cfsyunKhKKnEqpQqfhTlh\n2Xgllap6qnhSMcyf++6TSMTixXbrtrcLsbSSUtGU8ieflJwP19WvRaHHLo5UqvJZ6D4dl5O1BObP\nB444Qt7/1V+5vQ7GPamY5s999wFLliTPeBeHefNay6fSrCnlaUrFNZRY9Qk9aVJzEGudqPI6GPek\nEjV/bE0fhdb/tIpSaVYoqZRpZ2CLZiXWsQJPKgGpPPMM8NRT+UlFs2pbzafSbKhTqXhUi3FPKnoR\n33abvBZRKq1k/riGKyeqJ5Wxg3EfUm5rkwt51Sr5XIRUtm8Xu3w8koqrBC9PKmMH416pAGGlcnd3\nOC2CLfSJvHdva5g/zZpS7kmlXlR5HYx7pQKEEaDjjstfZWymeLeCUmnW1PE6SUUjdnHLxwuqvA48\nqSB01h53XP51zQuxFUilWZGWp+IazUqsYwXj2vzRfIW77pLPK1fmz1cwlUormD/NCm/+jB2Ma1Jx\nka/QauZPs8KTytjBuCYVF+jsDG8ETyrFUWfym0e18KTiAKpWPKkUw/z5wFvfKu8/+MHmqUfyKAZP\nKg6gzlrvUykGnzY/tuBJxQG8UvHwCDGuQ8pl8xWiDYpOPTVc34ctPcYrxjWplL3xvWz38BgNb/54\neHg4hScVj4ajWeuRPIqhUlIhonOJ6LLg/elEdCcR3UFElwTLJhLR1US0iohuJaIXVDkej+ZEq05x\n4RGPSkiFiNqI6FcAvhV8JgD/AuBsZj4RwEuJ6EQA5wPYzMwnAfgYgC9UMR4PD4/6UAmpMPMwgLMA\nvD9YtBjAOmZeF3z+JYBXADgDwE+CZTcDWFrFeKqCl+0eHqNRWfSHmfcT0XDwcRaAzca/twE41FzO\nzExETERtASk9DyK6AMAFAHBY3oYnFcLLcw+P0ajLUfscAHNCzJkABszlgYnEUUKBLFzJzMuZefmc\n8TifgodHC6EuUlkL4BAiWkBEEwCcDeBXAK4H8JbgO6+GmEAeHh4tjFqS35h5mIg+BPGl7AfwPWZ+\niIgeA/BtIuoHsBPAn2dta/Xq1ZuI6EmL3c4GsKnMuGtAs4+x2ccHNP8Ym318gP0YF9psjJi53HCa\nFETUz8zLGz2ONDT7GJt9fEDzj7HZxwe4H6NPfvPw8HAKTyoeHh5OMZZJZWWjB2CBZh9js48PaP4x\nNvv4AMdjHLM+FQ8Pj8ZgLCsVDw+PBqBlSSVSrHgaEf2eiG4joiuCRDoQ0flEdA8R9QdZuSCi44MC\nxtuJ6Eoiqqr+KXV8RPQOIrrR+HuAiF5HRIcQ0W+DMf47EVXWX97yGF5MRLcEx/DcYFmzjfELwRjv\nIKLX1zFGIppMRN8PrqPfE9GZeYpm477biPEZ33/+OJceHzO31B+ECH8FYDeAywAQJLlufvD/fwXw\npwAOBvAogB4AUwE8AqADkmD3ouC7VwF4ayPGF1nnBQD+G5I39B0A5wTLPwngbxt4DI8GcFvw/x4A\nzwTvm2mMrwHwo2DZDAAPA5hU9RgBvAPAFcH7OcF+1wBYECy7HsCJAN4F4CvBslMA/GfwW0Z9t0Hj\nG3Gcg/+VGl/LKRUeXaw4B8AuZtZKnNsRFiv+nJm3MvMuAK8FMBFyoILpw/BfwXcbMT4Az5cnrATw\nYWbeD+CVAH5R1fhyjnEYQsSTAHQB2MNylTXTGI8H8LtgnS2Q0o9jaxjjkwC+FrwfAjAN9kWzSQW2\ntY8v5jij7PhajlQAKVaEXPCAZAJOI6LDiKgd8uSaDGABgJlE9DMiugXAn0AO7BZjU9sgT+BGjE/x\nRgAPMfODwef2YP3KxpdjjI8BeBry1LoHwHebcIz3ATiVpN3GEQCOCZZXOkZmvoGZ7yGi4yBP+isw\numi2B5GiWQCM+ALbRo0vepxRdnwt36OWpQTgfIgcZgBbATwBYAfk4LwJ8jtvA3ATgG5jdS1sbMT4\nFB8FcKHxeS8RTWDmA3WML2OM50Oe/EdAFMutRNTXTGNk5l8S0XIAN0KI53HIU7ryMRLRJyEm2Ich\npqH5NE8smkVygW0jxheHUuNrSaViIjhR50EKEs+ESPWfQ0hkZ8DCeyC1RfsBbCQi7dtyDoBrGzQ+\nENFhALqY+T5jlVsAvK6u8WWMcTKkidYwM++EPLGaaoxE9DIATzHzKQA+AmCAmddXPUYiOg/ikziR\nma9HvqLZpO82YnxxKDW+saBUmIj+AGAVgAMAvsPMDwAAEa0mopshjqcfsxQxXgTgSpJeL79j5usa\nNT6IvX1DZJUVAPqIaAXE0XxxleNLGyMRPQrg68ExbAfw02B5M41xOoB/JKJ3B199X/Ba9RjPAnA4\ngGuDIBQAWBXNckKBbSPGF7di2fH55DcPDw+naHnzx8PDo7ngScXDw8MpPKl4eHg4hScVDw8Pp/Ck\n4uHh4RSeVDxKg4g+RUT/v707VIkgjqI4/DsubNFsNlvEJoJBsAkmi20RBQ2CUbCZDbpFLCaLzyCC\nSQTdB7DZBPEBtHgNd8KKTe/uunC+NmGGmw7Mf++ZPe+7npL0LGl+lHPZaPgnZfszSW2gB2xGxIOk\nY7IndPiLZ/343ycbLw4VKyFpATgFtoFLcptzBuiSLfE3YItcr78gF7MmySW2E0m3ZNdoIiI6Qx7f\nCvn1x0pExD1ZjbgGdiLig2xf70fEErmdeQBMA4/NWv0qsNf3mBsHyvgb+zV9+1e6wGJE3DXXc8BZ\nsybeJjsl78BscwbzAbT67u8NcVYbEIeKVfrke4X+CdiIiBdJy+RHlDrAS0QcNWXAteGPaYPkULFB\n2iVLfS2yTr9LBs2VpBXyUxSvktZHOKMV80GtmZXyQa2ZlXKomFkph4qZlXKomFkph4qZlXKomFkp\nh4qZlXKomFmpL4ZxuUU+dQiQAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(4, 6))\n", "\n", "ax1 = fig.add_subplot(2, 1, 1)\n", "\n", "ax1.plot(data['year'], data['temperature'], 'ro-')\n", "\n", "ax1.set_xlabel('Year')\n", "ax1.set_ylabel('Temperature')\n", "\n", "ax2 = fig.add_subplot(2, 1, 2)\n", "\n", "ax2.plot(data['year'], data['rainfall'], 'bs-')\n", "\n", "ax2.set_xlabel('Year')\n", "ax2.set_ylabel('Rainfall')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "----------\n", "### Challenge: plot the relationship between the number of mosquitos and temperature and the number of mosquitos and rainfall." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can do this in a similar way as we did above." ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\ns0I5qJhZof4/276WD92haB4AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(4, 6))\n", "\n", "ax1 = fig.add_subplot(2, 1, 1)\n", "\n", "ax1.plot(data['temperature'], data['mosquitos'], 'ro')\n", "\n", "ax1.set_xlabel('Temperature')\n", "ax1.set_ylabel('Mosquitos')\n", "\n", "ax2 = fig.add_subplot(2, 1, 2)\n", "\n", "ax2.plot(data['rainfall'], data['mosquitos'], 'bs')\n", "\n", "ax2.set_xlabel('Rainfall')\n", "ax2.set_ylabel('Mosquitos')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Note that the *linestyle* code on the right can be used to turn off interpolation lines, since we want to just plot the points, and don't care about their order.\n", "\n", "-------------" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "From this one dataset we see what looks like a linear relationship between mosquitos and rainfall, but not really any relationship between mosquitos and temperature. We'd like to quantify this further by applying a statistical model to the data, but we also want to do this same treatment to **all** our datasets." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Gathering up all the data into a single `DataFrame`" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Although we could at this point create a separate `DataFrame` for each area (CSV file) we have data for, `pandas` is generally more useful when we can pack as much of our data as is reasonable into a single DataFrame. Since all our datasets have the same form, we can probably gain by combining them." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ " First, we'll import a module called ``glob``:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "import glob" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can use this to grab all the filenames matching a \"globbing\" pattern:" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "['A3_mosquito_data.csv',\n", " 'A1_mosquito_data.csv',\n", " 'A2_mosquito_data.csv',\n", " 'B1_mosquito_data.csv',\n", " 'B2_mosquito_data.csv']" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "glob.glob(\"*.csv\")" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "\"Globbing\" is the name of the shell-completion patterns common for shells like ``sh`` and ``bash``." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We will use the ``pandas.concat`` function to make a single ``DataFrame`` from all our others:" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "filenames = sorted(glob.glob('*.csv'))\n", "dfs = []\n", "keys = []\n", "for filename in filenames:\n", " keys.append(filename.split('_')[0])\n", " dfs.append(pd.read_csv(filename))\n", " \n", "df = pd.concat(dfs, keys=keys, names=['location'])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We now have a \"multi-index\" ``DataFrame``:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
yeartemperaturerainfallmosquitos
location
A10200180157150
1200285252217
2200386154153
3200487159158
4200574292243
5200675283237
6200780214190
7200885197181
8200974231200
9201074207184
A20196082200180
1196170227194
2196289231207
3196374114121
4196478147140
5196585151148
6196686172162
7196775106112
8196870276230
9196986165162
10197083222198
11197178297247
12197287288248
13197376286239
14197486231202
15197590284243
16197676190175
17197787257225
18197888128133
19197987218199
..................
B221198182121141
22198278234223
23198390281263
24198476151159
25198578152164
26198672262236
27198777258240
28198880263244
29198985191194
30199084166177
31199179205200
32199278154167
33199384278253
34199471224207
35199571281246
36199676187188
37199781123143
38199873260235
39199970278244
40200080262243
41200171155162
42200277241227
43200375132145
44200478184183
45200587266247
46200679201199
47200785227220
48200874206200
49200977260240
50201089242236
\n", "

214 rows × 4 columns

\n", "
" ], "text/plain": [ " year temperature rainfall mosquitos\n", "location \n", "A1 0 2001 80 157 150\n", " 1 2002 85 252 217\n", " 2 2003 86 154 153\n", " 3 2004 87 159 158\n", " 4 2005 74 292 243\n", " 5 2006 75 283 237\n", " 6 2007 80 214 190\n", " 7 2008 85 197 181\n", " 8 2009 74 231 200\n", " 9 2010 74 207 184\n", "A2 0 1960 82 200 180\n", " 1 1961 70 227 194\n", " 2 1962 89 231 207\n", " 3 1963 74 114 121\n", " 4 1964 78 147 140\n", " 5 1965 85 151 148\n", " 6 1966 86 172 162\n", " 7 1967 75 106 112\n", " 8 1968 70 276 230\n", " 9 1969 86 165 162\n", " 10 1970 83 222 198\n", " 11 1971 78 297 247\n", " 12 1972 87 288 248\n", " 13 1973 76 286 239\n", " 14 1974 86 231 202\n", " 15 1975 90 284 243\n", " 16 1976 76 190 175\n", " 17 1977 87 257 225\n", " 18 1978 88 128 133\n", " 19 1979 87 218 199\n", "... ... ... ... ...\n", "B2 21 1981 82 121 141\n", " 22 1982 78 234 223\n", " 23 1983 90 281 263\n", " 24 1984 76 151 159\n", " 25 1985 78 152 164\n", " 26 1986 72 262 236\n", " 27 1987 77 258 240\n", " 28 1988 80 263 244\n", " 29 1989 85 191 194\n", " 30 1990 84 166 177\n", " 31 1991 79 205 200\n", " 32 1992 78 154 167\n", " 33 1993 84 278 253\n", " 34 1994 71 224 207\n", " 35 1995 71 281 246\n", " 36 1996 76 187 188\n", " 37 1997 81 123 143\n", " 38 1998 73 260 235\n", " 39 1999 70 278 244\n", " 40 2000 80 262 243\n", " 41 2001 71 155 162\n", " 42 2002 77 241 227\n", " 43 2003 75 132 145\n", " 44 2004 78 184 183\n", " 45 2005 87 266 247\n", " 46 2006 79 201 199\n", " 47 2007 85 227 220\n", " 48 2008 74 206 200\n", " 49 2009 77 260 240\n", " 50 2010 89 242 236\n", "\n", "[214 rows x 4 columns]" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "The outer index gives the area name (\"location\") the rows came from. These allow us to select rows on the basis of area:" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "year 2002\n", "temperature 85\n", "rainfall 252\n", "mosquitos 217\n", "Name: (A1, 1), dtype: int64" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.loc[('A1', 1)]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "More powerfully, this allows us to get aggregates over all areas:" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "81.040000000000006" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[df['year'] > 2005]['temperature'].mean()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Or get descriptive statistics directly as a function of location:" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", "
yeartemperaturerainfallmosquitos
location
A12005.580.000000214.600000191.300000
A21985.080.392157207.039216185.235294
A31985.080.333333193.27451097.647059
B11985.079.627451204.58823599.509804
B21985.079.764706196.823529196.058824
\n", "
" ], "text/plain": [ " year temperature rainfall mosquitos\n", "location \n", "A1 2005.5 80.000000 214.600000 191.300000\n", "A2 1985.0 80.392157 207.039216 185.235294\n", "A3 1985.0 80.333333 193.274510 97.647059\n", "B1 1985.0 79.627451 204.588235 99.509804\n", "B2 1985.0 79.764706 196.823529 196.058824" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.mean(level='location')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "-------------\n", "### Challenge: obtain the minimum rainfall for each location given that the temperature was between 75F and 90F." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This is best read backwards. First, let's filter our rows so we only get those for the temperature range we want:" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
yeartemperaturerainfallmosquitos
location
A10200180157150
1200285252217
2200386154153
3200487159158
6200780214190
7200885197181
A20196082200180
2196289231207
4196478147140
5196585151148
6196686172162
9196986165162
10197083222198
11197178297247
12197287288248
13197376286239
14197486231202
16197676190175
17197787257225
18197888128133
19197987218199
20198081206184
22198285202187
24198480225200
26198676261222
27198785111121
28198883247210
29198986137142
30199082159152
31199177172160
..................
B210197085227216
11197181197197
13197389100136
14197484294268
15197582134156
16197677116139
17197784157175
18197885128154
19197979119143
21198182121141
22198278234223
24198476151159
25198578152164
27198777258240
28198880263244
29198985191194
30199084166177
31199179205200
32199278154167
33199384278253
36199676187188
37199781123143
40200080262243
42200277241227
44200478184183
45200587266247
46200679201199
47200785227220
49200977260240
50201089242236
\n", "

151 rows × 4 columns

\n", "
" ], "text/plain": [ " year temperature rainfall mosquitos\n", "location \n", "A1 0 2001 80 157 150\n", " 1 2002 85 252 217\n", " 2 2003 86 154 153\n", " 3 2004 87 159 158\n", " 6 2007 80 214 190\n", " 7 2008 85 197 181\n", "A2 0 1960 82 200 180\n", " 2 1962 89 231 207\n", " 4 1964 78 147 140\n", " 5 1965 85 151 148\n", " 6 1966 86 172 162\n", " 9 1969 86 165 162\n", " 10 1970 83 222 198\n", " 11 1971 78 297 247\n", " 12 1972 87 288 248\n", " 13 1973 76 286 239\n", " 14 1974 86 231 202\n", " 16 1976 76 190 175\n", " 17 1977 87 257 225\n", " 18 1978 88 128 133\n", " 19 1979 87 218 199\n", " 20 1980 81 206 184\n", " 22 1982 85 202 187\n", " 24 1984 80 225 200\n", " 26 1986 76 261 222\n", " 27 1987 85 111 121\n", " 28 1988 83 247 210\n", " 29 1989 86 137 142\n", " 30 1990 82 159 152\n", " 31 1991 77 172 160\n", "... ... ... ... ...\n", "B2 10 1970 85 227 216\n", " 11 1971 81 197 197\n", " 13 1973 89 100 136\n", " 14 1974 84 294 268\n", " 15 1975 82 134 156\n", " 16 1976 77 116 139\n", " 17 1977 84 157 175\n", " 18 1978 85 128 154\n", " 19 1979 79 119 143\n", " 21 1981 82 121 141\n", " 22 1982 78 234 223\n", " 24 1984 76 151 159\n", " 25 1985 78 152 164\n", " 27 1987 77 258 240\n", " 28 1988 80 263 244\n", " 29 1989 85 191 194\n", " 30 1990 84 166 177\n", " 31 1991 79 205 200\n", " 32 1992 78 154 167\n", " 33 1993 84 278 253\n", " 36 1996 76 187 188\n", " 37 1997 81 123 143\n", " 40 2000 80 262 243\n", " 42 2002 77 241 227\n", " 44 2004 78 184 183\n", " 45 2005 87 266 247\n", " 46 2006 79 201 199\n", " 47 2007 85 227 220\n", " 49 2009 77 260 240\n", " 50 2010 89 242 236\n", "\n", "[151 rows x 4 columns]" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[(df['temperature'] > 75) & (df['temperature'] < 90)]" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Then, we can grab the minimum rainfall for these:" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "100" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[(df['temperature'] > 75) & (df['temperature'] < 90)]['rainfall'].min()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "But we wanted minimum rainfall **for each location**; we can tell ``Series.min`` to split the data by location:" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "location\n", "A1 154\n", "A2 111\n", "A3 112\n", "B1 102\n", "B2 100\n", "Name: rainfall, dtype: int64" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df[(df['temperature'] > 75) & (df['temperature'] < 90)]['rainfall'].min(level='location')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "--------------" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can do even more powerful splitting of our `DataFrame` into subsets of interest using `groupby`." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Split-apply-combine using `groupby`" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "A ``groupby`` allows us to split our rows according to values in one or more column. For example, we could ask for the minimum rainfall measured across all areas for each year:" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "df.groupby('year')['rainfall'].min().plot()" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "This should be read as \"group the data by year, then get the minimum rainfall for each group; plot the resulting series.\" If we want to do something more complex for each group of rows, we can use a ``for`` loop:" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "from seaborn.apionly import color_palette" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "image/png": "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\n8JoAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ax = plt.figure().add_subplot(1,1,1)\n", "\n", "for i, (name, group) in enumerate(df.groupby(level='location')):\n", " group.plot.scatter(x='rainfall', y='mosquitos', \n", " label=name, legend=True, ax=ax, color=color_palette()[i])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "To learn more about ``groupby``s, check out the ``pandas`` docs on the \"split-apply-combine\" approach to working with datasets with ``groupby``: http://pandas.pydata.org/pandas-docs/stable/groupby.html" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## Final bit of fun with `scikit-learn`" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Since it looks like we have a linear relationship between mosquitos and rainfall in each area, we could fit a linear regression estimator to the data for each area and further quantify the relationship. For simplicity we'll just use rainfall instead of both temperature and rainfall in building our model." ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "Doing this for just the area `'A2'`:" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": true, "deletable": true, "editable": true }, "outputs": [], "source": [ "from sklearn.linear_model import LinearRegression" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [], "source": [ "lr = LinearRegression().fit(df.loc['A2'][['rainfall']], df.loc['A2']['mosquitos'])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can extract out the coefficient(s) from the fit (there's only one since we only have one feature, rainfall):" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "array([ 0.69588497])" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lr.coef_" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "as well as the intercept:" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "41.159816368684659" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lr.intercept_" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "And we could use these to plot the model against the original data:" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot the model results\n", "plt.plot(df.loc['A2']['rainfall'],\n", " lr.coef_[0] * df.loc['A2']['rainfall'] + lr.intercept_,\n", " label='model')\n", "\n", "# plot the original data\n", "plt.scatter(df.loc['A2']['rainfall'], df.loc['A2']['mosquitos'],\n", " label='data',\n", " color=color_palette()[1])\n", "\n", "plt.xlabel('rainfall')\n", "plt.ylabel('mosquitos')\n", "plt.legend(loc='best')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We can see that this fit does a pretty good job of modeling the data. We can get back the $R^2$ of the fit with:" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "0.99131593546068497" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lr.score(df.loc['A2'][['rainfall']], df.loc['A2']['mosquitos'])" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "We could also do this for each of our areas, using `groupby`:" ] }, { "cell_type": "code", "execution_count": 66, "metadata": { "collapsed": false, "deletable": true, "editable": true }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAasWVHIcjAdzAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "for i, (name, group) in enumerate(df.groupby(level='location')):\n", " \n", " # fit the model \n", " lr = LinearRegression().fit(group[['rainfall']], group['mosquitos'])\n", "\n", " # plot the model result\n", " plt.plot(group['rainfall'],\n", " lr.coef_[0] * group['rainfall'] + lr.intercept_,\n", " label=name,\n", " color=color_palette()[i])\n", "\n", " # plot the original data for this area\n", " plt.scatter(group['rainfall'], group['mosquitos'],\n", " color=color_palette()[i], label=None)\n", "\n", "plt.xlabel('rainfall')\n", "plt.ylabel('mosquitos')\n", "plt.legend(loc='best')" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "## In summary" ] }, { "cell_type": "markdown", "metadata": { "deletable": true, "editable": true }, "source": [ "There's plenty more that `pandas` can do, including joining `DataFrame`s on common keys, aggregating timeseries on regular intervals like like hours or days, generating pivot tables, and many ways to read and write tabular data. Check out the extensive [pandas docs](http://pandas.pydata.org/pandas-docs/stable/) for more details." ] } ], "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.6.0" } }, "nbformat": 4, "nbformat_minor": 0 }