NILM
Non-Intrusive Load Monitoring is the process of estimating the energy consumed by individual appliances given just a whole-house power meter reading.
https://github.com/nilmtk/nilmtk
Category: Consumption
Sub Category: Buildings and Heating
Keywords
algorithms disaggregation energy energy-disaggregation forecasting ipython-notebook nilm nilm-algorithms nilmtk python
Last synced: about 19 hours ago
JSON representation
Repository metadata
Non-Intrusive Load Monitoring Toolkit (nilmtk)
- Host: GitHub
- URL: https://github.com/nilmtk/nilmtk
- Owner: nilmtk
- License: apache-2.0
- Created: 2013-12-03T11:39:12.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2026-07-20T14:34:10.000Z (28 days ago)
- Last Synced: 2026-08-12T14:32:05.163Z (5 days ago)
- Topics: algorithms, disaggregation, energy, energy-disaggregation, forecasting, ipython-notebook, nilm, nilm-algorithms, nilmtk, python
- Language: Python
- Homepage: http://nilmtk.github.io
- Size: 51.1 MB
- Stars: 944
- Watchers: 65
- Forks: 487
- Open Issues: 127
- Releases: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
README.md
NILMTK core
NILMTK is the data and evaluation layer of the open-source ecosystem for
non-intrusive load monitoring (NILM). It converts and loads energy datasets,
represents buildings and meters, prepares time windows, computes statistics and
metrics, and provides classical reference algorithms.
Use this repository when your work is about data, meters, preprocessing, or
metrics. For maintained neural models or reproducible benchmark claims, use
the companion repositories below.
Ecosystem repositories
| Research task | Repository |
|---|---|
| Dataset conversion, meter access, preprocessing, and metrics | NILMTK core — this repository |
| Appliance taxonomy, synonyms, meter relationships, and dataset schema | NILM Metadata |
| Disaggregation model implementation and testing | nilmtk-contrib |
| Fixed T1/T2/T3 evaluation and published result bundles | NILMbench |
The NILMTK ecosystem guide explains how these
layers fit together, which Docker route to use, and which papers to cite.
Supported installation
NILMTK core supports Python 3.11 and newer. Use Python 3.11 for an end-to-end
environment shared with nilmtk-contrib and NILMbench.
Install uv, then create
an isolated environment:
uv venv --python 3.11
source .venv/bin/activate
uv pip install "nilmtk @ git+https://github.com/nilmtk/nilmtk.git"
python -c "import nilmtk; print(nilmtk.__version__)"
On Windows PowerShell, activate the environment with
.venv\Scripts\Activate.ps1.
To use the DEDDIAG converter, install the optional extra:
uv pip install "nilmtk[deddiag] @ git+https://github.com/nilmtk/nilmtk.git"
Do not combine these instructions with old Python 3.6, Anaconda-channel, or
setup.py develop tutorials. Those routes describe earlier releases and are
not the supported installation for the current repository.
Verify the command-line converter
nilmtk-convert --help
nilmtk-convert list
# Example after downloading REDD:
nilmtk-convert redd /path/to/low_freq /path/to/redd.h5
Dataset-specific converter arguments and source links live under
nilmtk/dataset_converters.
Docker ownership
NILMTK core is a Python library and does not publish a separate official core
image. This is intentional:
- use the single nilmtk-contrib Dockerfile
for a general environment containing core, metadata, and model code; - use NILMbench for pinned CPU-smoke and
CUDA-benchmark runtimes that certify leaderboard results; - do not create an image for each algorithm.
Keeping container ownership in those two places prevents four repositories from
shipping drifting copies of the same environment.
Data
NILMTK does not redistribute REDD, UK-DALE, REFIT, or other licensed datasets.
Download data from its official custodian, comply with its license, and convert
it locally. A converted HDF5 dataset can then be opened with:
from nilmtk import DataSet
dataset = DataSet("redd.h5")
print(dataset.metadata)
print(dataset.buildings)
NILM Metadata is installed with core and supplies the canonical appliance
taxonomy, synonyms, and meter relationships used while loading datasets.
What core provides
- converters for public energy datasets;
- lazy access to buildings, meters, appliances, and time frames;
- resampling, alignment, preprocessing, and data-quality statistics;
- standard NILM accuracy and energy metrics;
- the rapid experimentation API used by nilmtk-contrib;
- classical reference disaggregators and baseline utilities.
Detailed API reference is published at
nilmtk.github.io/nilmtk/master.
The repository manual and notebooks live under docs/manual.
Development
git clone https://github.com/nilmtk/nilmtk.git
cd nilmtk
uv sync --extra dev
uv run pytest tests
Before opening a pull request, run the narrow test for your change, the current
package gate, and the documentation contract:
uv run pytest tests
uv run python scripts/check_docs.py
uv build
The historical core regression tests live under nilmtk/tests and
nilmtk/stats/tests. Run the affected files explicitly when changing those
modules; work to bring those fixtures into the default gate is tracked
separately.
Changes to dataset semantics belong in NILM Metadata. New model architectures
belong in nilmtk-contrib. Benchmark task definitions and published result
bundles belong in NILMbench.
Citation
If you use core dataset conversion, meter abstractions, preprocessing, or
metrics, cite the NILMTK paper:
@inproceedings{batra2014nilmtk,
title = {NILMTK: An Open Source Toolkit for Non-intrusive Load Monitoring},
author = {Batra, Nipun and Kelly, Jack and Parson, Oliver and Dutta, Haimonti
and Knottenbelt, William and Rogers, Alex and Singh, Amarjeet
and Srivastava, Mani},
booktitle = {Proceedings of the 5th ACM International Conference on Future
Energy Systems},
year = {2014},
pages = {265--276},
doi = {10.1145/2602044.2602051}
}
Also cite the NILM Metadata paper
when relying on its schema or taxonomy, the
nilmtk-contrib paper when using its
model suite, and the NILMBench2026 paper
when using its protocols, runner, or leaderboard results. Always cite the
original model and dataset papers as well.
Help and license
Search existing issues before opening
a report. Include the exact command, operating system, Python version, dataset
identity, and a minimal reproducer.
NILMTK is released under the Apache License 2.0.
Owner metadata
- Name: nilmtk
- Login: nilmtk
- Email:
- Kind: organization
- Description:
- Website:
- Location:
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/6094836?v=4
- Repositories: 7
- Last ynced at: 2024-03-26T07:15:56.402Z
- Profile URL: https://github.com/nilmtk
GitHub Events
Total
- Pull request event: 12
- Fork event: 26
- Issues event: 9
- Watch event: 71
- Issue comment event: 18
- Push event: 8
- Pull request review comment event: 5
- Pull request review event: 9
Last Year
- Pull request event: 5
- Fork event: 5
- Issues event: 1
- Watch event: 21
- Issue comment event: 3
- Push event: 4
- Pull request review event: 2
Committers metadata
Last synced: 2 days ago
Total Commits: 1,730
Total Committers: 57
Avg Commits per committer: 30.351
Development Distribution Score (DDS): 0.492
Commits in past year: 14
Committers in past year: 2
Avg Commits per committer in past year: 7.0
Development Distribution Score (DDS) in past year: 0.429
| Name | Commits | |
|---|---|---|
| Jack Kelly | j****t@x****k | 878 |
| nipunreddevil | n****l@g****m | 450 |
| Paulo Meira | 1****a | 123 |
| Oliver Parson | o****6@e****k | 36 |
| Oliver Parson | o****n@g****m | 28 |
| Rishi Baijal | r****4@i****n | 24 |
| josemao | j****a@d****s | 24 |
| ayushp20.com | a****0@g****l | 11 |
| beckel | b****l@i****h | 10 |
| Mridul Malpotra | m****a@g****m | 10 |
| Raktim Malakar | r****5@g****m | 10 |
| Guillaume Levasseur | p****l@p****t | 10 |
| Dhru Harsh Darshakbhai | 2****7@i****n | 9 |
| Han Wu | w****s@g****m | 8 |
| magusverma | m****1@i****n | 7 |
| Oliver Parson | o****n@b****k | 6 |
| Rajat | r****2@g****m | 6 |
| oliver parson | o****n@d****k | 5 |
| Oliver Parson | o****p@e****k | 5 |
| enfuego27826 | a****9@g****m | 5 |
| prince7003 | 1****3 | 5 |
| Batra Nipun | n****a@N****l | 4 |
| Oliver Parson | u****r@E****l | 4 |
| Andrea Monacchi | a****i@s****t | 3 |
| Batra Nipun | n****a@d****U | 3 |
| Andrea | a****i@g****m | 3 |
| unknown | r****0@g****m | 3 |
| Florian Kalinke | f****a@g****m | 3 |
| Hetvi Shastri | h****9@g****m | 3 |
| Joulo | u****r@d****k | 2 |
| and 27 more... | ||
Committer domains:
- pecanstreet.org: 3
- ecs.soton.ac.uk: 2
- iiitd.ac.in: 2
- xlk.org.uk: 1
- depeca.uah.es: 1
- inf.ethz.ch: 1
- posteo.net: 1
- iitgn.ac.in: 1
- bgch.co.uk: 1
- dhcp-23-228.wireless.soton.ac.uk: 1
- sg-monacchi-mac.nes.aau.at: 1
- d-172-27-98-104.bootp.virginia.edu: 1
- dhcp-159-45.wireless.soton.ac.uk: 1
- fing.edu.uy: 1
- ecs-mbp-oct-90.config: 1
- aau.at: 1
- bucher.cloud: 1
- sg-mac-monacchi.nes.aau.at: 1
- c324078.config: 1
- hellowatt.fr: 1
- stud.fh-rosenheim.de: 1
- bitdeli.com: 1
Issue and Pull Request metadata
Last synced: 3 days ago
Total issues: 877
Total pull requests: 158
Average time to close issues: 9 months
Average time to close pull requests: about 1 month
Total issue authors: 250
Total pull request authors: 53
Average comments per issue: 4.41
Average comments per pull request: 1.44
Merged pull request: 102
Bot issues: 0
Bot pull requests: 0
Past year issues: 3
Past year pull requests: 15
Past year average time to close issues: about 6 hours
Past year average time to close pull requests: 3 days
Past year issue authors: 3
Past year pull request authors: 3
Past year average comments per issue: 0.0
Past year average comments per pull request: 0.47
Past year merged pull request: 11
Past year bot issues: 0
Past year bot pull requests: 0
Top Issue Authors
- JackKelly (177)
- nipunbatra (140)
- gjwo (25)
- PMeira (21)
- sanketvijaydesai (18)
- walidsliti (16)
- RishiBaijal (12)
- suni9915 (11)
- nekovolta (10)
- deploy15 (9)
- oliparson (9)
- GautierAppert (9)
- haderazzini (9)
- DilanAgkoc (8)
- bundit786 (8)
Top Pull Request Authors
- prince7003 (20)
- ayushp20 (14)
- rajat-tech-002 (12)
- nipunbatra (10)
- wuhanstudio (9)
- beckel (8)
- enfuego27826 (8)
- pilillo (6)
- raktim2015 (6)
- levaphenyl (5)
- klemenjak (3)
- PMeira (3)
- camilomarino (3)
- Rithwikksvr (3)
- hetvishastri (3)
Top Issue Labels
- DataStore and format conversion (93)
- enhancement (84)
- question (57)
- bug (55)
- design (48)
- Building (34)
- outdated (34)
- documentation (32)
- NILM algorithm (30)
- Statistics and correlations (29)
- refactoring (25)
- Testing (17)
- pre-processing (17)
- Installation (15)
- HMM (12)
- Performance (11)
- support (10)
- Combinatorial Optimization (8)
- NILM metrics (8)
- simplify (6)
- invalid (5)
- needs more info (5)
- duplicate (4)
- Good as first PR (3)
- Review (2)
- offtopic (2)
- discussion (2)
- RE-API (2)
- in progress (2)
- planning (1)
Top Pull Request Labels
- DataStore and format conversion (3)
- enhancement (1)
- bug (1)
Package metadata
- Total packages: 1
- Total downloads: unknown
- Total dependent packages: 0
- Total dependent repositories: 0
- Total versions: 2
proxy.golang.org: github.com/nilmtk/nilmtk
- Homepage:
- Documentation: https://pkg.go.dev/github.com/nilmtk/nilmtk#section-documentation
- Licenses: apache-2.0
- Latest release: v0.1.1 (published about 12 years ago)
- Last Synced: 2026-08-15T15:02:56.820Z (2 days ago)
- Versions: 2
- Dependent Packages: 0
- Dependent Repositories: 0
-
Rankings:
- Dependent packages count: 5.395%
- Average: 5.576%
- Dependent repos count: 5.758%
Dependencies
- python 3.11-slim build
- actions/checkout v6 composite
- actions/setup-python v6 composite
- astral-sh/setup-uv v6 composite
- h5py >=3.9.0
- hmmlearn >=0.3.0
- ipython >=8.7.0
- matplotlib >=3.7.0
- networkx >=3.0
- nilm-metadata @ git+https://github.com/nilmtk/nilm_metadata.git@59c9990de4836d77c0dcd807bd4293e39e0cc314
- nose *
- numpy >=1.24.0
- pandas >=2.0.0
- pyyaml >=6.0
- scikit-learn >=1.3.0
- scipy >=1.11.0
- tables >=3.8.0
- tqdm >=4.65.0
Score: -Infinity