├── .travis.yml ├── MANIFEST.in ├── README.rst ├── notebook ├── changepoint.ipynb └── outlier.ipynb ├── pydetect ├── __init__.py ├── base.py ├── changepoint.py ├── datasets.py ├── outlier.py ├── tests │ ├── __init__.py │ ├── test_changepoint.py │ ├── test_datasets.py │ └── test_outlier.py └── version.py ├── requirements.txt ├── scripts └── build_travis.sh └── setup.py /.travis.yml: -------------------------------------------------------------------------------- 1 | language: python 2 | 3 | env: 4 | - PYTHON=2.7 PANDAS=0.19.2 5 | - PYTHON=2.7 PANDAS=0.20.2 6 | - PYTHON=3.5 PANDAS=0.19.2 7 | - PYTHON=3.6 PANDAS=0.20.2 8 | - PYTHON=3.6 PANDAS=0.21.0 COVERAGE=true 9 | 10 | addons: 11 | apt: 12 | packages: 13 | - graphviz 14 | 15 | install: 16 | - bash scripts/build_travis.sh 17 | 18 | before_script: 19 | - "export DISPLAY=:99.0" 20 | - "sh -e /etc/init.d/xvfb start" 21 | - sleep 3 # give xvfb some time to start 22 | 23 | script: 24 | - export PATH="$HOME/miniconda/bin:$PATH" 25 | - source activate myenv 26 | - python -m nose --with-coverage --cover-package=pydetect 27 | - flake8 pydetect 28 | 29 | after_success: 30 | - if [ "$COVERAGE" ]; then 31 | coveralls; 32 | fi 33 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include MANIFEST.in 2 | include README.rst 3 | include requirements.txt 4 | include setup.py -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | pydetect 2 | ======== 3 | 4 | .. image:: https://readthedocs.org/projects/pydetect/badge/?version=latest 5 | :target: http://pydetect.readthedocs.org/en/latest/ 6 | :alt: Latest Docs 7 | .. image:: https://travis-ci.org/sinhrks/pydetect.svg?branch=master 8 | :target: https://travis-ci.org/sinhrks/pydetect 9 | .. image:: https://coveralls.io/repos/sinhrks/pydetect/badge.svg?branch=master&service=github 10 | :target: https://coveralls.io/github/sinhrks/pydetect?branch=master 11 | 12 | Change point and anomaly detections for time-series. 13 | See `notebook `_ to check basic usage. 14 | 15 | Change point detection 16 | ---------------------- 17 | 18 | Mean or / and variance shift (at most one change) 19 | """"""""""""""""""""""""""""""""""""""""""""""""" 20 | 21 | - CUMSUM statistics 22 | 23 | - ``MeanDetector`` 24 | - ``VarianceDetector`` 25 | - ``MeanVarianceDetector`` 26 | 27 | Anomaly detection 28 | ----------------- 29 | 30 | Generalized ESD Test 31 | """""""""""""""""""" 32 | 33 | - ``GESDDetector`` 34 | 35 | See http://www.itl.nist.gov/div898/handbook/eda/section3/eda35h3.htm 36 | -------------------------------------------------------------------------------- /notebook/changepoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "% matplotlib inline\n", 12 | "\n", 13 | "import matplotlib.style\n", 14 | "import matplotlib.pyplot as plt\n", 15 | "plt.rcParams['figure.figsize'] = 12, 4\n", 16 | "matplotlib.style.use('ggplot')" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": 2, 22 | "metadata": { 23 | "collapsed": true 24 | }, 25 | "outputs": [], 26 | "source": [ 27 | "import pandas as pd\n", 28 | "pd.set_option('display.max_rows', 8)" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 3, 34 | "metadata": { 35 | "collapsed": true 36 | }, 37 | "outputs": [], 38 | "source": [ 39 | "import pydetect" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 4, 45 | "metadata": { 46 | "collapsed": false 47 | }, 48 | "outputs": [ 49 | { 50 | "data": { 51 | "text/plain": [ 52 | "" 53 | ] 54 | }, 55 | "execution_count": 4, 56 | "metadata": {}, 57 | "output_type": "execute_result" 58 | }, 59 | { 60 | "data": { 61 | "image/png": "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\ngg==\n", 62 | "text/plain": [ 63 | "" 64 | ] 65 | }, 66 | "metadata": {}, 67 | "output_type": "display_data" 68 | } 69 | ], 70 | "source": [ 71 | "nile = pydetect.datasets.get_nile()\n", 72 | "nile.plot()" 73 | ] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "execution_count": 5, 78 | "metadata": { 79 | "collapsed": false, 80 | "scrolled": true 81 | }, 82 | "outputs": [ 83 | { 84 | "name": "stderr", 85 | "output_type": "stream", 86 | "text": [ 87 | "/Users/sin/anaconda/envs/py35/lib/python3.5/site-packages/pydetect-0.1.0.dev0-py3.5.egg/pydetect/changepoint.py:22: RuntimeWarning: invalid value encountered in true_divide\n" 88 | ] 89 | }, 90 | { 91 | "data": { 92 | "text/plain": [ 93 | "1871-01-01 0.0\n", 94 | "1872-01-01 0.0\n", 95 | "1873-01-01 0.0\n", 96 | "1874-01-01 0.0\n", 97 | " ... \n", 98 | "1967-01-01 0.0\n", 99 | "1968-01-01 0.0\n", 100 | "1969-01-01 0.0\n", 101 | "1970-01-01 0.0\n", 102 | "Freq: AS-JAN, dtype: float64" 103 | ] 104 | }, 105 | "execution_count": 5, 106 | "metadata": {}, 107 | "output_type": "execute_result" 108 | } 109 | ], 110 | "source": [ 111 | "detector = pydetect.MeanDetector()\n", 112 | "cpt = detector.detect(nile)\n", 113 | "cpt" 114 | ] 115 | }, 116 | { 117 | "cell_type": "code", 118 | "execution_count": 6, 119 | "metadata": { 120 | "collapsed": false 121 | }, 122 | "outputs": [ 123 | { 124 | "data": { 125 | "text/plain": [ 126 | "" 127 | ] 128 | }, 129 | "execution_count": 6, 130 | "metadata": {}, 131 | "output_type": "execute_result" 132 | }, 133 | { 134 | "data": { 135 | "image/png": "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\ns2lVrx4AAFA1BGbADdPFlAx2mAEACCQCM+CGWaxwh5keZgAAgorADFTILpUkW4rU1ZX/IKZkAAAQ\nWARmoFKVTsjQ4tHYzGEGACCQCMxApSptx5AWWzIIzAAABBGBGahUpTf8SRyNDQBAgBGYgUpVOoNZ\nWuxhJjADABBEBGagUpXOYJYWdqQt5jADABBEBGagUrRkAACwrRCYgUq5vumPwAwAQBARmIFKue5h\nZkoGAABBRGAGKmVZ7loymMMMAEAgGU4/tCxLfX19KhQKampqUmdnp6trgFAxi5LBHGYAALYLxx3m\nwcFBNTc3q7e3V5OTkxoeHnZ1DRAmtllUpNIdZiMmWfQwAwAQRI6BOZ/Pq729Xfl8XslkUqOjo66u\nAULFMivvYa6rk+bnZc+XqlMTAACoGsfAPDMzo3g8rqGhIaXTaU1NTbm6BggVs/I5zJFIZLEtg1nM\nAAAEjWMPcyKRUDabVTqdVqFQUGNjo6tr1lP6/z+rvGLAZzOGoVIlh4rc/g9FDrdW/gfF6jX/2r9J\ndY5/7YBVKl6jwCZjjaLm/d/XPD3c8b/cqVRKIyMjamlpUX9/v1pbF0LC7Oys4vG44zUr5XI55XK5\npa8zmYz+m8figUD57b9vdQUAAGxbAwMDS5+nUimlUqmyH+vYktHR0aH6+np1d3fLsiy1tbVpbm5O\nJ06c0J07d9a9Zi2pVEqZTGbpYzM9+AJtJepYrlbq6Onp2eoSaua1oI7laqUO1uh91LFcrdRRC2tU\nqo3XoxZqkKhjpZ6enmU5tJKwLG2ww2wYhrq6upZ9r6GhQWfOnHG8ptZU+qJUC3UsVyt17Nu3b6tL\nqJnXgjqWq5U6WKP3UcdytVJHLaxRqTZej1qoQaKOlbyu0Yht27ZPtQCBNDAwsOn/rwdQCdYoah1r\nFLXO6xrlpD9se7Xyv36B9bBGUetYo6h1XtcoO8wAAACAA3aYAQAAAAcEZgAAAMABJygg1M6fP69f\n/epXOn36tHbt2qWzZ8/q5s2bisViev755zU1NaX+/n7Nzc3p0KFD+u53v6t8Pq9f/OIX+tSnPiVJ\n+s53vqPPfvazW/ybIKweXKN3795dtR4nJyd1+vRp2batUqmkkydPyjAM9fX1qVAoqKmpSZ2dnVv9\nayDENlqj92SzWY2Pj6uzs5P3UWy6jdbp5cuX9fvf/16Slr7/ve99r+z30rqXXnrppU36XYBNdePG\nDd26dUt37tzRl7/8Zc3Nzekvf/mLfvKTn+jatWv6xCc+oWw2q2eeeUbPPvus3nnnHe3du1fz8/Pa\ntWuXOjs7dfToUe3du3erfxWE1Mo1+uabb65aj/v379fRo0f19a9/XWNjY3rooYc0OjqqaDSqH/7w\nh/rDH/6geDyu5ubmrf51EELlrNGHH35Yk5OTymaz2rVrl5566indunWL91FsmnLWaSqV0tGjR3X0\n6FH961//0uHDh/X++++X/V5KSwZC69ChQ3r66aeXvt69e7fm5ub03nvvaWpqSi0tLbp7964kybIs\nTU9P6+rVq4pGo/rrX/+qn/3sZ3r33Xe3qnxsAyvX6Frrsb6+XoZhyDRNffDBBzp06JDy+bza29uV\nz+eVTCY1Ojq6Vb8CQq6cNSpJb7zxhp577rml63gfxWYqd51K0j/+8Q/dvHlTTz75ZEXvpbRkYFt5\n5JFHlM1mlUqltGPHDmUyGf3617+WJD366KOanp5WMpnUz3/+c01NTenll1/W/v379ZnPfGaLK8d2\nsNZ6vOfs2bP61re+pYaGBs3MzCgej+utt97SM888ozfffHOrSsY2s9Yaffvtt3XkyJFlu8i8j2Ir\nOb2X/uY3v9H3v/99SarovZTAjG3j0qVLkqTu7m698sorunz5slpbW/XTn/5UkvTHP/5RD05Z3LNn\nj77yla/o73//O2/02BQHDx5ccz2eO3dOR44c0ec//3lJUiKRUDabVTqdVqFQUGNj45bVjO1lrTV6\n8eJFzc3N6fz587p9+7Zef/11HTt2TBLvo9ga672Xvvvuu3rsscf08MMPS6rsvZSWDGwLtm1rYmJC\ne/bskbSw+zExMaH5+XlJkmmaGhwc1JEjRzQ7O7v0l+vatWv69Kc/vWV1Y3tZaz2Oj49rfHxcTz75\n5NJ1qVRKH374oVpaWvTnP/9ZTzzxxFaVjG1mrTX6wgsvqKenR11dXfriF7+oY8eO8T6KLbXWOpWk\nkZERfelLX1q6rpL3UnaYEVpjY2M6d+6cxsfH9dprr+nxxx/XxYsX9be//U2GYejEiRO6efOmfvnL\nX6qurk7f+MY3dPDgQV25ckW//e1vZRiGHn/8cX3hC1/Y6l8FIfXgGn311Vd1+PBhDQ0NLVuP77zz\njq5fv67e3l5J0je/+U11dHToypUr6u7u1oEDB9TW1rbFvwnCqpw1upbr16/zPopNU+46LRQKSiQS\nS4+r5L2Uk/4AAAAAB7RkAAAAAA4IzAAAAIADAjMAAADggMAMAAAAOCAwAwAAAA4IzAAAAIADAjMA\nAADggMAMAAAAOPgvLPF/t0hSFE4AAAAASUVORK5CYII=\n", 136 | "text/plain": [ 137 | "" 138 | ] 139 | }, 140 | "metadata": {}, 141 | "output_type": "display_data" 142 | } 143 | ], 144 | "source": [ 145 | "cpt.plot()" 146 | ] 147 | }, 148 | { 149 | "cell_type": "code", 150 | "execution_count": null, 151 | "metadata": { 152 | "collapsed": true 153 | }, 154 | "outputs": [], 155 | "source": [] 156 | } 157 | ], 158 | "metadata": { 159 | "kernelspec": { 160 | "display_name": "Python 3", 161 | "language": "python", 162 | "name": "python3" 163 | }, 164 | "language_info": { 165 | "codemirror_mode": { 166 | "name": "ipython", 167 | "version": 3 168 | }, 169 | "file_extension": ".py", 170 | "mimetype": "text/x-python", 171 | "name": "python", 172 | "nbconvert_exporter": "python", 173 | "pygments_lexer": "ipython3", 174 | "version": "3.5.2" 175 | } 176 | }, 177 | "nbformat": 4, 178 | "nbformat_minor": 0 179 | } 180 | -------------------------------------------------------------------------------- /notebook/outlier.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "% matplotlib inline\n", 12 | "\n", 13 | "import matplotlib.style\n", 14 | "import matplotlib.pyplot as plt\n", 15 | "plt.rcParams['figure.figsize'] = 12, 4\n", 16 | "matplotlib.style.use('ggplot')" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": 2, 22 | "metadata": { 23 | "collapsed": true 24 | }, 25 | "outputs": [], 26 | "source": [ 27 | "import numpy as np\n", 28 | "import pandas as pd\n", 29 | "pd.set_option('display.max_rows', 8)" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 3, 35 | "metadata": { 36 | "collapsed": false 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "import pydetect" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 4, 46 | "metadata": { 47 | "collapsed": false 48 | }, 49 | "outputs": [ 50 | { 51 | "data": { 52 | "text/plain": [ 53 | "" 54 | ] 55 | }, 56 | "execution_count": 4, 57 | "metadata": {}, 58 | "output_type": "execute_result" 59 | }, 60 | { 61 | "data": { 62 | "image/png": "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\nAAAAAElFTkSuQmCC\n", 63 | "text/plain": [ 64 | "" 65 | ] 66 | }, 67 | "metadata": {}, 68 | "output_type": "display_data" 69 | } 70 | ], 71 | "source": [ 72 | "data = np.random.randn(100)\n", 73 | "data[40] = 5.\n", 74 | "s = pd.Series(data)\n", 75 | "s.plot()" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 5, 81 | "metadata": { 82 | "collapsed": false 83 | }, 84 | "outputs": [ 85 | { 86 | "data": { 87 | "text/plain": [ 88 | "0 0.0\n", 89 | "1 0.0\n", 90 | "2 0.0\n", 91 | "3 0.0\n", 92 | " ... \n", 93 | "96 0.0\n", 94 | "97 0.0\n", 95 | "98 0.0\n", 96 | "99 0.0\n", 97 | "dtype: float64" 98 | ] 99 | }, 100 | "execution_count": 5, 101 | "metadata": {}, 102 | "output_type": "execute_result" 103 | } 104 | ], 105 | "source": [ 106 | "detector = pydetect.GESDDetector()\n", 107 | "anm = detector.detect(s)\n", 108 | "anm" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": 6, 114 | "metadata": { 115 | "collapsed": false 116 | }, 117 | "outputs": [ 118 | { 119 | "data": { 120 | "text/plain": [ 121 | "" 122 | ] 123 | }, 124 | "execution_count": 6, 125 | "metadata": {}, 126 | "output_type": "execute_result" 127 | }, 128 | { 129 | "data": { 130 | "image/png": "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\n98/NAAAAAElFTkSuQmCC\n", 131 | "text/plain": [ 132 | "" 133 | ] 134 | }, 135 | "metadata": {}, 136 | "output_type": "display_data" 137 | } 138 | ], 139 | "source": [ 140 | "anm.plot()" 141 | ] 142 | }, 143 | { 144 | "cell_type": "code", 145 | "execution_count": 7, 146 | "metadata": { 147 | "collapsed": false 148 | }, 149 | "outputs": [ 150 | { 151 | "data": { 152 | "text/plain": [ 153 | "" 154 | ] 155 | }, 156 | "execution_count": 7, 157 | "metadata": {}, 158 | "output_type": "execute_result" 159 | }, 160 | { 161 | "data": { 162 | "image/png": "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\nLCIiIiJh6f8AYvJ3DjGS2acAAAAASUVORK5CYII=\n", 163 | "text/plain": [ 164 | "" 165 | ] 166 | }, 167 | "metadata": {}, 168 | "output_type": "display_data" 169 | } 170 | ], 171 | "source": [ 172 | "ap = pydetect.datasets.get_airpassengers()\n", 173 | "ap[50] += 100\n", 174 | "ap.plot()" 175 | ] 176 | }, 177 | { 178 | "cell_type": "code", 179 | "execution_count": 8, 180 | "metadata": { 181 | "collapsed": false 182 | }, 183 | "outputs": [ 184 | { 185 | "data": { 186 | "text/plain": [ 187 | "1949-01-01 0.0\n", 188 | "1949-02-01 0.0\n", 189 | "1949-03-01 0.0\n", 190 | "1949-04-01 0.0\n", 191 | " ... \n", 192 | "1960-09-01 0.0\n", 193 | "1960-10-01 0.0\n", 194 | "1960-11-01 0.0\n", 195 | "1960-12-01 0.0\n", 196 | "Freq: MS, dtype: float64" 197 | ] 198 | }, 199 | "execution_count": 8, 200 | "metadata": {}, 201 | "output_type": "execute_result" 202 | } 203 | ], 204 | "source": [ 205 | "# if input has trend and seasonality, use decompose=True\n", 206 | "detector = pydetect.GESDDetector(decompose=True)\n", 207 | "anm = detector.detect(ap)\n", 208 | "anm" 209 | ] 210 | }, 211 | { 212 | "cell_type": "code", 213 | "execution_count": 9, 214 | "metadata": { 215 | "collapsed": false 216 | }, 217 | "outputs": [ 218 | { 219 | "data": { 220 | "text/plain": [ 221 | "" 222 | ] 223 | }, 224 | "execution_count": 9, 225 | "metadata": {}, 226 | "output_type": "execute_result" 227 | }, 228 | { 229 | "data": { 230 | "image/png": "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\nv79fkrS2tqZ4PO675lbZbFbZbLb8OJPJ6F9rbArALvXIo6X/AAAImOnp6fLXqVRKqVTKvzViaGhI\nnZ2dGh0dlWVZGhgY0Pr6uk6cOKHr16/XXOMllUopk8mU/xsbG7uDb233ufk321TUMNioX7CZXj+J\nGgYd9Qs2E+t3cw5NpVKS6lwRjsViGhkZqXquq6tLk5OTvmu24+DBg7f9miDZ+g02GTUMNuoXbKbX\nT6KGQUf9gs30+m1p2YEan/jEJ1r1o5siDH+AqGGwUb9gM71+EjUMOuoXbKbXb0vLgnBYfoNNRg2D\njfoFG/ULPmoYbNTPDBHHcZxWbwIAAABotpZdEQYAAABaiSAMAACAUKpzjNTOnTlzRi+88IKef/55\n3bhxQ1NTU1pfX9eRI0f0gx/8oLxuZmZGly5d0vDwsK5evVpzHZqrXv1yuZx+8YtflG8W+P73v6/P\nfOYzVa/bu3dvi99FuO2khtFoVJOTk4rFYurp6dHw8HCL30V47aR+169f9/xcovl2Ur9CoaDf/e53\nklRee+zYsVa+jVDbSQ337dtHjgmYhgThpaUlFYtFJZNJSaVZdN/+9rd177336uc//7nOnz+ve++9\nV8vLyzp79qx6enp816G5tlM/SfrGN76hhx56qObr0Do7raFt2/rpT38qSXrqqaf0z3/+U4cOHWr+\nGwi5ndYvl8u5nkPz7bR+ksqHUp0+fZr/EdNCO63hc889R44JmIa0Rhw5ckQPPvhg+fGNGzckSZZl\naWVlRefOnZMkvfTSS3r44YfrrkNzbad+7e3teu211/Tkk0/q9ddf93wdWmenNYxGo5KkDz74QGtr\na7d1ZDrunJ3Wz+s5NN9O67flH//4hy5cuKAvfelLTd03KnZaQ3JM8DSsNeJmmUxGv/rVryRJ99xz\nj1ZWVvTKK6/o6NGjOnDggO86tJ5XXZLJpJ555hkVCgU9/fTTuvvuu/XpT3+6xTtFLbdTw9/85jd6\n9dVX9dWvflV79uxp8c4hbb9+fC53p9v9O/TXv/41LRG7zHZrSI4JnqYE4cOHD+vHP/6xJOn3v/+9\nHMfRG2+8ofX1dZ05c0ZXrlzRqVOndOzYMdc6tJ5X/bbs379fX/va1/S3v/2Nf3B3sdup4Xe/+119\n5zvf0QsvvKA//elPGhoaatW2sel2P4N8LneX26nf66+/rvvuu0933XVXq7YLD9utYTqdJscETFOm\nRmxsbEiSisWiZmdndfToUT322GMaGxvTyMiIvvjFL+rYsWOe69B6XnVZW1srf8DPnz+vT37yk63c\nIurYbg2LxaIkKRKJ6GMf+5gsy2rZnlGx3frxudydbufv0IWFBX3lK19p2V7hbbs1JMcET0OuCF+8\neFGnT5/WpUuX9Oyzz+r+++/X3NycotGovvnNb+rw4cOer7tw4YJ++ctf1l2HxtpO/d566y399re/\nVSwW0+c//3l97nOfc71ucHBQDzzwQKvfTijttIZ//etf9fLLL6utrU0f//jH9a1vfavVbyWUdlo/\nr+fQfDutnyTl83klEokWvwPstIZLS0vkmIDhZDkAAACEEgdqAAAAIJQIwgAAAAglgjAAAABCiSAM\nAACAUCIIAwAAIJQIwgAAAAglgjAAAABCiSAMAACAUPp/re+CajBTggoAAAAASUVORK5CYII=\n", 231 | "text/plain": [ 232 | "" 233 | ] 234 | }, 235 | "metadata": {}, 236 | "output_type": "display_data" 237 | } 238 | ], 239 | "source": [ 240 | "anm.plot()" 241 | ] 242 | }, 243 | { 244 | "cell_type": "code", 245 | "execution_count": null, 246 | "metadata": { 247 | "collapsed": true 248 | }, 249 | "outputs": [], 250 | "source": [] 251 | } 252 | ], 253 | "metadata": { 254 | "kernelspec": { 255 | "display_name": "Python 3", 256 | "language": "python", 257 | "name": "python3" 258 | }, 259 | "language_info": { 260 | "codemirror_mode": { 261 | "name": "ipython", 262 | "version": 3 263 | }, 264 | "file_extension": ".py", 265 | "mimetype": "text/x-python", 266 | "name": "python", 267 | "nbconvert_exporter": "python", 268 | "pygments_lexer": "ipython3", 269 | "version": "3.5.2" 270 | } 271 | }, 272 | "nbformat": 4, 273 | "nbformat_minor": 0 274 | } 275 | -------------------------------------------------------------------------------- /pydetect/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding: utf-8 3 | 4 | from pydetect.changepoint import (MeanDetector, VarianceDetector, # noqa 5 | MeanVarianceDetector) # noqa 6 | import pydetect.datasets as datasets # noqa 7 | from pydetect.outlier import GESDDetector # noqa 8 | -------------------------------------------------------------------------------- /pydetect/base.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding: utf-8 3 | 4 | import numpy as np 5 | import pandas as pd 6 | 7 | 8 | class BaseDetector(object): 9 | 10 | def __init__(self, decompose=False): 11 | self.decompose = decompose 12 | 13 | def detect(self, data): 14 | raise NotImplementedError 15 | 16 | def get_statistics(self, data): 17 | raise NotImplementedError 18 | 19 | def _validate(self, data): 20 | """ validate data """ 21 | self._original = data 22 | 23 | if self.decompose: 24 | data = self._decompose(data) 25 | 26 | data = np.asarray(data) 27 | if data.ndim > 2: 28 | raise ValueError('Input must be less than 2 dimentions') 29 | elif data.ndim == 2 and data.shape[1] > 1: 30 | raise ValueError('Input must be univariate') 31 | 32 | return data 33 | 34 | def _decompose(self, data): 35 | try: 36 | import statsmodels.api as sm 37 | except ImportError: 38 | msg = ('statsmodels >= 0.6.0 is required to perform ' 39 | 'seasonal decomposition') 40 | raise ImportError(msg) 41 | 42 | # if not isinstance(data, pd.Series): 43 | # raise ValueError('Input must be pd.Series') 44 | 45 | # ToDo: 46 | # - check DatetimeIndex and freq 47 | 48 | decomposed = sm.tsa.seasonal_decompose(data) 49 | resid = decomposed.resid 50 | 51 | self._decompose_indexer = pd.notnull(resid.values) 52 | resid = resid[self._decompose_indexer] 53 | return resid 54 | 55 | def _wrap_result(self, data, result): 56 | """ wrap result to be compat with data """ 57 | 58 | if self.decompose: 59 | # pad NaN 60 | pad = np.zeros(len(self._original)) 61 | pad[self._decompose_indexer] = result 62 | result = pad 63 | 64 | if isinstance(self._original, (pd.Series, pd.DataFrame)): 65 | index = self._original.index 66 | result = self._original._constructor(result, index=index) 67 | return result 68 | 69 | 70 | class OutlierDetector(BaseDetector): 71 | pass 72 | 73 | 74 | class ChangePointDetector(BaseDetector): 75 | pass 76 | 77 | 78 | class SingleChangePointDetector(ChangePointDetector): 79 | 80 | def detect(self, data): 81 | data = self._validate(data) 82 | 83 | indexer, null, value = self.get_statistics(data) 84 | result = np.zeros(len(data)) 85 | result[indexer] = 1 86 | result = self._wrap_result(data, result) 87 | return result 88 | -------------------------------------------------------------------------------- /pydetect/changepoint.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding: utf-8 3 | 4 | from __future__ import division 5 | 6 | import numpy as np 7 | from pydetect.base import SingleChangePointDetector 8 | 9 | 10 | class MeanDetector(SingleChangePointDetector): 11 | 12 | def get_statistics(self, data): 13 | 14 | n = len(data) 15 | x = np.cumsum(data) 16 | x2 = np.cumsum(data ** 2) 17 | 18 | null = x2[-1] - (x[-1] ** 2 / n) 19 | 20 | denom = np.arange(1, n + 1) 21 | values = (x2 - x ** 2 / denom + (x2[-1] - x2) - 22 | ((x[-1] - x) ** 2) / (n - denom)) 23 | 24 | i = np.nanargmin(values) 25 | return i, null, values[i] 26 | 27 | 28 | class VarianceDetector(SingleChangePointDetector): 29 | 30 | def get_statistics(self, data): 31 | 32 | mu = np.mean(data) 33 | 34 | n = len(data) 35 | x = np.cumsum((data - mu) ** 2) 36 | null = n * np.log(x[-1] / n) 37 | 38 | denom = np.arange(1, n + 1) 39 | denom_rev = n - denom 40 | 41 | sigma1 = x / denom 42 | sigma1[sigma1 <= 0] = 1e-10 43 | 44 | sigman = (x[-1] - x) / denom_rev 45 | sigman[sigman <= 0] = 1e-10 46 | 47 | values = denom * np.log(sigma1) + denom_rev * np.log(sigman) 48 | 49 | i = np.nanargmin(values) 50 | return i, null, values[i] 51 | 52 | 53 | class MeanVarianceDetector(SingleChangePointDetector): 54 | 55 | def get_statistics(self, data): 56 | n = len(data) 57 | y = np.cumsum(data) 58 | y2 = np.cumsum(data ** 2) 59 | 60 | null = n * np.log((y2[-1] - (y[-1] ** 2 / n)) / n) 61 | 62 | denom = np.arange(1, n + 1) 63 | denom_rev = n - denom 64 | 65 | sigma1 = (y2 - (y ** 2 / denom)) / denom 66 | sigma1[sigma1 <= 0] = 1e-10 67 | 68 | sigman = ((y2[-1] - y2) - (y[-1] - y) ** 2 / denom_rev) / denom_rev 69 | sigman[sigman <= 0] = 1e-10 70 | 71 | values = denom * np.log(sigma1) + denom_rev * np.log(sigman) 72 | 73 | i = np.nanargmin(values) 74 | return i, null, values[i] 75 | -------------------------------------------------------------------------------- /pydetect/datasets.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding: utf-8 3 | 4 | import pandas as pd 5 | 6 | 7 | def get_nile(): 8 | values = [1120, 1160, 963, 1210, 1160, 1160, 813, 1230, 1370, 1140, 9 | 995, 935, 1110, 994, 1020, 960, 1180, 799, 958, 1140, 10 | 1100, 1210, 1150, 1250, 1260, 1220, 1030, 1100, 774, 840, 11 | 874, 694, 940, 833, 701, 916, 692, 1020, 1050, 969, 12 | 831, 726, 456, 824, 702, 1120, 1100, 832, 764, 821, 13 | 768, 845, 864, 862, 698, 845, 744, 796, 1040, 759, 14 | 781, 865, 845, 944, 984, 897, 822, 1010, 771, 676, 15 | 649, 846, 812, 742, 801, 1040, 860, 874, 848, 890, 16 | 744, 749, 838, 1050, 918, 986, 797, 923, 975, 815, 17 | 1020, 906, 901, 1170, 912, 746, 919, 718, 714, 740] 18 | index = pd.date_range('1871-01-01', freq='AS', periods=100) 19 | return pd.Series(values, index=index, name='Nile') 20 | 21 | 22 | def get_airpassengers(): 23 | values = [112, 118, 132, 129, 121, 135, 148, 148, 136, 119, 104, 118, 24 | 115, 126, 141, 135, 125, 149, 170, 170, 158, 133, 114, 140, 25 | 145, 150, 178, 163, 172, 178, 199, 199, 184, 162, 146, 166, 26 | 171, 180, 193, 181, 183, 218, 230, 242, 209, 191, 172, 194, 27 | 196, 196, 236, 235, 229, 243, 264, 272, 237, 211, 180, 201, 28 | 204, 188, 235, 227, 234, 264, 302, 293, 259, 229, 203, 229, 29 | 242, 233, 267, 269, 270, 315, 364, 347, 312, 274, 237, 278, 30 | 284, 277, 317, 313, 318, 374, 413, 405, 355, 306, 271, 306, 31 | 315, 301, 356, 348, 355, 422, 465, 467, 404, 347, 305, 336, 32 | 340, 318, 362, 348, 363, 435, 491, 505, 404, 359, 310, 337, 33 | 360, 342, 406, 396, 420, 472, 548, 559, 463, 407, 362, 405, 34 | 417, 391, 419, 461, 472, 535, 622, 606, 508, 461, 390, 432] 35 | index = pd.date_range('1949-01-01', freq='MS', periods=144) 36 | return pd.Series(values, index=index, name='Air Passengers') 37 | -------------------------------------------------------------------------------- /pydetect/outlier.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding: utf-8 3 | 4 | from __future__ import division 5 | 6 | import numpy as np 7 | from scipy.stats import t, zscore 8 | 9 | from pydetect.base import OutlierDetector 10 | 11 | 12 | class GESDDetector(OutlierDetector): 13 | 14 | """ 15 | http://www.itl.nist.gov/div898/handbook/eda/section3/eda35h3.htm 16 | """ 17 | 18 | def __init__(self, alpha=0.05, max_outliers=None, decompose=False): 19 | self.alpha = alpha 20 | self.max_outliers = max_outliers 21 | super(GESDDetector, self).__init__(decompose=decompose) 22 | 23 | def detect(self, data): 24 | data = self._validate(data) 25 | 26 | indexer, _, _ = self.get_statistics(data) 27 | result = np.zeros(len(data), dtype=bool) 28 | result[indexer] = True 29 | result = self._wrap_result(data, result) 30 | return result 31 | 32 | def _get_lambda(self, n, i): 33 | # because of the loop condition, original formula's i 34 | # is replaced by i + 1 35 | df = n - i - 2 36 | 37 | p = 1 - self.alpha / (2 * (n - i)) 38 | # Critical value 39 | critical = t.ppf(p, df=df) 40 | lambda_i = (((n - i - 1) * critical) / 41 | (np.sqrt((df + critical ** 2) * (n - i)))) 42 | return lambda_i 43 | 44 | def get_statistics(self, data): 45 | 46 | n = len(data) 47 | if self.max_outliers is None: 48 | max_outliers = int(np.floor(n // 2)) 49 | else: 50 | max_outliers = self.max_outliers 51 | 52 | remainings = data.copy() 53 | outliers = np.zeros(len(data)) 54 | 55 | # number of outliers 56 | n_outliers = 0 57 | 58 | right = [] 59 | left = [] 60 | 61 | for i in range(max_outliers): 62 | # s must be sample standard deviation 63 | z_score = np.abs(zscore(remainings, ddof=1)) 64 | max_pos = np.argmax(z_score) 65 | r_i = z_score[max_pos] 66 | 67 | lambda_i = self._get_lambda(n, i) 68 | 69 | right.append(r_i) 70 | left.append(lambda_i) 71 | 72 | if np.isnan(r_i) or np.isnan(lambda_i): 73 | break 74 | elif r_i > lambda_i: 75 | n_outliers = i + 1 76 | 77 | # convert to bool indexer 78 | max_indexer = np.arange(len(remainings)) == max_pos 79 | 80 | flag = np.zeros(len(max_indexer)) 81 | flag[max_indexer] = i + 1 82 | 83 | outliers[outliers == 0] = flag 84 | 85 | # update remainings 86 | remainings = remainings[~max_indexer] 87 | 88 | outliers = (outliers != 0) & (outliers <= n_outliers) 89 | 90 | return outliers, np.array(right), np.array(left) 91 | -------------------------------------------------------------------------------- /pydetect/tests/__init__.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # coding: utf-8 3 | -------------------------------------------------------------------------------- /pydetect/tests/test_changepoint.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import pydetect 4 | 5 | import numpy as np 6 | import pandas as pd 7 | 8 | import unittest 9 | import pandas.util.testing as tm 10 | 11 | 12 | class TestMeanDetector(unittest.TestCase): 13 | 14 | def test_nile_statistics(self): 15 | nile = pydetect.datasets.get_nile() 16 | 17 | d = pydetect.MeanDetector() 18 | i, n, v = d.get_statistics(nile) 19 | 20 | self.assertEqual(27, i) 21 | self.assertEqual(2835156.75, n) 22 | self.assertEqual(1597457.1944444478, v) 23 | 24 | def test_input_class(self): 25 | nile = pydetect.datasets.get_nile() 26 | d = pydetect.MeanDetector() 27 | 28 | exp = np.array([0.] * 100) 29 | exp[27] = 1. 30 | exp_index = pd.date_range('1871-01-01', freq='AS', periods=100) 31 | # name will be reset 32 | exp = pd.Series(exp, exp_index) 33 | 34 | res = d.detect(nile) 35 | tm.assert_series_equal(res, exp) 36 | 37 | res = d.detect(nile.to_frame()) 38 | tm.assert_frame_equal(res, exp.to_frame()) 39 | 40 | res = d.detect(np.array(nile)) 41 | tm.assert_numpy_array_equal(res, exp.values) 42 | 43 | res = d.detect(nile.tolist()) 44 | tm.assert_numpy_array_equal(res, exp.values) 45 | 46 | 47 | class TestVarianceDetector(unittest.TestCase): 48 | 49 | def test_nile(self): 50 | nile = pydetect.datasets.get_nile() 51 | 52 | d = pydetect.VarianceDetector() 53 | i, n, v = d.get_statistics(nile) 54 | 55 | self.assertEqual(46, i) 56 | self.assertEqual(1025.2437598632698, n) 57 | self.assertEqual(1013.6146385197355, v) 58 | 59 | def test_input_class(self): 60 | nile = pydetect.datasets.get_nile() 61 | d = pydetect.VarianceDetector() 62 | 63 | exp = np.array([0.] * 100) 64 | exp[46] = 1. 65 | exp_index = pd.date_range('1871-01-01', freq='AS', periods=100) 66 | # name will be reset 67 | exp = pd.Series(exp, exp_index) 68 | 69 | res = d.detect(nile) 70 | tm.assert_series_equal(res, exp) 71 | 72 | res = d.detect(nile.to_frame()) 73 | tm.assert_frame_equal(res, exp.to_frame()) 74 | 75 | res = d.detect(np.array(nile)) 76 | tm.assert_numpy_array_equal(res, exp.values) 77 | 78 | res = d.detect(nile.tolist()) 79 | tm.assert_numpy_array_equal(res, exp.values) 80 | 81 | 82 | class TestMeanVarianceDetector(unittest.TestCase): 83 | 84 | def test_nile(self): 85 | nile = pydetect.datasets.get_nile() 86 | 87 | d = pydetect.MeanVarianceDetector() 88 | i, n, v = d.get_statistics(nile) 89 | 90 | self.assertEqual(27, i) 91 | self.assertEqual(1025.2437598632698, n) 92 | self.assertEqual(967.68788456436801, v) 93 | 94 | def test_input_class(self): 95 | nile = pydetect.datasets.get_nile() 96 | d = pydetect.MeanVarianceDetector() 97 | 98 | exp = np.array([0.] * 100) 99 | exp[27] = 1. 100 | exp_index = pd.date_range('1871-01-01', freq='AS', periods=100) 101 | # name will be reset 102 | exp = pd.Series(exp, exp_index) 103 | 104 | res = d.detect(nile) 105 | tm.assert_series_equal(res, exp) 106 | 107 | res = d.detect(nile.to_frame()) 108 | tm.assert_frame_equal(res, exp.to_frame()) 109 | 110 | res = d.detect(np.array(nile)) 111 | tm.assert_numpy_array_equal(res, exp.values) 112 | 113 | res = d.detect(nile.tolist()) 114 | tm.assert_numpy_array_equal(res, exp.values) 115 | -------------------------------------------------------------------------------- /pydetect/tests/test_datasets.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import pydetect 4 | 5 | import pandas as pd 6 | 7 | import unittest 8 | 9 | 10 | class TestDatasets(unittest.TestCase): 11 | 12 | def test_nile(self): 13 | nile = pydetect.datasets.get_nile() 14 | self.assertIsInstance(nile, pd.Series) 15 | self.assertEqual(nile.name, 'Nile') 16 | 17 | # do not overwrite 18 | new = pydetect.datasets.get_nile() 19 | self.assertIsNot(nile, new) 20 | 21 | def test_airpassengers(self): 22 | ap = pydetect.datasets.get_airpassengers() 23 | self.assertIsInstance(ap, pd.Series) 24 | self.assertEqual(ap.name, 'Air Passengers') 25 | 26 | # do not overwrite 27 | new = pydetect.datasets.get_airpassengers() 28 | self.assertIsNot(ap, new) 29 | -------------------------------------------------------------------------------- /pydetect/tests/test_outlier.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import pydetect 4 | 5 | import numpy as np 6 | import pandas as pd 7 | 8 | import unittest 9 | import pandas.util.testing as tm 10 | 11 | 12 | class TestGeneralizedESD(unittest.TestCase): 13 | 14 | def test_sample(self): 15 | """ 16 | the test is derived from 17 | http://www.itl.nist.gov/div898/handbook/eda/section3/eda35h3.htm 18 | """ 19 | 20 | d = pydetect.GESDDetector(alpha=0.05) 21 | self.assertEqual(d._get_lambda(54, 0), 3.1587939408872967) 22 | self.assertEqual(d._get_lambda(54, 1), 3.1514300233157844) 23 | self.assertEqual(d._get_lambda(54, 2), 3.1438896850317302) 24 | self.assertEqual(d._get_lambda(54, 3), 3.1361649560574856) 25 | self.assertEqual(d._get_lambda(54, 4), 3.1282473343306387) 26 | self.assertEqual(d._get_lambda(54, 5), 3.1201277383143937) 27 | self.assertEqual(d._get_lambda(54, 6), 3.1117964542894945) 28 | self.assertEqual(d._get_lambda(54, 7), 3.1032430776016966) 29 | self.assertEqual(d._get_lambda(54, 8), 3.0944564470227012) 30 | self.assertEqual(d._get_lambda(54, 9), 3.0854245712422848) 31 | 32 | def test_detect(self): 33 | data = [-0.25, 0.68, 0.94, 1.15, 1.20, 1.26, 1.26, 34 | 1.34, 1.38, 1.43, 1.49, 1.49, 1.55, 1.56, 35 | 1.58, 1.65, 1.69, 1.70, 1.76, 1.77, 1.81, 36 | 1.91, 1.94, 1.96, 1.99, 2.06, 2.09, 2.10, 37 | 2.14, 2.15, 2.23, 2.24, 2.26, 2.35, 2.37, 38 | 2.40, 2.47, 2.54, 2.62, 2.64, 2.90, 2.92, 39 | 2.92, 2.93, 3.21, 3.26, 3.30, 3.59, 3.68, 40 | 4.30, 4.64, 5.34, 5.42, 6.01] 41 | exp = np.array([False] * 51 + [True] * 3) 42 | 43 | d = pydetect.GESDDetector(alpha=0.05) 44 | res = d.detect(data) 45 | tm.assert_numpy_array_equal(res, exp) 46 | 47 | def test_decompose(self): 48 | ap = pydetect.datasets.get_airpassengers() 49 | ap[50] += 100 50 | 51 | d = pydetect.GESDDetector(alpha=0.05, decompose=True) 52 | res = d.detect(ap) 53 | 54 | exp = np.zeros(144) 55 | exp[50] = 1.0 56 | exp = pd.Series(exp, index=ap.index) 57 | tm.assert_series_equal(res, exp) 58 | -------------------------------------------------------------------------------- /pydetect/version.py: -------------------------------------------------------------------------------- 1 | version = '0.2.0' 2 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | scipy >= 0.18.0 2 | statsmodels >= 0.6.0 3 | pandas >= 0.18.0 -------------------------------------------------------------------------------- /scripts/build_travis.sh: -------------------------------------------------------------------------------- 1 | if [ "$TRAVIS_PYTHON_VERSION" == "2.7" ]; then 2 | wget -O conda.sh https://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh 3 | else 4 | wget -O conda.sh https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh 5 | fi 6 | bash conda.sh -b -p $HOME/miniconda 7 | export PATH="$HOME/miniconda/bin:$PATH" 8 | hash -r 9 | conda config --set always_yes yes --set changeps1 no 10 | conda update -q conda 11 | 12 | #Useful for debugging any issues with conda 13 | conda info -a 14 | 15 | conda create -n myenv "python=$PYTHON" 16 | source activate myenv 17 | conda install openblas 18 | conda install numpy scipy "pandas=$PANDAS" statsmodels nose 19 | 20 | python -m pip install python-coveralls coverage 21 | python -m pip install flake8 22 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | #!/usr/bin/env python 3 | 4 | import codecs 5 | import os 6 | from setuptools import setup, find_packages 7 | 8 | PACKAGE = 'pydetect' 9 | README = 'README.rst' 10 | REQUIREMENTS = 'requirements.txt' 11 | 12 | VERSION = '0.3.0.dev' 13 | 14 | def read(fname): 15 | # file must be read as utf-8 in py3 to avoid to be bytes 16 | return codecs.open(os.path.join(os.path.dirname(__file__), fname), encoding='utf-8').read() 17 | 18 | def write_version_py(filename=None): 19 | cnt = """\ 20 | version = '%s' 21 | """ 22 | a = open(filename, 'w') 23 | try: 24 | a.write(cnt % VERSION) 25 | finally: 26 | a.close() 27 | 28 | version_file = os.path.join(os.path.dirname(__file__), PACKAGE, 'version.py') 29 | write_version_py(filename=version_file) 30 | 31 | setup(name=PACKAGE, 32 | version=VERSION, 33 | description='Change point and anomaly detector for time-series', 34 | long_description=read(README), 35 | author='sinhrks', 36 | author_email='sinhrks@gmail.com', 37 | url='http://pydetect.readthedocs.org/en/stable', 38 | license = 'BSD', 39 | packages=find_packages(), 40 | install_requires=list(read(REQUIREMENTS).splitlines()) 41 | ) 42 | --------------------------------------------------------------------------------