{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Pandas and the Data Ecosystem" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "with Some Things I Learned from PyData" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Today I'm assuming you're familiar with Python and Pandas. I want to talk about some of the high level things in the SciPy ecosystem." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.display import YouTubeVideo" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "YouTubeVideo(\"RrPZza_vZ3w\")" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", " \n", " " ], "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [ "" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "YouTubeVideo(\"p8hle-ni-DM\")" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", " \n", " " ], "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ "" ] } ], "prompt_number": 3 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Anaconda - you should be using it!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.core.display import HTML\n", "HTML('')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Some conda commands**\n", "\n", "conda update conda\n", "\n", "conda create -n demo python pip\n", "\n", "source activate demo\n", "\n", "conda info\n", "\n", "conda info -e\n", "\n", "Conda is also used for preparing packages. It is a full replacement for virtualenv and fills in the gaps where pip fails, like with the scipy stack." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "NumPy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numpy is the basis for the scipy stack. Let's take a look at some of the features." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.core.display import Image \n", "Image(filename='stack.png') " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "png": "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\n+kd3JEACJNAqgU60R6nCW6uJoTsSIAESaIdAnMDXiYaynXTQLQmQQO8TiGuX4tqxdom0JLzFRbLd\nyNA9CZBA/QmU2T6U6Xf9yTMFJEACnSRQZfvUkvDWSTgMmwRIgARIgARIgAT6mQCFt37OfaadBEiA\nBEiABEigdgRyC29VDgvWjiYjTAIkYAmwnWBBIAESIIHyCOQW3sqLCn0mARIggXgCFAjj2fALCZBA\ndxCoqp2i8NYd+c1YkAAJkAAJkAAJkEAmAhTeMmGiJRIgARIgARIgARLoDgIU3rojHxgLEiABEiAB\nEiABEshEgMJbJky0RAIkQAIkQAIkQALdQWBgd0Sj92Lx1VdfmZdfftk899xz5oUXXjBTTjmlmW++\n+cz8889v5pxzTjPppJP2XqKZIhIggdIIsE0pDS09JoH6EZCdEYlGUhT4f4mW+TH473//G2y++ebB\nwIEDG7j5DKeeeupg//33D1555ZXKiA0fPjwYMmSI/TvllFOawt11113d9zFjxjR9z/oiLZys/tBe\n/Qn4ZR73eU277vOG1632u7VN6VZe/R6vCy64IJhlllns3//8z/+UjmPEiBHut+OEE04oPbw6BFBF\n28VpU6FchEGv+LDDDjOLL764ufTSSw2e48zHH39sfve739lRuJ/97Gfm66+/jrNa2HuMAj722GP2\n74033mjyF6OD+v2jjz5q+p71RVo4UvHMhAkT3F8Vac8ad9ojgW4iUFab0qk62KlwuylPq4jLp59+\nat58803798EHH5Qe5Kuvvup+O1577bXSw2MA3xLgtGlBJeHoo482I0eOdL7hMNollljCzDPPPGau\nueYyb7/9tnn66aftNOrnn39u7X355Zdm1KhRRkbpzGmnnebc9vLNJ598YmaaaSaXRDBZZJFF3DNv\nSIAEviVQVpvSqTrYqXBZnkigFwlQeCsgV++8807z61//2vm05pprmpNPPtkstdRS7p3efPPNN+bs\ns882Bx54oJk4caJ9ffrpp9sRO4zClWUwIggBEmbeeee11zL+VRVOGXGnnyTQLQTq0KZ0CyvGgwT6\nkQCFtwJyfd9993VTn8stt5y58cYbzWSTTRbp8ySTTGL22msvAwFv3XXXtZsaYPGQQw6x7zFiV4Y5\n7rjjyvC2yc+qwmkKmC9IoIcI1KFN6SHcTAoJ1I4A17y1mWVYX4C1YmpOPfXUWMFN7eCKqcLjjz/e\n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\nuglLVJqvv/76YMiQIQ1/0hluOdr77bdfg1/w+6KLLmrZv253OGLECJfeE044oWuimxav4cOHu3if\ncsopTfGWgZFglllmsX/PP/980/e8L6LKXl4/0uzXcuTt6KOPNiNHjhQ+35oBAwaYJZZYwswzzzxm\nrrnmMm+//bZ5+umn7TTq559/bi2JwGdGjRplBg4caE477TR1WsvruHHjzBZbbGHA4aijjqplGhjp\n7iTAstWd+cJYFUMAsx2PPfZYg2ePP/64+e1vf2tnNxo+pDx88skn5s9//rOZOHFig81333234bmM\nB/lhN++8847zerrppqtkedCrr77q+L322msu/LJusqYzLV5YVqX5/sYbbzRF96233jKab19//XXT\n9258UTvh7c477zS//vWvHcs111zTnHzyyWappZZy7/Tmm2++MWeffbY58MADXQU7/fTT7dTjz372\nM7VW+BVTmxAgYeadd157Tfq3zTbbmEMOOSTSCtKABuell16y08OYIlZz3HHHmZ/85CdmmWWW0Ve8\nkkADAZatBhx8IIEmAhAQZLTM/PKXv2z6lvTi2muvdb8rSfbK+AbBcaaZZnJeY7BikUUWcc+9ctMv\n6Wwlv2onvO27775GJePlllvO3HjjjUamRCPTjrViMlVqIOCtu+66dlMDLEJQwnuM2JVhIFTlMTPO\nOKMZNmxYqhOsn0MPUaZirV2s89t7773Nfffdl+qWFvqTAMtWf+Y7U52PANY+5hXeIPDR1INA3gGV\nOqSqVqpCPv30Uzf0CbinnnpqrODmw0eP5Pjjj3evPvzwQ/Pf//7XPdfpBhs0MJqiZuzYseaLL77Q\nR15JoGUCLFsto6PDGhKYdtppzVRTTWVj/uCDD+b6Tfj444/NddddZ91iKQ46STTdSwADKv/+97/t\nX5mzblUSqJXwhjlrHXXDaNuyyy6bmRXWiE0xxRTO/sMPP+zuk24wpP7ss8+aSy+91PzrX/8yr7zy\nisFUZifNqquu6oLH6NszzzzjnnlDAu0QaKVsoQxi5zfqx0MPPWSwpqSoOoIfSdRVTJ+0Y+B+/Pjx\nrv1ox68i04v2DB3Jm2++2aAjhg4qTTUE8HuAZSdqMPqW1Vx99dUur374wx+aQYMGZXVKeyRQCIFa\nCW/+aBkaUIygZTWoqD/96U8N1CjgL+3HAD8YP/rRj2ylxMgdhL811ljDLmqVXSl2+jLOD2wkgFv8\n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\nJoYESIAESIAESIAEKiDQjhyVe+StlcDakS4r4McgSIAESIAESIAESKAQAnnkJLWbV07KLbxlSVne\nSGTxk3ZIgARIgARIgARIoNsJhGUgFdCKjPcACSTI6mFaBHJ4lTVI2iMBEiABEiABEiCB2hMoUobK\nLLwlBUqhrfZligkgARIgARIgARKogEAR8lTLGxY0fRTclASvJEACJEACJEACJJBMoAi5KZPwFicl\nFhGB5CTyKwmQAAmQAAmQAAn0FoE4+SlO3gqnPpPwFnbEZxIgARIgARIgARIggc4QSBXe4qTAOKmx\nM8lgqCRAAiRAAiRAAiRQHwJxclSc3OWnLFV48y3rfVyA+p1XEiABEiABEiABEiCBZAKtylMtCW/J\nUeFXEiABEiABEiABEiCBsghQeCuLLP0lARIgARIgARIggRIIUHgrASq9JAESIAESIAESIIGyCFB4\nK4ss/SUBEiABEiABEiCBEgjkFt5aXVxXQtzpJQmQAAmQAAmQAAnUmkArclVu4a3WhBh5EiABEiAB\nEiABEqg5AQpvNc9ARp8ESIAESIAESKC/CFB466/8ZmpJgARIgARIgARqToDCW80zkNEnARIgARIg\nARLoLwIU3vorv5laEiABEiABEiCBmhOg8FbzDGT0SYAESIAESIAE+osAhbf+ym+mlgRIgARIgARI\noOYEKLzVPAMZfRIgARIgARIggf4iQOGtv/KbqSUBEiABEiABEqg5AQpvNc9ARp8ESIAESIAESKC/\nCFB466/8ZmpJgARIgARIgARqToDCW80zkNEnARIgARIgARLoLwIU3vorv5naPiFw//33m6FDh7q/\npZZayowbNy5X6t977z3nHn6NHTs2l3taJgESIAESKIfAwHK8pa8kQAKdJPDxxx+bxx57rCEK++yz\nj7nqqqsa3iU9fPXVVw1+TJw4Mck6v5EACZAACVREgCNvFYFmMCTQaQJXX321ueyyyzodDYZPAiRA\nAiTQJgEKb20CpHMSqBOB/fbbz3z00Ud1ijLjSgIkQAIkECJA4S0EhI8k0MsEXn31VXP44Yf3chKZ\nNhIgARLoeQIU3no+i5lAEjBmzTXXdBhOP/108+CDD7rnrDdBEGS1SnskQAIkQAIlEqDwViJcek0C\n3ULg97//vRk0aJCNzjfffGP23HNP8/XXX3dL9DLF47PPPjNPPPGEeeSRRww2ZCQZpA0bNt56660k\na5m+wY97773X+lc3ZpkSSEskQAK1I0DhrXZZxgiTQH4Cs846qznxxBOdQ6j9OO2009xzKze77rqr\nGTJkiP07++yzU73YaaednP2LL7440v7+++/v7JxzzjnWDgS2rbfe2kw11VRmiSWWMEsuuaSZZppp\nzFprrWWgEsU3o0aNMj/60Y+soAr1JrPMMouZf/75zbbbbpuoKmWzzTaz7uB2/Pjx1ssLL7zQLL30\n0taPlVZayapNmXbaac1qq61mbr31Vj9Yd/+nP/3JxR/hT5gwwX2Lu/nwww/NsGHDnLvzzz8/zirf\nkwAJkMC3BGQqJNGILcyVuL9Ey/xIAiTQFQREuHB1FvVXRo8CGXELVl11Vfd+6qmnDl555ZXY+MKN\nX/fHjBnTYHf11Vd330eMGNHwLephlVVWcfZFyIqyEmy66abOzkknnRQgTMTTj4d/P+WUUwaPPvpo\nICNiwb777htrD24WXHDB4LXXXosMd/rpp3dun3nmmeDggw92z354ej/JJJMEsnYwEHUqDf49/fTT\nDe5EmGv4HvVw3nnnOTfwV9YlRlnjOxIggR4moG2LXtOSypE3IUVDAv1AYMCAAQYjZJNPPrlNLqYe\nsfu0W82dd95p1l9/fTtFipE2rNvbcsstzQILLOCi/Omnn5otttjCbLPNNm4kcbrppjNrrLGGEeHS\nDBz4nSrL559/3qyzzjoG08ZJ5sADDzS/+c1vrJXBgwebPfbYw0BH3qKLLuqcwY/jjjvOvncv5WaR\nRRYxyy67rHt1ySWXuPu4G38UEqOJs88+e5xVvicBEiABS4DCGwsCCfQRAQggv/rVr1yKL7/8cnPl\nlVe65266ueKKK8wnn3xidtllFyMjhOa2224zF110kYEQdtBBB7moPvvsswYC0KSTTmp30r7++uvm\n9ttvN3fccYd58803G+w+/vjj5p577nFuo26uueYa69fo0aPtOrezzjrLCoZPPfWUeemll8wKK6zg\nnGGaNKwMeYcddnDfEWecVBFnoLblxhtvdJ99t+4lb0iABEggRIDCWwgIH0mg1wkceuihZrHFFnPJ\nlOnG1A0AznLFN1tttZWBEIW1Zr454YQTzMwzz+y/MsOHDzcyfWummGIK916mQw3szjfffO4dhLo0\ng/WBEBoxWumbeeaZx1xwwQVu8wc2MGCkzjcYBYQgCfPll18aCKFxBoqTP//8c/tZpoAN1t7RkAAJ\n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\n", "prompt_number": 5, "text": [ "" ] } ], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "raw", "metadata": {}, "source": [ "The basic datastructure in numpy is the ndarray, an N dimensional array. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = np.array([[1, 2, 3], \n", " [4, 5, 6],\n", " [7, 8, 9]])\n", "\n", "I = np.eye(3)\n", "z = np.zeros((3,3))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "print \"x = \\n\", x, '\\n\\nI = \\n', I, '\\n\\n z = \\n', z" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "x = \n", "[[1 2 3]\n", " [4 5 6]\n", " [7 8 9]] \n", "\n", "I = \n", "[[ 1. 0. 0.]\n", " [ 0. 1. 0.]\n", " [ 0. 0. 1.]] \n", "\n", " z = \n", "[[ 0. 0. 0.]\n", " [ 0. 0. 0.]\n", " [ 0. 0. 0.]]\n" ] } ], "prompt_number": 8 }, { "cell_type": "raw", "metadata": {}, "source": [ "In a lot of ways, the ndarray can be treated like a list, but there are some interesting differences. " ] }, { "cell_type": "raw", "metadata": {}, "source": [ "You can make an ndarray from a list, but an ndarray can only have one type of data." ] }, { "cell_type": "code", "collapsed": false, "input": [ "integer_list = [1, 2, 3]\n", "integer_array = np.array(integer_list)\n", "print integer_array\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1 2 3]\n" ] } ], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "my_list = [1, 1.0, None]\n", "print my_list\n", "my_list[-1] = \"one\"\n", "print my_list" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[1, 1.0, None]\n", "[1, 1.0, 'one']\n" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "my_array = np.array([1, 2, 3])\n", "print my_array\n", "my_array[-1] = \"three\"" ], "language": "python", "metadata": {}, "outputs": [ { "ename": "ValueError", "evalue": "invalid literal for long() with base 10: 'three'", "output_type": "pyerr", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mmy_array\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m3\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mprint\u001b[0m \u001b[0mmy_array\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mmy_array\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"three\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mValueError\u001b[0m: invalid literal for long() with base 10: 'three'" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "[1 2 3]\n" ] } ], "prompt_number": 11 }, { "cell_type": "raw", "metadata": {}, "source": [ "The other interesting difference is that the ndarray supports \"fancy indexing\"!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print \"x = \\n\", x\n", "y = x[x > 3]\n", "print \"y = \\n\", y" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "x = \n", "[[1 2 3]\n", " [4 5 6]\n", " [7 8 9]]\n", "y = \n", "[4 5 6 7 8 9]\n" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "x[1,:]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "array([4, 5, 6])" ] } ], "prompt_number": 13 }, { "cell_type": "raw", "metadata": {}, "source": [ "Many of the functions that operate on ndarrays are written in C or Fortran, which makes them very fast. One common type of function is the ufunc - Universal Function. This class of functions operate elementwise on the array." ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.add(x,x)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ "array([[ 2, 4, 6],\n", " [ 8, 10, 12],\n", " [14, 16, 18]])" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "np.add(x,1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 15, "text": [ "array([[ 2, 3, 4],\n", " [ 5, 6, 7],\n", " [ 8, 9, 10]])" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "np.log(x)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ "array([[ 0. , 0.69314718, 1.09861229],\n", " [ 1.38629436, 1.60943791, 1.79175947],\n", " [ 1.94591015, 2.07944154, 2.19722458]])" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "np.greater(x, 3)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 17, "text": [ "array([[False, False, False],\n", " [ True, True, True],\n", " [ True, True, True]], dtype=bool)" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numpy also provides a Matrix data structure. It's mostly there to make Matlab users feel more at home. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = np.matrix([[1, 2, 3],\n", " [4, 5, 6],\n", " [7, 8, 9]])\n", "x" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 18, "text": [ "matrix([[1, 2, 3],\n", " [4, 5, 6],\n", " [7, 8, 9]])" ] } ], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "x * x" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 19, "text": [ "matrix([[ 30, 36, 42],\n", " [ 66, 81, 96],\n", " [102, 126, 150]])" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "y = np.array([[1, 2, 3],\n", " [4, 5, 6],\n", " [7, 8, 9]])\n", "y * y" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 20, "text": [ "array([[ 1, 4, 9],\n", " [16, 25, 36],\n", " [49, 64, 81]])" ] } ], "prompt_number": 20 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "SciPy" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "SciPy is the core library for scientific computing. It has modules for:\n", " \n", " Integration (scipy.integrate)\n", "\n", " Optimization (scipy.optimize)\n", "\n", " Fourier Transforms (scipy.fftpack)\n", "\n", " Linear Algebra (scipy.linalg)\n", "\n", " Spatial data structures and algorithms (scipy.spatial)\n", "\n", " Statistics (scipy.stats)\n", "\n", "And more!\n", "\n", "\n", "** Linear Algebra **\n", "\n", "Scipy and Numpy both have the same set of linear algebra functions. They are mostly identical in name, function and performance. Numpy does contain some additional functions not exposed by SciPy." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "from scipy import linalg as LA\n", "\n", "#Solve Ax = b\n", "A = np.random.rand(5,5)\n", "b = np.random.rand(5)\n", "\n", "x = LA.solve(A,b)\n", "print A\n", "print x\n", "print b" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[ 0.92922464 0.49781215 0.01937578 0.62212312 0.35897636]\n", " [ 0.96401938 0.80590361 0.91703878 0.79958259 0.36575606]\n", " [ 0.18171917 0.97812798 0.61268685 0.07005332 0.24989442]\n", " [ 0.75688208 0.31959706 0.49975434 0.84763035 0.78576249]\n", " [ 0.54993672 0.0328287 0.48166429 0.73207162 0.57560584]]\n", "[-20.4381976 10.82454188 -9.06526981 29.23856419 -10.32956975]\n", "[ 0.70318052 0.30805896 0.78656003 0.1266843 0.20818588]\n" ] } ], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "# Find eigenvalues of A\n", "e = LA.eig(A)\n", "print e" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(array([ 2.80077761+0.j, -0.40934814+0.j, -0.01012884+0.j, 0.85934335+0.j,\n", " 0.53040732+0.j]), array([[ 0.39087844, 0.32950893, 0.51420274, -0.52548141, -0.77733774],\n", " [ 0.60909269, -0.57222447, -0.25281505, 0.32953648, -0.00487729],\n", " [ 0.35910487, 0.60007381, 0.21969001, 0.7588856 , 0.43043274],\n", " [ 0.48035397, -0.00928752, -0.73993232, -0.16311976, 0.27844853],\n", " [ 0.34135596, -0.4514512 , 0.27552959, -0.11295835, 0.36457691]]))\n" ] } ], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "# QR Decomposition\n", "Q, R = LA.qr(A)\n", "print Q\n", "print R" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[ 0.56539143 -0.08272076 -0.78802579 0.02830417 -0.22738521]\n", " [ 0.58656246 0.21663769 0.33182691 -0.69157816 0.14360758]\n", " [ 0.11056795 0.90417212 0.05219594 0.3626531 -0.18975197]\n", " [ 0.46052872 -0.15712373 0.18134556 0.56206705 0.64375449]\n", " [ 0.33461177 -0.32250627 0.48300685 0.2710754 -0.69083079]]\n", "[[ 1.64350677 1.02048963 1.00792072 1.46381176 0.99960193]\n", " [-0. 0.957002 0.51717374 -0.18418304 -0.03360911]\n", " [-0. -0. 0.64428468 0.28604006 0.27204465]\n", " [-0. 0. 0. 0.16491158 0.4455204 ]\n", " [-0. 0. -0. -0. 0.03167336]]\n" ] } ], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "# LU Decomposition\n", "p, l, u = LA.lu(A)\n", "print p # Permutation Matrix\n", "print l # Lower triangular matrix \n", "print u # Upper triangluar matrix" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[ 0. 0. 1. 0. 0.]\n", " [ 1. 0. 0. 0. 0.]\n", " [ 0. 1. 0. 0. 0.]\n", " [ 0. 0. 0. 1. 0.]\n", " [ 0. 0. 0. 0. 1.]]\n", "[[ 1. 0. 0. 0. 0. ]\n", " [ 0.18850158 1. 0. 0. 0. ]\n", " [ 0.9639066 -0.33768939 1. 0. 0. ]\n", " [ 0.7851316 -0.37901001 0.07477825 1. 0. ]\n", " [ 0.57046231 -0.51670511 -0.25946494 0.93185554 1. ]]\n", "[[ 0.96401938 0.80590361 0.91703878 0.79958259 0.36575606]\n", " [ 0. 0.82621388 0.4398236 -0.08066926 0.18094882]\n", " [ 0. 0. -0.71604019 -0.17584096 0.06752617]\n", " [ 0. 0. 0. 0.20242742 0.56212777]\n", " [ 0. 0. 0. 0. -0.04584822]]\n" ] } ], "prompt_number": 24 }, { "cell_type": "code", "collapsed": false, "input": [ "# Cholesky Factorization\n", "B = np.tril(A) # Make sure B is positive definite!\n", "L = LA.cholesky(B)\n", "print B\n", "print L" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[ 0.92922464 0. 0. 0. 0. ]\n", " [ 0.96401938 0.80590361 0. 0. 0. ]\n", " [ 0.18171917 0.97812798 0.61268685 0. 0. ]\n", " [ 0.75688208 0.31959706 0.49975434 0.84763035 0. ]\n", " [ 0.54993672 0.0328287 0.48166429 0.73207162 0.57560584]]\n", "[[ 0.96396299 0. 0. 0. 0. ]\n", " [ 0. 0.89772135 0. 0. 0. ]\n", " [ 0. 0. 0.78274316 0. 0. ]\n", " [ 0. 0. 0. 0.92066842 0. ]\n", " [ 0. 0. 0. 0. 0.75868692]]\n" ] } ], "prompt_number": 48 }, { "cell_type": "code", "collapsed": false, "input": [ "U, s, Vh = LA.svd(A)\n", "print U\n", "print s\n", "print Vh" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[-0.39813995 0.20643095 -0.84627344 -0.17386545 0.22904785]\n", " [-0.60336264 -0.25342941 0.01908682 0.73012951 -0.19563655]\n", " [-0.29637964 -0.79807961 0.10000792 -0.46554494 0.22021438]\n", " [-0.50019004 0.32392179 0.24745742 -0.46897601 -0.6030845 ]\n", " [-0.37337265 0.38897739 0.46067364 0.00333472 0.7050235 ]]\n", "[ 2.89926195 1.020993 0.58722569 0.35114502 0.00867173]\n", "[[-0.54820462 -0.39543335 -0.4043862 -0.49950798 -0.36064904]\n", " [ 0.25618887 -0.75005975 -0.36057043 0.4203798 0.25504396]\n", " [-0.52648798 -0.3642084 0.69468631 0.0728504 0.31979116]\n", " [ 0.29781095 -0.29410851 0.42201493 0.13653362 -0.79250918]\n", " [-0.5176466 0.24878758 -0.21395113 0.74150117 -0.27303419]]\n" ] } ], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "#Calculate the condition number\n", "min(LA.svd(A, compute_uv=0))*min(LA.svd(LA.pinv(A), compute_uv=0))" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 30, "text": [ "0.0029910123570078698" ] } ], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "#Or an easier way\n", "np.linalg.cond(A, -2) # -2 finds the smallest singular value" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 32, "text": [ "0.0029910123570078616" ] } ], "prompt_number": 32 }, { "cell_type": "markdown", "metadata": {}, "source": [ "** Statistics **\n", "\n", "Unlike the linear algebra functions, there is not a lot of overlap with scipy and numpy with statistical functions.\n", "\n", "Numpy has mostly summary and order statistics that are applied to an ndarray.\n", "\n", "SciPy's stats package is much richer." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy import stats\n", "import matplotlib.pyplot as plt\n", "\n", "numargs = stats.lognorm.numargs\n", "[ s ] = [0.9,] * numargs\n", "rv = stats.lognorm(s)\n", "\n", "#Display frozen pdf\n", "x = np.linspace(0, np.minimum(rv.dist.b, 3))\n", "h = plt.plot(x, rv.pdf(x))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "/Users/johndowns/Applications/anaconda/lib/python2.7/site-packages/scipy/stats/distributions.py:4658: RuntimeWarning: divide by zero encountered in log\n", " return -log(x)**2 / (2*s**2) + np.where(x == 0, 0, -log(s*x*sqrt(2*pi)))\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 53 }, { "cell_type": "code", "collapsed": false, "input": [ "stats.describe?\n", "\n", "stats.describe(A)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 60, "text": [ "(5,\n", " (array([ 0.18171917, 0.0328287 , 0.01937578, 0.07005332, 0.24989442]),\n", " array([ 0.96401938, 0.97812798, 0.91703878, 0.84763035, 0.78576249])),\n", " array([ 0.6763564 , 0.5268539 , 0.50610401, 0.6142922 , 0.46719903]),\n", " array([ 0.10345616, 0.14234419, 0.10444232, 0.09972712, 0.04561471]),\n", " array([-0.69335701, -0.08259186, -0.37031295, -1.24696622, 0.6033557 ]),\n", " array([-0.92424084, -1.31969207, -0.57151457, -0.1071196 , -1.06108566]))" ] } ], "prompt_number": 60 }, { "cell_type": "code", "collapsed": false, "input": [ "z = stats.zscore(A) # Calculates the z score of each value in the sample, relative to the sample mean and standard deviation.\n", "print z" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[ 0.87896406 -0.0860613 -1.68384956 0.02772435 -0.56652728]\n", " [ 0.99990975 0.82692613 1.42164003 0.6559961 -0.53103669]\n", " [-1.71934735 1.33728977 0.36872625 -1.92680571 -1.13755266]\n", " [ 0.27990536 -0.61417765 -0.02196684 0.82610283 1.66762543]\n", " [-0.43943183 -1.46397695 -0.08454988 0.41698244 0.5674912 ]]\n" ] } ], "prompt_number": 61 }, { "cell_type": "code", "collapsed": false, "input": [ "x = np.random.randn(10)\n", "y = np.random.randn(10)\n", "coef, p = stats.pearsonr(x, y)\n", "print coef\n", "print p" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0.585566174753\n", "0.0753042348576\n" ] } ], "prompt_number": 73 }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Scikits**\n", "\n", "Scikits are extensions to SciPy that are not appropriate for the core library for various reasons. Two of the most interesting modules are scikit-learn and scikit-image.\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.display import Image\n", "Image(url=\"http://scikit-learn.org/stable/_static/ml_map.png\")" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 26, "text": [ "" ] } ], "prompt_number": 26 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's take a look at how scikit-learn supports supervised and unsupervised learning. \n", "\n", "Scikit-learn estimators have a uniform interface\n", "\n", "- Available in **all Estimators**\n", " + `model.fit()` : fit training data. For supervised learning applications,\n", " this accepts two arguments: the data `X` and the labels `y` (e.g. `model.fit(X, y)`).\n", " For unsupervised learning applications, this accepts only a single argument,\n", " the data `X` (e.g. `model.fit(X)`).\n", "- Available in **supervised estimators**\n", " + `model.predict()` : given a trained model, predict the label of a new set of data.\n", " This method accepts one argument, the new data `X_new` (e.g. `model.predict(X_new)`),\n", " and returns the learned label for each object in the array.\n", " + `model.predict_proba()` : For classification problems, some estimators also provide\n", " this method, which returns the probability that a new observation has each categorical label.\n", " In this case, the label with the highest probability is returned by `model.predict()`.\n", " + `model.score()` : for classification or regression problems, most (all?) estimators implement\n", " a score method. Scores are between 0 and 1, with a larger score indicating a better fit.\n", "- Available in **unsupervised estimators**\n", " + `model.transform()` : given an unsupervised model, transform new data into the new basis.\n", " This also accepts one argument `X_new`, and returns the new representation of the data based\n", " on the unsupervised model.\n", " + `model.fit_transform()` : some estimators implement this method,\n", " which more efficiently performs a fit and a transform on the same input data.\n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# The famous Iris dataset\n", "from sklearn import neighbors, datasets\n", "\n", "iris = datasets.load_iris()\n", "X, y = iris.data, iris.target\n", "\n", "print X[:10], \"...\"\n", "print y" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[ 5.1 3.5 1.4 0.2]\n", " [ 4.9 3. 1.4 0.2]\n", " [ 4.7 3.2 1.3 0.2]\n", " [ 4.6 3.1 1.5 0.2]\n", " [ 5. 3.6 1.4 0.2]\n", " [ 5.4 3.9 1.7 0.4]\n", " [ 4.6 3.4 1.4 0.3]\n", " [ 5. 3.4 1.5 0.2]\n", " [ 4.4 2.9 1.4 0.2]\n", " [ 4.9 3.1 1.5 0.1]] ...\n", "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n", " 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1\n", " 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2\n", " 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2\n", " 2 2]\n" ] } ], "prompt_number": 220 }, { "cell_type": "code", "collapsed": false, "input": [ "# Visualize the data\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "x_index = 2\n", "y_index = 3\n", "\n", "# this formatter will label the colorbar with the correct target names\n", "formatter = plt.FuncFormatter(lambda i, *args: iris.target_names[int(i)])\n", "\n", "plt.scatter(iris.data[:, x_index], iris.data[:, y_index],\n", " c=iris.target)\n", "plt.colorbar(ticks=[0, 1, 2], format=formatter)\n", "plt.xlabel(iris.feature_names[x_index])\n", "plt.ylabel(iris.feature_names[y_index]);" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 234 }, { "cell_type": "code", "collapsed": false, "input": [ "# Make a prediction\n", "# create the model\n", "knn = neighbors.KNeighborsClassifier(n_neighbors=3)\n", "\n", "# fit the model\n", "knn.fit(X, y)\n", "\n", "# What kind of iris has 3cm x 5cm sepal and 4cm x 2cm petal?\n", "# call the \"predict\" method:\n", "result = knn.predict([[3, 5, 4, 2],])\n", "\n", "print iris.target_names[result]\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "['versicolor']\n" ] } ], "prompt_number": 226 }, { "cell_type": "code", "collapsed": false, "input": [ "#Exercise: try this with a SVC classifier\n", "from sklearn.svm import SVC" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 221 }, { "cell_type": "code", "collapsed": false, "input": [ "# Dimensionality Reduction - Principal Component Analysis\n", "X, y = iris.data, iris.target\n", "from sklearn.decomposition import PCA\n", "pca = PCA(n_components=2)\n", "pca.fit(X)\n", "X_reduced = pca.transform(X)\n", "print \"Reduced dataset shape:\", X_reduced.shape\n", "\n", "import pylab as pl\n", "pl.scatter(X_reduced[:, 0], X_reduced[:, 1], c=y)\n", "\n", "print \"Meaning of the 2 components:\"\n", "for component in pca.components_:\n", " print \" + \".join(\"%.3f x %s\" % (value, name)\n", " for value, name in zip(component,\n", " iris.feature_names))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Reduced dataset shape: (150, 2)\n", "Meaning of the 2 components:" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "0.362 x sepal length (cm) + -0.082 x sepal width (cm) + 0.857 x petal length (cm) + 0.359 x petal width (cm)\n", "-0.657 x sepal length (cm) + -0.730 x sepal width (cm) + 0.176 x petal length (cm) + 0.075 x petal width (cm)\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 235 }, { "cell_type": "code", "collapsed": false, "input": [ "# Clustering\n", "from sklearn.cluster import KMeans\n", "k_means = KMeans(n_clusters=3, random_state=0)\n", "k_means.fit(X)\n", "y_pred = k_means.predict(X)\n", "\n", "pl.scatter(X_reduced[:, 0], X_reduced[:, 1], c=y_pred);" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\ncFToCSHEwP0/gAKs6RJ/rAIAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 236 }, { "cell_type": "code", "collapsed": false, "input": [ "# Validation\n", "# Generate an un-balanced 2D dataset\n", "np.random.seed(0)\n", "X = np.vstack([np.random.normal(0, 1, (950, 2)),\n", " np.random.normal(-1.8, 0.8, (50, 2))])\n", "y = np.hstack([np.zeros(950), np.ones(50)])\n", "\n", "plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='none',\n", " cmap=plt.cm.Accent)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 237, "text": [ "" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 237 }, { "cell_type": "code", "collapsed": false, "input": [ "from sklearn import metrics\n", "from sklearn.svm import SVC\n", "from sklearn.cross_validation import train_test_split\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)\n", "clf = SVC().fit(X_train, y_train)\n", "y_pred = clf.predict(X_test)\n", "\n", "print \"accuracy:\", metrics.accuracy_score(y_test, y_pred)\n", "print \"precision:\", metrics.precision_score(y_test, y_pred)\n", "print \"recall:\", metrics.recall_score(y_test, y_pred)\n", "print \"f1 score:\", metrics.f1_score(y_test, y_pred)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "accuracy: 0.968\n", "precision: 0.833333333333\n", "recall: 0.625\n", "f1 score: 0.714285714286\n" ] } ], "prompt_number": 239 }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### What do these mean?\n", "\n", "These are ways of taking into account not just the classification results, but the results **relative to the true category**.\n", "\n", "- $$ {\\rm accuracy} \\equiv \\frac{\\rm correct~labels}{\\rm total~samples} $$\n", "\n", "- $$ {\\rm precision} \\equiv \\frac{\\rm true~positives}{\\rm true~positives + false~positives} $$\n", "\n", "- $$ {\\rm recall} \\equiv \\frac{\\rm true~positives}{\\rm true~positives + false~negatives} $$\n", "\n", "- $$ F_1 \\equiv \\frac{\\rm precision \\cdot recall}{\\rm precision + recall} $$\n", "\n", "The **accuracy**, **precision**, **recall**, and **f1-score** all range from 0 to 1, with 1 being optimal.\n", "Here we've used the following definitions:\n", "\n", "- *True Positives* are those which are labeled ``1`` which are actually ``1``\n", "- *False Positives* are those which are labeled ``1`` which are actually ``0``\n", "- *True Negatives* are those which are labeled ``0`` which are actually ``0``\n", "- *False Negatives* are those which are labeled ``0`` which are actually ``1``" ] }, { "cell_type": "code", "collapsed": false, "input": [ "X1, X2, y1, y2 = train_test_split(X, y, test_size=0.5)\n", "print X1.shape\n", "print X2.shape\n", "\n", "y2_pred = SVC().fit(X1, y1).predict(X2)\n", "y1_pred = SVC().fit(X2, y2).predict(X1)\n", "\n", "print np.mean([metrics.precision_score(y1, y1_pred),\n", " metrics.precision_score(y2, y2_pred)])\n", "\n", "from sklearn.cross_validation import cross_val_score\n", "\n", "# Let's do a 2-fold cross-validation of the SVC estimator\n", "print cross_val_score(SVC(), X, y, cv=2, scoring='precision')" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(500, 2)\n", "(500, 2)\n", "0.794117647059\n", "[ 0.90909091 0.76190476]\n" ] } ], "prompt_number": 240 }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Matplotlib**\n", "\n", "Matplotlib is the plotting library for the SciPy ecosystem. \n", "\n", "More interesting: there is a new library, prettyplotlib, that wraps matplotlib with some sensible defaults to make the plots a more readable.\n", "\n", "https://github.com/olgabot/prettyplotlib\n", "\n", "** A boxplot example **" ] }, { "cell_type": "code", "collapsed": false, "input": [ "Image(\"https://raw.github.com/olgabot/prettyplotlib/master/examples/boxplot_matplotlib_default.png\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "png": "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\nI8/z8vLU09OTyNKmbKr35AuHw9y7DwDikJrIf1lVVZX6+vrGvV5fX6/Vq1dLkp577jndeeedevzx\nx8e1u9UTeTKd+JPp/8t0C4fDpktIGvSlv+hPfyU0wN56660b/vz3v/+9Wlpa9Oc//3nCn+fm5ioa\njY48j0ajysvLm7CtK9tAAQDxsWYKMRKJ6IUXXlBTU5PuuuuuCdtUVFSos7NTXV1dunLlig4dOqSa\nmpoEVwoAsIE1AbZt2zYNDg6qqqpKwWBQP/vZzyRJvb29WrVqlSQpNTVVjY2NWrFihebPn69169ap\ntLTUZNkAAEOS9k4cLnjjjTe0du1anTlzRvfee6/pcpyVkpKiRYsWKRaLKSUlRY2Njfrud79ruixn\n9fX1aceOHfrb3/6mzMxM5eTk6KWXXlJxcbHp0pxz7b05NDSk1NRUbdiwQT//+c9Z0/YJAWbQunXr\n9Pnnn6u8vFx1fDVz3GbPnq1PPvlEknTs2DHV19fzmZs4xWIxfe9739OmTZv005/+VJL03nvv6T//\n+Y9+8IMfGK7OPaPfmxcuXNDjjz+u73//+/y9+8SaKcSZZnBwUO+++64aGxt16NAh0+UkjY8//ljZ\n2dmmy3DW22+/rTvvvHMkvCRp0aJFhJcP5s6dqz179qixsdF0KUkjobsQ8aWmpib96Ec/0je+8Q3N\nnTtXp0+fVnl5uemynPT5558rGAzqv//9rz766CP95S9/MV2Ss95//30tWbLEdBlJq7CwUMPDw7pw\n4YLmzp1ruhznMQIz5MCBA3r00UclSY8++qgOHDhguCJ3feUrX1F7e7vOnDmjSCSiDRs2mC7JWazN\nwCWMwAwYGBjQ22+/rffff1+BQEDDw8MKBAJ64YUXTJfmvO985zu6ePGiLl68qLvvvtt0Oc5ZsGCB\nDh8+bLqMpPXhhx8qJSWF0ZdPGIEZcPjwYW3YsEFdXV3617/+pfPnz6uwsFB//etfTZfmvA8++EDD\nw8P62te+ZroUJ/3whz/U//73P+3du3fktffee0/vvPOOwaqSw4ULF/T0009r27ZtpktJGozADDh4\n8KB+9atfjXnt4Ycf1sGDB7V06VJDVbnr2hqYdHUX3f79+5kKuw1HjhzRjh071NDQoLvuukuFhYV6\n6aWXTJflpGvvzeu30cMfbKMHADiJKUQAgJMIMACAkwgwAICTCDAAgJMIMACAkwgwAICTCDAAgJMI\nMACAkwgwAICTCDAAgJMIMACAkwgwAICTCDAAgJMIMACAkwgwAICTCDAAgJMIMACAkwgwAICTCDAA\ngJMIMACAkwgwAICTCDAAgJMIMACAk/4PL3vHmJz1IHAAAAAASUVORK5CYII=\n", "prompt_number": 66, "text": [ "" ] } ], "prompt_number": 66 }, { "cell_type": "code", "collapsed": false, "input": [ "Image(\"https://raw.github.com/olgabot/prettyplotlib/master/examples/boxplot_prettyplotlib_default.png\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "png": "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\n", "prompt_number": 67, "text": [ "" ] } ], "prompt_number": 67 }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Pandas**" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.display import VimeoVideo\n", "VimeoVideo(\"79562736\")" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", " \n", " " ], "metadata": {}, "output_type": "pyout", "prompt_number": 49, "text": [ "" ] } ], "prompt_number": 49 }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Let's try something!**\n", "\n", "I want to try out scikit learn. Let's get a dataset and experiment with some of the algorithms.\n", "\n", "I'm getting the movielens data set, which is a collection of movie ratings by a number of users. We're going to try to classify each user and predict whether they will like a particular movie. We will use a few classifiers and see which ones perform better.\n", "\n", "Some of this tutorial comes from http://www.gregreda.com/2013/10/26/working-with-pandas-dataframes/" ] }, { "cell_type": "code", "collapsed": false, "input": [ "!wget http://files.grouplens.org/datasets/movielens/ml-100k.zip\n", "!unzip ml-100k.zip\n", "!cd ml-100k" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "--2013-11-16 22:20:45-- http://files.grouplens.org/datasets/movielens/ml-100k.zip\r\n", "Resolving files.grouplens.org... 128.101.34.146\r\n", "Connecting to files.grouplens.org|128.101.34.146|:80... connected.\r\n", "HTTP request sent, awaiting response... " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "200 OK\r\n", "Length: 4945826 (4.7M) [application/zip]\r\n", "Saving to: `ml-100k.zip'\r\n", "\r\n", "\r", " 0% [ ] 0 --.-K/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", " 1% [ ] 76,440 360K/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", " 3% [> ] 192,280 445K/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", " 7% [=> ] 348,664 547K/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "11% [===> ] 573,104 678K/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "16% [=====> ] 816,368 772K/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "21% [=======> ] 1,075,560 846K/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "26% [=========> ] 1,315,928 882K/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "31% [===========> ] 1,579,464 926K/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "37% [=============> ] 1,840,104 956K/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "42% [===============> ] 2,090,608 969K/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "47% [=================> ] 2,348,352 994K/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "52% [===================> ] 2,588,720 1008K/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "57% [=====================> ] 2,843,568 1020K/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "62% [=======================> ] 3,108,552 1.01M/s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "67% [=========================> ] 3,348,920 1.02M/s eta 1s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "72% [===========================> ] 3,584,944 1.06M/s eta 1s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "77% [=============================> ] 3,820,968 1.09M/s eta 1s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "81% [==============================> ] 4,048,304 1.11M/s eta 1s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "86% [================================> ] 4,279,984 1.13M/s eta 1s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "91% [==================================> ] 4,532,712 1.14M/s eta 0s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "96% [====================================> ] 4,784,664 1.14M/s eta 0s " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r", "100%[======================================>] 4,945,826 1.13M/s in 4.5s \r\n", "\r\n", "2013-11-16 22:20:50 (1.05 MB/s) - `ml-100k.zip' saved [4945826/4945826]\r\n", "\r\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "Archive: ml-100k.zip\r\n", " creating: ml-100k/\r\n", " inflating: ml-100k/allbut.pl \r\n", " inflating: ml-100k/mku.sh \r\n", " inflating: ml-100k/README \r\n", " inflating: ml-100k/u.data \r\n", " inflating: ml-100k/u.genre \r\n", " inflating: ml-100k/u.info \r\n", " inflating: ml-100k/u.item \r\n", " inflating: ml-100k/u.occupation \r\n", " inflating: ml-100k/u.user " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r\n", " inflating: ml-100k/u1.base \r\n", " inflating: ml-100k/u1.test \r\n", " inflating: ml-100k/u2.base " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r\n", " inflating: ml-100k/u2.test \r\n", " inflating: ml-100k/u3.base \r\n", " inflating: ml-100k/u3.test " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r\n", " inflating: ml-100k/u4.base \r\n", " inflating: ml-100k/u4.test \r\n", " inflating: ml-100k/u5.base " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r\n", " inflating: ml-100k/u5.test \r\n", " inflating: ml-100k/ua.base " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r\n", " inflating: ml-100k/ua.test \r\n", " inflating: ml-100k/ub.base " ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\r\n", " inflating: ml-100k/ub.test \r\n" ] } ], "prompt_number": 83 }, { "cell_type": "code", "collapsed": false, "input": [ "txt = open('ml-100k/README').read()\n", "print txt" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "SUMMARY & USAGE LICENSE\n", "=============================================\n", "\n", "MovieLens data sets were collected by the GroupLens Research Project\n", "at the University of Minnesota.\n", " \n", "This data set consists of:\n", "\t* 100,000 ratings (1-5) from 943 users on 1682 movies. \n", "\t* Each user has rated at least 20 movies. \n", " * Simple demographic info for the users (age, gender, occupation, zip)\n", "\n", "The data was collected through the MovieLens web site\n", "(movielens.umn.edu) during the seven-month period from September 19th, \n", "1997 through April 22nd, 1998. This data has been cleaned up - users\n", "who had less than 20 ratings or did not have complete demographic\n", "information were removed from this data set. Detailed descriptions of\n", "the data file can be found at the end of this file.\n", "\n", "Neither the University of Minnesota nor any of the researchers\n", "involved can guarantee the correctness of the data, its suitability\n", "for any particular purpose, or the validity of results based on the\n", "use of the data set. The data set may be used for any research\n", "purposes under the following conditions:\n", "\n", " * The user may not state or imply any endorsement from the\n", " University of Minnesota or the GroupLens Research Group.\n", "\n", " * The user must acknowledge the use of the data set in\n", " publications resulting from the use of the data set, and must\n", " send us an electronic or paper copy of those publications.\n", "\n", " * The user may not redistribute the data without separate\n", " permission.\n", "\n", " * The user may not use this information for any commercial or\n", " revenue-bearing purposes without first obtaining permission\n", " from a faculty member of the GroupLens Research Project at the\n", " University of Minnesota.\n", "\n", "If you have any further questions or comments, please contact Jon Herlocker\n", ". \n", "\n", "ACKNOWLEDGEMENTS\n", "==============================================\n", "\n", "Thanks to Al Borchers for cleaning up this data and writing the\n", "accompanying scripts.\n", "\n", "PUBLISHED WORK THAT HAS USED THIS DATASET\n", "==============================================\n", "\n", "Herlocker, J., Konstan, J., Borchers, A., Riedl, J.. An Algorithmic\n", "Framework for Performing Collaborative Filtering. Proceedings of the\n", "1999 Conference on Research and Development in Information\n", "Retrieval. Aug. 1999.\n", "\n", "FURTHER INFORMATION ABOUT THE GROUPLENS RESEARCH PROJECT\n", "==============================================\n", "\n", "The GroupLens Research Project is a research group in the Department\n", "of Computer Science and Engineering at the University of Minnesota.\n", "Members of the GroupLens Research Project are involved in many\n", "research projects related to the fields of information filtering,\n", "collaborative filtering, and recommender systems. The project is lead\n", "by professors John Riedl and Joseph Konstan. The project began to\n", "explore automated collaborative filtering in 1992, but is most well\n", "known for its world wide trial of an automated collaborative filtering\n", "system for Usenet news in 1996. The technology developed in the\n", "Usenet trial formed the base for the formation of Net Perceptions,\n", "Inc., which was founded by members of GroupLens Research. Since then\n", "the project has expanded its scope to research overall information\n", "filtering solutions, integrating in content-based methods as well as\n", "improving current collaborative filtering technology.\n", "\n", "Further information on the GroupLens Research project, including\n", "research publications, can be found at the following web site:\n", " \n", " http://www.grouplens.org/\n", "\n", "GroupLens Research currently operates a movie recommender based on\n", "collaborative filtering:\n", "\n", " http://www.movielens.org/\n", "\n", "DETAILED DESCRIPTIONS OF DATA FILES\n", "==============================================\n", "\n", "Here are brief descriptions of the data.\n", "\n", "ml-data.tar.gz -- Compressed tar file. To rebuild the u data files do this:\n", " gunzip ml-data.tar.gz\n", " tar xvf ml-data.tar\n", " mku.sh\n", "\n", "u.data -- The full u data set, 100000 ratings by 943 users on 1682 items.\n", " Each user has rated at least 20 movies. Users and items are\n", " numbered consecutively from 1. The data is randomly\n", " ordered. This is a tab separated list of \n", "\t user id | item id | rating | timestamp. \n", " The time stamps are unix seconds since 1/1/1970 UTC \n", "\n", "u.info -- The number of users, items, and ratings in the u data set.\n", "\n", "u.item -- Information about the items (movies); this is a tab separated\n", " list of\n", " movie id | movie title | release date | video release date |\n", " IMDb URL | unknown | Action | Adventure | Animation |\n", " Children's | Comedy | Crime | Documentary | Drama | Fantasy |\n", " Film-Noir | Horror | Musical | Mystery | Romance | Sci-Fi |\n", " Thriller | War | Western |\n", " The last 19 fields are the genres, a 1 indicates the movie\n", " is of that genre, a 0 indicates it is not; movies can be in\n", " several genres at once.\n", " The movie ids are the ones used in the u.data data set.\n", "\n", "u.genre -- A list of the genres.\n", "\n", "u.user -- Demographic information about the users; this is a tab\n", " separated list of\n", " user id | age | gender | occupation | zip code\n", " The user ids are the ones used in the u.data data set.\n", "\n", "u.occupation -- A list of the occupations.\n", "\n", "u1.base -- The data sets u1.base and u1.test through u5.base and u5.test\n", "u1.test are 80%/20% splits of the u data into training and test data.\n", "u2.base Each of u1, ..., u5 have disjoint test sets; this if for\n", "u2.test 5 fold cross validation (where you repeat your experiment\n", "u3.base with each training and test set and average the results).\n", "u3.test These data sets can be generated from u.data by mku.sh.\n", "u4.base\n", "u4.test\n", "u5.base\n", "u5.test\n", "\n", "ua.base -- The data sets ua.base, ua.test, ub.base, and ub.test\n", "ua.test split the u data into a training set and a test set with\n", "ub.base exactly 10 ratings per user in the test set. The sets\n", "ub.test ua.test and ub.test are disjoint. These data sets can\n", " be generated from u.data by mku.sh.\n", "\n", "allbut.pl -- The script that generates training and test sets where\n", " all but n of a users ratings are in the training data.\n", "\n", "mku.sh -- A shell script to generate all the u data sets from u.data.\n", "\n" ] } ], "prompt_number": 88 }, { "cell_type": "code", "collapsed": false, "input": [ "import pandas as pd\n", "\n", "user_columns = ['user_id', 'age', 'sex', 'occupation', 'zip_code']\n", "users = pd.read_csv('ml-100k/u.user', names=user_columns, sep='|')\n", "\n", "rating_columns = ['user_id', 'movie_id', 'rating', 'unix_timestamp']\n", "ratings = pd.read_csv('ml-100k/u.data', names=rating_columns, delim_whitespace=True)\n", "\n", "movie_columns = ['movie_id', 'title', 'release_date', 'video_release_date', 'imdb_url']\n", "movies = pd.read_csv('ml-100k/u.item', names=movie_columns, sep='|', usecols=range(5))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 158 }, { "cell_type": "code", "collapsed": false, "input": [ "users" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "/Users/johndowns/Applications/anaconda/lib/python2.7/site-packages/pandas/core/config.py:570: DeprecationWarning: height has been deprecated.\n", "\n", " warnings.warn(d.msg, DeprecationWarning)\n" ] }, { "html": [ "
\n",
        "<class 'pandas.core.frame.DataFrame'>\n",
        "Int64Index: 943 entries, 0 to 942\n",
        "Data columns (total 5 columns):\n",
        "user_id       943  non-null values\n",
        "age           943  non-null values\n",
        "sex           943  non-null values\n",
        "occupation    943  non-null values\n",
        "zip_code      943  non-null values\n",
        "dtypes: int64(2), object(3)\n",
        "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 159, "text": [ "\n", "Int64Index: 943 entries, 0 to 942\n", "Data columns (total 5 columns):\n", "user_id 943 non-null values\n", "age 943 non-null values\n", "sex 943 non-null values\n", "occupation 943 non-null values\n", "zip_code 943 non-null values\n", "dtypes: int64(2), object(3)" ] } ], "prompt_number": 159 }, { "cell_type": "code", "collapsed": false, "input": [ "ratings" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "/Users/johndowns/Applications/anaconda/lib/python2.7/site-packages/pandas/core/config.py:570: DeprecationWarning: height has been deprecated.\n", "\n", " warnings.warn(d.msg, DeprecationWarning)\n" ] }, { "html": [ "
