├── .gitignore ├── LICENSE ├── MANIFEST.in ├── README.rst ├── STL-usage-example.ipynb ├── setup.py └── stldecompose ├── __init__.py ├── __version__.py ├── forecast_funcs.py └── stl.py /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | # Created by https://www.gitignore.io/api/python 4 | 5 | ### Python ### 6 | # Byte-compiled / optimized / DLL files 7 | __pycache__/ 8 | *.py[cod] 9 | *$py.class 10 | 11 | # C extensions 12 | *.so 13 | 14 | # Distribution / packaging 15 | .Python 16 | build/ 17 | develop-eggs/ 18 | dist/ 19 | downloads/ 20 | eggs/ 21 | .eggs/ 22 | lib/ 23 | lib64/ 24 | parts/ 25 | sdist/ 26 | var/ 27 | wheels/ 28 | *.egg-info/ 29 | .installed.cfg 30 | *.egg 31 | 32 | # PyInstaller 33 | # Usually these files are written by a python script from a template 34 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 35 | *.manifest 36 | *.spec 37 | 38 | # Installer logs 39 | pip-log.txt 40 | pip-delete-this-directory.txt 41 | 42 | # Unit test / coverage reports 43 | htmlcov/ 44 | .tox/ 45 | .coverage 46 | .coverage.* 47 | .cache 48 | nosetests.xml 49 | coverage.xml 50 | *.cover 51 | .hypothesis/ 52 | 53 | # Translations 54 | *.mo 55 | *.pot 56 | 57 | # Django stuff: 58 | *.log 59 | local_settings.py 60 | 61 | # Flask stuff: 62 | instance/ 63 | .webassets-cache 64 | 65 | # Scrapy stuff: 66 | .scrapy 67 | 68 | # Sphinx documentation 69 | docs/_build/ 70 | 71 | # PyBuilder 72 | target/ 73 | 74 | # Jupyter Notebook 75 | .ipynb_checkpoints 76 | 77 | # pyenv 78 | .python-version 79 | 80 | # celery beat schedule file 81 | celerybeat-schedule 82 | 83 | # SageMath parsed files 84 | *.sage.py 85 | 86 | # Environments 87 | .env 88 | .venv 89 | env/ 90 | venv/ 91 | ENV/ 92 | env.bak/ 93 | venv.bak/ 94 | 95 | # Spyder project settings 96 | .spyderproject 97 | .spyproject 98 | 99 | # Rope project settings 100 | .ropeproject 101 | 102 | # mkdocs documentation 103 | /site 104 | 105 | # mypy 106 | .mypy_cache/ 107 | 108 | # End of https://www.gitignore.io/api/python 109 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Josh Montague 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include README.rst LICENSE 2 | -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- 1 | STL Decompose 2 | ============= 3 | 4 | This is a relatively naive Python implementation of a seasonal and trend decomposition using Loess smoothing. Commonly referred to as an "STL decomposition", Cleveland's 1990 paper is the canonical reference. 5 | 6 | This implementation is a variation of (and takes inspiration from) the implementation of the ``seasonal_decompose`` method `in statsmodels `_. In this implementation, the trend component is calculated by substituting a configurable `Loess regression `_ for the convolutional method used in ``seasonal_decompose``. It also extends the existing ``DecomposeResult`` from ``statsmodels`` to allow for forecasting based on the calculated decomposition. 7 | 8 | 9 | Usage 10 | ----- 11 | 12 | The ``stldecompose`` package is relatively lightweight. It uses ``pandas.Dataframe`` for inputs and outputs, and exposes only a couple of primary methods - ``decompose()`` and ``forecast()`` - as well as a handful of built-in forecasting functions. 13 | 14 | See `the included IPython notebook `_ for more details and usage examples. 15 | 16 | 17 | Installation 18 | ------------ 19 | 20 | A Python 3 virtual environment is recommended. 21 | 22 | The preferred method of installation is via ``pip``:: 23 | 24 | (env) $ pip install stldecompose 25 | 26 | If you'd like the bleeding-edge version, you can also install from this Github repo:: 27 | 28 | (env) $ git clone git@github.com:jrmontag/STLDecompose.git 29 | (env) $ cd STLDecompose; pip install . 30 | 31 | 32 | More Resources 33 | -------------- 34 | 35 | - ``statsmodels`` `Time Series analysis `_ package 36 | - Hyndman's `OTexts reference on STL decomposition `_ 37 | - Cleveland et al. 1990 [`pdf `_] 38 | -------------------------------------------------------------------------------- /STL-usage-example.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import pandas as pd\n", 10 | "import statsmodels.api as sm\n", 11 | "import matplotlib.pyplot as plt\n", 12 | "%matplotlib inline\n", 13 | "\n", 14 | "# the main library has a small set of functionality\n", 15 | "from stldecompose import decompose, forecast\n", 16 | "from stldecompose.forecast_funcs import (naive,\n", 17 | " drift, \n", 18 | " mean, \n", 19 | " seasonal_naive)\n", 20 | "\n", 21 | "\n", 22 | "%load_ext autoreload\n", 23 | "%autoreload 2" 24 | ] 25 | }, 26 | { 27 | "cell_type": "markdown", 28 | "metadata": {}, 29 | "source": [ 30 | "We'll use some of the data that comes pre-packaged with `statsmodels` to demonstrate the library functionality. The data set below comprises incomplete, daily measurements of CO2 levels in Hawaii.\n", 31 | "\n", 32 | "**Note:** at the time of this writing, the current release of `statsmodels` includes [a utility method](http://www.statsmodels.org/stable/datasets/index.html#loading-data-as-pandas-objects) for loading these datasets as a `pandas.DataFrame` which appears to be broken. Below is a short hack inspired by the current master branch on the `statsmodels` GitHub page. " 33 | ] 34 | }, 35 | { 36 | "cell_type": "code", 37 | "execution_count": 2, 38 | "metadata": {}, 39 | "outputs": [], 40 | "source": [ 41 | "def get_statsmodels_df():\n", 42 | " \"\"\"Return packaged data in a pandas.DataFrame\"\"\"\n", 43 | " # some hijinks to get around outdated statsmodels code\n", 44 | " dataset = sm.datasets.co2.load()\n", 45 | " start = dataset.data['date'][0].decode('utf-8')\n", 46 | " index = pd.date_range(start=start, periods=len(dataset.data), freq='W-SAT')\n", 47 | " obs = pd.DataFrame(dataset.data['co2'], index=index, columns=['co2'])\n", 48 | " return obs" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": 3, 54 | "metadata": {}, 55 | "outputs": [ 56 | { 57 | "data": { 58 | "text/html": [ 59 | "
\n", 60 | "\n", 73 | "\n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | "
co2
1958-03-29316.1
1958-04-05317.3
1958-04-12317.6
1958-04-19317.5
1958-04-26316.4
\n", 103 | "
" 104 | ], 105 | "text/plain": [ 106 | " co2\n", 107 | "1958-03-29 316.1\n", 108 | "1958-04-05 317.3\n", 109 | "1958-04-12 317.6\n", 110 | "1958-04-19 317.5\n", 111 | "1958-04-26 316.4" 112 | ] 113 | }, 114 | "execution_count": 3, 115 | "metadata": {}, 116 | "output_type": "execute_result" 117 | } 118 | ], 119 | "source": [ 120 | "obs = get_statsmodels_df()\n", 121 | "obs.head()" 122 | ] 123 | }, 124 | { 125 | "cell_type": "markdown", 126 | "metadata": {}, 127 | "source": [ 128 | "Because it's based on some existing `statsmodels` functionality, `STLDecompose` requires two things of the input dataframe:\n", 129 | "1. continuous observations (no missing data points)\n", 130 | "2. a `pandas` `DateTimeIndex`\n", 131 | "\n", 132 | "Since these are both very situation-dependent, we leave it to the user to define how they want to acheive these goals - `pandas` provides a number of ways [to work with missing data](https://pandas.pydata.org/pandas-docs/stable/missing_data.html). In particular, the functions shown below make these steps relatively straightforward. Below, we add use linear interpolation, and resample to daily observations. The resulting frame meets both of our criteria. " 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": 4, 138 | "metadata": {}, 139 | "outputs": [ 140 | { 141 | "data": { 142 | "text/html": [ 143 | "
\n", 144 | "\n", 157 | "\n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | " \n", 185 | " \n", 186 | " \n", 187 | " \n", 188 | " \n", 189 | " \n", 190 | " \n", 191 | " \n", 192 | " \n", 193 | " \n", 194 | " \n", 195 | " \n", 196 | " \n", 197 | " \n", 198 | " \n", 199 | " \n", 200 | " \n", 201 | " \n", 202 | " \n", 203 | " \n", 204 | " \n", 205 | " \n", 206 | "
co2
1958-03-29316.100000
1958-03-30316.271429
1958-03-31316.442857
1958-04-01316.614286
1958-04-02316.785714
1958-04-03316.957143
1958-04-04317.128571
1958-04-05317.300000
1958-04-06317.342857
1958-04-07317.385714
\n", 207 | "
" 208 | ], 209 | "text/plain": [ 210 | " co2\n", 211 | "1958-03-29 316.100000\n", 212 | "1958-03-30 316.271429\n", 213 | "1958-03-31 316.442857\n", 214 | "1958-04-01 316.614286\n", 215 | "1958-04-02 316.785714\n", 216 | "1958-04-03 316.957143\n", 217 | "1958-04-04 317.128571\n", 218 | "1958-04-05 317.300000\n", 219 | "1958-04-06 317.342857\n", 220 | "1958-04-07 317.385714" 221 | ] 222 | }, 223 | "execution_count": 4, 224 | "metadata": {}, 225 | "output_type": "execute_result" 226 | } 227 | ], 228 | "source": [ 229 | "obs = (obs\n", 230 | " .resample('D')\n", 231 | " .mean()\n", 232 | " .interpolate('linear'))\n", 233 | "\n", 234 | "obs.head(10)" 235 | ] 236 | }, 237 | { 238 | "cell_type": "code", 239 | "execution_count": 5, 240 | "metadata": {}, 241 | "outputs": [ 242 | { 243 | "data": { 244 | "text/plain": [ 245 | "DatetimeIndex(['1958-03-29', '1958-03-30', '1958-03-31', '1958-04-01',\n", 246 | " '1958-04-02', '1958-04-03', '1958-04-04', '1958-04-05',\n", 247 | " '1958-04-06', '1958-04-07',\n", 248 | " ...\n", 249 | " '2001-12-20', '2001-12-21', '2001-12-22', '2001-12-23',\n", 250 | " '2001-12-24', '2001-12-25', '2001-12-26', '2001-12-27',\n", 251 | " '2001-12-28', '2001-12-29'],\n", 252 | " dtype='datetime64[ns]', length=15982, freq='D')" 253 | ] 254 | }, 255 | "execution_count": 5, 256 | "metadata": {}, 257 | "output_type": "execute_result" 258 | } 259 | ], 260 | "source": [ 261 | "obs.index" 262 | ] 263 | }, 264 | { 265 | "cell_type": "code", 266 | "execution_count": 6, 267 | "metadata": {}, 268 | "outputs": [ 269 | { 270 | "data": { 271 | "text/plain": [ 272 | "" 273 | ] 274 | }, 275 | "execution_count": 6, 276 | "metadata": {}, 277 | "output_type": "execute_result" 278 | }, 279 | { 280 | "data": { 281 | "image/png": "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\n", 282 | "text/plain": [ 283 | "
" 284 | ] 285 | }, 286 | "metadata": { 287 | "needs_background": "light" 288 | }, 289 | "output_type": "display_data" 290 | } 291 | ], 292 | "source": [ 293 | "obs.head(1000).plot()" 294 | ] 295 | }, 296 | { 297 | "cell_type": "markdown", 298 | "metadata": {}, 299 | "source": [ 300 | "# Decompose\n", 301 | "\n", 302 | "One of the primary pieces of functionality is the STL decomposition. The associated method requires the observation frame, and the primary (largest) period of seasonality. *This `period` is specified in terms of index positions,* and so care is needed for the user to correctly specify the periodicity in terms of their observations.\n", 303 | "\n", 304 | "For example, with daily observations and large annual cycles, `period=365`. For hourly observations with large daily cycles, `period=24`. Some inspection, and trial and error may be helpful." 305 | ] 306 | }, 307 | { 308 | "cell_type": "code", 309 | "execution_count": 7, 310 | "metadata": {}, 311 | "outputs": [ 312 | { 313 | "data": { 314 | "text/plain": [ 315 | "" 316 | ] 317 | }, 318 | "execution_count": 7, 319 | "metadata": {}, 320 | "output_type": "execute_result" 321 | } 322 | ], 323 | "source": [ 324 | "decomp = decompose(obs, period=365)\n", 325 | "\n", 326 | "decomp" 327 | ] 328 | }, 329 | { 330 | "cell_type": "markdown", 331 | "metadata": {}, 332 | "source": [ 333 | "The resulting object is an extended version of the `statsmodels.tsa.seasonal.DecomposeResult`. Like the `statsmodels` object, the arrays of values are available on the object (the observations; and the trend, seasonal, and residual components). An extra attribute (the average seasonal cycle) has been added for the purpose of forecasting. \n", 334 | "\n", 335 | "We inherit the built-in `.plot()` method on the object." 336 | ] 337 | }, 338 | { 339 | "cell_type": "code", 340 | "execution_count": 8, 341 | "metadata": {}, 342 | "outputs": [ 343 | { 344 | "data": { 345 | "image/png": "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\n", 346 | "text/plain": [ 347 | "
" 348 | ] 349 | }, 350 | "metadata": { 351 | "needs_background": "light" 352 | }, 353 | "output_type": "display_data" 354 | } 355 | ], 356 | "source": [ 357 | "decomp.plot();" 358 | ] 359 | }, 360 | { 361 | "cell_type": "markdown", 362 | "metadata": {}, 363 | "source": [ 364 | "# Forecast\n", 365 | "\n", 366 | "While the STL decomposition is interesting on its own, `STLDecompose` also provides some relatively naive capabilities for using the decomposition to forecast based on our observations. \n", 367 | "\n", 368 | "We'll use the same data set, but pretend that we only had the first two third of observations. Then we can compare our forecast to the real observation data. " 369 | ] 370 | }, 371 | { 372 | "cell_type": "code", 373 | "execution_count": 9, 374 | "metadata": {}, 375 | "outputs": [ 376 | { 377 | "data": { 378 | "text/plain": [ 379 | "15982" 380 | ] 381 | }, 382 | "execution_count": 9, 383 | "metadata": {}, 384 | "output_type": "execute_result" 385 | } 386 | ], 387 | "source": [ 388 | "len(obs)" 389 | ] 390 | }, 391 | { 392 | "cell_type": "code", 393 | "execution_count": 10, 394 | "metadata": {}, 395 | "outputs": [], 396 | "source": [ 397 | "short_obs = obs.head(10000)" 398 | ] 399 | }, 400 | { 401 | "cell_type": "code", 402 | "execution_count": 11, 403 | "metadata": {}, 404 | "outputs": [ 405 | { 406 | "data": { 407 | "text/plain": [ 408 | "" 409 | ] 410 | }, 411 | "execution_count": 11, 412 | "metadata": {}, 413 | "output_type": "execute_result" 414 | } 415 | ], 416 | "source": [ 417 | "# apply the decomp to the truncated observation\n", 418 | "short_decomp = decompose(short_obs, period=365)\n", 419 | "\n", 420 | "short_decomp" 421 | ] 422 | }, 423 | { 424 | "cell_type": "markdown", 425 | "metadata": {}, 426 | "source": [ 427 | "The `forecast()` method requires the following arguments:\n", 428 | "- the previously fit `DecomposeResult`\n", 429 | "- the number of steps forward for which we'd like the forecast\n", 430 | "- the specific forecasting function to be applied to the decomposition\n", 431 | "\n", 432 | "There are a handful of predefined functions that can be imported from the `stldecompose.forecast_funcs` module. These implementations are based on [Hyndman's online textbook](https://www.otexts.org/fpp/2/3). The user can also define their own forecast function, following the patterns demonstrated in the predefined functions. \n", 433 | "\n", 434 | "The return type of the `forecast()` method is a `pandas.Dataframe` with a column name that represents the forecast function and an appropriate `DatetimeIndex`." 435 | ] 436 | }, 437 | { 438 | "cell_type": "code", 439 | "execution_count": 12, 440 | "metadata": {}, 441 | "outputs": [ 442 | { 443 | "data": { 444 | "text/html": [ 445 | "
\n", 446 | "\n", 459 | "\n", 460 | " \n", 461 | " \n", 462 | " \n", 463 | " \n", 464 | " \n", 465 | " \n", 466 | " \n", 467 | " \n", 468 | " \n", 469 | " \n", 470 | " \n", 471 | " \n", 472 | " \n", 473 | " \n", 474 | " \n", 475 | " \n", 476 | " \n", 477 | " \n", 478 | " \n", 479 | " \n", 480 | " \n", 481 | " \n", 482 | " \n", 483 | " \n", 484 | " \n", 485 | " \n", 486 | " \n", 487 | " \n", 488 | "
drift
1985-08-14345.985881
1985-08-15345.989898
1985-08-16345.993915
1985-08-17345.997933
1985-08-18346.001950
\n", 489 | "
" 490 | ], 491 | "text/plain": [ 492 | " drift\n", 493 | "1985-08-14 345.985881\n", 494 | "1985-08-15 345.989898\n", 495 | "1985-08-16 345.993915\n", 496 | "1985-08-17 345.997933\n", 497 | "1985-08-18 346.001950" 498 | ] 499 | }, 500 | "execution_count": 12, 501 | "metadata": {}, 502 | "output_type": "execute_result" 503 | } 504 | ], 505 | "source": [ 506 | "fcast = forecast(short_decomp, steps=8000, fc_func=drift)\n", 507 | "\n", 508 | "fcast.head()" 509 | ] 510 | }, 511 | { 512 | "cell_type": "markdown", 513 | "metadata": {}, 514 | "source": [ 515 | "If desired, we can then plot the corresponding components of the observation and forecast to check and verify the results." 516 | ] 517 | }, 518 | { 519 | "cell_type": "code", 520 | "execution_count": 13, 521 | "metadata": {}, 522 | "outputs": [ 523 | { 524 | "data": { 525 | "image/png": "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\n", 526 | "text/plain": [ 527 | "
" 528 | ] 529 | }, 530 | "metadata": { 531 | "needs_background": "light" 532 | }, 533 | "output_type": "display_data" 534 | } 535 | ], 536 | "source": [ 537 | "plt.plot(obs, '--', label='truth')\n", 538 | "plt.plot(short_obs, '--', label='obs')\n", 539 | "plt.plot(short_decomp.trend, ':', label='decomp.trend')\n", 540 | "plt.plot(fcast, '-', label=fcast.columns[0])\n", 541 | "\n", 542 | "plt.xlim('1970','2004'); plt.ylim(330,380);\n", 543 | "plt.legend();" 544 | ] 545 | }, 546 | { 547 | "cell_type": "markdown", 548 | "metadata": {}, 549 | "source": [ 550 | "To include the estimated seasonal component in the forecast, use the boolean `seasonal` keyword." 551 | ] 552 | }, 553 | { 554 | "cell_type": "code", 555 | "execution_count": 14, 556 | "metadata": {}, 557 | "outputs": [ 558 | { 559 | "data": { 560 | "image/png": "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\n", 561 | "text/plain": [ 562 | "
" 563 | ] 564 | }, 565 | "metadata": { 566 | "needs_background": "light" 567 | }, 568 | "output_type": "display_data" 569 | } 570 | ], 571 | "source": [ 572 | "fcast = forecast(short_decomp, steps=8000, fc_func=drift, seasonal=True)\n", 573 | "\n", 574 | "plt.plot(obs, '--', label='truth')\n", 575 | "plt.plot(short_obs, '--', label='obs')\n", 576 | "plt.plot(short_decomp.trend, ':', label='decomp.trend')\n", 577 | "plt.plot(fcast, '-', label=fcast.columns[0])\n", 578 | "\n", 579 | "plt.xlim('1970','2004'); plt.ylim(330,380);\n", 580 | "plt.legend();" 581 | ] 582 | }, 583 | { 584 | "cell_type": "code", 585 | "execution_count": 15, 586 | "metadata": {}, 587 | "outputs": [ 588 | { 589 | "data": { 590 | "text/html": [ 591 | "
\n", 592 | "\n", 605 | "\n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | " \n", 621 | " \n", 622 | " \n", 623 | " \n", 624 | " \n", 625 | " \n", 626 | " \n", 627 | " \n", 628 | " \n", 629 | " \n", 630 | " \n", 631 | " \n", 632 | " \n", 633 | " \n", 634 | "
drift+seasonal
1985-08-14344.855165
1985-08-15344.800451
1985-08-16344.736606
1985-08-17344.683039
1985-08-18344.632911
\n", 635 | "
" 636 | ], 637 | "text/plain": [ 638 | " drift+seasonal\n", 639 | "1985-08-14 344.855165\n", 640 | "1985-08-15 344.800451\n", 641 | "1985-08-16 344.736606\n", 642 | "1985-08-17 344.683039\n", 643 | "1985-08-18 344.632911" 644 | ] 645 | }, 646 | "execution_count": 15, 647 | "metadata": {}, 648 | "output_type": "execute_result" 649 | } 650 | ], 651 | "source": [ 652 | "fcast.head()" 653 | ] 654 | }, 655 | { 656 | "cell_type": "markdown", 657 | "metadata": {}, 658 | "source": [ 659 | "Enjoy." 660 | ] 661 | }, 662 | { 663 | "cell_type": "code", 664 | "execution_count": null, 665 | "metadata": {}, 666 | "outputs": [], 667 | "source": [] 668 | } 669 | ], 670 | "metadata": { 671 | "kernelspec": { 672 | "display_name": "Python 3", 673 | "language": "python", 674 | "name": "python3" 675 | }, 676 | "language_info": { 677 | "codemirror_mode": { 678 | "name": "ipython", 679 | "version": 3 680 | }, 681 | "file_extension": ".py", 682 | "mimetype": "text/x-python", 683 | "name": "python", 684 | "nbconvert_exporter": "python", 685 | "pygments_lexer": "ipython3", 686 | "version": "3.7.2" 687 | } 688 | }, 689 | "nbformat": 4, 690 | "nbformat_minor": 2 691 | } 692 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | # Appreciatively cargo-culted from: https://github.com/kennethreitz/setup.py 5 | 6 | # Note: To use the 'upload' functionality of this file, you must: 7 | # $ pip install twine 8 | # and then you can upload to PyPI via: 9 | # (env) STLDecompose [master] $ python setup.py upload 10 | 11 | import io 12 | import os 13 | import sys 14 | from shutil import rmtree 15 | 16 | from setuptools import find_packages, setup, Command 17 | 18 | # Package meta-data. 19 | NAME = 'stldecompose' 20 | DESCRIPTION = 'A Python implementation of seasonal trend with Loess (STL) time series decomposition' 21 | URL = 'https://github.com/jrmontag/STLDecompose' 22 | EMAIL = 'joshua.montague@gmail.com' 23 | AUTHOR = 'Josh Montague' 24 | 25 | # What packages are required for this module to be executed? 26 | REQUIRED = [ 27 | 'pandas', 28 | 'numpy', 29 | 'scipy', 30 | 'statsmodels', 31 | 'matplotlib', 32 | ] 33 | 34 | # The rest you shouldn't have to touch too much :) 35 | # ------------------------------------------------ 36 | # Except, perhaps the License and Trove Classifiers! 37 | # If you do change the License, remember to change the Trove Classifier for that! 38 | 39 | here = os.path.abspath(os.path.dirname(__file__)) 40 | 41 | # Import the README and use it as the long-description. 42 | # Note: this will only work if 'README.rst' is present in your MANIFEST.in file! 43 | with io.open(os.path.join(here, 'README.rst'), encoding='utf-8') as f: 44 | long_description = '\n' + f.read() 45 | 46 | # Load the package's __version__.py module as a dictionary. 47 | about = {} 48 | with open(os.path.join(here, NAME, '__version__.py')) as f: 49 | exec(f.read(), about) 50 | 51 | 52 | class UploadCommand(Command): 53 | """Support setup.py upload.""" 54 | 55 | description = 'Build and publish the package.' 56 | user_options = [] 57 | 58 | @staticmethod 59 | def status(s): 60 | """Prints things in bold.""" 61 | print('\033[1m{0}\033[0m'.format(s)) 62 | 63 | def initialize_options(self): 64 | pass 65 | 66 | def finalize_options(self): 67 | pass 68 | 69 | def run(self): 70 | try: 71 | self.status('Removing previous builds…') 72 | rmtree(os.path.join(here, 'dist')) 73 | except OSError: 74 | pass 75 | 76 | self.status('Building Source and Wheel (universal) distribution…') 77 | os.system('{0} setup.py sdist bdist_wheel --universal'.format(sys.executable)) 78 | 79 | self.status('Uploading the package to PyPi via Twine…') 80 | os.system('twine upload dist/*') 81 | 82 | sys.exit() 83 | 84 | 85 | # Where the magic happens: 86 | setup( 87 | name=NAME, 88 | version=about['__version__'], 89 | description=DESCRIPTION, 90 | long_description=long_description, 91 | author=AUTHOR, 92 | author_email=EMAIL, 93 | url=URL, 94 | packages=find_packages(exclude=('tests',)), 95 | # If your package is a single module, use this instead of 'packages': 96 | # py_modules=['mypackage'], 97 | 98 | # entry_points={ 99 | # 'console_scripts': ['mycli=mymodule:cli'], 100 | # }, 101 | install_requires=REQUIRED, 102 | include_package_data=True, 103 | license='MIT', 104 | classifiers=[ 105 | # Trove classifiers 106 | # Full list: https://pypi.python.org/pypi?%3Aaction=list_classifiers 107 | 'License :: OSI Approved :: MIT License', 108 | 'Programming Language :: Python', 109 | 'Programming Language :: Python :: 2.7', 110 | 'Programming Language :: Python :: 3', 111 | 'Programming Language :: Python :: 3.3', 112 | 'Programming Language :: Python :: 3.4', 113 | 'Programming Language :: Python :: 3.5', 114 | 'Programming Language :: Python :: 3.6', 115 | 'Programming Language :: Python :: Implementation :: CPython', 116 | 'Programming Language :: Python :: Implementation :: PyPy', 117 | 'Development Status :: 3 - Alpha', 118 | 'Topic :: Scientific/Engineering', 119 | ], 120 | # $ setup.py publish support. 121 | cmdclass={ 122 | 'upload': UploadCommand, 123 | }, 124 | ) 125 | -------------------------------------------------------------------------------- /stldecompose/__init__.py: -------------------------------------------------------------------------------- 1 | from .stl import decompose, forecast 2 | -------------------------------------------------------------------------------- /stldecompose/__version__.py: -------------------------------------------------------------------------------- 1 | __version__ = '0.0.5' 2 | -------------------------------------------------------------------------------- /stldecompose/forecast_funcs.py: -------------------------------------------------------------------------------- 1 | # example one-step-ahead forecasting functions 2 | # implementations based on https://www.otexts.org/fpp 3 | 4 | import numpy as np 5 | 6 | 7 | def naive(data, **kwargs): 8 | """The naive forecast for the next point is the value of the previous point. 9 | 10 | In most forecasting situations, the naive model is a good baseline due to it's simplicity 11 | and low computational overhead. 12 | 13 | Args: 14 | data (np.array): Observed data, presumed to be ordered in time. 15 | 16 | Returns: 17 | float: a single-valued forecast for the next value in the series. 18 | """ 19 | forecast = data[-1] 20 | return forecast 21 | 22 | 23 | def seasonal_naive(data, n=7, **kwargs): 24 | """The seasonal naive forecast for the next point is the value observed ``n`` points 25 | prior in the series. 26 | 27 | The seasonal parameter (``n``) does not have units of time, but rather units of one 28 | observation. For example, to account for weekly cycles within daily observations, ``n=7``. 29 | 30 | Args: 31 | data (np.array): Observed data, presumed to be ordered in time. 32 | n (int): period of data seasonality 33 | 34 | Returns: 35 | float: a single-valued forecast for the next value in the series. 36 | """ 37 | forecast = data[-n] 38 | return forecast 39 | 40 | 41 | def mean(data, n=3, **kwargs): 42 | """The mean forecast for the next point is the mean value of the previous ``n`` points in 43 | the series. 44 | 45 | Args: 46 | data (np.array): Observed data, presumed to be ordered in time. 47 | n (int): period over which to calculate the mean 48 | 49 | Returns: 50 | float: a single-valued forecast for the next value in the series. 51 | """ 52 | # don't start averaging until we've seen n points 53 | if len(data[-n:]) < n: 54 | forecast = np.nan 55 | else: 56 | # nb: we'll keep the forecast as a float 57 | forecast = np.mean(data[-n:]) 58 | return forecast 59 | 60 | 61 | def drift(data, n=3, **kwargs): 62 | """The drift forecast for the next point is a linear extrapolation from the previous ``n`` 63 | points in the series. 64 | 65 | Args: 66 | data (np.array): Observed data, presumed to be ordered in time. 67 | n (int): period over which to calculate linear model for extrapolation 68 | 69 | Returns: 70 | float: a single-valued forecast for the next value in the series. 71 | """ 72 | yi = data[-n] 73 | yf = data[-1] 74 | slope = (yf - yi) / (n - 1) 75 | forecast = yf + slope 76 | return forecast 77 | -------------------------------------------------------------------------------- /stldecompose/stl.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import pandas as pd 3 | from pandas.core.nanops import nanmean as pd_nanmean 4 | from statsmodels.tsa.seasonal import DecomposeResult 5 | from statsmodels.tsa.filters._utils import _maybe_get_pandas_wrapper_freq 6 | import statsmodels.api as sm 7 | 8 | 9 | def decompose(df, period=365, lo_frac=0.6, lo_delta=0.01): 10 | """Create a seasonal-trend (with Loess, aka "STL") decomposition of observed time series data. 11 | 12 | This implementation is modeled after the ``statsmodels.tsa.seasonal_decompose`` method 13 | but substitutes a Lowess regression for a convolution in its trend estimation. 14 | 15 | This is an additive model, Y[t] = T[t] + S[t] + e[t] 16 | 17 | For more details on lo_frac and lo_delta, see: 18 | `statsmodels.nonparametric.smoothers_lowess.lowess()` 19 | 20 | Args: 21 | df (pandas.Dataframe): Time series of observed counts. This DataFrame must be continuous (no 22 | gaps or missing data), and include a ``pandas.DatetimeIndex``. 23 | period (int, optional): Most significant periodicity in the observed time series, in units of 24 | 1 observation. Ex: to accomodate strong annual periodicity within years of daily 25 | observations, ``period=365``. 26 | lo_frac (float, optional): Fraction of data to use in fitting Lowess regression. 27 | lo_delta (float, optional): Fractional distance within which to use linear-interpolation 28 | instead of weighted regression. Using non-zero ``lo_delta`` significantly decreases 29 | computation time. 30 | 31 | Returns: 32 | `statsmodels.tsa.seasonal.DecomposeResult`: An object with DataFrame attributes for the 33 | seasonal, trend, and residual components, as well as the average seasonal cycle. 34 | 35 | """ 36 | # use some existing pieces of statsmodels 37 | lowess = sm.nonparametric.lowess 38 | _pandas_wrapper, _ = _maybe_get_pandas_wrapper_freq(df) 39 | 40 | # get plain np array 41 | observed = np.asanyarray(df).squeeze() 42 | 43 | # calc trend, remove from observation 44 | trend = lowess(observed, [x for x in range(len(observed))], 45 | frac=lo_frac, 46 | delta=lo_delta * len(observed), 47 | return_sorted=False) 48 | detrended = observed - trend 49 | 50 | # period must not be larger than size of series to avoid introducing NaNs 51 | period = min(period, len(observed)) 52 | 53 | # calc one-period seasonality, remove tiled array from detrended 54 | period_averages = np.array([pd_nanmean(detrended[i::period]) for i in range(period)]) 55 | # 0-center the period avgs 56 | period_averages -= np.mean(period_averages) 57 | seasonal = np.tile(period_averages, len(observed) // period + 1)[:len(observed)] 58 | resid = detrended - seasonal 59 | 60 | # convert the arrays back to appropriate dataframes, stuff them back into 61 | # the statsmodel object 62 | results = list(map(_pandas_wrapper, [seasonal, trend, resid, observed])) 63 | dr = DecomposeResult(seasonal=results[0], 64 | trend=results[1], 65 | resid=results[2], 66 | observed=results[3], 67 | period_averages=period_averages) 68 | return dr 69 | 70 | 71 | def forecast(stl, fc_func, steps=10, seasonal=False, **fc_func_kwargs): 72 | """Forecast the given decomposition ``stl`` forward by ``steps`` steps using the forecasting 73 | function ``fc_func``, optionally including the calculated seasonality. 74 | 75 | This is an additive model, Y[t] = T[t] + S[t] + e[t] 76 | 77 | Args: 78 | stl (a modified statsmodels.tsa.seasonal.DecomposeResult): STL decomposition of observed time 79 | series created using the ``stldecompose.decompose()`` method. 80 | fc_func (function): Function which takes an array of observations and returns a single 81 | valued forecast for the next point. 82 | steps (int, optional): Number of forward steps to include in the forecast 83 | seasonal (bool, optional): Include seasonal component in forecast 84 | fc_func_kwargs: keyword arguments 85 | All remaining arguments are passed to the forecasting function ``fc_func`` 86 | 87 | Returns: 88 | forecast_frame (pd.Dataframe): A ``pandas.Dataframe`` containing forecast values and a 89 | DatetimeIndex matching the observed index. 90 | """ 91 | # container for forecast values 92 | forecast_array = np.array([]) 93 | 94 | # forecast trend 95 | # unpack precalculated trend array stl frame 96 | trend_array = stl.trend 97 | 98 | # iteratively forecast trend ("seasonally adjusted") component 99 | # note: this loop can be slow 100 | for step in range(steps): 101 | # make this prediction on all available data 102 | pred = fc_func(np.append(trend_array, forecast_array), **fc_func_kwargs) 103 | # add this prediction to current array 104 | forecast_array = np.append(forecast_array, pred) 105 | col_name = fc_func.__name__ 106 | 107 | # forecast start and index are determined by observed data 108 | observed_timedelta = stl.observed.index[-1] - stl.observed.index[-2] 109 | forecast_idx_start = stl.observed.index[-1] + observed_timedelta 110 | forecast_idx = pd.date_range(start=forecast_idx_start, 111 | periods=steps, 112 | freq=pd.tseries.frequencies.to_offset(observed_timedelta)) 113 | 114 | # (optionally) forecast seasonal & combine 115 | if seasonal: 116 | # track index and value of max correlation 117 | seasonal_ix = 0 118 | max_correlation = -np.inf 119 | # loop over indexes=length of period avgs 120 | detrended_array = np.asanyarray(stl.observed - stl.trend).squeeze() 121 | for i, x in enumerate(stl.period_averages): 122 | # work slices backward from end of detrended observations 123 | if i == 0: 124 | # slicing w/ [x:-0] doesn't work 125 | detrended_slice = detrended_array[-len(stl.period_averages):] 126 | else: 127 | detrended_slice = detrended_array[-(len(stl.period_averages) + i):-i] 128 | # calculate corr b/w period_avgs and detrend_slice 129 | this_correlation = np.correlate(detrended_slice, stl.period_averages)[0] 130 | if this_correlation > max_correlation: 131 | # update ix and max correlation 132 | max_correlation = this_correlation 133 | seasonal_ix = i 134 | # roll seasonal signal to matching phase 135 | rolled_period_averages = np.roll(stl.period_averages, -seasonal_ix) 136 | # tile as many time as needed to reach "steps", then truncate 137 | tiled_averages = np.tile(rolled_period_averages, 138 | (steps // len(stl.period_averages) + 1))[:steps] 139 | # add seasonal values to previous forecast 140 | forecast_array += tiled_averages 141 | col_name += '+seasonal' 142 | 143 | # combine data array with index into named dataframe 144 | forecast_frame = pd.DataFrame(data=forecast_array, index=forecast_idx) 145 | forecast_frame.columns = [col_name] 146 | return forecast_frame 147 | --------------------------------------------------------------------------------