{
 "metadata": {
  "name": "Part 5 - All Together Now"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Using DirectView and LoadBalancedView together"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "We mentioned that you can use any number of views of any sort simultaneously.\n",
      "\n",
      "The most common model for doing this is to use a DirectView to initialise the engine namespaces\n",
      "(either defining functions and variables, or loading datasets) with a DirectView,\n",
      "and then submitting work as tasks via the LoadBalancedView.\n",
      "\n",
      "For this example, we are going to define a few functions for fetching data and getting a simple summary on some stocks,\n",
      "then we are going to run those functions on a series of stocks in a load-balanced way."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "The usual boilerplate:"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%pylab inline"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
        "For more information, type 'help(pylab)'.\n"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from IPython import parallel\n",
      "\n",
      "rc = parallel.Client()\n",
      "dv = rc[:]\n",
      "lbv = rc.load_balanced_view()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 2
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Use matplotlib to fetch data from Yahoo"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%%px\n",
      "\n",
      "import urllib2\n",
      "from io import BytesIO\n",
      "\n",
      "from matplotlib import finance\n",
      "\n",
      "def get_yahoo_data(name=None, start=None, end=None):\n",
      "    \"\"\"return historical stock data from yahoo as a recarray.\"\"\"\n",
      "    fp = finance.fetch_historical_yahoo(name, start, end)\n",
      "    return finance.parse_yahoo_historical(fp, asobject=True)\n",
      "\n",
      "def relative_close(records):\n",
      "    \"\"\"return the reative change in closing price over the interval\"\"\"\n",
      "    \n",
      "    close = records['aclose']\n",
      "    return (close[-1] - close[0]) / close[0]\n",
      "\n"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 3
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Setup the timestamps.  We want the past year"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%%px\n",
      "import datetime\n",
      "end = datetime.datetime.now()\n",
      "start = end - datetime.timedelta(days=365)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 4
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Our ticker of stocks to check"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "ticker = ['AAPL', 'GOOG', 'MSFT', 'RIMM', 'NOK', 'ORCL', 'AMZN', 'INTC', 'ATVI', 'EA', 'NFLX']"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 5
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "And map a simple function (that depends on the code we have defined on the engines)\n",
      "onto our ticker."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def year_over_year(name):\n",
      "    \"\"\"fetch data, and return year-over-year change (relative to first close)\n",
      " \n",
      "    in percent\n",
      "    \"\"\"\n",
      "    stock = get_yahoo_data(name, start, end)\n",
      "    return relative_close(stock) * 100\n",
      "\n",
      "amr = lbv.map(year_over_year, ticker)\n",
      "amr"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "pyout",
       "prompt_number": 6,
       "text": [
        "<AsyncMapResult: year_over_year>"
       ]
      }
     ],
     "prompt_number": 6
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "fig, ax = subplots()\n",
      "fig.set_figwidth(10)\n",
      "ax.bar(range(len(amr)), amr)\n",
      "ax.set_xticks(np.arange(len(amr))+0.4)\n",
      "ax.set_xticklabels(ticker);\n",
      "ax.axhline(0, c='k')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "pyout",
       "prompt_number": 7,
       "text": [
        "<matplotlib.lines.Line2D at 0x10aa126d0>"
       ]
      },
      {
       "output_type": "display_data",
       "png": "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\nv/32m06cOKHffvtNjRs3liRlZWWpd+/estvtstvtMsYoPz9f/v7+1RYaAADAW1S5TCUnJysiIkIT\nJkxQ06ZN9dVXX0mSXC6XQkND3fMFBwfL5XLp+uuvt54WAADAy9iMMaaiG3v27Kndu3eXmZ6YmKjX\nXntN3bt313333acXXnhBn332mRYtWqRJkybpiiuu0H333SdJuv322zV06FBFR0eXXrDNVs0PBQAA\nwHMqqkyVlqnKXH755crOzlaDBg106NAhBQYGavfu3Vq+fLnS09OVkpIiSXI6ncrMzGSYDwAAnJWq\nfAB69+7dtWzZMknS0qVL1bNnT0lSRESEVq5cqdzcXGVkZMjPz48iBQAAzlpV3jO1detWPfnkk/ru\nu+/Url07Pf744woJCZEkpaSkaNasWapXr57mzp2rLl26VGtoAAAAr2G81JIlS4zNZjPbt28vNX3T\npk3GZrOZFStWlJru5+dnnE6n6dixo3n44YfNsWPHjDHGXHjhhR7PeuDAARMfH29at25tQkNDTWRk\npFmyZIk7b5cuXUyrVq1M+/btzcKFC0vdd8GCBaZ9+/amVatWpmvXrubrr79231ZYWGimTZtmQkND\nTXBwsHE4HCYxMbHa89tsNnPXXXe5vz9+/Li59NJLzY033uh+fMOGDTNhYWHG4XCYPn36GGOMyc7O\nNueff75xOp3urylTprj/X/ycOJ1OM2vWrGrPbcw/z3tYWJgZM2aMOXr0qDtbu3btjDHGrF271ths\nNvPSSy+571e8Hj3zzDPGGGMGDx5sLrjgApOfn++e58EHHzQ2m8389ttvHsluTNHvfuzYse7vk5OT\nTUJCgvv7ytaPbt26ma+++soYY8xPP/1kgoKCzKpVqzyWtdi+ffvMwIEDTZs2bUxgYKB57LHHzN9/\n/23Wrl1rGjVqZJxOp+ncubN54YUX3Pf566+/zJgxY0xgYKBxOByma9euJisryxhTM69RY8puU7Kz\ns43NZjOTJk0q9djq1KljHnjgAWOMMTExMaXW76ZNm5rIyEhjTNE607x5c/c6t2/fPtOqVSuPPobi\n31Vx9pKvqxEjRpj58+ebESNGGKfTaRwOh2nQoIE7+7vvvmu2bNlievToYVq3bm1CQkLMvffea/76\n6y+PZi6p5HMQGRlpnE6nsdvt5rLLLnPn7N69u5k7d26Z+91www2lfge1peR2zel0mqSkJPdtxevP\nnDlzai1fZduUyZMnm+bNm7uzT5w40RhTeltS7N133zXXX3+9+/vMzEzjdDpNYWFhDTwK3+O1ZWrA\ngAEmNjbWTJ48udT08ePHm9jYWDN48OBS0xs2bGiMMebYsWOmT58+Zvny5aWme9Ktt95qJk6caH75\n5RdjjDE7duwwycnJ5vjx46Zly5bmtddeMydOnDCffPKJadu2rdmwYYMxxpj169ebtm3bmk8//dQU\nFhaaV1991bRq1cr8/fffxhhjZs2aZfr16+f+A/rnn3+acePGVXv+hg0bmrCwMFNQUGCMMebDDz80\nTqfTxMbGGmOMefrpp80TTzzhnn/z5s3GmNKFpaKf62nFyzh+/Ljp16+f+3k/uUy1b9/exMTEuO83\nfvx443Q6S5WpDh06mDfeeMMYU1Rk27dvb6644gqPlqn69eub1q1bm/379xtjjJk+fbp7w3eq9SMq\nKsps2LDB7Ny50wQHB7sfu6f17dvXTJo0yRw8eND8+OOPJi4uzjzzzDMmIyPDXcB///13Y7fbze+/\n/26MMWbMmDFmyJAhJicnxxhjzPbt2817771njKmZ9cSYstuU7Oxs07p1a9OxY0f3PKmpqcbpdJqR\nI0eWuf/hw4dNSEiISU9PN8YUrTMtW7Y0s2fPNsbUTJkq/l1lZ2ebJk2amKCgIPcbxwceeMDMnz/f\nPW9OTk6p12dhYaEJCAgwL7/8sjly5IgxxphXX33V7N6926OZSypvuz5//vxSv+9Vq1aZ7t27l7rf\nwIEDzeuvv26Mqbn1pSKVLT81NdXceOONplu3bjUX6CSVbVMSEhLc27ySirclJ+vTp49ZsGCBOXbs\nmLnqqqvMF1984dnwPswrLydz6NAhZWVl6fnnn9dbb73lnm6M0eLFizVnzhx9/PHHOnr0aJn71q1b\nV9HR0frss89qJOvhw4e1YcMGPfXUU2ratKkkKTAwUA8//LA+/vhjde7cWXfffbdsNpu6du2qESNG\naPHixZKkxYsXa+TIkerSpYv8/Pw0aNAgRUREaO3atZKkt99+W9OmTVOHDh0kSY0aNdLTTz/tkcfR\np08fffDBB5KkhQsX6o477nB/auG7775TmzZt3PO2a9fOIxmsqFOnjrp16+b+3Z2sZcuWOnr0qPbu\n3StjjFauXKkbbrjB/RhtNpsGDhzoXt8yMjJ03XXX6bzzzvNo7rp162ro0KGaMWNGmdtOtX5I0q5d\nu9SrVy899dRTuvHGGz2aVZLy8/O1detW/ec//5G/v79at26tadOmudfpYhdffLE6dOjgvgLCsmXL\nNGPGDLVs2VJS0SlT4uLiPJ63WEXblAsuuEChoaHasGGDJGnRokUaMGBAuZ/YGTVqlPr27es+zYvN\nZtODDz6oGTNm6MSJEzXzQEq47LLLdP311+vVV18t9/aTH8PatWt1zTXXaMiQIapfv74kadCgQWrS\npInHs0qVb9dLZo2Ojtb27dvdnyQ/fPiw1qxZo5tuuqlGclqRlpamJ598Unv37tWuXbtqJUNl2xSp\n4k+jlef555/XpEmTNGXKFEVERKhTp07VFfOs45VlaunSpe4Tf1522WXauHGjJOnzzz9XmzZt1KxZ\nM0VFRbn/+Jf0xx9/6P3331dMTEyNZP3ggw903XXXlXvbkiVLyuSIiYlx/+F57733ytzeq1cvLV68\nWHv27NHPP/8sh8PhmeAnGThwoNLS0nT06FFt3rxZkZGR7tuGDh2qCRMmqEuXLpo1a5YKCgrct/34\n448KCwtTWFiYRo4cWSNZy/Pnn3/qo48+ktPprHCe2267TW+//ba++OILdezY0f0HpdiVV16pffv2\n6Y8//lBaWppuv/12T8eWJA0fPlxvvvmmDh48KOmf04ZUtn5IRRvFe+65RyNHjtQtt9xSI1k//PDD\nMsdAhoaGKi8vr9RpVHJycuRyudS+fXu5XC41bdpUjRo1qpGM5alomyIVnb4lLS1NeXl5Ou+889Ss\nWbMy91+8eLE2btyoadOmlZput9t13XXX6bXXXquV072MHz9e06dPP60y9+6776p37941kKp8FT0H\nJ//ezjvvPN16661atGiRJGn58uXq3r27GjZsWOOZy1NQUODe5oWFhentt9+WJO3cuVN79+5Vhw4d\ndNttt5UqjDXt5G1KMWOMZsyY4c6+evXqSn9OQECABgwYoOeff15JSUmejOzzvLJMLVy4UP3795ck\n9e/fXwsXLqx0uvTPCh4XF6fY2FhFRUXVSNaTNwQjRoyQ0+lURETEKe9rjClz//KmSdL8+fMVFhYm\nu92uvLw8a6HL0b59e+Xk5GjhwoXq27dvqds6d+6snJwcjRw5Uh9//LFCQkL0999/S5LatGmjTZs2\nadOmTZo1a1a15zqV4ue9RYsWOu+883T33XdXOG///v21aNEi95638txyyy1auHChsrKyauyDE/7+\n/ho0aJBmzpwp6Z93jqdaP2w2m3r06KHXX3+9VMH1tPLWT5vNJmOMMjMz1aFDBwUGBurBBx9074mq\nbeVtO4ofR69evbR69WqlpaVp4MCBZe67a9cujR49WgsWLFDdunVL3Waz2TRx4kQlJyfXyt6pgIAA\nRUZGasGCBaect/g5qi0Vbb/Ly3THHXcoLS1NUtHenoper7WhQYMG7m3epk2b3I/prbfe0m233Sap\n7N+nmnbyNqWYzWbTQw895M5e/Cn8ihQWFmr16tXy9/dXTk6OBxP7Pq8rUwcOHNDatWsVHx+vgIAA\nJScn6+2339aJEyf07rvvasqUKQoICNDIkSO1cuVKHT58WNI/K/gnn3yihx56qMbeJd5www369NNP\n3RuEF154QWvWrNG+fft08803a9WqVaXmX7VqlXsvws0336yVK1eWuf3mm29WkyZNZLfbtXnzZknS\nPffco02bNumiiy7y2Ea7X79+evjhh0sN8RWrV6+eBgwYoCVLliggIECffvqpRzKcqeLnfdeuXdq/\nf7/ef//9Cudt0qSJ6tWrp/T09FJDNcWKh/qeeOIJxcTE1OiehtGjR+vll192r89S5etHsfHjxys8\nPFz9+/dXYWGhx3P26dOnzHO/bds2NWvWTE2bNlWXLl30zTff6Ntvv1Vqaqp+/fVXhYeH65dffinz\nLrmmVLRNKV7H69atq6uvvlrPPvus+vfvX2rdN8Zo8ODBmjhxovvTyicLDAyU0+mstT0Rjz76qJKS\nkk5ZlG699VatWLGihlKVVtFzUJHOnTvr119/1TfffKMvvviizBs8b7Rw4UK98sorCggIUL9+/bR5\n82b98MMPtZanvG2KdGbDfKmpqerQoYNeeukljRgxorojnlW8rky98847GjRokHJycpSdna3c3Fy1\natVKiYmJcjqdys3NVXZ2tnJycnTLLbeUOVajpjVs2FDXXHONHnvsMf3yyy+Sisb4bTaboqOj9cUX\nX2jBggUqLCxUZmamUlNT3X8Mb7nlFvfZ4wsLC/XGG29o/fr16t69u6SidzeTJk3S119/LanoXcKx\nY8c89liGDBmihIQEtW3bttT0tWvX6q+//pIk7d+/X7m5uQoLC/NYjqpo1KiRXnzxRY0fP77SjcXU\nqVOVlJQkP7+iVf/kP5x2u12JiYkaPny4xzOX1LhxYw0YMEAvv/yyu8Sdav2Qigrgc889p0aNGik+\nPt7jOf39/dW2bVslJCQoPz9fP/30kx599NEyw4wOh0Njx47V5MmTZbPZFBcXp7Fjx+rnn3+WJO3Y\nscN9njocIu/bAAACyUlEQVRPq2ibkpub655n7NixSkpK0sUXX1zqvtOnT1eDBg00bNiwcn928frz\n2GOPafr06Z57EJUIDg6Ww+HQ8uXLK30D0LVrV23cuFHz5893H2/6xhtvaM+ePR7PWNFzkJmZWeGe\nzoEDB2rw4MHq06eP6tWr5/GMVnz//fc6fPiw8vLylJ2drezsbE2YMKFW906Vt02pbNt48m27d+/W\njBkz9PTTT6tXr15q3ry5XnrpJY9m9mVeV6bS0tJKvfOWit5RZWdnlzu9eFdwRRuRv/76S1dccYX7\n67nnnqv2zC+99JL27Nmja6+9VhEREbrnnnuUlJSkOnXqaMmSJZozZ44CAwM1fPhwTZw4UVdffbUk\n6ZprrtGECRN0//33KzAwUC+++KIWL17sPuh5+PDhioyM1O2336727dura9euuueee9wHuleX4t9d\n8+bN9cADD7inFU/fsGGDwsPD5XQ6deedd2rKlCnuC1tXtvGuiT07JZcRFhamwMBALVq0qFT+kvN1\n7txZ/fr1K/f+xf8fOnSoAgICytzu6fxjx47V/v373d+fav0o6dVXX9Wvv/6qRx55xKN5paIh5+3b\nt8vpdComJkahoaEaPXp0mcdz//33a8WKFcrLy1NiYqIuvPBCRUdHq127dho6dKiaN28uyfOv0Yq2\nKf/973/deR0Oh3uIuOS68/jjj2v79u2ljpEpeZ3Rkve/+uqra3R9Kfn/xx57rNzh/5Lz1KlTR0uX\nLtWbb74ph8Mhh8Ohzz77rEaOZavoOSguG+X93u644w5t3ry5zBBfbV+K7ORjpiZOnKi0tLQybyhK\n/n2qSZVtU07eLpbUt29f92twwIABGjt2rB555BH961//kiQ999xzSkxM1B9//OHZB+CjqnzSTgAA\nAHjhnikAAABfQpkCAACwgDIFAABgAWUKAADAAsoUAACABZQpAAAAC/4POEK3DuRslGcAAAAASUVO\nRK5CYII=\n",
       "text": [
        "<matplotlib.figure.Figure at 0x108247290>"
       ]
      }
     ],
     "prompt_number": 7
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "And now we can feel sad for a few companies."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": []
    }
   ],
   "metadata": {}
  }
 ]
}