{"id":13723714,"url":"https://github.com/RWTH-EBC/ebcpy","last_synced_at":"2025-05-07T17:30:55.106Z","repository":{"id":42125281,"uuid":"395278953","full_name":"RWTH-EBC/ebcpy","owner":"RWTH-EBC","description":null,"archived":false,"fork":false,"pushed_at":"2025-05-02T15:37:47.000Z","size":49412,"stargazers_count":11,"open_issues_count":15,"forks_count":2,"subscribers_count":14,"default_branch":"master","last_synced_at":"2025-05-02T15:41:32.459Z","etag":null,"topics":["hacktoberfest"],"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/RWTH-EBC.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-08-12T10:21:55.000Z","updated_at":"2025-05-02T10:02:22.000Z","dependencies_parsed_at":"2023-11-24T13:46:03.469Z","dependency_job_id":"86c2ec72-3dbc-4e8c-a247-60a04e800c47","html_url":"https://github.com/RWTH-EBC/ebcpy","commit_stats":{"total_commits":619,"total_committers":25,"mean_commits":24.76,"dds":0.382875605815832,"last_synced_commit":"061432f1f1c9f84ac73867a9ca1c54ef3bf3316b"},"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RWTH-EBC%2Febcpy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RWTH-EBC%2Febcpy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RWTH-EBC%2Febcpy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RWTH-EBC%2Febcpy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RWTH-EBC","download_url":"https://codeload.github.com/RWTH-EBC/ebcpy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252215161,"owners_count":21712919,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["hacktoberfest"],"created_at":"2024-08-03T01:01:44.755Z","updated_at":"2025-05-07T17:30:55.087Z","avatar_url":"https://github.com/RWTH-EBC.png","language":"Python","funding_links":[],"categories":["Consumption"],"sub_categories":["Buildings and Heating"],"readme":"![E.ON EBC RWTH Aachen University](https://raw.githubusercontent.com/RWTH-EBC/ebcpy/master/docs/EBC_Logo.png)\n\n[![DOI](https://joss.theoj.org/papers/10.21105/joss.03861/status.svg)](https://doi.org/10.21105/joss.03861)\n[![pylint](https://rwth-ebc.github.io/ebcpy/master/pylint/pylint.svg )](https://rwth-ebc.github.io/ebcpy/master/pylint/pylint.html)\n[![documentation](https://rwth-ebc.github.io/ebcpy/master/docs/doc.svg)](https://rwth-ebc.github.io/ebcpy/master/docs/index.html)\n[![coverage](https://rwth-ebc.github.io/ebcpy/master/coverage/badge.svg)](https://rwth-ebc.github.io/ebcpy/master/coverage)\n[![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)\n[![build](https://rwth-ebc.github.io/ebcpy/master/build/build.svg)](https://rwth-ebc.github.io/ebcpy/master/build/build.svg)\n\n\n# ebcpy\n\nThis **PY**thon package provides generic functions and classes commonly\nused for the analysis and optimization of **e**nergy systems, **b**uildings and indoor **c**limate (**EBC**).\n\nKey features are:\n\n* `TimeSeriesData`\n* `SimulationAPI`'s\n* Optimization wrapper\n* Pre-/Postprocessing\n* Modelica utilities\n\nIt was developed together with `AixCaliBuHA`, a framework for an automated calibration of dynamic building and HVAC models. During this development, we found several interfaces relevant to further research. We thus decoupled these interfaces into `ebcpy` and used the framework, for instance in the design optimization of heat pump systems ([link](https://www.sciencedirect.com/science/article/abs/pii/S0196890421010645?via%3Dihub)).\n\n# Installation\n\nTo install, simply run\n```\npip install ebcpy\n```\n\nIn order to use all optional dependencies (e.g. `pymoo` optimization), install via:\n\n```\npip install ebcpy[full]\n```\n\nIf you encounter an error with the installation of `scikit-learn`, first install `scikit-learn` separatly and then install `ebcpy`:\n\n```\npip install scikit-learn\npip install ebcpy\n```\n\nIf this still does not work, we refer to the troubleshooting section of `scikit-learn`: https://scikit-learn.org/stable/install.html#troubleshooting. Also check [issue 23](https://github.com/RWTH-EBC/ebcpy/issues/23) for updates.\n\nIn order to help development, install it as an egg:\n\n```\ngit clone https://github.com/RWTH-EBC/ebcpy\npip install -e ebcpy\n```\n\n# How to get started?\n\nWe recommend running our jupyter-notebook to be guided through a **helpful tutorial**.  \nFor this, run the following code:\n```\n# If jupyter is not already installed:\npip install jupyter\n# Go into your ebcpy-folder (cd \\path_to_\\ebcpy) or change the path to tutorial.ipynb and run:\njupyter notebook tutorial\\tutorial.ipynb\n```\n\nOr, clone this repo and look at the examples\\README.md file.\nHere you will find several examples to execute.\n\n# How to cite ebcpy\n\nPlease use the following metadata to cite `ebcpy` in your research:\n\n```\n@article{Wuellhorst2022,\n  doi = {10.21105/joss.03861},\n  url = {https://doi.org/10.21105/joss.03861},\n  year = {2022},\n  publisher = {The Open Journal},\n  volume = {7},\n  number = {72},\n  pages = {3861},\n  author = {Fabian Wüllhorst and Thomas Storek and Philipp Mehrfeld and Dirk Müller},\n  title = {AixCaliBuHA: Automated calibration of building and HVAC systems},\n  journal = {Journal of Open Source Software}\n}\n```\n\n# TimeSeriesData\nNote that we use our own `TimeSeriesData` object which inherits from `pd.DataFrame`. The aim is to make tasks like loading different filetypes or applying multiple tags to one variable more convenient, while conserving the powerful tools of the DataFrame.\nJust a quick intro here:\n\n## Variables and tags\n```\n\u003e\u003e\u003e from ebcpy.data_types import TimeSeriesData\n\u003e\u003e\u003e tsd = TimeSeriesData(r\"path_to_a_supported_file\")\n\u003e\u003e\u003e print(tsd)\nVariables    T_heater              T_heater_1            \nTags             meas         sim        meas         sim\nTime                                                     \n0.0        313.165863  313.165863  293.173126  293.173126\n1.0        312.090271  310.787750  293.233002  293.352448\n2.0        312.090027  310.796753  293.385925  293.719055\n3.0        312.109436  310.870331  293.589233  294.141754\n```\n\nAs you can see, our first column level is always a variable, and the second one a tag.\nThis is especially handy when dealing with calibration or processing tasks, where you will have multiple\nversions (tags) for one variable. The default tag is `raw` to indicate the unmodified data.\nTo access a variable, you have to call `.loc`. To access multiple variables that all hold one tag use `xs`:\n```python\n# All tags:\ntsd.loc[:, \"variable_name\"]\n# One specific tag:\ntsd.loc[:, (\"variable_name\", \"tag_name\")]\n# One tag, all variables:\ntsd.xs(\"tag_name\", axis=1, level=1)\n```\n## FloatIndex and DateTimeIndex\nMeasured data typically holds a datetime stamps (`DateTimeIndex`) while simulation result files hold absolute seconds (`FloatIndex`). \nYou can easily convert back and forth using:\n```python\n# From Datetime to float\ntsd.to_float_index()\n# From float to datetime\ntsd.to_datetime_index()\n# To clean your data and create a common frequency:\ntsd.clean_and_space_equally(desired_freq=\"1s\")\n```\n\n# Documentation\nVisit our official [Documentation](https://rwth-ebc.github.io/ebcpy/master/docs/index.html).\n\n# Problems or questions?\nPlease [raise an issue here](https://github.com/RWTH-EBC/ebcpy/issues/new).\n\nFor other inquires, please contact [ebc-tools@eonerc.rwth-aachen.de](mailto:ebc-tools@eonerc.rwth-aachen.de).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRWTH-EBC%2Febcpy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FRWTH-EBC%2Febcpy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FRWTH-EBC%2Febcpy/lists"}