# Trend classifier
![](https://img.shields.io/pypi/v/trend-classifier.svg)
![](https://img.shields.io/pypi/pyversions/trend-classifier.svg)
![](https://img.shields.io/pypi/l/trend-classifier.svg)
![](https://img.shields.io/pypi/dm/trend-classifier.svg)
[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/izikeros/trend_classifier/main.svg)](https://results.pre-commit.ci/latest/github/izikeros/trend_classifier/main)
[![Black formatter](https://github.com/izikeros/trend_classifier/actions/workflows/black.yml/badge.svg)](https://github.com/izikeros/trend_classifier/actions/workflows/black.yml)
[![flake8](https://github.com/izikeros/trend_classifier/actions/workflows/flake8.yml/badge.svg)](https://github.com/izikeros/trend_classifier/actions/workflows/flake8.yml)
[![pytest](https://github.com/izikeros/trend_classifier/actions/workflows/pytest.yml/badge.svg)](https://github.com/izikeros/trend_classifier/actions/workflows/pytest.yml)
[![Maintainability](https://api.codeclimate.com/v1/badges/081a20bb8a5201cd8faf/maintainability)](https://codeclimate.com/github/izikeros/trend_classifier/maintainability)
[![Test Coverage](https://api.codeclimate.com/v1/badges/081a20bb8a5201cd8faf/test_coverage)](https://codeclimate.com/github/izikeros/trend_classifier/test_coverage)
Library for automated signal segmentation, trend classification and analysis.
## Installation
1. The package is pip-installable. To install it, run:
```sh
pip3 install trend-classifier
```
## Usage
### Pandas DataFrame Input
usage:
```python
import yfinance as yf
from trend_classifier import Segmenter
# download data from yahoo finance
df = yf.download("AAPL", start="2018-09-15", end="2022-09-05", interval="1d", progress=False)
x_in = list(range(0, len(df.index.tolist()), 1))
y_in = df["Adj Close"].tolist()
seg = Segmenter(x_in, y_in, n=20)
seg.calculate_segments()
```
For graphical output use `Segmenter.plot_segments()`:
```python
seg.plot_segments()
```
![Segmentation example](https://github.com/izikeros/trend_classifier/blob/main/img/screenshoot_1.jpg?raw=true)
After calling method `Segmenter.calculate_segments()` segments are identified and information is stored in `Segmenter.segments` as list of Segment objects. Each Segment object. Each Segment object has attributes such as 'start', 'stop' - range of indices for the extracted segment, slope and many more attributes that might be helpful for further analysis.
Exemplary info on one segment:
```python
from devtools import debug
debug(seg.segments[3])
```
and you should see something like this:
```
seg.segments[3]: Segment(
start=154,
stop=177,
slope=-0.37934038908585044,
offset=109.54630934894907,
slopes=[
-0.45173184100846725,
-0.22564684358754555,
0.15555037018051593,
0.34801127785130714,
],
offsets=[
121.65628807526804,
83.56079272220015,
17.32660986821478,
-17.86417581658647,
],
slopes_std=0.31334199799377654,
offsets_std=54.60900279722876,
std=0.933497081795997,
span=82.0,
reason_for_new_segment='offset',
)
```
export results to tabular format (pandas DataFrame):
```python
seg.segments.to_dataframe()
```
![](https://github.com/izikeros/trend_classifier/blob/main/img/to_dataframe.jpg?raw=true)
(**NOTE:** for clarity reasons, not all columns are shown in the screenshot above)
## Alternative approach
- Smooth out the price data using the Savitzky-Golay filter,
- label the highs and lows.
- higher highs and higher lows indicates an uptrend.
The requirement here is than you need OHLC data for the assets you would like to analyse.
## License
[MIT](LICENSE) © [Krystian Safjan](https://safjan.com/).
Raw data
{
"_id": null,
"home_page": null,
"name": "trend-classifier",
"maintainer": null,
"docs_url": null,
"requires_python": "<=3.13,>=3.7",
"maintainer_email": null,
"keywords": "trend, timeseries, classification, segmentation, analysis, algotrading, finance",
"author": null,
"author_email": "Krystian Safjan <ksafjan@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/a3/51/864a594b90088a1ec93d09e484751a00313a1530e700148c8867ad0fd443/trend-classifier-0.1.11.tar.gz",
"platform": null,
"description": "# Trend classifier\n![](https://img.shields.io/pypi/v/trend-classifier.svg)\n![](https://img.shields.io/pypi/pyversions/trend-classifier.svg)\n![](https://img.shields.io/pypi/l/trend-classifier.svg)\n![](https://img.shields.io/pypi/dm/trend-classifier.svg)\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/izikeros/trend_classifier/main.svg)](https://results.pre-commit.ci/latest/github/izikeros/trend_classifier/main)\n[![Black formatter](https://github.com/izikeros/trend_classifier/actions/workflows/black.yml/badge.svg)](https://github.com/izikeros/trend_classifier/actions/workflows/black.yml)\n[![flake8](https://github.com/izikeros/trend_classifier/actions/workflows/flake8.yml/badge.svg)](https://github.com/izikeros/trend_classifier/actions/workflows/flake8.yml)\n[![pytest](https://github.com/izikeros/trend_classifier/actions/workflows/pytest.yml/badge.svg)](https://github.com/izikeros/trend_classifier/actions/workflows/pytest.yml)\n[![Maintainability](https://api.codeclimate.com/v1/badges/081a20bb8a5201cd8faf/maintainability)](https://codeclimate.com/github/izikeros/trend_classifier/maintainability)\n[![Test Coverage](https://api.codeclimate.com/v1/badges/081a20bb8a5201cd8faf/test_coverage)](https://codeclimate.com/github/izikeros/trend_classifier/test_coverage)\n\nLibrary for automated signal segmentation, trend classification and analysis.\n\n## Installation\n\n1. The package is pip-installable. To install it, run:\n\n ```sh\n pip3 install trend-classifier\n ```\n\n## Usage\n### Pandas DataFrame Input\nusage:\n```python\nimport yfinance as yf\nfrom trend_classifier import Segmenter\n\n# download data from yahoo finance\ndf = yf.download(\"AAPL\", start=\"2018-09-15\", end=\"2022-09-05\", interval=\"1d\", progress=False)\n\nx_in = list(range(0, len(df.index.tolist()), 1))\ny_in = df[\"Adj Close\"].tolist()\n\nseg = Segmenter(x_in, y_in, n=20)\nseg.calculate_segments()\n```\n\nFor graphical output use `Segmenter.plot_segments()`:\n```python\nseg.plot_segments()\n```\n\n![Segmentation example](https://github.com/izikeros/trend_classifier/blob/main/img/screenshoot_1.jpg?raw=true)\n\nAfter calling method `Segmenter.calculate_segments()` segments are identified and information is stored in `Segmenter.segments` as list of Segment objects. Each Segment object. Each Segment object has attributes such as 'start', 'stop' - range of indices for the extracted segment, slope and many more attributes that might be helpful for further analysis.\n\nExemplary info on one segment:\n```python\nfrom devtools import debug\ndebug(seg.segments[3])\n```\nand you should see something like this:\n```\n seg.segments[3]: Segment(\n start=154,\n stop=177,\n slope=-0.37934038908585044,\n offset=109.54630934894907,\n slopes=[\n -0.45173184100846725,\n -0.22564684358754555,\n 0.15555037018051593,\n 0.34801127785130714,\n ],\n offsets=[\n 121.65628807526804,\n 83.56079272220015,\n 17.32660986821478,\n -17.86417581658647,\n ],\n slopes_std=0.31334199799377654,\n offsets_std=54.60900279722876,\n std=0.933497081795997,\n span=82.0,\n reason_for_new_segment='offset',\n )\n```\nexport results to tabular format (pandas DataFrame):\n```python\nseg.segments.to_dataframe()\n```\n![](https://github.com/izikeros/trend_classifier/blob/main/img/to_dataframe.jpg?raw=true)\n\n(**NOTE:** for clarity reasons, not all columns are shown in the screenshot above)\n\n## Alternative approach\n- Smooth out the price data using the Savitzky-Golay filter,\n- label the highs and lows.\n- higher highs and higher lows indicates an uptrend.\n\nThe requirement here is than you need OHLC data for the assets you would like to analyse.\n\n## License\n\n[MIT](LICENSE) \u00a9 [Krystian Safjan](https://safjan.com/).\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Package for automated signal segmentation, trend classification and analysis.",
"version": "0.1.11",
"project_urls": {
"Bug Tracker": "https://github.com/izikeros/trend_classifier/issues",
"Source": "https://github.com/izikeros/trend_classifier"
},
"split_keywords": [
"trend",
" timeseries",
" classification",
" segmentation",
" analysis",
" algotrading",
" finance"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "6a83090e5db09a015da27ba86c92557bf357f63fb316ad52b4b9db860eb07156",
"md5": "b715a28b33127147dfa7e48b04a612d7",
"sha256": "3061193299a3ab6ab49e95098ffe8578d9a08dafdb480ba50eaf75c59afa3038"
},
"downloads": -1,
"filename": "trend_classifier-0.1.11-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b715a28b33127147dfa7e48b04a612d7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<=3.13,>=3.7",
"size": 4003,
"upload_time": "2024-07-17T20:30:59",
"upload_time_iso_8601": "2024-07-17T20:30:59.933606Z",
"url": "https://files.pythonhosted.org/packages/6a/83/090e5db09a015da27ba86c92557bf357f63fb316ad52b4b9db860eb07156/trend_classifier-0.1.11-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a351864a594b90088a1ec93d09e484751a00313a1530e700148c8867ad0fd443",
"md5": "48d4082922caf28de34d9df2ca790c58",
"sha256": "285a3a26bba4debefa2f3f2418bd19c9848e4705d93beb01b078e6da31279349"
},
"downloads": -1,
"filename": "trend-classifier-0.1.11.tar.gz",
"has_sig": false,
"md5_digest": "48d4082922caf28de34d9df2ca790c58",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<=3.13,>=3.7",
"size": 5940,
"upload_time": "2024-07-17T20:31:01",
"upload_time_iso_8601": "2024-07-17T20:31:01.422851Z",
"url": "https://files.pythonhosted.org/packages/a3/51/864a594b90088a1ec93d09e484751a00313a1530e700148c8867ad0fd443/trend-classifier-0.1.11.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-07-17 20:31:01",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "izikeros",
"github_project": "trend_classifier",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"tox": true,
"lcname": "trend-classifier"
}