\n",
        "<class 'pandas.core.frame.DataFrame'>\n",
        "Int64Index: 100000 entries, 0 to 99999\n",
        "Data columns (total 4 columns):\n",
        "user_id           100000  non-null values\n",
        "movie_id          100000  non-null values\n",
        "rating            100000  non-null values\n",
        "unix_timestamp    100000  non-null values\n",
        "dtypes: int64(4)\n",
        "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 160, "text": [ "\n", "Int64Index: 100000 entries, 0 to 99999\n", "Data columns (total 4 columns):\n", "user_id 100000 non-null values\n", "movie_id 100000 non-null values\n", "rating 100000 non-null values\n", "unix_timestamp 100000 non-null values\n", "dtypes: int64(4)" ] } ], "prompt_number": 160 }, { "cell_type": "code", "collapsed": false, "input": [ "movies" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "/Users/johndowns/Applications/anaconda/lib/python2.7/site-packages/pandas/core/config.py:570: DeprecationWarning: height has been deprecated.\n", "\n", " warnings.warn(d.msg, DeprecationWarning)\n" ] }, { "html": [ "
\n",
        "<class 'pandas.core.frame.DataFrame'>\n",
        "Int64Index: 1682 entries, 0 to 1681\n",
        "Data columns (total 5 columns):\n",
        "movie_id              1682  non-null values\n",
        "title                 1682  non-null values\n",
        "release_date          1681  non-null values\n",
        "video_release_date    0  non-null values\n",
        "imdb_url              1679  non-null values\n",
        "dtypes: float64(1), int64(1), object(3)\n",
        "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 161, "text": [ "\n", "Int64Index: 1682 entries, 0 to 1681\n", "Data columns (total 5 columns):\n", "movie_id 1682 non-null values\n", "title 1682 non-null values\n", "release_date 1681 non-null values\n", "video_release_date 0 non-null values\n", "imdb_url 1679 non-null values\n", "dtypes: float64(1), int64(1), object(3)" ] } ], "prompt_number": 161 }, { "cell_type": "code", "collapsed": false, "input": [ "movie_ratings = pd.merge(movies, ratings)\n", "movie_ratings" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "/Users/johndowns/Applications/anaconda/lib/python2.7/site-packages/pandas/core/config.py:570: DeprecationWarning: height has been deprecated.\n", "\n", " warnings.warn(d.msg, DeprecationWarning)\n" ] }, { "html": [ "
\n",
        "<class 'pandas.core.frame.DataFrame'>\n",
        "Int64Index: 100000 entries, 0 to 99999\n",
        "Data columns (total 8 columns):\n",
        "movie_id              100000  non-null values\n",
        "title                 100000  non-null values\n",
        "release_date          99991  non-null values\n",
        "video_release_date    0  non-null values\n",
        "imdb_url              99987  non-null values\n",
        "user_id               100000  non-null values\n",
        "rating                100000  non-null values\n",
        "unix_timestamp        100000  non-null values\n",
        "dtypes: float64(1), int64(4), object(3)\n",
        "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 162, "text": [ "\n", "Int64Index: 100000 entries, 0 to 99999\n", "Data columns (total 8 columns):\n", "movie_id 100000 non-null values\n", "title 100000 non-null values\n", "release_date 99991 non-null values\n", "video_release_date 0 non-null values\n", "imdb_url 99987 non-null values\n", "user_id 100000 non-null values\n", "rating 100000 non-null values\n", "unix_timestamp 100000 non-null values\n", "dtypes: float64(1), int64(4), object(3)" ] } ], "prompt_number": 162 }, { "cell_type": "code", "collapsed": false, "input": [ "data = pd.merge(movie_ratings, users)\n", "data" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "/Users/johndowns/Applications/anaconda/lib/python2.7/site-packages/pandas/core/config.py:570: DeprecationWarning: height has been deprecated.\n", "\n", " warnings.warn(d.msg, DeprecationWarning)\n" ] }, { "html": [ "
\n",
        "<class 'pandas.core.frame.DataFrame'>\n",
        "Int64Index: 100000 entries, 0 to 99999\n",
        "Data columns (total 12 columns):\n",
        "movie_id              100000  non-null values\n",
        "title                 100000  non-null values\n",
        "release_date          99991  non-null values\n",
        "video_release_date    0  non-null values\n",
        "imdb_url              99987  non-null values\n",
        "user_id               100000  non-null values\n",
        "rating                100000  non-null values\n",
        "unix_timestamp        100000  non-null values\n",
        "age                   100000  non-null values\n",
        "sex                   100000  non-null values\n",
        "occupation            100000  non-null values\n",
        "zip_code              100000  non-null values\n",
        "dtypes: float64(1), int64(5), object(6)\n",
        "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 163, "text": [ "\n", "Int64Index: 100000 entries, 0 to 99999\n", "Data columns (total 12 columns):\n", "movie_id 100000 non-null values\n", "title 100000 non-null values\n", "release_date 99991 non-null values\n", "video_release_date 0 non-null values\n", "imdb_url 99987 non-null values\n", "user_id 100000 non-null values\n", "rating 100000 non-null values\n", "unix_timestamp 100000 non-null values\n", "age 100000 non-null values\n", "sex 100000 non-null values\n", "occupation 100000 non-null values\n", "zip_code 100000 non-null values\n", "dtypes: float64(1), int64(5), object(6)" ] } ], "prompt_number": 163 }, { "cell_type": "code", "collapsed": false, "input": [ "data.head()" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "/Users/johndowns/Applications/anaconda/lib/python2.7/site-packages/pandas/core/config.py:570: DeprecationWarning: height has been deprecated.\n", "\n", " warnings.warn(d.msg, DeprecationWarning)\n", "/Users/johndowns/Applications/anaconda/lib/python2.7/site-packages/pandas/core/config.py:570: DeprecationWarning: height has been deprecated.\n", "\n", " warnings.warn(d.msg, DeprecationWarning)\n" ] }, { "output_type": "stream", "stream": "stderr", "text": [ "/Users/johndowns/Applications/anaconda/lib/python2.7/site-packages/pandas/core/config.py:570: DeprecationWarning: height has been deprecated.\n", "\n", " warnings.warn(d.msg, DeprecationWarning)\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
