{ "metadata": { "celltoolbar": "Slideshow", "name": "", "signature": "sha256:0f982ab7dfef6a1ab602ea369c2cc4dfa719b71d5d037f05ea2a07ada29866bb" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": { "internals": { "slide_type": "subslide" }, "slideshow": { "slide_type": "slide" } }, "source": [ "Frictionless Data Science with Python" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_number": 1, "slide_helper": "subslide_end" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "fragment" } }, "source": [ "Catherine Devlin (catherine.devlin@gmail.com, @catherinedevlin)\n", "\n", "Postgres Open 2014\n", "\n", "https://github.com/catherinedevlin/pgopen2014-data-science\n", "\n", "http://tinyurl.com/frictionless-data-science" ] }, { "cell_type": "heading", "level": 1, "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "About Me" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* Oracle DBA 1999 - 2010\n", "* PostgreSQL DBA 2010 -\n", "* Python 2004 - \n", "* Founding chair of [PyOhio](pyohio.org)\n", "\n", "\"18F\"" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "![PyPGDay shirt](pypgday.jpg)" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 1, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "source": [ "All About Recent Data-Handling Developments in Python" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 1, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "source": [ "Some Recent Data-Handling Developments in Python" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 1, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "source": [ "A Few Recent Data-Handling Developments in Python" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 1, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "slide" } }, "source": [ "- IPython Notebook\n", "- Get & Manipulate\n", " - Pandas\n", " - ddlgenerator\n", "- Serve\n", " - sandman\n", " - HTSQL\n", "- Visualize\n", " - matplotlib\n", " - mpld3\n", " - Bokeh" ] }, { "cell_type": "heading", "level": 1, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 1, "slide_type": "subslide" }, "slideshow": { "slide_type": "slide" } }, "source": [ "[IPython Notebook](http://ipython.org/notebook.html)" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 6, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "source": [ "(aka \"Project Jupyter\")\n", "\n", "Browser-based enhanced Python environment\n", "\n", "![2012 Free Software Award](https://static.fsf.org/fsforg/img/IPythonsm.jpg \"Fernando Perez receiving 2012 FSF Award\")" ] }, { "cell_type": "heading", "level": 2, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 6, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "subslide" } }, "source": [ "[IPython Notebook demo](notebook_demo.ipynb)" ] }, { "cell_type": "heading", "level": 2, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 6, "slide_type": "subslide" }, "slideshow": { "slide_type": "slide" } }, "source": [ "%sql" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 10, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "source": [ "\n", " pip install ipython_sql\n", " pip install psycopg2" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%load_ext sql\n", "%sql postgresql://:@/pgo" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 10, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 1, "text": [ "'Connected: @pgo'" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "%sql SELECT * FROM yob2010 LIMIT 5" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 12, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "5 rows affected.\n" ] }, { "html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesexn_births
IsabellaF22731
SophiaF20477
EmmaF17179
OliviaF16860
AvaF15300
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [ "[('Isabella', 'F', 22731),\n", " ('Sophia', 'F', 20477),\n", " ('Emma', 'F', 17179),\n", " ('Olivia', 'F', 16860),\n", " ('Ava', 'F', 15300)]" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "%%sql\n", "SELECT *\n", "FROM yob2010\n", "LIMIT 5" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 12, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "5 rows affected.\n" ] }, { "html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesexn_births
IsabellaF22731
SophiaF20477
EmmaF17179
OliviaF16860
AvaF15300
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ "[('Isabella', 'F', 22731),\n", " ('Sophia', 'F', 20477),\n", " ('Emma', 'F', 17179),\n", " ('Olivia', 'F', 16860),\n", " ('Ava', 'F', 15300)]" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "names = %sql SELECT * FROM yob2010" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 12, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "33838 rows affected.\n" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "names[2]" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 15 }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "('Emma', 'F', 17179)" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "names[2].sex" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 16 }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "'F'" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 17, "slide_helper": "subslide_end" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "fragment" } }, "source": [ "**WARNINGS**: \n", "\n", "- Do not run biiiiiiiig queries with `%sql`\n", "- Keeps an open session" ] }, { "cell_type": "heading", "level": 1, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 17, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "slide" } }, "source": [ "Getting & Manipulating Data" ] }, { "cell_type": "heading", "level": 2, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 17, "slide_type": "subslide" }, "slideshow": { "slide_type": "slide" } }, "source": [ "[Pandas](http://pandas.pydata.org)" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 20, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "source": [ "- High-level data handling library\n", "- Python's answer to R\n", "- 2-D DataFrames much like SQL tables\n", "- Packaged with [Anaconda](https://store.continuum.io/cshop/anaconda/) and [Canopy](https://www.enthought.com/products/canopy/)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "" ] }, { "cell_type": "heading", "level": 3, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 20, "slide_type": "subslide" }, "slideshow": { "slide_type": "slide" } }, "source": [ "Getting data" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import pandas as pd" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 23, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "outputs": [], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "!head sample_data/yob2000.txt" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 25 }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Emily,F,25949\r", "\r\n", "Hannah,F,23066\r", "\r\n", "Madison,F,19965\r", "\r\n", "Ashley,F,17991\r", "\r\n", "Sarah,F,17677\r", "\r\n", "Alexis,F,17622\r", "\r\n", "Samantha,F,17262\r", "\r\n", "Jessica,F,15698\r", "\r\n", "Elizabeth,F,15077\r", "\r\n", "Taylor,F,15076\r", "\r\n" ] } ], "prompt_number": 8 }, { "cell_type": "code", "collapsed": true, "input": [ "yob2000 = pd.read_csv('sample_data/yob2000.txt', names=['name','sex','n_births'])" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 26 }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "yob2000.head()" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 27, "slide_helper": "subslide_end" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesexn_births
0 Emily F 25949
1 Hannah F 23066
2 Madison F 19965
3 Ashley F 17991
4 Sarah F 17677
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ " name sex n_births\n", "0 Emily F 25949\n", "1 Hannah F 23066\n", "2 Madison F 19965\n", "3 Ashley F 17991\n", "4 Sarah F 17677" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "pd.read_excel" ], "language": "python", "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ "" ] } ], "prompt_number": 11 }, { "cell_type": "heading", "level": 3, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 27, "slide_type": "subslide" }, "slideshow": { "slide_type": "slide" } }, "source": [ "Manipulating data with Pandas" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 29, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "source": [ "- Join\n", "- Sort\n", "- Filter\n", "- Broadcast\n", "- Python functions\n", "- Apply functions to groups\n", "- Moving averages" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* *yawn*" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "![there's nothing for me here](http://www.starwarsreport.com/wp-content/uploads/2013/05/Star-Wars-Luke-Skywalker-Tatooine.jpg)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "yob2000.head(6).T" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 29, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
012345
name Emily Hannah Madison Ashley Sarah Alexis
sex F F F F F F
n_births 25949 23066 19965 17991 17677 17622
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ " 0 1 2 3 4 5\n", "name Emily Hannah Madison Ashley Sarah Alexis\n", "sex F F F F F F\n", "n_births 25949 23066 19965 17991 17677 17622" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "yob2000.head(6).T.sum(axis=1)" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 31, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "name EmilyHannahMadisonAshleySarahAlexis\n", "sex FFFFFF\n", "n_births 122270\n", "dtype: object" ] } ], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "ls sample_data/yob*.txt" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 31, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "sample_data/yob2000.txt sample_data/yob2004.txt sample_data/yob2008.txt\r\n", "sample_data/yob2001.txt sample_data/yob2005.txt sample_data/yob2009.txt\r\n", "sample_data/yob2002.txt sample_data/yob2006.txt sample_data/yob2010.txt\r\n", "sample_data/yob2003.txt sample_data/yob2007.txt\r\n" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "all_names = pd.DataFrame()\n", "for yr in range(2000, 2011):\n", " one_yr = pd.read_csv('sample_data/yob%d.txt' % yr, names=['name','sex','n_births'])\n", " one_yr['year'] = yr\n", " all_names = all_names.append(one_yr, ignore_index=True)" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 33 }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "all_names.head()" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 34 }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesexn_birthsyear
0 Emily F 25949 2000
1 Hannah F 23066 2000
2 Madison F 19965 2000
3 Ashley F 17991 2000
4 Sarah F 17677 2000
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ " name sex n_births year\n", "0 Emily F 25949 2000\n", "1 Hannah F 23066 2000\n", "2 Madison F 19965 2000\n", "3 Ashley F 17991 2000\n", "4 Sarah F 17677 2000" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "all_names.tail()" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 35, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesexn_birthsyear
358607 Zymaire M 5 2010
358608 Zyonne M 5 2010
358609 Zyquarius M 5 2010
358610 Zyran M 5 2010
358611 Zzyzx M 5 2010
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 17, "text": [ " name sex n_births year\n", "358607 Zymaire M 5 2010\n", "358608 Zyonne M 5 2010\n", "358609 Zyquarius M 5 2010\n", "358610 Zyran M 5 2010\n", "358611 Zzyzx M 5 2010" ] } ], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "lesleys = all_names[all_names.name.str.startswith('Lesl')]\n", "lesleys" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 35, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesexn_birthsyear
89 Leslie F 3619 2000
388 Lesly F 742 2000
429 Lesley F 658 2000
1313 Lesli F 145 2000
2248 Leslye F 70 2000
3618 Leslee F 36 2000
6101 Leslieann F 18 2000
8316 Leslian F 12 2000
9578 Leslyann F 10 2000
12558 Leslei F 7 2000
12559 Lesleigh F 7 2000
18697 Leslie M 137 2000
22136 Lesley M 17 2000
23802 Lesly M 11 2000
29108 Leslee M 5 2000
29840 Leslie F 3610 2001
30128 Lesly F 801 2001
30280 Lesley F 509 2001
30977 Lesli F 166 2001
31796 Leslye F 83 2001
33908 Leslee F 30 2001
40367 Lesleigh F 9 2001
40368 Leslieann F 9 2001
44318 Leslyann F 6 2001
46575 Leslei F 5 2001
46576 Leslian F 5 2001
48845 Leslie M 125 2001
54977 Lesley M 9 2001
59331 Lesly M 5 2001
60100 Leslie F 3520 2002
...............
225151 Leslee F 30 2007
230792 Lesleigh F 11 2007
242592 Leslie M 82 2007
251229 Lesley M 7 2007
255312 Leslie F 2323 2008
255616 Lesly F 699 2008
256198 Lesley F 253 2008
256809 Lesli F 137 2008
257947 Leslye F 65 2008
260822 Leslee F 25 2008
269833 Lesleigh F 7 2008
277489 Leslie M 76 2008
289328 Lesley M 5 2008
290331 Leslie F 1975 2009
290673 Lesly F 598 2009
291307 Lesley F 222 2009
292364 Lesli F 90 2009
294585 Leslye F 34 2009
295620 Leslee F 26 2009
312190 Leslie M 76 2009
318337 Lesley M 10 2009
324970 Leslie F 1558 2010
325353 Lesly F 502 2010
325892 Lesley F 219 2010
327213 Lesli F 76 2010
329662 Leslye F 29 2010
331019 Leslee F 21 2010
343300 Lesleigh F 5 2010
347062 Leslie M 47 2010
356014 Lesley M 6 2010
\n", "

