{ "metadata": { "name": "statBytes-python" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Getting started with Python for statistical computing" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "What is Python?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "+ A general purpose, high-level programming language\n", "+ Design, syntax, and culture promote human readability\n", "+ Interpreted\n", "+ Dynamic typing\n", "+ Automatic memory management\n", "+ Support the object-oriented paradigm" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "The statistical computing \"stack\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "+ *IPython* is an incredibly useful tool for interactive computing (like the R command line).\n", "+ Typically, write code in a text editor, then use the *run* command in IPython.\n", "+ Play with individual blocks of code interactively at the IPython prompt.\n", "+ Not all of the following libraries are always necessary.\n", "+ You don't have to import the whole package." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np ## vector and matrix operations\n", "import scipy as sp ## grab-bag of statistical and science tools\n", "import matplotlib.pyplot as plt ## matplotlib - plots\n", "import pandas as pd ## emulates R data frames\n", "import statsmodels.api as sm ## scikits.statsmodels - statistics library\n", "import patsy ## emulates R model formulas\n", "\n", "import sklearn as skl ## scikits.learn - machine learning library\n", "from sklearn import mixture as sklmix" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Installation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Linux (Ubuntu)*\n", "\n", "+ Python should be included in the OS. To install new packages use \n", "`(sudo) pip install [package]`.\n", "\n", "*Mac*\n", "\n", "+ Python should be installed already. Consider a bundled installation to get all the packages easier.\n", "\n", "*Windows*\n", "\n", "+ Check out the bundled scientific python distributions.\n", " + [Enthought](https://www.enthought.com/products/canopy/academic/) (free for academic use)\n", " + [Anaconda](https://store.continuum.io/) (Continuum Analytics)\n", " + [Python(x,y)](https://code.google.com/p/pythonxy/)" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Generate some random variables" ] }, { "cell_type": "code", "collapsed": true, "input": [ "x = np.linspace(0, 10, 100)\n", "y = np.random.normal(loc=x, scale=1.0)\n", "plt.plot(x, y, 'bo')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "pyout", "prompt_number": 2, "text": [ "[]" ] }, { "output_type": "display_data", "png": "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\n" } ], "prompt_number": 2 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Basic linear regression" ] }, { "cell_type": "code", "collapsed": false, "input": [ "ols_model = sm.OLS(y, x)\n", "ols_fit = ols_model.fit()\n", "yhat = ols_fit.predict()\n", "\n", "print ols_fit.summary()\n", "plt.plot(x, y, 'bo', x, yhat, 'r-', lw=2)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " OLS Regression Results \n", "==============================================================================\n", "Dep. Variable: y R-squared: 0.896\n", "Model: OLS Adj. R-squared: 0.896\n", "Method: Least Squares F-statistic: inf\n", "Date: Tue, 11 Jun 2013 Prob (F-statistic): nan\n", "Time: 11:03:43 Log-Likelihood: -143.13\n", "No. Observations: 100 AIC: 288.3\n", "Df Residuals: 99 BIC: 290.9\n", "Df Model: 0 \n", "==============================================================================\n", " coef std err t P>|t| [95.0% Conf. Int.]\n", "------------------------------------------------------------------------------\n", "x1 1.0084 0.018 57.360 0.000 0.974 1.043\n", "==============================================================================\n", "Omnibus: 1.215 Durbin-Watson: 1.854\n", "Prob(Omnibus): 0.545 Jarque-Bera (JB): 1.193\n", "Skew: 0.257 Prob(JB): 0.551\n", "Kurtosis: 2.851 Cond. No. 1.00\n", "==============================================================================\n" ] }, { "output_type": "pyout", "prompt_number": 3, "text": [ "[,\n", " ]" ] }, { "output_type": "display_data", "png": "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\nTkSuQmCC\n" } ], "prompt_number": 3 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Open a CSV file with Pandas" ] }, { "cell_type": "code", "collapsed": false, "input": [ "iris = pd.read_csv('iris.csv')\n", "print iris, '\\n'\n", "print iris.head(10)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n", "Int64Index: 150 entries, 0 to 149\n", "Data columns:\n", "Type 150 non-null values\n", "PW 150 non-null values\n", "PL 150 non-null values\n", "SW 150 non-null values\n", "SL 150 non-null values\n", "dtypes: int64(5) \n", "\n", " Type PW PL SW SL\n", "0 0 2 14 33 50\n", "1 1 24 56 31 67\n", "2 1 23 51 31 69\n", "3 0 2 10 36 46\n", "4 1 20 52 30 65\n", "5 1 19 51 27 58\n", "6 2 13 45 28 57\n", "7 2 16 47 33 63\n", "8 1 17 45 25 49\n", "9 2 14 47 32 70\n" ] } ], "prompt_number": 4 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Compute summary statistics" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print np.round(iris.describe(), 2)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " Type PW PL SW SL\n", "count 150.00 150.00 150.00 150.00 150.00\n", "mean 1.00 11.93 37.79 30.55 58.45\n", "std 0.82 7.57 17.78 4.37 8.27\n", "min 0.00 1.00 10.00 20.00 43.00\n", "25% 0.00 3.00 16.00 28.00 51.00\n", "50% 1.00 13.00 44.00 30.00 58.00\n", "75% 2.00 18.00 51.00 33.00 64.00\n", "max 2.00 25.00 69.00 44.00 79.00\n" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "type_grp = iris.groupby('Type')\n", "print \"number of groups:\", type_grp.ngroups, \"\\n\"\n", "print \"maximums:\\n\", type_grp.max(), \"\\n\"\n", "print \"size of each group:\\n\", type_grp.size(), \"\\n\"" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "number of groups: 3 \n", "\n", "maximums:\n", " PW PL SW SL\n", "Type \n", "0 6 19 44 58\n", "1 25 69 38 79\n", "2 18 56 34 70 \n", "\n", "size of each group:\n", "Type\n", "0 50\n", "1 50\n", "2 50 \n", "\n" ] } ], "prompt_number": 6 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Plot the data" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from mpl_toolkits.mplot3d import Axes3D\n", "fig = plt.figure(figsize=(8, 8))\n", "ax = fig.add_subplot(111, projection='3d')\n", "ax.scatter(iris['PW'], iris['PL'], iris['SW'], c=iris['Type'])\n", "\n", "ax.set_xlabel('PW')\n", "ax.set_ylabel('PL')\n", "ax.set_zlabel('SW')\n", "ax.azim = 140\n", "ax.elev = 15" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAcwAAAHMCAYAAABY25iGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXeYFFXWxt+qzml6AswMOYskRZwFBSUIiBFFXRETKqyr\nrrsq6q6rrq6sIorZNYufGFbFjAgSFFAQRUmKJJUkMEOa0NOxqrvq+2O8RU1P90z3dKzu83seHmCm\nu/p2hfvec+4JnCzLMgiCIAiCaBY+0wMgCIIgCC1AgkkQBEEQMUCCSRAEQRAxQIJJEARBEDFAgkkQ\nBEEQMUCCSRAEQRAxQIJJEARBEDFAgkkQBEEQMUCCSRAEQRAxQIJJEARBEDFAgkkQBEEQMUCCSRAE\nQRAxQIJJEARBEDFAgkkQBEEQMUCCSRAEQRAxQIJJEARBEDFAgkkQBEEQMUCCSRAEQRAxQIJJEARB\nEDFAgkkQBEEQMUCCSRAEQRAxQIJJEARBEDFAgkkQBEEQMUCCSRAEQRAxQIJJEARBEDFAgkkQBEEQ\nMUCCSRAEQRAxQIJJEARBEDFAgkkQBEEQMUCCSRAEQRAxQIJJEARBEDFAgkkQBEEQMUCCSRAEQRAx\nQIJJEARBEDFAgkkQBEEQMUCCSRAEQRAxQIJJEARBEDFAgkkQBEEQMUCCSRAEQRAxQIJJEARBEDFA\ngkkQBEEQMUCCSRAEQRAxQIJJEARBEDFAgkkQBEEQMUCCSRAEQRAxQIJJEARBEDFAgkkQBEEQMUCC\nSRAEQRAxQIJJEARBEDFAgkkQBEEQMUCCSRAEQRAxQIJJEARBEDFAgkkQBEEQMUCCSRAEQRAxQIJJ\nEARBEDFAgkkQBEEQMUCCSRAEQRAxQIJJEARBEDFAgkkQBEEQMUCCSRAEQRAxQIJJEARBEDFAgkkQ\nBEEQMUCCSRAEQRAxQIJJEHmAJEmQJCnTwyAITaPP9AAIgkgesiw3+sOEMhgMQhAEGAwGGAwG6PV6\n6HQ6cByX6SEThGYgwSQIDRIuiuq/2e9dLhecTqciihzHQZIkeDwehEIhGI1G8DwPvV4Pg8GgCCiJ\nKEFEhgSTILKYloRRDRM7juOU9/A8r/wOAHieV17D8zxkWYYgCBAEQXmdXq9X/rDXEwRBgkkQWUFr\nhTERIh1DlmWIoghRFJWfqQWU3LhEPkOCSRBpJNL+ot/vh9FobPQ6tRs1EYFinyOKIkKhkGJxRoPj\n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\n" } ], "prompt_number": 7 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Check the state of the namespace" ] }, { "cell_type": "code", "collapsed": false, "input": [ "whos" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Variable Type Data/Info\n", "-------------------------------------------------\n", "Axes3D type \n", "ax Axes3DSubplot Axes(0.125,0.125;0.775x0.775)\n", "fig Figure Figure(640x640)\n", "iris DataFrame values\\ndtypes: int64(5)\n", "ols_fit RegressionResultsWrapper pper object at 0x5b03c90>\n", "ols_model OLS .OLS object at 0x44b28d0>\n", "patsy module ages/patsy/__init__.pyc'>\n", "pd module ges/pandas/__init__.pyc'>\n", "skl module es/sklearn/__init__.pyc'>\n", "sklmix module rn/mixture/__init__.pyc'>\n", "sm module 2.7/statsmodels/api.pyc'>\n", "sp module ages/scipy/__init__.pyc'>\n", "type_grp DataFrameGroupBy upBy object at 0x5b40a90>\n", "x ndarray 100: 100 elems, type `float64`, 800 bytes\n", "y ndarray 100: 100 elems, type `float64`, 800 bytes\n", "yhat ndarray 100: 100 elems, type `float64`, 800 bytes\n" ] } ], "prompt_number": 8 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Get help for a function" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# %pdoc sklmix.GMM\n", "# %psource sklmix.GMM\n", "\n", "#sklmix.GMM?\n", "#sklmix.GMM??" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Pick your favorite clustering algorithm" ] }, { "cell_type": "code", "collapsed": false, "input": [ "gmm_model = sklmix.GMM(n_components=3, covariance_type='full')\n", "gmm_model.fit(iris[['PW', 'PL', 'SW']])\n", "yhat = gmm_model.predict(iris[['PW', 'PL', 'SW']])\n", "crosstab = pd.crosstab(iris['Type'], yhat, rownames=['true'], colnames=['predicted'])\n", "print crosstab" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "predicted 0 1 2\n", "true \n", "0 50 0 0\n", "1 0 13 37\n", "2 0 45 5\n" ] } ], "prompt_number": 10 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Align the confusion matrix with a non-standard package" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import munkres\n", "import sys\n", "m = munkres.Munkres()\n", "cost = munkres.make_cost_matrix(crosstab.values.tolist(), lambda x : sys.maxint - x)\n", "align = m.compute(cost)\n", "print align, '\\n'\n", "\n", "permute = [x[1] for x in align]\n", "new_label = np.argsort(permute)\n", "yhat_new = new_label[yhat]\n", "print pd.crosstab(iris['Type'], yhat_new, rownames=['true'], colnames=['predicted'])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[(0, 0), (1, 2), (2, 1)] \n", "\n", "predicted 0 1 2\n", "true \n", "0 50 0 0\n", "1 0 37 13\n", "2 0 5 45\n" ] } ], "prompt_number": 11 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Bridging the gap with Rpy2" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from rpy2.robjects import r\n", "from rpy2.robjects.numpy2ri import numpy2ri as np2r\n", "\n", "Xr = np2r(iris[['PW', 'PL', 'SW']].values)\n", "d = r.dist(Xr)\n", "tree = r.hclust(d, method='ward')\n", "yhat_hclust = r.cutree(tree, k=3)\n", "\n", "print pd.crosstab(iris['Type'], yhat_hclust, rownames=['true'], colnames=['predicted'])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "predicted 1 2 3\n", "true \n", "0 50 0 0\n", "1 0 35 15\n", "2 0 0 50\n" ] } ], "prompt_number": 12 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Using non-base packages in Rpy2" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import rpy2.robjects as robjects\n", "from rpy2.robjects.packages import importr\n", "r = robjects.r\n", "\n", "e1071 = importr('e1071')\n", "Yr = np2r(iris['Type'])\n", "Yr = r.factor(Yr)\n", "svm = e1071.svm(Xr, Yr)\n", "yhat = r.predict(svm, Xr)\n", "print r.table(yhat, Yr)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ " \n", " 0 1 2\n", " 0 50 0 0\n", " 1 0 46 2\n", " 2 0 4 48\n", "\n" ] } ], "prompt_number": 13 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "ggplot2 in python with Rpy2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Thanks to [Fei Yu](http://www.thefeiyu.com/) for this vignette." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import rpy2.robjects as robjects\n", "from rpy2.robjects.packages import importr\n", "\n", "r = robjects.r\n", "r.library(\"ggplot2\")\n", "rnorm = r[\"rnorm\"]\n", "\n", "dtf = robjects.DataFrame({'x': rnorm(300, mean=0) + rnorm(100, mean=3),\n", " 'y': rnorm(300, mean=0) + rnorm(100, mean=3)})\n", "robjects.globalenv['dtf'] = dtf # assign to R's environment\n", "r(\"gp = ggplot(dtf, aes(x, y))\")\n", "r(\"pp = gp + geom_point(size=0.6)\")\n", "# r(\"plot(pp)\") # I can't get this to work on my system, but saving the plot is just as good.\n", "r(\"ggsave(filename='test.png', plot=pp, scale=0.3)\")\n", "\n", "from IPython.core.display import Image \n", "Image(filename='test.png') " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Saving 2.1 x 2.1 in image\n" ] }, { "output_type": "pyout", "png": "iVBORw0KGgoAAAANSUhEUgAAAnUAAAJ1CAMAAACIKfZmAAACalBMVEUAAAABAQECAgIDAwMEBAQF\nBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8RERETExMUFBQVFRUXFxcYGBgZGRkaGhob\nGxscHBwdHR0fHx8gICAiIiImJiYnJycoKCgqKiorKyssLCwtLS0vLy8wMDAyMjIzMzM2NjY5OTk6\nOjo8PDw/Pz9AQEBCQkJDQ0NERERGRkZHR0dISEhMTExNTU1UVFRVVVVXV1daWlpbW1tdXV1eXl5h\nYWFiYmJjY2NkZGRlZWVmZmZpaWlra2tsbGxubm5vb29wcHBxcXF5eXl9fX1+fn5/f3+AgICBgYGC\ngoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OUlJSV\nlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OlpaWmpqanp6eoqKip\nqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4uLi5ubm6urq7u7u8\nvLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnKysrLy8vMzMzNzc3Ozs7P\nz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc3Nzd3d3e3t7f39/g4ODh4eHi\n4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u7u7v7+/w8PDx8fHy8vLz8/P09PT1\n9fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7///853xSbAAAACXBIWXMAAC4jAAAuIwF4pT92\nAAAgAElEQVR4nO2did/cxnnfUTd12zRu06Z1kqZN3SZt47ht2vRIm9ZJ2/RI0hYUJZGiVeswD0t2\nJFtldNm0GJOURVOOLNmWrCNWZMmyZJGiKPElKfK9uHwvvse+/1NnsAtgrmeOXcwssPv7fj7SuwPM\nDIAHXw5mBlhstgtAarJJ7wCYQWAdSA+sA+mBdSA9sA6kB9aB9MA6kB5YB9ID60B6YB1ID6wD6YF1\nID2wDqQH1oH0wDqQHlgH0gPrQHpgHUgPrAPpgXUgPbAOpAfWgfTAOpAeWAfSA+tAemAdSA+sA+mB\n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\n", "prompt_number": 14, "text": [ "" ] } ], "prompt_number": 14 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Python resources" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "+ [Python tutorial](http://docs.python.org/2/tutorial/)\n", "+ [Dive into Python](http://www.diveintopython.net/toc/index.html) (old but good)\n", "+ [Ipython](http://ipython.org/)\n", "+ [Ipython video](https://www.youtube.com/watch?v=2G5YTlheCbw)\n", "+ [py2exe](http://www.py2exe.org/): compile python to a Windows executable file" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Package websites" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "+ [NumPy](http://www.numpy.org/)\n", "+ [SciPy](http://www.scipy.org/)\n", "+ [matplotlib](http://matplotlib.org/)\n", "+ [pandas](http://pandas.pydata.org/)\n", "+ [scikit-learn](http://scikit-learn.org/stable/)\n", "+ [statsmodels](http://statsmodels.sourceforge.net/)\n", "+ [patsy](http://patsy.readthedocs.org/en/latest/index.html): symbolic formulas for models" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Rosetta stones" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "+ [NumPy for MATLAB users, source 1](http://www.scipy.org/NumPy_for_Matlab_Users)\n", "+ [NumPy for MATLAB users, source 2](http://mathesaurus.sourceforge.net/matlab-numpy.html)\n", "+ [NumPy for R users](http://mathesaurus.sourceforge.net/r-numpy.html)\n", "+ [MATLAB vs. R vs. Python](http://hyperpolyglot.org/numerical-analysis)" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Miscellaneous" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "+ [Fernando Perez](https://twitter.com/fperez_org) (IPython)\n", "+ [Wes McKinney](https://twitter.com/wesmckinn) (pandas)\n", "+ [PyData conference videos](http://pyvideo.org/category/18/pydata)\n", "+ [SciPy 2012 conference videos](http://pyvideo.org/category/20/scipy_2012)\n", "+ [Python for Data Analysis](http://www.amazon.com/books/dp/1449319793) (Wes McKinney, 2012)\n", "+ [http://slendrmeans.wordpress.com/](http://slendrmeans.wordpress.com/)" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Why Python?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "+ Somebody in power told you to.\n", "+ Communication with other people.\n", "+ Communication between parts of a data analysis pipeline.\n", "+ Faster than R (often, but not always).\n", "+ Simple syntax for object-oriented designs.\n", "+ Written by computer scientists and programmers (not statisticians).\n", "+ Much bigger ecosystem of general language tools (but smaller set of statistics tools).\n", "+ Production-quality code." ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "Ipython Notebook" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Relevant links:\n", "\n", "+ http://ipython.org/notebook.html\n", "+ https://github.com/ipython/nbconvert\n", "+ http://nbviewer.ipython.org/\n", "\n", "For Ubuntu:\n", "\n", "+ `sudo apt-get install ipython-notebook`\n", "+ `ipython notebook --pylab=inline --script`\n", "+ `nbconvert latex statBytes-python`\n", "+ `pdflatex statBytes-python.tex`\n", "\n", "The `--pylab==inline` flag embeds matplotlib output in the notebook rather than popping up a new window for each figure. The `--script` flat saves a `.py` script along with the `.ipynb` file which is ready to be run in a regular python or ipython prompt.\n", "\n", "There are (at least) two ways to post a notebook online. For this notebook I pushed the .ipynb file to a public github repo, open the file on the github website, clicked the \"raw\" button, and pasted the URL into the box at the top of the nbviewer website. Pretty straightforward." ] } ], "metadata": {} } ] }