Skip to content

Instantly share code, notes, and snippets.

@metakermit
Created June 6, 2013 09:56
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save metakermit/5720498 to your computer and use it in GitHub Desktop.
Save metakermit/5720498 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "pandas-integration"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A numerical integration recipe as discussed [here](https://github.com/pydata/pandas/issues/3759)."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from scipy import integrate\n",
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"def integrate_method(self, how='trapz', unit='s'):\n",
" '''Numerically integrate the time series.\n",
"\n",
" @param how: the method to use (trapz by default)\n",
" @return \n",
"\n",
" Available methods:\n",
" * trapz - trapezoidal\n",
" * cumtrapz - cumulative trapezoidal\n",
" * simps - Simpson's rule\n",
" * romb - Romberger's rule\n",
"\n",
" See http://docs.scipy.org/doc/scipy/reference/integrate.html for the method details.\n",
" or the source code\n",
" https://github.com/scipy/scipy/blob/master/scipy/integrate/quadrature.py\n",
" '''\n",
" available_rules = set(['trapz', 'cumtrapz', 'simps', 'romb'])\n",
" if how in available_rules:\n",
" rule = integrate.__getattribute__(how)\n",
" else:\n",
" print('Unsupported integration rule: %s' % (how))\n",
" print('Expecting one of these sample-based integration rules: %s' % (str(list(available_rules))))\n",
" raise AttributeError\n",
" \n",
" result = rule(self.values, self.index.astype(np.int64) / 10**9)\n",
" #result = rule(self.values)\n",
" return result\n",
"\n",
"pd.TimeSeries.integrate = integrate_method"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 103
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Example of usage\n",
"===\n",
"Sample data"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"x = np.abs(np.random.randn(10000))\n",
"ts = pd.Series(x, pd.date_range(start='2013-05-03', periods=len(x), freq='s'))"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 96
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Default args"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ts.integrate()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 97,
"text": [
"8023.3962287465547"
]
}
],
"prompt_number": 97
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Different methods:\n",
"\n",
"- Cumulative trapezoidal rule - TODO: maybe convert output to pandas timespans in this case"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ts.integrate('cumtrapz')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 65,
"text": [
"array([ 1.50979200e+00, 2.36680665e+00, 2.91839588e+00, ...,\n",
" 7.94300517e+03, 7.94440820e+03, 7.94510764e+03])"
]
}
],
"prompt_number": 65
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" - Simpson's rule"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ts.integrate('simps')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 64,
"text": [
"7945.0431120912626"
]
}
],
"prompt_number": 64
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" - Romberger's rule - number of samples must be one plus a non-negative power of 2."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ts[:1+2**3].integrate('romb')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "pyout",
"prompt_number": 72,
"text": [
"array([ 8.43726871e+09, 8.43726872e+09, 8.43726873e+09,\n",
" 8.43726873e+09, 8.43726874e+09, 8.43726875e+09,\n",
" 8.43726875e+09, 8.43726876e+09, 8.43726876e+09])"
]
}
],
"prompt_number": 72
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Testing for correctness on predictable series\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A straight line covering an area of 12 * 2 = 24"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"twos = pd.Series(2, pd.date_range(start='2012-01-23', periods=13, freq='1s'))\n",
"twos.plot()\n",
"print(twos.integrate('simps'))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"24.0\n"
]
},
{
"output_type": "display_data",
"png": "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\n/R/zTuDfVPpK2AAAAABJRU5ErkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x36d3210>"
]
}
],
"prompt_number": 104
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We should get the same result even if we sampled the data e.g. every 3 seconds"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"twos_sparse = pd.Series(2, pd.date_range(start='2012-01-23 00:00', end='2012-01-23 00:12', freq='3s'))\n",
"twos_sparse.plot()\n",
"print(twos_sparse.integrate('simps'))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1440.0\n"
]
},
{
"output_type": "display_data",
"png": "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\nXknVH46dsprNDLGSd3V1admyZfryl7+sjRs39pn/+te/rry8PBUXF0uSUlJSdOzYMV28eFGvvvqq\nPB6PJKmiokITJkzQ5s2bexdgs404TADgfmP12jnoZSJjjEpLS5WWltZvEEhSQUGBampqJEl1dXWK\njo5WTEyMcnJy1NjYKL/fr87OTu3bt08FBQWWFQ4AsM6gl4lOnjypPXv2KDMzU1lZWZKk8vJyNTU1\nSZLKysq0dOlS1dbWKjExUQ899JB2795998STJun111/XkiVL1NPTo9LSUqWmpka4HQDAxzHkZaKI\nF8BlIgAYtlG9TAQAuD8QBgAAwgAAQBgAAEQYAABEGAAARBgAAEQYAABEGAAARBgAAEQYAABEGAAA\nRBgAAEQYAABEGAAARBgAAEQYAABEGAAARBgAAEQYAABEGAAARBgAAEQYAABEGAAARBgAAEQYAABE\nGAAARBgAAEQYAABEGAAARBgAAEQYAABEGAAARBgAAEQYAABEGAAAFEYYrFu3TjExMcrIyOh3/tq1\nayosLJTL5VJubq7Onj0bmnM6ncrMzFRWVpbmzp1rXdUAAEsNGQZr166Vx+MZcL68vFyzZ8/W6dOn\nVVNTow0bNoTmbDabvF6v6uvr5fP5rKkYAGC5IcNg3rx5mjJlyoDz586dU35+viQpOTlZfr9fV65c\nCc0bYywoEwAQSSO+Z+ByubR//35Jks/n06VLl9Tc3Czp7juDhQsXKicnR1VVVSP9UgCACJk00hN8\n5zvf0YYNG5SVlaWMjAxlZWVp4sSJkqQTJ05o5syZunLlihYtWqSUlBTNmzevzzlKSkrkdDolSdHR\n0XK73crLy5Mkeb1eSWLMmDHj+3rs9XpVXV0tSaH10ko2E8Z1HL/fr+XLl+vMmTNDnjA+Pl5nzpyR\n3W7vtX3Lli2y2+3atGlT7wJsNi4lAcAwWb12jvgy0fvvv6/Ozk5JUlVVlebPny+73a7bt2/r5s2b\nkqRbt27pyJEjAz6RBAAYW0NeJlq1apWOHTum9vZ2xcXFacuWLerq6pIklZWVqaGhQSUlJbLZbEpP\nT9fOnTslSW1tbSosLJQkdXd3a/Xq1Vq8eHEEWwEAfFxhXSaKaAFcJgKAYfvEXSYCAHz6EQYAAMIA\nAEAYAABEGAAARBgAAEQYAABEGAAARBgAAEQYAABEGAAARBgAAEQYAABEGAAARBgAAEQYAABEGAAA\nRBgAAEQYAABEGAAARBgAAEQYAABEGAAARBgAAEQYAABEGAAARBgAAEQYAABEGAAARBgAAEQYAABE\nGAAARBgAAEQYAABEGAAARBgAABRGGKxbt04xMTHKyMjod/7atWsqLCyUy+VSbm6uzp49G5rzeDxK\nSUlRUlKStm3bZl3VAABLDRkGa9eulcfjGXC+vLxcs2fP1unTp1VTU6MNGzZIknp6evTCCy/I4/Go\noaFBe/fu1blz56yrHABgmSHDYN68eZoyZcqA8+fOnVN+fr4kKTk5WX6/X5cvX5bP51NiYqKcTqei\noqJUXFysgwcPWlc5AMAyk0Z6ApfLpf379+tLX/qSfD6fLl26pObmZgWDQcXFxYX2czgcOnXqVL/n\nKCkpkdPplCRFR0fL7XYrLy9PkuT1eiWJMWPGjO/rsdfrVXV1tSSF1ksr2YwxZqid/H6/li9frjNn\nzvSZu3nzpjZs2KD6+nplZGTo3XffVVVVlS5cuCCPx6OqqipJ0p49e3Tq1Cm99tprvQuw2RRGCQCA\ne1i9do74ncHkyZO1a9eu0Dg+Pl4JCQn64IMPFAgEQtsDgYAcDsdIvxwAIAJG/Gjp+++/r87OTklS\nVVWV5s+fL7vdrpycHDU2Nsrv96uzs1P79u1TQUHBiAsGAFhvyHcGq1at0rFjx9Te3q64uDht2bJF\nXV1dkqSysjI1NDSopKRENptN6enp2rlz590TT5qk119/XUuWLFFPT49KS0uVmpoa2W4AAB9LWPcM\nIloA9wwAYNisXjv5CWQAAGEAACAMAAAiDAAAIgwAACIMAAAiDAAAIgwAACIMAAAiDAAAIgwAACIM\nAAAiDAAAIgwAACIMAAAiDAAAIgwAACIMAAAiDAAAIgwAACIMAAAiDAAAIgwAACIMAAAiDAAAIgwA\nACIMAAAiDAAAIgwAACIMAAAiDAAAIgwAACIMAAAiDAAAIgwAAAojDNatW6eYmBhlZGT0O9/e3q4n\nn3xSbrdb6enpqq6uDs05nU5lZmYqKytLc+fOtaxoAIC1bMYYM9gOf//732W32/XVr35VZ86c6TP/\n6quv6s6dO6qoqFB7e7uSk5PV1tamSZMmKT4+Xm+//bamTp06cAE2m4YoAQDwP6xeO4d8ZzBv3jxN\nmTJlwPkZM2boxo0bkqQbN27oc5/7nCZNmhSav98Xeq/XO9YlRNR47m889ybRH3ob8T2D559/XmfP\nntXMmTPlcrm0Y8eO0JzNZtPChQuVk5OjqqqqkX6pT6Xx/h9yPPc3nnuT6A//w4Th4sWLJj09vd+5\nH/7wh2bDhg3GGGMuXLhg4uPjzY0bN4wxxrS0tBhjjLl8+bJxuVzm+PHjfY6XxIsXL168PsbLSv9/\nPedjeuONN/Tyyy9LkhISEhQfH6/z588rJydHM2bMkCRNmzZNhYWF8vl8mjdvXq/jzX1+GQkAPglG\nfJkoJSVFR48elSS1tbXp/PnzevTRR3X79m3dvHlTknTr1i0dOXJkwCeSAABja8h3BqtWrdKxY8fU\n3t6uuLg4bdmyRV1dXZKksrIyfe9739PatWvlcrn03//+Vz/+8Y81depU/ec//9FTTz0lSeru7tbq\n1au1ePHiyHYDAPh4rLzmdPjwYZOcnGwSExPN1q1bjTHGXL161SxcuNAkJSWZRYsWmWvXroV97HCO\nHw2R6O9b3/qWSUlJMZmZmaawsNBcv359VHoJt8aR9veRn/70p8Zms5mrV69GtIfBRKq/yspKk5KS\nYmbNmmW+/e1vR7yPgUSiv1OnTpk5c+YYt9ttcnJyjM/nG5Vewqkv3N7Wrl1rHn744T73PcfL2jJQ\nf8NdWywLg+7ubpOQkGAuXrxoOjs7jcvlMg0NDeall14y27ZtM8YYs3XrVrN58+awjzXGhHX8aIhU\nf0eOHDE9PT3GGGM2b9487vozxpimpiazZMkS43Q6xywMItXfX//6V7Nw4ULT2dlpjLn7sMRYiFR/\n8+fPNx6PxxhjTG1trcnLyxu9poaoL9y14fjx4+add97ps1iOh7XFmIH7G+7aYlkYvPHGG2bJkiWh\ncUVFhSkvLzfJycmmtbXVGGPMe++9Z5KTk8M6tqKiwhhjwjp+NESqv3vt37/frF69OgLVDy2S/RUV\nFZnTp0+PaRhEqr+nn37a/OUvf4lw9UOLVH/FxcVm3759xhhjfv/734/J/8+R9PaR/p6IHA9ry0cG\ne+LTmPDWFss+mygYDCouLi40djgcCgaDamtrU0xMjCQpJiZGbW1tkqSWlhZ95StfGfRYSQMeP9oi\n1d+9du3apaVLl0ayjQFFqr+DBw/K4XAoMzNztFrpV6T6a2xs1PHjx/XYY48pLy9Pb7311mi11Euk\n+tu6das2bdqkRx55RC+99JIqKipGq6WQkfQ2mPGwtoQrnLXFsjCw2WxDbrPZbKFtM2fO1J/+9Kd+\n9zPGDHi+/raPBiv768+PfvQjPfDAA3r22WctqHb4ItHfBx98oPLycm3ZsiW0zYzRo8SR+vfr7u7W\ntWvXVFdXp5/85Cd65plnLKw6fJHqr7S0VJWVlWpqatL27du1bt06C6sOz0h6G87X+DSuLeEId22x\nLAxiY2MVCARC40AgoNjYWMXExKi1tVWS9N577+nhhx8e8tjm5mbFxsZKUljHjwYr+wsEAnI4HKFx\ndXW1amtr9bvf/S6CHQwuEv39+9//lt/vl8vlUnx8vJqbm5Wdna3Lly9HvqEwarTi38/hcISempsz\nZ44mTJigq1evRrKVfkWqP5/Pp8LCQklSUVGRfD5fJNvo10h6G8x4WFuGMqy1ZVgXtwbR1dVlHn30\nUXPx4kVz586dXjdBPro7XlFR0e9NjIGONcaEdfxoiFR/hw8fNmlpaebKlSuj2k+4NY60v3uN5T2D\nSPX3y1/+0rzyyivGGGPOnz9v4uLiRq+pMGocaX9ZWVnG6/UaY4w5evSoycnJGb2mhqhvOGtDf9fU\nx8Pa8pH++hvu2mLpo6W1tbXmC1/4gklISDDl5eXGmLuPRy1YsKDP41HBYNAsXbp00GMHO34sRKK/\nxMRE88gjjxi3223cbrdZv3796DZ1j0j0d6/4+PgxfbQ0Ev11dnaaNWvWmPT0dDN79mzzt7/9bVR7\nulck+nvzzTfN3LlzjcvlMo899ph55513RrepQeoLt7fi4mIzY8YM88ADDxiHw2F27do16PFjIRL9\nDXdtGfIjrAEA4x+/6QwAQBgAAAgDAIAsCoNAIKD8/HzNmjVL6enpqqyslCR9//vfl8vlktvt1oIF\nC3o9PnUvv9/PJ5oCwBiy5AZya2urWltb5Xa71dHRoezsbB04cEAOh0OTJ0+WJL322ms6ffq0fv3r\nX/c53u/3a/ny5f3+jmUAQORZ8s5g+vTpcrvdkiS73a7U1FS1tLSEgkCSOjo69PnPf37Ic/n9fj3x\nxBPKzs5Wdna2/vGPf0i6+yvs8vLy9PTTTys1NVVr1qyxonQAgML4fQbD5ff7VV9fr9zcXEnSyy+/\nrN/+9rf67Gc/q7q6uiGPj4mJ0Z///Gc9+OCDamxs1LPPPqs333xTkvTPf/5TDQ0NmjFjhh5//HGd\nPHlSjz/+uNUtAMB9x9IbyB0dHSoqKtKOHTtkt9sl3f1cjKamJpWUlOib3/zmkOfo7OzU1772NWVm\nZuqZZ57RuXPnQnNz587VzJkzZbPZ5Ha75ff7rSwfAO5bloVBV1eXVq5cqTVr1mjFihV95u/9Dn/t\n2rXKysrSsmXL+uy3fft2zZgxQ//617/01ltv6c6dO6G5Bx98MPT3iRMnqru726ryAeC+ZsllImOM\nSktLlZaWpo0bN4a2NzY2KikpSdLdjzLOysqSJO3evXvAc924cSP0IVk1NTXq6emxokQAwCAsCYOT\nJ09qz549yszMDC345eXl2rlzp86fP6+JEycqISFBv/jFL/o9vru7O/Rd/ze+8Q2tXLlSNTU1evLJ\nJ0OXm6T+P9YVADByn4jPJjp48KD27t2rP/zhD2NdCgDclyx/mmi4XnnlFR06dEi/+c1vxroUALhv\nfSLeGQAAxhafTQQAIAwAAIQBAECEAQBAhAEAQIQBAEDS/wGc493QdxTrogAAAABJRU5ErkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x36c5410>"
]
}
],
"prompt_number": 105
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A diagonal, closing a triangle 12 * 12 / 2 = 72"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"lin = pd.Series(np.arange(13), pd.date_range(start='2012-01-23', periods=13, freq='1s'))\n",
"lin.plot()\n",
"print(lin.integrate())"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"72.0\n"
]
},
{
"output_type": "display_data",
"png": "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\nuAAAAABJRU5ErkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x3a3cc50>"
]
}
],
"prompt_number": 89
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Benchmarking\n",
"---------------\n",
"Overcomes the bottleneck illustrated [here](http://nbviewer.ipython.org/5512857)"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%timeit ts.integrate()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"1000 loops, best of 3: 237 \u00b5s per loop\n"
]
}
],
"prompt_number": 61
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Tests\n",
"======="
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Non-existing method"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"ts.integrate('homers')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "AttributeError",
"evalue": "",
"output_type": "pyerr",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-73-9795db05ffcd>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mts\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mintegrate\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'homers'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m<ipython-input-63-e2ac6ebfcf13>\u001b[0m in \u001b[0;36mintegrate_method\u001b[1;34m(self, how, unit)\u001b[0m\n\u001b[0;32m 24\u001b[0m \u001b[1;32mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'Unsupported integration rule: %s'\u001b[0m \u001b[1;33m%\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mhow\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 25\u001b[0m \u001b[1;32mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'Expecting one of these sample-based integration rules: %s'\u001b[0m \u001b[1;33m%\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mstr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mavailable_rules\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 26\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mAttributeError\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 27\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 28\u001b[0m \u001b[1;31m#result = integrate.trapz(ts.values, ts.index.astype(np.int64) / 10**9)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mAttributeError\u001b[0m: "
]
},
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Unsupported integration rule: homers\n",
"Expecting one of these sample-based integration rules: ['romb', 'simps', 'trapz', 'cumtrapz']\n"
]
}
],
"prompt_number": 73
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment