{"id":20433320,"url":"https://github.com/jpcadena/onemetric-plus","last_synced_at":"2026-04-10T11:03:35.698Z","repository":{"id":190077243,"uuid":"681909771","full_name":"jpcadena/onemetric-plus","owner":"jpcadena","description":"OneMetric+ project for analytical tool on demand forecast and outlier detection","archived":false,"fork":false,"pushed_at":"2024-01-22T21:51:33.000Z","size":496,"stargazers_count":2,"open_issues_count":8,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-05T06:23:03.021Z","etag":null,"topics":["black-formatter","data-analysis","data-analytics","data-science","data-visualization","demand-forecasting","isort","machine-learning","matplotlib","mypy","numpy","outlier-detection","pandas","pre-commit-hook","pydantic","python","ruff","scikit-learn","seaborn","solid-principles"],"latest_commit_sha":null,"homepage":"https://github.com/jpcadena/onemetric-plus","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jpcadena.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-08-23T03:01:36.000Z","updated_at":"2024-06-26T15:42:16.000Z","dependencies_parsed_at":"2023-12-20T14:10:51.288Z","dependency_job_id":"509b9d63-b8ef-4cd3-ac4c-e70b0373bb31","html_url":"https://github.com/jpcadena/onemetric-plus","commit_stats":{"total_commits":26,"total_committers":3,"mean_commits":8.666666666666666,"dds":0.3076923076923077,"last_synced_commit":"de6be3ab4ae4ede3ee81bacc78b5bf63c12865b8"},"previous_names":["jpcadena/onemetric-plus"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jpcadena/onemetric-plus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpcadena%2Fonemetric-plus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpcadena%2Fonemetric-plus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpcadena%2Fonemetric-plus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpcadena%2Fonemetric-plus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jpcadena","download_url":"https://codeload.github.com/jpcadena/onemetric-plus/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jpcadena%2Fonemetric-plus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31639526,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["black-formatter","data-analysis","data-analytics","data-science","data-visualization","demand-forecasting","isort","machine-learning","matplotlib","mypy","numpy","outlier-detection","pandas","pre-commit-hook","pydantic","python","ruff","scikit-learn","seaborn","solid-principles"],"created_at":"2024-11-15T08:18:36.976Z","updated_at":"2026-04-10T11:03:35.682Z","avatar_url":"https://github.com/jpcadena.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# onemetric-plus\n\n\u003c!-- Improved compatibility of back to top link: See: https://github.com/othneildrew/Best-README-Template/pull/73 --\u003e\n\u003ca name=\"readme-top\"\u003e\u003c/a\u003e\n\n\u003c!-- PROJECT SHIELDS --\u003e\n\u003c!--\n*** Markdown \"reference style\" links for readability.\n*** Reference links are enclosed in brackets [ ] instead of parentheses ( ).\n--\u003e\n\n\n\u003c!-- PROJECT LOGO --\u003e\n\u003cbr /\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003ca href=\"https://github.com/othneildrew/Best-README-Template\"\u003e\n    \u003cimg src=\"assets/static/images/logo.png\" alt=\"Logo\" width=\"80\" height=\"80\"\u003e\n  \u003c/a\u003e\n\n\u003ch3 align=\"center\"\u003eOnemetric plus\u003c/h3\u003e\n\n  \u003cp align=\"center\"\u003e\n    Onemetric plus\n    \u003cbr /\u003e\n    \u003ca href=\"https://github.com/jpcadena/onemetric-plus\"\u003e\u003cstrong\u003eExplore the docs »\u003c/strong\u003e\u003c/a\u003e\n    \u003cbr /\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n\n\n\u003c!-- TABLE OF CONTENTS --\u003e\n\u003cdetails\u003e\n  \u003csummary\u003eTable of Contents\u003c/summary\u003e\n  \u003col\u003e\n    \u003cli\u003e\n      \u003ca href=\"#about-the-project\"\u003eAbout The Project\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#built-with\"\u003eBuilt With\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\n      \u003ca href=\"#getting-started\"\u003eGetting Started\u003c/a\u003e\n      \u003cul\u003e\n        \u003cli\u003e\u003ca href=\"#prerequisites\"\u003ePrerequisites\u003c/a\u003e\u003c/li\u003e\n        \u003cli\u003e\u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#testing\"\u003eTesting\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contributing\"\u003eContributing\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#security\"\u003eSecurity\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#code-of-conduct\"\u003eCode of Conduct\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n    \u003cli\u003e\u003ca href=\"#contact\"\u003eContact\u003c/a\u003e\u003c/li\u003e\n  \u003c/ol\u003e\n\u003c/details\u003e\n\n\n\n\u003c!-- ABOUT THE PROJECT --\u003e\n\n\n![Project][project-screenshot]\n\n## About the Project\n\nThis project is dedicated to developing a sophisticated analytical tool for \"ABC\" to dynamically monitor and forecast store credit demands. This state-of-the-art system harnesses the power of machine learning and real-time streaming to identify and analyze unusual sales peaks, seasonal outliers, unforeseen events, and store-specific outliers.\n\nThe project encompasses several pivotal stages:\n\n- **Real-time Data Streaming**: Capturing data in real-time to transform each moment into actionable insights.\n- **Data Processing**: Incorporating continuous data, refining it for subsequent stages.\n- **Anomaly Detection**: Identifying unusual peaks in sales and other outliers which significantly affect the store credit demand.\n- **Seasonality Analysis**: Recognizing patterns corresponding to holidays, festivals, or peak shopping periods.\n- **Event Recognition**: Discerning unexpected external events such as concerts or sports that could influence credit demand.\n- **Store-specific Analysis**: Zoning in on specific store behavior that can provide a wealth of localized insights.\n\nCrafted with precision, this system offers invaluable information about successful sales initiatives, allowing \"ABC\" and its affiliate stores to replicate and innovate their credit management strategies. The solution emphasizes adaptability, ensuring that the stores can promptly cater to increased demand, especially during unforeseen events or peak periods.\n\nWith its strategic blend of modern technology and analytical prowess, this project is a beacon for retailers, data analysts, and organizations aiming to transform raw data into meaningful, actionable strategies. Its holistic approach reaffirms its adaptability across multiple domains, making it an epitome of innovation and efficiency in the world of data analytics.\n\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n### Built with\n\n[![Python][python-shield]][python-url] [![Pandas][pandas-shield]][pandas-url] [![TensorFlow][tensorflow-shield]][tensorflow-url] [![PyTorch][pytorch-shield]][pytorch-url] [![numpy][numpy-shield]][numpy-url] [![scikit-learn][scikit-learn-shield]][scikit-learn-url] [![Pydantic][pydantic-shield]][pydantic-url] [![Pytest][pytest-shield]][pytest-url] [![isort][isort-shield]][isort-url] [![Black][black-shield]][black-url] [![Ruff][ruff-shield]][ruff-url] [![MyPy][mypy-shield]][mypy-url][![pre-commit][pre-commit-shield]][pre-commit-url] [![GitHub Actions][github-actions-shield]][github-actions-url] [![Pycharm][pycharm-shield]][pycharm-url] [![Visual Studio Code][visual-studio-code-shield]][visual-studio-code-url] [![Markdown][markdown-shield]][markdown-url] [![License: MIT][license-shield]][license-url]\n\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- GETTING STARTED --\u003e\n\n## Getting started\n\n### Prerequisites\n\n- [Python 3.11][python-url]\n\n\n1. Clone the **repository**\n   ```\n   git clone https://github.com/jpcadena/onemetric-plus.git\n   ```\n2. Change the directory to **root project**\n   ```\n   cd onemetric-plus\n   ```\n3. Install **Poetry** package manager\n   ```\n   pip install poetry\n   ```\n4. Install the project's **dependencies**\n   ```\n   poetry install\n   ```\n5. Activate the **environment**\n   ```\n   poetry shell\n   ```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- USAGE EXAMPLES --\u003e\n\n## Usage\n\n1. **Setting up environment variables:**\n\n   If you find a `.env.sample` in the project directory, make a copy of it and rename to `.env`.\n\n   ```\n   cp .env.sample .env\n   ```\n\n2. **Configuring your credentials:**\n\n   Open the `.env` file in a text editor and replace the placeholder values with your actual credentials.\n\n   ```\n   # .env file\n   POSTGRES_USER=your_database_user\n   SECRET_KEY=your_api_key\n   ```\n\n3. Execute with console\n    ```\n    python main.py\n    ```\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Testing\n\n1. **Running tests:**\n\n   To run all tests, you can simply run the following command in the root directory of the project:\n\n   ```\n   pytest\n   ```\n\n2. **Running a specific test:**\n\n   If you want to run a specific test, you can do so by specifying the file and test name. For example, the following command will only run the `test_get_users` test in the `test_main.py` file:\n\n   ```\n   pytest tests/test_main.py::test_get_users\n   ```\n\n3. **Understanding test results:**\n\n   Pytest will provide a summary of the test results in the console. It will tell you how many tests passed and how many failed. For each failed test, Pytest will provide a detailed error message that can help you identify what went wrong.\n\n4. **Writing new tests:**\n\n   When you add new features to the application, you should also write corresponding test cases. Each test case should be a function that starts with the word 'test'. Inside the function, you can use `assert` statements to check that your code is working as expected. For example:\n\n   ```python\n   def test_add_user():\n       user = add_user(\"testuser\", \"testpass\")\n       assert user.name == \"testuser\"\n       assert user.password == \"testpass\"\n   ```\n\n   This function tests that the `add_user` function correctly creates a new user with the given name and password.\n\nRemember to update your tests whenever you update your code. Maintaining a comprehensive test suite will help ensure the reliability and robustness of your application.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- CONTRIBUTING --\u003e\n\n## Contributing\n\n[![GitHub][github-shield]][github-url]\n\nPlease read our [contributing guide](CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us.\n\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n## Security\n\nFor security considerations and best practices, please refer to our [Security Guide](SECURITY.md) for a detailed guide. \n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- CODE_OF_CONDUCT --\u003e\n\n## Code of Conduct\n\nWe enforce a code of conduct for all maintainers and contributors. Please read our [Code of Conduct](CODE_OF_CONDUCT.md) to understand the expectations before making any contributions.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\u003c!-- LICENSE --\u003e\n\n## License\n\nDistributed under the MIT License. See [LICENSE](LICENSE) for more information.\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- CONTACT --\u003e\n\n## Contact\n\n- [![LinkedIn][linkedin-shield]][linkedin-url]\n\n- [![Outlook][outlook-shield]](mailto:jpcadena@espol.edu.ec?subject=[GitHub]onemetric-plus)\n\n\u003cp align=\"right\"\u003e(\u003ca href=\"#readme-top\"\u003eback to top\u003c/a\u003e)\u003c/p\u003e\n\n\n\u003c!-- MARKDOWN LINKS \u0026 IMAGES --\u003e\n\u003c!-- https://www.markdownguide.org/basic-syntax/#reference-style-links --\u003e\n\n[project-screenshot]: assets/static/images/project.png\n\n[//]: # \"Shields\"\n\n[linkedin-shield]: https://img.shields.io/badge/linkedin-%230077B5.svg?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white\n\n[outlook-shield]: https://img.shields.io/badge/Microsoft_Outlook-0078D4?style=for-the-badge\u0026logo=microsoft-outlook\u0026logoColor=white\n\n[python-shield]: https://img.shields.io/badge/python-3670A0?style=for-the-badge\u0026logo=python\u0026logoColor=ffdd54\n\n[pydantic-shield]: https://img.shields.io/badge/Pydantic-FF43A1?style=for-the-badge\u0026logo=pydantic\u0026logoColor=white\n\n[pycharm-shield]: https://img.shields.io/badge/PyCharm-21D789?style=for-the-badge\u0026logo=pycharm\u0026logoColor=white\n\n[markdown-shield]: https://img.shields.io/badge/Markdown-000000?style=for-the-badge\u0026logo=markdown\u0026logoColor=white\n\n[github-shield]: https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge\u0026logo=github\u0026logoColor=white\n\n[ruff-shield]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v1.json\n\n[black-shield]: https://img.shields.io/badge/code%20style-black-000000.svg?style=for-the-badge\u0026logo=appveyor\n\n[mypy-shield]: https://img.shields.io/badge/mypy-checked-2A6DB2.svg?style=for-the-badge\u0026logo=appveyor\n\n[pytest-shield]: https://img.shields.io/badge/Pytest-0A9EDC?style=for-the-badge\u0026logo=pytest\u0026logoColor=white\n\n[visual-studio-code-shield]: https://img.shields.io/badge/Visual_Studio_Code-007ACC?style=for-the-badge\u0026logo=visual-studio-code\u0026logoColor=white\n\n[poetry-shield]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/python-poetry/website/main/static/badge/v0.json\n\n[isort-shield]: https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat\u0026labelColor=ef8336\n\n[github-actions-shield]: https://img.shields.io/badge/github%20actions-%232671E5.svg?style=for-the-badge\u0026logo=githubactions\u0026logoColor=white\n\n[pre-commit-shield]: https://img.shields.io/badge/pre--commit-F7B93E?style=for-the-badge\u0026logo=pre-commit\u0026logoColor=white\n\n[license-shield]: https://img.shields.io/badge/License-MIT-yellow.svg\n\n[pandas-shield]: https://img.shields.io/badge/pandas-%23150458.svg?style=for-the-badge\u0026logo=pandas\u0026logoColor=white\n\n[numpy-shield]: https://img.shields.io/badge/numpy-%23013243.svg?style=for-the-badge\u0026logo=numpy\u0026logoColor=white\n\n[scikit-Learn-shield]: https://img.shields.io/badge/scikit--learn-%23F7931E.svg?style=for-the-badge\u0026logo=scikit-learn\u0026logoColor=white\n\n[pytorch-shield]: https://img.shields.io/badge/PyTorch-red\n\n[tensorflow-shield]: https://img.shields.io/badge/TensorFlow-%23FF6F00.svg?style=for-the-badge\u0026logo=TensorFlow\u0026logoColor=white\n\n[//]: # \"URL\"\n\n[linkedin-url]: https://linkedin.com/in/juanpablocadenaaguilar\n\n[python-url]: https://docs.python.org/3.11/\n\n[python-url]: https://www.python.org/\n\n[pydantic-url]: https://docs.pydantic.dev\n\n[pycharm-url]: https://www.jetbrains.com/pycharm/\n\n[markdown-url]: https://daringfireball.net/projects/markdown/\n\n[github-url]: https://github.com/jpcadena/autochain-bot\n\n[ruff-url]: https://beta.ruff.rs/docs/\n\n[black-url]: https://github.com/psf/black\n\n[mypy-url]: http://mypy-lang.org/\n\n[pytest-url]: https://docs.pytest.org/en/7.2.x/\n\n[visual-studio-code-url]: https://code.visualstudio.com/\n\n[poetry-url]: https://python-poetry.org/\n\n[isort-url]: https://pycqa.github.io/isort/\n\n[github-actions-url]: https://github.com/features/actions\n\n[pre-commit-url]: https://pre-commit.com/\n\n[license-url]: https://opensource.org/licenses/MIT\n\n[pandas-url]: https://pandas.pydata.org/docs/\n\n[numpy-url]: https://numpy.org/\n\n[scikit-learn-url]: https://scikit-learn.org/stable/\n\n[pytorch-url]: https://pytorch.org/\n\n[tensorflow-url]: https://www.tensorflow.org/","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjpcadena%2Fonemetric-plus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjpcadena%2Fonemetric-plus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjpcadena%2Fonemetric-plus/lists"}