{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "# import * is a personal choice\n", "from ggplot import *\n", "# our trusty old friends\n", "import pandas as pd\n", "import numpy as np" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Built in datasets" ] }, { "cell_type": "code", "collapsed": false, "input": [ "meat.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", "
datebeefvealporklamb_and_muttonbroilersother_chickenturkey
01944-01-01 751 85 1280 89NaNNaNNaN
11944-02-01 713 77 1169 72NaNNaNNaN
21944-03-01 741 90 1128 75NaNNaNNaN
31944-04-01 650 89 978 66NaNNaNNaN
41944-05-01 681 106 1029 78NaNNaNNaN
\n", "

5 rows \u00d7 8 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ " date beef veal pork lamb_and_mutton broilers other_chicken \\\n", "0 1944-01-01 751 85 1280 89 NaN NaN \n", "1 1944-02-01 713 77 1169 72 NaN NaN \n", "2 1944-03-01 741 90 1128 75 NaN NaN \n", "3 1944-04-01 650 89 978 66 NaN NaN \n", "4 1944-05-01 681 106 1029 78 NaN NaN \n", "\n", " turkey \n", "0 NaN \n", "1 NaN \n", "2 NaN \n", "3 NaN \n", "4 NaN \n", "\n", "[5 rows x 8 columns]" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "diamonds.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", "
caratcutcolorclaritydepthtablepricexyz
0 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
1 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
2 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
3 0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63
4 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
\n", "

5 rows \u00d7 10 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ " carat cut color clarity depth table price x y z\n", "0 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43\n", "1 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31\n", "2 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31\n", "3 0.29 Premium I VS2 62.4 58 334 4.20 4.23 2.63\n", "4 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75\n", "\n", "[5 rows x 10 columns]" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "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", " \n", " \n", " \n", " \n", " \n", " \n", "
namempgcyldisphpdratwtqsecvsamgearcarb
0 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
1 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
2 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
3 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
4 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
\n", "

5 rows \u00d7 12 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ " name mpg cyl disp hp drat wt qsec vs am gear \\\n", "0 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 \n", "1 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 \n", "2 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 \n", "3 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 \n", "4 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 \n", "\n", " carb \n", "0 4 \n", "1 4 \n", "2 1 \n", "3 1 \n", "4 2 \n", "\n", "[5 rows x 12 columns]" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "pageviews.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", "
date_hourpageviews
02013-02-11 21:00:00 8860.982383
12013-02-11 22:00:00 8637.474753
22013-02-11 23:00:00 9020.593099
32013-02-12 00:00:00 8437.500380
42013-02-12 01:00:00 9157.399672
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ " date_hour pageviews\n", "0 2013-02-11 21:00:00 8860.982383\n", "1 2013-02-11 22:00:00 8637.474753\n", "2 2013-02-11 23:00:00 9020.593099\n", "3 2013-02-12 00:00:00 8437.500380\n", "4 2013-02-12 01:00:00 9157.399672" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The API\n", "\n", "### `ggplot`\n", "`ggplot`'s API revolves around the `ggplot` class. It's class that behaves much more like a function (you don't really operate on `ggplot` methods). " ] }, { "cell_type": "code", "collapsed": false, "input": [ "?ggplot" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "ggplots take 2 arguments: a data frame and accompanying \"aesthetics\" or `aes`. These are equivalent." ] }, { "cell_type": "code", "collapsed": false, "input": [ "p = ggplot(aes(x='wt'), data=mtcars)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "p = ggplot(mtcars, aes(x='wt'))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "A ggplot is a \"base layer\". It won't create any aesthetics but think of it as a canvas. Watch what happens when you render it." ] }, { "cell_type": "code", "collapsed": false, "input": [ "p" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n1rVaLU6dOhXd3d0xMTERv/rVr2y9zaxn57eu+81vfhN33nlnm07KjVrP1leuXFl+m9v+/v6Ym5tr\n44nZqPVs/cILL8Ttt98e999/f8zNzcWPfvSjuOeee6JcLrfx5GTdd9998dGPfjSeeuqpd/38Rpps\n1V/js1HeArE41rP1+973vuju7o6I61vX6/V2HJUbsJ6dIyJ+//vfx4EDB2LPnj1tOCWbYT1bv/TS\nS/HBD35w+Z3K7L09rWfrvr6+WFhYiIiIhYWF6OnpEY/b0P79+5f/O/xuNtJkWxKQ7/YWiDMzMyuu\n+V9vgcj2sp6t3+4Pf/jDO/5WPze/9excr9fj5Zdfjo985COtPh6baD1bT01NxZUrV+JnP/tZ/PSn\nP13+XcBsL+vZemRkJP75z3/G97///fjJT34Sn/vc51p9TFpgI022JQF5o2+ByPaR2frVV1+NP/7x\nj/HZz352C0/EVljPzmfOnIn7778/SqVS+Lt529d6tr527Vr84x//iC9/+cvxla98JcbHx+Nf//pX\nC07HZlrP1r/73e/itttui+9+97vxzW9+M5577rnl70hSbFvyM5A3+haIbB/r3fH111+PX/7yl3Hy\n5Mno6elp5RHZBOvZ+e9//3s88cQTERHx5ptvxsWLF6OjoyPuvvvulp6VG7Oerfv7+2P37t3R2dkZ\nnZ2dsX///nj99dfjlltuafVxuQHr2fq1116LT3/60xERyy93v/HGG/He9763pWdla22kybbkO5A3\n+haIbB/r2frf//53/OIXv4jPf/7z/gOzTa1n50cffXT5nwMHDsTx48fF4za03v///utf/xqNRiOu\nXr0ak5OT3qp2G1rP1rfeemv8+c9/jojr75v8xhtvRK1Wa8dx2UIbabIt+z2Qb/1qgLfeAvFTn/rU\nirdAjIh47rnn4uLFi8tvgbhv376tOApbbK2tn3nmmbhw4cLyz9p0dHTEN77xjXYemQ1Yz7/Tb3n6\n6afjrrvu8mt8tqn1bP3888/H//3f/0WpVIqRkZH42Mc+1s4js0FrbT03NxfPPPNMXL58OZrNZhw+\nfDjuueeeNp+arCeeeCL+8pe/xJtvvhm9vb3xmc98JhqNRkRsvMn8InEAAFK25CVsAAB2LgEJAECK\ngAQAIEVAAgCQIiABAEgRkAAApAhIAABS/h/62YH95FMTSgAAAABJRU5ErkJggg==\n", "text": [ "" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `aes`\n", "Aesthetics or `aes` define how ggplot with extract data from your data frame and render it. Think of it as the instructions for creating x, y, color, etc. components.\n", "\n", "`aes` is just a dictionary with keys being an aesthetic property and values being strings or formulas--for more on formulas read [this]( http://patsy.readthedocs.org/en/v0.1.0/formulas.html)--relating to data in your data frame." ] }, { "cell_type": "code", "collapsed": false, "input": [ "aes(x='date', y='price')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "{'y': 'price', 'x': 'date'}" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "# shorthand\n", "aes('date', 'price')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "{u'y': 'price', u'x': 'date'}" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "# shorthand\n", "aes('date', 'price', 'name')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ "{u'y': 'price', u'x': 'date', u'color': 'name'}" ] } ], "prompt_number": 11 }, { "cell_type": "code", "collapsed": false, "input": [ "# formula\n", "aes(x='date', y='price', color='date * price', shape='factor(name)')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "{'color': 'date * price', 'y': 'price', 'shape': 'factor(name)', 'x': 'date'}" ] } ], "prompt_number": 12 }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Your first `ggplot`\n", "\n", "So taking everything that we've learned, let's use the `mtcars` dataset to plot the relationship between car weight (`wt`) and miles per gallon (`mpg`). First create a `ggplot` object with the proper `aes` and name it `p`." ] }, { "cell_type": "code", "collapsed": false, "input": [ "p = ggplot(aes(x='wt', y='mpg'), data=mtcars)\n", "p" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n1rVaLU6dOhXd3d0xMTERv/rVr2y9zaxn57eu+81vfhN33nlnm07KjVrP1leuXFl+m9v+/v6Ym5tr\n44nZqPVs/cILL8Ttt98e999/f8zNzcWPfvSjuOeee6JcLrfx5GTdd9998dGPfjSeeuqpd/38Rpps\n1V/js1HeArE41rP1+973vuju7o6I61vX6/V2HJUbsJ6dIyJ+//vfx4EDB2LPnj1tOCWbYT1bv/TS\nS/HBD35w+Z3K7L09rWfrvr6+WFhYiIiIhYWF6OnpEY/b0P79+5f/O/xuNtJkWxKQ7/YWiDMzMyuu\n+V9vgcj2sp6t3+4Pf/jDO/5WPze/9excr9fj5Zdfjo985COtPh6baD1bT01NxZUrV+JnP/tZ/PSn\nP13+XcBsL+vZemRkJP75z3/G97///fjJT34Sn/vc51p9TFpgI022JQF5o2+ByPaR2frVV1+NP/7x\nj/HZz352C0/EVljPzmfOnIn7778/SqVS+Lt529d6tr527Vr84x//iC9/+cvxla98JcbHx+Nf//pX\nC07HZlrP1r/73e/itttui+9+97vxzW9+M5577rnl70hSbFvyM5A3+haIbB/r3fH111+PX/7yl3Hy\n5Mno6elp5RHZBOvZ+e9//3s88cQTERHx5ptvxsWLF6OjoyPuvvvulp6VG7Oerfv7+2P37t3R2dkZ\nnZ2dsX///nj99dfjlltuafVxuQHr2fq1116LT3/60xERyy93v/HGG/He9763pWdla22kybbkO5A3\n+haIbB/r2frf//53/OIXv4jPf/7z/gOzTa1n50cffXT5nwMHDsTx48fF4za03v///utf/xqNRiOu\nXr0ak5OT3qp2G1rP1rfeemv8+c9/jojr75v8xhtvRK1Wa8dx2UIbabIt+z2Qb/1qgLfeAvFTn/rU\nirdAjIh47rnn4uLFi8tvgbhv376tOApbbK2tn3nmmbhw4cLyz9p0dHTEN77xjXYemQ1Yz7/Tb3n6\n6afjrrvu8mt8tqn1bP3888/H//3f/0WpVIqRkZH42Mc+1s4js0FrbT03NxfPPPNMXL58OZrNZhw+\nfDjuueeeNp+arCeeeCL+8pe/xJtvvhm9vb3xmc98JhqNRkRsvMn8InEAAFK25CVsAAB2LgEJAECK\ngAQAIEVAAgCQIiABAEgRkAAApAhIAABS/h/62YH95FMTSgAAAABJRU5ErkJggg==\n", "text": [ "" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 30, "text": [ "" ] } ], "prompt_number": 30 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's (quite literally) add a scatterplot (`geom_point`) to our plot. We'll get into more detail on how this works later." ] }, { "cell_type": "code", "collapsed": false, "input": [ "p + geom_point()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nLDFrp3DanCVm7SQul6tV27Xqt2D+/Pn6xS9+od/85jfq0aOH9u7dqzvvvFO33367otFofDvTxTM9\nPV3V1dV8SkpyXq9XoVBItbW1zDqJOXXOErN2CqfNWWLWTuL1elu1XasOnbemQLpcLkUikVa96Klg\nd3zy49CLMzh1zhKzdgqnzVli1k6S0EPnZWVl37mLtBU9FQAAAA7UqqIZCoX0hz/8QR988IFqamri\n610ul9atW2csHAAAANqvVhXNmTNnKhqN6vzzz1d6enp8fWtPBAUAAIDztKpovvfee/riiy+OuwsH\nAAAA8F1a9TXxkSNHatu2baazAAAAIIm0ao/mkiVLNGnSJI0YMUI5OTnxLwC5XC7ddtttRgMCAACg\nfWpV0Zw3b54OHDigzz//XFVVVaYzAUktEomooqJCmZmZnI4CAEhqrSqay5Yt0/bt29WtWzfTeYCk\ntnPnTl1zzTWqqKhQIBDQvHnzNHnyZLtjAQBgRKvO0ezdu3errwAP4Lvdcsst+vTTT3X48GHt2rVL\nd999tyU3OmiNTz/9VBdeeKGmTJmi//7v/24zuU5FU1OT/uu//ktTpkzRzJkztXPnTrsjAYCjtGqP\n5uWXX65p06bp+uuvV05OToufjR071kgwIBl98zq0klRXV6fa2loFg0GbEv0jx5w5c7Rjxw5J0scf\nf6z09HT95je/sTXXqbr11lu1bNmy+HnlV199tV577TU+OAOARVpVNB999FG5XC7NmzfvuJ/t2rUr\n4aGAZJWXl6ePPvoovty1a1cFAgEbE31t9+7dOnjwYHw5HA7r448/tjFRYnz22Wct7l72+eef69Ch\nQzr99NNtTAUAztGqorl7927DMQBnePDBB+X1elVWVqaOHTvqgQceaBM3PujatasyMzNVV1cXX5eV\nlWVjosT49p7iQCCgTp062ZQGAJynVUUTQGKkp6fr97//vd0xjpOVlaXrrrtOTzzxhBoaGtSjRw/d\nfffddsc6Zffff7+uuOIKHTp0SB06dNANN9ygjIwMu2MBgGNQNIF2KhKJ6K677tJHH32krKws3XXX\nXae0F/Lyyy/XxRdfrNraWmVmZp50T+uaNWv07LPPyuVy6T//8z81fPjw7/3apuTk5Gjt2rX66quv\nFAgElJqaanckAHAUiibQTv3617/W0qVLFQ6HJUkHDhzQmjVrTulQfFpaWquu7blhwwbdeuut+vLL\nLyVJO3bs0LJly9S7d+/v/dqmuFwuDpcDgE1adXkjAG3Phx9+GC+ZkrR//3599dVXlrz2ihUr4iVT\nkg4ePKi1a9da8toAgPaDogm0U+np6cct+/1+S167W7duLfacpqamqkePHpa8NgCg/aBoAu3UHXfc\nob59+6pDhw7q1q2b5syZY9ktLX/5y19q5MiRCgQCCoVCmjBhgs477zxLXhsA0H5wjibQTvXv31+v\nvvqqdu3apZycHHXu3Nmy105LS9Pzzz+vnTt3yuPxqFevXm3iMk0AgLaFogm0Yx06dNCZZ55py2u7\n3W7l5+fb8toAgPaBQ+cAAAAwgqIJAAAAIyiaAAAAMIKiCQAAACMs+zLQ0aNHVVxcrNraWknSkCFD\ndPbZZ6uurk4rVqzQkSNHFAqFNHPmTPl8PqtiAQAAwBDLiqbb7dbEiROVm5urxsZGLVq0SH369NEH\nH3ygvLw8jRo1Shs2bNCGDRs0fvx4q2IBAADAEMsOnQcCAeXm5kr6+hp8nTt3VlVVlbZv366zzjpL\nkjRw4EBt27bNqkgAAAAwyJbraFZWVqq8vFynnXaaamtr47fN8/v98UPrVVVVqqmpafE4v98vj8dZ\nl/5MSUmR1+u1O4aljs2YWSc3p85ZYtZO4bQ5S8zaSVo7Y8t/ExobG7Vs2TKde+65x90u75t3Ftm4\ncaNKSkpa/LywsFBjxoyxJCfsl5mZaXcEWIA5Owezdg5mjWMsLZqRSETLli3TgAED1L9/f0lSRkaG\nqqurFQgEVF1drYyMDElff1mooKCgxeP9fr8qKysVDoetjG2rtLQ0NTY22h3DUh6PR5mZmczaYuXl\n5QqHw+revbslt5N06pwl+2dtNafO2mlzlpi1kxyb9Um3syCLJCkWi2n16tXKzs7WiBEj4usLCgq0\nZcsWjRo1Sps3b1a/fv0kScFgUMFg8LjnqaioUHNzs1WxbefxeBz1fr8pHA476r3bNetYLKbrr79e\nb775pmKxmAYOHKgnn3zSskNfTpuz5Ny/a6fN2qlzlpg1/sGyorl37159+OGHysnJ0YIFCyRJ48aN\n06hRo7R8+XJt2rQpfnkjANZZs2aNXnnllfin8ZKSEi1YsEDXXXedzckAAO2dZUWzZ8+emj9//gl/\nNmvWLKtiAPiWnTt3tjjkE4lEVFZWZmMiAECy4M5AgMNNnjxZXbt2jS936tRJ06dPtzERACBZOOv6\nAwCO069fP917771auHChYrGYLrroIv3kJz+xOxYAIAlQNAGoqKhIRUVFdscAACQZDp0DQILs27dP\nl112mWbMmKE77rhD0WjU7kjfyyuvvKILL7xQF154oVavXm13HADtGHs0ASABGhsbdcUVV+jTTz+V\nJG3atEkul0u33nqrzcn+NZs3b9avfvUrffHFF5Kk0tJS5ebmatiwYTYnA9AesUcTABJg3759OnDg\nQHy5ublZH3zwgY2Jvp+XXnopXjIl6fDhw+zVBPC9UTQBIAGysrLk9/tbrAsEAjal+f769Omj1NTU\n+LLH41FeXp6NiQC0ZxRNAEiArKwsXX311erevbtCoZDOPPNM3XXXXXbH+pf99Kc/1fjx49WpUydl\nZWVp3Lhxmj17tt2xALRTnKMJAAly1VVX6aKLLtJXX32l0047TV6v1+5I/zK3262FCxfq0KFDisVi\n6tatm1wul92xALRT7NEEgASJxWLasGGD1q5dq71799od53tzuVzq1q2bunfvTskEcErYowkACXL9\n9dfH7xu/ZMkSPfTQQzrnnHPsjgUAtmGPJgAkwIEDB/S3v/0tft/4Q4cO6ZFHHrE5FQDYi6IJAAnQ\n3Nx83AXaY7GYTWkAoG2gaAJAApx++un64Q9/KLf76/+sZmVlaebMmTanAgB7cY4mACSA2+3W008/\nrT/84Q/at2+fpk+frjFjxtgdCwBsRdEEgARJTU3VTTfdZHcMAGgzOHQOAAAAIyiaAJBgsVhMDz/8\nsGbOnKnLL79ce/bssTsSANiCQ+cAkGCPPPKIHnnkETU0NEiS9u/fr7Vr18rn89mcDACsxR5NAEiw\nd955J14yJWnPnj0qLS21MREA2IOiCQAJ5vf7WywHAgF16tTJpjQAYB+KJgAkyHvvvafJkydr27Zt\nCgaD8vv9ysnJ0aWXXqru3bvbHQ8ALMc5mgCQAHV1dbrxxhtVVlYWXzdp0iTddddd6tKli43JAMA+\n7NEEgAQ4cOCADh8+3GJdZWUlJROAo1E0ASABunbtqszMzBbrcnJybEoDAG0DRRMAEiAQCOjXv/61\nzjjjDPXo0UOjRo3Svffea3csALAV52gCQIJMmjRJkyZNUjQaldvN53gAcMVisZjdIVqroaFBDQ0N\nakeRT5nb7VY0GrU7hqVcLpdSU1PV1NTErJOYU+csWTfrTz75RI899ph8Pp/mzZtn2yWWnDprp/1N\n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\n/wPupitjAMddIwAAAABJRU5ErkJggg==\n", "text": [ "" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 31, "text": [ "" ] } ], "prompt_number": 31 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }