# Anomaly Agent
[](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[](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"
}