Skip to content

Instantly share code, notes, and snippets.

@fonnesbeck
Last active February 1, 2024 05:44
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save fonnesbeck/f89ec8bc8271395c4466465802ba44a3 to your computer and use it in GitHub Desktop.
Save fonnesbeck/f89ec8bc8271395c4466465802ba44a3 to your computer and use it in GitHub Desktop.
python/Introduction to Python.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "# Introduction to Python\n\n![python](http://imgs.xkcd.com/comics/python.png)\n\n(via [xkcd](http://imgs.xkcd.com/comics/python.png))"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## What is Python?\n\nPython is a modern, open source, object-oriented programming language, created by a Dutch programmer, Guido van Rossum. Officially, it is an **interpreted** scripting language (meaning that it is not compiled until it is run) for the C programming language; in fact, Python itself is coded in C (though there are other non-C implementations). Frequently, it is compared to languages like Perl and Ruby. It offers the power and flexibility of lower level (*i.e.* compiled) languages, without the steep learning curve, and without most of the associated programming overhead. The language is very clean and readable, and it is available for almost every modern computing platform.\n\n## Why use Python for scientific programming?\n\nPython offers a number of advantages to scientists, both for experienced and novice programmers alike:\n\n***Powerful and easy to use*** \nPython is simultaneously powerful, flexible and easy to learn and use (in general, these qualities are traded off for a given programming language). Anything that can be coded in C, FORTRAN, or Java can be done in Python, almost always in fewer lines of code, and with fewer debugging headaches. Its standard library is extremely rich, including modules for string manipulation, regular expressions, file compression, mathematics, profiling and debugging (to name only a few). Unnecessary language constructs, such as `END` statements and brackets are absent, making the code terse, efficient, and easy to read. Finally, Python is object-oriented, which is an important programming paradigm particularly well-suited to scientific programming, which allows data structures to be abstracted in a natural way.\n\n***Interactive*** \nPython may be run interactively on the command line, in much the same way as Octave or S-Plus/R. Rather than compiling and running a particular program, commands may entered serially followed by the `Return` key. This is often useful for mathematical programming and debugging.\n\n***Extensible*** \nPython is often referred to as a “glue” language, meaning that it is a useful in a mixed-language environment. Frequently, programmers must interact with colleagues that operate in other programming languages, or use significant quantities of legacy code that would be problematic or expensive to re-code. Python was designed to interact with other programming languages, and in many cases C or FORTRAN code can be compiled directly into Python programs (using utilities such as `f2py` or `weave`). Additionally, since Python is an interpreted language, it can sometimes be slow relative to its compiled cousins. In many cases this performance deficit is due to a short loop of code that runs thousands or millions of times. Such bottlenecks may be removed by coding a function in FORTRAN, C or Cython, and compiling it into a Python module.\n\n***Third-party modules*** \nThere is a vast body of Python modules created outside the auspices of the Python Software Foundation. These include utilities for database connectivity, mathematics, statistics, and charting/plotting. Some notables include:\n\n* ***NumPy***: Numerical Python (NumPy) is a set of extensions that provides the ability to specify and manipulate array data structures. It provides array manipulation and computational capabilities similar to those found in Matlab or Octave. \n* ***SciPy***: An open source library of scientific tools for Python, SciPy supplements the NumPy module. SciPy gathering a variety of high level science and engineering modules together as a single package. SciPy includes modules for graphics and plotting, optimization, integration, special functions, signal and image processing, genetic algorithms, ODE solvers, and others.\n* ***Matplotlib***: Matplotlib is a python 2D plotting library which produces publication-quality figures in a variety of hardcopy formats and interactive environments across platforms. Its syntax is very similar to Matlab. \n* ***Pandas***: A module that provides high-performance, easy-to-use data structures and data analysis tools. In particular, the `DataFrame` class is useful for spreadsheet-like representation and mannipulation of data. Also includes high-level plotting functionality.\n* ***IPython***: An enhanced Python shell, designed to increase the efficiency and usability of coding, testing and debugging Python. It includes both a Qt-based console and an interactive HTML notebook interface, both of which feature multiline editing, interactive plotting and syntax highlighting.\n\n***Free and open*** \nPython is released on all platforms under an open license (Python Software Foundation License), meaning that the language and its source is freely distributable. Not only does this keep costs down for scientists and universities operating under a limited budget, but it also frees programmers from licensing concerns for any software they may develop. There is little reason to buy expensive licenses for software such as Matlab or Maple, when Python can provide the same functionality for free!\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Loading libraries\n\nWe use the **import** statement to load non-core modules into our Python environment. For example, we can load NumPy using:"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "import numpy",
"execution_count": 1,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Importing a library is like getting a piece of lab equipment out of a storage locker\nand setting it up on the bench. Libraries provide additional functionality to the basic Python package, much like a new piece of equipment adds functionality to a lab space.\nOnce you've loaded the library,\nwe can ask the library to read our data file for us:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "numpy.loadtxt(fname='../data/inflammation-01.csv', delimiter=',')",
"execution_count": 2,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "array([[ 0., 0., 1., ..., 3., 0., 0.],\n [ 0., 1., 2., ..., 1., 0., 1.],\n [ 0., 1., 1., ..., 2., 1., 1.],\n ..., \n [ 0., 1., 1., ..., 1., 1., 1.],\n [ 0., 0., 0., ..., 0., 2., 0.],\n [ 0., 0., 1., ..., 1., 1., 0.]])"
},
"metadata": {},
"execution_count": 2
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The expression `numpy.loadtxt()` is a **function call**\nthat asks Python to run the function `loadtxt` that belongs to the `numpy` library.\nThis **dotted notation** is used everywhere in Python\nto refer to the parts of things as `thing.component`.\n\n`numpy.loadtxt` has two **parameters**:\nthe name of the file we want to read,\nand the **delimiter** that separates values on a line.\nThese both need to be character strings (or **strings** for short),\nso we put them in quotes.\n\nWhen we are finished typing and press `Shift+Enter`,\nthe notebook runs our command.\nSince we haven't told it to do anything else with the function's output,\nthe notebook displays it.\nIn this case,\nthat output is the data we just loaded.\nBy default,\nonly a few rows and columns are shown\n(with `...` to omit elements when displaying big arrays).\nTo save space,\nPython displays numbers as `1.` instead of `1.0`\nwhen there's nothing interesting after the decimal point.\n\n## Variables\n\nOur call to `numpy.loadtxt` read our file,\nbut didn't save the data in memory.\nTo do that,\nwe need to **assign** the array to a **variable**.\nA variable is just a name for a value,\nsuch as `x`, `current_temperature`, or `subject_id`.\nPython's variables must begin with a letter and are **case sensitive**.\nWe can create a new variable by assigning a value to it using `=`.\nAs an illustration,\nlet's step back and instead of considering a table of data,\nconsider the simplest \"collection\" of data,\na single value.\nThe line below assigns the value `55` to a variable `weight_kg`:"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "weight_kg = 55",
"execution_count": 3,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Once a variable has a value, we can print it to the screen:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "weight_kg",
"execution_count": 4,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "55"
},
"metadata": {},
"execution_count": 4
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "and do arithmetic with it:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "print('weight in pounds:', 2.2 * weight_kg)",
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"text": "weight in pounds: 121.00000000000001\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We can also change a variable's value by assigning it a new one:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "weight_kg = 57.5\nprint('weight in kilograms is now:', weight_kg)",
"execution_count": 6,
"outputs": [
{
"output_type": "stream",
"text": "weight in kilograms is now: 57.5\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "As the example above shows,\nwe can print several things at once by separating them with commas.\n\nIf we imagine the variable as a sticky note with a name written on it,\nassignment is like putting the sticky note on a particular value:\n\n![Variables as Sticky Notes](http://d.pr/i/1aepR/5d4vZGwE+)\n\nThis means that assigning a value to one variable does *not* change the values of other variables.\nFor example,\nlet's store the subject's weight in pounds in a variable:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "weight_lb = 2.2 * weight_kg\nprint('weight in kilograms:', weight_kg, 'and in pounds:', weight_lb)",
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"text": "weight in kilograms: 57.5 and in pounds: 126.50000000000001\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "![Creating Another Variable](http://d.pr/i/qQv2/66X3U4qs+)\n\nand then change `weight_kg`:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "weight_kg = 100.0\nprint('weight in kilograms is now:', weight_kg, 'and weight in pounds is still:', weight_lb)",
"execution_count": 8,
"outputs": [
{
"output_type": "stream",
"text": "weight in kilograms is now: 100.0 and weight in pounds is still: 126.50000000000001\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "![Updating a Variable](http://d.pr/i/1hWyT/41TOzr7o+)\n\nSince `weight_lb` doesn't \"remember\" where its value came from,\nit isn't automatically updated when `weight_kg` changes.\nThis is different from the way spreadsheets work.\n\nJust as we can assign a single value to a variable, we can also assign an array of values\nto a variable using the same syntax. Let's re-run `numpy.loadtxt` and save its result:"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "data = numpy.loadtxt(fname='../data/inflammation-01.csv', delimiter=',')",
"execution_count": 9,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "This statement doesn't produce any output because assignment doesn't display anything.\nIf we want to check that our data has been loaded,\nwe can print the variable's value:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "data",
"execution_count": 10,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "array([[ 0., 0., 1., ..., 3., 0., 0.],\n [ 0., 1., 2., ..., 1., 0., 1.],\n [ 0., 1., 1., ..., 2., 1., 1.],\n ..., \n [ 0., 1., 1., ..., 1., 1., 1.],\n [ 0., 0., 0., ..., 0., 2., 0.],\n [ 0., 0., 1., ..., 1., 1., 0.]])"
},
"metadata": {},
"execution_count": 10
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Now that our data is in memory,\nwe can start doing things with it.\nFirst,\nlet's ask what **type** of thing `data` refers to:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "type(data)",
"execution_count": 11,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "numpy.ndarray"
},
"metadata": {},
"execution_count": 11
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The output tells us that `data` currently refers to an **n-dimensional array** created by the NumPy library. These data corresponds to arthritis patient's inflammation. The rows are the individual patients and the columns are there daily inflammation measurements.\n\nWe can see what its **shape** is like this:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "data.shape",
"execution_count": 12,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "(60, 40)"
},
"metadata": {},
"execution_count": 12
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "This tells us that `data` has 60 rows and 40 columns. When we created the\nvariable `data` to store our arthritis data, we didn't just create the array, we also\ncreated information about the array, called \n**attributes**. This extra information describes `data` in\nthe same way an adjective describes a noun.\n`data.shape` is an attribute of `data` which described the dimensions of `data`.\nWe use the same dotted notation for the attributes of variables\nthat we use for the functions in libraries\nbecause they have the same part-and-whole relationship.\n\nIf we want to get a single number from the array,\nwe must provide an **index** in square brackets,\njust as we do in math:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "data[0, 0]",
"execution_count": 13,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "0.0"
},
"metadata": {},
"execution_count": 13
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "data[30, 20]",
"execution_count": 14,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "13.0"
},
"metadata": {},
"execution_count": 14
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The expression `data[30, 20]` may not surprise you,\nbut `data[0, 0]` might.\nProgramming languages like Fortran and MATLAB start counting at 1,\nbecause that's what human beings have done for thousands of years.\nLanguages in the C family (including C++, Java, Perl, and Python) count from 0\nbecause that's simpler for computers to do.\nAs a result,\nif we have an M×N array in Python,\nits indices go from 0 to M-1 on the first axis\nand 0 to N-1 on the second.\nIt takes a bit of getting used to,\nbut one way to remember the rule is that\nthe index is ***how many steps we have to take from the start to get the item we want***.\n\n\nAn index like `[30, 20]` selects a single element of an array,\nbut we can select whole sections as well.\nFor example,\nwe can select the first ten days (columns) of values\nfor the first four patients (rows) like this:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "data[0:4, 0:10]",
"execution_count": 15,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "array([[ 0., 0., 1., 3., 1., 2., 4., 7., 8., 3.],\n [ 0., 1., 2., 1., 2., 1., 3., 2., 2., 6.],\n [ 0., 1., 1., 3., 3., 2., 6., 2., 5., 9.],\n [ 0., 0., 2., 0., 4., 2., 2., 1., 6., 7.]])"
},
"metadata": {},
"execution_count": 15
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The **slice** `0:4` means,\n***\"Start at index 0 and go up to, but not including, index 4.\"***\nAgain,\nthe up-to-but-not-including takes a bit of getting used to,\nbut the rule is that the difference between the upper and lower bounds is the number of values in the slice.\n\nWe don't have to start slices at 0:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "print(data[5:10, 0:10])",
"execution_count": 16,
"outputs": [
{
"output_type": "stream",
"text": "[[ 0. 0. 1. 2. 2. 4. 2. 1. 6. 4.]\n [ 0. 0. 2. 2. 4. 2. 2. 5. 5. 8.]\n [ 0. 0. 1. 2. 3. 1. 2. 3. 5. 3.]\n [ 0. 0. 0. 3. 1. 5. 6. 5. 5. 8.]\n [ 0. 1. 1. 2. 1. 3. 5. 3. 5. 8.]]\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We also don't have to include the upper and lower bound on the slice.\nIf we don't include the lower bound,\nPython uses 0 by default;\nif we don't include the upper,\nthe slice runs to the end of the axis,\nand if we don't include either\n(i.e., if we just use ':' on its own),\nthe slice includes everything:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "small = data[:3, 36:]\nprint('small is:')\nsmall",
"execution_count": 17,
"outputs": [
{
"output_type": "stream",
"text": "small is:\n",
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/plain": "array([[ 2., 3., 0., 0.],\n [ 1., 1., 0., 1.],\n [ 2., 2., 1., 1.]])"
},
"metadata": {},
"execution_count": 17
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Arrays also know how to perform common mathematical operations on their values.\nThe simplest operations with data are arithmetic:\nadd, subtract, multiply, and divide.\n When you do such operations on arrays,\nthe operation is done **element-wise** on the array.\nThus:"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "doubledata = data * 2.0",
"execution_count": 18,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "will create a new array `doubledata`\nwhose elements have the value of two times the value of the corresponding elements in `data`:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "print('original:')\ndata[:3, 36:]",
"execution_count": 19,
"outputs": [
{
"output_type": "stream",
"text": "original:\n",
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/plain": "array([[ 2., 3., 0., 0.],\n [ 1., 1., 0., 1.],\n [ 2., 2., 1., 1.]])"
},
"metadata": {},
"execution_count": 19
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "print('doubledata:')\ndoubledata[:3, 36:]",
"execution_count": 20,
"outputs": [
{
"output_type": "stream",
"text": "doubledata:\n",
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/plain": "array([[ 4., 6., 0., 0.],\n [ 2., 2., 0., 2.],\n [ 4., 4., 2., 2.]])"
},
"metadata": {},
"execution_count": 20
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "If,\ninstead of taking an array and doing arithmetic with a single value (as above)\nyou did the arithmetic operation with another array of the same shape,\nthe operation will be done on corresponding elements of the two arrays.\nThus:"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "tripledata = doubledata + data",
"execution_count": 21,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "will give you an array where `tripledata[0,0]` will equal `doubledata[0,0]` plus `data[0,0]`,\nand so on for all other elements of the arrays."
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "print('tripledata:')\ntripledata[:3, 36:]",
"execution_count": 22,
"outputs": [
{
"output_type": "stream",
"text": "tripledata:\n",
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/plain": "array([[ 6., 9., 0., 0.],\n [ 3., 3., 0., 3.],\n [ 6., 6., 3., 3.]])"
},
"metadata": {},
"execution_count": 22
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Often, we want to do more than add, subtract, multiply, and divide values of data.\nArrays also know how to do more complex operations on their values.\nIf we want to find the average inflammation for all patients on all days,\nfor example,\nwe can just ask the array for its mean value"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "data.mean()",
"execution_count": 23,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "6.1487499999999997"
},
"metadata": {},
"execution_count": 23
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "`mean` is a **method** of the array.\nA method is simply a function that is an attribute of the array,\nin the same way that the member `shape` does.\nIf variables are nouns, methods are verbs:\nthey are what the thing in question knows how to do.\nWe need empty parentheses for `data.mean()`,\neven when we're not passing in any parameters,\nto tell Python to go and do something for us. `data.shape` doesn't\nneed `()` because it is just a description but `data.mean()` requires the `()`\nbecause it is an action.\n\nNumPy arrays have lots of useful methods:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "print('maximum inflammation:', data.max())\nprint('minimum inflammation:', data.min())\nprint('standard deviation:', data.std())",
"execution_count": 24,
"outputs": [
{
"output_type": "stream",
"text": "maximum inflammation: 20.0\nminimum inflammation: 0.0\nstandard deviation: 4.61383319712\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "When analyzing data,\nthough,\nwe often want to look at partial statistics,\nsuch as the maximum value per patient\nor the average value per day.\nOne way to do this is to create a new temporary array of the data we want,\nthen ask it to do the calculation:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "patient_0 = data[0, :] # 0 on the first axis, everything on the second\n\nprint('maximum inflammation for patient 0:', patient_0.max())",
"execution_count": 25,
"outputs": [
{
"output_type": "stream",
"text": "maximum inflammation for patient 0: 18.0\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We don't actually need to store the row in a variable of its own.\nInstead, we can combine the selection and the method call:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "print('maximum inflammation for patient 2:', data[2, :].max())",
"execution_count": 26,
"outputs": [
{
"output_type": "stream",
"text": "maximum inflammation for patient 2: 19.0\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "What if we need the maximum inflammation for *all* patients (as in the\nnext diagram on the left), or the average for each day (as in the\ndiagram on the right)? As the diagram below shows, we want to perform the\noperation across an axis:\n\n![Operations Across Axes](http://d.pr/i/1h4jI/1M2mkMgQ+)\n\nTo support this,\nmost array methods allow us to specify the axis we want to be **consumed** by the operation.\nIf we ask for the average across axis 0 (rows in our 2D example),\nwe get:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "data.mean(axis=0)",
"execution_count": 27,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "array([ 0. , 0.45 , 1.11666667, 1.75 ,\n 2.43333333, 3.15 , 3.8 , 3.88333333,\n 5.23333333, 5.51666667, 5.95 , 5.9 ,\n 8.35 , 7.73333333, 8.36666667, 9.5 ,\n 9.58333333, 10.63333333, 11.56666667, 12.35 ,\n 13.25 , 11.96666667, 11.03333333, 10.16666667,\n 10. , 8.66666667, 9.15 , 7.25 ,\n 7.33333333, 6.58333333, 6.06666667, 5.95 ,\n 5.11666667, 3.6 , 3.3 , 3.56666667,\n 2.48333333, 1.5 , 1.13333333, 0.56666667])"
},
"metadata": {},
"execution_count": 27
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "As a quick check,\nwe can ask this array what its shape is:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "data.mean(axis=0).shape",
"execution_count": 28,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "(40,)"
},
"metadata": {},
"execution_count": 28
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The expression `(40,)` tells us we have an N×1 vector,\nso this is the average inflammation per day for all patients.\nIf we average across axis 1 (columns in our 2D example), we get:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "data.mean(axis=1)",
"execution_count": 29,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "array([ 5.45 , 5.425, 6.1 , 5.9 , 5.55 , 6.225, 5.975, 6.65 ,\n 6.625, 6.525, 6.775, 5.8 , 6.225, 5.75 , 5.225, 6.3 ,\n 6.55 , 5.7 , 5.85 , 6.55 , 5.775, 5.825, 6.175, 6.1 ,\n 5.8 , 6.425, 6.05 , 6.025, 6.175, 6.55 , 6.175, 6.35 ,\n 6.725, 6.125, 7.075, 5.725, 5.925, 6.15 , 6.075, 5.75 ,\n 5.975, 5.725, 6.3 , 5.9 , 6.75 , 5.925, 7.225, 6.15 ,\n 5.95 , 6.275, 5.7 , 6.1 , 6.825, 5.975, 6.725, 5.7 ,\n 6.25 , 6.4 , 7.05 , 5.9 ])"
},
"metadata": {},
"execution_count": 29
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "which is the average inflammation per patient across all days.\n\n## Plotting Data\n\nThe mathematician Richard Hamming once said,\n\"The purpose of computing is insight, not numbers,\"\nand the best way to develop insight is often to visualize data.\nVisualization deserves an entire lecture (or course) of its own,\nbut we can explore a few features of Python's `matplotlib` library here.\nWhile there is no \"official\" plotting library,\nthis package is the *de facto* standard.\nFirst,\nwe will import the `pyplot` module from `matplotlib`\nand use two of its functions to create and display a heat map of our data:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "%matplotlib inline\n\nimport matplotlib.pyplot as plt\nplt.imshow(data)",
"execution_count": 30,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "<matplotlib.image.AxesImage at 0x1062297b8>"
},
"metadata": {},
"execution_count": 30
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": "<matplotlib.figure.Figure at 0x10519b4a8>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Blue regions in this heat map are low values, while red shows high values.\nAs we can see,\ninflammation rises and falls over a 40-day period.\n\n> ## Some IPython magic\n>\n> If you're using an IPython / Jupyter notebook,\n> you'll need to execute the following command\n> in order for your matplotlib images to appear\n> in the notebook:\n>\n> ```\n> % matplotlib inline\n> ```\n> \n> The `%` indicates an IPython **magic function** -\n> a function that is only valid within the notebook environment.\n> Note that you only have to execute this function once per notebook.\n\nLet's take a look at the average inflammation over time:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "ave_inflammation = data.mean(axis=0)\nplt.plot(ave_inflammation)",
"execution_count": 31,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "[<matplotlib.lines.Line2D at 0x106568160>]"
},
"metadata": {},
"execution_count": 31
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nAAAAAElFTkSuQmCC\n",
"text/plain": "<matplotlib.figure.Figure at 0x10633c550>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Here,\nwe have put the average per day across all patients in the variable `ave_inflammation`,\nthen asked `matplotlib.pyplot` to create and display a line graph of those values.\nThe result is roughly a linear rise and fall,\nwhich is suspicious:\nbased on other studies,\nwe expect a sharper rise and slower fall.\nLet's have a look at two other statistics:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "plt.plot(data.max(axis=0))",
"execution_count": 32,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "[<matplotlib.lines.Line2D at 0x106703c50>]"
},
"metadata": {},
"execution_count": 32
},
{
"output_type": "display_data",
"data": {
"image/png": "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\nHAWSJKnv/wMWe0ByD2s12AAAAABJRU5ErkJggg==\n",
"text/plain": "<matplotlib.figure.Figure at 0x106580160>"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "plt.plot(data.min(axis=0))",
"execution_count": 33,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "[<matplotlib.lines.Line2D at 0x10681d358>]"
},
"metadata": {},
"execution_count": 33
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n+AAAVMD/B4uqM/pqiaVwAAAAAElFTkSuQmCC\n",
"text/plain": "<matplotlib.figure.Figure at 0x1065bb160>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The maximum value rises and falls perfectly smoothly, while the minimum seems to be a step function. Neither result seems particularly likely, so either there's a mistake in our calculations or something is wrong with our data.\n\nYou can group similar plots in a single figure using subplots. This script below uses a number of new commands. The function `subplots(1, 3)` creates a space into which we will place all of our plots, specifying a layout of one row and three columns. The argument `figsize` tells Python how big to make this space. This function returns two things:\n\n1. A `Figure` object\n2. An array of `AxesSubplot` objects\n\nOnce the subplots are created, the axes are can be titled using the `set_xlabel()` method (or `set_ylabel()`). Here are our three plots side by side:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "fig, axes = plt.subplots(1, 3, figsize=(10,3))\n\naxes[0].set_ylabel('average')\naxes[0].plot(data.mean(axis=0))\n\naxes[1].set_ylabel('max')\naxes[1].plot(data.max(axis=0))\n\naxes[2].set_ylabel('min')\naxes[2].plot(data.min(axis=0))\n\nfig.tight_layout();",
"execution_count": 34,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": "<matplotlib.figure.Figure at 0x10682c160>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The call to `loadtxt` reads our data,\nand the rest of the program tells the plotting library\nhow large we want the figure to be,\nthat we're creating three sub-plots,\nwhat to draw for each one,\nand that we want a tight layout.\n(Perversely,\nif we leave out that call to `fig.tight_layout()`,\nthe graphs will actually be squeezed together more closely.)\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Exercise: Sorting out references\n\nWhat does the following program print out?\n\n```python\nfirst, second = 'Grace', 'Hopper'\nthird, fourth = second, first\nprint(third, fourth)\n```"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Exercise: Slicing strings\n\nA section of an array is called a **slice**.\nWe can take slices of character strings as well:\n\n"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "element = 'oxygen'\nprint('first three characters:', element[:3])\nprint('last three characters:', element[3:6])",
"execution_count": 35,
"outputs": [
{
"output_type": "stream",
"text": "first three characters: oxy\nlast three characters: gen\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "What is the value of `element[:4]`?\n\nWhat about `element[4:]`?\n\nOr `element[:]`?\n\nWhat is `element[-1]`?\n\nWhat is `element[-2]`?\n\nGiven those answers,\nexplain what `element[1:-1]` does."
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Repeating Actions with Loops\n\nAbove, we wrote some code that plots some values of interest from our first inflammation dataset,\nand reveals some suspicious features in it.\n\nWe have a dozen data sets right now, though, and more on the way.\nWe want to create plots for all of our data sets with a single statement.\nTo do that, we'll have to teach the computer how to repeat things.\n\nAn example task that we might want to repeat is printing each character in a\nword on a line of its own. One way to do this would be to use a series of `print` statements:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "word = 'lead'\nprint(word[0])\nprint(word[1])\nprint(word[2])\nprint(word[3])\n",
"execution_count": 36,
"outputs": [
{
"output_type": "stream",
"text": "l\ne\na\nd\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "This is a bad approach for two reasons:\n\n1. It doesn't scale:\n if we want to print the characters in a string that's hundreds of letters long,\n we'd be better off just typing them in.\n\n1. It's fragile:\n if we give it a longer string,\n it only prints part of the data,\n and if we give it a shorter one,\n it produces an error because we're asking for characters that don't exist."
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "word = 'tin'\nprint(word[0])\nprint(word[1])\nprint(word[2])\nprint(word[3])\n",
"execution_count": 37,
"outputs": [
{
"output_type": "stream",
"text": "t\ni\nn\n",
"name": "stdout"
},
{
"output_type": "error",
"ename": "IndexError",
"evalue": "string index out of range",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-37-a51226538da7>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mword\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mword\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mword\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mIndexError\u001b[0m: string index out of range"
]
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Here's a better approach:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "word = 'lead'\nfor char in word:\n print(char)\n",
"execution_count": 38,
"outputs": [
{
"output_type": "stream",
"text": "l\ne\na\nd\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "This is shorter---certainly shorter than something that prints every character in a hundred-letter string---and\nmore robust as well:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "word = 'oxygen'\nfor char in word:\n print(char)",
"execution_count": 39,
"outputs": [
{
"output_type": "stream",
"text": "o\nx\ny\ng\ne\nn\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The improved version of `print_characters` uses a `for` **loop**\nto repeat an operation---in this case, printing---once for each thing in a collection.\nThe general form of a loop is:\n\n```\nfor variable in collection:\n do things with variable\n```"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We can call the **loop variable** anything we like,\nbut there must be a colon at the end of the line starting the loop,\nand we must indent anything we want to run inside the loop. Unlike many other languages, there is no\ncommand to end a loop (e.g. end for); what is indented after the for statement belongs to the loop.\n\nHere's another loop that repeatedly updates a variable:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "length = 0\nfor vowel in 'aeiou':\n length = length + 1\nprint('There are', length, 'vowels')",
"execution_count": 40,
"outputs": [
{
"output_type": "stream",
"text": "There are 5 vowels\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "It's worth tracing the execution of this little program step by step.\nSince there are five characters in `'aeiou'`,\nthe statement on line 3 will be executed five times.\nThe first time around,\n`length` is zero (the value assigned to it on line 1)\nand `vowel` is `'a'`.\nThe statement adds 1 to the old value of `length`,\nproducing 1,\nand updates `length` to refer to that new value.\nThe next time around,\n`vowel` is `'e'` and `length` is 1,\nso `length` is updated to be 2.\nAfter three more updates,\n`length` is 5;\nsince there is nothing left in `'aeiou'` for Python to process,\nthe loop finishes\nand the `print` statement on line 4 tells us our final answer.\n\nNote that a loop variable is just a variable that's being used to record progress in a loop.\nIt still exists after the loop is over,\nand we can re-use variables previously defined as loop variables as well:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "letter = 'z'\nfor letter in 'abc':\n print(letter)\nprint('after the loop, letter is', letter)",
"execution_count": 41,
"outputs": [
{
"output_type": "stream",
"text": "a\nb\nc\nafter the loop, letter is c\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Note also that finding the length of a string is such a common operation\nthat Python actually has a built-in function to do it called `len`:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "len('aeiou')",
"execution_count": 42,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "5"
},
"metadata": {},
"execution_count": 42
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "`len` is much faster than any function we could write ourselves,\nand much easier to read than a two-line loop;\nit will also give us the length of many other things that we haven't met yet,\nso we should always use it when we can.\n\n\n\n### Exercise: Computing powers with loops\n\nExponentiation is built into Python:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "5**3",
"execution_count": 43,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "125"
},
"metadata": {},
"execution_count": 43
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Write a loop that calculates the same result as `5 ** 3` using\nmultiplication (and without exponentiation)."
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Exercise: Reverse a string\n\nWrite a loop that takes a string,\nand produces a new string with the characters in reverse order,\nso `'Newton'` becomes `'notweN'`."
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Storing Multiple Values in Lists\n\nJust as a `for` loop is a way to do operations many times,\na list is a way to store many values.\nUnlike NumPy arrays,\nlists are built into the language (so we don't have to load a library\nto use them).\nWe create a list by putting values inside square brackets:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "odds = [1, 3, 5, 7]\nprint('odds are:', odds)",
"execution_count": 44,
"outputs": [
{
"output_type": "stream",
"text": "odds are: [1, 3, 5, 7]\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We select individual elements from lists by indexing them:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "print('first and last:', odds[0], odds[-1])",
"execution_count": 45,
"outputs": [
{
"output_type": "stream",
"text": "first and last: 1 7\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "and if we loop over a list,\nthe loop variable is assigned elements one at a time:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "for number in odds:\n print(number)",
"execution_count": 46,
"outputs": [
{
"output_type": "stream",
"text": "1\n3\n5\n7\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "There is one important difference between lists and strings:\nwe can change the values in a list,\nbut we cannot change the characters in a string.\nFor example:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "names = ['Newton', 'Darwing', 'Turing'] # typo in Darwin's name\nprint('names is originally:', names)\nnames[1] = 'Darwin' # correct the name\nprint('final value of names:', names)",
"execution_count": 47,
"outputs": [
{
"output_type": "stream",
"text": "names is originally: ['Newton', 'Darwing', 'Turing']\nfinal value of names: ['Newton', 'Darwin', 'Turing']\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "works, but:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "name = 'Bell'\nname[0] = 'b'",
"execution_count": 48,
"outputs": [
{
"output_type": "error",
"ename": "TypeError",
"evalue": "'str' object does not support item assignment",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-48-220df48aeb2e>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mname\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'Bell'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mname\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'b'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m: 'str' object does not support item assignment"
]
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "does not.\n\n> ## Ch-Ch-Ch-Changes\n> \n> Data which can be modified in place is called **mutable**,\n> while data which cannot be modified is called **immutable**.\n> Strings and numbers are immutable. This does not mean that variables with string or number values are constants,\n> but when we want to change the value of a string or number variable, we can only replace the old value \n> with a completely new value.\n>\n> Lists and arrays, on the other hand, are mutable: we can modify them after they have been created. We can \n> change individual elements, append new elements, or reorder the whole list. For some operations, like \n> sorting, we can choose whether to use a function that modifies the data in place or a function that returns a \n> modified copy and leaves the original unchanged.\n>\n> Be careful when modifying data in place. If two variables refer to the same list, and you modify the list \n> value, it will change for both variables! If you want variables with mutable values to be independent, you \n> must make a copy of the value when you assign it.\n>\n> Because of pitfalls like this, code which modifies data in place can be more difficult to understand. However, \n> it is often far more efficient to modify a large data structure in place than to create a modified copy for \n> every small change. You should consider both of these aspects when writing your code.\n\nThere are many ways to change the contents of lists besides assigning new values to\nindividual elements:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "odds.append(11)\nprint('odds after adding a value:', odds)",
"execution_count": 49,
"outputs": [
{
"output_type": "stream",
"text": "odds after adding a value: [1, 3, 5, 7, 11]\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "del odds[0]\nprint('odds after removing the first element:', odds)",
"execution_count": 50,
"outputs": [
{
"output_type": "stream",
"text": "odds after removing the first element: [3, 5, 7, 11]\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "odds.reverse()\nprint('odds after reversing:', odds)",
"execution_count": 51,
"outputs": [
{
"output_type": "stream",
"text": "odds after reversing: [11, 7, 5, 3]\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "While modifying in place, it is useful to remember that python treats lists in a slightly counterintuitive way.\n\nIf we make a list and (attempt to) copy it then modify in place, we can cause all sorts of trouble:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "odds = [1, 3, 5, 7]\nprimes = odds\nprimes += [2]\nprint('primes:', primes)\nprint('odds:', odds)",
"execution_count": 52,
"outputs": [
{
"output_type": "stream",
"text": "primes: [1, 3, 5, 7, 2]\nodds: [1, 3, 5, 7, 2]\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "This is because python stores a list in memory, and then can use multiple names to refer to the same list.\nIf all we want to do is copy a (simple) list, we can index the values into a new list, so we do not modify a list we did not mean to:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "odds = [1, 3, 5, 7]\n# remember what this does!\nprimes = odds[:]\nprimes += [2]\nprint('primes:', primes)\nprint('odds:', odds)",
"execution_count": 53,
"outputs": [
{
"output_type": "stream",
"text": "primes: [1, 3, 5, 7, 2]\nodds: [1, 3, 5, 7]\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Exercise: Turn a string into a list\n\nUse a for-loop to convert the string \"hello\" into a list of letters:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "[\"h\", \"e\", \"l\", \"l\", \"o\"]",
"execution_count": 54,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "['h', 'e', 'l', 'l', 'o']"
},
"metadata": {},
"execution_count": 54
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Hint: You can create an empty list like this:"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "my_list = []",
"execution_count": 55,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Tuples\n\nIf we wish to create an immutable, ordered sequence of elements, we can use a **tuple**. These elements may be of arbitrary and mixed types. The tuple is specified by a comma-separated sequence of items, enclosed by parentheses:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "(34,90,56) # Tuple with three elements",
"execution_count": 56,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "(34, 90, 56)"
},
"metadata": {},
"execution_count": 56
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "(15,) # Tuple with one element",
"execution_count": 57,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "(15,)"
},
"metadata": {},
"execution_count": 57
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "(12, 'foobar') # Mixed tuple",
"execution_count": 58,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "(12, 'foobar')"
},
"metadata": {},
"execution_count": 58
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "As with lists, individual elements in a tuple can be accessed by indexing."
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "foo = (5, 7, 2, 8, 2, -1, 0, 4)\nfoo[4]",
"execution_count": 59,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "2"
},
"metadata": {},
"execution_count": 59
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The `tuple` function can be used to cast any sequence into a tuple:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "tuple('foobar')",
"execution_count": 60,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "('f', 'o', 'o', 'b', 'a', 'r')"
},
"metadata": {},
"execution_count": 60
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Dictionaries\n\nOne of the more flexible built-in data structures is the dictionary. A dictionary maps a collection of values to a set of associated keys. These mappings are mutable, and unlike lists or tuples, are **unordered**. Hence, rather than using the sequence index to return elements of the collection, the corresponding key must be used. Dictionaries are specified by a comma-separated sequence of keys and values, which are separated in turn by colons. The dictionary is enclosed by curly braces. \n\nFor example:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "my_dict = {'a':16, \n 'b':(4,5), \n 'foo':'''(noun) a term used as a universal substitute \n for something real, especially when discussing technological ideas and \n problems'''}\n\nmy_dict",
"execution_count": 61,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "{'a': 16,\n 'b': (4, 5),\n 'foo': '(noun) a term used as a universal substitute \\n for something real, especially when discussing technological ideas and \\n problems'}"
},
"metadata": {},
"execution_count": 61
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "my_dict['b']",
"execution_count": 62,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "(4, 5)"
},
"metadata": {},
"execution_count": 62
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Notice that `a` indexes an integer, `b` a tuple, and `foo` a string. Hence, a dictionary is a sort of **associative array**. Some languages refer to such a structure as a **hash** or **key-value store**.\n\t\nAs with lists, being mutable, dictionaries have a variety of methods and functions that take dictionary arguments. For example, some dictionary functions include:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "len(my_dict)",
"execution_count": 63,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "3"
},
"metadata": {},
"execution_count": 63
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We can also check an object for membership in a dictionary using the `in` expression:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "'a' in my_dict",
"execution_count": 64,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "True"
},
"metadata": {},
"execution_count": 64
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Some useful dictionary methods are:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "# Returns key/value pairs as list\nmy_dict.items() ",
"execution_count": 65,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "dict_items([('b', (4, 5)), ('foo', '(noun) a term used as a universal substitute \\n for something real, especially when discussing technological ideas and \\n problems'), ('a', 16)])"
},
"metadata": {},
"execution_count": 65
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "# Returns list of keys\nmy_dict.keys() ",
"execution_count": 66,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "dict_keys(['b', 'foo', 'a'])"
},
"metadata": {},
"execution_count": 66
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "# Returns list of values\nmy_dict.values() ",
"execution_count": 67,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "dict_values([(4, 5), '(noun) a term used as a universal substitute \\n for something real, especially when discussing technological ideas and \\n problems', 16])"
},
"metadata": {},
"execution_count": 67
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "When we try to index a value that does not exist, it raises a `KeyError`."
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "my_dict['c']",
"execution_count": 68,
"outputs": [
{
"output_type": "error",
"ename": "KeyError",
"evalue": "'c'",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-68-0783a8759759>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mmy_dict\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'c'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mKeyError\u001b[0m: 'c'"
]
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "If we would rather not get the error, we can use the `get` method, which returns `None` if the value is not present."
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "my_dict.get('c')",
"execution_count": 69,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Custom return values can be specified with a second argument."
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "my_dict.get('c', -1)",
"execution_count": 70,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "-1"
},
"metadata": {},
"execution_count": 70
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "It is easy to remove items from a dictionary."
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "my_dict.popitem()",
"execution_count": 71,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "('b', (4, 5))"
},
"metadata": {},
"execution_count": 71
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "my_dict",
"execution_count": 72,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "{'a': 16,\n 'foo': '(noun) a term used as a universal substitute \\n for something real, especially when discussing technological ideas and \\n problems'}"
},
"metadata": {},
"execution_count": 72
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "my_dict.clear()",
"execution_count": 73,
"outputs": []
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "my_dict",
"execution_count": 74,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "{}"
},
"metadata": {},
"execution_count": 74
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Analyzing Data from Multiple Files\n\nWe now have almost everything we need to process all our data files.\nThe only thing that's missing is a library with a rather unpleasant name:"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "import glob",
"execution_count": 75,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The `glob` library contains a single function, also called `glob`,\nthat finds files whose names match a pattern.\nWe provide those patterns as strings:\nthe character `*` matches zero or more characters,\nwhile `?` matches any one character.\nWe can use this to get the names of all the HTML files in the current directory:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "from glob import glob\n\nglob('*.html')",
"execution_count": 76,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "[]"
},
"metadata": {},
"execution_count": 76
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "As these examples show,\n`glob.glob`'s result is a list of strings,\nwhich means we can loop over it\nto do something with each filename in turn.\nIn our case,\nthe \"something\" we want to do is generate a set of plots for each file in our inflammation dataset.\nLet's test it by analyzing the first three files in the list:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "filenames = glob('data/inflammation*.csv')\nfilenames = filenames[0:3]\n\nfor f in filenames:\n print(f)\n\n data = numpy.loadtxt(fname=f, delimiter=',')\n\n fig = plt.figure(figsize=(10.0, 3.0))\n\n axes1 = fig.add_subplot(1, 3, 1)\n axes2 = fig.add_subplot(1, 3, 2)\n axes3 = fig.add_subplot(1, 3, 3)\n\n axes1.set_ylabel('average')\n axes1.plot(data.mean(axis=0))\n\n axes2.set_ylabel('max')\n axes2.plot(data.max(axis=0))\n\n axes3.set_ylabel('min')\n axes3.plot(data.min(axis=0))\n\n fig.tight_layout()",
"execution_count": 77,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "\nSure enough,\nthe maxima of the first two data sets show exactly the same ramp as the first,\nand their minima show the same staircase structure;\na different situation has been revealed in the third dataset,\nwhere the maxima are a bit less regular, but the minima are consistently zero.\n\n\n# Conditionals\n\nWe can ask Python to take different actions, depending on a condition, with an if statement:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "num = 37\nif num > 100:\n print('greater')\nelse:\n print('not greater')\nprint('done')",
"execution_count": 78,
"outputs": [
{
"output_type": "stream",
"text": "not greater\ndone\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The second line of this code uses the keyword `if` to tell Python that we want to make a choice.\nIf the test that follows the `if` statement is true,\nthe body of the `if`\n(i.e., the lines indented underneath it) are executed.\nIf the test is false,\nthe body of the `else` is executed instead.\nOnly one or the other is ever executed:\n\n![Executing a Conditional](images/python-flowchart-conditional.svg)\n\nConditional statements don't have to include an `else`.\nIf there isn't one,\nPython simply does nothing if the test is false:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "num = 53\nprint('before conditional...')\nif num > 100:\n print('53 is greater than 100')\nprint('...after conditional')",
"execution_count": 79,
"outputs": [
{
"output_type": "stream",
"text": "before conditional...\n...after conditional\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We can also chain several tests together using `elif`,\nwhich is short for \"else if\".\nThe following Python code uses `elif` to print the sign of a number."
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "num = -3\n\nif num > 0:\n print(num, \"is positive\")\nelif num == 0:\n print(num, \"is zero\")\nelse:\n print(num, \"is negative\")",
"execution_count": 80,
"outputs": [
{
"output_type": "stream",
"text": "-3 is negative\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "One important thing to notice in the code above is that we use a double equals sign `==` to test for equality\nrather than a single equals sign\nbecause the latter is used to mean **assignment**.\n\nWe can also combine tests using `and` and `or`.\n`and` is only true if both parts are true:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "if (1 > 0) and (-1 > 0):\n print('both parts are true')\nelse:\n print('at least one part is not true')",
"execution_count": 81,
"outputs": [
{
"output_type": "stream",
"text": "at least one part is not true\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "while `or` is true if at least one part is true:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "if (1 < 0) or (-1 < 0):\n print('at least one test is true')",
"execution_count": 82,
"outputs": [
{
"output_type": "stream",
"text": "at least one test is true\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Checking our Data\n\nNow that we've seen how conditionals work,\nwe can use them to check for the suspicious features we saw in our inflammation data.\nIn the first couple of plots, the maximum inflammation per day\nseemed to rise like a straight line, one unit per day.\nWe can check for this inside the `for` loop we wrote with the following conditional:\n\n```python\nif data.max(axis=0)[0] == 0 and data.max(axis=0)[20] == 20:\n print('Suspicious looking maxima!')\n```"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We also saw a different problem in the third dataset;\nthe minima per day were all zero (looks like a healthy person snuck into our study).\nWe can also check for this with an `elif` condition:\n\n```python\nelif data.min(axis=0).sum() == 0:\n print('Minima add up to zero!')\n```"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "And if neither of these conditions are true, we can use `else` to give the all-clear:\n\n```python\nelse:\n print('Seems OK!')\n```"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Let's test that out:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "data = numpy.loadtxt(fname='../data/inflammation-01.csv', delimiter=',')\n\nif data.max(axis=0)[0] == 0 and data.max(axis=0)[20] == 20:\n print('Suspicious looking maxima!')\nelif data.min(axis=0).sum() == 0:\n print('Minima add up to zero!')\nelse:\n print('Seems OK!')",
"execution_count": 83,
"outputs": [
{
"output_type": "stream",
"text": "Suspicious looking maxima!\n",
"name": "stdout"
}
]
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "data = numpy.loadtxt(fname='../data/inflammation-03.csv', delimiter=',')\n\nif data.max(axis=0)[0] == 0 and data.max(axis=0)[20] == 20:\n print('Suspicious looking maxima!')\nelif data.min(axis=0).sum() == 0:\n print('Minima add up to zero!')\nelse:\n print('Seems OK!')",
"execution_count": 84,
"outputs": [
{
"output_type": "stream",
"text": "Minima add up to zero!\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "In this way,\nwe have asked Python to do something different depending on the condition of our data.\nHere we printed messages in all cases,\nbut we could also imagine not using the `else` catch-all\nso that messages are only printed when something is wrong,\nfreeing us from having to manually examine every plot for features we've seen before."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## What is truth?\n\n`True` and `False` are special words in Python called `booleans` which represent true\nand false statements. However, they aren't the only values in Python that are true and false.\nIn fact, *any* value can be used in an `if` or `elif`.\nAfter reading and running the code below,\nexplain what the rule is for which values are considered true and which are considered false."
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "if '':\n print('empty string is true')\nif 'word':\n print('word is true')\nif []:\n print('empty list is true')\nif [1, 2, 3]:\n print('non-empty list is true')\nif 0:\n print('zero is true')\nif 1:\n print('one is true')",
"execution_count": 85,
"outputs": [
{
"output_type": "stream",
"text": "word is true\nnon-empty list is true\none is true\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## In-place operators\n\nPython (and most other languages in the C family) provides **in-place operators**\nthat work like this:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "x = 1 # original value\nx += 1 # add one to x, assigning result back to x\nx *= 3 # multiply x by 3\n\nx",
"execution_count": 86,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "6"
},
"metadata": {},
"execution_count": 86
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Writing Functions\n\nAt this point,\nwe've written code to draw some interesting features in our inflammation data,\nloop over all our data files to quickly draw these plots for each of them,\nand have Python make decisions based on what it sees in our data.\nBut, our code is getting pretty long and complicated;\nwhat if we had thousands of datasets,\nand didn't want to generate a figure for every single one?\nCommenting out the figure-drawing code is a nuisance.\nAlso, what if we want to use that code again,\non a different dataset or at a different point in our program?\nCutting and pasting it is going to make our code get very long and very repetative,\nvery quickly.\nWe'd like a way to package our code so that it is easier to reuse,\nand Python provides for this by letting us define things called **functions** -\na shorthand way of re-executing longer pieces of code.\n\nLet's start by defining a function `fahr_to_kelvin` that converts temperatures from Fahrenheit to Kelvin:"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "def fahr_to_kelvin(temp):\n return ((temp - 32) * (5/9)) + 273.15",
"execution_count": 87,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The function definition opens with the word `def`,\nwhich is followed by the name of the function\nand a parenthesized list of parameter names.\nThe **body** of the function --- the\nstatements that are executed when it runs --- is indented below the definition line,\ntypically by four spaces.\n\nWhen we call the function,\nthe values we pass to it are assigned to those variables\nso that we can use them inside the function.\nInside the function,\nwe use a **return statement** to send a result back to whoever asked for it.\n\nLet's try running our function.\nCalling our own function is no different from calling any other function:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "print('freezing point of water:', fahr_to_kelvin(32))\nprint('boiling point of water:', fahr_to_kelvin(212))",
"execution_count": 88,
"outputs": [
{
"output_type": "stream",
"text": "freezing point of water: 273.15\nboiling point of water: 373.15\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We've successfully called the function that we defined,\nand we have access to the value that we returned.\n\n> ## Integer division\n>\n> We are using Python 3, where division always returns a floating point number:\n>\n> ```\n> $ python3 -c \"print(5/9)\"\n> ```\n> ```\n> 0.5555555555555556\n> ```\n>\n> Unfortunately, this wasn't the case in Python 2:\n>\n> ```\n> >>> 5/9\n> ```\n> ```\n> 0\n> ```\n>\n> If you are using Python 2 and want to keep the fractional part of division\n> you need to convert one or the other number to floating point:\n>\n> ```\n> >>> 5.0/9\n> ```\n> ```\n> 0.555555555556\n> ```\n> ```\n> >>> 5/9.0\n> ```\n> ```\n> 0.555555555556\n> ```\n>\n> And if you want an integer result from division in Python 3,\n> use a double-slash:\n> ```\n> >>> 3//2\n> ```\n> ```\n> 1\n> ```\n\n## Composing Functions\n\nNow that we've seen how to turn Fahrenheit into Kelvin,\nit's easy to turn Kelvin into Celsius:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "def kelvin_to_celsius(temp):\n return temp - 273.15\n\nprint('absolute zero in Celsius:', kelvin_to_celsius(0.0))",
"execution_count": 89,
"outputs": [
{
"output_type": "stream",
"text": "absolute zero in Celsius: -273.15\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "What about converting Fahrenheit to Celsius?\nWe could write out the formula,\nbut we don't need to.\nInstead,\nwe can **compose** the required function, based on the two functions we have already created:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "def fahr_to_celsius(temp):\n temp_k = fahr_to_kelvin(temp)\n result = kelvin_to_celsius(temp_k)\n return result\n\nprint('freezing point of water in Celsius:', fahr_to_celsius(32.0))",
"execution_count": 90,
"outputs": [
{
"output_type": "stream",
"text": "freezing point of water in Celsius: 0.0\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "This is our first taste of how larger programs are built:\nwe define basic operations,\nthen combine them in ever-large chunks to get the effect we want.\nReal-life functions will usually be larger than the ones shown here --- typically half a dozen to a few dozen lines --- but\nthey shouldn't ever be much longer than that,\nor the next person who reads it won't be able to understand what's going on.\n\n## Tidying up\n\nNow that we know how to wrap bits of code up in functions,\nwe can make our inflammation analyasis easier to read and easier to reuse.\nFirst, let's make an `analyze` function that generates our plots:"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "def analyze(filename):\n\n data = numpy.loadtxt(fname=filename, delimiter=',')\n\n fig = plt.figure(figsize=(10.0, 3.0))\n\n axes1 = fig.add_subplot(1, 3, 1)\n axes2 = fig.add_subplot(1, 3, 2)\n axes3 = fig.add_subplot(1, 3, 3)\n\n axes1.set_ylabel('average')\n axes1.plot(data.mean(axis=0))\n\n axes2.set_ylabel('max')\n axes2.plot(data.max(axis=0))\n axes2.set_title(filename[:-4])\n\n axes3.set_ylabel('min')\n axes3.plot(data.min(axis=0))\n\n fig.tight_layout()",
"execution_count": 91,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "and another function called `detect_problems` that checks for those systematics\nwe noticed:"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "def detect_problems(filename):\n\n data = numpy.loadtxt(fname=filename, delimiter=',')\n\n if data.max(axis=0)[0] == 0 and data.max(axis=0)[20] == 20:\n print('Suspicious looking maxima!')\n elif data.min(axis=0).sum() == 0:\n print('Minima add up to zero!')\n else:\n print('Seems OK!')",
"execution_count": 92,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Notice that rather than jumbling this code together in one giant `for` loop,\nwe can now read and reuse both ideas separately.\nWe can reproduce the previous analysis with a much simpler `for` loop:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "for f in filenames[:3]:\n \n print('\\nOpening file', f)\n analyze(f)\n detect_problems(f)",
"execution_count": 93,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "By giving our functions human-readable names,\nwe can more easily read and understand what is happening in the `for` loop.\nEven better, if at some later date we want to use either of those pieces of code again,\nwe can do so in a single line.\n\n## Testing and Documenting\n\nOnce we start putting things in functions so that we can re-use them,\nwe need to start testing that those functions are working correctly.\nTo see how to do this,\nlet's write a function to center a dataset around a particular value:"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "def center(data, desired):\n return (data - data.mean()) + desired",
"execution_count": 94,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "We could test this on our actual data,\nbut since we don't know what the values ought to be,\nit will be hard to tell if the result was correct.\nInstead,\nlet's use NumPy to create a matrix of 0's\nand then center that around 3:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "z = numpy.zeros((2,2))\nprint(center(z, 3))",
"execution_count": 95,
"outputs": [
{
"output_type": "stream",
"text": "[[ 3. 3.]\n [ 3. 3.]]\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "That looks right,\nso let's try `center` on our real data:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "data = numpy.loadtxt(fname='../data/inflammation-01.csv', delimiter=',')\nprint(center(data, 0))",
"execution_count": 96,
"outputs": [
{
"output_type": "stream",
"text": "[[-6.14875 -6.14875 -5.14875 ..., -3.14875 -6.14875 -6.14875]\n [-6.14875 -5.14875 -4.14875 ..., -5.14875 -6.14875 -5.14875]\n [-6.14875 -5.14875 -5.14875 ..., -4.14875 -5.14875 -5.14875]\n ..., \n [-6.14875 -5.14875 -5.14875 ..., -5.14875 -5.14875 -5.14875]\n [-6.14875 -6.14875 -6.14875 ..., -6.14875 -4.14875 -6.14875]\n [-6.14875 -6.14875 -5.14875 ..., -5.14875 -5.14875 -6.14875]]\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "It's hard to tell from the default output whether the result is correct,\nbut there are a few simple tests that will reassure us:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "print('original min, mean, and max are:', data.min(), data.mean(), data.max())\ncentered = center(data, 0)\nprint('min, mean, and and max of centered data are:', centered.min(), centered.mean(), centered.max())",
"execution_count": 97,
"outputs": [
{
"output_type": "stream",
"text": "original min, mean, and max are: 0.0 6.14875 20.0\nmin, mean, and and max of centered data are: -6.14875 2.84217094304e-16 13.85125\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "That seems almost right:\nthe original mean was about 6.1,\nso the lower bound from zero is how about -6.1.\nThe mean of the centered data isn't quite zero --- we'll explore why not in the challenges --- but it's pretty close.\nWe can even go further and check that the standard deviation hasn't changed:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "print('std dev before and after:', data.std(), centered.std())",
"execution_count": 98,
"outputs": [
{
"output_type": "stream",
"text": "std dev before and after: 4.61383319712 4.61383319712\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Those values look the same,\nbut we probably wouldn't notice if they were different in the sixth decimal place.\nLet's do this instead:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "print('difference in standard deviations before and after:', data.std() - centered.std())",
"execution_count": 99,
"outputs": [
{
"output_type": "stream",
"text": "difference in standard deviations before and after: 0.0\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Again,\nthe difference is very small.\nIt's still possible that our function is wrong,\nbut it seems unlikely enough that we should probably get back to doing our analysis.\nWe have one more task first, though:\nwe should write some **documentation** for our function\nto remind ourselves later what it's for and how to use it.\n\nThe usual way to put documentation in software is to add **comments** like this:"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "# center(data, desired): return a new array containing the original data centered around the desired value.\ndef center(data, desired):\n return (data - data.mean()) + desired",
"execution_count": 100,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "There's a better way, though.\nIf the first thing in a function is a string that isn't assigned to a variable,\nthat string is attached to the function as its documentation:"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "def center(data, desired):\n '''Return a new array containing the original data centered around the desired value.'''\n return (data - data.mean()) + desired",
"execution_count": 101,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "This is better because we can now ask Python's built-in help system to show us the documentation for the function:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "help(center)",
"execution_count": 102,
"outputs": [
{
"output_type": "stream",
"text": "Help on function center in module __main__:\n\ncenter(data, desired)\n Return a new array containing the original data centered around the desired value.\n\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "A string like this is called a **docstring**.\nWe don't need to use triple quotes when we write one,\nbut if we do,\nwe can break the string across multiple lines:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "def center(data, desired):\n '''Return a new array containing the original data centered around the desired value.\n Example: center([1, 2, 3], 0) => [-1, 0, 1]'''\n return (data - data.mean()) + desired\n\nhelp(center)",
"execution_count": 103,
"outputs": [
{
"output_type": "stream",
"text": "Help on function center in module __main__:\n\ncenter(data, desired)\n Return a new array containing the original data centered around the desired value.\n Example: center([1, 2, 3], 0) => [-1, 0, 1]\n\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Defining Defaults\n\nWe have passed parameters to functions in two ways:\ndirectly, as in `type(data)`,\nand by name, as in `numpy.loadtxt(fname='something.csv', delimiter=',')`.\nIn fact,\nwe can pass the filename to `loadtxt` without the `fname=`:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "numpy.loadtxt('../data/inflammation-01.csv', delimiter=',')",
"execution_count": 104,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/plain": "array([[ 0., 0., 1., ..., 3., 0., 0.],\n [ 0., 1., 2., ..., 1., 0., 1.],\n [ 0., 1., 1., ..., 2., 1., 1.],\n ..., \n [ 0., 1., 1., ..., 1., 1., 1.],\n [ 0., 0., 0., ..., 0., 2., 0.],\n [ 0., 0., 1., ..., 1., 1., 0.]])"
},
"metadata": {},
"execution_count": 104
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "but we still need to say `delimiter=`:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "numpy.loadtxt('../data/inflammation-01.csv', ',')",
"execution_count": 105,
"outputs": [
{
"output_type": "error",
"ename": "TypeError",
"evalue": "data type \",\" not understood",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-105-8b2dfe9162c8>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mnumpy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloadtxt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'../data/inflammation-01.csv'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m','\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/Users/fonnescj/anaconda3/lib/python3.5/site-packages/numpy/lib/npyio.py\u001b[0m in \u001b[0;36mloadtxt\u001b[0;34m(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin)\u001b[0m\n\u001b[1;32m 871\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 872\u001b[0m \u001b[0;31m# Make sure we're dealing with a proper dtype\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 873\u001b[0;31m \u001b[0mdtype\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 874\u001b[0m \u001b[0mdefconv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_getconv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 875\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: data type \",\" not understood"
]
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "To understand what's going on,\nand make our own functions easier to use,\nlet's re-define our `center` function like this:"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "def center(data, desired=0.0):\n '''Return a new array containing the original data centered around the desired value (0 by default).\n Example: center([1, 2, 3], 0) => [-1, 0, 1]'''\n return (data - data.mean()) + desired",
"execution_count": 106,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The key change is that the second parameter is now written `desired=0.0` instead of just `desired`.\nIf we call the function with two arguments,\nit works as it did before:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "test_data = numpy.zeros((2, 2))\nprint(center(test_data, 3))",
"execution_count": 107,
"outputs": [
{
"output_type": "stream",
"text": "[[ 3. 3.]\n [ 3. 3.]]\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "But we can also now call it with just one parameter,\nin which case `desired` is automatically assigned the **default value** of 0.0:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "more_data = 5 + numpy.zeros((2, 2))\nprint('data before centering:')\nprint(more_data)\nprint('centered data:')\nprint(center(more_data))",
"execution_count": 108,
"outputs": [
{
"output_type": "stream",
"text": "data before centering:\n[[ 5. 5.]\n [ 5. 5.]]\ncentered data:\n[[ 0. 0.]\n [ 0. 0.]]\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "This is handy:\nif we usually want a function to work one way,\nbut occasionally need it to do something else,\nwe can allow people to pass a parameter when they need to\nbut provide a default to make the normal case easier.\nThe example below shows how Python matches values to parameters:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "def display(a=1, b=2, c=3):\n print('a:', a, 'b:', b, 'c:', c)\n\nprint('no parameters:')\ndisplay()\nprint('one parameter:')\ndisplay(55)\nprint('two parameters:')\ndisplay(55, 66)",
"execution_count": 109,
"outputs": [
{
"output_type": "stream",
"text": "no parameters:\na: 1 b: 2 c: 3\none parameter:\na: 55 b: 2 c: 3\ntwo parameters:\na: 55 b: 66 c: 3\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "As this example shows,\nparameters are matched up from left to right,\nand any that haven't been given a value explicitly get their default value.\nWe can override this behavior by naming the value as we pass it in:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "print('only setting the value of c')\ndisplay(c=77)",
"execution_count": 110,
"outputs": [
{
"output_type": "stream",
"text": "only setting the value of c\na: 1 b: 2 c: 77\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "With that in hand,\nlet's look at the help for `numpy.loadtxt`:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "help(numpy.loadtxt)",
"execution_count": 111,
"outputs": [
{
"output_type": "stream",
"text": "Help on function loadtxt in module numpy.lib.npyio:\n\nloadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)\n Load data from a text file.\n \n Each row in the text file must have the same number of values.\n \n Parameters\n ----------\n fname : file or str\n File, filename, or generator to read. If the filename extension is\n ``.gz`` or ``.bz2``, the file is first decompressed. Note that\n generators should return byte strings for Python 3k.\n dtype : data-type, optional\n Data-type of the resulting array; default: float. If this is a\n structured data-type, the resulting array will be 1-dimensional, and\n each row will be interpreted as an element of the array. In this\n case, the number of columns used must match the number of fields in\n the data-type.\n comments : str or sequence, optional\n The characters or list of characters used to indicate the start of a\n comment;\n default: '#'.\n delimiter : str, optional\n The string used to separate values. By default, this is any\n whitespace.\n converters : dict, optional\n A dictionary mapping column number to a function that will convert\n that column to a float. E.g., if column 0 is a date string:\n ``converters = {0: datestr2num}``. Converters can also be used to\n provide a default value for missing data (but see also `genfromtxt`):\n ``converters = {3: lambda s: float(s.strip() or 0)}``. Default: None.\n skiprows : int, optional\n Skip the first `skiprows` lines; default: 0.\n usecols : sequence, optional\n Which columns to read, with 0 being the first. For example,\n ``usecols = (1,4,5)`` will extract the 2nd, 5th and 6th columns.\n The default, None, results in all columns being read.\n unpack : bool, optional\n If True, the returned array is transposed, so that arguments may be\n unpacked using ``x, y, z = loadtxt(...)``. When used with a structured\n data-type, arrays are returned for each field. Default is False.\n ndmin : int, optional\n The returned array will have at least `ndmin` dimensions.\n Otherwise mono-dimensional axes will be squeezed.\n Legal values: 0 (default), 1 or 2.\n \n .. versionadded:: 1.6.0\n \n Returns\n -------\n out : ndarray\n Data read from the text file.\n \n See Also\n --------\n load, fromstring, fromregex\n genfromtxt : Load data with missing values handled as specified.\n scipy.io.loadmat : reads MATLAB data files\n \n Notes\n -----\n This function aims to be a fast reader for simply formatted files. The\n `genfromtxt` function provides more sophisticated handling of, e.g.,\n lines with missing values.\n \n .. versionadded:: 1.10.0\n \n The strings produced by the Python float.hex method can be used as\n input for floats.\n \n Examples\n --------\n >>> from io import StringIO # StringIO behaves like a file object\n >>> c = StringIO(\"0 1\\n2 3\")\n >>> np.loadtxt(c)\n array([[ 0., 1.],\n [ 2., 3.]])\n \n >>> d = StringIO(\"M 21 72\\nF 35 58\")\n >>> np.loadtxt(d, dtype={'names': ('gender', 'age', 'weight'),\n ... 'formats': ('S1', 'i4', 'f4')})\n array([('M', 21, 72.0), ('F', 35, 58.0)],\n dtype=[('gender', '|S1'), ('age', '<i4'), ('weight', '<f4')])\n \n >>> c = StringIO(\"1,0,2\\n3,0,4\")\n >>> x, y = np.loadtxt(c, delimiter=',', usecols=(0, 2), unpack=True)\n >>> x\n array([ 1., 3.])\n >>> y\n array([ 2., 4.])\n\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "There's a lot of information here,\nbut the most important part is the first couple of lines:\n\n loadtxt(fname, dtype=<type 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None,\n unpack=False, ndmin=0)"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "This tells us that `loadtxt` has one parameter called `fname` that doesn't have a default value,\nand eight others that do.\nIf we call the function like this:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "numpy.loadtxt('../data/inflammation-01.csv', ',')",
"execution_count": 112,
"outputs": [
{
"output_type": "error",
"ename": "TypeError",
"evalue": "data type \",\" not understood",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-112-8b2dfe9162c8>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mnumpy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloadtxt\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'../data/inflammation-01.csv'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m','\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/Users/fonnescj/anaconda3/lib/python3.5/site-packages/numpy/lib/npyio.py\u001b[0m in \u001b[0;36mloadtxt\u001b[0;34m(fname, dtype, comments, delimiter, converters, skiprows, usecols, unpack, ndmin)\u001b[0m\n\u001b[1;32m 871\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 872\u001b[0m \u001b[0;31m# Make sure we're dealing with a proper dtype\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 873\u001b[0;31m \u001b[0mdtype\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 874\u001b[0m \u001b[0mdefconv\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_getconv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdtype\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 875\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTypeError\u001b[0m: data type \",\" not understood"
]
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "then the filename is assigned to `fname` (which is what we want),\nbut the delimiter string `','` is assigned to `dtype` rather than `delimiter`,\nbecause `dtype` is the second parameter in the list. However ',' isn't a known `dtype` so\nour code produced an error message when we tried to run it.\nWhen we call `loadtxt` we don't have to provide `fname=` for the filename because it's the\nfirst item in the list, but if we want the ',' to be assigned to the variable `delimiter`,\nwe *do* have to provide `delimiter=` for the second parameter since `delimiter` is not\nthe second parameter in the list.\n\n\n\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Exercise: Combining strings \n\n\"Adding\" two strings produces their concatenation:\n`'a' + 'b'` is `'ab'`.\nWrite a function called `fence` that takes two parameters called `original` and `wrapper`\nand returns a new string that has the wrapper character at the beginning and end of the original.\nA call to your function should look like this:\n\n```\nprint(fence('name', '*'))\n```\n```\n*name*\n```"
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Exercise: Rescaling an array \n\nWrite a function `rescale` that takes an array as input\nand returns a corresponding array of values scaled to lie in the range 0.0 to 1.0."
},
{
"metadata": {
"trusted": true,
"collapsed": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Exercise: Variables inside and outside functions \n\nWhat does the following piece of code display when run - and why?"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "f = 0\nk = 0\n\ndef f2k(f):\n k = ((f-32)*(5.0/9.0)) + 273.15\n return k\n\nf2k(8)\nf2k(41)\nf2k(32)\n\nprint(k)",
"execution_count": 113,
"outputs": [
{
"output_type": "stream",
"text": "0\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Errors and Exceptions\n\nEvery programmer encounters errors,\nboth those who are just beginning,\nand those who have been programming for years.\nEncountering errors and exceptions can be very frustrating at times,\nand can make coding feel like a hopeless endeavour.\nHowever,\nunderstanding what the different types of errors are\nand when you are likely to encounter them can help a lot.\nOnce you know *why* you get certain types of errors,\nthey become much easier to fix.\n\nErrors in Python have a very specific form,\ncalled a traceback.\n\nLet's examine one:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "import errors_01\nerrors_01.favorite_ice_cream()",
"execution_count": 114,
"outputs": [
{
"output_type": "error",
"ename": "ImportError",
"evalue": "No module named 'errors_01'",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-114-6c36d5499fb6>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0merrors_01\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0merrors_01\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfavorite_ice_cream\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mImportError\u001b[0m: No module named 'errors_01'"
]
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "This particular traceback has two levels.\nYou can determine the number of levels by looking for the number of arrows on the left hand side.\nIn this case:\n\n1. The first shows code from the cell above,\n with an arrow pointing to Line 2 (which is `favorite_ice_cream()`).\n\n2. The second shows some code in another function (`favorite_ice_cream`, located in the file `errors_01.py`),\n with an arrow pointing to Line 7 (which is `print(ice_creams[3])`).\n\nThe last level is the actual place where the error occurred.\nThe other level(s) show what function the program executed to get to the next level down.\nSo, in this case, the program first performed a **function call** to the function `favorite_ice_cream`.\nInside this function,\nthe program encountered an error on Line 7, when it tried to run the code `print(ice_creams[3])`.\n\n> ## Long Tracebacks\n>\n> Sometimes, you might see a traceback that is very long -- sometimes they might even be 20 levels deep!\n> This can make it seem like something horrible happened,\n> but really it just means that your program called many functions before it ran into the error.\n> Most of the time,\n> you can just pay attention to the bottom-most level,\n> which is the actual place where the error occurred.\n\nSo what error did the program actually encounter?\nIn the last line of the traceback,\nPython helpfully tells us the category or type of error (in this case, it is an `IndexError`)\nand a more detailed error message (in this case, it says \"list index out of range\").\n\nIf you encounter an error and don't know what it means,\nit is still important to read the traceback closely.\nThat way,\nif you fix the error,\nbut encounter a new one,\nyou can tell that the error changed.\nAdditionally,\nsometimes just knowing *where* the error occurred is enough to fix it,\neven if you don't entirely understand the message.\n\nIf you do encounter an error you don't recognize,\ntry looking at the [official documentation on errors](http://docs.python.org/2/library/exceptions.html).\nHowever,\nnote that you may not always be able to find the error there,\nas it is possible to create custom errors.\nIn that case,\nhopefully the custom error message is informative enough to help you figure out what went wrong.\n\n## Syntax Errors\n\nWhen you forget a colon at the end of a line,\naccidentally add one space too many when indenting under an `if` statement,\nor forget a parentheses,\nyou will encounter a **syntax error**.\nThis means that Python couldn't figure out how to read your program.\nThis is similar to forgetting punctuation in English:\n\n> this text is difficult to read there is no punctuation there is also no capitalization\n> why is this hard because you have to figure out where each sentence ends\n> you also have to figure out where each sentence begins\n> to some extent it might be ambiguous if there should be a sentence break or not\n\nPeople can typically figure out what is meant by text with no punctuation,\nbut people are much smarter than computers.\nIf Python doesn't know how to read the program,\nit will just give up and inform you with an error.\nFor example:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "def some_function()\n msg = \"hello, world!\"\n print(msg)\n return msg",
"execution_count": 115,
"outputs": [
{
"output_type": "error",
"ename": "SyntaxError",
"evalue": "invalid syntax (<ipython-input-115-dbf32ad5d3e8>, line 1)",
"traceback": [
"\u001b[0;36m File \u001b[0;32m\"<ipython-input-115-dbf32ad5d3e8>\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m def some_function()\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
]
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Here, Python tells us that there is a `SyntaxError` on line 1,\nand even puts a little arrow in the place where there is an issue.\nIn this case the problem is that the function definition is missing a colon at the end.\n\nActually, the function above has *two* issues with syntax.\nIf we fix the problem with the colon,\nwe see that there is *also* an `IndentationError`,\nwhich means that the lines in the function definition do not all have the same indentation:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "def some_function():\n msg = \"hello, world!\"\n print(msg)\n return msg",
"execution_count": 116,
"outputs": [
{
"output_type": "error",
"ename": "IndentationError",
"evalue": "unexpected indent (<ipython-input-116-e169556d667b>, line 4)",
"traceback": [
"\u001b[0;36m File \u001b[0;32m\"<ipython-input-116-e169556d667b>\"\u001b[0;36m, line \u001b[0;32m4\u001b[0m\n\u001b[0;31m return msg\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mIndentationError\u001b[0m\u001b[0;31m:\u001b[0m unexpected indent\n"
]
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Both `SyntaxError` and `IndentationError` indicate a problem with the syntax of your program,\nbut an `IndentationError` is more specific:\nit *always* means that there is a problem with how your code is indented.\n\n> ## Tabs and Spaces\n>\n> A quick note on indentation errors:\n> they can sometimes be insidious,\n> especially if you are mixing spaces and tabs.\n> Because they are both whitespace,\n> it is difficult to visually tell the difference.\n> The IPython notebook actually gives us a bit of a hint,\n> but not all Python editors will do that.\n> In the following example,\n> the first two lines are using a tab for indentation,\n> while the third line uses four spaces:\n>\n> ```python\n> def some_function():\n> msg = \"hello, world!\"\n> print(msg)\n> return msg\n> ```\n> ```\n> File \"<ipython-input-5-653b36fbcd41>\", line 4\n> return msg\n> ^\n> IndentationError: unindent does not match any outer indentation level\n> ```\n>\n> By default, one tab is equivalent to eight spaces,\n> so the only way to mix tabs and spaces is to make it look like this.\n> In general, is is better to just never use tabs and always use spaces,\n> because it can make things very confusing.\n\n## Variable Name Errors\n\nAnother very common type of error is called a `NameError`,\nand occurs when you try to use a variable that does not exist.\nFor example:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "print(a)",
"execution_count": 117,
"outputs": [
{
"output_type": "error",
"ename": "NameError",
"evalue": "name 'a' is not defined",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-117-c5a4f3535135>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mNameError\u001b[0m: name 'a' is not defined"
]
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Variable name errors come with some of the most informative error messages,\nwhich are usually of the form \"name 'the_variable_name' is not defined\".\n\nWhy does this error message occur?\nThat's harder question to answer,\nbecause it depends on what your code is supposed to do.\nHowever,\nthere are a few very common reasons why you might have an undefined variable.\nThe first is that you meant to use a string, but forgot to put quotes around it:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "print(hello)",
"execution_count": 118,
"outputs": [
{
"output_type": "error",
"ename": "NameError",
"evalue": "name 'hello' is not defined",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-118-43a14fcd4265>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhello\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mNameError\u001b[0m: name 'hello' is not defined"
]
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "The second is that you just forgot to create the variable before using it.\nIn the following example,\n`count` should have been defined (e.g., with `count = 0`) before the for loop:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "for number in range(10):\n count = count + number\nprint(\"The count is: \" + str(count))",
"execution_count": 119,
"outputs": [
{
"output_type": "error",
"ename": "NameError",
"evalue": "name 'count' is not defined",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-119-ea184582fd3f>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mnumber\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mcount\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcount\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mnumber\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"The count is: \"\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcount\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'count' is not defined"
]
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Finally, the third possibility is that you made a typo when you were writing your code.\nLet's say we fixed the error above by adding the line `Count = 0` before the for loop.\nFrustratingly, this actually does not fix the error.\nRemember that variables are **case-sensitive**,\nso the variable `count` is different from `Count`. We still get the same error, because we still have not defined `count`:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "Count = 0\nfor number in range(10):\n count = count + number\nprint(\"The count is: \" + str(count))",
"execution_count": 120,
"outputs": [
{
"output_type": "error",
"ename": "NameError",
"evalue": "name 'count' is not defined",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-120-9081b8b5f7ae>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mCount\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mnumber\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mcount\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcount\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mnumber\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"The count is: \"\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcount\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'count' is not defined"
]
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Item Errors\n\nNext up are errors having to do with containers (like lists and dictionaries) and the items within them.\nIf you try to access an item in a list or a dictionary that does not exist,\nthen you will get an error.\nThis makes sense:\nif you asked someone what day they would like to get coffee,\nand they answered \"caturday\",\nyou might be a bit annoyed.\nPython gets similarly annoyed if you try to ask it for an item that doesn't exist:"
},
{
"metadata": {
"trusted": true,
"collapsed": false
},
"cell_type": "code",
"source": "letters = ['a', 'b', 'c']\nprint(\"Letter #1 is \" + letters[0])\nprint(\"Letter #2 is \" + letters[1])\nprint(\"Letter #3 is \" + letters[2])\nprint(\"Letter #4 is \" + letters[3])",
"execution_count": 121,
"outputs": [
{
"output_type": "stream",
"text": "Letter #1 is a\nLetter #2 is b\nLetter #3 is c\n",
"name": "stdout"
},
{
"output_type": "error",
"ename": "IndexError",
"evalue": "list index out of range",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-121-018869cdd091>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Letter #2 is \"\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mletters\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Letter #3 is \"\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mletters\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"Letter #4 is \"\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mletters\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;31mIndexError\u001b[0m: list index out of range"
]
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "If you get an error that you've never seen before,\nsearching the Internet for that error type\noften reveals common reasons why you might get that error."
},
{
"metadata": {},
"cell_type": "markdown",
"source": "---\n\n## References\n\nMuch of the content for this notebook was created by [Software Carpentry](http://software-carpentry.org/lessons.html). Here are some additional resources if you wish to continue learning Python:\n\n- Bassi S (2007) [A Primer on Python for Life Science Researchers](http://www.ploscompbiol.org/article/info%3Adoi%2F10.1371%2Fjournal.pcbi.0030199). PLoS Comput Biol 3(11): e199\n- [Learn Python the Hard Way](http://learnpythonthehardway.org/book/)\n- [Learn X in Y Minutes (where X=Python)](http://learnxinyminutes.com/docs/python/)"
}
],
"metadata": {
"nav_menu": {},
"language_info": {
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2",
"mimetype": "text/x-python",
"name": "python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py"
},
"anaconda-cloud": {},
"toc": {
"threshold": 6,
"number_sections": false,
"toc_cell": false,
"toc_window_display": false,
"toc_section_display": "block",
"sideBar": true,
"navigate_menu": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python [default]",
"language": "python"
},
"gist": {
"id": "f89ec8bc8271395c4466465802ba44a3",
"data": {
"description": "python/Introduction to Python.ipynb",
"public": true
}
},
"_draft": {
"nbviewer_url": "https://gist.github.com/f89ec8bc8271395c4466465802ba44a3"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment