{ "cells": [ { "cell_type": "markdown", "id": "670316b8-460c-4009-a5da-94278f4ac9a9", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "completed" }, "tags": [] }, "source": [ "# Create an Anomaly Detection Workflow" ] }, { "cell_type": "code", "execution_count": 1, "id": "52af59bb-083c-46c6-989a-bd4c65137a1a", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# Import to be able to import python package from src\n", "import sys\n", "sys.path.insert(0, '../src')" ] }, { "cell_type": "code", "execution_count": 2, "id": "d6fc731f-3f50-4e9a-a24c-b2ab01d4fa31", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "The `LightGBM` module could not be imported. To enable LightGBM support in Darts, follow the detailed instructions in the installation guide: https://github.com/unit8co/darts/blob/master/INSTALL.md\n", "The `Prophet` module could not be imported. To enable Prophet support in Darts, follow the detailed instructions in the installation guide: https://github.com/unit8co/darts/blob/master/INSTALL.md\n" ] } ], "source": [ "import pandas as pd\n", "import numpy as np\n", "import ontime as on\n", "from IPython.display import Image" ] }, { "cell_type": "markdown", "id": "2ffac0d9-4247-4ac2-af8e-aad77eb1f960", "metadata": {}, "source": [ "## Prerequisite" ] }, { "cell_type": "markdown", "id": "b211f78b-2de8-4a0c-8ce5-0806e504207b", "metadata": {}, "source": [ "Install Prefect within your project" ] }, { "cell_type": "code", "execution_count": 3, "id": "ef375aa9-89b6-4ba8-8f06-d874526dda32", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Requirement already satisfied: prefect in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (2.19.8)\n", "Requirement already satisfied: aiosqlite>=0.17.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (0.20.0)\n", "Requirement already satisfied: alembic<2.0.0,>=1.7.5 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (1.13.2)\n", "Requirement already satisfied: apprise<2.0.0,>=1.1.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (1.8.0)\n", "Requirement already satisfied: asyncpg>=0.23 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (0.29.0)\n", "Requirement already satisfied: click<8.2,>=8.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (8.1.7)\n", "Requirement already satisfied: cryptography>=36.0.1 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (42.0.8)\n", "Requirement already satisfied: dateparser<2.0.0,>=1.1.1 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (1.2.0)\n", "Requirement already satisfied: docker>=4.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (7.1.0)\n", "Requirement already satisfied: graphviz>=0.20.1 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (0.20.3)\n", "Requirement already satisfied: griffe>=0.20.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (0.48.0)\n", "Requirement already satisfied: jinja2<4.0.0,>=3.0.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (3.1.4)\n", "Requirement already satisfied: jinja2-humanize-extension>=0.4.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (0.4.0)\n", "Requirement already satisfied: humanize>=4.9.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (4.10.0)\n", "Requirement already satisfied: kubernetes<30.0.0,>=24.2.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (29.0.0)\n", "Requirement already satisfied: pytz<2025,>=2021.1 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (2024.1)\n", "Requirement already satisfied: readchar<5.0.0,>=4.0.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (4.1.0)\n", "Requirement already satisfied: sqlalchemy!=1.4.33,<3.0.0,>=1.4.22 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from sqlalchemy[asyncio]!=1.4.33,<3.0.0,>=1.4.22->prefect) (2.0.31)\n", "Requirement already satisfied: typer!=0.12.2,<0.13.0,>=0.12.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (0.12.3)\n", "Requirement already satisfied: anyio<4.0.0,>=3.7.1 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (3.7.1)\n", "Requirement already satisfied: asgi-lifespan<3.0,>=1.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (2.1.0)\n", "Requirement already satisfied: cachetools<6.0,>=5.3 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (5.4.0)\n", "Requirement already satisfied: cloudpickle<4.0,>=2.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (3.0.0)\n", "Requirement already satisfied: coolname<3.0.0,>=1.0.4 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (2.2.0)\n", "Requirement already satisfied: croniter<3.0.0,>=1.0.12 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (2.0.5)\n", "Requirement already satisfied: fsspec>=2022.5.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (2024.6.1)\n", "Requirement already satisfied: httpcore<2.0.0,>=1.0.5 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (1.0.5)\n", "Requirement already satisfied: httpx!=0.23.2,>=0.23 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from httpx[http2]!=0.23.2,>=0.23->prefect) (0.27.0)\n", "Requirement already satisfied: importlib-resources<6.2.0,>=6.1.3 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (6.1.3)\n", "Requirement already satisfied: jsonpatch<2.0,>=1.32 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (1.33)\n", "Requirement already satisfied: jsonschema<5.0.0,>=4.0.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (4.23.0)\n", "Requirement already satisfied: orjson<4.0,>=3.7 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (3.10.6)\n", "Requirement already satisfied: packaging<24.3,>=21.3 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (24.1)\n", "Requirement already satisfied: pathspec>=0.8.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (0.12.1)\n", "Requirement already satisfied: pydantic!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.10.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from pydantic[email]!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.10.0->prefect) (2.8.2)\n", "Requirement already satisfied: pydantic-core<3.0.0,>=2.12.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (2.20.1)\n", "Requirement already satisfied: python-dateutil<3.0.0,>=2.8.2 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (2.9.0.post0)\n", "Requirement already satisfied: python-slugify<9.0,>=5.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (8.0.4)\n", "Requirement already satisfied: pyyaml<7.0.0,>=5.4.1 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (6.0.1)\n", "Requirement already satisfied: rfc3339-validator<0.2.0,>=0.1.4 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (0.1.4)\n", "Requirement already satisfied: rich<14.0,>=11.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (13.7.1)\n", "Requirement already satisfied: ruamel.yaml>=0.17.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (0.18.6)\n", "Requirement already satisfied: sniffio<2.0.0,>=1.3.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (1.3.1)\n", "Requirement already satisfied: toml>=0.10.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (0.10.2)\n", "Requirement already satisfied: typing-extensions<5.0.0,>=4.5.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (4.12.2)\n", "Requirement already satisfied: ujson<6.0.0,>=5.8.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (5.10.0)\n", "Requirement already satisfied: uvicorn!=0.29.0,>=0.14.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (0.30.1)\n", "Requirement already satisfied: websockets<13.0,>=10.4 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (12.0)\n", "Requirement already satisfied: itsdangerous in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (2.2.0)\n", "Requirement already satisfied: python-multipart>=0.0.7 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (0.0.9)\n", "Requirement already satisfied: pendulum<3.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from prefect) (2.1.2)\n", "Requirement already satisfied: Mako in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from alembic<2.0.0,>=1.7.5->prefect) (1.3.5)\n", "Requirement already satisfied: idna>=2.8 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from anyio<4.0.0,>=3.7.1->prefect) (3.7)\n", "Requirement already satisfied: exceptiongroup in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from anyio<4.0.0,>=3.7.1->prefect) (1.2.1)\n", "Requirement already satisfied: certifi in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from apprise<2.0.0,>=1.1.0->prefect) (2024.7.4)\n", "Requirement already satisfied: requests in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from apprise<2.0.0,>=1.1.0->prefect) (2.32.3)\n", "Requirement already satisfied: requests-oauthlib in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from apprise<2.0.0,>=1.1.0->prefect) (2.0.0)\n", "Requirement already satisfied: markdown in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from apprise<2.0.0,>=1.1.0->prefect) (3.6)\n", "Requirement already satisfied: async-timeout>=4.0.3 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from asyncpg>=0.23->prefect) (4.0.3)\n", "Requirement already satisfied: cffi>=1.12 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from cryptography>=36.0.1->prefect) (1.16.0)\n", "Requirement already satisfied: regex!=2019.02.19,!=2021.8.27 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from dateparser<2.0.0,>=1.1.1->prefect) (2024.5.15)\n", "Requirement already satisfied: tzlocal in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from dateparser<2.0.0,>=1.1.1->prefect) (5.2)\n", "Requirement already satisfied: urllib3>=1.26.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from docker>=4.0->prefect) (2.2.2)\n", "Requirement already satisfied: backports-strenum>=1.3 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from griffe>=0.20.0->prefect) (1.3.1)\n", "Requirement already satisfied: colorama>=0.4 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from griffe>=0.20.0->prefect) (0.4.6)\n", "Requirement already satisfied: h11<0.15,>=0.13 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from httpcore<2.0.0,>=1.0.5->prefect) (0.14.0)\n", "Requirement already satisfied: h2<5,>=3 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from httpx[http2]!=0.23.2,>=0.23->prefect) (4.1.0)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from jinja2<4.0.0,>=3.0.0->prefect) (2.1.5)\n", "Requirement already satisfied: jsonpointer>=1.9 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from jsonpatch<2.0,>=1.32->prefect) (3.0.0)\n", "Requirement already satisfied: attrs>=22.2.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from jsonschema<5.0.0,>=4.0.0->prefect) (23.2.0)\n", "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from jsonschema<5.0.0,>=4.0.0->prefect) (2023.12.1)\n", "Requirement already satisfied: referencing>=0.28.4 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from jsonschema<5.0.0,>=4.0.0->prefect) (0.35.1)\n", "Requirement already satisfied: rpds-py>=0.7.1 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from jsonschema<5.0.0,>=4.0.0->prefect) (0.19.0)\n", "Requirement already satisfied: six>=1.9.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from kubernetes<30.0.0,>=24.2.0->prefect) (1.16.0)\n", "Requirement already satisfied: google-auth>=1.0.1 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from kubernetes<30.0.0,>=24.2.0->prefect) (2.32.0)\n", "Requirement already satisfied: websocket-client!=0.40.0,!=0.41.*,!=0.42.*,>=0.32.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from kubernetes<30.0.0,>=24.2.0->prefect) (1.8.0)\n", "Requirement already satisfied: oauthlib>=3.2.2 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from kubernetes<30.0.0,>=24.2.0->prefect) (3.2.2)\n", "Requirement already satisfied: pytzdata>=2020.1 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from pendulum<3.0->prefect) (2020.1)\n", "Requirement already satisfied: annotated-types>=0.4.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from pydantic!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.10.0->pydantic[email]!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.10.0->prefect) (0.7.0)\n", "Requirement already satisfied: email-validator>=2.0.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from pydantic[email]!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.10.0->prefect) (2.2.0)\n", "Requirement already satisfied: text-unidecode>=1.3 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from python-slugify<9.0,>=5.0->prefect) (1.3)\n", "Requirement already satisfied: markdown-it-py>=2.2.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from rich<14.0,>=11.0->prefect) (3.0.0)\n", "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from rich<14.0,>=11.0->prefect) (2.18.0)\n", "Requirement already satisfied: ruamel.yaml.clib>=0.2.7 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from ruamel.yaml>=0.17.0->prefect) (0.2.8)\n", "Requirement already satisfied: greenlet!=0.4.17 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from sqlalchemy[asyncio]!=1.4.33,<3.0.0,>=1.4.22->prefect) (3.0.3)\n", "Requirement already satisfied: shellingham>=1.3.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from typer!=0.12.2,<0.13.0,>=0.12.0->prefect) (1.5.4)\n", "Requirement already satisfied: pycparser in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from cffi>=1.12->cryptography>=36.0.1->prefect) (2.22)\n", "Requirement already satisfied: dnspython>=2.0.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from email-validator>=2.0.0->pydantic[email]!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.10.0->prefect) (2.6.1)\n", "Requirement already satisfied: pyasn1-modules>=0.2.1 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from google-auth>=1.0.1->kubernetes<30.0.0,>=24.2.0->prefect) (0.4.0)\n", "Requirement already satisfied: rsa<5,>=3.1.4 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from google-auth>=1.0.1->kubernetes<30.0.0,>=24.2.0->prefect) (4.9)\n", "Requirement already satisfied: hyperframe<7,>=6.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from h2<5,>=3->httpx[http2]!=0.23.2,>=0.23->prefect) (6.0.1)\n", "Requirement already satisfied: hpack<5,>=4.0 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from h2<5,>=3->httpx[http2]!=0.23.2,>=0.23->prefect) (4.0.0)\n", "Requirement already satisfied: mdurl~=0.1 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from markdown-it-py>=2.2.0->rich<14.0,>=11.0->prefect) (0.1.2)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from requests->apprise<2.0.0,>=1.1.0->prefect) (3.3.2)\n", "Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in /Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages (from pyasn1-modules>=0.2.1->google-auth>=1.0.1->kubernetes<30.0.0,>=24.2.0->prefect) (0.6.0)\n" ] } ], "source": [ "!pip install prefect" ] }, { "cell_type": "markdown", "id": "831f1944-599b-4761-a071-2a682346610a", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "completed" }, "tags": [] }, "source": [ "---\n", "## Generation of random time series" ] }, { "cell_type": "code", "execution_count": 4, "id": "ef3e03e1-c247-4b5a-a27a-a13361e673b0", "metadata": { "papermill": { "duration": null, "end_time": null, "exception": null, "start_time": null, "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "ts = on.generators.random_walk().generate(start=pd.Timestamp('2022-01-01'), end=pd.Timestamp('2022-12-31'))" ] }, { "cell_type": "markdown", "id": "9b19e395-a8ae-4d24-9f3e-05ef1c5a3779", "metadata": {}, "source": [ "## Create a Prefect Flow and Tasks" ] }, { "cell_type": "code", "execution_count": 5, "id": "5d88b2f2-c34f-45ca-b737-ac4307dcdf5e", "metadata": {}, "outputs": [], "source": [ "from prefect import task, flow, get_run_logger\n", "from ontime.context import common\n", "\n", "@task\n", "def task_detect(ts):\n", " det = on.detectors.quantile(low_quantile=0.1, high_quantile=0.9)\n", " return det.fit_detect(ts)\n", "\n", "@task\n", "def task_predict(ts):\n", " model = common.GenericPredictor()\n", " model.fit(ts)\n", " return model.predict(48)\n", "\n", "@flow\n", "def detection_flow(ts, log_prints=True):\n", " ts_ano = task_detect(ts)\n", " ts_pred = task_predict(ts)\n", " ts_pred_ano = task_detect(ts_pred)\n", " return ts_ano, ts_pred, ts_pred_ano" ] }, { "cell_type": "markdown", "id": "cee84246-0029-4f6a-89f5-54ea7b8fc1fb", "metadata": {}, "source": [ "## Display the graph" ] }, { "cell_type": "code", "execution_count": 6, "id": "37da3015-b2e7-48db-a601-bc8aafa83c35", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/fred.montet/Library/Caches/pypoetry/virtualenvs/ontime-P4y4iRhi-py3.10/lib/python3.10/site-packages/prefect/flows.py:1301: UserWarning: `flow.visualize()` will execute code inside of your flow that is not decorated with `@task` or `@flow`.\n", " warnings.warn(\n" ] }, { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res = await detection_flow.visualize(ts)\n", "Image(filename=f'./{detection_flow.name}.png')" ] }, { "cell_type": "markdown", "id": "5f7b3df6-f66e-47f8-a49d-517ac1aadf2a", "metadata": {}, "source": [ "## Run the flow" ] }, { "cell_type": "code", "execution_count": 7, "id": "746548a8-2c84-4b41-aa84-e1ddc484a95b", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
14:33:46.487 | INFO    | prefect.engine - Created flow run 'vengeful-corgi' for flow 'detection-flow'\n",
       "
\n" ], "text/plain": [ "14:33:46.487 | \u001b[36mINFO\u001b[0m | prefect.engine - Created flow run\u001b[35m 'vengeful-corgi'\u001b[0m for flow\u001b[1;35m 'detection-flow'\u001b[0m\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
14:33:46.522 | INFO    | Flow run 'vengeful-corgi' - Created task run 'task_detect-0' for task 'task_detect'\n",
       "
\n" ], "text/plain": [ "14:33:46.522 | \u001b[36mINFO\u001b[0m | Flow run\u001b[35m 'vengeful-corgi'\u001b[0m - Created task run 'task_detect-0' for task 'task_detect'\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
14:33:46.523 | INFO    | Flow run 'vengeful-corgi' - Executing 'task_detect-0' immediately...\n",
       "
\n" ], "text/plain": [ "14:33:46.523 | \u001b[36mINFO\u001b[0m | Flow run\u001b[35m 'vengeful-corgi'\u001b[0m - Executing 'task_detect-0' immediately...\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
14:33:46.566 | INFO    | Task run 'task_detect-0' - Finished in state Completed()\n",
       "
\n" ], "text/plain": [ "14:33:46.566 | \u001b[36mINFO\u001b[0m | Task run 'task_detect-0' - Finished in state \u001b[32mCompleted\u001b[0m()\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
14:33:46.579 | INFO    | Flow run 'vengeful-corgi' - Created task run 'task_predict-0' for task 'task_predict'\n",
       "
\n" ], "text/plain": [ "14:33:46.579 | \u001b[36mINFO\u001b[0m | Flow run\u001b[35m 'vengeful-corgi'\u001b[0m - Created task run 'task_predict-0' for task 'task_predict'\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
14:33:46.580 | INFO    | Flow run 'vengeful-corgi' - Executing 'task_predict-0' immediately...\n",
       "
\n" ], "text/plain": [ "14:33:46.580 | \u001b[36mINFO\u001b[0m | Flow run\u001b[35m 'vengeful-corgi'\u001b[0m - Executing 'task_predict-0' immediately...\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
14:33:47.241 | INFO    | Task run 'task_predict-0' - Finished in state Completed()\n",
       "
\n" ], "text/plain": [ "14:33:47.241 | \u001b[36mINFO\u001b[0m | Task run 'task_predict-0' - Finished in state \u001b[32mCompleted\u001b[0m()\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
14:33:47.252 | INFO    | Flow run 'vengeful-corgi' - Created task run 'task_detect-1' for task 'task_detect'\n",
       "
\n" ], "text/plain": [ "14:33:47.252 | \u001b[36mINFO\u001b[0m | Flow run\u001b[35m 'vengeful-corgi'\u001b[0m - Created task run 'task_detect-1' for task 'task_detect'\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
14:33:47.253 | INFO    | Flow run 'vengeful-corgi' - Executing 'task_detect-1' immediately...\n",
       "
\n" ], "text/plain": [ "14:33:47.253 | \u001b[36mINFO\u001b[0m | Flow run\u001b[35m 'vengeful-corgi'\u001b[0m - Executing 'task_detect-1' immediately...\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
14:33:47.283 | INFO    | Task run 'task_detect-1' - Finished in state Completed()\n",
       "
\n" ], "text/plain": [ "14:33:47.283 | \u001b[36mINFO\u001b[0m | Task run 'task_detect-1' - Finished in state \u001b[32mCompleted\u001b[0m()\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
14:33:47.296 | INFO    | Flow run 'vengeful-corgi' - Finished in state Completed()\n",
       "
\n" ], "text/plain": [ "14:33:47.296 | \u001b[36mINFO\u001b[0m | Flow run\u001b[35m 'vengeful-corgi'\u001b[0m - Finished in state \u001b[32mCompleted\u001b[0m()\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ts_ano, ts_pred, ts_pred_ano = detection_flow(ts)" ] }, { "cell_type": "markdown", "id": "518fb833-2963-4848-9f30-d43f1e8b785d", "metadata": {}, "source": [ "## Show results" ] }, { "cell_type": "code", "execution_count": 12, "id": "11e272b6-b741-4c7b-8d5a-600d7e46dc23", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "ts.plot(label='truth')\n", "ts_ano.plot(label='anomalies')\n", "ts_pred.plot(label='predictions')\n", "ts_pred_ano.plot(label='predicted anomalies');" ] }, { "cell_type": "code", "execution_count": null, "id": "3b3ebc06-b9d3-4f08-a18b-5b3f03f940a1", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.10" }, "papermill": { "default_parameters": {}, "duration": 60.248854, "end_time": "2024-01-31T17:51:31.161244", "environment_variables": {}, "exception": null, "input_path": "docs/user_guide/0_core/0.1-time-series-custom-class.ipynb", "output_path": "docs/user_guide/0_core/0.1-time-series-custom-class.ipynb", "parameters": {}, "start_time": "2024-01-31T17:50:30.912390", "version": "2.5.0" } }, "nbformat": 4, "nbformat_minor": 5 }