Skip to content

Instantly share code, notes, and snippets.

@fonnesbeck
Created April 2, 2013 03:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save fonnesbeck/5289662 to your computer and use it in GitHub Desktop.
Save fonnesbeck/5289662 to your computer and use it in GitHub Desktop.
Talk Day 2013 notebook
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "TalkDay2013"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Reproducible Research and Reporting with iPython Notebooks\n",
"\n",
"![iPython logo](http://ipython.org/_static/IPy_header.png)\n",
"\n",
"**Christopher Fonnesbeck** \n",
"*Department of Biostatistics, Vanderbilt University School of Medicine*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Reproducible Research\n",
"\n",
"> reproducing conclusions from a single experiment based on the measurements from that experiment\n",
"\n",
"The most basic form of reproducibility is a complete description of the data and associated analyses (including code!) so the results can be *exactly* reproduced by others.\n",
"\n",
"Reproducing calculations can be onerous, even with one's own work!\n",
"\n",
"Scientific data are becoming larger and more complex, making simple descriptions inadequate for reproducibility. As a result, most modern research is irreproducible without tremendous effort.\n",
"\n",
"### Reproducible research is not yet part of the culture of science in general, or scientific computing in particular."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### A cautionary tale about reproducibility in biomedical research\n",
"\n",
"[The original Potti et al. 2006 publication](http://www.nature.com/nm/journal/v12/n11/abs/nm1491.html)\n",
"\n",
"[How a New Hope in Cancer Testing Fell Apart](http://www.nytimes.com/2011/07/08/health/research/08genes.html?_r=3&hp&)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Scientific Computing Workflow\n",
"\n",
"There are a number of steps to scientific endeavors that involve computing:\n",
"\n",
"![workflow](http://f.cl.ly/items/3B0l063n2T0H1p041U3L/workflow.png)\n",
"\n",
"Many of the standard tools impose barriers between one or more of these steps. This can make it difficult to iterate, reproduce work.\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## IPython\n",
"\n",
"**IPython** is an enhanced Python shell which provides a more robust and productive development environment for users. \n",
"\n",
"It includes the **HTML notebook** featured here, as well as support for **interactive data visualization** and easy high-performance **parallel computing**."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def f(x):\n",
" return (x-3)*(x-5)*(x-7)+85\n",
"\n",
"import numpy as np\n",
"x = np.linspace(0, 10, 200)\n",
"y = f(x)\n",
"plot(x,y)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 1,
"text": [
"[<matplotlib.lines.Line2D at 0x1065f8f50>]"
]
},
{
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x1061b5210>"
]
}
],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## iPython Notebook\n",
"\n",
"The HTML lets you document your workflow using either HTML or Markdown.\n",
"\n",
"The IPython Notebook consists of two related components:\n",
"\n",
"* A JSON based Notebook document format for recording and distributing Python code and rich text.\n",
"* A web-based user interface for authoring and running notebook documents.\n",
"\n",
"The Notebook can be used by starting the Notebook server with the command:\n",
"\n",
" $ ipython notebook\n",
" \n",
"This initiates an **iPython engine**, which is a Python instance that takes Python commands over a network connection. \n",
"\n",
"The **IPython controller** provides an interface for working with a set of engines, to which one or more **iPython clients** can connect.\n",
"\n",
"The Notebook gives you everything that a browser gives you. For example, you can embed images, videos, or entire websites."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import HTML\n",
"HTML(\"<iframe src=http://co-op.nashvl.org width=700 height=350></iframe>\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<iframe src=http://co-op.nashvl.org width=700 height=350></iframe>"
],
"output_type": "pyout",
"prompt_number": 2,
"text": [
"<IPython.core.display.HTML at 0x1061accd0>"
]
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.display import YouTubeVideo\n",
"YouTubeVideo(\"BS4Wd5rwNwE\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"\n",
" <iframe\n",
" width=\"400\"\n",
" height=\"300\"\n",
" src=\"http://www.youtube.com/embed/BS4Wd5rwNwE\"\n",
" frameborder=\"0\"\n",
" allowfullscreen\n",
" ></iframe>\n",
" "
],
"output_type": "pyout",
"prompt_number": 3,
"text": [
"<IPython.lib.display.YouTubeVideo at 0x1061b5090>"
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Remote Code\n",
"\n",
"Use `%load` to add remote code"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Mathjax Support\n",
"\n",
"Mathjax ia a javascript implementation of LaTeX that allows equations to be embedded into HTML.\n",
"\n",
"$$\n",
"\\int_{a}^{b} f(x)\\, dx \\approx \\frac{1}{2} \\sum_{k=1}^{N} \\left( x_{k} - x_{k-1} \\right) \\left( f(x_{k}) + f(x_{k-1}) \\right).\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## SymPy Support\n",
"\n",
"SymPy is a Python library for symbolic mathematics. It supports:\n",
"\n",
"* polynomials\n",
"* calculus\n",
"* solving equations\n",
"* discrete math\n",
"* matrices"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from sympy import *\n",
"%load_ext sympyprinting\n",
"x, y = symbols(\"x y\")"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"eq = ((x+y)**2 * (x+1))\n",
"eq"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAAAHQAAAAbCAYAAACtOKuoAAAABHNCSVQICAgIfAhkiAAAA/dJREFU\naIHt2l2MXGMcx/FPa1nS1YpQQlXZUKu6izQaElWbFpHeSGTjQiM04QJXiF55u0CUVlrNiqsV8XrV\nGxUhqKakEi6IovWyjQSVikpFVVEX/7PZZ8+cszszndnZ6HyTyZzn5TzP/z//8/yelzO0+V8xrdUG\ntKmLxbgex6EHD+DTllrUpm66sDFJD2A/ZrXGnDZHSi/+RXeWnonDWNEyi9ocEdOE5I5MlwtEQHvG\nu2kZjm+uXTUzB18X5HcKe49WXsBTI4npBRX6MRd/TpZFEzAD1+AdozKTchBLcPFkGjVFWIUfcW9Z\nhS683GQjetFRZd0ebMKj2CakpYgTsd34C4Nmq04tflXDRMqzQgSU8GteUaWHNX9yHSrrvIr7ygIK\nN+GukrJ+3FZHn7UwpD6/xuMRxcpzlQjm6dnnBlxe1MAOHNNgo/IMaU5AuxTvxSZDdWhOQIuU51yx\nTTmc+8xkrEQsFHr8T67RC3GrkIBZuENo9ik4Dauxu7F+1MXvwqYL8GWSfx9eLKjfSr/m4R6cg0G8\nnpTdKUbcMhG4dViJZ7Lyb0WgJ+RmPJvLOxtrjS6eXsPnWI5FOITba/FE80YovCdOUFKKVKfVfq0R\npzz344Nc2Xa8kqTLlKeQdJV7Kn7Lld+NB8VGVmbEAbyFPXhM/BhThZ3G/qhlqtNKv3rF9usvXI0f\nkrIZuBRbkrxUeSYkDWinyid5oxj2IyzCm9n19+IMcV81HU0S+42Voz7sKqjXSr9+xvM4UyhCOh1c\nIabB93P37BRz54Skc+helSul75Lr+ZkR71bTsDC6ryB/Li4TT2ieVfi4yvaLOA+fJeki1aG1fv2U\nfQ+I0bc5qXeliMOO3P155SklDegwzh+nbn9mbKr53fimpP4tJflDeCjrr9HMF4uGEYpUJ0+r/LpW\nPEQHk7wl2KpyrZBXnlJSyd2GM4z+AJ1CehZm6evE6vGPLN2lfN/XCjrEXPNhkrdXjNqUqeLXWfgq\nZ9dilXJL+LCnmkbTgB4QT8xFWXqpOGjoxiViyP+d1F+Np6vppEGcnH3PLilfIObBQ0nesErVWWpq\n+PWFkOkRBsWJz5aCunnlqZo+vJFdnyQm7A3i8PdYrMdzWd7yejpQ2/J+tnBwl9EN9K/4SGyzUjar\nfONwgphDU9mdCn4RI/Tt7L5BIbX7VJ6vd+CXzM66WCsm7GYxpPEnKgN4sqRsk+JFTKMZUr9f08Vi\naV1BWR9eqrNdxHu2x8XT3QzWi/PHRtGJJ5T/nSZVnWZSi18b8EmSXikWR3MK6hYpz1FPs1WnVobF\nipgI4m7xijDPeMpzVNNs1amVG/GqOK1ao/iNykTK06ZNmzZt2rRpIP8Br0De/f29pkIAAAAASUVO\nRK5CYII=\n",
"prompt_number": 5,
"text": [
"\n",
" 2\n",
"(x + 1)\u22c5(x + y) "
]
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"expand(eq)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAAAQ0AAAAbCAYAAABm6to6AAAABHNCSVQICAgIfAhkiAAABQlJREFU\neJzt3FuoFVUcx/GPh4NaWiYUSRfTTiFqGYUkSubpYkj4IpgQPpQIRZQPUZAQ3cgoim5ECPXQRBci\n6EJYCAZdiMCi6EI36GIRkdRDZXQ17WHNwe3uHJ2ZNbNnT2e+cNiz1sz+r//vv5Zrr9tIS0tLSw4m\nFPzeWZiN6ViGzXi5LKdqYBEuxETMxY34oFaP4mj1tMRQSby/wSXp9Xr8ikmxRmtiKh7sSK/BLkyr\nx51oWj0tMVQW71MwJb1ejd81t9NYgD0YStOHYy9W1uZRHK2elhh6Eu8ncX2ZBnvMBGE4NjJVmy8E\naW5tHsXR6mmJodJ4n4Gb8DAOLcNgDubhRWzDW7hPWF8pg8dwd0m2+oFWTzxVtrd+p5J4X4Z3cEjZ\nhsdgDt7AzDQ9HR+mf8dE2l6POxVfIO43Wj3xVNne+p3S4r0IO4XdE0IvvBcrImwuwGDGZ5/Dkq68\nJakP90f4sFIIEkzGrAhbWcmjOy9l6qnSz6zUpaeq9lYmVdRPqf8ehoSed2Th82L8iaMibCY5nNqJ\nT3FYR94g/sBHBctfJgRoRvq3CosL2spDoprOqWw9id50omNRp54q2lvZJMqtnwPGu0jv9IUwx9kg\n7OMuxtn4IdbTjHyO04Xdm11p3m7FO64TsUXYauqkqVt6rZ5yKbu99TsHjXd3pzEP64RRxDRcjmtx\nJI7GRnwtDNnqYpkg6KeOvJnC1tCWrmez6PnS/r8iB2MWrhGmZ5uFBbIRrhR65fNz2MtDFXqqIGs7\nmiVbLOvUU3Z7y6O7CrKUnTneJ+AeDKTpp4Xh13IsxN/ComcVJOKGV3fgH/vPPavSc5cwwroOb3bd\n246ncthKZNfdlPrJ42eZscxDot72VrbuRHY90WUPdFxvELZQ96TpicKhrW3CvO52IRD9xkm4Cpvs\nH4Qq9CwQhqt/4Rx813FvirAN/VpOm1lpSv1k9bPOWMYQ297q1F162bO70t/itggH85Ao1vNPxtvC\ntlA3VeiZkZZ5rPBLs6rj3nJhRX1+DnuJ7LqbUj9Z/Sw7lnlI1NfeqtCdyKanlLI71zS+6riekxp+\nJYMjeXgUp42SPxNnCj1gN+uFcyDdTMAj2IobRrlfhZ7v0881wvs2L3XcW4of8fEo3ytDd1PqJ6uf\nRWOZh35sbzG6Y/VUGvMrhNXhzpOeQ2M8WwaJ/D3/Jv+tvEvHeLZsPVvxfFfeq3g2p51EsV+8JtQP\n2fwsK5Z5SNTf3srUncinJ6rskTWNScLrr6em6RXC3vRvaXqqMI/rF9YJc8dbu/KXpp9V6zken3Wk\nJwmH3l6PsHkgmlI/RfzsdSyLUEV7q1N3VNkj05Nh3CK8Mz8o9Fq7O57bKJy37wfOFVaAt+LxjvxB\n+467DqtWzyf2HSsmbF1NVt0C1rBm1M+w/H72OpZ5qaq91ak7quyRTmO78LbqecK8aKFwgOshYZj1\ngrC/3A88gyOwdpR7m9LPqvVcLcxvE2GF/GT8jPcjbB6IptRPET97Hcu8VNXe6tTd7zHPRKLeY8ox\nDAgLTPcW+G6iGboTvfEzJpZ5SPRX3GN1J4rryV32wMEf6Qm/CGf5m8ADeLcjvVZ487HI68NN0V2V\nn2XGMg91x71s3Xn01BXzcc0O3JxeHycMOy+oy5mGs8P4jOUO9emOLvv/8v8s9JLVuEjYz56KJ/Be\nrR41l/Eayzp1j9eYt7S0tLS0tLS0tLS0tLS0jHP+Bb9h8Ycrk0MQAAAAAElFTkSuQmCC\n",
"prompt_number": 6,
"text": [
"\n",
" 3 2 2 2 2\n",
"x + 2\u22c5x \u22c5y + x + x\u22c5y + 2\u22c5x\u22c5y + y "
]
}
],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"(1/cos(x)).series(x, 0, 6)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"png": "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\n",
"prompt_number": 7,
"text": [
"\n",
" 2 4 \n",
" x 5\u22c5x \u239b 6\u239e\n",
"1 + \u2500\u2500 + \u2500\u2500\u2500\u2500 + O\u239dx \u23a0\n",
" 2 24 "
]
}
],
"prompt_number": 7
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Magic functions\n",
"\n",
"IPython has a set of predefined \u2018magic functions\u2019 that you can call with a command line style syntax. These include:\n",
"\n",
"* `%run`\n",
"* `%edit`\n",
"* `%debug`\n",
"* `%timeit`\n",
"* `%paste`\n",
"* `%load_ext`\n",
"\n"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%lsmagic"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Available line magics:\n",
"%alias %alias_magic %autocall %automagic %bookmark %cd %clear %colors %config %connect_info %debug %dhist %dirs %doctest_mode %ed %edit %env %gui %hist %history %install_default_config %install_ext %install_profiles %killbgscripts %less %load %load_ext %loadpy %logoff %logon %logstart %logstate %logstop %lsmagic %macro %magic %man %more %notebook %page %pastebin %pdb %pdef %pdoc %pfile %pinfo %pinfo2 %popd %pprint %precision %profile %prun %psearch %psource %pushd %pwd %pycat %pylab %qtconsole %quickref %recall %rehashx %reload_ext %rep %rerun %reset %reset_selective %run %save %sc %store %sx %system %tb %time %timeit %unalias %unload_ext %who %who_ls %whos %xdel %xmode\n",
"\n",
"Available cell magics:\n",
"%%! %%bash %%capture %%file %%javascript %%latex %%perl %%prun %%pypy %%python %%python3 %%ruby %%script %%sh %%svg %%sx %%system %%time %%timeit\n",
"\n",
"Automagic is ON, % prefix IS NOT needed for line magics.\n"
]
}
],
"prompt_number": 8
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Timing the execution of code; the `timeit` magic exists both in line and cell form:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%timeit np.linalg.eigvals(np.random.rand(100,100))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"100 loops, best of 3: 8.34 ms per loop\n"
]
}
],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%timeit a = np.random.rand(100, 100)\n",
"np.linalg.eigvals(a)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"100 loops, best of 3: 8.3 ms per loop\n"
]
}
],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"IPython also creates aliases for a few common interpreters, such as bash, ruby, perl, etc.\n",
"\n",
"These are all equivalent to `%%script <name>`"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%ruby\n",
"puts \"Hello from Ruby #{RUBY_VERSION}\""
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Hello from Ruby 1.8.7\n"
]
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%bash\n",
"echo \"hello from $BASH\""
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"hello from /bin/bash\n"
]
}
],
"prompt_number": 12
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"IPython has an `rmagic` extension that contains a some magic functions for working with R via rpy2. This extension can be loaded using the `%load_ext` magic as follows:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%load_ext rmagic"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x,y = arange(10), random.normal(size=10)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%%R -i x,y -o XYcoef\n",
"lm.fit <- lm(y~x)\n",
"par(mfrow=c(2,2))\n",
"print(summary(lm.fit))\n",
"plot(lm.fit)\n",
"XYcoef <- coef(lm.fit)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"text": [
"\n",
"Call:\n",
"lm(formula = y ~ x)\n",
"\n",
"Residuals:\n",
" Min 1Q Median 3Q Max \n",
"-1.8446 -0.6005 -0.2404 0.8248 2.0626 \n",
"\n",
"Coefficients:\n",
" Estimate Std. Error t value Pr(>|t|)\n",
"(Intercept) 0.3486 0.7065 0.493 0.635\n",
"x -0.1064 0.1323 -0.804 0.445\n",
"\n",
"Residual standard error: 1.202 on 8 degrees of freedom\n",
"Multiple R-squared: 0.07474,\tAdjusted R-squared: -0.04091 \n",
"F-statistic: 0.6463 on 1 and 8 DF, p-value: 0.4447 \n",
"\n"
]
},
{
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAAHgCAYAAAB91L6VAAAEJGlDQ1BJQ0MgUHJvZmlsZQAAOBGF\nVd9v21QUPolvUqQWPyBYR4eKxa9VU1u5GxqtxgZJk6XtShal6dgqJOQ6N4mpGwfb6baqT3uBNwb8\nAUDZAw9IPCENBmJ72fbAtElThyqqSUh76MQPISbtBVXhu3ZiJ1PEXPX6yznfOec7517bRD1fabWa\nGVWIlquunc8klZOnFpSeTYrSs9RLA9Sr6U4tkcvNEi7BFffO6+EdigjL7ZHu/k72I796i9zRiSJP\nwG4VHX0Z+AxRzNRrtksUvwf7+Gm3BtzzHPDTNgQCqwKXfZwSeNHHJz1OIT8JjtAq6xWtCLwGPLzY\nZi+3YV8DGMiT4VVuG7oiZpGzrZJhcs/hL49xtzH/Dy6bdfTsXYNY+5yluWO4D4neK/ZUvok/17X0\nHPBLsF+vuUlhfwX4j/rSfAJ4H1H0qZJ9dN7nR19frRTeBt4Fe9FwpwtN+2p1MXscGLHR9SXrmMgj\nONd1ZxKzpBeA71b4tNhj6JGoyFNp4GHgwUp9qplfmnFW5oTdy7NamcwCI49kv6fN5IAHgD+0rbyo\nBc3SOjczohbyS1drbq6pQdqumllRC/0ymTtej8gpbbuVwpQfyw66dqEZyxZKxtHpJn+tZnpnEdrY\nBbueF9qQn93S7HQGGHnYP7w6L+YGHNtd1FJitqPAR+hERCNOFi1i1alKO6RQnjKUxL1GNjwlMsiE\nhcPLYTEiT9ISbN15OY/jx4SMshe9LaJRpTvHr3C/ybFYP1PZAfwfYrPsMBtnE6SwN9ib7AhLwTrB\nDgUKcm06FSrTfSj187xPdVQWOk5Q8vxAfSiIUc7Z7xr6zY/+hpqwSyv0I0/QMTRb7RMgBxNodTfS\nPqdraz/sDjzKBrv4zu2+a2t0/HHzjd2Lbcc2sG7GtsL42K+xLfxtUgI7YHqKlqHK8HbCCXgjHT1c\nAdMlDetv4FnQ2lLasaOl6vmB0CMmwT/IPszSueHQqv6i/qluqF+oF9TfO2qEGTumJH0qfSv9KH0n\nfS/9TIp0Wboi/SRdlb6RLgU5u++9nyXYe69fYRPdil1o1WufNSdTTsp75BfllPy8/LI8G7AUuV8e\nk6fkvfDsCfbNDP0dvRh0CrNqTbV7LfEEGDQPJQadBtfGVMWEq3QWWdufk6ZSNsjG2PQjp3ZcnOWW\ning6noonSInvi0/Ex+IzAreevPhe+CawpgP1/pMTMDo64G0sTCXIM+KdOnFWRfQKdJvQzV1+Bt8O\nokmrdtY2yhVX2a+qrykJfMq4Ml3VR4cVzTQVz+UoNne4vcKLoyS+gyKO6EHe+75Fdt0Mbe5bRIf/\nwjvrVmhbqBN97RD1vxrahvBOfOYzoosH9bq94uejSOQGkVM6sN/7HelL4t10t9F4gPdVzydEOx83\nGv+uNxo7XyL/FtFl8z9ZAHF4bBsrEwAAQABJREFUeAHsXQncTOX3P/OSJCX+LWRfoyhCdiFKKkpR\n9jU77UqLspSQJfoplHYqKRKJhLJLJIlISgptttL63v/zPbrTzLwz8868s92Z+Z7PZ+Zuz32W773P\nPc9zznnOcVmGhEQEiAARIAJEgAjEFYGMuJbGwogAESACRIAIEAFFgAyYLwIRIAJEgAgQgQQgQAac\nANBZJBEgAkSACBABMmC+A0SACBABIkAEEoAAGXACQGeRRIAIEAEiQATIgPkOEAEiQASIABFIAAJk\nwAkAnUUSASJABIgAESAD5jtABIgAESACRCABCJABJwB0FkkEiAARIAJEgAyY7wARIAJEgAgQgQQg\nQAacANBZJBEgAkSACBABMmC+A0SACBABIkAEEoAAGXACQGeRRIAIEAEiQATIgPkOEAEiQASIABFI\nAAJkwAkAnUUSASJABIgAESAD5jtABIgAESACRCABCJABJwB0FkkEiAARIAJEgAyY7wARIAJEgAgQ\ngQQgQAacANBZJBEgAkSACBABMmC+A0SACBABIkAEEoAAGXACQGeRRIAIEAEiQATIgPkOEAEiQASI\nABFIAAJkwAkAnUUSASJABIgAESAD5jtABIgAESACRCABCJABJwB0FkkEiAARIAJEgAyY7wARIAJE\ngAgQgQQgQAacANBZJBEgAkSACBABMmC+A0SACBABIkAEEoAAGXACQGeRRIAIEAEiQATIgPkOEAEi\nQASIABFIAAJkwAkAnUUSASJABIgAESAD5jtABIgAESACRCABCJABJwB0FkkEiAARIAJEgAyY7wAR\nIAJEII0R+O233+SPP/4ICwHLsuTQoUNh3cPEWREgA86KSdhnjhw5Ii6XS4oWLSrFixfXX7FixeS6\n666TAwcOhJ2ffUOZMmXkk08+sQ/d2w8//FAuvvhi93G4O6tWrZILL7ww3NtynL5169aSN29eOf30\n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\nIANOp6fNthIBIkAEiIBjECADdsyjYEWIABEgAkQgnRAgA06np822EgEiQASIgGMQIAN2zKNgRYgA\nESACRCCdECADTqenzbYSASJABIiAYxAgA3bMo2BFiAARIAJEIJ0QIANOp6fNthIBIkAEiIBjECAD\ndsyjYEWIABEgAkQgnRAgA06np822EgEiQASIgGMQIAN2zKNgRYgAESACRCCdECADTqenzbYSASJA\nBIiAYxAgA3bMo2BFiAARIAJEIJ0QIANOp6fNthIBIkAEiIBjECADdsyjYEWIABEgAkQgnRAgA06n\np822EgEiQASIgGMQIAN2zKNgRYgAESACRCCdECADTqenzbYSASJABIiAYxAgA3bMo2BFiAARIAJE\nIJ0QIANOp6fNthIBIkAEiIBjECADdsyjYEWIABEgAkQgnRAgA06np822EgEiQASIgGMQIAN2zKNg\nRYgAESACRCCdECADTqenzbYSASJABIiAYxAgA3bMo2BFiAARIAJEIJ0QIANOp6fNthIBIkAEiIBj\nECADdsyjYEWIABEgAkQgnRAgA06np822EgEiQASIgGMQIAN2zKNgRYgAESACRCCdECADTqenzbYS\nASJABIiAYxAgA3bMo2BFiAARIAJEIJ0QIANOp6fNthIBIkAEiIBjECADdsyjYEWIABEgAkQgnRAg\nA06np822EgEiQASIgGMQIAN2zKNgRYgAESACRCCdECADTqenzbYSASJABIiAYxAgA3bMo2BFiAAR\nIAJEIJ0QIANOp6fNthIBIkAEiIBjECADdsyjYEWIABEgAkQgnRAgA07g0z58+LAcP348gTVg0USA\nCBABIpAoBMiAE4D80qVLpXz58lKpUiUpXry41KhRQz755JMc1+TWW2+VESNGhHX/N998Iy6XS/75\n55+w7stJ4gcffFD+/PNPvbVMmTIRtTUn5fOe9ETgyJEj+o4XLVpU+xn6WrFixeS6666TAwcO5BiU\nQO/whx9+KBdffHGO8121apVceOGFOb4/3Btr1aols2bNCvc2po8iAmTAUQQzlKzAiNq0aSNTp06V\n7777Tg4ePCidOnXSj0Io9ydbGjD44cOHS2ZmplZ95cqVcv755ydbM1jfJEYAg9u9e/fq79NPP9VB\n57333pvjFvEdzjF0vNEHATJgH0BifQhG9Ntvv0mePHm0qIyMDOnfv79Mnz5d/v77bz33wQcfSL16\n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\nAUVAEcgNAv8PBhozG8B7e9cAAAAASUVORK5CYII=\n"
}
],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"XYcoef"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 16,
"text": [
"[ 0.34858412 -0.10639529]"
]
}
],
"prompt_number": 16
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Parallel iPython"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Before running the next cell, make sure you have first started your cluster, you can use the [clusters tab in the dashboard](/#tab2) to do so. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from IPython.parallel import Client\n",
"client = Client()\n",
"dv = client.direct_view()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 18
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"len(dv)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"png": "iVBORw0KGgoAAAANSUhEUgAAAAwAAAASCAYAAABvqT8MAAAABHNCSVQICAgIfAhkiAAAAOVJREFU\nKJHN0rEuRFEQBuCPXQkF0W2lEiGy0epkC519ANHwEGqJRrTeQLulchHvoNBusxsSQVgKEdm7xR3J\nse4mV7d/M2f+mX/OzJzDPzE14q/iEN9YwyNOcFskXkEb80mxFvqo/yRNJ4JdbKMRfoaLKLBXJLjD\nA14SbhD2dfxUv3GGT6yXSa7jOW1nHJo4jfb2y7YCVVzhBnNlRVvybZ0XBZewMcIthKCPmTQwizf5\nCy8nfC0EH5GjGoGvIDu4TwSbYa/l61UJIotzF5eJ4AiLOMATfz/fjnzvWdz+jmP0CmaeFAwBa/or\nfukYNogAAAAASUVORK5CYII=\n",
"prompt_number": 19,
"text": [
"3"
]
}
],
"prompt_number": 19
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def where_am_i():\n",
" import os\n",
" import socket\n",
" \n",
" return \"In process with pid {0} on host: '{1}'\".format(\n",
" os.getpid(), socket.gethostname())"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 20
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"where_am_i_direct_results = dv.apply(where_am_i)\n",
"where_am_i_direct_results.get()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 21,
"text": [
"[In process with pid 79873 on host: 'Cepeda.local',\n",
" In process with pid 79874 on host: 'Cepeda.local',\n",
" In process with pid 79875 on host: 'Cepeda.local']"
]
}
],
"prompt_number": 21
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Links and References"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[IPython Notebook Viewer](http://nbviewer.ipython.org) Displays static HTML versions of notebooks, and includes a gallery of notebook examples."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[NotebookCloud](https://notebookcloud.appspot.com) A service that allows you to launch and control IPython Notebook servers on Amazon EC2 from your browser."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[A Reference-Free Algorithm for Computational Normalization of Shotgun Sequencing Data](http://ged.msu.edu/papers/2012-diginorm/) A landmark example of reproducible research in genomics: Git repo, iPython notebook, data and scripts."
]
}
],
"metadata": {}
}
]
}
@ivanov
Copy link

ivanov commented Feb 14, 2014

Hey Chris, this is a great notebok. It'd be great if IPython was spelled properly. @fperez, @minrk, @takluyver and I would appreciate that :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment