{ "metadata": { "name": "", "signature": "sha256:70ccda0f1b2566f84d3e72be919a30bf72241f1bdc3a696822a3894649cb1f78" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Tutorial Brief" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pandas is powerful and easy-to-use library for data analysis. Is has two main object to represents data: Series and DataFrame.\n", "\n", "Finding Help:\n", "\n", "- http://pandas.pydata.org/pandas-docs/stable/10min.html\n", "- http://pandas.pydata.org/pandas-docs/stable/tutorials.html" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", "\n", "

NumPy

Base N-dimensional array package

SciPy

Fundamental library for scientific computing

Matplotlib

Comprehensive 2D Plotting

IPython

Enhanced Interactive Console

SymPy

Symbolic mathematics

Pandas

Data structures & analysis
" ] }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Import libraries" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import pandas as pd" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Working with Series" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Series is an array like object." ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "pd.Series(self, data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x = pd.Series([1,2,3,4,5])\n", "x" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 2, "text": [ "0 1\n", "1 2\n", "2 3\n", "3 4\n", "4 5\n", "dtype: int64" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that generated an index for your item" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Basic Operation" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x + 100" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 3, "text": [ "0 101\n", "1 102\n", "2 103\n", "3 104\n", "4 105\n", "dtype: int64" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "(x ** 2) + 100" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "0 101\n", "1 104\n", "2 109\n", "3 116\n", "4 125\n", "dtype: int64" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "x > 2" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 5, "text": [ "0 False\n", "1 False\n", "2 True\n", "3 True\n", "4 True\n", "dtype: bool" ] } ], "prompt_number": 5 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "`any()` and `all()`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "larger_than_2 = x > 2\n", "larger_than_2" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "0 False\n", "1 False\n", "2 True\n", "3 True\n", "4 True\n", "dtype: bool" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "larger_than_2.any()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "True" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "larger_than_2.all()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "False" ] } ], "prompt_number": 8 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "`apply()`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def f(x):\n", " if x % 2 == 0:\n", " return x * 2\n", " else:\n", " return x * 3\n", "\n", "x.apply(f)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 9, "text": [ "0 3\n", "1 4\n", "2 9\n", "3 8\n", "4 15\n", "dtype: int64" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Avoid looping over your data**\n", "\n", "This is a `%%timeit` results from `apply()` and a for loop." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%timeit\n", "\n", "ds = pd.Series(range(10000))\n", "\n", "for counter in range(len(ds)):\n", " ds[counter] = f(ds[counter])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1 loops, best of 3: 241 ms per loop\n" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "%%timeit\n", "\n", "ds = pd.Series(range(10000))\n", "\n", "ds = ds.apply(f)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "10 loops, best of 3: 40 ms per loop\n" ] } ], "prompt_number": 11 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "`astype()`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "x.astype(np.float64)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 12, "text": [ "0 1\n", "1 2\n", "2 3\n", "3 4\n", "4 5\n", "dtype: float64" ] } ], "prompt_number": 12 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "`copy()`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "y = x" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "y[0]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ "1" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "y[0] = 100" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "y" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ "0 100\n", "1 2\n", "2 3\n", "3 4\n", "4 5\n", "dtype: int64" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "x" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 17, "text": [ "0 100\n", "1 2\n", "2 3\n", "3 4\n", "4 5\n", "dtype: int64" ] } ], "prompt_number": 17 }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Avoid using copy (is you can) to save memory**" ] }, { "cell_type": "code", "collapsed": false, "input": [ "y = x.copy()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "x[0]=1" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "x" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 20, "text": [ "0 1\n", "1 2\n", "2 3\n", "3 4\n", "4 5\n", "dtype: int64" ] } ], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "y" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 21, "text": [ "0 100\n", "1 2\n", "2 3\n", "3 4\n", "4 5\n", "dtype: int64" ] } ], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "x.describe(percentile_width=50)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 22, "text": [ "count 5.000000\n", "mean 3.000000\n", "std 1.581139\n", "min 1.000000\n", "25% 2.000000\n", "50% 3.000000\n", "75% 4.000000\n", "max 5.000000\n", "dtype: float64" ] } ], "prompt_number": 22 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "DataFrame" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "pd.DataFrame(self, data=None, index=None, columns=None, dtype=None, copy=False)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "data = [1,2,3,4,5,6,7,8,9]\n", "df = pd.DataFrame(data, columns=[\"x\"])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "df" ], "language": "python", "metadata": {}, "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", "
x
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
\n", "

9 rows \u00d7 1 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 24, "text": [ " x\n", "0 1\n", "1 2\n", "2 3\n", "3 4\n", "4 5\n", "5 6\n", "6 7\n", "7 8\n", "8 9\n", "\n", "[9 rows x 1 columns]" ] } ], "prompt_number": 24 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Selecting Data" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df[\"x\"]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 25, "text": [ "0 1\n", "1 2\n", "2 3\n", "3 4\n", "4 5\n", "5 6\n", "6 7\n", "7 8\n", "8 9\n", "Name: x, dtype: int64" ] } ], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "df[\"x\"][0]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 26, "text": [ "1" ] } ], "prompt_number": 26 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Adding extra columns" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df[\"x_plus_2\"] = df[\"x\"] + 2\n", "df" ], "language": "python", "metadata": {}, "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", "
xx_plus_2
0 1 3
1 2 4
2 3 5
3 4 6
4 5 7
5 6 8
6 7 9
7 8 10
8 9 11
\n", "

9 rows \u00d7 2 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 27, "text": [ " x x_plus_2\n", "0 1 3\n", "1 2 4\n", "2 3 5\n", "3 4 6\n", "4 5 7\n", "5 6 8\n", "6 7 9\n", "7 8 10\n", "8 9 11\n", "\n", "[9 rows x 2 columns]" ] } ], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "df[\"x_square\"] = df[\"x\"] ** 2\n", "df[\"x_factorial\"] = df[\"x\"].apply(np.math.factorial)\n", "df" ], "language": "python", "metadata": {}, "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", "
xx_plus_2x_squarex_factorial
0 1 3 1 1
1 2 4 4 2
2 3 5 9 6
3 4 6 16 24
4 5 7 25 120
5 6 8 36 720
6 7 9 49 5040
7 8 10 64 40320
8 9 11 81 362880
\n", "

9 rows \u00d7 4 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 28, "text": [ " x x_plus_2 x_square x_factorial\n", "0 1 3 1 1\n", "1 2 4 4 2\n", "2 3 5 9 6\n", "3 4 6 16 24\n", "4 5 7 25 120\n", "5 6 8 36 720\n", "6 7 9 49 5040\n", "7 8 10 64 40320\n", "8 9 11 81 362880\n", "\n", "[9 rows x 4 columns]" ] } ], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "df[\"is_even\"] = df[\"x\"] % 2\n", "df" ], "language": "python", "metadata": {}, "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", "
xx_plus_2x_squarex_factorialis_even
0 1 3 1 1 1
1 2 4 4 2 0
2 3 5 9 6 1
3 4 6 16 24 0
4 5 7 25 120 1
5 6 8 36 720 0
6 7 9 49 5040 1
7 8 10 64 40320 0
8 9 11 81 362880 1
\n", "

9 rows \u00d7 5 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 29, "text": [ " x x_plus_2 x_square x_factorial is_even\n", "0 1 3 1 1 1\n", "1 2 4 4 2 0\n", "2 3 5 9 6 1\n", "3 4 6 16 24 0\n", "4 5 7 25 120 1\n", "5 6 8 36 720 0\n", "6 7 9 49 5040 1\n", "7 8 10 64 40320 0\n", "8 9 11 81 362880 1\n", "\n", "[9 rows x 5 columns]" ] } ], "prompt_number": 29 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "`map()`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df[\"odd_even\"] = df[\"is_even\"].map({1:\"odd\", 0:\"even\"})\n", "df" ], "language": "python", "metadata": {}, "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", "
xx_plus_2x_squarex_factorialis_evenodd_even
0 1 3 1 1 1 odd
1 2 4 4 2 0 even
2 3 5 9 6 1 odd
3 4 6 16 24 0 even
4 5 7 25 120 1 odd
5 6 8 36 720 0 even
6 7 9 49 5040 1 odd
7 8 10 64 40320 0 even
8 9 11 81 362880 1 odd
\n", "