movie_idtitlerelease_datevideo_release_dateimdb_urluser_idratingunix_timestampagesexoccupationzip_code
0 1 Toy Story (1995) 01-Jan-1995NaN http://us.imdb.com/M/title-exact?Toy%20Story%2... 308 4 887736532 60 M retired 95076
1 4 Get Shorty (1995) 01-Jan-1995NaN http://us.imdb.com/M/title-exact?Get%20Shorty%... 308 5 887737890 60 M retired 95076
2 5 Copycat (1995) 01-Jan-1995NaN http://us.imdb.com/M/title-exact?Copycat%20(1995) 308 4 887739608 60 M retired 95076
3 7 Twelve Monkeys (1995) 01-Jan-1995NaN http://us.imdb.com/M/title-exact?Twelve%20Monk... 308 4 887738847 60 M retired 95076
4 8 Babe (1995) 01-Jan-1995NaN http://us.imdb.com/M/title-exact?Babe%20(1995) 308 5 887736696 60 M retired 95076
\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 164, "text": [ " movie_id title release_date video_release_date \\\n", "0 1 Toy Story (1995) 01-Jan-1995 NaN \n", "1 4 Get Shorty (1995) 01-Jan-1995 NaN \n", "2 5 Copycat (1995) 01-Jan-1995 NaN \n", "3 7 Twelve Monkeys (1995) 01-Jan-1995 NaN \n", "4 8 Babe (1995) 01-Jan-1995 NaN \n", "\n", " imdb_url user_id rating \\\n", "0 http://us.imdb.com/M/title-exact?Toy%20Story%2... 308 4 \n", "1 http://us.imdb.com/M/title-exact?Get%20Shorty%... 308 5 \n", "2 http://us.imdb.com/M/title-exact?Copycat%20(1995) 308 4 \n", "3 http://us.imdb.com/M/title-exact?Twelve%20Monk... 308 4 \n", "4 http://us.imdb.com/M/title-exact?Babe%20(1995) 308 5 \n", "\n", " unix_timestamp age sex occupation zip_code \n", "0 887736532 60 M retired 95076 \n", "1 887737890 60 M retired 95076 \n", "2 887739608 60 M retired 95076 \n", "3 887738847 60 M retired 95076 \n", "4 887736696 60 M retired 95076 " ] } ], "prompt_number": 164 }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Some questions**" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# How are ages distributed?\n", "data.age.hist(bins=30)\n", "plt.title(\"Distribution of users' ages\")\n", "plt.ylabel('count of users')\n", "plt.xlabel('age');" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAZMAAAEZCAYAAABSN8jfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtYVPW+P/D3yKDtlJumkIw6KSANIJCG3SzUMPOE20tR\neOKiVjvtoj2efpl7V3ZOCVZ7p1Q+nTqYZB7RfdpHzZTcKsvstEETKRNLVJCrbA0R8IIOfH9/ECtH\nlFnDDLPWwvfreebRtWbNrPdcP6zvZ601BiGEABERkRN6qB2AiIj0j8WEiIicxmJCREROYzEhIiKn\nsZgQEZHTWEyIiMhpLCbkNnPmzMEbb7zhkvsqKyuDl5cX2vZsj42NRWZmpkvuGwAmTZqE1atXu+z+\nlPrTn/6E/v37Y+DAgW5fN5EzDDzOhFzBbDbjn//8J4xGIzw8PGCxWJCcnIynnnoKBoPB4ftauXIl\nxo0bp/g2Y8eORVJSEmbNmuVodCxevBhHjx5VpXhcrqysDKGhoSgvL0e/fv1UzXItixcvhsFgwGuv\nvaZ2FNIYbpmQSxgMBmzevBn19fUoKyvDwoULsXTpUsyePbtT99XR3zhWq9WZqJpVVlaGfv36qVpI\n7D23jv5hQNcPFhNyOS8vL8THx2PdunXIyspCUVERACA1NRWvvPIKAODUqVN46KGH4Ofnh379+uHe\ne++FEAJJSUkoKytDfHw8vLy88M4776C0tBQ9evTAypUrMWTIENx///04fvw4evTogZaWFnm9R44c\nwejRo+Hj44MpU6bg9OnTAABJkjBo0CCbjGazGTt27EBOTg7S0tKwbt06eHl5ITo6GoDtsJkQAm+8\n8QbMZjP8/f2RkpKC+vp6AJCzffrppxgyZAj69++PJUuWXPO5OXPmDJKTkzFgwACYzWa8+eabEEJg\n+/btmDBhAqqqquDl5XXVLaxVq1ZhzJgxNvN69OiBY8eOAQC2bNmCsLAweHt7w2Qy4c9//rO83ObN\nmxEVFQU/Pz/cfffdOHDggM1z8dZbb2HEiBHw8vJCc3Mzli5dCpPJBG9vb4SGhmLnzp3y8tcqKEeP\nHsW4ceNw0003oX///nj88cdx5swZ+fqCggJER0fD29sbCQkJePTRR+X3g72MHeUhjRBELmA2m8WO\nHTvazR88eLD48MMPhRBCpKamildeeUUIIcTChQvF008/LaxWq7BareKbb7655n2VlJQIg8EgUlJS\nxLlz58SFCxfkec3NzUIIIe677z4RGBgoDh48KM6ePSumT58uHn/8cSGEELm5ucJkMl0z7+LFi0VS\nUpLN9bGxsSIzM1MIIURmZqYICgoSJSUlorGxUUybNk1evi3HU089JS5cuCC+//570atXL3Ho0KGr\nPk9JSUliypQporGxUZSWloqQkBB5PZIktct5uU8++UTcc889NvMMBoM4evSoEEKIgIAA+Xmsq6sT\nBQUFQgghCgoKxIABA8SePXtES0uLyMrKEmazWVy8eFEIIcSQIUNEdHS0qKioEBcuXBA//fSTGDRo\nkKiurhZCCHH8+HF5HR05cuSI2L59u7h48aI4efKkuPfee8X8+fOFEEI0NTWJwYMHi4yMDGG1WsXf\n/vY30bNnT/n90FHGzuYh9+KWCXWpgQMHora2tt38nj17orq6GqWlpfDw8MDdd99t974WL16M3/3u\nd+jVq1e76wwGA5KTk2GxWHDjjTfiP/7jP7B+/foOh8vaCCE6XG7NmjVYsGABzGYzevfujbS0NGRn\nZ9tsFb322mvo1asXRowYgcjISHz//fft7qe5uRnr1q1DWloaevfujSFDhmDBggVyr0ZJ1o707NkT\nBw8eRH19PXx8fOStrI8++gh/+MMfcPvtt8vPU69evZCXlweg9bl7/vnnERgYiF69esHDwwNNTU04\nePAgLl26hMGDB2Po0KF21z9s2DCMHz8enp6euOmmm/DCCy9g165dAIC8vDw0Nzfjueeeg4eHB6ZO\nnYqYmBj5ttfK+I9//ANGo7FTeci9WEyoS1VUVKBv377ydNsX5osvvoigoCBMmDABw4YNw9KlS+3e\n15VDVR1dP3jwYFy6dAmnTp3qZPLfVFdXY8iQITb3bbVaUVNTI88LCAiQ/3/jjTfi7Nmz7e7n1KlT\nuHTpUrv7qqysdDojAHz++efYsmULzGYzYmNj5WJx/Phx/PnPf4afn598qaioQFVVlXzby5+7oKAg\nLFu2DIsXL4a/vz8SExNRXV1td/01NTV47LHHYDKZ4OPjg6SkJPzyyy8AgKqqKgQGBtosf/k6r5Wx\nuroaw4YN61Qeci8WE+oye/fuRVVVFe6555521/Xp0wfvvPMOjh49ik2bNuEvf/kLcnNzAVx7TN5e\n87esrMzm/21/Iffu3Rvnzp2Tr2tubsbJkycV3+/AgQNRWlpqc99GoxH+/v4d3u5KN910Ezw9Pdvd\n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\n", "text": [ "" ] } ], "prompt_number": 165 }, { "cell_type": "code", "collapsed": false, "input": [ "# How are occupations distributed?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 166 }, { "cell_type": "code", "collapsed": false, "input": [ "# Which movie is the highest rated?\n", "most_rated = data.title.value_counts()[0:10]\n", "print most_rated" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Star Wars (1977) 583\n", "Contact (1997) 509\n", "Fargo (1996) 508\n", "Return of the Jedi (1983) 507\n", "Liar Liar (1997) 485\n", "English Patient, The (1996) 481\n", "Scream (1996) 478\n", "Toy Story (1995) 452\n", "Air Force One (1997) 431\n", "Independence Day (ID4) (1996) 429\n", "dtype: int64\n" ] } ], "prompt_number": 168 }, { "cell_type": "code", "collapsed": false, "input": [ "# What movie is the most popular" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "# How many movies have less than 100 ratings" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "# Remove movies with less than 100 ratings from the dataset" ], "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": [ "# Extra Credit: How would we go about making a recommender system based on this data set?\n", "#Hint:\n", "VimeoVideo('64445499')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", " \n", " " ], "metadata": {}, "output_type": "pyout", "prompt_number": 216, "text": [ "" ] } ], "prompt_number": 216 }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Generators**\n", "\n", "Watch this! It was my favorite talk from PyData." ] }, { "cell_type": "code", "collapsed": false, "input": [ "VimeoVideo(\"79535180\")" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", " \n", " " ], "metadata": {}, "output_type": "pyout", "prompt_number": 74, "text": [ "" ] } ], "prompt_number": 74 }, { "cell_type": "raw", "metadata": {}, "source": [ "Some material taken from:\n", " \n", " https://github.com/jakevdp/2013_fall_ASTR599/\n", "\n", " http://www.gregreda.com/2013/10/26/working-with-pandas-dataframes/\n", " \n", " " ] } ], "metadata": {} } ] }