{"id":32174828,"url":"https://github.com/kavvkon/enlopy","last_synced_at":"2026-02-21T15:05:54.955Z","repository":{"id":52691187,"uuid":"87619650","full_name":"kavvkon/enlopy","owner":"kavvkon","description":"enlopy is an open source python library with methods to generate, process, analyze, and plot energy related timeseries.","archived":false,"fork":false,"pushed_at":"2025-05-21T21:01:19.000Z","size":7224,"stargazers_count":48,"open_issues_count":2,"forks_count":11,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-10-21T19:23:44.436Z","etag":null,"topics":["data-analysis","energy","python","timeseries","visualization"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kavvkon.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2017-04-08T08:29:15.000Z","updated_at":"2025-09-18T21:30:04.000Z","dependencies_parsed_at":"2024-02-13T23:24:11.128Z","dependency_job_id":"dbf19cc4-3ffe-4d0c-9607-80f8363ce59e","html_url":"https://github.com/kavvkon/enlopy","commit_stats":{"total_commits":39,"total_committers":2,"mean_commits":19.5,"dds":0.05128205128205132,"last_synced_commit":"ab91ca6ae60692948bfd9a9f851f917fbea50a93"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/kavvkon/enlopy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kavvkon%2Fenlopy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kavvkon%2Fenlopy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kavvkon%2Fenlopy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kavvkon%2Fenlopy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kavvkon","download_url":"https://codeload.github.com/kavvkon/enlopy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kavvkon%2Fenlopy/sbom","scorecard":{"id":551946,"data":{"date":"2025-08-11","repo":{"name":"github.com/kavvkon/enlopy","commit":"4b84279fc8783c6eff2613aaca21ff07e0f94fad"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/28 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/publish.yml:1","Warn: no topLevel permission defined: .github/workflows/tests.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/kavvkon/enlopy/publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/kavvkon/enlopy/publish.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/kavvkon/enlopy/publish.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/kavvkon/enlopy/tests.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/kavvkon/enlopy/tests.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/kavvkon/enlopy/tests.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/publish.yml:23","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:25","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:26","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:27","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:30","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:37","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   6 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":1,"reason":"9 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2021-856 / GHSA-5545-2q6w-2gh6","Warn: Project is vulnerable to: GHSA-6p56-wp2h-9hxr","Warn: Project is vulnerable to: PYSEC-2019-108 / GHSA-9fq2-x9r6-wfmf","Warn: Project is vulnerable to: PYSEC-2021-857 / GHSA-f7c7-j99h-c22f","Warn: Project is vulnerable to: GHSA-fpfv-jqm9-f5jm","Warn: Project is vulnerable to: PYSEC-2017-1 / GHSA-frgw-fgh6-9g52","Warn: Project is vulnerable to: PYSEC-2023-102","Warn: Project is vulnerable to: PYSEC-2023-114","Warn: Project is vulnerable to: PYSEC-2020-73"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-20T11:07:37.805Z","repository_id":52691187,"created_at":"2025-08-20T11:07:37.805Z","updated_at":"2025-08-20T11:07:37.805Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29684084,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T14:31:22.911Z","status":"ssl_error","status_checked_at":"2026-02-21T14:31:22.570Z","response_time":107,"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":["data-analysis","energy","python","timeseries","visualization"],"created_at":"2025-10-21T19:11:30.738Z","updated_at":"2026-02-21T15:05:54.950Z","avatar_url":"https://github.com/kavvkon.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Python toolkit for energy load time series\n==========================================\n\n|pyversion| |anaconda| |license| |version_status| |githubci| |docs| |cover| |binder|\n\n``enlopy`` is an open source python library with methods to generate,\nprocess, analyze, and plot timeseries.\n\nWhile it can be used for any kind of data it has a strong focus on those\nthat are related with energy i.e. electricity/heat demand or generation,\nprices etc. The methods included here are carefully selected to\nfit in that context and they had been, gathered, generalized and\nencapsulated during the last years while working on different research\nstudies.\n\nThe aim is to provide a higher level API than the one that is already\navailable in commonly used scientific packages (pandas, numpy, scipy).\nThis facilitates the analysis and processing of energy load timeseries\nthat can be used for modelling and statistical analysis. In some cases it\nis just a convenience wrapper of common packages just as pandas and in\nother cases, it implements methods or statistical models found in\nliterature.\n\nIt consists of four modules that include among others the following:\n\n* ``Analysis``: Overview of descriptive statistics, reshape, load duration curve, extract daily archetypes (clustering), detect outliers\n* ``Plot``: 2d heatmap, 3d plot, boxplot, rugplot, percentiles\n* ``Generate``: generate from daily and monthly profiles, generate from sinusoidal function, sample from given load duration curve, or from given spectral distribution, add noise gaussian and autoregressive noise, generate correlated load profiles, fit to analytical load duration curve\n* ``Statistics``: Feature extraction from timeseries for a quick overview of the characteristics of any load curve. Useful when coupled with machine learning packages.\n\nThe library is designed to be robust enough to accept a wide range of inputs (pd.Dataframe, pd.Series, np.ndarray, list)\nThis library is not focusing on regression and forecasting (e.g. ARIMA, state-space etc.), since there are numerous relevant libraries around.\n\nExample\n-------\nEnlopy has a simple API and is easy to use see some example below:\n\n\u003e\u003e\u003e  # df is a pandas dataframe with an hourly DateTimeindex. Each column represents a different generation technology\n\u003e\u003e\u003e import enlopy as el\n\u003e\u003e\u003e el.plot_rug(df) # Plots a nice rugplot. Useful for dispatch results\n\n.. image:: ./docs/_static/FR_dispatch_2017.png\n   :scale: 60 %\n   :alt: Dispatch plot for different generator types sorted by their intermittency.\n\n\u003e\u003e\u003e el.plot_LDC(df, zoom_peak=True) # Plots a cumulative Load Duration Curve with inset zoom plot \n\n.. image:: ./docs/_static/LDC_zoomed.png\n   :scale: 60 %\n   :alt: Load duration curve\n\nRun the following code for some more examples:\n\n.. code:: python\n\n    \u003e\u003e\u003e import numpy as np\n    \u003e\u003e\u003e import enlopy as el\n    \u003e\u003e\u003e Load = np.random.rand(8760)  # Create random vector of values\n    \u003e\u003e\u003e eload = el.make_timeseries(Load)  # Convenience wrapper around pandas timeseries\n\n    \u003e\u003e\u003e el.plot_heatmap(eload, x='day', y='month', aggfunc='mean')  # Plots 2d heatmap\n    \u003e\u003e\u003e el.plot_percentiles(eload)  # Plots mean and quantiles\n    \u003e\u003e\u003e el.get_load_archetypes(eload, plot_diagnostics=True)  # Splits daily loads in clusters (archetypes)\n    \u003e\u003e\u003e el.get_load_stats(eload, per=’m’)  # Get monthly load statistics\n    \u003e\u003e\u003e el.remove_outliers(eload, threshold=None, window=5, plot_diagnostics=True)  # Remove outliers and plot diagnostic\n\nMore examples can be found in `this jupyter notebook \u003chttps://github.com/kavvkon/enlopy/blob/master/notebooks/Basic%20examples.ipynb\u003e`__. You can directly run an online interactive version of the notebook where you can explore all available features by clicking here |binder|.\n\nDocumentation\n-------------\nDetailed documentation is still under construction, but you can find an overview of the available methods here: http://enlopy.readthedocs.io/\n\nInstall\n-------\n\nThe latest stable version exists in conda-forge and pypi. You can install it using `conda package manager \u003chttps://conda.io/en/latest/\u003e`__ (recommended) by typing:\n\n::\n\n    conda install -c conda-forge enlopy\n\nor if you prefer pypi\n\n::\n\n    pip install enlopy\n\nBe aware that this library is still in conceptual mode, so the API may change in the upcoming versions.\n\nIt should be ready to run out of the box for anyone that has the\n`anaconda distribution \u003chttps://www.anaconda.com/distribution/\u003e`__\ninstalled. The only dependencies required to use ``enlopy`` are the\nfollowing:\n\n-  `numpy \u003chttp://numpy.org\u003e`__\n-  `scipy \u003chttp://scipy.org\u003e`__\n-  `pandas \u003chttp://pandas.pydata.org/\u003e`__\n-  `matpotlib \u003chttp://matplotlib.org/\u003e`__\n\nIf you want to download the latest version from git for use or development purposes (assuming that you have anaconda installed):\n\n.. code:: bash\n\n    git clone https://github.com/kavvkon/enlopy.git\n    cd enlopy\n    conda env create  # Automatically creates environment based on environment.yml\n    source activate enlopy\n    pip install -e . # Install editable local version\n\n\nContribute\n----------\n\nMy vision is to make this library a energy domain-specific wrapper that can be used for any kind of energy analysis or modelling.\nIf you think you can contribute with new relevant methods that you are\ncurrently using or improve the code or documentation in any way, feel free to contact me,\nfork the repository and send your pull requests.\n\nCiting\n------\n\nIf you use this library in an academic work, please consider citing it.\n\n[1] K. Kavvadias, “enlopy: Python toolkit for energy load time series”, http://github.com/kavvkon/enlopy\n\n``enlopy`` has been already used for processing demand timeseries in this scientific paper:\nhttp://dx.doi.org/10.1016/j.apenergy.2016.08.077\n\n.. |pyversion| image:: https://img.shields.io/pypi/pyversions/enlopy.svg\n    :alt: Supported Python versions.\n    :target: https://pypi.python.org/pypi/enlopy\n.. |license| image:: https://img.shields.io/pypi/l/enlopy.svg\n    :alt: BSD License\n    :target: https://opensource.org/licenses/BSD-3-Clause\n.. |version_status| image:: https://img.shields.io/pypi/v/enlopy.svg?style=flat\n   :target: https://pypi.python.org/pypi/enlopy\n.. |docs| image:: https://readthedocs.org/projects/enlopy/badge/\n    :alt: Documentation\n    :target: https://enlopy.readthedocs.io/en/latest/\n.. |cover| image:: https://coveralls.io/repos/github/kavvkon/enlopy/badge.svg?branch=master\n    :target: https://coveralls.io/github/kavvkon/enlopy?branch=master\n.. |anaconda| image:: https://anaconda.org/conda-forge/enlopy/badges/version.svg\n    :target: https://anaconda.org/conda-forge/enlopy\n.. |binder| image:: https://mybinder.org/badge_logo.svg\n    :target: https://mybinder.org/v2/gh/kavvkon/enlopy/master?filepath=notebooks%2FBasic%20examples.ipynb\n.. |githubci| image:: https://img.shields.io/github/actions/workflow/status/kavvkon/enlopy/tests.yml\n   :target: https://github.com/kavvkon/enlopy/actions\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkavvkon%2Fenlopy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkavvkon%2Fenlopy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkavvkon%2Fenlopy/lists"}