119 rows \u00d7 4 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 18, "text": [ " name sex n_births year\n", "89 Leslie F 3619 2000\n", "388 Lesly F 742 2000\n", "429 Lesley F 658 2000\n", "1313 Lesli F 145 2000\n", "2248 Leslye F 70 2000\n", "3618 Leslee F 36 2000\n", "6101 Leslieann F 18 2000\n", "8316 Leslian F 12 2000\n", "9578 Leslyann F 10 2000\n", "12558 Leslei F 7 2000\n", "12559 Lesleigh F 7 2000\n", "18697 Leslie M 137 2000\n", "22136 Lesley M 17 2000\n", "23802 Lesly M 11 2000\n", "29108 Leslee M 5 2000\n", "29840 Leslie F 3610 2001\n", "30128 Lesly F 801 2001\n", "30280 Lesley F 509 2001\n", "30977 Lesli F 166 2001\n", "31796 Leslye F 83 2001\n", "33908 Leslee F 30 2001\n", "40367 Lesleigh F 9 2001\n", "40368 Leslieann F 9 2001\n", "44318 Leslyann F 6 2001\n", "46575 Leslei F 5 2001\n", "46576 Leslian F 5 2001\n", "48845 Leslie M 125 2001\n", "54977 Lesley M 9 2001\n", "59331 Lesly M 5 2001\n", "60100 Leslie F 3520 2002\n", "... ... .. ... ...\n", "225151 Leslee F 30 2007\n", "230792 Lesleigh F 11 2007\n", "242592 Leslie M 82 2007\n", "251229 Lesley M 7 2007\n", "255312 Leslie F 2323 2008\n", "255616 Lesly F 699 2008\n", "256198 Lesley F 253 2008\n", "256809 Lesli F 137 2008\n", "257947 Leslye F 65 2008\n", "260822 Leslee F 25 2008\n", "269833 Lesleigh F 7 2008\n", "277489 Leslie M 76 2008\n", "289328 Lesley M 5 2008\n", "290331 Leslie F 1975 2009\n", "290673 Lesly F 598 2009\n", "291307 Lesley F 222 2009\n", "292364 Lesli F 90 2009\n", "294585 Leslye F 34 2009\n", "295620 Leslee F 26 2009\n", "312190 Leslie M 76 2009\n", "318337 Lesley M 10 2009\n", "324970 Leslie F 1558 2010\n", "325353 Lesly F 502 2010\n", "325892 Lesley F 219 2010\n", "327213 Lesli F 76 2010\n", "329662 Leslye F 29 2010\n", "331019 Leslee F 21 2010\n", "343300 Lesleigh F 5 2010\n", "347062 Leslie M 47 2010\n", "356014 Lesley M 6 2010\n", "\n", "[119 rows x 4 columns]" ] } ], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "lesleys.pivot_table('n_births', rows='year', \n", " cols='sex', aggfunc=sum)" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 35, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "/home/catherine/ana3/lib/python3.4/site-packages/pandas/util/decorators.py:53: FutureWarning: cols is deprecated, use columns instead\n", " warnings.warn(msg, FutureWarning)\n", "/home/catherine/ana3/lib/python3.4/site-packages/pandas/util/decorators.py:53: FutureWarning: rows is deprecated, use index instead\n", " warnings.warn(msg, FutureWarning)\n" ] }, { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sexFM
year
2000 5324 170
2001 5233 139
2002 4994 114
2003 5187 121
2004 4970 106
2005 4552 122
2006 4412 94
2007 4052 89
2008 3509 81
2009 2945 86
2010 2410 53
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 19, "text": [ "sex F M\n", "year \n", "2000 5324 170\n", "2001 5233 139\n", "2002 4994 114\n", "2003 5187 121\n", "2004 4970 106\n", "2005 4552 122\n", "2006 4412 94\n", "2007 4052 89\n", "2008 3509 81\n", "2009 2945 86\n", "2010 2410 53" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "gender = all_names.pivot_table('n_births', rows='name', \n", " cols='sex', aggfunc=sum)\n", "gender" ], "language": "python", "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sexFM
name
Aaban NaN 20
Aabid NaN 5
Aabriella 5 NaN
Aadam NaN 81
Aadan NaN 69
Aadarsh NaN 109
Aaden 5 2972
Aadesh NaN 10
Aadhav NaN 29
Aadhavan NaN 5
Aadhya 56 NaN
Aadi 5 444
Aadil NaN 167
Aadin NaN 85
Aadison 6 NaN
Aadit NaN 157
Aadith NaN 17
Aaditri 5 NaN
Aaditya NaN 303
Aadon NaN 61
Aadya 148 NaN
Aadyn 16 243
Aafreen 5 NaN
Aahan NaN 78
Aahana 181 NaN
Aahil NaN 147
Aahliyah 24 NaN
Aahna 26 NaN
Aahron NaN 5
Aaidan NaN 37
.........
Zyran NaN 10
Zyree 11 30
Zyreion NaN 5
Zyrek NaN 5
Zyrell NaN 56
Zyren NaN 37
Zyreon NaN 7
Zyrese NaN 5
Zyrhiana 6 NaN
Zyria 235 NaN
Zyriah 193 NaN
Zyrian NaN 10
Zyriana 17 NaN
Zyrianna 18 NaN
Zyrie 5 NaN
Zyriel 5 NaN
Zyrihanna 29 NaN
Zyrion NaN 45
Zyriyah 6 NaN
Zyron NaN 104
Zyrus NaN 28
Zysean NaN 5
Zyshaun NaN 29
Zyshawn NaN 96
Zyshon NaN 11
Zyshonne NaN 45
Zytavious NaN 43
Zyvion NaN 5
Zyyanna 6 NaN
Zzyzx NaN 5
\n", "

57008 rows \u00d7 2 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 20, "text": [ "sex F M\n", "name \n", "Aaban NaN 20\n", "Aabid NaN 5\n", "Aabriella 5 NaN\n", "Aadam NaN 81\n", "Aadan NaN 69\n", "Aadarsh NaN 109\n", "Aaden 5 2972\n", "Aadesh NaN 10\n", "Aadhav NaN 29\n", "Aadhavan NaN 5\n", "Aadhya 56 NaN\n", "Aadi 5 444\n", "Aadil NaN 167\n", "Aadin NaN 85\n", "Aadison 6 NaN\n", "Aadit NaN 157\n", "Aadith NaN 17\n", "Aaditri 5 NaN\n", "Aaditya NaN 303\n", "Aadon NaN 61\n", "Aadya 148 NaN\n", "Aadyn 16 243\n", "Aafreen 5 NaN\n", "Aahan NaN 78\n", "Aahana 181 NaN\n", "Aahil NaN 147\n", "Aahliyah 24 NaN\n", "Aahna 26 NaN\n", "Aahron NaN 5\n", "Aaidan NaN 37\n", "... ... ...\n", "Zyran NaN 10\n", "Zyree 11 30\n", "Zyreion NaN 5\n", "Zyrek NaN 5\n", "Zyrell NaN 56\n", "Zyren NaN 37\n", "Zyreon NaN 7\n", "Zyrese NaN 5\n", "Zyrhiana 6 NaN\n", "Zyria 235 NaN\n", "Zyriah 193 NaN\n", "Zyrian NaN 10\n", "Zyriana 17 NaN\n", "Zyrianna 18 NaN\n", "Zyrie 5 NaN\n", "Zyriel 5 NaN\n", "Zyrihanna 29 NaN\n", "Zyrion NaN 45\n", "Zyriyah 6 NaN\n", "Zyron NaN 104\n", "Zyrus NaN 28\n", "Zysean NaN 5\n", "Zyshaun NaN 29\n", "Zyshawn NaN 96\n", "Zyshon NaN 11\n", "Zyshonne NaN 45\n", "Zytavious NaN 43\n", "Zyvion NaN 5\n", "Zyyanna 6 NaN\n", "Zzyzx NaN 5\n", "\n", "[57008 rows x 2 columns]" ] } ], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "gender['total'] = gender.F + gender.M\n", "gender['ratio'] = gender.F / gender.total\n", "gender.head()" ], "language": "python", "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sexFMtotalratio
name
AabanNaN 20NaNNaN
AabidNaN 5NaNNaN
Aabriella 5NaNNaNNaN
AadamNaN 81NaNNaN
AadanNaN 69NaNNaN
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 21, "text": [ "sex F M total ratio\n", "name \n", "Aaban NaN 20 NaN NaN\n", "Aabid NaN 5 NaN NaN\n", "Aabriella 5 NaN NaN NaN\n", "Aadam NaN 81 NaN NaN\n", "Aadan NaN 69 NaN NaN" ] } ], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "gender['andro'] = -1 * (abs(0.5 - gender.ratio))\n", "gender.sort('andro', ascending=False)[\n", " gender.total > 10000].head()" ], "language": "python", "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "/home/catherine/ana3/lib/python3.4/site-packages/pandas/core/frame.py:1706: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", " \"DataFrame index.\", UserWarning)\n" ] }, { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sexFMtotalratioandro
name
Jessie 6075 5985 12060 0.503731-0.003731
Amari 7280 7571 14851 0.490203-0.009797
Peyton 32371 27542 59913 0.540300-0.040300
Justice 6332 7478 13810 0.458508-0.041492
Riley 50981 43165 94146 0.541510-0.041510
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 22, "text": [ "sex F M total ratio andro\n", "name \n", "Jessie 6075 5985 12060 0.503731 -0.003731\n", "Amari 7280 7571 14851 0.490203 -0.009797\n", "Peyton 32371 27542 59913 0.540300 -0.040300\n", "Justice 6332 7478 13810 0.458508 -0.041492\n", "Riley 50981 43165 94146 0.541510 -0.041510" ] } ], "prompt_number": 22 }, { "cell_type": "heading", "level": 4, "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Dropping duplicates" ] }, { "cell_type": "code", "collapsed": false, "input": [ "states = pd.read_csv('sample_data/states.csv')\n", "states" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 35, "slide_type": "subslide" }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idstatecapitol
0 1 Ohio Columbus
1 2 Illinois Springfield
2 3 Minnesota St. Paul
3 4 Ohio Columbus
4 5 Indiana Indianapolis
5 6 Michigan Lansing
6 7 Ohio Columbus
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 23, "text": [ " id state capitol\n", "0 1 Ohio Columbus\n", "1 2 Illinois Springfield\n", "2 3 Minnesota St. Paul\n", "3 4 Ohio Columbus\n", "4 5 Indiana Indianapolis\n", "5 6 Michigan Lansing\n", "6 7 Ohio Columbus" ] } ], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "states.drop_duplicates(['state','capitol'])" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 39 }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idstatecapitol
0 1 Ohio Columbus
1 2 Illinois Springfield
2 3 Minnesota St. Paul
4 5 Indiana Indianapolis
5 6 Michigan Lansing
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 24, "text": [ " id state capitol\n", "0 1 Ohio Columbus\n", "1 2 Illinois Springfield\n", "2 3 Minnesota St. Paul\n", "4 5 Indiana Indianapolis\n", "5 6 Michigan Lansing" ] } ], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "states.drop_duplicates(['state','capitol'],take_last=True)" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 40, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idstatecapitol
1 2 Illinois Springfield
2 3 Minnesota St. Paul
4 5 Indiana Indianapolis
5 6 Michigan Lansing
6 7 Ohio Columbus
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 25, "text": [ " id state capitol\n", "1 2 Illinois Springfield\n", "2 3 Minnesota St. Paul\n", "4 5 Indiana Indianapolis\n", "5 6 Michigan Lansing\n", "6 7 Ohio Columbus" ] } ], "prompt_number": 25 }, { "cell_type": "heading", "level": 3, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 40, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "PostgreSQL -> Pandas -> PostgreSQL" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%sql SELECT count(*) FROM yob2010" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 42 }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 rows affected.\n" ] }, { "html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", "
count
33838
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 26, "text": [ "[(33838,)]" ] } ], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "import sqlalchemy as sa\n", "db_engine = sa.create_engine('postgresql://:@/pgo')\n", "allpeople = pd.read_sql_table('yob2010',\n", " db_engine)\n", "xmen = allpeople[allpeople.name.str.startswith('X')]\n", "xmen.to_sql('xmen', db_engine)" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 43 }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "%sql SELECT * FROM xmen LIMIT 5" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 44, "slide_helper": "subslide_end" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "5 rows affected.\n" ] }, { "html": [ "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indexnamesexn_births
271XimenaF1203
988XiomaraF254
1404XochitlF162
1780XitlaliF115
2425XitlalyF77
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 28, "text": [ "[(271, 'Ximena', 'F', 1203),\n", " (988, 'Xiomara', 'F', 254),\n", " (1404, 'Xochitl', 'F', 162),\n", " (1780, 'Xitlali', 'F', 115),\n", " (2425, 'Xitlaly', 'F', 77)]" ] } ], "prompt_number": 28 }, { "cell_type": "heading", "level": 4, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 44, "slide_type": "subslide" }, "slideshow": { "slide_type": "slide" } }, "source": [ "%sql shortcut" ] }, { "cell_type": "code", "collapsed": false, "input": [ "chris = %sql SELECT * FROM yob2010 WHERE name LIKE 'Chris%'\n", "chris[:5]" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 46, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "76 rows affected.\n" ] }, { "metadata": {}, "output_type": "pyout", "prompt_number": 29, "text": [ "[('Christina', 'F', 1265),\n", " ('Christine', 'F', 425),\n", " ('Christiana', 'F', 218),\n", " ('Christian', 'F', 154),\n", " ('Christy', 'F', 124)]" ] } ], "prompt_number": 29 }, { "cell_type": "code", "collapsed": false, "input": [ "chrises = chris.DataFrame()\n", "chrises.head()" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 46, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesexn_births
0 Christina F 1265
1 Christine F 425
2 Christiana F 218
3 Christian F 154
4 Christy F 124
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 30, "text": [ " name sex n_births\n", "0 Christina F 1265\n", "1 Christine F 425\n", "2 Christiana F 218\n", "3 Christian F 154\n", "4 Christy F 124" ] } ], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "%config SqlMagic.autopandas = True" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 46, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "prompt_number": 31 }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 49 }, "slideshow": { "slide_type": "fragment" } }, "source": [ "*Special bonus*: `autopandas` makes biiiiiiiiig queries safer in `%sql`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "erics = %sql SELECT * FROM yob2010 WHERE name LIKE 'Eric%'\n", "erics.head()" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 50, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10 rows affected.\n" ] }, { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesexn_births
0 Erica F 734
1 Ericka F 144
2 Eric F 7
3 Eric M 4163
4 Erick M 1854
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 32, "text": [ " name sex n_births\n", "0 Erica F 734\n", "1 Ericka F 144\n", "2 Eric F 7\n", "3 Eric M 4163\n", "4 Erick M 1854" ] } ], "prompt_number": 32 }, { "cell_type": "code", "collapsed": false, "input": [ "%sql SELECT count(*) FROM erics" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 50, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(ProgrammingError) relation \"erics\" does not exist\n", "LINE 1: SELECT count(*) FROM erics\n", " ^\n", " 'SELECT count(*) FROM erics' {}\n" ] } ], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "%sql PERSIST erics" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 52 }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 34, "text": [ "'Persisted erics'" ] } ], "prompt_number": 34 }, { "cell_type": "code", "collapsed": false, "input": [ "%sql SELECT * FROM erics LIMIT 5" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 53, "slide_helper": "subslide_end" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "5 rows affected.\n" ] }, { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
indexnamesexn_births
0 0 Erica F 734
1 1 Ericka F 144
2 2 Eric F 7
3 3 Eric M 4163
4 4 Erick M 1854
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 35, "text": [ " index name sex n_births\n", "0 0 Erica F 734\n", "1 1 Ericka F 144\n", "2 2 Eric F 7\n", "3 3 Eric M 4163\n", "4 4 Erick M 1854" ] } ], "prompt_number": 35 }, { "cell_type": "heading", "level": 2, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 70, "slide_type": "subslide" }, "slideshow": { "slide_type": "slide" } }, "source": [ "[ddlgenerator](https://github.com/catherinedevlin/ddl-generator)" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 72, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "source": [ "A quick-and-dirty \\*-to-SQL converter\n", "-------------------------------------\n", "\n", " pip install ddlgenerator\n", " pip install beautifulsoup4" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "![with your own eyes](http://www.monografias.com/trabajos12/starwars/Image2142.jpg)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "cat sample_data/animals.csv" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 72, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "name,species,kg,notes\r\n", "Alfred,wart hog,22,loves turnips\r\n", "Gertrude,polar bear,312.7,deep thinker\r\n", "Emily,salamander,0.3,\r\n" ] } ], "prompt_number": 36 }, { "cell_type": "code", "collapsed": false, "input": [ "!ddlgenerator postgresql sample_data/animals.csv" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 74, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "CREATE TABLE animals (\r\n", "\tname VARCHAR(8) NOT NULL, \r\n", "\tspecies VARCHAR(10) NOT NULL, \r\n", "\tkg DECIMAL(4, 1) NOT NULL, \r\n", "\tnotes VARCHAR(13) NOT NULL\r\n", ");\r\n", "\r\n" ] } ], "prompt_number": 37 }, { "cell_type": "code", "collapsed": false, "input": [ "!ddlgenerator --inserts postgresql sample_data/animals.csv | psql pgo" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 74, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "CREATE TABLE\r\n", "INSERT 0 1\r\n", "INSERT 0 1\r\n", "INSERT 0 1\r\n" ] } ], "prompt_number": 38 }, { "cell_type": "code", "collapsed": false, "input": [ "%sql SELECT * FROM animals" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 76, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 rows affected.\n" ] }, { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namespecieskgnotes
0 Alfred wart hog 22.0 loves turnips
1 Gertrude polar bear 312.7 deep thinker
2 Emily salamander 0.3
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 39, "text": [ " name species kg notes\n", "0 Alfred wart hog 22.0 loves turnips\n", "1 Gertrude polar bear 312.7 deep thinker\n", "2 Emily salamander 0.3 " ] } ], "prompt_number": 39 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "[Wikipedia page with table](http://en.wikipedia.org/wiki/List_of_cities_in_Ohio)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "!ddlgenerator postgresql --inserts http://en.wikipedia.org/wiki/List_of_cities_in_Ohio | psql pgo > /dev/null" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 76, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "outputs": [], "prompt_number": 40 }, { "cell_type": "code", "collapsed": false, "input": [ "%sql SELECT * FROM list_of_cities_in_ohio LIMIT 5;" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 76, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "5 rows affected.\n" ] }, { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
citypopulationcounty
0 Akron 199,110 Summit County
1 Alliance 22,322 Stark County and Mahoning County
2 Amherst 12,021 Lorain County
3 Ashland 20,362 Ashland County
4 Ashtabula 19,124 Ashtabula County
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 41, "text": [ " city population county\n", "0 Akron 199,110 Summit County\n", "1 Alliance 22,322 Stark County and Mahoning County\n", "2 Amherst 12,021 Lorain County\n", "3 Ashland 20,362 Ashland County\n", "4 Ashtabula 19,124 Ashtabula County" ] } ], "prompt_number": 41 }, { "cell_type": "code", "collapsed": false, "input": [ "!cat sample_data/knights.yaml" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 76, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "-\r\n", " name: Lancelot\r\n", " dob: 9 jan 471\r\n", " kg: 82\r\n", " brave: y\r\n", "- \r\n", " name: Gawain\r\n", " kg: 69.2\r\n", " brave: y\r\n", "- \r\n", " name: Robin\r\n", " dob: 9 jan 471\r\n", " brave: n\r\n", " followers:\r\n", " - \r\n", " name: Minstrel 1\r\n", " instrument: harp\r\n", " - \r\n", " name: Minstrel 2\r\n", " instrument: lute\r\n", " -\r\n", " name: Minstrel 3\r\n", " instrument: pipes\r\n", "- \r\n", " name: Reepacheep\r\n", " kg: 0.0691\r\n", " brave: y\r\n" ] } ], "prompt_number": 42 }, { "cell_type": "code", "collapsed": false, "input": [ "!ddlgenerator postgresql sample_data/knights.yaml" ], "language": "python", "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "WARNING:root:Primary key knights.knights_id not requested, but nesting demands it\r\n", "CREATE TABLE knights (\r\n", "\tname VARCHAR(10) NOT NULL, \r\n", "\tdob TIMESTAMP WITHOUT TIME ZONE, \r\n", "\tkg DECIMAL(6, 4), \r\n", "\tbrave BOOLEAN NOT NULL, \r\n", "\tknights_id SERIAL NOT NULL, \r\n", "\tPRIMARY KEY (knights_id)\r\n", ");\r\n", "\r\n", "\r\n", "CREATE TABLE followers (\r\n", "\tname VARCHAR(10) NOT NULL, \r\n", "\tinstrument VARCHAR(5) NOT NULL, \r\n", "\tknights_id INTEGER NOT NULL, \r\n", "\tFOREIGN KEY(knights_id) REFERENCES knights (knights_id)\r\n", ");\r\n", "\r\n" ] } ], "prompt_number": 43 }, { "cell_type": "code", "collapsed": false, "input": [ "!ddlgenerator --inserts postgresql sample_data/knights.yaml | psql pgo" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 76, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "WARNING:root:Primary key knights.knights_id not requested, but nesting demands it\r\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "CREATE TABLE\r\n", "CREATE TABLE\r\n", "INSERT 0 1\r\n", "INSERT 0 1\r\n", "INSERT 0 1\r\n", "INSERT 0 1\r\n", "INSERT 0 1\r\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "INSERT 0 1\r\n", "INSERT 0 1\r\n" ] } ], "prompt_number": 44 }, { "cell_type": "code", "collapsed": false, "input": [ "%sql select * from knights" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 76, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "4 rows affected.\n" ] }, { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namedobkgbraveknights_id
0 Lancelot 0471-01-09 00:00:00 82.0000 True 1
1 Gawain None 69.2000 True 2
2 Robin 0471-01-09 00:00:00 None False 3
3 Reepacheep None 0.0691 True 4
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 45, "text": [ " name dob kg brave knights_id\n", "0 Lancelot 0471-01-09 00:00:00 82.0000 True 1\n", "1 Gawain None 69.2000 True 2\n", "2 Robin 0471-01-09 00:00:00 None False 3\n", "3 Reepacheep None 0.0691 True 4" ] } ], "prompt_number": 45 }, { "cell_type": "code", "collapsed": false, "input": [ "%sql select * from followers" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 83, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "3 rows affected.\n" ] }, { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nameinstrumentknights_id
0 Minstrel 1 harp 3
1 Minstrel 2 lute 3
2 Minstrel 3 pipes 3
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 46, "text": [ " name instrument knights_id\n", "0 Minstrel 1 harp 3\n", "1 Minstrel 2 lute 3\n", "2 Minstrel 3 pipes 3" ] } ], "prompt_number": 46 }, { "cell_type": "heading", "level": 1, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 83, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "subslide" } }, "source": [ "Serving data" ] }, { "cell_type": "heading", "level": 2, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 83, "slide_type": "subslide" }, "slideshow": { "slide_type": "slide" } }, "source": [ "[Sandman](sandman.io)" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 86, "slide_helper": "subslide_end" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "fragment" } }, "source": [ " sandmanctl postgresql://username:password@server/dbname\n", "\n", "- [Web admin tool](http://localhost:8080/admin/)\n", "- REST server (HATEOAS)\n", " - [API Browser](http://localhost:8080)\n", " \n", " curl http://localhost:8080/knights/Reepacheep" ] }, { "cell_type": "heading", "level": 2, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 86, "slide_type": "subslide" }, "slideshow": { "slide_type": "slide" } }, "source": [ "[HTSQL](htsql.org)" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 88, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "source": [ "- RESTful data server\n", "- Compact, rich query language\n", "\n", " htsql-ctl serve pgsql://:@/pgo" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 88, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "subslide" } }, "source": [ "/knights\n", "\n", "/knights?brave=true\n", "\n", "1\">/knights?brave=true&kg>1\n", "\n", "/knights{*,/followers}\n", "\n", "/knights{*,/followers}/:json\n", "\n", "/knights[1]/:json`\n" ] }, { "cell_type": "heading", "level": 1, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 88, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "slide" } }, "source": [ "Visualizing data" ] }, { "cell_type": "heading", "level": 2, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 88, "slide_type": "subslide" }, "slideshow": { "slide_type": "slide" } }, "source": [ "matplotlib in Pandas" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib\n", "matplotlib.use('nbagg')" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 88, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "skip" } }, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "/home/catherine/ana3/lib/python3.4/site-packages/matplotlib/__init__.py:1256: UserWarning: This call to matplotlib.use() has no effect\n", "because the backend has already been chosen;\n", "matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n", "or matplotlib.backends is imported for the first time.\n", "\n", " warnings.warn(_use_error_msg)\n" ] } ], "prompt_number": 47 }, { "cell_type": "code", "collapsed": false, "input": [ "lesleys.head()" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 88, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesexn_birthsyear
89 Leslie F 3619 2000
388 Lesly F 742 2000
429 Lesley F 658 2000
1313 Lesli F 145 2000
2248 Leslye F 70 2000
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 48, "text": [ " name sex n_births year\n", "89 Leslie F 3619 2000\n", "388 Lesly F 742 2000\n", "429 Lesley F 658 2000\n", "1313 Lesli F 145 2000\n", "2248 Leslye F 70 2000" ] } ], "prompt_number": 48 }, { "cell_type": "code", "collapsed": false, "input": [ "lesley_summary = lesleys.pivot_table('n_births', \n", " rows='year', \n", " cols='sex', \n", " aggfunc=sum)\n", "lesley_summary" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 94, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sexFM
year
2000 5324 170
2001 5233 139
2002 4994 114
2003 5187 121
2004 4970 106
2005 4552 122
2006 4412 94
2007 4052 89
2008 3509 81
2009 2945 86
2010 2410 53
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 49, "text": [ "sex F M\n", "year \n", "2000 5324 170\n", "2001 5233 139\n", "2002 4994 114\n", "2003 5187 121\n", "2004 4970 106\n", "2005 4552 122\n", "2006 4412 94\n", "2007 4052 89\n", "2008 3509 81\n", "2009 2945 86\n", "2010 2410 53" ] } ], "prompt_number": 49 }, { "cell_type": "code", "collapsed": false, "input": [ "lesley_summary.plot()" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 94, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 50, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 50 }, { "cell_type": "code", "collapsed": false, "input": [ "lesleys.pivot_table('n_births', rows='name', cols='sex', \n", " aggfunc='sum')" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 94, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sexFM
name
Leslee 324 5
Leslei 31 NaN
Lesleigh 61 NaN
Lesley 4335 106
Lesli 1495 NaN
Leslian 17 NaN
Leslie 32581 1014
Leslieann 62 NaN
Leslly 5 NaN
Lesly 7953 50
Leslyann 16 NaN
Leslye 708 NaN
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 51, "text": [ "sex F M\n", "name \n", "Leslee 324 5\n", "Leslei 31 NaN\n", "Lesleigh 61 NaN\n", "Lesley 4335 106\n", "Lesli 1495 NaN\n", "Leslian 17 NaN\n", "Leslie 32581 1014\n", "Leslieann 62 NaN\n", "Leslly 5 NaN\n", "Lesly 7953 50\n", "Leslyann 16 NaN\n", "Leslye 708 NaN" ] } ], "prompt_number": 51 }, { "cell_type": "code", "collapsed": false, "input": [ "lesleys.pivot_table('n_births', rows='name', cols='sex', \n", " aggfunc='sum' \n", " ).plot(kind='barh', stacked=True)" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 94, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "slide" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 52, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n/wNUAERtmdzU+wAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 52 }, { "cell_type": "code", "collapsed": false, "input": [ "yob2000.head()" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 94, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namesexn_births
0 Emily F 25949
1 Hannah F 23066
2 Madison F 19965
3 Ashley F 17991
4 Sarah F 17677
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 53, "text": [ " name sex n_births\n", "0 Emily F 25949\n", "1 Hannah F 23066\n", "2 Madison F 19965\n", "3 Ashley F 17991\n", "4 Sarah F 17677" ] } ], "prompt_number": 53 }, { "cell_type": "code", "collapsed": false, "input": [ "yob2000[yob2000.n_births > 1000].hist(bins=10)" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 94, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 54, "text": [ "array([[]], dtype=object)" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 54 }, { "cell_type": "code", "collapsed": false, "input": [ "gsum = gender[(gender.total > 10000) & (gender.andro > -0.3)] \\\n", " .sort('andro', ascending=False)\n", "gsum.head()" ], "language": "python", "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sexFMtotalratioandro
name
Jessie 6075 5985 12060 0.503731-0.003731
Amari 7280 7571 14851 0.490203-0.009797
Peyton 32371 27542 59913 0.540300-0.040300
Justice 6332 7478 13810 0.458508-0.041492
Riley 50981 43165 94146 0.541510-0.041510
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 55, "text": [ "sex F M total ratio andro\n", "name \n", "Jessie 6075 5985 12060 0.503731 -0.003731\n", "Amari 7280 7571 14851 0.490203 -0.009797\n", "Peyton 32371 27542 59913 0.540300 -0.040300\n", "Justice 6332 7478 13810 0.458508 -0.041492\n", "Riley 50981 43165 94146 0.541510 -0.041510" ] } ], "prompt_number": 55 }, { "cell_type": "code", "collapsed": false, "input": [ "gsum['len'] = gsum.index.map(len)\n", "gsum.plot(kind='scatter', x='len', y='ratio', \n", " s=gsum.total/100, alpha=0.3)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 56, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 56 }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "[More matplotlib / Pandas examples](http://pandas.pydata.org/pandas-docs/stable/visualization.html)" ] }, { "cell_type": "heading", "level": 2, "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "mpld3" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import mpld3\n", "mpld3.enable_notebook()\n", "gsum.plot(kind='scatter', x='len', y='ratio', \n", " s=gsum.total/100, alpha=0.3)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 57, "text": [ "" ] }, { "html": [ "\n", "\n", "\n", "\n", "
\n", "" ], "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 57 }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as plt\n", "fig, ax = plt.subplots()\n", "points = ax.scatter(gsum.len, gsum.ratio,\n", " s=gsum.total/100, alpha=0.3)\n", "tooltip = mpld3.plugins.PointLabelTooltip(points, list(gsum.index))\n", "mpld3.plugins.connect(fig, tooltip)" ], "language": "python", "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "html": [ "\n", "\n", "\n", "\n", "
\n", "" ], "metadata": {}, "output_type": "display_data", "png": "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\nroD8H3pP3ZNkkg4hAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 58 }, { "cell_type": "heading", "level": 2, "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 94, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "slide" } }, "source": [ "[Bokeh](http://bokeh.pydata.org/)" ] }, { "cell_type": "code", "collapsed": true, "input": [ "yob2000_common = yob2000[yob2000.n_births > 5000]\n", "hacknied_gender_color_map = {'F': 'red', 'M': 'blue'}\n", "hgcm = hacknied_gender_color_map" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 94, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "prompt_number": 59 }, { "cell_type": "code", "collapsed": false, "input": [ "yob2000_common.sex.map(hgcm)" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 102, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 60, "text": [ "0 red\n", "1 red\n", "2 red\n", "3 red\n", "4 red\n", "5 red\n", "6 red\n", "7 red\n", "8 red\n", "9 red\n", "10 red\n", "11 red\n", "12 red\n", "13 red\n", "14 red\n", "...\n", "17715 blue\n", "17716 blue\n", "17717 blue\n", "17718 blue\n", "17719 blue\n", "17720 blue\n", "17721 blue\n", "17722 blue\n", "17723 blue\n", "17724 blue\n", "17725 blue\n", "17726 blue\n", "17727 blue\n", "17728 blue\n", "17729 blue\n", "Name: sex, Length: 146, dtype: object" ] } ], "prompt_number": 60 }, { "cell_type": "code", "collapsed": false, "input": [ "import bokeh.plotting as bp\n", "bp.scatter(yob2000_common.name.str.len(), yob2000_common.n_births, \n", " color=yob2000_common.sex.map(hgcm), \n", " fill_alpha=0.2, size=10)" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 102, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 61, "text": [ "" ] } ], "prompt_number": 61 }, { "cell_type": "code", "collapsed": false, "input": [ "bp.output_notebook()" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 104 }, "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "html": [ " \n", " \n", " \n", " \n", "
\n", " \n", " BokehJS successfully loaded.\n", "
" ], "metadata": {}, "output_type": "display_data" } ], "prompt_number": 62 }, { "cell_type": "code", "collapsed": false, "input": [ "bp.curplot().title = \"Name length vs. number of births\"\n", "bp.show()" ], "language": "python", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 105, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "html": [ "\n", "
\n", "\n" ], "metadata": {}, "output_type": "display_data" } ], "prompt_number": 63 }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 105, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "Madly advanced Bokeh examples...\n", "--------------------------------\n", "\n", "[Periodic Table](http://nbviewer.ipython.org/github/ContinuumIO/bokeh-notebooks/blob/master/tutorial/solution/advanced/02-periodic-table.ipynb)\n", "\n", "[Annular chart](http://nbviewer.ipython.org/github/ContinuumIO/bokeh-notebooks/blob/master/gallery/annular.ipynb)" ] }, { "cell_type": "heading", "level": 2, "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Visualization Honorable Mentions" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "* [NodeBox OpenGL](http://www.cityinabottle.org/nodebox/)\n", "* [HTRAF](http://htraf.htsql.org/htraf/index.html)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "- IPython Notebook\n", "- Get & Manipulate\n", " - Pandas\n", " - ddlgenerator\n", "- Serve\n", " - sandman\n", " - HTSQL\n", "- Visualize\n", " - matplotlib\n", " - mpld3\n", " - Bokeh" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Catherine Devlin\n", "\n", "Postgres Open 2014\n", "\n", "https://github.com/catherinedevlin/pgopen2014-data-science\n", "\n", "http://tinyurl.com/frictionless-data-science" ] } ], "metadata": {} } ] }