9 rows \u00d7 6 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 30, "text": [ " x x_plus_2 x_square x_factorial is_even odd_even\n", "0 1 3 1 1 1 odd\n", "1 2 4 4 2 0 even\n", "2 3 5 9 6 1 odd\n", "3 4 6 16 24 0 even\n", "4 5 7 25 120 1 odd\n", "5 6 8 36 720 0 even\n", "6 7 9 49 5040 1 odd\n", "7 8 10 64 40320 0 even\n", "8 9 11 81 362880 1 odd\n", "\n", "[9 rows x 6 columns]" ] } ], "prompt_number": 30 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "`drop()`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df = df.drop(\"is_even\", 1)\n", "df" ], "language": "python", "metadata": {}, "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", "
xx_plus_2x_squarex_factorialodd_even
0 1 3 1 1 odd
1 2 4 4 2 even
2 3 5 9 6 odd
3 4 6 16 24 even
4 5 7 25 120 odd
5 6 8 36 720 even
6 7 9 49 5040 odd
7 8 10 64 40320 even
8 9 11 81 362880 odd
\n", "

9 rows \u00d7 5 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 31, "text": [ " x x_plus_2 x_square x_factorial odd_even\n", "0 1 3 1 1 odd\n", "1 2 4 4 2 even\n", "2 3 5 9 6 odd\n", "3 4 6 16 24 even\n", "4 5 7 25 120 odd\n", "5 6 8 36 720 even\n", "6 7 9 49 5040 odd\n", "7 8 10 64 40320 even\n", "8 9 11 81 362880 odd\n", "\n", "[9 rows x 5 columns]" ] } ], "prompt_number": 31 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Multi Column Select" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df[[\"x\", \"odd_even\"]]" ], "language": "python", "metadata": {}, "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", "
xodd_even
0 1 odd
1 2 even
2 3 odd
3 4 even
4 5 odd
5 6 even
6 7 odd
7 8 even
8 9 odd
\n", "

