anomaly-agent


Nameanomaly-agent JSON
Version 0.5.0 PyPI version JSON
download
home_pagehttps://github.com/andrewm4894/anomaly-agent
SummaryA package for detecting anomalies in time series data using LLMs
upload_time2025-02-14 21:35:42
maintainerNone
docs_urlNone
authorAndrew Maguire
requires_python>=3.8
licenseNone
keywords
VCS
bugtrack_url
requirements pandas plotly pydantic langchain-openai langchain-core
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Anomaly Agent

[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/andrewm4894/anomaly-agent)

<a target="_blank" href="https://pypi.org/project/anomaly-agent">
  <img alt="PyPI - Version" src="https://img.shields.io/pypi/v/anomaly-agent">
</a>
<a target="_blank" href="https://colab.research.google.com/github/andrewm4894/anomaly-agent/blob/main/notebooks/examples.ipynb">
  <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/>
</a>

A Python package for detecting anomalies in time series data using Large Language Models.

## Installation

```bash
pip install anomaly-agent
```

## Usage

See the [examples.ipynb](https://github.com/andrewm4894/anomaly-agent/tree/main/notebooks/examples.ipynb) notebook for some usage examples.

```python
import os
from anomaly_agent.utils import make_df, make_anomaly_config
from anomaly_agent.plot import plot_df
from anomaly_agent.agent import AnomalyAgent

# set openai api key if not in environment
# os.environ['OPENAI_API_KEY'] = "<your-openai-api-key>"

# get and anomaly config to generate some dummy data
anomaly_cfg = make_anomaly_config()
print(anomaly_cfg)

# generate some dummy data
df = make_df(100, 3, anomaly_config=anomaly_cfg)
df.head()

# create anomaly agent
anomaly_agent = AnomalyAgent()

# detect anomalies
anomalies = anomaly_agent.detect_anomalies(df)

# print anomalies
print(anomalies)
```

```json
{
  "var1":"AnomalyList(anomalies="[
    "Anomaly(timestamp=""2020-02-05",
    variable_value=3.279153,
    "anomaly_description=""Abrupt spike in value, significantly higher than previous observations."")",
    "Anomaly(timestamp=""2020-02-15",
    variable_value=5.001551,
    "anomaly_description=""Abrupt spike in value, significantly higher than previous observations."")",
    "Anomaly(timestamp=""2020-02-20",
    variable_value=3.526827,
    "anomaly_description=""Abrupt spike in value, significantly higher than previous observations."")",
    "Anomaly(timestamp=""2020-03-23",
    variable_value=3.735584,
    "anomaly_description=""Abrupt spike in value, significantly higher than previous observations."")",
    "Anomaly(timestamp=""2020-04-05",
    variable_value=8.207361,
    "anomaly_description=""Abrupt spike in value, significantly higher than previous observations."")",
    "Anomaly(timestamp=""2020-02-06",
    variable_value=0.0,
    "anomaly_description=""Missing value (NaN) detected."")",
    "Anomaly(timestamp=""2020-02-24",
    variable_value=0.0,
    "anomaly_description=""Missing value (NaN) detected."")",
    "Anomaly(timestamp=""2020-04-09",
    variable_value=0.0,
    "anomaly_description=""Missing value (NaN) detected."")"
  ]")",
  "var2":"AnomalyList(anomalies="[
    "Anomaly(timestamp=""2020-01-27",
    variable_value=3.438903,
    "anomaly_description=""Significantly high spike compared to previous values."")",
    "Anomaly(timestamp=""2020-02-15",
    variable_value=3.374155,
    "anomaly_description=""Significantly high spike compared to previous values."")",
    "Anomaly(timestamp=""2020-02-29",
    variable_value=3.194132,
    "anomaly_description=""Significantly high spike compared to previous values."")",
    "Anomaly(timestamp=""2020-03-03",
    variable_value=3.401919,
    "anomaly_description=""Significantly high spike compared to previous values."")"
  ]")",
  "var3":"AnomalyList(anomalies="[
    "Anomaly(timestamp=""2020-01-15",
    variable_value=4.116716,
    "anomaly_description=""Significantly higher value compared to previous days."")",
    "Anomaly(timestamp=""2020-02-15",
    variable_value=2.418594,
    "anomaly_description=""Unusually high value than expected."")",
    "Anomaly(timestamp=""2020-02-29",
    variable_value=0.279798,
    "anomaly_description=""Lower than expected value in the series."")",
    "Anomaly(timestamp=""2020-03-29",
    variable_value=8.016581,
    "anomaly_description=""Extremely high value deviating from the norm."")",
    "Anomaly(timestamp=""2020-04-07",
    variable_value=7.609766,
    "anomaly_description=""Another extreme spike in value."")"
  ]")"
}
```

```python
# get anomalies in long format
df_anomalies_long = anomaly_agent.get_anomalies_df(anomalies)
df_anomalies_long.head()
```

```
	timestamp	variable_name	value	description
0	2020-02-05	var1	3.279153	Abrupt spike in value, significantly higher th...
1	2020-02-15	var1	5.001551	Abrupt spike in value, significantly higher th...
2	2020-02-20	var1	3.526827	Abrupt spike in value, significantly higher th...
3	2020-03-23	var1	3.735584	Abrupt spike in value, significantly higher th...
4	2020-04-05	var1	8.207361	Abrupt spike in value, significantly higher th...
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/andrewm4894/anomaly-agent",
    "name": "anomaly-agent",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": null,
    "author": "Andrew Maguire",
    "author_email": "andrewm4894@gmail.com",
    "download_url": null,
    "platform": null,
    "description": "# Anomaly Agent\r\n\r\n[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/andrewm4894/anomaly-agent)\r\n\r\n<a target=\"_blank\" href=\"https://pypi.org/project/anomaly-agent\">\r\n  <img alt=\"PyPI - Version\" src=\"https://img.shields.io/pypi/v/anomaly-agent\">\r\n</a>\r\n<a target=\"_blank\" href=\"https://colab.research.google.com/github/andrewm4894/anomaly-agent/blob/main/notebooks/examples.ipynb\">\r\n  <img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/>\r\n</a>\r\n\r\nA Python package for detecting anomalies in time series data using Large Language Models.\r\n\r\n## Installation\r\n\r\n```bash\r\npip install anomaly-agent\r\n```\r\n\r\n## Usage\r\n\r\nSee the [examples.ipynb](https://github.com/andrewm4894/anomaly-agent/tree/main/notebooks/examples.ipynb) notebook for some usage examples.\r\n\r\n```python\r\nimport os\r\nfrom anomaly_agent.utils import make_df, make_anomaly_config\r\nfrom anomaly_agent.plot import plot_df\r\nfrom anomaly_agent.agent import AnomalyAgent\r\n\r\n# set openai api key if not in environment\r\n# os.environ['OPENAI_API_KEY'] = \"<your-openai-api-key>\"\r\n\r\n# get and anomaly config to generate some dummy data\r\nanomaly_cfg = make_anomaly_config()\r\nprint(anomaly_cfg)\r\n\r\n# generate some dummy data\r\ndf = make_df(100, 3, anomaly_config=anomaly_cfg)\r\ndf.head()\r\n\r\n# create anomaly agent\r\nanomaly_agent = AnomalyAgent()\r\n\r\n# detect anomalies\r\nanomalies = anomaly_agent.detect_anomalies(df)\r\n\r\n# print anomalies\r\nprint(anomalies)\r\n```\r\n\r\n```json\r\n{\r\n  \"var1\":\"AnomalyList(anomalies=\"[\r\n    \"Anomaly(timestamp=\"\"2020-02-05\",\r\n    variable_value=3.279153,\r\n    \"anomaly_description=\"\"Abrupt spike in value, significantly higher than previous observations.\"\")\",\r\n    \"Anomaly(timestamp=\"\"2020-02-15\",\r\n    variable_value=5.001551,\r\n    \"anomaly_description=\"\"Abrupt spike in value, significantly higher than previous observations.\"\")\",\r\n    \"Anomaly(timestamp=\"\"2020-02-20\",\r\n    variable_value=3.526827,\r\n    \"anomaly_description=\"\"Abrupt spike in value, significantly higher than previous observations.\"\")\",\r\n    \"Anomaly(timestamp=\"\"2020-03-23\",\r\n    variable_value=3.735584,\r\n    \"anomaly_description=\"\"Abrupt spike in value, significantly higher than previous observations.\"\")\",\r\n    \"Anomaly(timestamp=\"\"2020-04-05\",\r\n    variable_value=8.207361,\r\n    \"anomaly_description=\"\"Abrupt spike in value, significantly higher than previous observations.\"\")\",\r\n    \"Anomaly(timestamp=\"\"2020-02-06\",\r\n    variable_value=0.0,\r\n    \"anomaly_description=\"\"Missing value (NaN) detected.\"\")\",\r\n    \"Anomaly(timestamp=\"\"2020-02-24\",\r\n    variable_value=0.0,\r\n    \"anomaly_description=\"\"Missing value (NaN) detected.\"\")\",\r\n    \"Anomaly(timestamp=\"\"2020-04-09\",\r\n    variable_value=0.0,\r\n    \"anomaly_description=\"\"Missing value (NaN) detected.\"\")\"\r\n  ]\")\",\r\n  \"var2\":\"AnomalyList(anomalies=\"[\r\n    \"Anomaly(timestamp=\"\"2020-01-27\",\r\n    variable_value=3.438903,\r\n    \"anomaly_description=\"\"Significantly high spike compared to previous values.\"\")\",\r\n    \"Anomaly(timestamp=\"\"2020-02-15\",\r\n    variable_value=3.374155,\r\n    \"anomaly_description=\"\"Significantly high spike compared to previous values.\"\")\",\r\n    \"Anomaly(timestamp=\"\"2020-02-29\",\r\n    variable_value=3.194132,\r\n    \"anomaly_description=\"\"Significantly high spike compared to previous values.\"\")\",\r\n    \"Anomaly(timestamp=\"\"2020-03-03\",\r\n    variable_value=3.401919,\r\n    \"anomaly_description=\"\"Significantly high spike compared to previous values.\"\")\"\r\n  ]\")\",\r\n  \"var3\":\"AnomalyList(anomalies=\"[\r\n    \"Anomaly(timestamp=\"\"2020-01-15\",\r\n    variable_value=4.116716,\r\n    \"anomaly_description=\"\"Significantly higher value compared to previous days.\"\")\",\r\n    \"Anomaly(timestamp=\"\"2020-02-15\",\r\n    variable_value=2.418594,\r\n    \"anomaly_description=\"\"Unusually high value than expected.\"\")\",\r\n    \"Anomaly(timestamp=\"\"2020-02-29\",\r\n    variable_value=0.279798,\r\n    \"anomaly_description=\"\"Lower than expected value in the series.\"\")\",\r\n    \"Anomaly(timestamp=\"\"2020-03-29\",\r\n    variable_value=8.016581,\r\n    \"anomaly_description=\"\"Extremely high value deviating from the norm.\"\")\",\r\n    \"Anomaly(timestamp=\"\"2020-04-07\",\r\n    variable_value=7.609766,\r\n    \"anomaly_description=\"\"Another extreme spike in value.\"\")\"\r\n  ]\")\"\r\n}\r\n```\r\n\r\n```python\r\n# get anomalies in long format\r\ndf_anomalies_long = anomaly_agent.get_anomalies_df(anomalies)\r\ndf_anomalies_long.head()\r\n```\r\n\r\n```\r\n\ttimestamp\tvariable_name\tvalue\tdescription\r\n0\t2020-02-05\tvar1\t3.279153\tAbrupt spike in value, significantly higher th...\r\n1\t2020-02-15\tvar1\t5.001551\tAbrupt spike in value, significantly higher th...\r\n2\t2020-02-20\tvar1\t3.526827\tAbrupt spike in value, significantly higher th...\r\n3\t2020-03-23\tvar1\t3.735584\tAbrupt spike in value, significantly higher th...\r\n4\t2020-04-05\tvar1\t8.207361\tAbrupt spike in value, significantly higher th...\r\n```\r\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A package for detecting anomalies in time series data using LLMs",
    "version": "0.5.0",
    "project_urls": {
        "Homepage": "https://github.com/andrewm4894/anomaly-agent"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "548a0fad2d1ec9fcda60f3a730cb38e2a63f2b53fc50a430ae01e9d894d1e54a",
                "md5": "df3312c368f1a023ff48cab4bd688876",
                "sha256": "ba913dbc939f982d5e192e368d3e2579d4513714cfe3e42d1e3503ccaf152a07"
            },
            "downloads": -1,
            "filename": "anomaly_agent-0.5.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "df3312c368f1a023ff48cab4bd688876",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 8797,
            "upload_time": "2025-02-14T21:35:42",
            "upload_time_iso_8601": "2025-02-14T21:35:42.580041Z",
            "url": "https://files.pythonhosted.org/packages/54/8a/0fad2d1ec9fcda60f3a730cb38e2a63f2b53fc50a430ae01e9d894d1e54a/anomaly_agent-0.5.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-14 21:35:42",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "andrewm4894",
    "github_project": "anomaly-agent",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "pandas",
            "specs": []
        },
        {
            "name": "plotly",
            "specs": []
        },
        {
            "name": "pydantic",
            "specs": []
        },
        {
            "name": "langchain-openai",
            "specs": []
        },
        {
            "name": "langchain-core",
            "specs": []
        }
    ],
    "lcname": "anomaly-agent"
}
        
Elapsed time: 0.72940s