{ "metadata": { "name": "", "signature": "sha256:21bfd4abb703448639b25206a5628f035b2d4cc7b8db829c46bef05937fabc52" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "# special IPython command to prepare the notebook for matplotlib\n", "%matplotlib inline \n", "\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "\n", "pd.options.display.mpl_style = 'default'" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Recall from from lab last week 09/12/2014\n", "\n", "Previously discussed: \n", "\n", "* Reading in a CSV file into a pandas DataFrame\n", "* Using histograms, scatterplots and boxplots as exploratory data analysis\n", "* Summary statistics\n", "* Functions to access a pandas DataFrame\n", "* Defining your own functions and using loops" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Today, we will discuss the following:\n", "* Brief introduction to Numpy, Scipy\n", " * Vectorizing functions\n", "* More pandas and matplotlib\n", "* Working in the command line\n", "* Overview of git and Github\n", "\n", " Download this notebook from Github " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Numpy\n", "\n", "NumPy and SciPy are modules in Python for scientific computing. [NumPy](http://www.numpy.org) lets you do fast, vectorized operations on arrays. Why use this module? \n", "\n", "* It gives you the performance of using low-level code (e.g. C or Fortran) with the benefit of writing the code in an interpreted scripting language (all while keeping the native Python code). \n", "* It gives you a fast, memory-efficient multidimensional array called `ndarray` which allows you perform vectorized operations on (and supports mathematical functions such as linear algebra and random number generation)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Import NumPy\n", "import numpy as np" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "To create a fast, multidimensional `ndarray` object, use the `np.array()` method on a python `list` or `tuple` or reading data from files. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = np.array([1,2,3,4])\n", "y = np.array([[1,2], [3,4]])\n", "x" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ "array([1, 2, 3, 4])" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "y" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "array([[1, 2],\n", " [3, 4]])" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "type(x)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "numpy.ndarray" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Properties of NumPy arrays\n", "There are a set of properties about the `ndarray` object such the dimensions, the size, etc. \n", "\n", "Property | Description\n", "--- | ----\n", "`y.shape` (or `shape(y)` | Shape or dimension of the array\n", "`y.size` (or `size(y)`) | Number of elements in the array \n", "`y.ndim` | number of dimensions \n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "(4,)" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "y.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "(2, 2)" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Other ways to generate NumPy arrays\n", "\n", "Function | Description\n", "--- | ---\n", "`np.arange(start,stop,step)` | Create a range between the start and stop arguments\n", "`np.linspace(start,stop,num)` | Create a range between start and stop (both ends included) of length num\n", "`np.logspace(start, stop,num,base)` | Create a range in the log space with a define base of length num\n", "`np.eye(n)` | Generate an n x n identity matrix" ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.arange(0, 21, 2)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20])" ] } ], "prompt_number": 8 }, { "cell_type": "code", "collapsed": false, "input": [ "# Try it: Create a numpy array from 0 to 20 in steps of size 2" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "# Try it: Create a numpy array from -10 to 10 in steps of 0.5 (INCLUDING the number 10)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "# Try it: Create a numpy array from 100 to 1000 of length 10" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "In addition, the `numpy.random` module can be used to create arrays using a random number generation " ] }, { "cell_type": "code", "collapsed": false, "input": [ "from numpy import random" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Function | Description\n", "--- | ---\n", "`np.random.randint(a, b, N)` | Generate N random integers between a and b\n", "`np.random.rand(n, m)` | Generate uniform random numbers in [0,1] of dim n x m\n", "`np.random.randn(n, m)` | Generate standard normal random numbers of dim n x m\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.random.randint(1, 100, 50)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "array([87, 29, 97, 35, 66, 84, 50, 93, 1, 10, 83, 56, 20, 49, 41, 58, 43,\n", " 60, 46, 98, 47, 91, 73, 73, 90, 26, 18, 3, 62, 65, 27, 58, 19, 49,\n", " 13, 5, 14, 16, 48, 38, 90, 19, 85, 61, 36, 38, 64, 6, 9, 97])" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "# Try it: Create a numpy array filled with random samples \n", "# from a normal distribution of size 4 x 4" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 14 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Reshaping, resizing and stacking NumPy arrays\n", "\n", "To reshape an array, use `reshape()`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "z = np.random.rand(4,4)\n", "z " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 15, "text": [ "array([[ 0.34961451, 0.75618943, 0.85774252, 0.29423465],\n", " [ 0.72196235, 0.02541357, 0.7708488 , 0.07240782],\n", " [ 0.54376752, 0.41193452, 0.40132359, 0.63399867],\n", " [ 0.12622657, 0.34662246, 0.27813886, 0.95162428]])" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "z.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ "(4, 4)" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "z.reshape((8,2)) # dim is now 8 x 2" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 17, "text": [ "array([[ 0.34961451, 0.75618943],\n", " [ 0.85774252, 0.29423465],\n", " [ 0.72196235, 0.02541357],\n", " [ 0.7708488 , 0.07240782],\n", " [ 0.54376752, 0.41193452],\n", " [ 0.40132359, 0.63399867],\n", " [ 0.12622657, 0.34662246],\n", " [ 0.27813886, 0.95162428]])" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "To flatten an array (convert a higher dimensional array into a vector), use `flatten()`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "z.flatten()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 18, "text": [ "array([ 0.34961451, 0.75618943, 0.85774252, 0.29423465, 0.72196235,\n", " 0.02541357, 0.7708488 , 0.07240782, 0.54376752, 0.41193452,\n", " 0.40132359, 0.63399867, 0.12622657, 0.34662246, 0.27813886,\n", " 0.95162428])" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Operating on NumPy arrays\n", "\n", "#### Assigning values\n", "To assign values to a specific element in a `ndarray`, use the assignment operator. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "y = np.array([[1,2], [3,4]])\n", "y.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 19, "text": [ "(2, 2)" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "y[0,0] = 10\n", "y " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 20, "text": [ "array([[10, 2],\n", " [ 3, 4]])" ] } ], "prompt_number": 20 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Indexing and slicing arrays\n", "To extract elements of the NumPy arrays, use the bracket operator and the slice (i.e. colon) operator. To slice specific elements in the array, use `dat[lower:upper:step]`. To extract the diagonal (and subdiagonal) elements, use `diag()`. " ] }, { "cell_type": "code", "collapsed": false, "input": [ " # random samples from a uniform distribution between 0 and 1\n", "dat = np.random.rand(4,4)\n", "dat" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 21, "text": [ "array([[ 0.60679169, 0.36100824, 0.18275644, 0.56561955],\n", " [ 0.36584042, 0.12087577, 0.14576369, 0.21879333],\n", " [ 0.27301492, 0.64171746, 0.62002836, 0.83744579],\n", " [ 0.30159074, 0.71813527, 0.94443425, 0.19098029]])" ] } ], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "dat[0, :] # row 1" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 22, "text": [ "array([ 0.60679169, 0.36100824, 0.18275644, 0.56561955])" ] } ], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "dat[:, 0] # column 1" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 23, "text": [ "array([ 0.60679169, 0.36584042, 0.27301492, 0.30159074])" ] } ], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "dat[0:3:2, 0] # first and third elements in column 1" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 24, "text": [ "array([ 0.60679169, 0.27301492])" ] } ], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "np.diag(dat) # diagonal" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 25, "text": [ "array([ 0.60679169, 0.12087577, 0.62002836, 0.19098029])" ] } ], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "np.arange(32).reshape((8, 4)) # returns an 8 x 4 array" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 26, "text": [ "array([[ 0, 1, 2, 3],\n", " [ 4, 5, 6, 7],\n", " [ 8, 9, 10, 11],\n", " [12, 13, 14, 15],\n", " [16, 17, 18, 19],\n", " [20, 21, 22, 23],\n", " [24, 25, 26, 27],\n", " [28, 29, 30, 31]])" ] } ], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "x[0] # returns the first row" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 27, "text": [ "1" ] } ], "prompt_number": 27 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Element-wise transformations on arrays\n", "There are many vectorized wrappers that take in one scalar and produce one ore more scalars (e.g. `np.exp()`, `np.sqrt()`). This element-wise array methods are also known as NumPy `ufuncs`. \n", "\n", "Function | Description \n", "--- | --- \n", "`np.abs(x)` | absolute value of each element\n", "`np.sqrt(x)` | square root of each element\n", "`np.square(x)` | square of each element\n", "`np.exp(x)` | exponential of each element\n", "`np.maximum(x, y)` | element-wise maximum from two arrays x and y\n", "`np.minimum(x,y)` | element-wise minimum\n", "`np.sign(x)` | compute the sign of each element: 1 (pos), 0 (zero), -1 (neg)\n", "`np.subtract(x, y)` | subtract elements in y from elements in x\n", "`np.power(x, y)` | raise elements in first array x to powers in second array y\n", "`np.where(cond, x, y)` | ifelse statement\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Vectorizing functions\n", "\n", "It is important to state again that you should avoid looping through elements in vectors if at all possible. One way to get around that when writing functions is to use what are called **vectorized functions**. Say you wrote a function `f` which accepts some input `x` and checks if `x` is bigger or smaller than 0. \n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f(x):\n", " if x >=0:\n", " return True\n", " else:\n", " return False\n", "\n", "print f(3)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True\n" ] } ], "prompt_number": 28 }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we give the function an array instead of just one value (e.g. 3), then Python will give an error because there is more than one element in `x`. The way to get around this is to **vectorize** the function. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "f_vec = np.vectorize(f)\n", "z = np.arange(-5, 6)\n", "z " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 29, "text": [ "array([-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5])" ] } ], "prompt_number": 29 }, { "cell_type": "code", "collapsed": false, "input": [ "f_vec(z)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 30, "text": [ "array([False, False, False, False, False, True, True, True, True,\n", " True, True], dtype=bool)" ] } ], "prompt_number": 30 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Instead of vectorizing the function, you can also make the function itself aware that it will be accepting vectors from the beginning. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f(x):\n", " return (x >=0)\n", "\n", "print f(3)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "True\n" ] } ], "prompt_number": 31 }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Scipy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that you know a little bit about [NumPy](numpy.html) and SciPy is a collection of mathematical and scientific modules built on top of NumPy. For example, SciPy can handle multidimensional arrays, integration, linear algebra, statistics and optimization. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Import SciPy\n", "import scipy" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 32 }, { "cell_type": "markdown", "metadata": {}, "source": [ "SciPy includes most of NumPy, so importing SciPy should be generally OK. The main SciPy module is made up of many [submodules containing specialized topics](http://docs.scipy.org/doc/scipy/reference/). \n", "\n", "Favorite SciPy submodules | What does it contain? \n", "--- | --- \n", "`scipy.stats` | [statistics](http://docs.scipy.org/doc/scipy/reference/tutorial/stats.html): random variables, probability density functions, cumulative distribution functions, survival functions\n", "`scipy.integrate` | [integration](http://docs.scipy.org/doc/scipy/reference/tutorial/integrate.html): single, double, triple integration, trapezoidal rule, Simpson's rule, differential equation solvers\n", "`scipy.signal` | [signal processing tools](http://docs.scipy.org/doc/scipy/reference/signal.html): signal processing tools such as wavelets, spectral densities, filters, B-splines\n", "`scipy.optimize` | [optimization](http://docs.scipy.org/doc/scipy/reference/optimize.html): find roots, curve fitting, least squares, etc \n", "`scipy.special` | [special functions](http://docs.scipy.org/doc/scipy/reference/tutorial/special.html): very specialized functions in mathematical physics e.g. bessel, gamma\n", "`scipy.linalg` | [linear algebra](http://docs.scipy.org/doc/scipy/reference/linalg.html): inverse of a matrix, determinant, Kronecker product, eigenvalue decomposition, SVD, functions for matrices (beyond those in `numpy.linalg`)\n", "\n", "If you want to import a SciPy submodule (e.g. the statistics submodule `scipy.stats`), use " ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy import stats" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 33 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### scipy.stats \n", "Let's dive a bit deeper in `scipy.stats`. The real utility of this submodule is to access probability distributions functions (pdfs) and standard statistical tests (e.g. $t$-test). \n", "\n", "#### Probability distribution functions\n", "There is a large collection of [continuous and discrete pdfs](http://docs.scipy.org/doc/scipy/reference/stats.html) in the `scipy.stats` submodule. The syntax to simulate random variables from a specific pdf is the name of the distribution followed by `.rvs`. To generate $n$=10 $N(0,1)$ random variables, " ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy.stats import norm\n", "x = norm.rvs(loc = 0, scale = 1, size = 1000)\n", "plt.hist(x)\n", "plt.title('Histogram of 1000 normal random variables')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 34, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 34 }, { "cell_type": "markdown", "metadata": {}, "source": [ "# More Pandas and Matplotlib\n", "\n", "## Motor Trend Car Road Tests Data\n", "\n", "The data was extracted from the 1974 Motor Trend US magazine, and comprises fuel consumption and 10 aspects of automobile design and performance for 32 automobiles (1973\u201374 models). This dataset is available on Github in the [2014_data repository](https://github.com/cs109/2014_data) and is called `mtcars.csv`. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reading in the mtcars data (CSV file) from the web\n", "\n", "This is a `.csv` file, so we will use the function `read_csv()` that will read in a CSV file into a pandas DataFrame. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "url = 'https://raw.githubusercontent.com/cs109/2014_data/master/mtcars.csv'\n", "mtcars = pd.read_csv(url, sep = ',', index_col=0)\n", "mtcars.head()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mpgcyldisphpdratwtqsecvsamgearcarb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 35, "text": [ " mpg cyl disp hp drat wt qsec vs am gear \\\n", "Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 \n", "Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 \n", "Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 \n", "Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 \n", "Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 \n", "\n", " carb \n", "Mazda RX4 4 \n", "Mazda RX4 Wag 4 \n", "Datsun 710 1 \n", "Hornet 4 Drive 1 \n", "Hornet Sportabout 2 " ] } ], "prompt_number": 35 }, { "cell_type": "code", "collapsed": false, "input": [ "# DataFrame with 32 observations on 11 variables\n", "mtcars.shape " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 36, "text": [ "(32, 11)" ] } ], "prompt_number": 36 }, { "cell_type": "code", "collapsed": false, "input": [ "# return the column names\n", "mtcars.columns" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 37, "text": [ "Index([u'mpg', u'cyl', u'disp', u'hp', u'drat', u'wt', u'qsec', u'vs', u'am', u'gear', u'carb'], dtype='object')" ] } ], "prompt_number": 37 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here is a table containing a description of all the column names. \n", "\n", "Column name | Description \n", "--- | --- \n", "mpg | Miles/(US) gallon\n", "cyl | Number of cylinders\n", "disp | Displacement (cu.in.)\n", "hp | Gross horsepower\n", "drat | Rear axle ratio\n", "wt | Weight (lb/1000)\n", "qsec | 1/4 mile time\n", "vs | V/S\n", "am | Transmission (0 = automatic, 1 = manual)\n", "gear | Number of forward gears\n", "carb | Number of carburetors\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# return the actual data inside the panadas data frame\n", "mtcars.values" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 38, "text": [ "array([[ 21. , 6. , 160. , 110. , 3.9 , 2.62 ,\n", " 16.46 , 0. , 1. , 4. , 4. ],\n", " [ 21. , 6. , 160. , 110. , 3.9 , 2.875,\n", " 17.02 , 0. , 1. , 4. , 4. ],\n", " [ 22.8 , 4. , 108. , 93. , 3.85 , 2.32 ,\n", " 18.61 , 1. , 1. , 4. , 1. ],\n", " [ 21.4 , 6. , 258. , 110. , 3.08 , 3.215,\n", " 19.44 , 1. , 0. , 3. , 1. ],\n", " [ 18.7 , 8. , 360. , 175. , 3.15 , 3.44 ,\n", " 17.02 , 0. , 0. , 3. , 2. ],\n", " [ 18.1 , 6. , 225. , 105. , 2.76 , 3.46 ,\n", " 20.22 , 1. , 0. , 3. , 1. ],\n", " [ 14.3 , 8. , 360. , 245. , 3.21 , 3.57 ,\n", " 15.84 , 0. , 0. , 3. , 4. ],\n", " [ 24.4 , 4. , 146.7 , 62. , 3.69 , 3.19 ,\n", " 20. , 1. , 0. , 4. , 2. ],\n", " [ 22.8 , 4. , 140.8 , 95. , 3.92 , 3.15 ,\n", " 22.9 , 1. , 0. , 4. , 2. ],\n", " [ 19.2 , 6. , 167.6 , 123. , 3.92 , 3.44 ,\n", " 18.3 , 1. , 0. , 4. , 4. ],\n", " [ 17.8 , 6. , 167.6 , 123. , 3.92 , 3.44 ,\n", " 18.9 , 1. , 0. , 4. , 4. ],\n", " [ 16.4 , 8. , 275.8 , 180. , 3.07 , 4.07 ,\n", " 17.4 , 0. , 0. , 3. , 3. ],\n", " [ 17.3 , 8. , 275.8 , 180. , 3.07 , 3.73 ,\n", " 17.6 , 0. , 0. , 3. , 3. ],\n", " [ 15.2 , 8. , 275.8 , 180. , 3.07 , 3.78 ,\n", " 18. , 0. , 0. , 3. , 3. ],\n", " [ 10.4 , 8. , 472. , 205. , 2.93 , 5.25 ,\n", " 17.98 , 0. , 0. , 3. , 4. ],\n", " [ 10.4 , 8. , 460. , 215. , 3. , 5.424,\n", " 17.82 , 0. , 0. , 3. , 4. ],\n", " [ 14.7 , 8. , 440. , 230. , 3.23 , 5.345,\n", " 17.42 , 0. , 0. , 3. , 4. ],\n", " [ 32.4 , 4. , 78.7 , 66. , 4.08 , 2.2 ,\n", " 19.47 , 1. , 1. , 4. , 1. ],\n", " [ 30.4 , 4. , 75.7 , 52. , 4.93 , 1.615,\n", " 18.52 , 1. , 1. , 4. , 2. ],\n", " [ 33.9 , 4. , 71.1 , 65. , 4.22 , 1.835,\n", " 19.9 , 1. , 1. , 4. , 1. ],\n", " [ 21.5 , 4. , 120.1 , 97. , 3.7 , 2.465,\n", " 20.01 , 1. , 0. , 3. , 1. ],\n", " [ 15.5 , 8. , 318. , 150. , 2.76 , 3.52 ,\n", " 16.87 , 0. , 0. , 3. , 2. ],\n", " [ 15.2 , 8. , 304. , 150. , 3.15 , 3.435,\n", " 17.3 , 0. , 0. , 3. , 2. ],\n", " [ 13.3 , 8. , 350. , 245. , 3.73 , 3.84 ,\n", " 15.41 , 0. , 0. , 3. , 4. ],\n", " [ 19.2 , 8. , 400. , 175. , 3.08 , 3.845,\n", " 17.05 , 0. , 0. , 3. , 2. ],\n", " [ 27.3 , 4. , 79. , 66. , 4.08 , 1.935,\n", " 18.9 , 1. , 1. , 4. , 1. ],\n", " [ 26. , 4. , 120.3 , 91. , 4.43 , 2.14 ,\n", " 16.7 , 0. , 1. , 5. , 2. ],\n", " [ 30.4 , 4. , 95.1 , 113. , 3.77 , 1.513,\n", " 16.9 , 1. , 1. , 5. , 2. ],\n", " [ 15.8 , 8. , 351. , 264. , 4.22 , 3.17 ,\n", " 14.5 , 0. , 1. , 5. , 4. ],\n", " [ 19.7 , 6. , 145. , 175. , 3.62 , 2.77 ,\n", " 15.5 , 0. , 1. , 5. , 6. ],\n", " [ 15. , 8. , 301. , 335. , 3.54 , 3.57 ,\n", " 14.6 , 0. , 1. , 5. , 8. ],\n", " [ 21.4 , 4. , 121. , 109. , 4.11 , 2.78 ,\n", " 18.6 , 1. , 1. , 4. , 2. ]])" ] } ], "prompt_number": 38 }, { "cell_type": "code", "collapsed": false, "input": [ "mtcars[25:] # rows 25 to end of data frame" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mpgcyldisphpdratwtqsecvsamgearcarb
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.9 1 1 4 1
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.7 0 1 5 2
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.9 1 1 5 2
Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.5 0 1 5 4
Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.5 0 1 5 6
Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.6 0 1 5 8
Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.6 1 1 4 2
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 39, "text": [ " mpg cyl disp hp drat wt qsec vs am gear carb\n", "Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.9 1 1 4 1\n", "Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.7 0 1 5 2\n", "Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.9 1 1 5 2\n", "Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.5 0 1 5 4\n", "Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.5 0 1 5 6\n", "Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.6 0 1 5 8\n", "Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.6 1 1 4 2" ] } ], "prompt_number": 39 }, { "cell_type": "code", "collapsed": false, "input": [ "# return index\n", "mtcars.index" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 40, "text": [ "Index([u'Mazda RX4', u'Mazda RX4 Wag', u'Datsun 710', u'Hornet 4 Drive', u'Hornet Sportabout', u'Valiant', u'Duster 360', u'Merc 240D', u'Merc 230', u'Merc 280', u'Merc 280C', u'Merc 450SE', u'Merc 450SL', u'Merc 450SLC', u'Cadillac Fleetwood', u'Lincoln Continental', u'Chrysler Imperial', u'Fiat 128', u'Honda Civic', u'Toyota Corolla', u'Toyota Corona', u'Dodge Challenger', u'AMC Javelin', u'Camaro Z28', u'Pontiac Firebird', u'Fiat X1-9', u'Porsche 914-2', u'Lotus Europa', u'Ford Pantera L', u'Ferrari Dino', u'Maserati Bora', u'Volvo 142E'], dtype='object')" ] } ], "prompt_number": 40 }, { "cell_type": "code", "collapsed": false, "input": [ "mtcars.ix['Maserati Bora'] # access a row by an index" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 41, "text": [ "mpg 15.00\n", "cyl 8.00\n", "disp 301.00\n", "hp 335.00\n", "drat 3.54\n", "wt 3.57\n", "qsec 14.60\n", "vs 0.00\n", "am 1.00\n", "gear 5.00\n", "carb 8.00\n", "Name: Maserati Bora, dtype: float64" ] } ], "prompt_number": 41 }, { "cell_type": "code", "collapsed": false, "input": [ "# What other methods are available when working with pandas DataFrames?\n", "# type 'mtcars.' and then click \n", "# mtcars.\n", "\n", "# try it here" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 42 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Exploratory Data Analysis (EDA)\n", "\n", "Even though they may look like continuous variabes, `cyl`, `vs`, `am`, `gear` and `carb` are integer or categorical variables. First, let's look at some summary statistics of the mtcars data set. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "mtcars.describe()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
mpgcyldisphpdratwtqsecvsamgearcarb
count 32.000000 32.000000 32.000000 32.000000 32.000000 32.000000 32.000000 32.000000 32.000000 32.000000 32.0000
mean 20.090625 6.187500 230.721875 146.687500 3.596563 3.217250 17.848750 0.437500 0.406250 3.687500 2.8125
std 6.026948 1.785922 123.938694 68.562868 0.534679 0.978457 1.786943 0.504016 0.498991 0.737804 1.6152
min 10.400000 4.000000 71.100000 52.000000 2.760000 1.513000 14.500000 0.000000 0.000000 3.000000 1.0000
25% 15.425000 4.000000 120.825000 96.500000 3.080000 2.581250 16.892500 0.000000 0.000000 3.000000 2.0000
50% 19.200000 6.000000 196.300000 123.000000 3.695000 3.325000 17.710000 0.000000 0.000000 4.000000 2.0000
75% 22.800000 8.000000 326.000000 180.000000 3.920000 3.610000 18.900000 1.000000 1.000000 4.000000 4.0000
max 33.900000 8.000000 472.000000 335.000000 4.930000 5.424000 22.900000 1.000000 1.000000 5.000000 8.0000
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 43, "text": [ " mpg cyl disp hp drat wt \\\n", "count 32.000000 32.000000 32.000000 32.000000 32.000000 32.000000 \n", "mean 20.090625 6.187500 230.721875 146.687500 3.596563 3.217250 \n", "std 6.026948 1.785922 123.938694 68.562868 0.534679 0.978457 \n", "min 10.400000 4.000000 71.100000 52.000000 2.760000 1.513000 \n", "25% 15.425000 4.000000 120.825000 96.500000 3.080000 2.581250 \n", "50% 19.200000 6.000000 196.300000 123.000000 3.695000 3.325000 \n", "75% 22.800000 8.000000 326.000000 180.000000 3.920000 3.610000 \n", "max 33.900000 8.000000 472.000000 335.000000 4.930000 5.424000 \n", "\n", " qsec vs am gear carb \n", "count 32.000000 32.000000 32.000000 32.000000 32.0000 \n", "mean 17.848750 0.437500 0.406250 3.687500 2.8125 \n", "std 1.786943 0.504016 0.498991 0.737804 1.6152 \n", "min 14.500000 0.000000 0.000000 3.000000 1.0000 \n", "25% 16.892500 0.000000 0.000000 3.000000 2.0000 \n", "50% 17.710000 0.000000 0.000000 4.000000 2.0000 \n", "75% 18.900000 1.000000 1.000000 4.000000 4.0000 \n", "max 22.900000 1.000000 1.000000 5.000000 8.0000 " ] } ], "prompt_number": 43 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Using conditional statements\n", "\n", "To check if `any` or `all` elements in an array meet a certain criteria, use `any()` and `all()`. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "(mtcars.mpg >= 20).any()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 44, "text": [ "True" ] } ], "prompt_number": 44 }, { "cell_type": "code", "collapsed": false, "input": [ "(mtcars > 0).all()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 45, "text": [ "mpg True\n", "cyl True\n", "disp True\n", "hp True\n", "drat True\n", "wt True\n", "qsec True\n", "vs False\n", "am False\n", "gear True\n", "carb True\n", "dtype: bool" ] } ], "prompt_number": 45 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's look at the distribution of `mpg` using a histogram." ] }, { "cell_type": "code", "collapsed": false, "input": [ "mtcars['mpg'].hist()\n", "plt.title('Distribution of MPG')\n", "plt.xlabel('Miles Per Gallon')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 46, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAWwAAAEZCAYAAACzcB/LAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHMpJREFUeJzt3Hl0VOX9x/HPTBZiDIRVYEIQKEJBQIxCpdWSCtiCYlGK\n2pYliqaaoqgVi0uIQekpWpXDARFU9ABWLe1RUaEoCHpyRJamLBaILEExgYj8SNizMM/vD07mJmGS\nmdxkZrjk/fqLO/fOfZ77zZMPd76ZGZcxxggAcN5zR3oCAIDgENgA4BAENgA4BIENAA5BYAOAQxDY\nAOAQBLYDPPXUU7r44ovl8XjUtWtX/fnPf9bJkyf9HltYWKjU1NRa9wfD7XZr7969tp9fafr06Zo3\nb945j6empuq1115r8PklqUuXLvr000/rPKYxahIur7/+ujp37qzk5GSNGDGiXs9NTU1V27ZtVVZW\nJknasGGD3G63srOzfcekpaUpMTFRycnJSk5O1u23367CwsJq59mwYYOGDBmitm3bqmvXrhowYIBW\nrFjR8ItDgxHYDuByuTR69GgVFhbqyy+/1N69ezVs2DBVVFScc6zH49HatWsVHx9va6zKt+U3xtvz\np02bpvvuu++cx10ul1wuV4PPX3muQHNtaE3C6fnnn9ezzz6r/fv3a/ny5fV+flxcnP71r39Jkl55\n5RV5PJ5qtXa5XJo8ebL279+v3bt3q0WLFvr973/v219YWKihQ4dqzJgxKioqUn5+vpYvX64BAwY0\n/OLQYAS2AxhjfKHUvn17vfXWWzp06JDefPNN3zFr165VcnKyPB6P3G63vF7vOedZtmyZBgwY4LuD\ne/jhh6vtX7JkiTp37ixJuu6665ScnKxHHnmk2jGV4yxbtky9evWSx+PRtGnTqh1z8803Kzk5WQkJ\nCcrMzPR7Td9++61Gjhypjh07qn///lq/fr1v3759+865hrS0tGrnqpzHd999p9/+9re+u0V/c62r\nJitXrtTVV1+tTp06qW/fvvr73/9ebX9aWpqmTJmihx56SN27d5fH49E777zj95rqsmTJEvXt21ed\nOnXSgAEDtGrVqmr7x40bp+TkZOXl5emBBx5QcnKyxo8fX68xXC6XJkyYoNdee00nTpzQhg0blJqa\nWut/aM2aNVNGRoZyc3N9j73wwgu64YYbdO+99yoqKkqS1K5dO7Vt27aeV4yQMDjvZWVlmbFjx1Z7\nbOrUqeZ3v/vdOcfu27fPuFwuc+bMmWqPHz9+3MTExJjVq1f7Hjt69Kjf8Vwul9mzZ4/ffWvWrDHx\n8fHm1ltv9T3/2LFjfo9NS0szmZmZ5zw+ePBgc9VVV5n9+/cbY4yZNWuW8Xg85vTp08YYY/Lz88+5\nhtrO1aVLl2rX5E9tNcnNzTWtW7c269atM8YYs337dpOUlGSWL1/uO2bChAnG4/GYTz75xBhjzGuv\nvWY6depU53g1vf/++yY5Odnk5eUZY4zJyckxrVq1Mlu3brV1PbVJTU01r776qhk2bJiZOnWqmTFj\nhhk7dqx56qmnfMekpaWZJ5980hhjzMmTJ839999vbrnlFt/+X/ziF2bWrFm2xkfocYftUB6PR4cO\nHTrncVPH3VT79u21atUqX3+6efPmtsaOi4vTW2+95Xt+QkJCrcf6m4/L5VJGRoY6deokSXrggQdk\njNG6devqHLe2awuktuctWLBAEyZM0DXXXCNJ6tWrl/70pz9pzpw51eY6ceJEDR06VNLZVx4FBQX1\nGn/evHl65JFH1KNHD0nSz372M40bN04vv/yyncsJ6J577tHcuXN15513nrPPGKM5c+aoa9eu6t+/\nv86cOaOFCxf69hcUFPh+rl9//bW6du2qpKQkjRw5MiRzRf0Q2A5VUFCgdu3aBX18dHS01q9fr6io\nKI0ePVo9e/a09dJekuLj4xUbG2vruf64XC4lJSXphx9+aLRzBuPbb79V9+7dqz3WvXt3ffPNN9Ue\nqxr4MTExkuS3vdLQcRqDy+XSmDFjdPToUXXs2NHv/vvvv1/5+fnKy8vT3Llz1bJlS9/+Fi1aqKio\nSJLUo0cP5efna/r06Tp+/HijzxX1R2A7QM0/0JWXl+vdd9/VsGHD6nUej8ejp59+Wv/973+1ZMkS\npaWlhSQ0glFeXl7t3/v27fP1z93us8uyaijavbuuS+fOnbVz585qj+3cuVNdunRx5DjBqquWP/nJ\nT7RmzZqgj0d4EdgOUPUXpqioSGPHjlXr1q01duzYep2n6lv1Kioq5HK5/N4pt2zZUps2bZJ09k6+\nPneTtc275uMzZszQ119/7ft3hw4dNHDgQEnSJZdcotjYWH311VeSpI0bN2rlypV+31nSqlUr31wP\nHz6sU6dOBT2/9PR0LVq0SDk5OZKkbdu26YUXXlBGRkbAa6iPe++9V88//7y2b98uSfrss8+0ZMkS\n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\n9NNaunRpuKYqSWrWrJnvexgWLlyoZcuW6Te/+U3Ixtu/f7/ef/99ZWVlKSEhQcYYlZaWBvXckSNH\nauTIkRo/fvw5+/r06aM+ffooOzu7saeMCxSBDblcLnXp0kVff/21ioqKqn0JT1lZmZ555hmdPHlS\nbdu21dSpU4M+7969e7V48WJ5vV4lJCToD3/4g1q0aCFJ+v7777VgwQKVlZWptLRUo0eP1sCBA+s9\n9/79++vzzz8PesyZM2dq4MCB2rJli5o1a6asrKyAY3z66acaPny471sZXS6X4uLifPvXrVunNWvW\n6NSpUyorK9PkyZPl8XjqfS01ffjhh/riiy/kcrl06aWXKi0tzfdKYty4cZowYYLWr1+voqIi/fGP\nf1TPnj0bPCbObwQ2JEmDBw/W3/72Nw0fPly5ubm+x2NjYzV9+nRt375dy5YtC/p8FRUVmjdvnh5/\n/HG1atVKX375pd58803dd999kqQVK1aof//+uummm2zP2ev1atOmTb7WTaAxpbPfW9G5c2fdfvvt\nQY9TVFSkAQMG1Lq/T58+vvbIRx99pA8//FDp6ek2r+qsrVu3asOGDZo+fbqio6P1xhtv6N133/XN\nu6KiQi1atNATTzyhtWvX6uOPPyawmwACG5KkpKQkjRo1SgMGDKgW2JXq+w0GBQUF+uGHHzR79mxJ\nZ8O1ap950KBBeuWVV3To0CENHDhQl19+edDnLisrU3Z2towx6tu3r4YNGxbUmNLZL6QKpvdcmyVL\nligvL09t2rTRgw8+KElq3ry59u3bp2+++UaFhYU6cuSI7fNX2rx5s1JTUxUdffZX9Je//KVmz57t\nC+yYmBjfK5J27drpxIkTDR4T5z8CGz6DBw9utHNFRUXpkksuqbXl0KNHD82cOVN5eXn66KOPtH79\net11111BnTs2NtbveQONaVeHDh1UUFCg3r17a+zYsb62S6WXXnpJknTNNdeoW7duOnz4cKOMW/Xb\n3PjKH0i8rQ8h4vF4VF5erg0bNvgeqxo6Xq9XbrdbvXr10s0336xdu3aFfEy7rr/+eq1YsUJHjx6V\ndLYdUdXGjRt19913q3///tq7d2+Dx5OkK6+8Up999pnKy8slnW0hpaSkNMq54VzcYUMulyuoY+o6\nbuXKldq0aZMyMzMVHR0tt9utRx99VK+//rqWLVsml8uln/70pxo+fLiks2+T+/jjj+V2n71nmDhx\nYoPnG2jMYK+1pk6dOunWW2/VjBkzFBMTI2OMrw0jSaNHj9aUKVPUpk0bXX311X5Du6ysTNOmTdN1\n111X7bmVXn75ZV122WW65557JEl9+/b1vd3P7Xbr0ksv1ahRo/xeR6CfDS4cfL0qADgELREAcAgC\nGwAcgsAGAIcgsAHAIQhsAHAIAhsAHILABgCHILABwCH+H9nv5v9VrucYAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 46 }, { "cell_type": "code", "collapsed": false, "input": [ "# Relationship between cyl and mpg\n", "plt.plot(mtcars.cyl, mtcars.mpg, 'o')\n", "plt.xlim(3, 9)\n", "plt.xlabel('Cylinders')\n", "plt.ylabel('MPG')\n", "plt.title('Relationship between cylinders and MPG')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 47, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nIjvzvyTZAihEfKubAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 47 }, { "cell_type": "code", "collapsed": false, "input": [ "# Relationship between horsepower and mpg\n", "plt.plot(mtcars.hp, mtcars.mpg, 'o')\n", "plt.xlabel('Horsepower')\n", "plt.ylabel('MPG')\n", "plt.title('Relationship between horsepower and MPG')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 48, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nIaOaUMJ+AAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 48 }, { "cell_type": "code", "collapsed": false, "input": [ "from pandas.tools.plotting import scatter_matrix\n", "scatter_matrix(mtcars[['mpg', 'hp', 'cyl']], \n", " figsize = (10, 6), alpha = 1, diagonal='kde')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 49, "text": [ "array([[,\n", " ,\n", " ],\n", " [,\n", " ,\n", " ],\n", " [,\n", " ,\n", " ]], dtype=object)" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nYII=\n", "text": [ "" ] } ], "prompt_number": 49 }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Working on the command line\n", "\n", "Now we will discuss working on the command line. For this section and the next section on git and GitHub we will use slides from the [Data Science Specialization](https://github.com/DataScienceSpecialization/courses/tree/master/01_DataScientistToolbox) course on Coursera. These slides are available from \n", "\n", "* [Command line interface](https://github.com/DataScienceSpecialization/courses/tree/master/01_DataScientistToolbox/02_03_commandLineInterface) \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Introduction to git and GitHub\n", "\n", "Next we introduce git and GitHub. For this section we will also use slides from [Data Science Specialization](https://github.com/DataScienceSpecialization/courses/tree/master/01_DataScientistToolbox) course on Coursera. These slides are available from \n", "\n", "* [Introduction to git](https://github.com/DataScienceSpecialization/courses/tree/master/01_DataScientistToolbox/02_04_01_introToGit) \n", "* [Github](https://github.com/DataScienceSpecialization/courses/tree/master/01_DataScientistToolbox/02_05_github)\n", "* [Create a new repo](https://github.com/DataScienceSpecialization/courses/tree/master/01_DataScientistToolbox/02_06_01_createNewRepo)\n", "* [Fork a repository](https://github.com/DataScienceSpecialization/courses/tree/master/01_DataScientistToolbox/02_06_02_forkRepo)\n", "* [Basic git commands](https://github.com/DataScienceSpecialization/courses/tree/master/01_DataScientistToolbox/02_07_01_basicGitCommands)\n", "* [git workflow](https://github.com/DataScienceSpecialization/courses/tree/master/01_DataScientistToolbox/02_07_02_gitWorkflow)\n", "\n", "Other useful resources for learning git and github: \n", "* [Interactive tutorial to learn git (only takes under 15 mins to complete!)](https://try.github.io/levels/1/challenges/1)\n", "* [Github guides](https://guides.github.com)\n", "* [git - the simple guide](http://rogerdudler.github.io/git-guide/)\n", "* [Github Youtube videos](https://www.youtube.com/user/GitHubGuides)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Your turn\n", "\n", "* If you don't have a github account yet, [register for a github account](https://github.com/join)\n", "* Use `git clone` to clone the [CS109 2014 course repository](https://github.com/cs109/2014) on Github\n", "* Use `git clone` to clone the [CS109 2014 data repository](https://github.com/cs109/2014_data) on Github\n", "\n" ] }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }