diff options
Diffstat (limited to 'python/notebooks/Allocation Reports.ipynb')
| -rw-r--r-- | python/notebooks/Allocation Reports.ipynb | 4214 |
1 files changed, 21 insertions, 4193 deletions
diff --git a/python/notebooks/Allocation Reports.ipynb b/python/notebooks/Allocation Reports.ipynb index 727a1aa8..14756d41 100644 --- a/python/notebooks/Allocation Reports.ipynb +++ b/python/notebooks/Allocation Reports.ipynb @@ -2,10 +2,8 @@ "cells": [ { "cell_type": "code", - "execution_count": 37, - "metadata": { - "collapsed": true - }, + "execution_count": null, + "metadata": {}, "outputs": [], "source": [ "import datetime\n", @@ -16,20 +14,9 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Timestamp('2017-11-30 00:00:00')" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "#PNL Allocation\n", "#report_date = datetime.date(2017,10,31)\n", @@ -40,799 +27,9 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "window.mpl = {};\n", - "\n", - "\n", - "mpl.get_websocket_type = function() {\n", - " if (typeof(WebSocket) !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof(MozWebSocket) !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert('Your browser does not have WebSocket support.' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.');\n", - " };\n", - "}\n", - "\n", - "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = (this.ws.binaryType != undefined);\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById(\"mpl-warnings\");\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent = (\n", - " \"This browser does not support binary websocket messages. \" +\n", - " \"Performance may be slow.\");\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = $('<div/>');\n", - " this._root_extra_style(this.root)\n", - " this.root.attr('style', 'display: inline-block');\n", - "\n", - " $(parent_element).append(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", - " fig.send_message(\"send_image_mode\", {});\n", - " if (mpl.ratio != 1) {\n", - " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", - " }\n", - " fig.send_message(\"refresh\", {});\n", - " }\n", - "\n", - " this.imageObj.onload = function() {\n", - " if (fig.image_mode == 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function() {\n", - " this.ws.close();\n", - " }\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "}\n", - "\n", - "mpl.figure.prototype._init_header = function() {\n", - " var titlebar = $(\n", - " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", - " 'ui-helper-clearfix\"/>');\n", - " var titletext = $(\n", - " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", - " 'text-align: center; padding: 3px;\"/>');\n", - " titlebar.append(titletext)\n", - " this.root.append(titlebar);\n", - " this.header = titletext[0];\n", - "}\n", - "\n", - "\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", - "\n", - "}\n", - "\n", - "\n", - "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", - "\n", - "}\n", - "\n", - "mpl.figure.prototype._init_canvas = function() {\n", - " var fig = this;\n", - "\n", - " var canvas_div = $('<div/>');\n", - "\n", - " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", - "\n", - " function canvas_keyboard_event(event) {\n", - " return fig.key_event(event, event['data']);\n", - " }\n", - "\n", - " canvas_div.keydown('key_press', canvas_keyboard_event);\n", - " canvas_div.keyup('key_release', canvas_keyboard_event);\n", - " this.canvas_div = canvas_div\n", - " this._canvas_extra_style(canvas_div)\n", - " this.root.append(canvas_div);\n", - "\n", - " var canvas = $('<canvas/>');\n", - " canvas.addClass('mpl-canvas');\n", - " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", - "\n", - " this.canvas = canvas[0];\n", - " this.context = canvas[0].getContext(\"2d\");\n", - "\n", - " var backingStore = this.context.backingStorePixelRatio ||\n", - "\tthis.context.webkitBackingStorePixelRatio ||\n", - "\tthis.context.mozBackingStorePixelRatio ||\n", - "\tthis.context.msBackingStorePixelRatio ||\n", - "\tthis.context.oBackingStorePixelRatio ||\n", - "\tthis.context.backingStorePixelRatio || 1;\n", - "\n", - " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband = $('<canvas/>');\n", - " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", - "\n", - " var pass_mouse_events = true;\n", - "\n", - " canvas_div.resizable({\n", - " start: function(event, ui) {\n", - " pass_mouse_events = false;\n", - " },\n", - " resize: function(event, ui) {\n", - " fig.request_resize(ui.size.width, ui.size.height);\n", - " },\n", - " stop: function(event, ui) {\n", - " pass_mouse_events = true;\n", - " fig.request_resize(ui.size.width, ui.size.height);\n", - " },\n", - " });\n", - "\n", - " function mouse_event_fn(event) {\n", - " if (pass_mouse_events)\n", - " return fig.mouse_event(event, event['data']);\n", - " }\n", - "\n", - " rubberband.mousedown('button_press', mouse_event_fn);\n", - " rubberband.mouseup('button_release', mouse_event_fn);\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband.mousemove('motion_notify', mouse_event_fn);\n", - "\n", - " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", - " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", - "\n", - " canvas_div.on(\"wheel\", function (event) {\n", - " event = event.originalEvent;\n", - " event['data'] = 'scroll'\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " mouse_event_fn(event);\n", - " });\n", - "\n", - " canvas_div.append(canvas);\n", - " canvas_div.append(rubberband);\n", - "\n", - " this.rubberband = rubberband;\n", - " this.rubberband_canvas = rubberband[0];\n", - " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", - " this.rubberband_context.strokeStyle = \"#000000\";\n", - "\n", - " this._resize_canvas = function(width, height) {\n", - " // Keep the size of the canvas, canvas container, and rubber band\n", - " // canvas in synch.\n", - " canvas_div.css('width', width)\n", - " canvas_div.css('height', height)\n", - "\n", - " canvas.attr('width', width * mpl.ratio);\n", - " canvas.attr('height', height * mpl.ratio);\n", - " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", - "\n", - " rubberband.attr('width', width);\n", - " rubberband.attr('height', height);\n", - " }\n", - "\n", - " // Set the figure to an initial 600x600px, this will subsequently be updated\n", - " // upon first draw.\n", - " this._resize_canvas(600, 600);\n", - "\n", - " // Disable right mouse context menu.\n", - " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", - " return false;\n", - " });\n", - "\n", - " function set_focus () {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "}\n", - "\n", - "mpl.figure.prototype._init_toolbar = function() {\n", - " var fig = this;\n", - "\n", - " var nav_element = $('<div/>')\n", - " nav_element.attr('style', 'width: 100%');\n", - " this.root.append(nav_element);\n", - "\n", - " // Define a callback function for later on.\n", - " function toolbar_event(event) {\n", - " return fig.toolbar_button_onclick(event['data']);\n", - " }\n", - " function toolbar_mouse_event(event) {\n", - " return fig.toolbar_button_onmouseover(event['data']);\n", - " }\n", - "\n", - " for(var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " // put a spacer in here.\n", - " continue;\n", - " }\n", - " var button = $('<button/>');\n", - " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", - " 'ui-button-icon-only');\n", - " button.attr('role', 'button');\n", - " button.attr('aria-disabled', 'false');\n", - " button.click(method_name, toolbar_event);\n", - " button.mouseover(tooltip, toolbar_mouse_event);\n", - "\n", - " var icon_img = $('<span/>');\n", - " icon_img.addClass('ui-button-icon-primary ui-icon');\n", - " icon_img.addClass(image);\n", - " icon_img.addClass('ui-corner-all');\n", - "\n", - " var tooltip_span = $('<span/>');\n", - " tooltip_span.addClass('ui-button-text');\n", - " tooltip_span.html(tooltip);\n", - "\n", - " button.append(icon_img);\n", - " button.append(tooltip_span);\n", - "\n", - " nav_element.append(button);\n", - " }\n", - "\n", - " var fmt_picker_span = $('<span/>');\n", - "\n", - " var fmt_picker = $('<select/>');\n", - " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", - " fmt_picker_span.append(fmt_picker);\n", - " nav_element.append(fmt_picker_span);\n", - " this.format_dropdown = fmt_picker[0];\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = $(\n", - " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", - " fmt_picker.append(option)\n", - " }\n", - "\n", - " // Add hover states to the ui-buttons\n", - " $( \".ui-button\" ).hover(\n", - " function() { $(this).addClass(\"ui-state-hover\");},\n", - " function() { $(this).removeClass(\"ui-state-hover\");}\n", - " );\n", - "\n", - " var status_bar = $('<span class=\"mpl-message\"/>');\n", - " nav_element.append(status_bar);\n", - " this.message = status_bar[0];\n", - "}\n", - "\n", - "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", - "}\n", - "\n", - "mpl.figure.prototype.send_message = function(type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "}\n", - "\n", - "mpl.figure.prototype.send_draw_message = function() {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", - " }\n", - "}\n", - "\n", - "\n", - "mpl.figure.prototype.handle_save = function(fig, msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "}\n", - "\n", - "\n", - "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1]);\n", - " fig.send_message(\"refresh\", {});\n", - " };\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", - " var x0 = msg['x0'] / mpl.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", - " var x1 = msg['x1'] / mpl.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0, 0, fig.canvas.width, fig.canvas.height);\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", - " var cursor = msg['cursor'];\n", - " switch(cursor)\n", - " {\n", - " case 0:\n", - " cursor = 'pointer';\n", - " break;\n", - " case 1:\n", - " cursor = 'default';\n", - " break;\n", - " case 2:\n", - " cursor = 'crosshair';\n", - " break;\n", - " case 3:\n", - " cursor = 'move';\n", - " break;\n", - " }\n", - " fig.rubberband_canvas.style.cursor = cursor;\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_message = function(fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "}\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function() {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message(\"ack\", {});\n", - "}\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function(fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " evt.data.type = \"image/png\";\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src);\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " evt.data);\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig[\"handle_\" + msg_type];\n", - " } catch (e) {\n", - " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", - " }\n", - " }\n", - " };\n", - "}\n", - "\n", - "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function(e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e)\n", - " e = window.event;\n", - " if (e.target)\n", - " targ = e.target;\n", - " else if (e.srcElement)\n", - " targ = e.srcElement;\n", - " if (targ.nodeType == 3) // defeat Safari bug\n", - " targ = targ.parentNode;\n", - "\n", - " // jQuery normalizes the pageX and pageY\n", - " // pageX,Y are the mouse positions relative to the document\n", - " // offset() returns the position of the element relative to the document\n", - " var x = e.pageX - $(targ).offset().left;\n", - " var y = e.pageY - $(targ).offset().top;\n", - "\n", - " return {\"x\": x, \"y\": y};\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * http://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys (original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object')\n", - " obj[key] = original[key]\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function(event, name) {\n", - " var canvas_pos = mpl.findpos(event)\n", - "\n", - " if (name === 'button_press')\n", - " {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * mpl.ratio;\n", - " var y = canvas_pos.y * mpl.ratio;\n", - "\n", - " this.send_message(name, {x: x, y: y, button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event)});\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "}\n", - "\n", - "mpl.figure.prototype._key_event_extra = function(event, name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "}\n", - "\n", - "mpl.figure.prototype.key_event = function(event, name) {\n", - "\n", - " // Prevent repeat events\n", - " if (name == 'key_press')\n", - " {\n", - " if (event.which === this._key)\n", - " return;\n", - " else\n", - " this._key = event.which;\n", - " }\n", - " if (name == 'key_release')\n", - " this._key = null;\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.which != 17)\n", - " value += \"ctrl+\";\n", - " if (event.altKey && event.which != 18)\n", - " value += \"alt+\";\n", - " if (event.shiftKey && event.which != 16)\n", - " value += \"shift+\";\n", - "\n", - " value += 'k';\n", - " value += event.which.toString();\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, {key: value,\n", - " guiEvent: simpleKeys(event)});\n", - " return false;\n", - "}\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", - " if (name == 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message(\"toolbar_button\", {name: name});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", - " // Create a \"websocket\"-like object which calls the given IPython comm\n", - " // object with the appropriate methods. Currently this is a non binary\n", - " // socket, so there is still some room for performance tuning.\n", - " var ws = {};\n", - "\n", - " ws.close = function() {\n", - " comm.close()\n", - " };\n", - " ws.send = function(m) {\n", - " //console.log('sending', m);\n", - " comm.send(m);\n", - " };\n", - " // Register the callback with on_msg.\n", - " comm.on_msg(function(msg) {\n", - " //console.log('receiving', msg['content']['data'], msg);\n", - " // Pass the mpl event to the overriden (by mpl) onmessage function.\n", - " ws.onmessage(msg['content']['data'])\n", - " });\n", - " return ws;\n", - "}\n", - "\n", - "mpl.mpl_figure_comm = function(comm, msg) {\n", - " // This is the function which gets called when the mpl process\n", - " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", - "\n", - " var id = msg.content.data.id;\n", - " // Get hold of the div created by the display call when the Comm\n", - " // socket was opened in Python.\n", - " var element = $(\"#\" + id);\n", - " var ws_proxy = comm_websocket_adapter(comm)\n", - "\n", - " function ondownload(figure, format) {\n", - " window.open(figure.imageObj.src);\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy,\n", - " ondownload,\n", - " element.get(0));\n", - "\n", - " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", - " // web socket which is closed, not our websocket->open comm proxy.\n", - " ws_proxy.onopen();\n", - "\n", - " fig.parent_element = element.get(0);\n", - " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", - " if (!fig.cell_info) {\n", - " console.error(\"Failed to find cell for figure\", id, fig);\n", - " return;\n", - " }\n", - "\n", - " var output_index = fig.cell_info[2]\n", - " var cell = fig.cell_info[0];\n", - "\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function(fig, msg) {\n", - " var width = fig.canvas.width/mpl.ratio\n", - " fig.root.unbind('remove')\n", - "\n", - " // Update the output cell to use the data from the current canvas.\n", - " fig.push_to_output();\n", - " var dataURL = fig.canvas.toDataURL();\n", - " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", - " // the notebook keyboard shortcuts fail.\n", - " IPython.keyboard_manager.enable()\n", - " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", - " fig.close_ws(fig, msg);\n", - "}\n", - "\n", - "mpl.figure.prototype.close_ws = function(fig, msg){\n", - " fig.send_message('closing', msg);\n", - " // fig.ws.close()\n", - "}\n", - "\n", - "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", - " // Turn the data on the canvas into data in the output cell.\n", - " var width = this.canvas.width/mpl.ratio\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", - "}\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function() {\n", - " // Tell IPython that the notebook contents must change.\n", - " IPython.notebook.set_dirty(true);\n", - " this.send_message(\"ack\", {});\n", - " var fig = this;\n", - " // Wait a second, then push the new image to the DOM so\n", - " // that it is saved nicely (might be nice to debounce this).\n", - " setTimeout(function () { fig.push_to_output() }, 1000);\n", - "}\n", - "\n", - "mpl.figure.prototype._init_toolbar = function() {\n", - " var fig = this;\n", - "\n", - " var nav_element = $('<div/>')\n", - " nav_element.attr('style', 'width: 100%');\n", - " this.root.append(nav_element);\n", - "\n", - " // Define a callback function for later on.\n", - " function toolbar_event(event) {\n", - " return fig.toolbar_button_onclick(event['data']);\n", - " }\n", - " function toolbar_mouse_event(event) {\n", - " return fig.toolbar_button_onmouseover(event['data']);\n", - " }\n", - "\n", - " for(var toolbar_ind in mpl.toolbar_items){\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) { continue; };\n", - "\n", - " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", - " button.click(method_name, toolbar_event);\n", - " button.mouseover(tooltip, toolbar_mouse_event);\n", - " nav_element.append(button);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", - " nav_element.append(status_bar);\n", - " this.message = status_bar[0];\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", - " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", - " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", - " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", - " buttongrp.append(button);\n", - " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", - " titlebar.prepend(buttongrp);\n", - "}\n", - "\n", - "mpl.figure.prototype._root_extra_style = function(el){\n", - " var fig = this\n", - " el.on(\"remove\", function(){\n", - "\tfig.close_ws(fig, {});\n", - " });\n", - "}\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function(el){\n", - " // this is important to make the div 'focusable\n", - " el.attr('tabindex', 0)\n", - " // reach out to IPython and tell the keyboard manager to turn it's self\n", - " // off when our div gets focus\n", - "\n", - " // location in version 3\n", - " if (IPython.notebook.keyboard_manager) {\n", - " IPython.notebook.keyboard_manager.register_events(el);\n", - " }\n", - " else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "\n", - "}\n", - "\n", - "mpl.figure.prototype._key_event_extra = function(event, name) {\n", - " var manager = IPython.notebook.keyboard_manager;\n", - " if (!manager)\n", - " manager = IPython.keyboard_manager;\n", - "\n", - " // Check for shift+enter\n", - " if (event.shiftKey && event.which == 13) {\n", - " this.canvas_div.blur();\n", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\n", - " }\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_save = function(fig, msg) {\n", - " fig.ondownload(fig, null);\n", - "}\n", - "\n", - "\n", - "mpl.find_output_cell = function(html_output) {\n", - " // Return the cell and output element which can be found *uniquely* in the notebook.\n", - " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", - " // IPython event is triggered only after the cells have been serialised, which for\n", - " // our purposes (turning an active figure into a static one), is too late.\n", - " var cells = IPython.notebook.get_cells();\n", - " var ncells = cells.length;\n", - " for (var i=0; i<ncells; i++) {\n", - " var cell = cells[i];\n", - " if (cell.cell_type === 'code'){\n", - " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", - " var data = cell.output_area.outputs[j];\n", - " if (data.data) {\n", - " // IPython >= 3 moved mimebundle to data attribute of output\n", - " data = data.data;\n", - " }\n", - " if (data['text/html'] == html_output) {\n", - " return [cell, data, j];\n", - " }\n", - " }\n", - " }\n", - " }\n", - "}\n", - "\n", - "// Register the function which deals with the matplotlib target/channel.\n", - "// The kernel may be null if the page has been refreshed.\n", - "if (IPython.notebook.kernel != null) {\n", - " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", - "}\n" - ], - "text/plain": [ - "<IPython.core.display.Javascript object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "<img src=\"data:image/png;base64,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\" width=\"600\">" - ], - "text/plain": [ - "<IPython.core.display.HTML object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "pnl_alloc = go.alloc('pnl')\n", "alloc = pnl_alloc.xs(report_date)\n", @@ -841,811 +38,9 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/edwin/projects/code/python/globeop_reports.py:146: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n", - " \n" - ] - }, - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "window.mpl = {};\n", - "\n", - "\n", - "mpl.get_websocket_type = function() {\n", - " if (typeof(WebSocket) !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof(MozWebSocket) !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert('Your browser does not have WebSocket support.' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.');\n", - " };\n", - "}\n", - "\n", - "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = (this.ws.binaryType != undefined);\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById(\"mpl-warnings\");\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent = (\n", - " \"This browser does not support binary websocket messages. \" +\n", - " \"Performance may be slow.\");\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = $('<div/>');\n", - " this._root_extra_style(this.root)\n", - " this.root.attr('style', 'display: inline-block');\n", - "\n", - " $(parent_element).append(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", - " fig.send_message(\"send_image_mode\", {});\n", - " if (mpl.ratio != 1) {\n", - " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", - " }\n", - " fig.send_message(\"refresh\", {});\n", - " }\n", - "\n", - " this.imageObj.onload = function() {\n", - " if (fig.image_mode == 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function() {\n", - " this.ws.close();\n", - " }\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "}\n", - "\n", - "mpl.figure.prototype._init_header = function() {\n", - " var titlebar = $(\n", - " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", - " 'ui-helper-clearfix\"/>');\n", - " var titletext = $(\n", - " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", - " 'text-align: center; padding: 3px;\"/>');\n", - " titlebar.append(titletext)\n", - " this.root.append(titlebar);\n", - " this.header = titletext[0];\n", - "}\n", - "\n", - "\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", - "\n", - "}\n", - "\n", - "\n", - "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", - "\n", - "}\n", - "\n", - "mpl.figure.prototype._init_canvas = function() {\n", - " var fig = this;\n", - "\n", - " var canvas_div = $('<div/>');\n", - "\n", - " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", - "\n", - " function canvas_keyboard_event(event) {\n", - " return fig.key_event(event, event['data']);\n", - " }\n", - "\n", - " canvas_div.keydown('key_press', canvas_keyboard_event);\n", - " canvas_div.keyup('key_release', canvas_keyboard_event);\n", - " this.canvas_div = canvas_div\n", - " this._canvas_extra_style(canvas_div)\n", - " this.root.append(canvas_div);\n", - "\n", - " var canvas = $('<canvas/>');\n", - " canvas.addClass('mpl-canvas');\n", - " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", - "\n", - " this.canvas = canvas[0];\n", - " this.context = canvas[0].getContext(\"2d\");\n", - "\n", - " var backingStore = this.context.backingStorePixelRatio ||\n", - "\tthis.context.webkitBackingStorePixelRatio ||\n", - "\tthis.context.mozBackingStorePixelRatio ||\n", - "\tthis.context.msBackingStorePixelRatio ||\n", - "\tthis.context.oBackingStorePixelRatio ||\n", - "\tthis.context.backingStorePixelRatio || 1;\n", - "\n", - " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband = $('<canvas/>');\n", - " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", - "\n", - " var pass_mouse_events = true;\n", - "\n", - " canvas_div.resizable({\n", - " start: function(event, ui) {\n", - " pass_mouse_events = false;\n", - " },\n", - " resize: function(event, ui) {\n", - " fig.request_resize(ui.size.width, ui.size.height);\n", - " },\n", - " stop: function(event, ui) {\n", - " pass_mouse_events = true;\n", - " fig.request_resize(ui.size.width, ui.size.height);\n", - " },\n", - " });\n", - "\n", - " function mouse_event_fn(event) {\n", - " if (pass_mouse_events)\n", - " return fig.mouse_event(event, event['data']);\n", - " }\n", - "\n", - " rubberband.mousedown('button_press', mouse_event_fn);\n", - " rubberband.mouseup('button_release', mouse_event_fn);\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband.mousemove('motion_notify', mouse_event_fn);\n", - "\n", - " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", - " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", - "\n", - " canvas_div.on(\"wheel\", function (event) {\n", - " event = event.originalEvent;\n", - " event['data'] = 'scroll'\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " mouse_event_fn(event);\n", - " });\n", - "\n", - " canvas_div.append(canvas);\n", - " canvas_div.append(rubberband);\n", - "\n", - " this.rubberband = rubberband;\n", - " this.rubberband_canvas = rubberband[0];\n", - " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", - " this.rubberband_context.strokeStyle = \"#000000\";\n", - "\n", - " this._resize_canvas = function(width, height) {\n", - " // Keep the size of the canvas, canvas container, and rubber band\n", - " // canvas in synch.\n", - " canvas_div.css('width', width)\n", - " canvas_div.css('height', height)\n", - "\n", - " canvas.attr('width', width * mpl.ratio);\n", - " canvas.attr('height', height * mpl.ratio);\n", - " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", - "\n", - " rubberband.attr('width', width);\n", - " rubberband.attr('height', height);\n", - " }\n", - "\n", - " // Set the figure to an initial 600x600px, this will subsequently be updated\n", - " // upon first draw.\n", - " this._resize_canvas(600, 600);\n", - "\n", - " // Disable right mouse context menu.\n", - " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", - " return false;\n", - " });\n", - "\n", - " function set_focus () {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "}\n", - "\n", - "mpl.figure.prototype._init_toolbar = function() {\n", - " var fig = this;\n", - "\n", - " var nav_element = $('<div/>')\n", - " nav_element.attr('style', 'width: 100%');\n", - " this.root.append(nav_element);\n", - "\n", - " // Define a callback function for later on.\n", - " function toolbar_event(event) {\n", - " return fig.toolbar_button_onclick(event['data']);\n", - " }\n", - " function toolbar_mouse_event(event) {\n", - " return fig.toolbar_button_onmouseover(event['data']);\n", - " }\n", - "\n", - " for(var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " // put a spacer in here.\n", - " continue;\n", - " }\n", - " var button = $('<button/>');\n", - " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", - " 'ui-button-icon-only');\n", - " button.attr('role', 'button');\n", - " button.attr('aria-disabled', 'false');\n", - " button.click(method_name, toolbar_event);\n", - " button.mouseover(tooltip, toolbar_mouse_event);\n", - "\n", - " var icon_img = $('<span/>');\n", - " icon_img.addClass('ui-button-icon-primary ui-icon');\n", - " icon_img.addClass(image);\n", - " icon_img.addClass('ui-corner-all');\n", - "\n", - " var tooltip_span = $('<span/>');\n", - " tooltip_span.addClass('ui-button-text');\n", - " tooltip_span.html(tooltip);\n", - "\n", - " button.append(icon_img);\n", - " button.append(tooltip_span);\n", - "\n", - " nav_element.append(button);\n", - " }\n", - "\n", - " var fmt_picker_span = $('<span/>');\n", - "\n", - " var fmt_picker = $('<select/>');\n", - " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", - " fmt_picker_span.append(fmt_picker);\n", - " nav_element.append(fmt_picker_span);\n", - " this.format_dropdown = fmt_picker[0];\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = $(\n", - " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", - " fmt_picker.append(option)\n", - " }\n", - "\n", - " // Add hover states to the ui-buttons\n", - " $( \".ui-button\" ).hover(\n", - " function() { $(this).addClass(\"ui-state-hover\");},\n", - " function() { $(this).removeClass(\"ui-state-hover\");}\n", - " );\n", - "\n", - " var status_bar = $('<span class=\"mpl-message\"/>');\n", - " nav_element.append(status_bar);\n", - " this.message = status_bar[0];\n", - "}\n", - "\n", - "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", - "}\n", - "\n", - "mpl.figure.prototype.send_message = function(type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "}\n", - "\n", - "mpl.figure.prototype.send_draw_message = function() {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", - " }\n", - "}\n", - "\n", - "\n", - "mpl.figure.prototype.handle_save = function(fig, msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "}\n", - "\n", - "\n", - "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1]);\n", - " fig.send_message(\"refresh\", {});\n", - " };\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", - " var x0 = msg['x0'] / mpl.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", - " var x1 = msg['x1'] / mpl.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0, 0, fig.canvas.width, fig.canvas.height);\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", - " var cursor = msg['cursor'];\n", - " switch(cursor)\n", - " {\n", - " case 0:\n", - " cursor = 'pointer';\n", - " break;\n", - " case 1:\n", - " cursor = 'default';\n", - " break;\n", - " case 2:\n", - " cursor = 'crosshair';\n", - " break;\n", - " case 3:\n", - " cursor = 'move';\n", - " break;\n", - " }\n", - " fig.rubberband_canvas.style.cursor = cursor;\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_message = function(fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "}\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function() {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message(\"ack\", {});\n", - "}\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function(fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " evt.data.type = \"image/png\";\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src);\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " evt.data);\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig[\"handle_\" + msg_type];\n", - " } catch (e) {\n", - " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", - " }\n", - " }\n", - " };\n", - "}\n", - "\n", - "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function(e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e)\n", - " e = window.event;\n", - " if (e.target)\n", - " targ = e.target;\n", - " else if (e.srcElement)\n", - " targ = e.srcElement;\n", - " if (targ.nodeType == 3) // defeat Safari bug\n", - " targ = targ.parentNode;\n", - "\n", - " // jQuery normalizes the pageX and pageY\n", - " // pageX,Y are the mouse positions relative to the document\n", - " // offset() returns the position of the element relative to the document\n", - " var x = e.pageX - $(targ).offset().left;\n", - " var y = e.pageY - $(targ).offset().top;\n", - "\n", - " return {\"x\": x, \"y\": y};\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * http://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys (original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object')\n", - " obj[key] = original[key]\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function(event, name) {\n", - " var canvas_pos = mpl.findpos(event)\n", - "\n", - " if (name === 'button_press')\n", - " {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * mpl.ratio;\n", - " var y = canvas_pos.y * mpl.ratio;\n", - "\n", - " this.send_message(name, {x: x, y: y, button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event)});\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "}\n", - "\n", - "mpl.figure.prototype._key_event_extra = function(event, name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "}\n", - "\n", - "mpl.figure.prototype.key_event = function(event, name) {\n", - "\n", - " // Prevent repeat events\n", - " if (name == 'key_press')\n", - " {\n", - " if (event.which === this._key)\n", - " return;\n", - " else\n", - " this._key = event.which;\n", - " }\n", - " if (name == 'key_release')\n", - " this._key = null;\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.which != 17)\n", - " value += \"ctrl+\";\n", - " if (event.altKey && event.which != 18)\n", - " value += \"alt+\";\n", - " if (event.shiftKey && event.which != 16)\n", - " value += \"shift+\";\n", - "\n", - " value += 'k';\n", - " value += event.which.toString();\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, {key: value,\n", - " guiEvent: simpleKeys(event)});\n", - " return false;\n", - "}\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", - " if (name == 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message(\"toolbar_button\", {name: name});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", - " // Create a \"websocket\"-like object which calls the given IPython comm\n", - " // object with the appropriate methods. Currently this is a non binary\n", - " // socket, so there is still some room for performance tuning.\n", - " var ws = {};\n", - "\n", - " ws.close = function() {\n", - " comm.close()\n", - " };\n", - " ws.send = function(m) {\n", - " //console.log('sending', m);\n", - " comm.send(m);\n", - " };\n", - " // Register the callback with on_msg.\n", - " comm.on_msg(function(msg) {\n", - " //console.log('receiving', msg['content']['data'], msg);\n", - " // Pass the mpl event to the overriden (by mpl) onmessage function.\n", - " ws.onmessage(msg['content']['data'])\n", - " });\n", - " return ws;\n", - "}\n", - "\n", - "mpl.mpl_figure_comm = function(comm, msg) {\n", - " // This is the function which gets called when the mpl process\n", - " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", - "\n", - " var id = msg.content.data.id;\n", - " // Get hold of the div created by the display call when the Comm\n", - " // socket was opened in Python.\n", - " var element = $(\"#\" + id);\n", - " var ws_proxy = comm_websocket_adapter(comm)\n", - "\n", - " function ondownload(figure, format) {\n", - " window.open(figure.imageObj.src);\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy,\n", - " ondownload,\n", - " element.get(0));\n", - "\n", - " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", - " // web socket which is closed, not our websocket->open comm proxy.\n", - " ws_proxy.onopen();\n", - "\n", - " fig.parent_element = element.get(0);\n", - " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", - " if (!fig.cell_info) {\n", - " console.error(\"Failed to find cell for figure\", id, fig);\n", - " return;\n", - " }\n", - "\n", - " var output_index = fig.cell_info[2]\n", - " var cell = fig.cell_info[0];\n", - "\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function(fig, msg) {\n", - " var width = fig.canvas.width/mpl.ratio\n", - " fig.root.unbind('remove')\n", - "\n", - " // Update the output cell to use the data from the current canvas.\n", - " fig.push_to_output();\n", - " var dataURL = fig.canvas.toDataURL();\n", - " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", - " // the notebook keyboard shortcuts fail.\n", - " IPython.keyboard_manager.enable()\n", - " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", - " fig.close_ws(fig, msg);\n", - "}\n", - "\n", - "mpl.figure.prototype.close_ws = function(fig, msg){\n", - " fig.send_message('closing', msg);\n", - " // fig.ws.close()\n", - "}\n", - "\n", - "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", - " // Turn the data on the canvas into data in the output cell.\n", - " var width = this.canvas.width/mpl.ratio\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", - "}\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function() {\n", - " // Tell IPython that the notebook contents must change.\n", - " IPython.notebook.set_dirty(true);\n", - " this.send_message(\"ack\", {});\n", - " var fig = this;\n", - " // Wait a second, then push the new image to the DOM so\n", - " // that it is saved nicely (might be nice to debounce this).\n", - " setTimeout(function () { fig.push_to_output() }, 1000);\n", - "}\n", - "\n", - "mpl.figure.prototype._init_toolbar = function() {\n", - " var fig = this;\n", - "\n", - " var nav_element = $('<div/>')\n", - " nav_element.attr('style', 'width: 100%');\n", - " this.root.append(nav_element);\n", - "\n", - " // Define a callback function for later on.\n", - " function toolbar_event(event) {\n", - " return fig.toolbar_button_onclick(event['data']);\n", - " }\n", - " function toolbar_mouse_event(event) {\n", - " return fig.toolbar_button_onmouseover(event['data']);\n", - " }\n", - "\n", - " for(var toolbar_ind in mpl.toolbar_items){\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) { continue; };\n", - "\n", - " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", - " button.click(method_name, toolbar_event);\n", - " button.mouseover(tooltip, toolbar_mouse_event);\n", - " nav_element.append(button);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", - " nav_element.append(status_bar);\n", - " this.message = status_bar[0];\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", - " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", - " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", - " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", - " buttongrp.append(button);\n", - " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", - " titlebar.prepend(buttongrp);\n", - "}\n", - "\n", - "mpl.figure.prototype._root_extra_style = function(el){\n", - " var fig = this\n", - " el.on(\"remove\", function(){\n", - "\tfig.close_ws(fig, {});\n", - " });\n", - "}\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function(el){\n", - " // this is important to make the div 'focusable\n", - " el.attr('tabindex', 0)\n", - " // reach out to IPython and tell the keyboard manager to turn it's self\n", - " // off when our div gets focus\n", - "\n", - " // location in version 3\n", - " if (IPython.notebook.keyboard_manager) {\n", - " IPython.notebook.keyboard_manager.register_events(el);\n", - " }\n", - " else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "\n", - "}\n", - "\n", - "mpl.figure.prototype._key_event_extra = function(event, name) {\n", - " var manager = IPython.notebook.keyboard_manager;\n", - " if (!manager)\n", - " manager = IPython.keyboard_manager;\n", - "\n", - " // Check for shift+enter\n", - " if (event.shiftKey && event.which == 13) {\n", - " this.canvas_div.blur();\n", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\n", - " }\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_save = function(fig, msg) {\n", - " fig.ondownload(fig, null);\n", - "}\n", - "\n", - "\n", - "mpl.find_output_cell = function(html_output) {\n", - " // Return the cell and output element which can be found *uniquely* in the notebook.\n", - " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", - " // IPython event is triggered only after the cells have been serialised, which for\n", - " // our purposes (turning an active figure into a static one), is too late.\n", - " var cells = IPython.notebook.get_cells();\n", - " var ncells = cells.length;\n", - " for (var i=0; i<ncells; i++) {\n", - " var cell = cells[i];\n", - " if (cell.cell_type === 'code'){\n", - " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", - " var data = cell.output_area.outputs[j];\n", - " if (data.data) {\n", - " // IPython >= 3 moved mimebundle to data attribute of output\n", - " data = data.data;\n", - " }\n", - " if (data['text/html'] == html_output) {\n", - " return [cell, data, j];\n", - " }\n", - " }\n", - " }\n", - " }\n", - "}\n", - "\n", - "// Register the function which deals with the matplotlib target/channel.\n", - "// The kernel may be null if the page has been refreshed.\n", - "if (IPython.notebook.kernel != null) {\n", - " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", - "}\n" - ], - "text/plain": [ - "<IPython.core.display.Javascript object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyAAAAGQCAYAAABWJQQ0AAAgAElEQVR4XuydB3hUVfrG3zOTQgKhV6UqRRSwIOqqICiWte2qK7oqElCZiKKru+v+bWuCFbswsfeu2Ou6JsGOXSQTFEUFLPQaQkiZe/7PF+64Y0zIJJly77nveR4eNDn3nO/7ncvMfe853/cpsJEACZAACZAACZAACZAACZBAkgioJM3DaUiABEiABEiABEiABEiABEgAFCC8CUiABEiABEiABEiABEiABJJGgAIkaag5EQmQAAmQAAmQAAmQAAmQAAUI7wESIAESIAESIAESIAESIIGkEaAASRpqTkQCJEACJEACJEACJEACJEABwnuABEiABEiABEiABEiABEggaQQoQJKGmhORAAmQAAmQAAmQAAmQAAlQgPAeIAESIAESIAESIAESIAESSBoBCpCkoeZEJEACJEACJEACJEACJEACFCC8B0iABEiABEiABEiABEiABJJGgAIkaag5EQmQAAmQAAmQAAmQAAmQAAUI7wESIAESIAESIAESIAESIIGkEaAASRpqTkQCJEACJEACJEACJEACJEABwnuABEiABEiABEiABEiABEggaQQoQJKGmhORAAmQAAmQAAmQAAmQAAlQgPAeIAESIAESIAESIAESIAESSBoBCpCkoeZEJEACJEACJEACJEACJEACFCC8B0iABEiABEiABEiABEiABJJGgAIkaag5EQmQAAmQAAmQAAmQAAmQAAUI7wESIAESIAESIAESIAESIIGkEaAASRpqTkQCJEACJEACJEACJEACJEABwnuABEiABEiABLxN4HgAAQAjAXQBsCeA+U0geQvAQQ30eQ3AUfbP/wHgn/Z/Xwfglqj++wK4HcA+AMLexk/vScB7BChAvLfm9JgESIAESIAEoglMBDAAwC8A7olRgHQGkBE1iAiXLwGcCeBBAMMBfATgaADyrPEKgFEAQgDSAXwMYCqAT7gUJEAC3iNAAeK9NafHJEACJEACJNAQgf4AfohRgNS//m8AZgDoBaACwAQAFwLYz+4oYuRGAHMAXAKgB4DzuQwkQALeJEAB4s11p9ckQAIkQAIkUJ9AawRIKYB59q6GjDsUwPsA9rB3QORI1/4AagDIMS057lXOJSABEvAmAQoQb647vSYBEiABEiCBeAkQieOQHQ6J65Cj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JBMUdQ0REAERyDKB2dMW7e20RccYY8YYgzHWYgyAoVmeRi5ut84Ys9JarIR1VkYj0ecHbVj/8uT5k2O5mIzuKQIiIAIi0HkCEiCdZ6YzREAERMCXBGZdsnRENOp8CsYc4Dh2lDEYBbT/2Q9AsS8nvfOkmAy+HhZrjcFaC/5t3ojFnBcLo7GVl82ZuC5P7NA0RUAEREAEUhCQANGjIQIiIAIBJ9BedeuSR4dHjbOPYzA8EjEjLOxwOBgOY0YAdi8A/QGUAOjdgzgoLjZRXFhj10Zg1lpr1yJi1lo4a60TWYvi5ndmVJ3OKlUaIiACIiACASUgARLQhZVZIiACItAVAhQrvztvcZ++JShpa0OJMYV9nKgtiTq2xEYoUCJ9rLUlEYMS61iLSKTJWNtkYRr5dyxqm4wTbTKObYoUOE3RWFFTY0usKdqvqUnCoisronNEQAREIHgEJECCt6aySAREQAREQAREQAREQAR8S0ACxLdLo4mJgAiIgAiIgAiIgAiIQPAISIAEb01lkQiIgAiIgAiIgAiIgAj4loAEiG+XRhMTAREQAREQAREQAREQgeARkAAJ3prKIhEQAREQAREQAREQARHwLQEJEN8ujSYmAiIgAiIgAiIgAiIgAsEjIAESvDWVRSIgAiIgAiIgAiIgAiLgWwISIL5dGk1MBERABERABERABERABIJHQAIkeGsqi0RABERABERABERABETAtwQkQHy7NJqYCIiACIiACIiACIiACASPgARI8NZUFomACIiACIiACIiACIiAbwlIgPh2aTQxERABERABERABERABEQgeAQmQ4K2pLBIBERABERABERABERAB3xKQAPHt0mhiIiACIiACIiACIiACIhA8AhIgwVtTWSQCIiACIiACIiACIiACviUgAeLbpdHEREAEREAEREAEREAERCB4BCRAgremskgEREAEREAEREAEREAEfEtAAsS3S6OJiYAIiIAIiIAIiIAIiEDwCEiABG9NZZEIiIAIiIAIiIAIiIAI+JaABIhvl0YTEwEREAEREAEREAEREIHgEZAACd6ayiIREAEREAEREAEREAER8C0BCRDfLo0mJgIiIAIiIAIiIAIiIALBIyABErw1lUUiIAIiIAIiIAIiIAIi4FsCEiC+XRpNTAREQAREQAREQAREQASCR0ACJHhrKotEQAREQAREQAREQAREwLcEJEB8uzSamAiIgAiIgAiIgAiIgAgEj4AESPDWVBaJgAiIgAiIgAiIgAiIgG8JSID4dmk0MREQAREQAREQAREQAREIHoH/D3OnEa0uxC0+AAAAAElFTkSuQmCC\" width=\"800\">" - ], - "text/plain": [ - "<IPython.core.display.HTML object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "#Capital Allocation\n", "cap_alloc = go.alloc('capital')\n", @@ -1655,20 +50,9 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "0.507475204467614" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "#Average Portfolio Sales Turnover - as of last monthend from today\n", "go.avg_turnover()" @@ -1676,538 +60,9 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style>\n", - " .dataframe thead tr:only-child th {\n", - " text-align: right;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: left;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>port</th>\n", - " <th>CASH</th>\n", - " <th>CLO</th>\n", - " <th>MORTGAGES</th>\n", - " <th>STRUCTURED</th>\n", - " </tr>\n", - " <tr>\n", - " <th>periodenddate</th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>2013-01-31</th>\n", - " <td>1.0</td>\n", - " <td>NaN</td>\n", - " <td>3.0</td>\n", - " <td>1.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-02-28</th>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " <td>9.0</td>\n", - " <td>3.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-03-31</th>\n", - " <td>1.0</td>\n", - " <td>3.0</td>\n", - " <td>17.0</td>\n", - " <td>2.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-04-30</th>\n", - " <td>1.0</td>\n", - " <td>3.0</td>\n", - " <td>20.0</td>\n", - " <td>2.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-05-31</th>\n", - " <td>1.0</td>\n", - " <td>2.0</td>\n", - " <td>23.0</td>\n", - " <td>2.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-06-30</th>\n", - " <td>1.0</td>\n", - " <td>2.0</td>\n", - " <td>27.0</td>\n", - " <td>4.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-07-31</th>\n", - " <td>1.0</td>\n", - " <td>2.0</td>\n", - " <td>27.0</td>\n", - " <td>4.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-08-31</th>\n", - " <td>1.0</td>\n", - " <td>2.0</td>\n", - " <td>33.0</td>\n", - " <td>4.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-09-30</th>\n", - " <td>1.0</td>\n", - " <td>2.0</td>\n", - " <td>34.0</td>\n", - " <td>4.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-10-31</th>\n", - " <td>1.0</td>\n", - " <td>3.0</td>\n", - " <td>30.0</td>\n", - " <td>4.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-11-30</th>\n", - " <td>1.0</td>\n", - " <td>3.0</td>\n", - " <td>33.0</td>\n", - " <td>4.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-12-31</th>\n", - " <td>1.0</td>\n", - " <td>4.0</td>\n", - " <td>29.0</td>\n", - " <td>4.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-01-31</th>\n", - " <td>1.0</td>\n", - " <td>4.0</td>\n", - " <td>25.0</td>\n", - " <td>4.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-02-28</th>\n", - " <td>1.0</td>\n", - " <td>5.0</td>\n", - " <td>23.0</td>\n", - " <td>5.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-03-31</th>\n", - " <td>1.0</td>\n", - " <td>5.0</td>\n", - " <td>27.0</td>\n", - " <td>5.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-04-30</th>\n", - " <td>1.0</td>\n", - " <td>5.0</td>\n", - " <td>24.0</td>\n", - " <td>5.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-05-31</th>\n", - " <td>1.0</td>\n", - " <td>6.0</td>\n", - " <td>21.0</td>\n", - " <td>5.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-06-30</th>\n", - " <td>1.0</td>\n", - " <td>7.0</td>\n", - " <td>22.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-07-31</th>\n", - " <td>1.0</td>\n", - " <td>6.0</td>\n", - " <td>17.0</td>\n", - " <td>6.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-08-31</th>\n", - " <td>1.0</td>\n", - " <td>6.0</td>\n", - " <td>16.0</td>\n", - " <td>6.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-09-30</th>\n", - " <td>1.0</td>\n", - " <td>6.0</td>\n", - " <td>15.0</td>\n", - " <td>6.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-10-31</th>\n", - " <td>1.0</td>\n", - " <td>6.0</td>\n", - " <td>18.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-11-30</th>\n", - " <td>1.0</td>\n", - " <td>6.0</td>\n", - " <td>19.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-12-31</th>\n", - " <td>1.0</td>\n", - " <td>6.0</td>\n", - " <td>18.0</td>\n", - " <td>8.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-01-31</th>\n", - " <td>1.0</td>\n", - " <td>6.0</td>\n", - " <td>23.0</td>\n", - " <td>9.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-02-28</th>\n", - " <td>1.0</td>\n", - " <td>6.0</td>\n", - " <td>27.0</td>\n", - " <td>9.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-03-31</th>\n", - " <td>1.0</td>\n", - " <td>6.0</td>\n", - " <td>26.0</td>\n", - " <td>10.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-04-30</th>\n", - " <td>1.0</td>\n", - " <td>6.0</td>\n", - " <td>35.0</td>\n", - " <td>10.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-05-31</th>\n", - " <td>1.0</td>\n", - " <td>6.0</td>\n", - " <td>43.0</td>\n", - " <td>10.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-06-30</th>\n", - " <td>1.0</td>\n", - " <td>7.0</td>\n", - " <td>40.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-07-31</th>\n", - " <td>1.0</td>\n", - " <td>7.0</td>\n", - " <td>45.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-08-31</th>\n", - " <td>1.0</td>\n", - " <td>7.0</td>\n", - " <td>45.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-09-30</th>\n", - " <td>1.0</td>\n", - " <td>7.0</td>\n", - " <td>56.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-10-31</th>\n", - " <td>1.0</td>\n", - " <td>7.0</td>\n", - " <td>56.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-11-30</th>\n", - " <td>1.0</td>\n", - " <td>7.0</td>\n", - " <td>54.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-12-31</th>\n", - " <td>1.0</td>\n", - " <td>7.0</td>\n", - " <td>54.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-01-31</th>\n", - " <td>1.0</td>\n", - " <td>9.0</td>\n", - " <td>60.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-02-29</th>\n", - " <td>1.0</td>\n", - " <td>9.0</td>\n", - " <td>59.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-03-31</th>\n", - " <td>1.0</td>\n", - " <td>9.0</td>\n", - " <td>60.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-04-30</th>\n", - " <td>1.0</td>\n", - " <td>7.0</td>\n", - " <td>64.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-05-31</th>\n", - " <td>1.0</td>\n", - " <td>5.0</td>\n", - " <td>65.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-06-30</th>\n", - " <td>1.0</td>\n", - " <td>5.0</td>\n", - " <td>67.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-07-31</th>\n", - " <td>1.0</td>\n", - " <td>5.0</td>\n", - " <td>67.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-08-31</th>\n", - " <td>1.0</td>\n", - " <td>3.0</td>\n", - " <td>58.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-09-30</th>\n", - " <td>1.0</td>\n", - " <td>2.0</td>\n", - " <td>53.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-10-31</th>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " <td>64.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-11-30</th>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " <td>60.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-12-31</th>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " <td>63.0</td>\n", - " <td>14.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-01-31</th>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " <td>69.0</td>\n", - " <td>12.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-02-28</th>\n", - " <td>1.0</td>\n", - " <td>NaN</td>\n", - " <td>66.0</td>\n", - " <td>12.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-03-31</th>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " <td>69.0</td>\n", - " <td>11.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-04-30</th>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " <td>68.0</td>\n", - " <td>11.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-05-31</th>\n", - " <td>1.0</td>\n", - " <td>NaN</td>\n", - " <td>63.0</td>\n", - " <td>11.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-06-30</th>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " <td>64.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-07-31</th>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " <td>64.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-08-31</th>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " <td>63.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-09-30</th>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " <td>68.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-10-31</th>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " <td>66.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-11-30</th>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " <td>65.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-12-31</th>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " <td>65.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - "port CASH CLO MORTGAGES STRUCTURED\n", - "periodenddate \n", - "2013-01-31 1.0 NaN 3.0 1.0\n", - "2013-02-28 1.0 1.0 9.0 3.0\n", - "2013-03-31 1.0 3.0 17.0 2.0\n", - "2013-04-30 1.0 3.0 20.0 2.0\n", - "2013-05-31 1.0 2.0 23.0 2.0\n", - "2013-06-30 1.0 2.0 27.0 4.0\n", - "2013-07-31 1.0 2.0 27.0 4.0\n", - "2013-08-31 1.0 2.0 33.0 4.0\n", - "2013-09-30 1.0 2.0 34.0 4.0\n", - "2013-10-31 1.0 3.0 30.0 4.0\n", - "2013-11-30 1.0 3.0 33.0 4.0\n", - "2013-12-31 1.0 4.0 29.0 4.0\n", - "2014-01-31 1.0 4.0 25.0 4.0\n", - "2014-02-28 1.0 5.0 23.0 5.0\n", - "2014-03-31 1.0 5.0 27.0 5.0\n", - "2014-04-30 1.0 5.0 24.0 5.0\n", - "2014-05-31 1.0 6.0 21.0 5.0\n", - "2014-06-30 1.0 7.0 22.0 7.0\n", - "2014-07-31 1.0 6.0 17.0 6.0\n", - "2014-08-31 1.0 6.0 16.0 6.0\n", - "2014-09-30 1.0 6.0 15.0 6.0\n", - "2014-10-31 1.0 6.0 18.0 7.0\n", - "2014-11-30 1.0 6.0 19.0 7.0\n", - "2014-12-31 1.0 6.0 18.0 8.0\n", - "2015-01-31 1.0 6.0 23.0 9.0\n", - "2015-02-28 1.0 6.0 27.0 9.0\n", - "2015-03-31 1.0 6.0 26.0 10.0\n", - "2015-04-30 1.0 6.0 35.0 10.0\n", - "2015-05-31 1.0 6.0 43.0 10.0\n", - "2015-06-30 1.0 7.0 40.0 14.0\n", - "2015-07-31 1.0 7.0 45.0 14.0\n", - "2015-08-31 1.0 7.0 45.0 14.0\n", - "2015-09-30 1.0 7.0 56.0 14.0\n", - "2015-10-31 1.0 7.0 56.0 14.0\n", - "2015-11-30 1.0 7.0 54.0 14.0\n", - "2015-12-31 1.0 7.0 54.0 14.0\n", - "2016-01-31 1.0 9.0 60.0 14.0\n", - "2016-02-29 1.0 9.0 59.0 14.0\n", - "2016-03-31 1.0 9.0 60.0 14.0\n", - "2016-04-30 1.0 7.0 64.0 14.0\n", - "2016-05-31 1.0 5.0 65.0 14.0\n", - "2016-06-30 1.0 5.0 67.0 14.0\n", - "2016-07-31 1.0 5.0 67.0 14.0\n", - "2016-08-31 1.0 3.0 58.0 14.0\n", - "2016-09-30 1.0 2.0 53.0 14.0\n", - "2016-10-31 1.0 1.0 64.0 14.0\n", - "2016-11-30 1.0 1.0 60.0 14.0\n", - "2016-12-31 1.0 1.0 63.0 14.0\n", - "2017-01-31 1.0 1.0 69.0 12.0\n", - "2017-02-28 1.0 NaN 66.0 12.0\n", - "2017-03-31 1.0 1.0 69.0 11.0\n", - "2017-04-30 1.0 1.0 68.0 11.0\n", - "2017-05-31 1.0 NaN 63.0 11.0\n", - "2017-06-30 1.0 1.0 64.0 7.0\n", - "2017-07-31 1.0 1.0 64.0 7.0\n", - "2017-08-31 1.0 1.0 63.0 7.0\n", - "2017-09-30 1.0 1.0 68.0 7.0\n", - "2017-10-31 1.0 1.0 66.0 7.0\n", - "2017-11-30 1.0 1.0 65.0 7.0\n", - "2017-12-31 1.0 1.0 65.0 7.0" - ] - }, - "execution_count": 32, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "#Number of bond positions by strategy by month - and copy to clipboard\n", "go.num_bond_by_strat()" @@ -2215,402 +70,9 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style>\n", - " .dataframe thead tr:only-child th {\n", - " text-align: right;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: left;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>buysell</th>\n", - " <th>False</th>\n", - " <th>True</th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>2013-01-31</th>\n", - " <td>NaN</td>\n", - " <td>4.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-02-28</th>\n", - " <td>3.0</td>\n", - " <td>17.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-03-31</th>\n", - " <td>1.0</td>\n", - " <td>11.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-04-30</th>\n", - " <td>6.0</td>\n", - " <td>10.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-05-31</th>\n", - " <td>12.0</td>\n", - " <td>15.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-06-30</th>\n", - " <td>11.0</td>\n", - " <td>17.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-07-31</th>\n", - " <td>6.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-08-31</th>\n", - " <td>4.0</td>\n", - " <td>10.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-09-30</th>\n", - " <td>13.0</td>\n", - " <td>15.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-10-31</th>\n", - " <td>10.0</td>\n", - " <td>10.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-11-30</th>\n", - " <td>6.0</td>\n", - " <td>10.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-12-31</th>\n", - " <td>6.0</td>\n", - " <td>4.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-01-31</th>\n", - " <td>10.0</td>\n", - " <td>6.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-02-28</th>\n", - " <td>6.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-03-31</th>\n", - " <td>2.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-04-30</th>\n", - " <td>4.0</td>\n", - " <td>2.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-05-31</th>\n", - " <td>6.0</td>\n", - " <td>6.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-06-30</th>\n", - " <td>2.0</td>\n", - " <td>5.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-07-31</th>\n", - " <td>6.0</td>\n", - " <td>1.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-08-31</th>\n", - " <td>3.0</td>\n", - " <td>2.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-09-30</th>\n", - " <td>6.0</td>\n", - " <td>5.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-10-31</th>\n", - " <td>4.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-11-30</th>\n", - " <td>2.0</td>\n", - " <td>3.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-12-31</th>\n", - " <td>4.0</td>\n", - " <td>4.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-01-31</th>\n", - " <td>NaN</td>\n", - " <td>9.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-02-28</th>\n", - " <td>5.0</td>\n", - " <td>10.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-03-31</th>\n", - " <td>5.0</td>\n", - " <td>6.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-04-30</th>\n", - " <td>3.0</td>\n", - " <td>15.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-05-31</th>\n", - " <td>5.0</td>\n", - " <td>13.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-06-30</th>\n", - " <td>8.0</td>\n", - " <td>13.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-07-31</th>\n", - " <td>4.0</td>\n", - " <td>12.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-08-31</th>\n", - " <td>8.0</td>\n", - " <td>9.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-09-30</th>\n", - " <td>2.0</td>\n", - " <td>13.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-10-31</th>\n", - " <td>12.0</td>\n", - " <td>8.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-11-30</th>\n", - " <td>5.0</td>\n", - " <td>3.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-12-31</th>\n", - " <td>3.0</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-01-31</th>\n", - " <td>3.0</td>\n", - " <td>12.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-02-29</th>\n", - " <td>2.0</td>\n", - " <td>2.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-03-31</th>\n", - " <td>4.0</td>\n", - " <td>5.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-04-30</th>\n", - " <td>4.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-05-31</th>\n", - " <td>2.0</td>\n", - " <td>4.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-06-30</th>\n", - " <td>6.0</td>\n", - " <td>10.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-07-31</th>\n", - " <td>0.0</td>\n", - " <td>0.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-08-31</th>\n", - " <td>17.0</td>\n", - " <td>11.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-09-30</th>\n", - " <td>8.0</td>\n", - " <td>3.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-10-31</th>\n", - " <td>1.0</td>\n", - " <td>13.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-11-30</th>\n", - " <td>6.0</td>\n", - " <td>3.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-12-31</th>\n", - " <td>1.0</td>\n", - " <td>4.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-01-31</th>\n", - " <td>NaN</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-02-28</th>\n", - " <td>5.0</td>\n", - " <td>2.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-03-31</th>\n", - " <td>1.0</td>\n", - " <td>7.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-04-30</th>\n", - " <td>3.0</td>\n", - " <td>3.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-05-31</th>\n", - " <td>7.0</td>\n", - " <td>3.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-06-30</th>\n", - " <td>3.0</td>\n", - " <td>5.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-07-31</th>\n", - " <td>1.0</td>\n", - " <td>1.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-08-31</th>\n", - " <td>3.0</td>\n", - " <td>3.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-09-30</th>\n", - " <td>NaN</td>\n", - " <td>5.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-10-31</th>\n", - " <td>3.0</td>\n", - " <td>4.0</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-11-30</th>\n", - " <td>3.0</td>\n", - " <td>2.0</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - "buysell False True \n", - "2013-01-31 NaN 4.0\n", - "2013-02-28 3.0 17.0\n", - "2013-03-31 1.0 11.0\n", - "2013-04-30 6.0 10.0\n", - "2013-05-31 12.0 15.0\n", - "2013-06-30 11.0 17.0\n", - "2013-07-31 6.0 7.0\n", - "2013-08-31 4.0 10.0\n", - "2013-09-30 13.0 15.0\n", - "2013-10-31 10.0 10.0\n", - "2013-11-30 6.0 10.0\n", - "2013-12-31 6.0 4.0\n", - "2014-01-31 10.0 6.0\n", - "2014-02-28 6.0 7.0\n", - "2014-03-31 2.0 7.0\n", - "2014-04-30 4.0 2.0\n", - "2014-05-31 6.0 6.0\n", - "2014-06-30 2.0 5.0\n", - "2014-07-31 6.0 1.0\n", - "2014-08-31 3.0 2.0\n", - "2014-09-30 6.0 5.0\n", - "2014-10-31 4.0 7.0\n", - "2014-11-30 2.0 3.0\n", - "2014-12-31 4.0 4.0\n", - "2015-01-31 NaN 9.0\n", - "2015-02-28 5.0 10.0\n", - "2015-03-31 5.0 6.0\n", - "2015-04-30 3.0 15.0\n", - "2015-05-31 5.0 13.0\n", - "2015-06-30 8.0 13.0\n", - "2015-07-31 4.0 12.0\n", - "2015-08-31 8.0 9.0\n", - "2015-09-30 2.0 13.0\n", - "2015-10-31 12.0 8.0\n", - "2015-11-30 5.0 3.0\n", - "2015-12-31 3.0 NaN\n", - "2016-01-31 3.0 12.0\n", - "2016-02-29 2.0 2.0\n", - "2016-03-31 4.0 5.0\n", - "2016-04-30 4.0 7.0\n", - "2016-05-31 2.0 4.0\n", - "2016-06-30 6.0 10.0\n", - "2016-07-31 0.0 0.0\n", - "2016-08-31 17.0 11.0\n", - "2016-09-30 8.0 3.0\n", - "2016-10-31 1.0 13.0\n", - "2016-11-30 6.0 3.0\n", - "2016-12-31 1.0 4.0\n", - "2017-01-31 NaN 7.0\n", - "2017-02-28 5.0 2.0\n", - "2017-03-31 1.0 7.0\n", - "2017-04-30 3.0 3.0\n", - "2017-05-31 7.0 3.0\n", - "2017-06-30 3.0 5.0\n", - "2017-07-31 1.0 1.0\n", - "2017-08-31 3.0 3.0\n", - "2017-09-30 NaN 5.0\n", - "2017-10-31 3.0 4.0\n", - "2017-11-30 3.0 2.0" - ] - }, - "execution_count": 33, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "#Number of bond trades by direction by month - and copy to clipboard\n", "go.num_bond_trades()" @@ -2618,10 +80,8 @@ }, { "cell_type": "code", - "execution_count": 74, - "metadata": { - "collapsed": true - }, + "execution_count": null, + "metadata": {}, "outputs": [], "source": [ "df = cap_alloc.endbooknav.groupby('periodenddate').apply(lambda x: x/x.sum())\n", @@ -2633,799 +93,9 @@ }, { "cell_type": "code", - "execution_count": 75, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "window.mpl = {};\n", - "\n", - "\n", - "mpl.get_websocket_type = function() {\n", - " if (typeof(WebSocket) !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof(MozWebSocket) !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert('Your browser does not have WebSocket support.' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.');\n", - " };\n", - "}\n", - "\n", - "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = (this.ws.binaryType != undefined);\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById(\"mpl-warnings\");\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent = (\n", - " \"This browser does not support binary websocket messages. \" +\n", - " \"Performance may be slow.\");\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = $('<div/>');\n", - " this._root_extra_style(this.root)\n", - " this.root.attr('style', 'display: inline-block');\n", - "\n", - " $(parent_element).append(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", - " fig.send_message(\"send_image_mode\", {});\n", - " if (mpl.ratio != 1) {\n", - " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", - " }\n", - " fig.send_message(\"refresh\", {});\n", - " }\n", - "\n", - " this.imageObj.onload = function() {\n", - " if (fig.image_mode == 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function() {\n", - " this.ws.close();\n", - " }\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "}\n", - "\n", - "mpl.figure.prototype._init_header = function() {\n", - " var titlebar = $(\n", - " '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n", - " 'ui-helper-clearfix\"/>');\n", - " var titletext = $(\n", - " '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n", - " 'text-align: center; padding: 3px;\"/>');\n", - " titlebar.append(titletext)\n", - " this.root.append(titlebar);\n", - " this.header = titletext[0];\n", - "}\n", - "\n", - "\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", - "\n", - "}\n", - "\n", - "\n", - "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", - "\n", - "}\n", - "\n", - "mpl.figure.prototype._init_canvas = function() {\n", - " var fig = this;\n", - "\n", - " var canvas_div = $('<div/>');\n", - "\n", - " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", - "\n", - " function canvas_keyboard_event(event) {\n", - " return fig.key_event(event, event['data']);\n", - " }\n", - "\n", - " canvas_div.keydown('key_press', canvas_keyboard_event);\n", - " canvas_div.keyup('key_release', canvas_keyboard_event);\n", - " this.canvas_div = canvas_div\n", - " this._canvas_extra_style(canvas_div)\n", - " this.root.append(canvas_div);\n", - "\n", - " var canvas = $('<canvas/>');\n", - " canvas.addClass('mpl-canvas');\n", - " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", - "\n", - " this.canvas = canvas[0];\n", - " this.context = canvas[0].getContext(\"2d\");\n", - "\n", - " var backingStore = this.context.backingStorePixelRatio ||\n", - "\tthis.context.webkitBackingStorePixelRatio ||\n", - "\tthis.context.mozBackingStorePixelRatio ||\n", - "\tthis.context.msBackingStorePixelRatio ||\n", - "\tthis.context.oBackingStorePixelRatio ||\n", - "\tthis.context.backingStorePixelRatio || 1;\n", - "\n", - " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband = $('<canvas/>');\n", - " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", - "\n", - " var pass_mouse_events = true;\n", - "\n", - " canvas_div.resizable({\n", - " start: function(event, ui) {\n", - " pass_mouse_events = false;\n", - " },\n", - " resize: function(event, ui) {\n", - " fig.request_resize(ui.size.width, ui.size.height);\n", - " },\n", - " stop: function(event, ui) {\n", - " pass_mouse_events = true;\n", - " fig.request_resize(ui.size.width, ui.size.height);\n", - " },\n", - " });\n", - "\n", - " function mouse_event_fn(event) {\n", - " if (pass_mouse_events)\n", - " return fig.mouse_event(event, event['data']);\n", - " }\n", - "\n", - " rubberband.mousedown('button_press', mouse_event_fn);\n", - " rubberband.mouseup('button_release', mouse_event_fn);\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband.mousemove('motion_notify', mouse_event_fn);\n", - "\n", - " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", - " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", - "\n", - " canvas_div.on(\"wheel\", function (event) {\n", - " event = event.originalEvent;\n", - " event['data'] = 'scroll'\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " mouse_event_fn(event);\n", - " });\n", - "\n", - " canvas_div.append(canvas);\n", - " canvas_div.append(rubberband);\n", - "\n", - " this.rubberband = rubberband;\n", - " this.rubberband_canvas = rubberband[0];\n", - " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", - " this.rubberband_context.strokeStyle = \"#000000\";\n", - "\n", - " this._resize_canvas = function(width, height) {\n", - " // Keep the size of the canvas, canvas container, and rubber band\n", - " // canvas in synch.\n", - " canvas_div.css('width', width)\n", - " canvas_div.css('height', height)\n", - "\n", - " canvas.attr('width', width * mpl.ratio);\n", - " canvas.attr('height', height * mpl.ratio);\n", - " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", - "\n", - " rubberband.attr('width', width);\n", - " rubberband.attr('height', height);\n", - " }\n", - "\n", - " // Set the figure to an initial 600x600px, this will subsequently be updated\n", - " // upon first draw.\n", - " this._resize_canvas(600, 600);\n", - "\n", - " // Disable right mouse context menu.\n", - " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", - " return false;\n", - " });\n", - "\n", - " function set_focus () {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "}\n", - "\n", - "mpl.figure.prototype._init_toolbar = function() {\n", - " var fig = this;\n", - "\n", - " var nav_element = $('<div/>')\n", - " nav_element.attr('style', 'width: 100%');\n", - " this.root.append(nav_element);\n", - "\n", - " // Define a callback function for later on.\n", - " function toolbar_event(event) {\n", - " return fig.toolbar_button_onclick(event['data']);\n", - " }\n", - " function toolbar_mouse_event(event) {\n", - " return fig.toolbar_button_onmouseover(event['data']);\n", - " }\n", - "\n", - " for(var toolbar_ind in mpl.toolbar_items) {\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) {\n", - " // put a spacer in here.\n", - " continue;\n", - " }\n", - " var button = $('<button/>');\n", - " button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n", - " 'ui-button-icon-only');\n", - " button.attr('role', 'button');\n", - " button.attr('aria-disabled', 'false');\n", - " button.click(method_name, toolbar_event);\n", - " button.mouseover(tooltip, toolbar_mouse_event);\n", - "\n", - " var icon_img = $('<span/>');\n", - " icon_img.addClass('ui-button-icon-primary ui-icon');\n", - " icon_img.addClass(image);\n", - " icon_img.addClass('ui-corner-all');\n", - "\n", - " var tooltip_span = $('<span/>');\n", - " tooltip_span.addClass('ui-button-text');\n", - " tooltip_span.html(tooltip);\n", - "\n", - " button.append(icon_img);\n", - " button.append(tooltip_span);\n", - "\n", - " nav_element.append(button);\n", - " }\n", - "\n", - " var fmt_picker_span = $('<span/>');\n", - "\n", - " var fmt_picker = $('<select/>');\n", - " fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n", - " fmt_picker_span.append(fmt_picker);\n", - " nav_element.append(fmt_picker_span);\n", - " this.format_dropdown = fmt_picker[0];\n", - "\n", - " for (var ind in mpl.extensions) {\n", - " var fmt = mpl.extensions[ind];\n", - " var option = $(\n", - " '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n", - " fmt_picker.append(option)\n", - " }\n", - "\n", - " // Add hover states to the ui-buttons\n", - " $( \".ui-button\" ).hover(\n", - " function() { $(this).addClass(\"ui-state-hover\");},\n", - " function() { $(this).removeClass(\"ui-state-hover\");}\n", - " );\n", - "\n", - " var status_bar = $('<span class=\"mpl-message\"/>');\n", - " nav_element.append(status_bar);\n", - " this.message = status_bar[0];\n", - "}\n", - "\n", - "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n", - " // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n", - " // which will in turn request a refresh of the image.\n", - " this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n", - "}\n", - "\n", - "mpl.figure.prototype.send_message = function(type, properties) {\n", - " properties['type'] = type;\n", - " properties['figure_id'] = this.id;\n", - " this.ws.send(JSON.stringify(properties));\n", - "}\n", - "\n", - "mpl.figure.prototype.send_draw_message = function() {\n", - " if (!this.waiting) {\n", - " this.waiting = true;\n", - " this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n", - " }\n", - "}\n", - "\n", - "\n", - "mpl.figure.prototype.handle_save = function(fig, msg) {\n", - " var format_dropdown = fig.format_dropdown;\n", - " var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n", - " fig.ondownload(fig, format);\n", - "}\n", - "\n", - "\n", - "mpl.figure.prototype.handle_resize = function(fig, msg) {\n", - " var size = msg['size'];\n", - " if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n", - " fig._resize_canvas(size[0], size[1]);\n", - " fig.send_message(\"refresh\", {});\n", - " };\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n", - " var x0 = msg['x0'] / mpl.ratio;\n", - " var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n", - " var x1 = msg['x1'] / mpl.ratio;\n", - " var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n", - " x0 = Math.floor(x0) + 0.5;\n", - " y0 = Math.floor(y0) + 0.5;\n", - " x1 = Math.floor(x1) + 0.5;\n", - " y1 = Math.floor(y1) + 0.5;\n", - " var min_x = Math.min(x0, x1);\n", - " var min_y = Math.min(y0, y1);\n", - " var width = Math.abs(x1 - x0);\n", - " var height = Math.abs(y1 - y0);\n", - "\n", - " fig.rubberband_context.clearRect(\n", - " 0, 0, fig.canvas.width, fig.canvas.height);\n", - "\n", - " fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n", - " // Updates the figure title.\n", - " fig.header.textContent = msg['label'];\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n", - " var cursor = msg['cursor'];\n", - " switch(cursor)\n", - " {\n", - " case 0:\n", - " cursor = 'pointer';\n", - " break;\n", - " case 1:\n", - " cursor = 'default';\n", - " break;\n", - " case 2:\n", - " cursor = 'crosshair';\n", - " break;\n", - " case 3:\n", - " cursor = 'move';\n", - " break;\n", - " }\n", - " fig.rubberband_canvas.style.cursor = cursor;\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_message = function(fig, msg) {\n", - " fig.message.textContent = msg['message'];\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_draw = function(fig, msg) {\n", - " // Request the server to send over a new figure.\n", - " fig.send_draw_message();\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n", - " fig.image_mode = msg['mode'];\n", - "}\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function() {\n", - " // Called whenever the canvas gets updated.\n", - " this.send_message(\"ack\", {});\n", - "}\n", - "\n", - "// A function to construct a web socket function for onmessage handling.\n", - "// Called in the figure constructor.\n", - "mpl.figure.prototype._make_on_message_function = function(fig) {\n", - " return function socket_on_message(evt) {\n", - " if (evt.data instanceof Blob) {\n", - " /* FIXME: We get \"Resource interpreted as Image but\n", - " * transferred with MIME type text/plain:\" errors on\n", - " * Chrome. But how to set the MIME type? It doesn't seem\n", - " * to be part of the websocket stream */\n", - " evt.data.type = \"image/png\";\n", - "\n", - " /* Free the memory for the previous frames */\n", - " if (fig.imageObj.src) {\n", - " (window.URL || window.webkitURL).revokeObjectURL(\n", - " fig.imageObj.src);\n", - " }\n", - "\n", - " fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n", - " evt.data);\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - " else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n", - " fig.imageObj.src = evt.data;\n", - " fig.updated_canvas_event();\n", - " fig.waiting = false;\n", - " return;\n", - " }\n", - "\n", - " var msg = JSON.parse(evt.data);\n", - " var msg_type = msg['type'];\n", - "\n", - " // Call the \"handle_{type}\" callback, which takes\n", - " // the figure and JSON message as its only arguments.\n", - " try {\n", - " var callback = fig[\"handle_\" + msg_type];\n", - " } catch (e) {\n", - " console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n", - " return;\n", - " }\n", - "\n", - " if (callback) {\n", - " try {\n", - " // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n", - " callback(fig, msg);\n", - " } catch (e) {\n", - " console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n", - " }\n", - " }\n", - " };\n", - "}\n", - "\n", - "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n", - "mpl.findpos = function(e) {\n", - " //this section is from http://www.quirksmode.org/js/events_properties.html\n", - " var targ;\n", - " if (!e)\n", - " e = window.event;\n", - " if (e.target)\n", - " targ = e.target;\n", - " else if (e.srcElement)\n", - " targ = e.srcElement;\n", - " if (targ.nodeType == 3) // defeat Safari bug\n", - " targ = targ.parentNode;\n", - "\n", - " // jQuery normalizes the pageX and pageY\n", - " // pageX,Y are the mouse positions relative to the document\n", - " // offset() returns the position of the element relative to the document\n", - " var x = e.pageX - $(targ).offset().left;\n", - " var y = e.pageY - $(targ).offset().top;\n", - "\n", - " return {\"x\": x, \"y\": y};\n", - "};\n", - "\n", - "/*\n", - " * return a copy of an object with only non-object keys\n", - " * we need this to avoid circular references\n", - " * http://stackoverflow.com/a/24161582/3208463\n", - " */\n", - "function simpleKeys (original) {\n", - " return Object.keys(original).reduce(function (obj, key) {\n", - " if (typeof original[key] !== 'object')\n", - " obj[key] = original[key]\n", - " return obj;\n", - " }, {});\n", - "}\n", - "\n", - "mpl.figure.prototype.mouse_event = function(event, name) {\n", - " var canvas_pos = mpl.findpos(event)\n", - "\n", - " if (name === 'button_press')\n", - " {\n", - " this.canvas.focus();\n", - " this.canvas_div.focus();\n", - " }\n", - "\n", - " var x = canvas_pos.x * mpl.ratio;\n", - " var y = canvas_pos.y * mpl.ratio;\n", - "\n", - " this.send_message(name, {x: x, y: y, button: event.button,\n", - " step: event.step,\n", - " guiEvent: simpleKeys(event)});\n", - "\n", - " /* This prevents the web browser from automatically changing to\n", - " * the text insertion cursor when the button is pressed. We want\n", - " * to control all of the cursor setting manually through the\n", - " * 'cursor' event from matplotlib */\n", - " event.preventDefault();\n", - " return false;\n", - "}\n", - "\n", - "mpl.figure.prototype._key_event_extra = function(event, name) {\n", - " // Handle any extra behaviour associated with a key event\n", - "}\n", - "\n", - "mpl.figure.prototype.key_event = function(event, name) {\n", - "\n", - " // Prevent repeat events\n", - " if (name == 'key_press')\n", - " {\n", - " if (event.which === this._key)\n", - " return;\n", - " else\n", - " this._key = event.which;\n", - " }\n", - " if (name == 'key_release')\n", - " this._key = null;\n", - "\n", - " var value = '';\n", - " if (event.ctrlKey && event.which != 17)\n", - " value += \"ctrl+\";\n", - " if (event.altKey && event.which != 18)\n", - " value += \"alt+\";\n", - " if (event.shiftKey && event.which != 16)\n", - " value += \"shift+\";\n", - "\n", - " value += 'k';\n", - " value += event.which.toString();\n", - "\n", - " this._key_event_extra(event, name);\n", - "\n", - " this.send_message(name, {key: value,\n", - " guiEvent: simpleKeys(event)});\n", - " return false;\n", - "}\n", - "\n", - "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n", - " if (name == 'download') {\n", - " this.handle_save(this, null);\n", - " } else {\n", - " this.send_message(\"toolbar_button\", {name: name});\n", - " }\n", - "};\n", - "\n", - "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n", - " this.message.textContent = tooltip;\n", - "};\n", - "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n", - "\n", - "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n", - "\n", - "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n", - " // Create a \"websocket\"-like object which calls the given IPython comm\n", - " // object with the appropriate methods. Currently this is a non binary\n", - " // socket, so there is still some room for performance tuning.\n", - " var ws = {};\n", - "\n", - " ws.close = function() {\n", - " comm.close()\n", - " };\n", - " ws.send = function(m) {\n", - " //console.log('sending', m);\n", - " comm.send(m);\n", - " };\n", - " // Register the callback with on_msg.\n", - " comm.on_msg(function(msg) {\n", - " //console.log('receiving', msg['content']['data'], msg);\n", - " // Pass the mpl event to the overriden (by mpl) onmessage function.\n", - " ws.onmessage(msg['content']['data'])\n", - " });\n", - " return ws;\n", - "}\n", - "\n", - "mpl.mpl_figure_comm = function(comm, msg) {\n", - " // This is the function which gets called when the mpl process\n", - " // starts-up an IPython Comm through the \"matplotlib\" channel.\n", - "\n", - " var id = msg.content.data.id;\n", - " // Get hold of the div created by the display call when the Comm\n", - " // socket was opened in Python.\n", - " var element = $(\"#\" + id);\n", - " var ws_proxy = comm_websocket_adapter(comm)\n", - "\n", - " function ondownload(figure, format) {\n", - " window.open(figure.imageObj.src);\n", - " }\n", - "\n", - " var fig = new mpl.figure(id, ws_proxy,\n", - " ondownload,\n", - " element.get(0));\n", - "\n", - " // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n", - " // web socket which is closed, not our websocket->open comm proxy.\n", - " ws_proxy.onopen();\n", - "\n", - " fig.parent_element = element.get(0);\n", - " fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n", - " if (!fig.cell_info) {\n", - " console.error(\"Failed to find cell for figure\", id, fig);\n", - " return;\n", - " }\n", - "\n", - " var output_index = fig.cell_info[2]\n", - " var cell = fig.cell_info[0];\n", - "\n", - "};\n", - "\n", - "mpl.figure.prototype.handle_close = function(fig, msg) {\n", - " var width = fig.canvas.width/mpl.ratio\n", - " fig.root.unbind('remove')\n", - "\n", - " // Update the output cell to use the data from the current canvas.\n", - " fig.push_to_output();\n", - " var dataURL = fig.canvas.toDataURL();\n", - " // Re-enable the keyboard manager in IPython - without this line, in FF,\n", - " // the notebook keyboard shortcuts fail.\n", - " IPython.keyboard_manager.enable()\n", - " $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n", - " fig.close_ws(fig, msg);\n", - "}\n", - "\n", - "mpl.figure.prototype.close_ws = function(fig, msg){\n", - " fig.send_message('closing', msg);\n", - " // fig.ws.close()\n", - "}\n", - "\n", - "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n", - " // Turn the data on the canvas into data in the output cell.\n", - " var width = this.canvas.width/mpl.ratio\n", - " var dataURL = this.canvas.toDataURL();\n", - " this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n", - "}\n", - "\n", - "mpl.figure.prototype.updated_canvas_event = function() {\n", - " // Tell IPython that the notebook contents must change.\n", - " IPython.notebook.set_dirty(true);\n", - " this.send_message(\"ack\", {});\n", - " var fig = this;\n", - " // Wait a second, then push the new image to the DOM so\n", - " // that it is saved nicely (might be nice to debounce this).\n", - " setTimeout(function () { fig.push_to_output() }, 1000);\n", - "}\n", - "\n", - "mpl.figure.prototype._init_toolbar = function() {\n", - " var fig = this;\n", - "\n", - " var nav_element = $('<div/>')\n", - " nav_element.attr('style', 'width: 100%');\n", - " this.root.append(nav_element);\n", - "\n", - " // Define a callback function for later on.\n", - " function toolbar_event(event) {\n", - " return fig.toolbar_button_onclick(event['data']);\n", - " }\n", - " function toolbar_mouse_event(event) {\n", - " return fig.toolbar_button_onmouseover(event['data']);\n", - " }\n", - "\n", - " for(var toolbar_ind in mpl.toolbar_items){\n", - " var name = mpl.toolbar_items[toolbar_ind][0];\n", - " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", - " var image = mpl.toolbar_items[toolbar_ind][2];\n", - " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", - "\n", - " if (!name) { continue; };\n", - "\n", - " var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n", - " button.click(method_name, toolbar_event);\n", - " button.mouseover(tooltip, toolbar_mouse_event);\n", - " nav_element.append(button);\n", - " }\n", - "\n", - " // Add the status bar.\n", - " var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n", - " nav_element.append(status_bar);\n", - " this.message = status_bar[0];\n", - "\n", - " // Add the close button to the window.\n", - " var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n", - " var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n", - " button.click(function (evt) { fig.handle_close(fig, {}); } );\n", - " button.mouseover('Stop Interaction', toolbar_mouse_event);\n", - " buttongrp.append(button);\n", - " var titlebar = this.root.find($('.ui-dialog-titlebar'));\n", - " titlebar.prepend(buttongrp);\n", - "}\n", - "\n", - "mpl.figure.prototype._root_extra_style = function(el){\n", - " var fig = this\n", - " el.on(\"remove\", function(){\n", - "\tfig.close_ws(fig, {});\n", - " });\n", - "}\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function(el){\n", - " // this is important to make the div 'focusable\n", - " el.attr('tabindex', 0)\n", - " // reach out to IPython and tell the keyboard manager to turn it's self\n", - " // off when our div gets focus\n", - "\n", - " // location in version 3\n", - " if (IPython.notebook.keyboard_manager) {\n", - " IPython.notebook.keyboard_manager.register_events(el);\n", - " }\n", - " else {\n", - " // location in version 2\n", - " IPython.keyboard_manager.register_events(el);\n", - " }\n", - "\n", - "}\n", - "\n", - "mpl.figure.prototype._key_event_extra = function(event, name) {\n", - " var manager = IPython.notebook.keyboard_manager;\n", - " if (!manager)\n", - " manager = IPython.keyboard_manager;\n", - "\n", - " // Check for shift+enter\n", - " if (event.shiftKey && event.which == 13) {\n", - " this.canvas_div.blur();\n", - " // select the cell after this one\n", - " var index = IPython.notebook.find_cell_index(this.cell_info[0]);\n", - " IPython.notebook.select(index + 1);\n", - " }\n", - "}\n", - "\n", - "mpl.figure.prototype.handle_save = function(fig, msg) {\n", - " fig.ondownload(fig, null);\n", - "}\n", - "\n", - "\n", - "mpl.find_output_cell = function(html_output) {\n", - " // Return the cell and output element which can be found *uniquely* in the notebook.\n", - " // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n", - " // IPython event is triggered only after the cells have been serialised, which for\n", - " // our purposes (turning an active figure into a static one), is too late.\n", - " var cells = IPython.notebook.get_cells();\n", - " var ncells = cells.length;\n", - " for (var i=0; i<ncells; i++) {\n", - " var cell = cells[i];\n", - " if (cell.cell_type === 'code'){\n", - " for (var j=0; j<cell.output_area.outputs.length; j++) {\n", - " var data = cell.output_area.outputs[j];\n", - " if (data.data) {\n", - " // IPython >= 3 moved mimebundle to data attribute of output\n", - " data = data.data;\n", - " }\n", - " if (data['text/html'] == html_output) {\n", - " return [cell, data, j];\n", - " }\n", - " }\n", - " }\n", - " }\n", - "}\n", - "\n", - "// Register the function which deals with the matplotlib target/channel.\n", - "// The kernel may be null if the page has been refreshed.\n", - "if (IPython.notebook.kernel != null) {\n", - " IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n", - "}\n" - ], - "text/plain": [ - "<IPython.core.display.Javascript object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "<img src=\"data:image/png;base64,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EXQEHUFH0BF0BB1BR9ARdAQdQU8sXs7uEXSH2rBjEHQEHUFH0BF0BB1BR9ARdAQdQUfQEfQCvQ5BL7BRElcJQUfQEXQEHUFH0BF0BB1BR9ARdAQdQU8sXs7uEXSH2rBjEHQEHUFH0BF0BB1BR9ARdAQdQUfQEfQCvQ5BL7BRElcJQUfQEXQEHUFH0BF0BB1BR9ARdAQdQU8sXs7uEXSH2rBjEHQEHUFH0BF0BB1BR9ARdAQdQUfQEfQCvQ5BL7BRElcJQUfQEXQEHUFH0BF0BB1BR9ARdAQdQU8sXs7uEXSH2rBjEHQEHUFH0BF0BB1BR9ARdAQdQUfQEfQCvQ5BL7BRElcJQUfQEXQEHUFH0BF0BB1BR9ARdAQdQU8sXs7uEXSH2rBjEHQEHUFH0BF0BB1BR9ARdAQdQUfQEfQCvQ5BL7BRElcJQUfQEXQEHUFH0BF0BB1BR9ARdAQdQU8sXs7uEXSH2rBjEHQEHUFH0BF0BB1BR9ARdAQdQUfQEfQCvQ5BL7BRElcJQUfQEXQEHUFH0BF0BB1BR9ARdAQdQU8sXs7uEXSH2rBjEHQEHUFH0BF0BB1BR9ARdAQdQUfQEfQCvQ5BL7BRElcJQUfQEXQEHUFH0BF0BB1BR9ARdAQdQU8sXs7uEXSH2rBjEHQEHUFH0BF0BB1BR9ARdAQdQUfQEfQCvQ5BL7BRElcJQUfQEXQEHUFH0BF0BB1BR9ARdAQdQU8sXs7uEXSH2rBjEHQEHUFH0BF0BB1BR9ARdAQdQUfQEfQCvQ5BL7BRElcJQUfQEXQEHUFH0BF0BB1BR9ARdAQdQU8sXs7uEXSH2rBjEHQEHUFH0BF0BB1BR9ARdAQdQUfQEfQCvQ5BL7BRElcJQUfQEXQEHUFH0BF0BB1BR9ARdAQdQU8sXs7uEXSH2rBjEHQEHUFH0BF0BB1BR9ARdAQdQUfQEfQCvQ5BL7BRElcJQUfQEXQEHUFH0BF0BB1BR9ARdAQdQU8sXs7uEXSH2rBjEHQEHUFH0BF0BB1BR9ARdAQdQUfQEfQCvQ5BL7BRElcJQUfQEXQEHUFH0BF0BB1BR9ARdAQdQU8sXs7uEXSH2rBjEHQEHUFH0BF0BB1BR9ARdAQdQUfQEfQCvQ5BL7BRElcJQUfQEXQEHUFH0BF0BB1BR9ARdAQdQU8sXs7uEXSH2rBjEHQEHUFH0BF0BB1B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wMIEEPSFkQ0+IJbkvFHSA6vl2KdKeoGkq6ojixfFXSxpt60+0muuuWbXM8444zm77bbb7+2yyy57SNryfL3yyiv3+NGPfrT/1VdfHc+fa4899rh8v/32++Huu+++yu/qq6/e7fvf//5BN77xjb+z1fxKLP/qq6/edfv27Tf4xS9+sdeuu+56zV577fWzbdu2/XS9rvDbvNXIwc0ZzduCHOzGj/zrxo/868aP/OvGj/zrxi+i2+TgJZdcEv3Ac6666qq/O+qoo168yy678Ohod/Sj2sOWC8+oaJdxsPFii/tJeq6k/SQ9r3pZ3MOqF56FoMfs5ZbPVp9++unP22OPPZ5ywAEH/Grvvfe+bJdddtlpxjU30u985zvxgpVdbnKTm1x05ZVXhowfcPnll1/75je/+XnXuta1rrjiiit2O+eccw6/zW1u8/XcdRtCeRdddNEBl1122T43utGNvn/VVVft9qMf/ehGe+655y8PPvjg7+66666C3+atSA5uzmjeFuRgN37kXzd+5F83fuRfN37kXzd+Ed02B29605uef8kll0TH8HVHH330i7qXzB7GRABBH1Nrrx1rzOweL+n/VId+A0kfrD4XFp9WC2nf8hn0z33uc9v23HPP0w888MA99t9//x+V0kxf/vKXb3fooYeevffee/9ivU7nnXfeTbdv377vYYcd9q1dd9316jPPPPN2Rx99dLwwjt8Uga9+9atH3uxmNzt/v/32W132FUJ+9tln33q33Xa76tBDDz03Bj3gNz9tyMFupxU52I0f+deNH/nXjR/5140f+deNX0QvkoM/+MEPbnDxxRdfcemllx7Fcvfu7Me0BwR9TK29dqyXVp9TO6926PtI+qikkM4nSjp3q5e4f/7znz90zz33/OitbnWry+oyvNXN9aUvfekOhx122Df23nvvX9brct555x28srJyvUMOOeQ/zjnnnMMQ9NktdcYZZ9zhtre97devfe1r7/gM3ZVXXrnr2WeffWgsATvkkEPOP+uss46EX3Omk4PdrgLkYDd+5F83fuRfN37kXzd+5F83fhG9SA5eeumle5177rnXufzyy+975zvf+ezupbOHsRBA0MfS0pPj/KakZ1TfQq8f/XWrT6xdR9KRWy3op59++uG77777R25961v//DrXuc4GGd7KJvv6179+RCzP3n///X88XY+YSf/JT35y/XiOGsGc3UpnnnnmbQ8++OALr3e9663Ut1iX9Hg+7pe//OVe8GvOcnKw2xWAHOzGj/zrxo/868aP/OvGj/zrxi+iF8nByy677NrnnHPOda+88sr7HX300dH/5geBVgT+fxQuLe46tXRmAAAAAElFTkSuQmCC\" width=\"1000\">" - ], - "text/plain": [ - "<IPython.core.display.HTML object>" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "ax = go.cap_alloc_plot(df[:-1])\n", "lgd = ax.legend(loc='lower center', bbox_to_anchor=(0.5, -0.3), ncol=4)\n", @@ -3434,849 +104,9 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "<div>\n", - "<style>\n", - " .dataframe thead tr:only-child th {\n", - " text-align: right;\n", - " }\n", - "\n", - " .dataframe thead th {\n", - " text-align: left;\n", - " }\n", - "\n", - " .dataframe tbody tr th {\n", - " vertical-align: top;\n", - " }\n", - "</style>\n", - "<table border=\"1\" class=\"dataframe\">\n", - " <thead>\n", - " <tr style=\"text-align: right;\">\n", - " <th>capital</th>\n", - " <th>RMBS Bonds</th>\n", - " <th>Cash</th>\n", - " <th>Tranches</th>\n", - " <th>RMBS Credit Hedges</th>\n", - " <th>RMBS Rates Hedges</th>\n", - " <th>CLO Bond</th>\n", - " <th>CSO Bond</th>\n", - " <th>Curve</th>\n", - " </tr>\n", - " <tr>\n", - " <th>periodenddate</th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " <th></th>\n", - " </tr>\n", - " </thead>\n", - " <tbody>\n", - " <tr>\n", - " <th>2013-01-31</th>\n", - " <td>0.430710</td>\n", - " <td>0.007972</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.561318</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-02-28</th>\n", - " <td>0.176536</td>\n", - " <td>0.367836</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.455628</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-03-31</th>\n", - " <td>0.258533</td>\n", - " <td>0.130804</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.228118</td>\n", - " <td>0.382546</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-04-30</th>\n", - " <td>0.380844</td>\n", - " <td>0.031830</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.199250</td>\n", - " <td>0.388075</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-05-31</th>\n", - " <td>0.467674</td>\n", - " <td>0.042528</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.161451</td>\n", - " <td>0.328347</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-06-30</th>\n", - " <td>0.488230</td>\n", - " <td>0.060871</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.107800</td>\n", - " <td>0.343099</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-07-31</th>\n", - " <td>0.518012</td>\n", - " <td>0.033196</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.107431</td>\n", - " <td>0.341361</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-08-31</th>\n", - " <td>0.446132</td>\n", - " <td>0.110933</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.106167</td>\n", - " <td>0.336767</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-09-30</th>\n", - " <td>0.405778</td>\n", - " <td>0.139638</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.094275</td>\n", - " <td>0.360308</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-10-31</th>\n", - " <td>0.383202</td>\n", - " <td>0.149871</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.129174</td>\n", - " <td>0.337753</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-11-30</th>\n", - " <td>0.479083</td>\n", - " <td>0.057664</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.127640</td>\n", - " <td>0.335614</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2013-12-31</th>\n", - " <td>0.485006</td>\n", - " <td>0.051674</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.130285</td>\n", - " <td>0.333034</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-01-31</th>\n", - " <td>0.491939</td>\n", - " <td>0.054231</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.128957</td>\n", - " <td>0.324872</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-02-28</th>\n", - " <td>0.423049</td>\n", - " <td>0.088724</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.167632</td>\n", - " <td>0.320596</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-03-31</th>\n", - " <td>0.483410</td>\n", - " <td>0.044299</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.166302</td>\n", - " <td>0.305989</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-04-30</th>\n", - " <td>0.360606</td>\n", - " <td>0.280927</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.164339</td>\n", - " <td>0.194128</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-05-31</th>\n", - " <td>0.304159</td>\n", - " <td>0.315501</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.195227</td>\n", - " <td>0.185113</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-06-30</th>\n", - " <td>0.361980</td>\n", - " <td>0.094687</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.333131</td>\n", - " <td>0.210202</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-07-31</th>\n", - " <td>0.225219</td>\n", - " <td>0.251357</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.301706</td>\n", - " <td>0.221717</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-08-31</th>\n", - " <td>0.304764</td>\n", - " <td>0.174983</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.299244</td>\n", - " <td>0.221009</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-09-30</th>\n", - " <td>0.434793</td>\n", - " <td>0.034651</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.304909</td>\n", - " <td>0.225647</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-10-31</th>\n", - " <td>0.381047</td>\n", - " <td>0.116936</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.288351</td>\n", - " <td>0.213666</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-11-30</th>\n", - " <td>0.360866</td>\n", - " <td>0.266194</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.287936</td>\n", - " <td>0.085004</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2014-12-31</th>\n", - " <td>0.376919</td>\n", - " <td>0.185772</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.288473</td>\n", - " <td>0.148835</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-01-31</th>\n", - " <td>0.449420</td>\n", - " <td>0.093696</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.300610</td>\n", - " <td>0.156273</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-02-28</th>\n", - " <td>0.471921</td>\n", - " <td>0.114743</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.272051</td>\n", - " <td>0.141285</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-03-31</th>\n", - " <td>0.383291</td>\n", - " <td>0.205980</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.280802</td>\n", - " <td>0.129926</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-04-30</th>\n", - " <td>0.458701</td>\n", - " <td>0.247187</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.200670</td>\n", - " <td>0.093442</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-05-31</th>\n", - " <td>0.464610</td>\n", - " <td>0.242466</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.200025</td>\n", - " <td>0.092900</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-06-30</th>\n", - " <td>0.523622</td>\n", - " <td>0.051527</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.282668</td>\n", - " <td>0.142183</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-07-31</th>\n", - " <td>0.459878</td>\n", - " <td>0.104380</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.283042</td>\n", - " <td>0.152700</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-08-31</th>\n", - " <td>0.429859</td>\n", - " <td>0.096180</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.329721</td>\n", - " <td>0.144240</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-09-30</th>\n", - " <td>0.453848</td>\n", - " <td>0.059773</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.020528</td>\n", - " <td>0.330706</td>\n", - " <td>0.135146</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-10-31</th>\n", - " <td>0.468953</td>\n", - " <td>0.023870</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.021436</td>\n", - " <td>0.344366</td>\n", - " <td>0.141375</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-11-30</th>\n", - " <td>0.424273</td>\n", - " <td>0.075654</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.021461</td>\n", - " <td>0.342481</td>\n", - " <td>0.136131</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2015-12-31</th>\n", - " <td>0.405524</td>\n", - " <td>0.091296</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.026637</td>\n", - " <td>0.339917</td>\n", - " <td>0.136626</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-01-31</th>\n", - " <td>0.414662</td>\n", - " <td>0.006686</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.027260</td>\n", - " <td>0.412689</td>\n", - " <td>0.138703</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-02-29</th>\n", - " <td>0.435095</td>\n", - " <td>0.030536</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.025918</td>\n", - " <td>0.376846</td>\n", - " <td>0.131605</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-03-31</th>\n", - " <td>0.411884</td>\n", - " <td>0.051062</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.025431</td>\n", - " <td>0.380498</td>\n", - " <td>0.131125</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-04-30</th>\n", - " <td>0.432588</td>\n", - " <td>0.194329</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.025059</td>\n", - " <td>0.214491</td>\n", - " <td>0.133534</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-05-31</th>\n", - " <td>0.445444</td>\n", - " <td>0.147014</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.022001</td>\n", - " <td>0.251350</td>\n", - " <td>0.134191</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-06-30</th>\n", - " <td>0.457027</td>\n", - " <td>0.133422</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.021101</td>\n", - " <td>0.250804</td>\n", - " <td>0.137646</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-07-31</th>\n", - " <td>0.452871</td>\n", - " <td>0.104486</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.051647</td>\n", - " <td>0.251745</td>\n", - " <td>0.139252</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-08-31</th>\n", - " <td>0.405121</td>\n", - " <td>0.267507</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.050026</td>\n", - " <td>0.132435</td>\n", - " <td>0.144912</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-09-30</th>\n", - " <td>0.388695</td>\n", - " <td>0.303241</td>\n", - " <td>NaN</td>\n", - " <td>NaN</td>\n", - " <td>0.048914</td>\n", - " <td>0.108794</td>\n", - " <td>0.150356</td>\n", - " <td>NaN</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-10-31</th>\n", - " <td>0.405860</td>\n", - " <td>0.294078</td>\n", - " <td>0.017006</td>\n", - " <td>0.046529</td>\n", - " <td>0.041718</td>\n", - " <td>0.055267</td>\n", - " <td>0.132508</td>\n", - " <td>0.007034</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-11-30</th>\n", - " <td>0.379328</td>\n", - " <td>0.365734</td>\n", - " <td>0.000000</td>\n", - " <td>0.021073</td>\n", - " <td>0.049094</td>\n", - " <td>0.052696</td>\n", - " <td>0.128386</td>\n", - " <td>0.003689</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2016-12-31</th>\n", - " <td>0.367856</td>\n", - " <td>0.396823</td>\n", - " <td>NaN</td>\n", - " <td>0.018758</td>\n", - " <td>0.029970</td>\n", - " <td>0.053172</td>\n", - " <td>0.128509</td>\n", - " <td>0.004911</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-01-31</th>\n", - " <td>0.563245</td>\n", - " <td>0.295935</td>\n", - " <td>NaN</td>\n", - " <td>0.024109</td>\n", - " <td>0.028793</td>\n", - " <td>0.052865</td>\n", - " <td>0.029943</td>\n", - " <td>0.005110</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-02-28</th>\n", - " <td>0.597854</td>\n", - " <td>0.326450</td>\n", - " <td>NaN</td>\n", - " <td>0.021237</td>\n", - " <td>0.023703</td>\n", - " <td>0.000000</td>\n", - " <td>0.025781</td>\n", - " <td>0.004976</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-03-31</th>\n", - " <td>0.736444</td>\n", - " <td>0.180335</td>\n", - " <td>NaN</td>\n", - " <td>0.027095</td>\n", - " <td>0.021851</td>\n", - " <td>0.023780</td>\n", - " <td>0.004496</td>\n", - " <td>0.006000</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-04-30</th>\n", - " <td>0.818492</td>\n", - " <td>0.093116</td>\n", - " <td>NaN</td>\n", - " <td>0.028271</td>\n", - " <td>0.023256</td>\n", - " <td>0.026483</td>\n", - " <td>0.003744</td>\n", - " <td>0.006638</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-05-31</th>\n", - " <td>0.736636</td>\n", - " <td>0.189324</td>\n", - " <td>NaN</td>\n", - " <td>0.027305</td>\n", - " <td>0.020525</td>\n", - " <td>NaN</td>\n", - " <td>0.004466</td>\n", - " <td>0.021745</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-06-30</th>\n", - " <td>0.742377</td>\n", - " <td>0.149576</td>\n", - " <td>NaN</td>\n", - " <td>0.028228</td>\n", - " <td>0.018609</td>\n", - " <td>0.018365</td>\n", - " <td>0.003300</td>\n", - " <td>0.039545</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-07-31</th>\n", - " <td>0.809887</td>\n", - " <td>0.084711</td>\n", - " <td>NaN</td>\n", - " <td>0.027730</td>\n", - " <td>0.018896</td>\n", - " <td>0.019405</td>\n", - " <td>0.003447</td>\n", - " <td>0.035925</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-08-31</th>\n", - " <td>0.839832</td>\n", - " <td>0.061176</td>\n", - " <td>NaN</td>\n", - " <td>0.022905</td>\n", - " <td>0.018036</td>\n", - " <td>0.018824</td>\n", - " <td>0.003345</td>\n", - " <td>0.035882</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-09-30</th>\n", - " <td>0.788294</td>\n", - " <td>0.143878</td>\n", - " <td>NaN</td>\n", - " <td>0.030855</td>\n", - " <td>0.015945</td>\n", - " <td>0.016950</td>\n", - " <td>0.003242</td>\n", - " <td>0.000835</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-10-31</th>\n", - " <td>0.789222</td>\n", - " <td>0.091395</td>\n", - " <td>0.038326</td>\n", - " <td>0.027148</td>\n", - " <td>0.016110</td>\n", - " <td>0.007972</td>\n", - " <td>0.003367</td>\n", - " <td>0.026459</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-11-30</th>\n", - " <td>0.788009</td>\n", - " <td>0.105194</td>\n", - " <td>0.033814</td>\n", - " <td>0.023952</td>\n", - " <td>0.014214</td>\n", - " <td>0.007050</td>\n", - " <td>0.002972</td>\n", - " <td>0.024794</td>\n", - " </tr>\n", - " <tr>\n", - " <th>2017-12-31</th>\n", - " <td>0.755255</td>\n", - " <td>0.182248</td>\n", - " <td>0.032354</td>\n", - " <td>0.022918</td>\n", - " <td>0.013600</td>\n", - " <td>0.006752</td>\n", - " <td>0.002844</td>\n", - " <td>-0.015971</td>\n", - " </tr>\n", - " </tbody>\n", - "</table>\n", - "</div>" - ], - "text/plain": [ - "capital RMBS Bonds Cash Tranches RMBS Credit Hedges \\\n", - "periodenddate \n", - "2013-01-31 0.430710 0.007972 NaN NaN \n", - "2013-02-28 0.176536 0.367836 NaN NaN \n", - "2013-03-31 0.258533 0.130804 NaN NaN \n", - "2013-04-30 0.380844 0.031830 NaN NaN \n", - "2013-05-31 0.467674 0.042528 NaN NaN \n", - "2013-06-30 0.488230 0.060871 NaN NaN \n", - "2013-07-31 0.518012 0.033196 NaN NaN \n", - "2013-08-31 0.446132 0.110933 NaN NaN \n", - "2013-09-30 0.405778 0.139638 NaN NaN \n", - "2013-10-31 0.383202 0.149871 NaN NaN \n", - "2013-11-30 0.479083 0.057664 NaN NaN \n", - "2013-12-31 0.485006 0.051674 NaN NaN \n", - "2014-01-31 0.491939 0.054231 NaN NaN \n", - "2014-02-28 0.423049 0.088724 NaN NaN \n", - "2014-03-31 0.483410 0.044299 NaN NaN \n", - "2014-04-30 0.360606 0.280927 NaN NaN \n", - "2014-05-31 0.304159 0.315501 NaN NaN \n", - "2014-06-30 0.361980 0.094687 NaN NaN \n", - "2014-07-31 0.225219 0.251357 NaN NaN \n", - "2014-08-31 0.304764 0.174983 NaN NaN \n", - "2014-09-30 0.434793 0.034651 NaN NaN \n", - "2014-10-31 0.381047 0.116936 NaN NaN \n", - "2014-11-30 0.360866 0.266194 NaN NaN \n", - "2014-12-31 0.376919 0.185772 NaN NaN \n", - "2015-01-31 0.449420 0.093696 NaN NaN \n", - "2015-02-28 0.471921 0.114743 NaN NaN \n", - "2015-03-31 0.383291 0.205980 NaN NaN \n", - "2015-04-30 0.458701 0.247187 NaN NaN \n", - "2015-05-31 0.464610 0.242466 NaN NaN \n", - "2015-06-30 0.523622 0.051527 NaN NaN \n", - "2015-07-31 0.459878 0.104380 NaN NaN \n", - "2015-08-31 0.429859 0.096180 NaN NaN \n", - "2015-09-30 0.453848 0.059773 NaN NaN \n", - "2015-10-31 0.468953 0.023870 NaN NaN \n", - "2015-11-30 0.424273 0.075654 NaN NaN \n", - "2015-12-31 0.405524 0.091296 NaN NaN \n", - "2016-01-31 0.414662 0.006686 NaN NaN \n", - "2016-02-29 0.435095 0.030536 NaN NaN \n", - "2016-03-31 0.411884 0.051062 NaN NaN \n", - "2016-04-30 0.432588 0.194329 NaN NaN \n", - "2016-05-31 0.445444 0.147014 NaN NaN \n", - "2016-06-30 0.457027 0.133422 NaN NaN \n", - "2016-07-31 0.452871 0.104486 NaN NaN \n", - "2016-08-31 0.405121 0.267507 NaN NaN \n", - "2016-09-30 0.388695 0.303241 NaN NaN \n", - "2016-10-31 0.405860 0.294078 0.017006 0.046529 \n", - "2016-11-30 0.379328 0.365734 0.000000 0.021073 \n", - "2016-12-31 0.367856 0.396823 NaN 0.018758 \n", - "2017-01-31 0.563245 0.295935 NaN 0.024109 \n", - "2017-02-28 0.597854 0.326450 NaN 0.021237 \n", - "2017-03-31 0.736444 0.180335 NaN 0.027095 \n", - "2017-04-30 0.818492 0.093116 NaN 0.028271 \n", - "2017-05-31 0.736636 0.189324 NaN 0.027305 \n", - "2017-06-30 0.742377 0.149576 NaN 0.028228 \n", - "2017-07-31 0.809887 0.084711 NaN 0.027730 \n", - "2017-08-31 0.839832 0.061176 NaN 0.022905 \n", - "2017-09-30 0.788294 0.143878 NaN 0.030855 \n", - "2017-10-31 0.789222 0.091395 0.038326 0.027148 \n", - "2017-11-30 0.788009 0.105194 0.033814 0.023952 \n", - "2017-12-31 0.755255 0.182248 0.032354 0.022918 \n", - "\n", - "capital RMBS Rates Hedges CLO Bond CSO Bond Curve \n", - "periodenddate \n", - "2013-01-31 NaN NaN 0.561318 NaN \n", - "2013-02-28 NaN NaN 0.455628 NaN \n", - "2013-03-31 NaN 0.228118 0.382546 NaN \n", - "2013-04-30 NaN 0.199250 0.388075 NaN \n", - "2013-05-31 NaN 0.161451 0.328347 NaN \n", - "2013-06-30 NaN 0.107800 0.343099 NaN \n", - "2013-07-31 NaN 0.107431 0.341361 NaN \n", - "2013-08-31 NaN 0.106167 0.336767 NaN \n", - "2013-09-30 NaN 0.094275 0.360308 NaN \n", - "2013-10-31 NaN 0.129174 0.337753 NaN \n", - "2013-11-30 NaN 0.127640 0.335614 NaN \n", - "2013-12-31 NaN 0.130285 0.333034 NaN \n", - "2014-01-31 NaN 0.128957 0.324872 NaN \n", - "2014-02-28 NaN 0.167632 0.320596 NaN \n", - "2014-03-31 NaN 0.166302 0.305989 NaN \n", - "2014-04-30 NaN 0.164339 0.194128 NaN \n", - "2014-05-31 NaN 0.195227 0.185113 NaN \n", - "2014-06-30 NaN 0.333131 0.210202 NaN \n", - "2014-07-31 NaN 0.301706 0.221717 NaN \n", - "2014-08-31 NaN 0.299244 0.221009 NaN \n", - "2014-09-30 NaN 0.304909 0.225647 NaN \n", - "2014-10-31 NaN 0.288351 0.213666 NaN \n", - "2014-11-30 NaN 0.287936 0.085004 NaN \n", - "2014-12-31 NaN 0.288473 0.148835 NaN \n", - "2015-01-31 NaN 0.300610 0.156273 NaN \n", - "2015-02-28 NaN 0.272051 0.141285 NaN \n", - "2015-03-31 NaN 0.280802 0.129926 NaN \n", - "2015-04-30 NaN 0.200670 0.093442 NaN \n", - "2015-05-31 NaN 0.200025 0.092900 NaN \n", - "2015-06-30 NaN 0.282668 0.142183 NaN \n", - "2015-07-31 NaN 0.283042 0.152700 NaN \n", - "2015-08-31 NaN 0.329721 0.144240 NaN \n", - "2015-09-30 0.020528 0.330706 0.135146 NaN \n", - "2015-10-31 0.021436 0.344366 0.141375 NaN \n", - "2015-11-30 0.021461 0.342481 0.136131 NaN \n", - "2015-12-31 0.026637 0.339917 0.136626 NaN \n", - "2016-01-31 0.027260 0.412689 0.138703 NaN \n", - "2016-02-29 0.025918 0.376846 0.131605 NaN \n", - "2016-03-31 0.025431 0.380498 0.131125 NaN \n", - "2016-04-30 0.025059 0.214491 0.133534 NaN \n", - "2016-05-31 0.022001 0.251350 0.134191 NaN \n", - "2016-06-30 0.021101 0.250804 0.137646 NaN \n", - "2016-07-31 0.051647 0.251745 0.139252 NaN \n", - "2016-08-31 0.050026 0.132435 0.144912 NaN \n", - "2016-09-30 0.048914 0.108794 0.150356 NaN \n", - "2016-10-31 0.041718 0.055267 0.132508 0.007034 \n", - "2016-11-30 0.049094 0.052696 0.128386 0.003689 \n", - "2016-12-31 0.029970 0.053172 0.128509 0.004911 \n", - "2017-01-31 0.028793 0.052865 0.029943 0.005110 \n", - "2017-02-28 0.023703 0.000000 0.025781 0.004976 \n", - "2017-03-31 0.021851 0.023780 0.004496 0.006000 \n", - "2017-04-30 0.023256 0.026483 0.003744 0.006638 \n", - "2017-05-31 0.020525 NaN 0.004466 0.021745 \n", - "2017-06-30 0.018609 0.018365 0.003300 0.039545 \n", - "2017-07-31 0.018896 0.019405 0.003447 0.035925 \n", - "2017-08-31 0.018036 0.018824 0.003345 0.035882 \n", - "2017-09-30 0.015945 0.016950 0.003242 0.000835 \n", - "2017-10-31 0.016110 0.007972 0.003367 0.026459 \n", - "2017-11-30 0.014214 0.007050 0.002972 0.024794 \n", - "2017-12-31 0.013600 0.006752 0.002844 -0.015971 " - ] - }, - "execution_count": 76, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "df" ] @@ -4284,9 +114,7 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "collapsed": true - }, + "metadata": {}, "outputs": [], "source": [] } |
