{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This material assumes that you have programmed before. This first lecture provides a quick introduction to programming in Python for those who either haven't used Python before or need a quick refresher.\n", "\n", "Let's start with a hypothetical problem we want to solve. 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:\n", "\n", "~~~\n", "year,temperature,rainfall,mosquitos\n", "2001,87,222,198\n", "2002,72,103,105\n", "2003,77,176,166\n", "~~~" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Objectives" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Conduct variable assignment, looping, and conditionals in Python\n", "* Use an external Python library\n", "* Read tabular data from a file\n", "* Subset and perform analysis on data\n", "* Display simple graphs" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Loading Data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to load the data, we need to import a library called Pandas that knows\n", "how to operate on tables of data." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import pandas" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now use Pandas to read our data file." ] }, { "cell_type": "code", "collapsed": false, "input": [ "pandas.read_csv('mosquito_data_A1.csv')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
yeartemperaturerainfallmosquitos
0 2001 87 222 198
1 2002 72 103 105
2 2003 77 176 166
3 2004 89 236 210
4 2005 88 283 242
5 2006 89 151 147
6 2007 71 121 117
7 2008 88 267 232
8 2009 85 211 191
9 2010 75 101 106
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [ " year temperature rainfall mosquitos\n", "0 2001 87 222 198\n", "1 2002 72 103 105\n", "2 2003 77 176 166\n", "3 2004 89 236 210\n", "4 2005 88 283 242\n", "5 2006 89 151 147\n", "6 2007 71 121 117\n", "7 2008 88 267 232\n", "8 2009 85 211 191\n", "9 2010 75 101 106" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `read_csv()` function belongs to the `pandas` library. In order to run it we need to tell Python that it is part of `pandas` and we do this using the dot notation, which is used everywhere in Python to refer to parts of larger things.\n", "\n", "When we are finished typing and press Shift+Enter, the notebook runs our command and shows us its output. In this case, the output is the data we just loaded.\n", "\n", "Our call to `pandas.read_csv()` read data into memory, but didn't save it anywhere. To do that, we need to assign the array to a variable. In Python we use `=` to assign a new value to a variable like this:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "data = pandas.read_csv('mosquito_data_A1.csv')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This statement doesn't produce any output because assignment doesn't display anything. If we want to check that our data has been loaded, we can print the variable's value:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print data" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " year temperature rainfall mosquitos\n", "0 2001 87 222 198\n", "1 2002 72 103 105\n", "2 2003 77 176 166\n", "3 2004 89 236 210\n", "4 2005 88 283 242\n", "5 2006 89 151 147\n", "6 2007 71 121 117\n", "7 2008 88 267 232\n", "8 2009 85 211 191\n", "9 2010 75 101 106\n" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "`print data` tells Python to display the text. Alternatively we could just include `data` as the last value in a code cell:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "data" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
yeartemperaturerainfallmosquitos
0 2001 87 222 198
1 2002 72 103 105
2 2003 77 176 166
3 2004 89 236 210
4 2005 88 283 242
5 2006 89 151 147
6 2007 71 121 117
7 2008 88 267 232
8 2009 85 211 191
9 2010 75 101 106
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ " year temperature rainfall mosquitos\n", "0 2001 87 222 198\n", "1 2002 72 103 105\n", "2 2003 77 176 166\n", "3 2004 89 236 210\n", "4 2005 88 283 242\n", "5 2006 89 151 147\n", "6 2007 71 121 117\n", "7 2008 88 267 232\n", "8 2009 85 211 191\n", "9 2010 75 101 106" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This tells the IPython Notebook to display the `data` object, which is why we see a pretty formated table." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Manipulating data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once we have imported the data we can start doing things with it. First, let's ask what type of thing `data` refers to:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print type(data)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The data is stored in a data structure called a DataFrame. There are other kinds of data structures that are also commonly used in scientific computing including Numpy arrays, and Numpy matrices, which can be used for doing linear algebra." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can select an individual column of data using its name:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print data['year']" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "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\n" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Or we can select several columns of data at once:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print data[['rainfall', 'temperature']]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " rainfall temperature\n", "0 222 87\n", "1 103 72\n", "2 176 77\n", "3 236 89\n", "4 283 88\n", "5 151 89\n", "6 121 71\n", "7 267 88\n", "8 211 85\n", "9 101 75\n" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also select subsets of rows using slicing. Say we just want the first two rows of data:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print data[0:2]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " year temperature rainfall mosquitos\n", "0 2001 87 222 198\n", "1 2002 72 103 105\n" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are a couple of important things to note here. First, Python indexing starts at zero. In contrast, programming languages like R and MATLAB start counting at 1, because that's what human beings have done for thousands of years. Languages in the C family (including C++, Java, Perl, and Python) count from 0 because that's simpler for computers to do. This means that if we have 5 things in Python they are numbered 0, 1, 2, 3, 4, and the first row in a data frame is always row 0.\n", "\n", "The other thing to note is that the subset of rows starts at the first value and goes up to, but does not include, the second value. Again, the up-to-but-not-including takes a bit of getting used to, but the rule is that the difference between the upper and lower bounds is the number of values in the slice." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One thing that we can't do with this syntax is directly ask for the data from a single row:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "data[1]" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "KeyError", "evalue": "u'no item named 1'", "output_type": "pyerr", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mdata\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;32m/usr/lib/python2.7/dist-packages/pandas/core/frame.pyc\u001b[0m in \u001b[0;36m__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 2001\u001b[0m \u001b[1;31m# get column\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2002\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_unique\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2003\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_get_item_cache\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2004\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2005\u001b[0m \u001b[1;31m# duplicate columns\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/lib/python2.7/dist-packages/pandas/core/generic.pyc\u001b[0m in \u001b[0;36m_get_item_cache\u001b[1;34m(self, item)\u001b[0m\n\u001b[0;32m 665\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mcache\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mitem\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 666\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mException\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 667\u001b[1;33m \u001b[0mvalues\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_data\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 668\u001b[0m \u001b[0mres\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_box_item_values\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mvalues\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 669\u001b[0m \u001b[0mcache\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mitem\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mres\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/lib/python2.7/dist-packages/pandas/core/internals.pyc\u001b[0m in \u001b[0;36mget\u001b[1;34m(self, item)\u001b[0m\n\u001b[0;32m 1653\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mitem\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1654\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_unique\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1655\u001b[1;33m \u001b[0m_\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mblock\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_find_block\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1656\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mblock\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1657\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/lib/python2.7/dist-packages/pandas/core/internals.pyc\u001b[0m in \u001b[0;36m_find_block\u001b[1;34m(self, item)\u001b[0m\n\u001b[0;32m 1933\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1934\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_find_block\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mitem\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1935\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_check_have\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1936\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mblock\u001b[0m \u001b[1;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mblocks\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1937\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mitem\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mblock\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/lib/python2.7/dist-packages/pandas/core/internals.pyc\u001b[0m in \u001b[0;36m_check_have\u001b[1;34m(self, item)\u001b[0m\n\u001b[0;32m 1940\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_check_have\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mitem\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1941\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mitem\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1942\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mKeyError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'no item named %s'\u001b[0m \u001b[1;33m%\u001b[0m \u001b[0mcom\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpprint_thing\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mitem\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1943\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1944\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mreindex_axis\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mnew_axis\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcopy\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mKeyError\u001b[0m: u'no item named 1'" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is because there are several things that we could mean by `data[1]` so if we want a single row we can either take a slice that returns a single row:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print data[1:2]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " year temperature rainfall mosquitos\n", "1 2002 72 103 105\n" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "or use the `.iloc` method, which stands for \"integer location\" since we are looking up the row based on its integer index." ] }, { "cell_type": "code", "collapsed": false, "input": [ "print data.iloc[1]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "year 2002\n", "temperature 72\n", "rainfall 103\n", "mosquitos 105\n", "Name: 1, dtype: int64\n" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also use this same syntax for getting larger subsets of rows:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print data.iloc[1:3]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " year temperature rainfall mosquitos\n", "1 2002 72 103 105\n", "2 2003 77 176 166\n" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also subset the data based on the value of other rows:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print data['temperature'][data['year'] > 2005]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "5 89\n", "6 71\n", "7 88\n", "8 85\n", "9 75\n", "Name: temperature, dtype: int64\n" ] } ], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Data frames also know how to perform common mathematical operations on their values. If we want to find the average value for each variable, we can just ask the data frame for its mean values" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print data.mean()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "year 2005.5\n", "temperature 82.1\n", "rainfall 187.1\n", "mosquitos 171.4\n", "dtype: float64\n" ] } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Data frames have lots of useful methods:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print data.max()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "year 2010\n", "temperature 89\n", "rainfall 283\n", "mosquitos 242\n", "dtype: int64\n" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "print data['temperature'].min()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "71\n" ] } ], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "print data['mosquitos'][1:3].std()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "43.1335136524\n" ] } ], "prompt_number": 18 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Challenge" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Import the data from `mosquito_data_A2.csv`, create a new variable that holds a data frame with only the weather data, and print the means and standard deviations for the weather variables." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Loops" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once we have some data we often want to be able to loop over it to perform the same operation repeatedly.\n", "A `for` loop in Python takes the general form\n", "\n", "~~~\n", "for item in list:\n", " do_something\n", "~~~\n", "\n", "So if we want to loop over the temperatures and print out there values in degrees Celcius (instead of Farenheit) we can use:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "temps = data['temperature']\n", "for temp_in_f in temps:\n", " temp_in_c = (temp_in_f - 32) * 5 / 9.0\n", " print temp_in_c" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "30.5555555556\n", "22.2222222222\n", "25.0\n", "31.6666666667\n", "31.1111111111\n", "31.6666666667\n", "21.6666666667\n", "31.1111111111\n", "29.4444444444\n", "23.8888888889\n" ] } ], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "That looks good, but why did we use 9.0 instead of 9? The reason is that computers store integers and numbers with decimals as different types: integers and floating point numbers (or floats). Addition, subtraction and multiplication work on both as we'd expect, but division works differently. If we divide one integer by another, we get the quotient without the remainder:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print '10/3 is:', 10 / 3" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10/3 is: 3\n" ] } ], "prompt_number": 20 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If either part of the division is a float, on the other hand, the computer creates a floating-point answer:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print '10/3.0 is:', 10 / 3.0" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10/3.0 is: 3.33333333333\n" ] } ], "prompt_number": 21 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The computer does this for historical reasons: integer operations were much faster on early machines, and this behavior is actually useful in a lot of situations. However, it's still confusing, so Python 3 produces a floating-point answer when dividing integers if it needs to. We're still using Python 2.7 in this class, so if we want 5/9 to give us the right answer, we have to write it as 5.0/9, 5/9.0, or some other variation." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Conditionals" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The other standard thing we need to know how to do in Python is conditionals, or if/then/else statements. In Python the basic syntax is:\n", "\n", "~~~python\n", "if condition:\n", " do_something\n", "~~~\n", "\n", "So if we want to loop over the temperatures and print out only those temperatures that are greater than 80 degrees we would use:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "temp = data['temperature'][0]\n", "if temp > 80:\n", " print \"The temperature is greater than 80\"" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "The temperature is greater than 80\n" ] } ], "prompt_number": 22 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also use `==` for equality, `<=` for less than or equal to, `>=` for greater than or equal to, and `!=` for not equal to.\n", "\n", "Additional conditions can be handled using `elif` and `else`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "temp = data['temperature'][0]\n", "if temp < 87:\n", " print \"The temperature is < 87\"\n", "elif temp > 87:\n", " print \"The temperature is > 87\"\n", "else:\n", " print \" The temperature is equal to 87\"" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " The temperature is equal to 87\n" ] } ], "prompt_number": 23 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Challenge" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Import the data from `mosquito_data_A2.csv`, determine the mean temperate, and loop over the temperature values. For each value print out whether it is greater than the mean, less than the mean, or equal to the mean." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Plotting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The mathematician Richard Hamming once said, \"The purpose of computing is insight, not numbers,\" and the best way to develop insight is often to visualize data. The main plotting library in Python is `matplotlib`. To get started, let's tell the IPython Notebook that we want our plots displayed inline, rather than in a separate viewing window:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 24 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `%` at the start of the line signals that this is a command for the notebook, rather than a statement in Python. Next, we will import the `pyplot` module from `matplotlib`, but since `pyplot` is a fairly long name to type repeatedly let's give it an alias." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from matplotlib import pyplot as plt" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 25 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This import statement shows two new things. First, we can import part of a library by using the `from library import submodule` syntax. Second, we can use a different name to refer to the imported library by using `as newname`.\n", "\n", "Now, let's make a simple plot showing how the number of mosquitos varies over time. We'll use the site you've been doing exercises with since it has a longer time-series." ] }, { "cell_type": "code", "collapsed": false, "input": [ "data = pandas.read_csv('mosquito_data_A2.csv')\n", "plt.plot(data['year'], data['mosquitos'])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 26, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 26 }, { "cell_type": "markdown", "metadata": {}, "source": [ "More complicated plots can be created by adding a little additional information. Let's say we want to look at how the different weather variables vary over time." ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.figure(figsize=(10.0, 3.0))\n", "\n", "plt.subplot(1, 2, 1)\n", "plt.plot(data['year'], data['temperature'], 'ro-')\n", "plt.xlabel('Year')\n", "plt.ylabel('Temperature')\n", "\n", "plt.subplot(1, 2, 2)\n", "plt.plot(data['year'], data['rainfall'], 'bs-')\n", "plt.xlabel('Year')\n", "plt.ylabel('Rain Fall')\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nMcUNQPvbAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 27 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Challenge" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the data in `mosquito_data_A2.csv` plot the relationship between the number of mosquitos and temperature and the number of mosquitos and rainfall." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Key Points" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Import a library into a program using `import libraryname`.\n", "* Use the `pandas` library to work with data tables in Python.\n", "* Use `variable = value` to assign a value to a variable.\n", "* Use `print something` to display the value of `something`.\n", "* Use `dataframe['columnname']` to select a column of data.\n", "* Use `dataframe[start_row:stop_row]` to select rows from a data frame.\n", "* Indices start at 0, not 1.\n", "* Use `dataframe.mean()`, `dataframe.max()`, and `dataframe.min()` to calculate simple statistics.\n", "* Use `for x in list:` to loop over values\n", "* Use `if condition:` to make conditional decisions\n", "* Use the `pyplot` library from `matplotlib` for creating simple visualizations." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Next steps" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With the requisite Python background out of the way, now we're ready to dig in to analyzing our data, and along the way learn how to write better code, more efficiently, that is more likely to be correct." ] } ], "metadata": {} } ] }