Skip to main content

Split and group energy billing data to analyse usage and aplpy load profiles

Project description

EnergyShaper

Split and group energy billing data to analyse usage and apply load profiles

Build Status Coverage Status

Split into intervals based on load profile

Given a bunch of energy readings:

<Reading start=2017-01-01 00:00:00, end=2017-02-01 00:00:00, usage 155.00>
<Reading start=2017-02-01 00:00:00, end=2017-02-09 00:00:00, usage 40.00>
<Reading start=2017-02-09 00:00:00, end=2017-03-01 00:00:00, usage 100.00>
<Reading start=2017-03-01 00:00:00, end=2017-03-01 12:00:00, usage 2.50>
<Reading start=2017-03-01 12:00:00, end=2017-03-02 00:00:00, usage 2.50>

Split them up based on a user-specified load profile. First split them so each reading is at most a day. The input readings can be at varying read intervals.

daily = list(split_into_daily_intervals(records))

Then split into required interval.

minute = list(split_into_profiled_intervals(daily, interval_m=1,
                                            profile=[1, 1, 1, 1]))

The profile is a list indicating a daily profile at whatever resolution you desire. It will adjust the ratios so they add to 100%.

profile=[0.05, 0.07, 0.12, 0.11, 0.14, 0.14, 0.27, 0.10]

The load will then be split up based on the profile:

<Reading start=2017-01-01 00:00:00, end=2017-01-01 00:01:00, usage 0.00>
<Reading start=2017-01-01 00:01:00, end=2017-01-01 00:02:00, usage 0.00>
<Reading start=2017-01-01 00:02:00, end=2017-01-01 00:03:00, usage 0.00>
...
<Reading start=2017-03-01 23:57:00, end=2017-03-01 23:58:00, usage 0.00>
<Reading start=2017-03-01 23:58:00, end=2017-03-01 23:59:00, usage 0.00>
<Reading start=2017-03-01 23:59:00, end=2017-03-02 00:00:00, usage 0.00>

Grouping intervals

The splitting functions will keep smaller interval lengths if available, so we may want to group them back up again to get a consistent interval across all readings. This will automatically split readings passed to it first.

half_hourly = list(group_into_profiled_intervals(minute, interval_m=30,
                                                 profile=[1, 1, 1, 1])
                                                 )
<Reading start=2017-01-01 00:00:00, end=2017-01-01 00:30:00, usage 0.10>
<Reading start=2017-01-01 00:30:00, end=2017-01-01 01:00:00, usage 0.10>
<Reading start=2017-01-01 01:00:00, end=2017-01-01 01:30:00, usage 0.10>
...
<Reading start=2017-03-01 22:30:00, end=2017-03-01 23:00:00, usage 0.10>
<Reading start=2017-03-01 23:00:00, end=2017-03-01 23:30:00, usage 0.10>
<Reading start=2017-03-01 23:30:00, end=2017-03-02 00:00:00, usage 0.10>

Daily stats

Finally, you can group back up to daily values again. There are a bunch of optional keyword arguments that lets you calculate what the usage is during peak and shoulder periods.

days = list(group_into_daily_summary(MONTH_RECORDS))
<DaySummary 2017-01-01 Usage:5.00>
<DaySummary 2017-01-02 Usage:5.00>
<DaySummary 2017-01-03 Usage:5.00>
...
<DaySummary 2017-02-27 Usage:5.00>
<DaySummary 2017-02-28 Usage:5.00>
<DaySummary 2017-03-01 Usage:5.00>

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

energy_shaper-0.1.tar.gz (5.6 kB view hashes)

Uploaded Source

Built Distribution

energy_shaper-0.1-py3-none-any.whl (7.8 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page