{ "cells": [ { "cell_type": "markdown", "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", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "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" ] } ], "source": [ "%pylab inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from IPython import parallel\n", "\n", "rc = parallel.Client()\n", "dv = rc[:]\n", "lbv = rc.load_balanced_view()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use matplotlib to fetch data from Yahoo\n", "\n", "Note that we are defining these functions on the engines" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%%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" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Setup the timestamps. We want the past year" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%%px\n", "import datetime\n", "end = datetime.datetime.now()\n", "start = end - datetime.timedelta(days=365)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Our ticker of stocks to check" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [], "source": [ "ticker = ['AAPL', 'GOOG', 'MSFT', 'RIMM', 'NOK', 'ORCL', 'AMZN', 'INTC', 'ATVI', 'EA', 'NFLX']" ] }, { "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", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "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" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlIAAAD+CAYAAADxnuvPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHXlJREFUeJzt3Xl4FPXhx/FPdkMIsCFBI+RAuUJaWw45jEBDBCNiATkf\nQOUxiBK1Da3ViFYsR5J6IA/Q1kqEgkfBooI0KdIHgXBWCkUBMdACUShCgIBN3AQTcuz+/siT+bGQ\nRP2ySXb1/foLZnYnn8nOznx2vpPZALfb7RYAAAC+NVtTBwAAAPBXFCkAAABDFCkAAABDFCkAAABD\nFCkAAABDFCkAAABDgSZPKi8v18svvyyn0ymXy6WxY8fq2muv1eLFi2Wz2RQdHa3k5GQFBAR4Oy8A\nAIDPMCpSBQUFcjgceuyxx3T27FmtXr1aTqdTqampCgsL09q1a7Vjxw4lJCR4Oy8AAIDPMBraa9++\nvcrLy/XYY49p9uzZGjVqlIKCghQWFiZJSkhIUG5urleDAgAA+BqjM1L/+c9/1Lx5cy1cuFAnT57U\na6+9pnbt2lnzQ0JCVFJSUufzc3JyTH4sAABAk0hMTKx1ulGROnz4sPr16yep+uyUJBUXF1vznU6n\nHA5Hvcvo3bu3yY/2sHbtWt11111XvZym4K/Z/TW35L/Z/TW35L/Z/TW35L/Z/TW35L/Z/TV3U9i7\nd2+d84yG9qKjo3Xo0CFJUmFhoWw2myoqKlRYWChJ2r59u7p3726yaAAAAL9hdEaqb9+++uSTTzR7\n9mzZbDZNmTJFdrtdCxYskM1mU/v27TVy5EhvZwUAAPApRkVKkqZMmXLFtIyMjKsKAwAA4E+4IScA\nAIAhvy5SsbGxTR3BmL9m99fckv9m99fckv9m99fckv9m99fckv9m99fcvibA7Xa7G/uH5uTkeOWv\n9gAAABra3r1767z9gV+fkQIAAGhKFCkAAABDFCkAAABDFCkAAABDFCkAAABDFCkAAABDFCkAAABD\nxl8RAwAAGt9p50UVXChv6hge2rYKUmTr5k0do0lQpAAA8CMFF8o1fV1eU8fwMG94zPe2SDG0BwAA\nYIgiBQAAYIgiBQAAYIgiBQAAYIgiBQAAYIgiBQAAYIgiBQAAYIgiBQAAYIgiBQAAYIgiBQAAYIgi\nBQAAYIgiBQAAYIgiBQAAYIgiBQAAYIgiBQAAYIgiBQAAYIgiBQAAYCjwap780Ucf6fTp0xoxYoRO\nnjypxYsXy2azKTo6WsnJyQoICPBWTgAAAJ9jfEaqrKxMR44c0YgRIyRJy5cvV2pqqtLS0hQZGakd\nO3Z4LSQAAIAvMi5Sb731lo4fP6758+fr888/V1BQkMLCwiRJCQkJys3N9VpIAAAAX2Q0tHf69Gm5\nXC49/fTTKioq0u9//3tFRkZa80NCQlRSUuK1kAAAAL7I6IzUvn37FBcXJ0kKCwtTSEiIiouLrflO\np1MOh8M7CQEAAHyUUZEKCQnRwYMHJUmlpaUqKipSRUWFCgsLJUnbt29X9+7dvZcSAADABxkN7f3k\nJz/Rn/70J82ePVuSdO+99yokJEQLFiyQzWZT+/btNXLkSK8GBQAA8DVGRcpms+nhhx++YnpGRsZV\nBwIAAPAX3JATAADAEEUKAADAEEUKAADAEEUKAADAEEUKAADAEEUKAADAEEUKAADAEEUKAADAEEUK\nAADAEEUKAADAEEUKAADAEEUKAADAEEUKAADAEEUKAADAUGBTBwAAbzntvKiCC+VNHcND21ZBimzd\nvKljAGggFCkA3xkFF8o1fV1eU8fwMG94DEUK+A5jaA8AAMAQRQoAAMAQRQoAAMAQRQoAAMAQRQoA\nAMAQRQoAAMAQRQoAAMAQRQoAAMAQRQoAAMAQRQoAAMAQRQoAAMAQRQoAAMAQRQoAAMBQ4NU8+dy5\nc5o9e7Yef/xxBQcHa/HixbLZbIqOjlZycrICAgK8lRMAAMDnGJ+RcrlcysrKUnx8vNxut5YvX67U\n1FSlpaUpMjJSO3bs8GZOAAAAn2NcpN577z3dfvvtatasmdxut4KCghQWFiZJSkhIUG5urtdCAgAA\n+CKjIpWXlye3261OnTpJqj475XA4rPkhISEqKSnxTkIAAAAfZXSNVG5urg4fPqwjR44oPz9fe/fu\nVXh4uDXf6XR6FCsAAIDvIqMiNXr0aOvfq1at0k033aTVq1ersLBQbdq00fbt29W9e3evhQQAAPBF\nV/VXe5dKSkrSggULZLPZ1L59e40cOdJbiwYAAPBJV12kxo8fb/07IyPjahcHAADgN7ghJwAAgCGv\nDe19H5x2XlTBhfKmjuGhbasgRbZu3tQxAAD4XqJIfQsFF8o1fV1eU8fwMG94DEUKAIAmwtAeAACA\nIYoUAACAIYoUAACAIYoUAACAIYoUAACAIYoUAACAIYoUAACAIYoUAACAIYoUAACAIYoUAACAIYoU\nAACAIYoUAACAIYoUAACAIYoUAACAIYoUAACAIYoUAACAIYoUAACAIYoUAACAocCmDgAA8F+nnRdV\ncKG8qWN4aNsqSJGtmzd1DHxPUKQAAMYKLpRr+rq8po7hYd7wGIoUGg1DewAAAIYoUgAAAIYoUgAA\nAIYoUgAAAIYoUgAAAIYoUgAAAIaMbn/gcrm0bNkynTx5Ui6XSxMnTlRYWJgWL14sm82m6OhoJScn\nKyAgwNt5AQAAfIZRkTpx4oQiIyOVnJysr776SgsWLJDdbldqaqrCwsK0du1a7dixQwkJCd7OCwAA\n4DOMilTHjh3VsWNHSdLFixfVqlUrud1uhYWFSZISEhL05ptvUqQAP8SdqgHgm7uqO5uXlJRo8eLF\nGjNmjLZu3WpNDwkJUUlJydVmA9AEuFM1AHxzxhebf/nll/rjH/+oyZMnq1OnTh7Fyel0yuFweCUg\nAACArzIqUv/73/+0aNEiPfDAA4qMjFRQUJDKy8tVWFgoSdq+fbu6d+/u1aAAAAC+xmho77333tO5\nc+eUmZkpSXI4HEpKStKCBQtks9nUvn17jRw50qtBAQAAfI1RkUpKSlJSUtIV0zMyMq46EAAAgL/g\nhpwAAACGKFIAAACGKFIAAACGKFIAAACGKFIAAACGKFIAAACGruorYgAA8Ed8pyS8hSIFAPje4Tsl\n4S0M7QEAABiiSAEAABiiSAEAABiiSAEAABiiSAEAABiiSAEAABiiSAEAABiiSAEAABiiSAEAABii\nSAEAABiiSAEAABiiSAEAABiiSAEAABiiSAEAABiiSAEAABiiSAEAABiiSAEAABiiSAEAABiiSAEA\nABiiSAEAABiiSAEAABgK9ObCli9frqNHj8rtdispKUldu3b15uIBAAB8itfOSO3fv182m03p6el6\n+umntWLFCm8tGgAAwCd5rUgdPHhQAwcOlCS1bNlS119/vc6dO+etxQMAAPgcrw3tlZSUyOFwWP8P\nCQlRSUmJrrvuuloff80113jrR3+vDX6yqRMADc+ft3N/zu6v/PV37q+5Jf/O/k1s2rSpznleK1IO\nh0PFxcVWQSouLlZISEidj+/7Yo63frRXzBseo56Rdef1dx+fLtb0dXlNHcPDN/md+2tuyb+zo3Gx\nrQC+be/evXXO81qR6t69u/7xj3+oQ4cOunDhgk6ePKnw8HBvLR7fU21bBWne8JimjuGhbaugpo4A\nAPARXitSPXr00CeffKJZs2bJ7XZr8uTJ3lo0vsciWzdXZOvmTR0DAIBaefX2B5MmTfLm4gAAAHwa\nN+QEAAAwRJECAAAwRJECAAAwRJECAAAwRJECAAAwRJECAAAwRJECAAAwRJECAAAwRJECAAAwRJEC\nAAAwRJECAAAwRJECAAAwRJECAAAwRJECAAAwRJECAAAwFNjUAdA42rYK0rzhMU0dw0PbVkFNHQEA\ngKtCkfqeiGzdXJGtmzd1DAAAvlMY2gMAADBEkQIAADBEkQIAADBEkQIAADBEkQIAADBEkQIAADBE\nkQIAADBEkQIAADBEkQIAADBEkQIAADDEV8QAQBPjuzAB/0WRAoAmxndhAv6LoT0AAABDRmekTp8+\nrSVLlkiSWrZsqWnTpqlFixZat26ddu3aJZfLpTFjxqhv375eDQsAAOBLjIrUP//5TyUnJysqKko5\nOTn64IMPdOONN+ro0aPKyMhQVVWV0tPT1aNHDwUFMc4OAAC+m4yG9saOHauoqChJUmlpqa699lod\nPHhQ8fHxkiS73a7evXsrLy/Pe0kBAAB8TL1npPLz8/X66697TAsNDVVKSookaf/+/Tpx4oRGjBih\nNWvWqEOHDtbjQkJCVFJS4v3EAAAAPqLeIhUVFaUZM2bUOu/DDz/Unj179Mgjj0iSHA6HiouLrflO\np1MRERFejAoAAOBbjK6R2rlzpw4ePKhHHnlEAQEBkqRu3brpnXfeUd++fVVZWal9+/Zp+PDhdS6D\ne6YAAAB/Z1SkXn31VV1//fVKT0+XJMXHxysxMVGxsbGaOXOmXC6Xxo4dq2bNmtW5jJ6RIWaJAQAA\nfIRRkVq6dGmt04cNG6Zhw4ZdVSAAAAB/wZ3NgQbC134AwHcfRQpoIHztBwB89/EVMQAAAIYoUgAA\nAIYoUgAAAIYoUgAAAIYoUgAAAIYoUgAAAIYoUgAAAIYoUgAAAIYoUgAAAIYoUgAAAIYoUgAAAIYo\nUgAAAIYoUgAAAIYoUgAAAIYoUgAAAIYoUgAAAIYoUgAAAIYoUgAAAIYoUgAAAIYoUgAAAIYoUgAA\nAIYoUgAAAIYoUgAAAIYoUgAAAIb8ukgdPny4qSMY89fs/ppb8t/s/ppb8t/s/ppb8t/s/ppb8t/s\n/prb1/h1kTpy5EhTRzDmr9n9Nbfkv9n9Nbfkv9n9Nbfkv9n9Nbfkv9n9Nbev8esiBQAA0JQCr+bJ\n69ev15YtWzR37lxJ0rp167Rr1y65XC6NGTNGffv29UpIAAAAX2RcpE6cOKGysjKFhYVJkk6dOqWj\nR48qIyNDVVVVSk9PV48ePRQUFOS1sAAAAL7EaGivvLxcf//73zVy5Ei53W5J0sGDBxUfHy9Jstvt\n6t27t/Ly8ryXFAAAwMcEuGuaUC3y8/P1+uuve0wLDQ1VmzZtNHjwYEVGRuq5557TjBkztGbNGv34\nxz/WD37wA0nS5s2b5XA4FBcXd8Vyc3JyvLsWAAAADSgxMbHW6fUWqbqkp6erRYsWkqqv+r/lllt0\nww036JprrrGui8rKylJsbKx+9KMfXUVsAAAA32V0jdSsWbOsfz/33HOaOnWq8vPz9c4776hv376q\nrKzUvn37NHz4cK8FBQAA8DVX9Vd7l4qKilJsbKxmzpwpl8ulsWPHqlmzZt5aPAAAgM8xGtoDAAAA\nN+QEAAAw5rWhPW/Lz8/X7Nmz9Yc//MG6sL3GgQMH9Prrr2v+/PkKCAiQVH37hczMTIWHh+vixYu6\n9dZbdeedd2rVqlW66aab1LVr1wbJWVJSorfffluffvqpmjVrpuDgYI0bN06xsbE6efKk3nrrLRUW\nFsrlcql9+/aaNGmSde+t8vJyrVmzRh9//LECAwNlt9s1ZswY9ezZ01r+3r17lZ2dLZfLJbvdrq5d\nu2rChAleHTadOHGinnzySfXp08eatnPnTi1atEgrVqxQWVmZMjMz9eWXX8rlcmnEiBGKi4vTyy+/\nrDNnzigwsHoz6t69uz7//HMVFRWpoKBADodDLVu2VJ8+fTRixAiv5a0xZcoUdezYUZWVlQoNDdW0\nadMUHBxs/SXp1q1btXLlSi1atEh2u9163vPPP6/w8HAlJydr1apV+uijj/TCCy94LDs1NVUDBw7U\n6NGjvZ67xsSJE/Wb3/xG3bt3t6bVZJf0tdvPpY/dt2+fNmzYoEcffVTBwcENlrlme8/Ly5PNZlPL\nli119913q0uXLtb2YLPZVFVVpXvvvdf6Y5OtW7dq06ZNstlscrvdGjt2rHr16qVFixbp3nvvtdap\nIdW2TykoKNAvfvELzZs3TzfccIP12OzsbG3dulULFy7UCy+8oIsXL1rz8vLytHTpUi1dulSSlJKS\nYs1rqP3Npdt0dna25s6da92j79ChQzpy5IjCwsK0bds2lZeX6/z584qKilJgYKCeeeYZXbx4UWvW\nrFFubq7sdrtatGih+++/X5GRkV7N+XUufw2ysrL08ccf68KFCyotLVV4eLjCw8N19uxZzZo1y9q3\nSFJaWpqeeeYZvfjii9Z239hq9jk17rrrLvXu3VtS/cesxlTffqXmOHnddddZ82bOnKnMzEyPfUtR\nUZHmzp2rmTNnqmXLlqqsrNSzzz6rlJQUhYeHN/o6+TqfLVIbNmzQlClTtGXLFg0bNsxj3vbt2zVs\n2DB9+OGHuvnmmyVJAQEBGjJkiEaNGiW3261Zs2Zp0KBBDZqxqqpKv/vd7zR27Fg9+OCDkiSXy6Wy\nsjKdP39eS5cu1c9//nO1bdtWkvTpp59q4cKFmjFjhpo3b66XX35Z/fr109133y1J+uqrr5SZmSlJ\n6tmzp/bs2aNdu3ZZj5ek4uJir1971qVLF23ZssWjSG3fvl2dO3eWJG3btk29evXSoEGDVFFRofPn\nz0uq/p0/8cQTCg0NvWKZq1atUq9evRQTE+PVrJfq2rWrtUNdv369tm3bpqFDh3o8JjIyUrt379aA\nAQMkSWfOnFFFRYVVwCWpRYsWOnr0qHXwy83NVevWrT0e0xBiY2O1evVqderUSQ6Hw2PeN9l+auzc\nuVM7d+5Uamqqx4HH22rb3ouKivTSSy9p8uTJHtuD0+nU/PnzlZaWprVr18rpdCo9PV02m02lpaX6\n6KOPGixnXWrbpwQEBOjGG2/Uhg0bNHXqVEnV7+EDBw5YB4xf//rX1jI2btyoPn36qHnz5goICJDL\n5dLOnTut7asxdO7cWX/+85+tvDUGDRqkQYMG6dy5c8rKylJycrI176WXXlJ8fLzuueceSdLp06f1\nxRdfNHqRuvw1GD16tEaPHq1Dhw7p6NGjGjVqlCTpb3/7mz788EP169dPUvWX68bExDTo9v1NXLrP\nuVx9x6zGVN9+5dLj5OXTLxUWFqYJEybotddeU0pKilauXKmhQ4dSourgk0N7JSUlqqio0IABA5SX\nl6dLL+PKz89X27ZtNXjwYO3atcvjeTWPKy0tVWVlpcdZiIawe/du9ezZ0/rUvX79emVkZGjevHnK\nzs5WUlKSdRCUqgtLYmKiNm/erLy8PLVu3Vr9+/e35rds2VIpKSnKysqSJL333nt65JFH1Lx5c5WV\nlWnOnDl67rnnrljvq+VwOBQaGqozZ85Iqr5rfbt27awzG23atLHKU7NmzTx2vvVdYteYl985nc5a\nPwUmJCRox44d1v83btyooUOHemQbMmSINm7caP1/8+bNuv322xs8f4sWLTRp0iQtW7bsinlZWVn1\nbj81cnJytGfPHj3++OMNfpC5fHuXqne4P/vZz/TOO+9I+v/X3Ol0Kjg4WFVVVdq9e7cmTZokm616\nd9OiRQvr5r2Npb59SnR0tIqKivTVV19Jqj6716tXrysOLsePH9cnn3zicXb17rvv1saNG/XFF180\nzopI1geevXv31jr/8u32yJEjatOmjVVKpOoPGN26dWu4kLWo7zWQPHPfeuutHu/bLVu26Lbbbmu0\nrN/W161bY6pvvyJ98/1yr1695HA49MYbb6isrMxj+4EnnyxSOTk5GjJkiCQpLi5Oe/bsseZt3LhR\nd9xxh+x2uzp27Kjjx49Lqt44cnJyNGfOHM2bN0/jxo1r8L8aPHv2rMdp3jvvvFOzZ89Ws2bNVFBQ\noA4dOlzxnE6dOuns2bM6c+aMOnXqdMX84OBgawdut9utdQgODtacOXN01113qayszOvrMmTIEG3Y\nsEHS/5eNGnFxcYqOjtayZcv09ttvq7S01JpXc9YhLS2tzh17Q8nLy9OcOXOUkpKiysrKWg/OwcHB\nioiI0H//+1+Vl5fr1KlT1pm2Gtddd50qKirkdDr1xRdfyG63q02bNo2yDrGxsYqIiNDWrVs9phcU\nFHhsWzVqth9JOnfunFauXKmpU6daJaUhXb691wgPD7dKyPz58/Xoo49qxYoVuv/+++V0OtWuXbsG\nz/Z16tunSNUH7prXYOvWrRo8eLDH/LKyMi1fvlwPPfSQx/TAwEA98MADWrJkSaMePJOSkpSdna0v\nv/zyinmXF8CCgoJa9zWN7eteg0uFhobKZrOpsLBQpaWlKioqavSzZ7XJy8uz9ndpaWlWgf4269YY\n6tqv1Bwna/K/9tpr9S7ntttu0/vvv+/TJdYX+NzQXlVVlXbu3KkjR45Iqn7hq6qqFBcXp5KSEu3f\nv18FBQWSpMrKSuXn5+vhhx9WQECAbr/99itOWTakiIgIHTt2zGMsuiZzu3btdPz4cXXp0sVj3mef\nfaaIiAhFRERo27ZtVyyzrKzM2iFXVVWpvLy8Ub6vsGPHjnr77bdVWFiooqIiRUVFeczv37+/+vfv\nr9OnT2vRokVKTU2VpDqH9hpDTEyMZsyYoYULFyohIaHOMjF06FCtXbtWXbp00cCBA2t9TGJiojZt\n2qSKigoNGTJElZWVDRndw/jx4/Xb3/5WP/zhD61p7dq107Fjx+rcfqTqAjhu3Di98MILeuqpp644\nje9tdW3v58+fV6tWrSRVbw+HDx/WZ599psjISFVWVlrFry4NPYRa3z6l5r3Wp08fPf/88+rVq5dC\nQ0Ot9amxbNkyTZgwodahkuuvv149e/ZUdnZ2g67HpYKCgjR58mQtWbLka+/X17ZtW4+zO02hvteg\nLrfeequ2bdumkJCQRj+DWZeafc6lTNatMdS2X6nvOHn5+7CqqkorVqxQenq6VqxYoWeeeabJh1Z9\nlc+dkdq9e7d++tOfavr06Zo+fbqefPJJdezYUceOHdOmTZs0depUa97TTz+tyspKFRUVSWrcoSRJ\nuuWWW3TgwAEdOnTImlZcXKyLFy9q1KhRWrFihc6dO2fN+/TTT7V582bddtttiomJkdPp9Bimq7lG\nasyYMZKqL2RcsmSJx4WuBQUFDXbgGThwoF588cUrri377LPPrINhq1atVF5ebs3zhbtn3HfffXrj\njTfqnB8REaHi4mJ98MEH6tevX62Zu3Xrpn//+986duyYYmNjG3W9bDabkpOTtWTJElVVVUnS124/\nNeLj4zV+/HjNnTvXeh80lNq296KiIr3yyisaP368pOrtIS4uTqdOndKJEycUGBiofv366S9/+Ytc\nLpckqaKiQllZWdb/G/p3Xd8+pea9ZLPZ1K1bN7300ku64447PJ6/adMmRUVFWV9/dama7MOGDdPh\nw4d17NixBl2XS3Xu3FldunTR+vXra81UIzY2VkVFRfrXv/5lTSssLLTOQDeG+l6DuvTu3Vv79+/X\n7t27fXpYyWTdGkNt+xW3213n++3y6e+++67i4+MVExOjxMRErVy5ssEz+yufq5cbN27UU0895TFt\n4MCBevfdd3X+/Pkr/opqwIABev/996/4lHypN9980/qE2b9/f699urHZbPrVr36llStXavny5QoO\nDlZgYKCGDx+u8PBwPfjgg3r11VfldDrlcrkUFRWlxx57zDrDlJKSonfffVfZ2dmy2+2y2WwaN26c\nevToIUnq27evbDabnn32WbndbtntdnXo0OGKYQdviYuL0/vvv+9x0blUfV3UK6+8oqqqKgUFBSkp\nKcmaV1+pa+gzDTXCw8PVs2dPbdiw4YqDYI3BgwcrLy9PdrtdAQEBHtlq/n3zzTdbr01jZa8RGRmp\nAQMGaN26dZL0jbafGj169FBISIgWLlyoX/7yl7r22msbJOPl27vNZlNwcLDuuece6y/ean5vkydP\nVmZmpmbOnKkRI0Zo8+bNmjlzpgIDA2Wz2TRs2DDrDGJmZqb1SffOO++s971soq59SlZWliZOnGhN\nS0xM1MGDB69YlzfeeEMxMTE6cOCA9dhHH33U4zGS9NBDD+mJJ55okG2nrmWOHj1aaWlptW7Pl5o2\nbZpWr16tv/71rwoODlZQUJDuu+8+r+esS32vwbRp02p9js1mU9euXVVRUeEzZ0JqhvZqDBw4UDt2\n7PjW69ZYLt+v1LdtXvo+7Ny5s06dOqUJEyZIqv7AtmfPHuXm5jb6tXX+gBtyAgAAGPK5oT0AAAB/\nQZECAAAwRJECAAAwRJECAAAwRJECAAAwRJECAAAwRJECAAAw9H8sFaV+onMxRgAAAABJRU5ErkJg\ngg==\n" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "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')" ] } ], "metadata": {}, "nbformat": 4, "nbformat_minor": 0 }