9 rows \u00d7 2 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 32, "text": [ " x odd_even\n", "0 1 odd\n", "1 2 even\n", "2 3 odd\n", "3 4 even\n", "4 5 odd\n", "5 6 even\n", "6 7 odd\n", "7 8 even\n", "8 9 odd\n", "\n", "[9 rows x 2 columns]" ] } ], "prompt_number": 32 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Controlling display options" ] }, { "cell_type": "code", "collapsed": false, "input": [ "pd.options.display.max_columns= 60\n", "pd.options.display.max_rows= 6\n", "pd.options.display.notebook_repr_html = False\n", "df" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 33, "text": [ " x x_plus_2 x_square x_factorial odd_even\n", "0 1 3 1 1 odd\n", "1 2 4 4 2 even\n", "2 3 5 9 6 odd\n", "3 4 6 16 24 even\n", "4 5 7 25 120 odd\n", "5 6 8 36 720 even\n", " .. ... ... ... ...\n", "\n", "[9 rows x 5 columns]" ] } ], "prompt_number": 33 }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Filtering" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df[df[\"odd_even\"] == \"odd\"]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 34, "text": [ " x x_plus_2 x_square x_factorial odd_even\n", "0 1 3 1 1 odd\n", "2 3 5 9 6 odd\n", "4 5 7 25 120 odd\n", "6 7 9 49 5040 odd\n", "8 9 11 81 362880 odd\n", "\n", "[5 rows x 5 columns]" ] } ], "prompt_number": 34 }, { "cell_type": "code", "collapsed": false, "input": [ "df[df.odd_even == \"even\"]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 35, "text": [ " x x_plus_2 x_square x_factorial odd_even\n", "1 2 4 4 2 even\n", "3 4 6 16 24 even\n", "5 6 8 36 720 even\n", "7 8 10 64 40320 even\n", "\n", "[4 rows x 5 columns]" ] } ], "prompt_number": 35 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Chaining Filters" ] }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "`|` OR" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df[(df.odd_even == \"even\") | (df.x_square < 20)]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 36, "text": [ " x x_plus_2 x_square x_factorial odd_even\n", "0 1 3 1 1 odd\n", "1 2 4 4 2 even\n", "2 3 5 9 6 odd\n", "3 4 6 16 24 even\n", "5 6 8 36 720 even\n", "7 8 10 64 40320 even\n", "\n", "[6 rows x 5 columns]" ] } ], "prompt_number": 36 }, { "cell_type": "heading", "level": 4, "metadata": {}, "source": [ "`&` AND" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df[(df.odd_even == \"even\") & (df.x_square < 20)]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 37, "text": [ " x x_plus_2 x_square x_factorial odd_even\n", "1 2 4 4 2 even\n", "3 4 6 16 24 even\n", "\n", "[2 rows x 5 columns]" ] } ], "prompt_number": 37 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Furter Chaining" ] }, { "cell_type": "code", "collapsed": false, "input": [ "df[(df.odd_even == \"even\") & (df.x_square < 20)][\"x_plus_2\"][:1]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 38, "text": [ "1 4\n", "Name: x_plus_2, dtype: int64" ] } ], "prompt_number": 38 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "`scatter_matrix()`" ] }, { "cell_type": "code", "collapsed": false, "input": [ "pd.scatter_matrix(df, diagonal=\"kde\", figsize=(10,10));" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 39 }, { "cell_type": "code", "collapsed": false, "input": [ "df.describe()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 40, "text": [ " x x_plus_2 x_square x_factorial\n", "count 9.000000 9.000000 9.000000 9.000000\n", "mean 5.000000 7.000000 31.666667 45457.000000\n", "std 2.738613 2.738613 28.080242 119758.341137\n", "min 1.000000 3.000000 1.000000 1.000000\n", "25% 3.000000 5.000000 9.000000 6.000000\n", "50% 5.000000 7.000000 25.000000 120.000000\n", " ... ... ... ...\n", "\n", "[8 rows x 4 columns]" ] } ], "prompt_number": 40 }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Reading Data from CSV/TSV Files" ] }, { "cell_type": "code", "collapsed": false, "input": [ "url = \"http://www.google.com/finance/historical?q=TADAWUL:TASI&output=csv\"\n", "stocks_data = pd.read_csv(url)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 41 }, { "cell_type": "code", "collapsed": false, "input": [ "stocks_data" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 42, "text": [ " \ufeffDate Open High Low Close Volume\n", "0 11-Aug-14 10579.12 10603.30 10547.21 10596.55 197234714\n", "1 10-Aug-14 10552.48 10614.11 10551.77 10579.12 199773735\n", "2 7-Aug-14 10478.34 10585.38 10478.34 10552.48 202329194\n", "3 6-Aug-14 10450.52 10494.12 10398.25 10478.34 192868941\n", "4 5-Aug-14 10405.81 10501.38 10405.81 10450.52 287651475\n", "5 4-Aug-14 10302.88 10409.47 10290.95 10405.81 223099538\n", " ... ... ... ... ... ...\n", "\n", "[241 rows x 6 columns]" ] } ], "prompt_number": 42 }, { "cell_type": "code", "collapsed": false, "input": [ "stocks_data[\"change_amount\"] = stocks_data[\"Close\"] - stocks_data[\"Open\"]\n", "stocks_data[\"change_percentage\"] = stocks_data[\"change_amount\"] / stocks_data[\"Close\"]\n", "stocks_data" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 43, "text": [ " \ufeffDate Open High Low Close Volume \\\n", "0 11-Aug-14 10579.12 10603.30 10547.21 10596.55 197234714 \n", "1 10-Aug-14 10552.48 10614.11 10551.77 10579.12 199773735 \n", "2 7-Aug-14 10478.34 10585.38 10478.34 10552.48 202329194 \n", "3 6-Aug-14 10450.52 10494.12 10398.25 10478.34 192868941 \n", "4 5-Aug-14 10405.81 10501.38 10405.81 10450.52 287651475 \n", "5 4-Aug-14 10302.88 10409.47 10290.95 10405.81 223099538 \n", " ... ... ... ... ... ... \n", "\n", " change_amount change_percentage \n", "0 17.43 0.001645 \n", "1 26.64 0.002518 \n", "2 74.14 0.007026 \n", "3 27.82 0.002655 \n", "4 44.71 0.004278 \n", "5 102.93 0.009892 \n", " ... ... \n", "\n", "[241 rows x 8 columns]" ] } ], "prompt_number": 43 } ], "metadata": {} } ] }