diff --git a/docs/api.rst b/docs/api.rst index 78d482fa..142d3734 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -7,6 +7,27 @@ API Reference Quality ======= +Energy +----------- + +Functions for checking if an energy data stream is cumulative +or not. + +.. autosummary:: + :toctree: generated/ + + quality.energy.cumulative_energy_simple_diff_check + quality.energy.cumulative_energy_avg_diff_check + +If the energy data stream passes the checks, then +it is converted to non-cumulative energy data stream via simple or +average differencing + +.. autosummary:: + :toctree: generated/ + + quality.energy.convert_cumulative_energy + Data Shifts ----------- diff --git a/docs/examples/energy/README.rst b/docs/examples/energy/README.rst new file mode 100644 index 00000000..9ff7b975 --- /dev/null +++ b/docs/examples/energy/README.rst @@ -0,0 +1,4 @@ +Energy +---------------- + +This includes examples for identifying and correcting cumulative energy time series. \ No newline at end of file diff --git a/docs/examples/energy/cumulative-energy-simple-avg-check.py b/docs/examples/energy/cumulative-energy-simple-avg-check.py new file mode 100644 index 00000000..8ae1ae93 --- /dev/null +++ b/docs/examples/energy/cumulative-energy-simple-avg-check.py @@ -0,0 +1,72 @@ +""" +Cumulative Energy via Average Difference +======================================= + +Check and correct energy series for cumulative energy via average differencing. +""" + +# %% +# AC energy data streams are often cumulative, meaning they increase +# over time. These energy streams need to be corrected into a form +# that resembles regular, non-cumulative data. This process involves +# applying a percent threshold to the average difference in subsequent values +# to check if the data is always increasing. If it passes, +# that check, then the data stream is cumulative and it can be corrected +# via average differencing. + +import pandas as pd +import matplotlib.pyplot as plt +from pvanalytics.quality import energy +import pathlib +import pvanalytics + +# %% +# First, read in the ac energy data. This data set contains one week of +# 10-minute ac energy data. + +pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent +energy_file = pvanalytics_dir / 'data' / 'system_10004_ac_energy.csv' +data = pd.read_csv(energy_file) +energy_series = data['ac_energy_inv_16425'] + +# %% +# Now check if the energy time series is cumulative via average differencing. +# This is done using the +# :py:func:`pvanalytics.quality.energy.cumulative_energy_avg_diff_check` +# function. + +is_cumulative = energy.cumulative_energy_avg_diff_check(energy_series) + +# %% +# If the energy series is cumulative,, then it can be converted to +# non-cumulative energy series via average differencing. +corrected_energy_series = 0.5 * \ + (energy_series.diff().shift(-1) + energy_series.diff()) + +# %% +# Plot the original, cumulative energy series. + +data.plot(x="local_measured_on", y='ac_energy_inv_16425') +plt.title("Cumulative Energy Series") +plt.xticks(rotation=45) +plt.xlabel("Datetime") +plt.ylabel("AC Energy (kWh)") +plt.tight_layout() +plt.show() + +# %% +# Plot the corrected, non-cumulative energy series. + +corrected_energy_df = pd.DataFrame({ + "local_measured_on": data["local_measured_on"], + "corrected_ac_energy_inv_16425": corrected_energy_series}) +corrected_energy_df = corrected_energy_df[ + corrected_energy_df["corrected_ac_energy_inv_16425"] >= 0] +corrected_energy_df.plot(x="local_measured_on", + y="corrected_ac_energy_inv_16425") +plt.title("Corrected, Non-cumulative Energy Series") +plt.xticks(rotation=45) +plt.xlabel("Datetime") +plt.ylabel("AC Energy (kWh)") +plt.tight_layout() +plt.show() diff --git a/docs/examples/energy/cumulative-energy-simple-diff-check.py b/docs/examples/energy/cumulative-energy-simple-diff-check.py new file mode 100644 index 00000000..6f4eb463 --- /dev/null +++ b/docs/examples/energy/cumulative-energy-simple-diff-check.py @@ -0,0 +1,72 @@ +""" +Cumulative Energy via Simple Difference +======================================= + +Check and correct energy series for cumulative energy with simple differencing. +""" + +# %% +# AC energy data streams are often cumulative, meaning they increase +# over time. These energy streams need to be corrected into a form +# that resembles regular, non-cumulative data. This process involves +# applying a percent threshold to the difference in subsequent values +# to check if the data is always increasing. If it passes, +# that check, then the data stream is cumulative and it can be corrected +# via simple differencing. + +import pandas as pd +import matplotlib.pyplot as plt +from pvanalytics.quality import energy +import pathlib +import pvanalytics + +# %% +# First, read in the ac energy data. This data set contains one week of +# 10-minute ac energy data. + +pvanalytics_dir = pathlib.Path(pvanalytics.__file__).parent +energy_file = pvanalytics_dir / 'data' / 'system_10004_ac_energy.csv' +data = pd.read_csv(energy_file) +energy_series = data['ac_energy_inv_16425'] + +# %% +# Now check if the energy time series is cumulative via simple differencing. +# This is done using the +# :py:func:`pvanalytics.quality.energy.cumulative_energy_simple_diff_check` +# function. + +is_cumulative = energy.cumulative_energy_simple_diff_check(energy_series) + +# %% +# If the energy series is cumulative, then it can be converted +# to the non-cumulative energy series. This is done using the +# :py:func:`pvanalytics.quality.energy.convert_cumulative_energy` function. +corrected_energy_series = energy.convert_cumulative_energy(energy_series) + +# %% +# Plot the original, cumulative energy series. + +data.plot(x="local_measured_on", y='ac_energy_inv_16425') +plt.title("Cumulative Energy Series") +plt.xticks(rotation=45) +plt.xlabel("Datetime") +plt.ylabel("AC Energy (kWh)") +plt.tight_layout() +plt.show() + +# %% +# Plot the corrected, non-cumulative energy series. + +corrected_energy_df = pd.DataFrame({ + "local_measured_on": data["local_measured_on"], + "corrected_ac_energy_inv_16425": corrected_energy_series}) +corrected_energy_df = corrected_energy_df[ + corrected_energy_df["corrected_ac_energy_inv_16425"] >= 0] +corrected_energy_df.plot(x="local_measured_on", + y="corrected_ac_energy_inv_16425") +plt.title("Corrected, Non-cumulative Energy Series") +plt.xticks(rotation=45) +plt.xlabel("Datetime") +plt.ylabel("AC Energy (kWh)") +plt.tight_layout() +plt.show() diff --git a/docs/whatsnew/0.2.1.rst b/docs/whatsnew/0.2.1.rst index b54d3aef..462eddce 100644 --- a/docs/whatsnew/0.2.1.rst +++ b/docs/whatsnew/0.2.1.rst @@ -7,6 +7,17 @@ Enhancements ~~~~~~~~~~~~ * Compatibility with numpy 2.0. (:pull:`211`) +* Added function :py:func:`~pvanalytics.quality.energy.cumulative_energy_simple_diff_check` to + check if an energy time series is cumulative via simple differencing. + (:issue:`165`, :pull:`212`) +* Added function :py:func:`~pvanalytics.quality.energy.cumulative_energy_avg_diff_check` to + check if an energy time series is cumulative via average differencing. + (:issue:`165`, :pull:`212`) +* Added function :py:func:`~pvanalytics.quality.energy.convert_cumulative_energy` to correct + the cumulative energy to interval-based, non-cumulative energy series, if the energy series + passes the simple difference :py:func:`~pvanalytics.quality.energy.cumulative_energy_simple_diff_check` + or average difference :py:func:`~pvanalytics.quality.energy.cumulative_energy_avg_diff_check` + checks. (:issue:`165`, :pull:`212`) Bug Fixes @@ -20,12 +31,13 @@ Requirements Documentation ~~~~~~~~~~~~~ - +* Added examples for checking cumulative energy time series. (:issue:`165`, :pull:`212`) Testing ~~~~~~~ - +* Added testing for ``pvanalytics.quality.energy``. (:issue:`165`, :pull:`212`) Contributors ~~~~~~~~~~~~ +* Quyen Nguyen (:ghuser:`qnguyen345`) \ No newline at end of file diff --git a/pvanalytics/data/system_10004_ac_energy.csv b/pvanalytics/data/system_10004_ac_energy.csv new file mode 100644 index 00000000..7f53709a --- /dev/null +++ b/pvanalytics/data/system_10004_ac_energy.csv @@ -0,0 +1,1151 @@ +utc_measured_on,ac_energy_inv_16425,local_measured_on +2011-06-23 10:00:00,6.0,2011-06-23 06:00:00 +2011-06-23 10:10:00,17.0,2011-06-23 06:10:00 +2011-06-23 10:20:00,40.0,2011-06-23 06:20:00 +2011-06-23 10:30:00,91.0,2011-06-23 06:30:00 +2011-06-23 10:40:00,143.0,2011-06-23 06:40:00 +2011-06-23 10:50:00,209.0,2011-06-23 06:50:00 +2011-06-23 11:00:00,282.0,2011-06-23 07:00:00 +2011-06-23 11:10:00,395.0,2011-06-23 07:10:00 +2011-06-23 11:20:00,513.0,2011-06-23 07:20:00 +2011-06-23 11:30:00,611.0,2011-06-23 07:30:00 +2011-06-23 11:40:00,708.0,2011-06-23 07:40:00 +2011-06-23 11:50:00,794.0,2011-06-23 07:50:00 +2011-06-23 12:00:00,859.0,2011-06-23 08:00:00 +2011-06-23 12:10:00,932.0,2011-06-23 08:10:00 +2011-06-23 12:20:00,1018.0,2011-06-23 08:20:00 +2011-06-23 12:30:00,1133.0,2011-06-23 08:30:00 +2011-06-23 12:40:00,1258.0,2011-06-23 08:40:00 +2011-06-23 12:50:00,1416.0,2011-06-23 08:50:00 +2011-06-23 13:00:00,1565.0,2011-06-23 09:00:00 +2011-06-23 13:10:00,1764.0,2011-06-23 09:10:00 +2011-06-23 13:20:00,2020.0,2011-06-23 09:20:00 +2011-06-23 13:30:00,2334.0,2011-06-23 09:30:00 +2011-06-23 13:40:00,2647.0,2011-06-23 09:40:00 +2011-06-23 13:50:00,2901.0,2011-06-23 09:50:00 +2011-06-23 14:00:00,3137.0,2011-06-23 10:00:00 +2011-06-23 14:10:00,3402.0,2011-06-23 10:10:00 +2011-06-23 14:20:00,3666.0,2011-06-23 10:20:00 +2011-06-23 14:30:00,3912.0,2011-06-23 10:30:00 +2011-06-23 14:40:00,4236.0,2011-06-23 10:40:00 +2011-06-23 14:50:00,4551.0,2011-06-23 10:50:00 +2011-06-23 15:00:00,5049.0,2011-06-23 11:00:00 +2011-06-23 15:10:00,5465.0,2011-06-23 11:10:00 +2011-06-23 15:20:00,5802.0,2011-06-23 11:20:00 +2011-06-23 15:30:00,6141.0,2011-06-23 11:30:00 +2011-06-23 15:40:00,6549.0,2011-06-23 11:40:00 +2011-06-23 15:50:00,7046.0,2011-06-23 11:50:00 +2011-06-23 16:00:00,7687.0,2011-06-23 12:00:00 +2011-06-23 16:10:00,8363.0,2011-06-23 12:10:00 +2011-06-23 16:20:00,8940.0,2011-06-23 12:20:00 +2011-06-23 16:30:00,9604.0,2011-06-23 12:30:00 +2011-06-23 16:40:00,10302.0,2011-06-23 12:40:00 +2011-06-23 16:50:00,10901.0,2011-06-23 12:50:00 +2011-06-23 17:00:00,11442.0,2011-06-23 13:00:00 +2011-06-23 17:10:00,12060.0,2011-06-23 13:10:00 +2011-06-23 17:20:00,12798.0,2011-06-23 13:20:00 +2011-06-23 17:30:00,13780.0,2011-06-23 13:30:00 +2011-06-23 17:40:00,14717.0,2011-06-23 13:40:00 +2011-06-23 17:50:00,15556.0,2011-06-23 13:50:00 +2011-06-23 18:00:00,16206.0,2011-06-23 14:00:00 +2011-06-23 18:10:00,16852.0,2011-06-23 14:10:00 +2011-06-23 18:20:00,17167.0,2011-06-23 14:20:00 +2011-06-23 18:30:00,17713.0,2011-06-23 14:30:00 +2011-06-23 18:40:00,18118.0,2011-06-23 14:40:00 +2011-06-23 18:50:00,18481.0,2011-06-23 14:50:00 +2011-06-23 19:00:00,18917.0,2011-06-23 15:00:00 +2011-06-23 19:10:00,19254.0,2011-06-23 15:10:00 +2011-06-23 19:20:00,19429.0,2011-06-23 15:20:00 +2011-06-23 19:30:00,19559.0,2011-06-23 15:30:00 +2011-06-23 19:40:00,19771.0,2011-06-23 15:40:00 +2011-06-23 19:50:00,20164.0,2011-06-23 15:50:00 +2011-06-23 20:00:00,20518.0,2011-06-23 16:00:00 +2011-06-23 20:10:00,20829.0,2011-06-23 16:10:00 +2011-06-23 20:20:00,21112.0,2011-06-23 16:20:00 +2011-06-23 20:30:00,21418.0,2011-06-23 16:30:00 +2011-06-23 20:40:00,21729.0,2011-06-23 16:40:00 +2011-06-23 20:50:00,22027.0,2011-06-23 16:50:00 +2011-06-23 21:00:00,22300.0,2011-06-23 17:00:00 +2011-06-23 21:10:00,22562.0,2011-06-23 17:10:00 +2011-06-23 21:20:00,22787.0,2011-06-23 17:20:00 +2011-06-23 21:30:00,22999.0,2011-06-23 17:30:00 +2011-06-23 21:40:00,23227.0,2011-06-23 17:40:00 +2011-06-23 21:50:00,23435.0,2011-06-23 17:50:00 +2011-06-23 22:00:00,23625.0,2011-06-23 18:00:00 +2011-06-23 22:10:00,23814.0,2011-06-23 18:10:00 +2011-06-23 22:20:00,24092.0,2011-06-23 18:20:00 +2011-06-23 22:30:00,24189.0,2011-06-23 18:30:00 +2011-06-23 22:40:00,24387.0,2011-06-23 18:40:00 +2011-06-23 22:50:00,24535.0,2011-06-23 18:50:00 +2011-06-23 23:00:00,24645.0,2011-06-23 19:00:00 +2011-06-23 23:10:00,24779.0,2011-06-23 19:10:00 +2011-06-23 23:20:00,24862.0,2011-06-23 19:20:00 +2011-06-23 23:30:00,24928.0,2011-06-23 19:30:00 +2011-06-23 23:40:00,24999.0,2011-06-23 19:40:00 +2011-06-23 23:50:00,25050.0,2011-06-23 19:50:00 +2011-06-24 00:00:00,25085.0,2011-06-23 20:00:00 +2011-06-24 00:10:00,25115.0,2011-06-23 20:10:00 +2011-06-24 00:20:00,25136.0,2011-06-23 20:20:00 +2011-06-24 00:30:00,25143.0,2011-06-23 20:30:00 +2011-06-24 10:10:00,0.0,2011-06-24 06:10:00 +2011-06-24 10:15:00,2.0,2011-06-24 06:15:00 +2011-06-24 10:20:00,6.0,2011-06-24 06:20:00 +2011-06-24 10:25:00,10.0,2011-06-24 06:25:00 +2011-06-24 10:30:00,15.0,2011-06-24 06:30:00 +2011-06-24 10:35:00,23.0,2011-06-24 06:35:00 +2011-06-24 10:40:00,30.0,2011-06-24 06:40:00 +2011-06-24 10:45:00,42.0,2011-06-24 06:45:00 +2011-06-24 10:50:00,62.0,2011-06-24 06:50:00 +2011-06-24 10:55:00,85.0,2011-06-24 06:55:00 +2011-06-24 11:00:00,108.0,2011-06-24 07:00:00 +2011-06-24 11:05:00,137.0,2011-06-24 07:05:00 +2011-06-24 11:10:00,167.0,2011-06-24 07:10:00 +2011-06-24 11:15:00,200.0,2011-06-24 07:15:00 +2011-06-24 11:20:00,234.0,2011-06-24 07:20:00 +2011-06-24 11:25:00,276.0,2011-06-24 07:25:00 +2011-06-24 11:30:00,325.0,2011-06-24 07:30:00 +2011-06-24 11:35:00,404.0,2011-06-24 07:35:00 +2011-06-24 11:40:00,461.0,2011-06-24 07:40:00 +2011-06-24 11:45:00,514.0,2011-06-24 07:45:00 +2011-06-24 11:50:00,652.0,2011-06-24 07:50:00 +2011-06-24 11:55:00,799.0,2011-06-24 07:55:00 +2011-06-24 12:00:00,933.0,2011-06-24 08:00:00 +2011-06-24 12:05:00,1126.0,2011-06-24 08:05:00 +2011-06-24 12:10:00,1331.0,2011-06-24 08:10:00 +2011-06-24 12:15:00,1503.0,2011-06-24 08:15:00 +2011-06-24 12:20:00,1685.0,2011-06-24 08:20:00 +2011-06-24 12:25:00,1915.0,2011-06-24 08:25:00 +2011-06-24 12:30:00,2086.0,2011-06-24 08:30:00 +2011-06-24 12:35:00,2197.0,2011-06-24 08:35:00 +2011-06-24 12:40:00,2296.0,2011-06-24 08:40:00 +2011-06-24 12:45:00,2410.0,2011-06-24 08:45:00 +2011-06-24 12:50:00,2518.0,2011-06-24 08:50:00 +2011-06-24 12:55:00,2642.0,2011-06-24 08:55:00 +2011-06-24 13:00:00,2790.0,2011-06-24 09:00:00 +2011-06-24 13:05:00,2954.0,2011-06-24 09:05:00 +2011-06-24 13:10:00,3143.0,2011-06-24 09:10:00 +2011-06-24 13:15:00,3315.0,2011-06-24 09:15:00 +2011-06-24 13:20:00,3642.0,2011-06-24 09:20:00 +2011-06-24 13:25:00,4043.0,2011-06-24 09:25:00 +2011-06-24 13:30:00,4464.0,2011-06-24 09:30:00 +2011-06-24 13:35:00,4786.0,2011-06-24 09:35:00 +2011-06-24 13:40:00,5024.0,2011-06-24 09:40:00 +2011-06-24 13:45:00,5390.0,2011-06-24 09:45:00 +2011-06-24 13:50:00,5786.0,2011-06-24 09:50:00 +2011-06-24 13:55:00,6148.0,2011-06-24 09:55:00 +2011-06-24 14:00:00,6463.0,2011-06-24 10:00:00 +2011-06-24 14:05:00,6770.0,2011-06-24 10:05:00 +2011-06-24 14:10:00,7121.0,2011-06-24 10:10:00 +2011-06-24 14:15:00,7487.0,2011-06-24 10:15:00 +2011-06-24 14:20:00,7966.0,2011-06-24 10:20:00 +2011-06-24 14:25:00,8350.0,2011-06-24 10:25:00 +2011-06-24 14:30:00,8621.0,2011-06-24 10:30:00 +2011-06-24 14:35:00,8958.0,2011-06-24 10:35:00 +2011-06-24 14:40:00,9423.0,2011-06-24 10:40:00 +2011-06-24 14:45:00,9855.0,2011-06-24 10:45:00 +2011-06-24 14:50:00,10247.0,2011-06-24 10:50:00 +2011-06-24 14:55:00,10616.0,2011-06-24 10:55:00 +2011-06-24 15:00:00,10989.0,2011-06-24 11:00:00 +2011-06-24 15:05:00,11377.0,2011-06-24 11:05:00 +2011-06-24 15:10:00,11736.0,2011-06-24 11:10:00 +2011-06-24 15:15:00,12042.0,2011-06-24 11:15:00 +2011-06-24 15:20:00,12316.0,2011-06-24 11:20:00 +2011-06-24 15:25:00,12563.0,2011-06-24 11:25:00 +2011-06-24 15:30:00,12888.0,2011-06-24 11:30:00 +2011-06-24 15:35:00,13208.0,2011-06-24 11:35:00 +2011-06-24 15:40:00,13513.0,2011-06-24 11:40:00 +2011-06-24 15:45:00,13750.0,2011-06-24 11:45:00 +2011-06-24 15:50:00,14215.0,2011-06-24 11:50:00 +2011-06-24 15:55:00,14764.0,2011-06-24 11:55:00 +2011-06-24 16:00:00,15151.0,2011-06-24 12:00:00 +2011-06-24 16:05:00,15522.0,2011-06-24 12:05:00 +2011-06-24 16:10:00,15921.0,2011-06-24 12:10:00 +2011-06-24 16:15:00,16357.0,2011-06-24 12:15:00 +2011-06-24 16:20:00,16836.0,2011-06-24 12:20:00 +2011-06-24 16:25:00,17310.0,2011-06-24 12:25:00 +2011-06-24 16:30:00,17720.0,2011-06-24 12:30:00 +2011-06-24 16:35:00,18214.0,2011-06-24 12:35:00 +2011-06-24 16:40:00,18721.0,2011-06-24 12:40:00 +2011-06-24 16:45:00,19131.0,2011-06-24 12:45:00 +2011-06-24 16:50:00,19590.0,2011-06-24 12:50:00 +2011-06-24 16:55:00,20121.0,2011-06-24 12:55:00 +2011-06-24 17:00:00,20667.0,2011-06-24 13:00:00 +2011-06-24 17:05:00,21201.0,2011-06-24 13:05:00 +2011-06-24 17:10:00,21730.0,2011-06-24 13:10:00 +2011-06-24 17:15:00,22251.0,2011-06-24 13:15:00 +2011-06-24 17:20:00,22775.0,2011-06-24 13:20:00 +2011-06-24 17:25:00,23297.0,2011-06-24 13:25:00 +2011-06-24 17:30:00,23821.0,2011-06-24 13:30:00 +2011-06-24 17:35:00,24343.0,2011-06-24 13:35:00 +2011-06-24 17:40:00,24860.0,2011-06-24 13:40:00 +2011-06-24 17:45:00,25311.0,2011-06-24 13:45:00 +2011-06-24 17:50:00,25570.0,2011-06-24 13:50:00 +2011-06-24 17:55:00,25869.0,2011-06-24 13:55:00 +2011-06-24 18:00:00,26360.0,2011-06-24 14:00:00 +2011-06-24 18:05:00,26730.0,2011-06-24 14:05:00 +2011-06-24 18:10:00,27070.0,2011-06-24 14:10:00 +2011-06-24 18:15:00,27490.0,2011-06-24 14:15:00 +2011-06-24 18:20:00,27768.0,2011-06-24 14:20:00 +2011-06-24 18:25:00,28045.0,2011-06-24 14:25:00 +2011-06-24 18:30:00,28449.0,2011-06-24 14:30:00 +2011-06-24 18:35:00,28842.0,2011-06-24 14:35:00 +2011-06-24 18:40:00,29226.0,2011-06-24 14:40:00 +2011-06-24 18:45:00,29660.0,2011-06-24 14:45:00 +2011-06-24 18:50:00,30090.0,2011-06-24 14:50:00 +2011-06-24 18:55:00,30513.0,2011-06-24 14:55:00 +2011-06-24 19:00:00,30796.0,2011-06-24 15:00:00 +2011-06-24 19:05:00,31049.0,2011-06-24 15:05:00 +2011-06-24 19:10:00,31303.0,2011-06-24 15:10:00 +2011-06-24 19:15:00,31457.0,2011-06-24 15:15:00 +2011-06-24 19:20:00,31655.0,2011-06-24 15:20:00 +2011-06-24 19:25:00,31905.0,2011-06-24 15:25:00 +2011-06-24 19:30:00,32244.0,2011-06-24 15:30:00 +2011-06-24 19:35:00,32675.0,2011-06-24 15:35:00 +2011-06-24 19:40:00,33120.0,2011-06-24 15:40:00 +2011-06-24 19:45:00,33564.0,2011-06-24 15:45:00 +2011-06-24 19:50:00,33950.0,2011-06-24 15:50:00 +2011-06-24 19:55:00,34187.0,2011-06-24 15:55:00 +2011-06-24 20:00:00,34295.0,2011-06-24 16:00:00 +2011-06-24 20:05:00,34348.0,2011-06-24 16:05:00 +2011-06-24 20:10:00,34431.0,2011-06-24 16:10:00 +2011-06-24 20:15:00,34592.0,2011-06-24 16:15:00 +2011-06-24 20:20:00,34888.0,2011-06-24 16:20:00 +2011-06-24 20:25:00,35230.0,2011-06-24 16:25:00 +2011-06-24 20:30:00,35493.0,2011-06-24 16:30:00 +2011-06-24 20:35:00,35773.0,2011-06-24 16:35:00 +2011-06-24 20:40:00,36052.0,2011-06-24 16:40:00 +2011-06-24 20:45:00,36295.0,2011-06-24 16:45:00 +2011-06-24 20:50:00,36554.0,2011-06-24 16:50:00 +2011-06-24 20:55:00,36823.0,2011-06-24 16:55:00 +2011-06-24 21:00:00,37091.0,2011-06-24 17:00:00 +2011-06-24 21:05:00,37329.0,2011-06-24 17:05:00 +2011-06-24 21:10:00,37540.0,2011-06-24 17:10:00 +2011-06-24 21:15:00,37727.0,2011-06-24 17:15:00 +2011-06-24 21:20:00,37901.0,2011-06-24 17:20:00 +2011-06-24 21:25:00,38077.0,2011-06-24 17:25:00 +2011-06-24 21:30:00,38247.0,2011-06-24 17:30:00 +2011-06-24 21:35:00,38383.0,2011-06-24 17:35:00 +2011-06-24 21:40:00,38468.0,2011-06-24 17:40:00 +2011-06-24 21:45:00,38545.0,2011-06-24 17:45:00 +2011-06-24 21:50:00,38647.0,2011-06-24 17:50:00 +2011-06-24 21:55:00,38768.0,2011-06-24 17:55:00 +2011-06-24 22:00:00,38891.0,2011-06-24 18:00:00 +2011-06-24 22:05:00,38994.0,2011-06-24 18:05:00 +2011-06-24 22:10:00,39098.0,2011-06-24 18:10:00 +2011-06-24 22:15:00,39195.0,2011-06-24 18:15:00 +2011-06-24 22:20:00,39270.0,2011-06-24 18:20:00 +2011-06-24 22:25:00,39339.0,2011-06-24 18:25:00 +2011-06-24 22:30:00,39399.0,2011-06-24 18:30:00 +2011-06-24 22:35:00,39452.0,2011-06-24 18:35:00 +2011-06-24 22:40:00,39509.0,2011-06-24 18:40:00 +2011-06-24 22:45:00,39567.0,2011-06-24 18:45:00 +2011-06-24 22:50:00,39619.0,2011-06-24 18:50:00 +2011-06-24 22:55:00,39662.0,2011-06-24 18:55:00 +2011-06-24 23:00:00,39694.0,2011-06-24 19:00:00 +2011-06-24 23:05:00,39720.0,2011-06-24 19:05:00 +2011-06-24 23:10:00,39742.0,2011-06-24 19:10:00 +2011-06-24 23:15:00,39763.0,2011-06-24 19:15:00 +2011-06-24 23:20:00,39787.0,2011-06-24 19:20:00 +2011-06-24 23:25:00,39815.0,2011-06-24 19:25:00 +2011-06-24 23:30:00,39840.0,2011-06-24 19:30:00 +2011-06-24 23:35:00,39859.0,2011-06-24 19:35:00 +2011-06-24 23:40:00,39875.0,2011-06-24 19:40:00 +2011-06-24 23:45:00,39888.0,2011-06-24 19:45:00 +2011-06-24 23:50:00,39899.0,2011-06-24 19:50:00 +2011-06-24 23:55:00,39908.0,2011-06-24 19:55:00 +2011-06-25 00:00:00,39916.0,2011-06-24 20:00:00 +2011-06-25 00:05:00,39922.0,2011-06-24 20:05:00 +2011-06-25 00:10:00,39927.0,2011-06-24 20:10:00 +2011-06-25 00:15:00,39931.0,2011-06-24 20:15:00 +2011-06-25 00:20:00,39934.0,2011-06-24 20:20:00 +2011-06-25 00:25:00,39935.0,2011-06-24 20:25:00 +2011-06-25 09:45:00,0.0,2011-06-25 05:45:00 +2011-06-25 09:50:00,2.0,2011-06-25 05:50:00 +2011-06-25 09:55:00,6.0,2011-06-25 05:55:00 +2011-06-25 10:00:00,12.0,2011-06-25 06:00:00 +2011-06-25 10:05:00,21.0,2011-06-25 06:05:00 +2011-06-25 10:10:00,31.0,2011-06-25 06:10:00 +2011-06-25 10:15:00,43.0,2011-06-25 06:15:00 +2011-06-25 10:20:00,58.0,2011-06-25 06:20:00 +2011-06-25 10:25:00,77.0,2011-06-25 06:25:00 +2011-06-25 10:30:00,97.0,2011-06-25 06:30:00 +2011-06-25 10:35:00,124.0,2011-06-25 06:35:00 +2011-06-25 10:40:00,160.0,2011-06-25 06:40:00 +2011-06-25 10:45:00,204.0,2011-06-25 06:45:00 +2011-06-25 10:50:00,261.0,2011-06-25 06:50:00 +2011-06-25 10:55:00,328.0,2011-06-25 06:55:00 +2011-06-25 11:00:00,404.0,2011-06-25 07:00:00 +2011-06-25 11:05:00,489.0,2011-06-25 07:05:00 +2011-06-25 11:10:00,582.0,2011-06-25 07:10:00 +2011-06-25 11:15:00,680.0,2011-06-25 07:15:00 +2011-06-25 11:20:00,780.0,2011-06-25 07:20:00 +2011-06-25 11:25:00,900.0,2011-06-25 07:25:00 +2011-06-25 11:30:00,1031.0,2011-06-25 07:30:00 +2011-06-25 11:35:00,1173.0,2011-06-25 07:35:00 +2011-06-25 11:40:00,1325.0,2011-06-25 07:40:00 +2011-06-25 11:45:00,1488.0,2011-06-25 07:45:00 +2011-06-25 11:50:00,1664.0,2011-06-25 07:50:00 +2011-06-25 11:55:00,1853.0,2011-06-25 07:55:00 +2011-06-25 12:00:00,2054.0,2011-06-25 08:00:00 +2011-06-25 12:05:00,2268.0,2011-06-25 08:05:00 +2011-06-25 12:10:00,2492.0,2011-06-25 08:10:00 +2011-06-25 12:15:00,2726.0,2011-06-25 08:15:00 +2011-06-25 12:20:00,2973.0,2011-06-25 08:20:00 +2011-06-25 12:25:00,3232.0,2011-06-25 08:25:00 +2011-06-25 12:30:00,3502.0,2011-06-25 08:30:00 +2011-06-25 12:35:00,3784.0,2011-06-25 08:35:00 +2011-06-25 12:40:00,4077.0,2011-06-25 08:40:00 +2011-06-25 12:45:00,4379.0,2011-06-25 08:45:00 +2011-06-25 12:50:00,4690.0,2011-06-25 08:50:00 +2011-06-25 12:55:00,5011.0,2011-06-25 08:55:00 +2011-06-25 13:00:00,5339.0,2011-06-25 09:00:00 +2011-06-25 13:05:00,5677.0,2011-06-25 09:05:00 +2011-06-25 13:10:00,6027.0,2011-06-25 09:10:00 +2011-06-25 13:15:00,6385.0,2011-06-25 09:15:00 +2011-06-25 13:20:00,6750.0,2011-06-25 09:20:00 +2011-06-25 13:25:00,7129.0,2011-06-25 09:25:00 +2011-06-25 13:30:00,7522.0,2011-06-25 09:30:00 +2011-06-25 13:35:00,7914.0,2011-06-25 09:35:00 +2011-06-25 13:40:00,8316.0,2011-06-25 09:40:00 +2011-06-25 13:45:00,8717.0,2011-06-25 09:45:00 +2011-06-25 13:50:00,9128.0,2011-06-25 09:50:00 +2011-06-25 13:55:00,9548.0,2011-06-25 09:55:00 +2011-06-25 14:00:00,9887.0,2011-06-25 10:00:00 +2011-06-25 14:05:00,10251.0,2011-06-25 10:05:00 +2011-06-25 14:10:00,10697.0,2011-06-25 10:10:00 +2011-06-25 14:15:00,11148.0,2011-06-25 10:15:00 +2011-06-25 14:20:00,11611.0,2011-06-25 10:20:00 +2011-06-25 14:25:00,11998.0,2011-06-25 10:25:00 +2011-06-25 14:30:00,12475.0,2011-06-25 10:30:00 +2011-06-25 14:35:00,12947.0,2011-06-25 10:35:00 +2011-06-25 14:40:00,13454.0,2011-06-25 10:40:00 +2011-06-25 14:45:00,13849.0,2011-06-25 10:45:00 +2011-06-25 14:50:00,14082.0,2011-06-25 10:50:00 +2011-06-25 14:55:00,14241.0,2011-06-25 10:55:00 +2011-06-25 15:00:00,14644.0,2011-06-25 11:00:00 +2011-06-25 15:05:00,15179.0,2011-06-25 11:05:00 +2011-06-25 15:10:00,15567.0,2011-06-25 11:10:00 +2011-06-25 15:15:00,16041.0,2011-06-25 11:15:00 +2011-06-25 15:20:00,16520.0,2011-06-25 11:20:00 +2011-06-25 15:25:00,17047.0,2011-06-25 11:25:00 +2011-06-25 15:30:00,17280.0,2011-06-25 11:30:00 +2011-06-25 15:35:00,17498.0,2011-06-25 11:35:00 +2011-06-25 15:40:00,17694.0,2011-06-25 11:40:00 +2011-06-25 15:45:00,17903.0,2011-06-25 11:45:00 +2011-06-25 15:50:00,18369.0,2011-06-25 11:50:00 +2011-06-25 15:55:00,18927.0,2011-06-25 11:55:00 +2011-06-25 16:00:00,19312.0,2011-06-25 12:00:00 +2011-06-25 16:05:00,19622.0,2011-06-25 12:05:00 +2011-06-25 16:10:00,19855.0,2011-06-25 12:10:00 +2011-06-25 16:15:00,20074.0,2011-06-25 12:15:00 +2011-06-25 16:20:00,20334.0,2011-06-25 12:20:00 +2011-06-25 16:25:00,20502.0,2011-06-25 12:25:00 +2011-06-25 16:30:00,20657.0,2011-06-25 12:30:00 +2011-06-25 16:35:00,20806.0,2011-06-25 12:35:00 +2011-06-25 16:40:00,20988.0,2011-06-25 12:40:00 +2011-06-25 16:45:00,21170.0,2011-06-25 12:45:00 +2011-06-25 16:50:00,21498.0,2011-06-25 12:50:00 +2011-06-25 16:55:00,21846.0,2011-06-25 12:55:00 +2011-06-25 17:00:00,22138.0,2011-06-25 13:00:00 +2011-06-25 17:05:00,22653.0,2011-06-25 13:05:00 +2011-06-25 17:10:00,22902.0,2011-06-25 13:10:00 +2011-06-25 17:15:00,23073.0,2011-06-25 13:15:00 +2011-06-25 17:20:00,23236.0,2011-06-25 13:20:00 +2011-06-25 17:25:00,23411.0,2011-06-25 13:25:00 +2011-06-25 17:30:00,23746.0,2011-06-25 13:30:00 +2011-06-25 17:35:00,24110.0,2011-06-25 13:35:00 +2011-06-25 17:40:00,24334.0,2011-06-25 13:40:00 +2011-06-25 17:45:00,24642.0,2011-06-25 13:45:00 +2011-06-25 17:50:00,25094.0,2011-06-25 13:50:00 +2011-06-25 17:55:00,25616.0,2011-06-25 13:55:00 +2011-06-25 18:00:00,26004.0,2011-06-25 14:00:00 +2011-06-25 18:05:00,26309.0,2011-06-25 14:05:00 +2011-06-25 18:10:00,26642.0,2011-06-25 14:10:00 +2011-06-25 18:15:00,27133.0,2011-06-25 14:15:00 +2011-06-25 18:20:00,27510.0,2011-06-25 14:20:00 +2011-06-25 18:25:00,27712.0,2011-06-25 14:25:00 +2011-06-25 18:30:00,27898.0,2011-06-25 14:30:00 +2011-06-25 18:35:00,28061.0,2011-06-25 14:35:00 +2011-06-25 18:40:00,28246.0,2011-06-25 14:40:00 +2011-06-25 18:45:00,28455.0,2011-06-25 14:45:00 +2011-06-25 18:50:00,28689.0,2011-06-25 14:50:00 +2011-06-25 18:55:00,28970.0,2011-06-25 14:55:00 +2011-06-25 19:00:00,29404.0,2011-06-25 15:00:00 +2011-06-25 19:05:00,29824.0,2011-06-25 15:05:00 +2011-06-25 19:10:00,30172.0,2011-06-25 15:10:00 +2011-06-25 19:15:00,30395.0,2011-06-25 15:15:00 +2011-06-25 19:20:00,30554.0,2011-06-25 15:20:00 +2011-06-25 19:25:00,30730.0,2011-06-25 15:25:00 +2011-06-25 19:30:00,31129.0,2011-06-25 15:30:00 +2011-06-25 19:35:00,31567.0,2011-06-25 15:35:00 +2011-06-25 19:40:00,31970.0,2011-06-25 15:40:00 +2011-06-25 19:45:00,32246.0,2011-06-25 15:45:00 +2011-06-25 19:50:00,32607.0,2011-06-25 15:50:00 +2011-06-25 19:55:00,32866.0,2011-06-25 15:55:00 +2011-06-25 20:00:00,33116.0,2011-06-25 16:00:00 +2011-06-25 20:05:00,33334.0,2011-06-25 16:05:00 +2011-06-25 20:10:00,33695.0,2011-06-25 16:10:00 +2011-06-25 20:15:00,33964.0,2011-06-25 16:15:00 +2011-06-25 20:20:00,34181.0,2011-06-25 16:20:00 +2011-06-25 20:25:00,34335.0,2011-06-25 16:25:00 +2011-06-25 20:30:00,34487.0,2011-06-25 16:30:00 +2011-06-25 20:35:00,34672.0,2011-06-25 16:35:00 +2011-06-25 20:40:00,34886.0,2011-06-25 16:40:00 +2011-06-25 20:45:00,35047.0,2011-06-25 16:45:00 +2011-06-25 20:50:00,35194.0,2011-06-25 16:50:00 +2011-06-25 20:55:00,35343.0,2011-06-25 16:55:00 +2011-06-25 21:00:00,35547.0,2011-06-25 17:00:00 +2011-06-25 21:05:00,35806.0,2011-06-25 17:05:00 +2011-06-25 21:10:00,35950.0,2011-06-25 17:10:00 +2011-06-25 21:15:00,36045.0,2011-06-25 17:15:00 +2011-06-25 21:20:00,36172.0,2011-06-25 17:20:00 +2011-06-25 21:25:00,36328.0,2011-06-25 17:25:00 +2011-06-25 21:30:00,36473.0,2011-06-25 17:30:00 +2011-06-25 21:35:00,36582.0,2011-06-25 17:35:00 +2011-06-25 21:40:00,36662.0,2011-06-25 17:40:00 +2011-06-25 21:45:00,36742.0,2011-06-25 17:45:00 +2011-06-25 21:50:00,36829.0,2011-06-25 17:50:00 +2011-06-25 21:55:00,36911.0,2011-06-25 17:55:00 +2011-06-25 22:00:00,36977.0,2011-06-25 18:00:00 +2011-06-25 22:05:00,37038.0,2011-06-25 18:05:00 +2011-06-25 22:10:00,37103.0,2011-06-25 18:10:00 +2011-06-25 22:15:00,37168.0,2011-06-25 18:15:00 +2011-06-25 22:20:00,37234.0,2011-06-25 18:20:00 +2011-06-25 22:25:00,37303.0,2011-06-25 18:25:00 +2011-06-25 22:30:00,37378.0,2011-06-25 18:30:00 +2011-06-25 22:35:00,37453.0,2011-06-25 18:35:00 +2011-06-25 22:40:00,37523.0,2011-06-25 18:40:00 +2011-06-25 22:45:00,37588.0,2011-06-25 18:45:00 +2011-06-25 22:50:00,37647.0,2011-06-25 18:50:00 +2011-06-25 22:55:00,37694.0,2011-06-25 18:55:00 +2011-06-25 23:00:00,37733.0,2011-06-25 19:00:00 +2011-06-25 23:05:00,37769.0,2011-06-25 19:05:00 +2011-06-25 23:10:00,37800.0,2011-06-25 19:10:00 +2011-06-25 23:15:00,37835.0,2011-06-25 19:15:00 +2011-06-25 23:20:00,37876.0,2011-06-25 19:20:00 +2011-06-25 23:25:00,37920.0,2011-06-25 19:25:00 +2011-06-25 23:30:00,37960.0,2011-06-25 19:30:00 +2011-06-25 23:35:00,37989.0,2011-06-25 19:35:00 +2011-06-25 23:40:00,38011.0,2011-06-25 19:40:00 +2011-06-25 23:45:00,38029.0,2011-06-25 19:45:00 +2011-06-25 23:50:00,38042.0,2011-06-25 19:50:00 +2011-06-25 23:55:00,38051.0,2011-06-25 19:55:00 +2011-06-26 00:00:00,38059.0,2011-06-25 20:00:00 +2011-06-26 00:05:00,38066.0,2011-06-25 20:05:00 +2011-06-26 00:10:00,38073.0,2011-06-25 20:10:00 +2011-06-26 00:15:00,38078.0,2011-06-25 20:15:00 +2011-06-26 00:20:00,38082.0,2011-06-25 20:20:00 +2011-06-26 00:25:00,38084.0,2011-06-25 20:25:00 +2011-06-26 00:30:00,38084.0,2011-06-25 20:30:00 +2011-06-26 09:45:00,0.0,2011-06-26 05:45:00 +2011-06-26 09:50:00,1.0,2011-06-26 05:50:00 +2011-06-26 09:55:00,5.0,2011-06-26 05:55:00 +2011-06-26 10:00:00,11.0,2011-06-26 06:00:00 +2011-06-26 10:05:00,20.0,2011-06-26 06:05:00 +2011-06-26 10:10:00,31.0,2011-06-26 06:10:00 +2011-06-26 10:15:00,45.0,2011-06-26 06:15:00 +2011-06-26 10:20:00,61.0,2011-06-26 06:20:00 +2011-06-26 10:25:00,81.0,2011-06-26 06:25:00 +2011-06-26 10:30:00,105.0,2011-06-26 06:30:00 +2011-06-26 10:35:00,136.0,2011-06-26 06:35:00 +2011-06-26 10:40:00,174.0,2011-06-26 06:40:00 +2011-06-26 10:45:00,219.0,2011-06-26 06:45:00 +2011-06-26 10:50:00,272.0,2011-06-26 06:50:00 +2011-06-26 10:55:00,332.0,2011-06-26 06:55:00 +2011-06-26 11:00:00,400.0,2011-06-26 07:00:00 +2011-06-26 11:05:00,474.0,2011-06-26 07:05:00 +2011-06-26 11:10:00,557.0,2011-06-26 07:10:00 +2011-06-26 11:15:00,648.0,2011-06-26 07:15:00 +2011-06-26 11:20:00,753.0,2011-06-26 07:20:00 +2011-06-26 11:25:00,875.0,2011-06-26 07:25:00 +2011-06-26 11:30:00,1012.0,2011-06-26 07:30:00 +2011-06-26 11:35:00,1174.0,2011-06-26 07:35:00 +2011-06-26 11:40:00,1345.0,2011-06-26 07:40:00 +2011-06-26 11:45:00,1467.0,2011-06-26 07:45:00 +2011-06-26 11:50:00,1570.0,2011-06-26 07:50:00 +2011-06-26 11:55:00,1678.0,2011-06-26 07:55:00 +2011-06-26 12:00:00,1778.0,2011-06-26 08:00:00 +2011-06-26 12:05:00,1858.0,2011-06-26 08:05:00 +2011-06-26 12:10:00,1963.0,2011-06-26 08:10:00 +2011-06-26 12:15:00,2152.0,2011-06-26 08:15:00 +2011-06-26 12:20:00,2394.0,2011-06-26 08:20:00 +2011-06-26 12:25:00,2628.0,2011-06-26 08:25:00 +2011-06-26 12:30:00,2847.0,2011-06-26 08:30:00 +2011-06-26 12:35:00,3125.0,2011-06-26 08:35:00 +2011-06-26 12:40:00,3419.0,2011-06-26 08:40:00 +2011-06-26 12:45:00,3729.0,2011-06-26 08:45:00 +2011-06-26 12:50:00,4055.0,2011-06-26 08:50:00 +2011-06-26 12:55:00,4407.0,2011-06-26 08:55:00 +2011-06-26 13:00:00,4764.0,2011-06-26 09:00:00 +2011-06-26 13:05:00,5067.0,2011-06-26 09:05:00 +2011-06-26 13:10:00,5394.0,2011-06-26 09:10:00 +2011-06-26 13:15:00,5642.0,2011-06-26 09:15:00 +2011-06-26 13:20:00,5882.0,2011-06-26 09:20:00 +2011-06-26 13:25:00,6129.0,2011-06-26 09:25:00 +2011-06-26 13:30:00,6342.0,2011-06-26 09:30:00 +2011-06-26 13:35:00,6540.0,2011-06-26 09:35:00 +2011-06-26 13:40:00,6714.0,2011-06-26 09:40:00 +2011-06-26 13:45:00,6870.0,2011-06-26 09:45:00 +2011-06-26 13:50:00,7031.0,2011-06-26 09:50:00 +2011-06-26 13:55:00,7199.0,2011-06-26 09:55:00 +2011-06-26 14:00:00,7380.0,2011-06-26 10:00:00 +2011-06-26 14:05:00,7555.0,2011-06-26 10:05:00 +2011-06-26 14:10:00,7711.0,2011-06-26 10:10:00 +2011-06-26 14:15:00,7855.0,2011-06-26 10:15:00 +2011-06-26 14:20:00,8000.0,2011-06-26 10:20:00 +2011-06-26 14:25:00,8156.0,2011-06-26 10:25:00 +2011-06-26 14:30:00,8357.0,2011-06-26 10:30:00 +2011-06-26 14:35:00,8624.0,2011-06-26 10:35:00 +2011-06-26 14:40:00,8906.0,2011-06-26 10:40:00 +2011-06-26 14:45:00,9233.0,2011-06-26 10:45:00 +2011-06-26 14:50:00,9672.0,2011-06-26 10:50:00 +2011-06-26 14:55:00,10185.0,2011-06-26 10:55:00 +2011-06-26 15:00:00,10678.0,2011-06-26 11:00:00 +2011-06-26 15:05:00,11150.0,2011-06-26 11:05:00 +2011-06-26 15:10:00,11522.0,2011-06-26 11:10:00 +2011-06-26 15:15:00,11857.0,2011-06-26 11:15:00 +2011-06-26 15:20:00,12197.0,2011-06-26 11:20:00 +2011-06-26 15:25:00,12573.0,2011-06-26 11:25:00 +2011-06-26 15:30:00,12902.0,2011-06-26 11:30:00 +2011-06-26 15:35:00,13240.0,2011-06-26 11:35:00 +2011-06-26 15:40:00,13513.0,2011-06-26 11:40:00 +2011-06-26 15:45:00,13810.0,2011-06-26 11:45:00 +2011-06-26 15:50:00,14178.0,2011-06-26 11:50:00 +2011-06-26 15:55:00,14696.0,2011-06-26 11:55:00 +2011-06-26 16:00:00,15156.0,2011-06-26 12:00:00 +2011-06-26 16:05:00,15482.0,2011-06-26 12:05:00 +2011-06-26 16:10:00,15799.0,2011-06-26 12:10:00 +2011-06-26 16:15:00,16231.0,2011-06-26 12:15:00 +2011-06-26 16:20:00,16736.0,2011-06-26 12:20:00 +2011-06-26 16:25:00,17267.0,2011-06-26 12:25:00 +2011-06-26 16:30:00,17641.0,2011-06-26 12:30:00 +2011-06-26 16:35:00,18072.0,2011-06-26 12:35:00 +2011-06-26 16:40:00,18602.0,2011-06-26 12:40:00 +2011-06-26 16:45:00,19026.0,2011-06-26 12:45:00 +2011-06-26 16:50:00,19447.0,2011-06-26 12:50:00 +2011-06-26 16:55:00,19790.0,2011-06-26 12:55:00 +2011-06-26 17:00:00,20024.0,2011-06-26 13:00:00 +2011-06-26 17:05:00,20262.0,2011-06-26 13:05:00 +2011-06-26 17:10:00,20593.0,2011-06-26 13:10:00 +2011-06-26 17:15:00,21043.0,2011-06-26 13:15:00 +2011-06-26 17:20:00,21424.0,2011-06-26 13:20:00 +2011-06-26 17:25:00,21627.0,2011-06-26 13:25:00 +2011-06-26 17:30:00,21856.0,2011-06-26 13:30:00 +2011-06-26 17:35:00,22308.0,2011-06-26 13:35:00 +2011-06-26 17:40:00,22587.0,2011-06-26 13:40:00 +2011-06-26 17:45:00,22819.0,2011-06-26 13:45:00 +2011-06-26 17:50:00,23143.0,2011-06-26 13:50:00 +2011-06-26 17:55:00,23638.0,2011-06-26 13:55:00 +2011-06-26 18:00:00,24052.0,2011-06-26 14:00:00 +2011-06-26 18:05:00,24586.0,2011-06-26 14:05:00 +2011-06-26 18:10:00,24992.0,2011-06-26 14:10:00 +2011-06-26 18:15:00,25293.0,2011-06-26 14:15:00 +2011-06-26 18:20:00,25546.0,2011-06-26 14:20:00 +2011-06-26 18:25:00,25743.0,2011-06-26 14:25:00 +2011-06-26 18:30:00,25942.0,2011-06-26 14:30:00 +2011-06-26 18:35:00,26181.0,2011-06-26 14:35:00 +2011-06-26 18:40:00,26337.0,2011-06-26 14:40:00 +2011-06-26 18:45:00,26481.0,2011-06-26 14:45:00 +2011-06-26 18:50:00,26577.0,2011-06-26 14:50:00 +2011-06-26 18:55:00,26684.0,2011-06-26 14:55:00 +2011-06-26 19:00:00,26881.0,2011-06-26 15:00:00 +2011-06-26 19:05:00,27067.0,2011-06-26 15:05:00 +2011-06-26 19:10:00,27243.0,2011-06-26 15:10:00 +2011-06-26 19:15:00,27434.0,2011-06-26 15:15:00 +2011-06-26 19:20:00,27608.0,2011-06-26 15:20:00 +2011-06-26 19:25:00,27786.0,2011-06-26 15:25:00 +2011-06-26 19:30:00,28105.0,2011-06-26 15:30:00 +2011-06-26 19:35:00,28437.0,2011-06-26 15:35:00 +2011-06-26 19:40:00,28643.0,2011-06-26 15:40:00 +2011-06-26 19:45:00,28794.0,2011-06-26 15:45:00 +2011-06-26 19:50:00,28978.0,2011-06-26 15:50:00 +2011-06-26 19:55:00,29132.0,2011-06-26 15:55:00 +2011-06-26 20:00:00,29237.0,2011-06-26 16:00:00 +2011-06-26 20:05:00,29371.0,2011-06-26 16:05:00 +2011-06-26 20:10:00,29495.0,2011-06-26 16:10:00 +2011-06-26 20:15:00,29680.0,2011-06-26 16:15:00 +2011-06-26 20:20:00,29881.0,2011-06-26 16:20:00 +2011-06-26 20:25:00,30079.0,2011-06-26 16:25:00 +2011-06-26 20:30:00,30282.0,2011-06-26 16:30:00 +2011-06-26 20:35:00,30455.0,2011-06-26 16:35:00 +2011-06-26 20:40:00,30577.0,2011-06-26 16:40:00 +2011-06-26 20:45:00,30681.0,2011-06-26 16:45:00 +2011-06-26 20:50:00,30793.0,2011-06-26 16:50:00 +2011-06-26 20:55:00,30869.0,2011-06-26 16:55:00 +2011-06-26 21:00:00,30927.0,2011-06-26 17:00:00 +2011-06-26 21:05:00,30973.0,2011-06-26 17:05:00 +2011-06-26 21:10:00,31027.0,2011-06-26 17:10:00 +2011-06-26 21:15:00,31108.0,2011-06-26 17:15:00 +2011-06-26 21:20:00,31201.0,2011-06-26 17:20:00 +2011-06-26 21:25:00,31267.0,2011-06-26 17:25:00 +2011-06-26 21:30:00,31317.0,2011-06-26 17:30:00 +2011-06-26 21:35:00,31355.0,2011-06-26 17:35:00 +2011-06-26 21:40:00,31393.0,2011-06-26 17:40:00 +2011-06-26 21:45:00,31437.0,2011-06-26 17:45:00 +2011-06-26 21:50:00,31480.0,2011-06-26 17:50:00 +2011-06-26 21:55:00,31524.0,2011-06-26 17:55:00 +2011-06-26 22:00:00,31581.0,2011-06-26 18:00:00 +2011-06-26 22:05:00,31658.0,2011-06-26 18:05:00 +2011-06-26 22:10:00,31737.0,2011-06-26 18:10:00 +2011-06-26 22:15:00,31817.0,2011-06-26 18:15:00 +2011-06-26 22:20:00,31892.0,2011-06-26 18:20:00 +2011-06-26 22:25:00,31957.0,2011-06-26 18:25:00 +2011-06-26 22:30:00,32017.0,2011-06-26 18:30:00 +2011-06-26 22:35:00,32075.0,2011-06-26 18:35:00 +2011-06-26 22:40:00,32132.0,2011-06-26 18:40:00 +2011-06-26 22:45:00,32182.0,2011-06-26 18:45:00 +2011-06-26 22:50:00,32224.0,2011-06-26 18:50:00 +2011-06-26 22:55:00,32264.0,2011-06-26 18:55:00 +2011-06-26 23:00:00,32301.0,2011-06-26 19:00:00 +2011-06-26 23:05:00,32331.0,2011-06-26 19:05:00 +2011-06-26 23:10:00,32358.0,2011-06-26 19:10:00 +2011-06-26 23:15:00,32383.0,2011-06-26 19:15:00 +2011-06-26 23:20:00,32404.0,2011-06-26 19:20:00 +2011-06-26 23:25:00,32422.0,2011-06-26 19:25:00 +2011-06-26 23:30:00,32438.0,2011-06-26 19:30:00 +2011-06-26 23:35:00,32453.0,2011-06-26 19:35:00 +2011-06-26 23:40:00,32465.0,2011-06-26 19:40:00 +2011-06-26 23:45:00,32478.0,2011-06-26 19:45:00 +2011-06-26 23:50:00,32493.0,2011-06-26 19:50:00 +2011-06-26 23:55:00,32507.0,2011-06-26 19:55:00 +2011-06-27 00:00:00,32518.0,2011-06-26 20:00:00 +2011-06-27 00:05:00,32528.0,2011-06-26 20:05:00 +2011-06-27 00:10:00,32535.0,2011-06-26 20:10:00 +2011-06-27 00:15:00,32537.0,2011-06-26 20:15:00 +2011-06-27 00:20:00,32537.0,2011-06-26 20:20:00 +2011-06-27 09:50:00,0.0,2011-06-27 05:50:00 +2011-06-27 09:55:00,1.0,2011-06-27 05:55:00 +2011-06-27 10:00:00,3.0,2011-06-27 06:00:00 +2011-06-27 10:05:00,7.0,2011-06-27 06:05:00 +2011-06-27 10:10:00,12.0,2011-06-27 06:10:00 +2011-06-27 10:15:00,20.0,2011-06-27 06:15:00 +2011-06-27 10:20:00,30.0,2011-06-27 06:20:00 +2011-06-27 10:25:00,45.0,2011-06-27 06:25:00 +2011-06-27 10:30:00,63.0,2011-06-27 06:30:00 +2011-06-27 10:35:00,87.0,2011-06-27 06:35:00 +2011-06-27 10:40:00,117.0,2011-06-27 06:40:00 +2011-06-27 10:45:00,145.0,2011-06-27 06:45:00 +2011-06-27 10:50:00,181.0,2011-06-27 06:50:00 +2011-06-27 10:55:00,237.0,2011-06-27 06:55:00 +2011-06-27 11:00:00,303.0,2011-06-27 07:00:00 +2011-06-27 11:05:00,380.0,2011-06-27 07:05:00 +2011-06-27 11:10:00,468.0,2011-06-27 07:10:00 +2011-06-27 11:15:00,569.0,2011-06-27 07:15:00 +2011-06-27 11:20:00,688.0,2011-06-27 07:20:00 +2011-06-27 11:25:00,833.0,2011-06-27 07:25:00 +2011-06-27 11:30:00,975.0,2011-06-27 07:30:00 +2011-06-27 11:35:00,1105.0,2011-06-27 07:35:00 +2011-06-27 11:40:00,1232.0,2011-06-27 07:40:00 +2011-06-27 11:45:00,1351.0,2011-06-27 07:45:00 +2011-06-27 11:50:00,1465.0,2011-06-27 07:50:00 +2011-06-27 11:55:00,1572.0,2011-06-27 07:55:00 +2011-06-27 12:00:00,1676.0,2011-06-27 08:00:00 +2011-06-27 12:05:00,1776.0,2011-06-27 08:05:00 +2011-06-27 12:10:00,1881.0,2011-06-27 08:10:00 +2011-06-27 12:15:00,1994.0,2011-06-27 08:15:00 +2011-06-27 12:20:00,2112.0,2011-06-27 08:20:00 +2011-06-27 12:25:00,2236.0,2011-06-27 08:25:00 +2011-06-27 12:30:00,2374.0,2011-06-27 08:30:00 +2011-06-27 12:35:00,2543.0,2011-06-27 08:35:00 +2011-06-27 12:40:00,2722.0,2011-06-27 08:40:00 +2011-06-27 12:45:00,2891.0,2011-06-27 08:45:00 +2011-06-27 12:50:00,3145.0,2011-06-27 08:50:00 +2011-06-27 12:55:00,3481.0,2011-06-27 08:55:00 +2011-06-27 13:00:00,3828.0,2011-06-27 09:00:00 +2011-06-27 13:05:00,4194.0,2011-06-27 09:05:00 +2011-06-27 13:10:00,4543.0,2011-06-27 09:10:00 +2011-06-27 13:15:00,4928.0,2011-06-27 09:15:00 +2011-06-27 13:20:00,5289.0,2011-06-27 09:20:00 +2011-06-27 13:25:00,5506.0,2011-06-27 09:25:00 +2011-06-27 13:30:00,5655.0,2011-06-27 09:30:00 +2011-06-27 13:35:00,5785.0,2011-06-27 09:35:00 +2011-06-27 13:40:00,5885.0,2011-06-27 09:40:00 +2011-06-27 13:45:00,5959.0,2011-06-27 09:45:00 +2011-06-27 13:50:00,6018.0,2011-06-27 09:50:00 +2011-06-27 13:55:00,6075.0,2011-06-27 09:55:00 +2011-06-27 14:00:00,6134.0,2011-06-27 10:00:00 +2011-06-27 14:05:00,6191.0,2011-06-27 10:05:00 +2011-06-27 14:10:00,6255.0,2011-06-27 10:10:00 +2011-06-27 14:15:00,6337.0,2011-06-27 10:15:00 +2011-06-27 14:20:00,6433.0,2011-06-27 10:20:00 +2011-06-27 14:25:00,6536.0,2011-06-27 10:25:00 +2011-06-27 14:30:00,6645.0,2011-06-27 10:30:00 +2011-06-27 14:35:00,6761.0,2011-06-27 10:35:00 +2011-06-27 14:40:00,6889.0,2011-06-27 10:40:00 +2011-06-27 14:45:00,7032.0,2011-06-27 10:45:00 +2011-06-27 14:50:00,7193.0,2011-06-27 10:50:00 +2011-06-27 14:55:00,7336.0,2011-06-27 10:55:00 +2011-06-27 15:00:00,7434.0,2011-06-27 11:00:00 +2011-06-27 15:05:00,7527.0,2011-06-27 11:05:00 +2011-06-27 15:10:00,7634.0,2011-06-27 11:10:00 +2011-06-27 15:15:00,7760.0,2011-06-27 11:15:00 +2011-06-27 15:20:00,7904.0,2011-06-27 11:20:00 +2011-06-27 15:25:00,8062.0,2011-06-27 11:25:00 +2011-06-27 15:30:00,8232.0,2011-06-27 11:30:00 +2011-06-27 15:35:00,8400.0,2011-06-27 11:35:00 +2011-06-27 15:40:00,8566.0,2011-06-27 11:40:00 +2011-06-27 15:45:00,8739.0,2011-06-27 11:45:00 +2011-06-27 15:50:00,8917.0,2011-06-27 11:50:00 +2011-06-27 15:55:00,9102.0,2011-06-27 11:55:00 +2011-06-27 16:00:00,9299.0,2011-06-27 12:00:00 +2011-06-27 16:05:00,9497.0,2011-06-27 12:05:00 +2011-06-27 16:10:00,9676.0,2011-06-27 12:10:00 +2011-06-27 16:15:00,9850.0,2011-06-27 12:15:00 +2011-06-27 16:20:00,10040.0,2011-06-27 12:20:00 +2011-06-27 16:25:00,10246.0,2011-06-27 12:25:00 +2011-06-27 16:30:00,10449.0,2011-06-27 12:30:00 +2011-06-27 16:35:00,10640.0,2011-06-27 12:35:00 +2011-06-27 16:40:00,10849.0,2011-06-27 12:40:00 +2011-06-27 16:45:00,11060.0,2011-06-27 12:45:00 +2011-06-27 16:50:00,11268.0,2011-06-27 12:50:00 +2011-06-27 16:55:00,11470.0,2011-06-27 12:55:00 +2011-06-27 17:00:00,11670.0,2011-06-27 13:00:00 +2011-06-27 17:05:00,11869.0,2011-06-27 13:05:00 +2011-06-27 17:10:00,12080.0,2011-06-27 13:10:00 +2011-06-27 17:15:00,12314.0,2011-06-27 13:15:00 +2011-06-27 17:20:00,12600.0,2011-06-27 13:20:00 +2011-06-27 17:25:00,12906.0,2011-06-27 13:25:00 +2011-06-27 17:30:00,13186.0,2011-06-27 13:30:00 +2011-06-27 17:35:00,13478.0,2011-06-27 13:35:00 +2011-06-27 17:40:00,13779.0,2011-06-27 13:40:00 +2011-06-27 17:45:00,14079.0,2011-06-27 13:45:00 +2011-06-27 17:50:00,14370.0,2011-06-27 13:50:00 +2011-06-27 17:55:00,14647.0,2011-06-27 13:55:00 +2011-06-27 18:00:00,14921.0,2011-06-27 14:00:00 +2011-06-27 18:05:00,15187.0,2011-06-27 14:05:00 +2011-06-27 18:10:00,15450.0,2011-06-27 14:10:00 +2011-06-27 18:15:00,15710.0,2011-06-27 14:15:00 +2011-06-27 18:20:00,15999.0,2011-06-27 14:20:00 +2011-06-27 18:25:00,16333.0,2011-06-27 14:25:00 +2011-06-27 18:30:00,16695.0,2011-06-27 14:30:00 +2011-06-27 18:35:00,17097.0,2011-06-27 14:35:00 +2011-06-27 18:40:00,17507.0,2011-06-27 14:40:00 +2011-06-27 18:45:00,17836.0,2011-06-27 14:45:00 +2011-06-27 18:50:00,18081.0,2011-06-27 14:50:00 +2011-06-27 18:55:00,18270.0,2011-06-27 14:55:00 +2011-06-27 19:00:00,18424.0,2011-06-27 15:00:00 +2011-06-27 19:05:00,18560.0,2011-06-27 15:05:00 +2011-06-27 19:10:00,18700.0,2011-06-27 15:10:00 +2011-06-27 19:15:00,18833.0,2011-06-27 15:15:00 +2011-06-27 19:20:00,18952.0,2011-06-27 15:20:00 +2011-06-27 19:25:00,19067.0,2011-06-27 15:25:00 +2011-06-27 19:30:00,19182.0,2011-06-27 15:30:00 +2011-06-27 19:35:00,19291.0,2011-06-27 15:35:00 +2011-06-27 19:40:00,19379.0,2011-06-27 15:40:00 +2011-06-27 19:45:00,19454.0,2011-06-27 15:45:00 +2011-06-27 19:50:00,19531.0,2011-06-27 15:50:00 +2011-06-27 19:55:00,19613.0,2011-06-27 15:55:00 +2011-06-27 20:00:00,19693.0,2011-06-27 16:00:00 +2011-06-27 20:05:00,19775.0,2011-06-27 16:05:00 +2011-06-27 20:10:00,19871.0,2011-06-27 16:10:00 +2011-06-27 20:15:00,19980.0,2011-06-27 16:15:00 +2011-06-27 20:20:00,20087.0,2011-06-27 16:20:00 +2011-06-27 20:25:00,20208.0,2011-06-27 16:25:00 +2011-06-27 20:30:00,20365.0,2011-06-27 16:30:00 +2011-06-27 20:35:00,20551.0,2011-06-27 16:35:00 +2011-06-27 20:40:00,20736.0,2011-06-27 16:40:00 +2011-06-27 20:45:00,20935.0,2011-06-27 16:45:00 +2011-06-27 20:50:00,21136.0,2011-06-27 16:50:00 +2011-06-27 20:55:00,21337.0,2011-06-27 16:55:00 +2011-06-27 21:00:00,21518.0,2011-06-27 17:00:00 +2011-06-27 21:05:00,21681.0,2011-06-27 17:05:00 +2011-06-27 21:10:00,21821.0,2011-06-27 17:10:00 +2011-06-27 21:15:00,21957.0,2011-06-27 17:15:00 +2011-06-27 21:20:00,22101.0,2011-06-27 17:20:00 +2011-06-27 21:25:00,22248.0,2011-06-27 17:25:00 +2011-06-27 21:30:00,22402.0,2011-06-27 17:30:00 +2011-06-27 21:35:00,22549.0,2011-06-27 17:35:00 +2011-06-27 21:40:00,22679.0,2011-06-27 17:40:00 +2011-06-27 21:45:00,22787.0,2011-06-27 17:45:00 +2011-06-27 21:50:00,22891.0,2011-06-27 17:50:00 +2011-06-27 21:55:00,22984.0,2011-06-27 17:55:00 +2011-06-27 22:00:00,23086.0,2011-06-27 18:00:00 +2011-06-27 22:05:00,23193.0,2011-06-27 18:05:00 +2011-06-27 22:10:00,23303.0,2011-06-27 18:10:00 +2011-06-27 22:15:00,23414.0,2011-06-27 18:15:00 +2011-06-27 22:20:00,23507.0,2011-06-27 18:20:00 +2011-06-27 22:25:00,23586.0,2011-06-27 18:25:00 +2011-06-27 22:30:00,23663.0,2011-06-27 18:30:00 +2011-06-27 22:35:00,23755.0,2011-06-27 18:35:00 +2011-06-27 22:40:00,23851.0,2011-06-27 18:40:00 +2011-06-27 22:45:00,23945.0,2011-06-27 18:45:00 +2011-06-27 22:50:00,24030.0,2011-06-27 18:50:00 +2011-06-27 22:55:00,24099.0,2011-06-27 18:55:00 +2011-06-27 23:00:00,24168.0,2011-06-27 19:00:00 +2011-06-27 23:05:00,24228.0,2011-06-27 19:05:00 +2011-06-27 23:10:00,24276.0,2011-06-27 19:10:00 +2011-06-27 23:15:00,24317.0,2011-06-27 19:15:00 +2011-06-27 23:20:00,24355.0,2011-06-27 19:20:00 +2011-06-27 23:25:00,24388.0,2011-06-27 19:25:00 +2011-06-27 23:30:00,24418.0,2011-06-27 19:30:00 +2011-06-27 23:35:00,24446.0,2011-06-27 19:35:00 +2011-06-27 23:40:00,24473.0,2011-06-27 19:40:00 +2011-06-27 23:45:00,24498.0,2011-06-27 19:45:00 +2011-06-27 23:50:00,24520.0,2011-06-27 19:50:00 +2011-06-27 23:55:00,24538.0,2011-06-27 19:55:00 +2011-06-28 00:00:00,24554.0,2011-06-27 20:00:00 +2011-06-28 00:05:00,24570.0,2011-06-27 20:05:00 +2011-06-28 00:10:00,24583.0,2011-06-27 20:10:00 +2011-06-28 00:15:00,24594.0,2011-06-27 20:15:00 +2011-06-28 00:20:00,24601.0,2011-06-27 20:20:00 +2011-06-28 00:25:00,24605.0,2011-06-27 20:25:00 +2011-06-28 09:45:00,0.0,2011-06-28 05:45:00 +2011-06-28 09:50:00,0.0,2011-06-28 05:50:00 +2011-06-28 09:55:00,0.0,2011-06-28 05:55:00 +2011-06-28 10:00:00,2.0,2011-06-28 06:00:00 +2011-06-28 10:05:00,8.0,2011-06-28 06:05:00 +2011-06-28 10:10:00,17.0,2011-06-28 06:10:00 +2011-06-28 10:15:00,28.0,2011-06-28 06:15:00 +2011-06-28 10:20:00,38.0,2011-06-28 06:20:00 +2011-06-28 10:25:00,50.0,2011-06-28 06:25:00 +2011-06-28 10:30:00,65.0,2011-06-28 06:30:00 +2011-06-28 10:35:00,89.0,2011-06-28 06:35:00 +2011-06-28 10:40:00,122.0,2011-06-28 06:40:00 +2011-06-28 10:45:00,152.0,2011-06-28 06:45:00 +2011-06-28 10:50:00,184.0,2011-06-28 06:50:00 +2011-06-28 10:55:00,221.0,2011-06-28 06:55:00 +2011-06-28 11:00:00,274.0,2011-06-28 07:00:00 +2011-06-28 11:05:00,330.0,2011-06-28 07:05:00 +2011-06-28 11:10:00,374.0,2011-06-28 07:10:00 +2011-06-28 11:15:00,419.0,2011-06-28 07:15:00 +2011-06-28 11:20:00,496.0,2011-06-28 07:20:00 +2011-06-28 11:25:00,596.0,2011-06-28 07:25:00 +2011-06-28 11:30:00,662.0,2011-06-28 07:30:00 +2011-06-28 11:35:00,720.0,2011-06-28 07:35:00 +2011-06-28 11:40:00,836.0,2011-06-28 07:40:00 +2011-06-28 11:45:00,1009.0,2011-06-28 07:45:00 +2011-06-28 11:50:00,1159.0,2011-06-28 07:50:00 +2011-06-28 11:55:00,1238.0,2011-06-28 07:55:00 +2011-06-28 12:00:00,1364.0,2011-06-28 08:00:00 +2011-06-28 12:05:00,1505.0,2011-06-28 08:05:00 +2011-06-28 12:10:00,1661.0,2011-06-28 08:10:00 +2011-06-28 12:15:00,1864.0,2011-06-28 08:15:00 +2011-06-28 12:20:00,2036.0,2011-06-28 08:20:00 +2011-06-28 12:25:00,2146.0,2011-06-28 08:25:00 +2011-06-28 12:30:00,2221.0,2011-06-28 08:30:00 +2011-06-28 12:35:00,2297.0,2011-06-28 08:35:00 +2011-06-28 12:40:00,2399.0,2011-06-28 08:40:00 +2011-06-28 12:45:00,2491.0,2011-06-28 08:45:00 +2011-06-28 12:50:00,2566.0,2011-06-28 08:50:00 +2011-06-28 12:55:00,2644.0,2011-06-28 08:55:00 +2011-06-28 13:00:00,2711.0,2011-06-28 09:00:00 +2011-06-28 13:05:00,2757.0,2011-06-28 09:05:00 +2011-06-28 13:10:00,2814.0,2011-06-28 09:10:00 +2011-06-28 13:15:00,2884.0,2011-06-28 09:15:00 +2011-06-28 13:20:00,2942.0,2011-06-28 09:20:00 +2011-06-28 13:25:00,2997.0,2011-06-28 09:25:00 +2011-06-28 13:30:00,3074.0,2011-06-28 09:30:00 +2011-06-28 13:35:00,3194.0,2011-06-28 09:35:00 +2011-06-28 13:40:00,3346.0,2011-06-28 09:40:00 +2011-06-28 13:45:00,3451.0,2011-06-28 09:45:00 +2011-06-28 13:50:00,3496.0,2011-06-28 09:50:00 +2011-06-28 13:55:00,3527.0,2011-06-28 09:55:00 +2011-06-28 14:00:00,3563.0,2011-06-28 10:00:00 +2011-06-28 14:05:00,3592.0,2011-06-28 10:05:00 +2011-06-28 14:10:00,3612.0,2011-06-28 10:10:00 +2011-06-28 14:15:00,3639.0,2011-06-28 10:15:00 +2011-06-28 14:20:00,3665.0,2011-06-28 10:20:00 +2011-06-28 14:25:00,3690.0,2011-06-28 10:25:00 +2011-06-28 14:30:00,3724.0,2011-06-28 10:30:00 +2011-06-28 14:35:00,3786.0,2011-06-28 10:35:00 +2011-06-28 14:40:00,3875.0,2011-06-28 10:40:00 +2011-06-28 14:45:00,3993.0,2011-06-28 10:45:00 +2011-06-28 14:50:00,4140.0,2011-06-28 10:50:00 +2011-06-28 14:55:00,4305.0,2011-06-28 10:55:00 +2011-06-28 15:00:00,4484.0,2011-06-28 11:00:00 +2011-06-28 15:05:00,4733.0,2011-06-28 11:05:00 +2011-06-28 15:10:00,4952.0,2011-06-28 11:10:00 +2011-06-28 15:15:00,5072.0,2011-06-28 11:15:00 +2011-06-28 15:20:00,5161.0,2011-06-28 11:20:00 +2011-06-28 15:25:00,5263.0,2011-06-28 11:25:00 +2011-06-28 15:30:00,5350.0,2011-06-28 11:30:00 +2011-06-28 15:35:00,5402.0,2011-06-28 11:35:00 +2011-06-28 15:40:00,5450.0,2011-06-28 11:40:00 +2011-06-28 15:45:00,5515.0,2011-06-28 11:45:00 +2011-06-28 15:50:00,5567.0,2011-06-28 11:50:00 +2011-06-28 15:55:00,5606.0,2011-06-28 11:55:00 +2011-06-28 16:00:00,5687.0,2011-06-28 12:00:00 +2011-06-28 16:05:00,5835.0,2011-06-28 12:05:00 +2011-06-28 16:10:00,6060.0,2011-06-28 12:10:00 +2011-06-28 16:15:00,6334.0,2011-06-28 12:15:00 +2011-06-28 16:20:00,6592.0,2011-06-28 12:20:00 +2011-06-28 16:25:00,6819.0,2011-06-28 12:25:00 +2011-06-28 16:30:00,7102.0,2011-06-28 12:30:00 +2011-06-28 16:35:00,7483.0,2011-06-28 12:35:00 +2011-06-28 16:40:00,7876.0,2011-06-28 12:40:00 +2011-06-28 16:45:00,8186.0,2011-06-28 12:45:00 +2011-06-28 16:50:00,8396.0,2011-06-28 12:50:00 +2011-06-28 16:55:00,8719.0,2011-06-28 12:55:00 +2011-06-28 17:00:00,9147.0,2011-06-28 13:00:00 +2011-06-28 17:05:00,9563.0,2011-06-28 13:05:00 +2011-06-28 17:10:00,10059.0,2011-06-28 13:10:00 +2011-06-28 17:15:00,10617.0,2011-06-28 13:15:00 +2011-06-28 17:20:00,11093.0,2011-06-28 13:20:00 +2011-06-28 17:25:00,11529.0,2011-06-28 13:25:00 +2011-06-28 17:30:00,12022.0,2011-06-28 13:30:00 +2011-06-28 17:35:00,12412.0,2011-06-28 13:35:00 +2011-06-28 17:40:00,12681.0,2011-06-28 13:40:00 +2011-06-28 17:45:00,12963.0,2011-06-28 13:45:00 +2011-06-28 17:50:00,13273.0,2011-06-28 13:50:00 +2011-06-28 17:55:00,13550.0,2011-06-28 13:55:00 +2011-06-28 18:00:00,13770.0,2011-06-28 14:00:00 +2011-06-28 18:05:00,14070.0,2011-06-28 14:05:00 +2011-06-28 18:10:00,14404.0,2011-06-28 14:10:00 +2011-06-28 18:15:00,14661.0,2011-06-28 14:15:00 +2011-06-28 18:20:00,14973.0,2011-06-28 14:20:00 +2011-06-28 18:25:00,15322.0,2011-06-28 14:25:00 +2011-06-28 18:30:00,15599.0,2011-06-28 14:30:00 +2011-06-28 18:35:00,15816.0,2011-06-28 14:35:00 +2011-06-28 18:40:00,16131.0,2011-06-28 14:40:00 +2011-06-28 18:45:00,16588.0,2011-06-28 14:45:00 +2011-06-28 18:50:00,17058.0,2011-06-28 14:50:00 +2011-06-28 18:55:00,17514.0,2011-06-28 14:55:00 +2011-06-28 19:00:00,17884.0,2011-06-28 15:00:00 +2011-06-28 19:05:00,18162.0,2011-06-28 15:05:00 +2011-06-28 19:10:00,18433.0,2011-06-28 15:10:00 +2011-06-28 19:15:00,18723.0,2011-06-28 15:15:00 +2011-06-28 19:20:00,19083.0,2011-06-28 15:20:00 +2011-06-28 19:25:00,19452.0,2011-06-28 15:25:00 +2011-06-28 19:30:00,19743.0,2011-06-28 15:30:00 +2011-06-28 19:35:00,20012.0,2011-06-28 15:35:00 +2011-06-28 19:40:00,20315.0,2011-06-28 15:40:00 +2011-06-28 19:45:00,20645.0,2011-06-28 15:45:00 +2011-06-28 19:50:00,20968.0,2011-06-28 15:50:00 +2011-06-28 19:55:00,21301.0,2011-06-28 15:55:00 +2011-06-28 20:00:00,21615.0,2011-06-28 16:00:00 +2011-06-28 20:05:00,21901.0,2011-06-28 16:05:00 +2011-06-28 20:10:00,22148.0,2011-06-28 16:10:00 +2011-06-28 20:15:00,22342.0,2011-06-28 16:15:00 +2011-06-28 20:20:00,22535.0,2011-06-28 16:20:00 +2011-06-28 20:25:00,22793.0,2011-06-28 16:25:00 +2011-06-28 20:30:00,23061.0,2011-06-28 16:30:00 +2011-06-28 20:35:00,23314.0,2011-06-28 16:35:00 +2011-06-28 20:40:00,23563.0,2011-06-28 16:40:00 +2011-06-28 20:45:00,23811.0,2011-06-28 16:45:00 +2011-06-28 20:50:00,24055.0,2011-06-28 16:50:00 +2011-06-28 20:55:00,24289.0,2011-06-28 16:55:00 +2011-06-28 21:00:00,24510.0,2011-06-28 17:00:00 +2011-06-28 21:05:00,24724.0,2011-06-28 17:05:00 +2011-06-28 21:10:00,24931.0,2011-06-28 17:10:00 +2011-06-28 21:15:00,25129.0,2011-06-28 17:15:00 +2011-06-28 21:20:00,25309.0,2011-06-28 17:20:00 +2011-06-28 21:25:00,25437.0,2011-06-28 17:25:00 +2011-06-28 21:30:00,25536.0,2011-06-28 17:30:00 +2011-06-28 21:35:00,25666.0,2011-06-28 17:35:00 +2011-06-28 21:40:00,25804.0,2011-06-28 17:40:00 +2011-06-28 21:45:00,25930.0,2011-06-28 17:45:00 +2011-06-28 21:50:00,26047.0,2011-06-28 17:50:00 +2011-06-28 21:55:00,26151.0,2011-06-28 17:55:00 +2011-06-28 22:00:00,26257.0,2011-06-28 18:00:00 +2011-06-28 22:05:00,26371.0,2011-06-28 18:05:00 +2011-06-28 22:10:00,26481.0,2011-06-28 18:10:00 +2011-06-28 22:15:00,26583.0,2011-06-28 18:15:00 +2011-06-28 22:20:00,26673.0,2011-06-28 18:20:00 +2011-06-28 22:25:00,26744.0,2011-06-28 18:25:00 +2011-06-28 22:30:00,26801.0,2011-06-28 18:30:00 +2011-06-28 22:35:00,26859.0,2011-06-28 18:35:00 +2011-06-28 22:40:00,26919.0,2011-06-28 18:40:00 +2011-06-28 22:45:00,26968.0,2011-06-28 18:45:00 +2011-06-28 22:50:00,27015.0,2011-06-28 18:50:00 +2011-06-28 22:55:00,27066.0,2011-06-28 18:55:00 +2011-06-28 23:00:00,27120.0,2011-06-28 19:00:00 +2011-06-28 23:05:00,27173.0,2011-06-28 19:05:00 +2011-06-28 23:10:00,27223.0,2011-06-28 19:10:00 +2011-06-28 23:15:00,27268.0,2011-06-28 19:15:00 +2011-06-28 23:20:00,27308.0,2011-06-28 19:20:00 +2011-06-28 23:25:00,27338.0,2011-06-28 19:25:00 +2011-06-28 23:30:00,27360.0,2011-06-28 19:30:00 +2011-06-28 23:35:00,27379.0,2011-06-28 19:35:00 +2011-06-28 23:40:00,27394.0,2011-06-28 19:40:00 +2011-06-28 23:45:00,27406.0,2011-06-28 19:45:00 +2011-06-28 23:50:00,27413.0,2011-06-28 19:50:00 +2011-06-28 23:55:00,27418.0,2011-06-28 19:55:00 +2011-06-29 00:00:00,27423.0,2011-06-28 20:00:00 +2011-06-29 00:05:00,27428.0,2011-06-28 20:05:00 +2011-06-29 00:10:00,27434.0,2011-06-28 20:10:00 +2011-06-29 00:15:00,27439.0,2011-06-28 20:15:00 +2011-06-29 00:20:00,27443.0,2011-06-28 20:20:00 +2011-06-29 00:25:00,27445.0,2011-06-28 20:25:00 +2011-06-29 00:30:00,27445.0,2011-06-28 20:30:00 +2011-06-29 00:35:00,27445.0,2011-06-28 20:35:00 +2011-06-29 09:50:00,0.0,2011-06-29 05:50:00 +2011-06-29 09:55:00,2.0,2011-06-29 05:55:00 +2011-06-29 10:00:00,5.0,2011-06-29 06:00:00 +2011-06-29 10:05:00,9.0,2011-06-29 06:05:00 +2011-06-29 10:10:00,14.0,2011-06-29 06:10:00 +2011-06-29 10:15:00,22.0,2011-06-29 06:15:00 +2011-06-29 10:20:00,34.0,2011-06-29 06:20:00 +2011-06-29 10:25:00,49.0,2011-06-29 06:25:00 +2011-06-29 10:30:00,67.0,2011-06-29 06:30:00 +2011-06-29 10:35:00,90.0,2011-06-29 06:35:00 +2011-06-29 10:40:00,118.0,2011-06-29 06:40:00 +2011-06-29 10:45:00,153.0,2011-06-29 06:45:00 +2011-06-29 10:50:00,197.0,2011-06-29 06:50:00 +2011-06-29 10:55:00,250.0,2011-06-29 06:55:00 +2011-06-29 11:00:00,312.0,2011-06-29 07:00:00 +2011-06-29 11:05:00,383.0,2011-06-29 07:05:00 +2011-06-29 11:10:00,466.0,2011-06-29 07:10:00 +2011-06-29 11:15:00,561.0,2011-06-29 07:15:00 +2011-06-29 11:20:00,669.0,2011-06-29 07:20:00 +2011-06-29 11:25:00,789.0,2011-06-29 07:25:00 +2011-06-29 11:30:00,921.0,2011-06-29 07:30:00 +2011-06-29 11:35:00,1065.0,2011-06-29 07:35:00 +2011-06-29 11:40:00,1221.0,2011-06-29 07:40:00 +2011-06-29 11:45:00,1390.0,2011-06-29 07:45:00 +2011-06-29 11:50:00,1574.0,2011-06-29 07:50:00 +2011-06-29 11:55:00,1773.0,2011-06-29 07:55:00 +2011-06-29 12:00:00,1986.0,2011-06-29 08:00:00 +2011-06-29 12:05:00,2211.0,2011-06-29 08:05:00 +2011-06-29 12:10:00,2449.0,2011-06-29 08:10:00 +2011-06-29 12:15:00,2698.0,2011-06-29 08:15:00 +2011-06-29 12:20:00,2958.0,2011-06-29 08:20:00 +2011-06-29 12:25:00,3229.0,2011-06-29 08:25:00 +2011-06-29 12:30:00,3513.0,2011-06-29 08:30:00 +2011-06-29 12:35:00,3806.0,2011-06-29 08:35:00 +2011-06-29 12:40:00,4112.0,2011-06-29 08:40:00 +2011-06-29 12:45:00,4429.0,2011-06-29 08:45:00 +2011-06-29 12:50:00,4759.0,2011-06-29 08:50:00 +2011-06-29 12:55:00,5099.0,2011-06-29 08:55:00 +2011-06-29 13:00:00,5448.0,2011-06-29 09:00:00 +2011-06-29 13:05:00,5806.0,2011-06-29 09:05:00 +2011-06-29 13:10:00,6174.0,2011-06-29 09:10:00 +2011-06-29 13:15:00,6552.0,2011-06-29 09:15:00 +2011-06-29 13:20:00,6939.0,2011-06-29 09:20:00 +2011-06-29 13:25:00,7334.0,2011-06-29 09:25:00 +2011-06-29 13:30:00,7739.0,2011-06-29 09:30:00 +2011-06-29 13:35:00,8154.0,2011-06-29 09:35:00 +2011-06-29 13:40:00,8574.0,2011-06-29 09:40:00 +2011-06-29 13:45:00,9002.0,2011-06-29 09:45:00 +2011-06-29 13:50:00,9437.0,2011-06-29 09:50:00 +2011-06-29 13:55:00,9881.0,2011-06-29 09:55:00 +2011-06-29 14:00:00,10335.0,2011-06-29 10:00:00 +2011-06-29 14:05:00,10794.0,2011-06-29 10:05:00 +2011-06-29 14:10:00,11258.0,2011-06-29 10:10:00 +2011-06-29 14:15:00,11728.0,2011-06-29 10:15:00 +2011-06-29 14:20:00,12204.0,2011-06-29 10:20:00 +2011-06-29 14:25:00,12685.0,2011-06-29 10:25:00 +2011-06-29 14:30:00,13172.0,2011-06-29 10:30:00 +2011-06-29 14:35:00,13665.0,2011-06-29 10:35:00 +2011-06-29 14:40:00,14162.0,2011-06-29 10:40:00 +2011-06-29 14:45:00,14663.0,2011-06-29 10:45:00 +2011-06-29 14:50:00,15170.0,2011-06-29 10:50:00 +2011-06-29 14:55:00,15680.0,2011-06-29 10:55:00 +2011-06-29 15:00:00,16191.0,2011-06-29 11:00:00 +2011-06-29 15:05:00,16703.0,2011-06-29 11:05:00 +2011-06-29 15:10:00,17217.0,2011-06-29 11:10:00 +2011-06-29 15:15:00,17737.0,2011-06-29 11:15:00 +2011-06-29 15:20:00,18262.0,2011-06-29 11:20:00 +2011-06-29 15:25:00,18791.0,2011-06-29 11:25:00 +2011-06-29 15:30:00,19321.0,2011-06-29 11:30:00 +2011-06-29 15:35:00,19853.0,2011-06-29 11:35:00 +2011-06-29 15:40:00,20387.0,2011-06-29 11:40:00 +2011-06-29 15:45:00,20921.0,2011-06-29 11:45:00 +2011-06-29 15:50:00,21448.0,2011-06-29 11:50:00 +2011-06-29 15:55:00,21917.0,2011-06-29 11:55:00 +2011-06-29 16:00:00,22448.0,2011-06-29 12:00:00 +2011-06-29 16:05:00,22997.0,2011-06-29 12:05:00 +2011-06-29 16:10:00,23545.0,2011-06-29 12:10:00 +2011-06-29 16:15:00,24092.0,2011-06-29 12:15:00 +2011-06-29 16:20:00,24640.0,2011-06-29 12:20:00 +2011-06-29 16:25:00,25188.0,2011-06-29 12:25:00 +2011-06-29 16:30:00,25736.0,2011-06-29 12:30:00 +2011-06-29 16:35:00,26286.0,2011-06-29 12:35:00 +2011-06-29 16:40:00,26838.0,2011-06-29 12:40:00 +2011-06-29 16:45:00,27387.0,2011-06-29 12:45:00 +2011-06-29 16:50:00,27936.0,2011-06-29 12:50:00 +2011-06-29 16:55:00,28485.0,2011-06-29 12:55:00 +2011-06-29 17:00:00,29032.0,2011-06-29 13:00:00 +2011-06-29 17:05:00,29579.0,2011-06-29 13:05:00 +2011-06-29 17:10:00,30128.0,2011-06-29 13:10:00 +2011-06-29 17:15:00,30676.0,2011-06-29 13:15:00 +2011-06-29 17:20:00,31220.0,2011-06-29 13:20:00 +2011-06-29 17:25:00,31769.0,2011-06-29 13:25:00 +2011-06-29 17:30:00,32314.0,2011-06-29 13:30:00 +2011-06-29 17:35:00,32861.0,2011-06-29 13:35:00 +2011-06-29 17:40:00,33312.0,2011-06-29 13:40:00 +2011-06-29 17:45:00,33799.0,2011-06-29 13:45:00 +2011-06-29 17:50:00,34330.0,2011-06-29 13:50:00 +2011-06-29 17:55:00,34841.0,2011-06-29 13:55:00 +2011-06-29 18:00:00,35383.0,2011-06-29 14:00:00 +2011-06-29 18:05:00,35938.0,2011-06-29 14:05:00 +2011-06-29 18:10:00,36420.0,2011-06-29 14:10:00 +2011-06-29 18:15:00,36884.0,2011-06-29 14:15:00 +2011-06-29 18:20:00,37387.0,2011-06-29 14:20:00 +2011-06-29 18:25:00,37720.0,2011-06-29 14:25:00 +2011-06-29 18:30:00,37974.0,2011-06-29 14:30:00 +2011-06-29 18:35:00,38249.0,2011-06-29 14:35:00 +2011-06-29 18:40:00,38681.0,2011-06-29 14:40:00 +2011-06-29 18:45:00,39069.0,2011-06-29 14:45:00 +2011-06-29 18:50:00,39519.0,2011-06-29 14:50:00 +2011-06-29 18:55:00,40006.0,2011-06-29 14:55:00 +2011-06-29 19:00:00,40498.0,2011-06-29 15:00:00 +2011-06-29 19:05:00,40964.0,2011-06-29 15:05:00 +2011-06-29 19:10:00,41337.0,2011-06-29 15:10:00 +2011-06-29 19:15:00,41717.0,2011-06-29 15:15:00 +2011-06-29 19:20:00,42159.0,2011-06-29 15:20:00 +2011-06-29 19:25:00,42616.0,2011-06-29 15:25:00 +2011-06-29 19:30:00,43056.0,2011-06-29 15:30:00 +2011-06-29 19:35:00,43487.0,2011-06-29 15:35:00 +2011-06-29 19:40:00,43907.0,2011-06-29 15:40:00 +2011-06-29 19:45:00,44321.0,2011-06-29 15:45:00 +2011-06-29 19:50:00,44704.0,2011-06-29 15:50:00 +2011-06-29 19:55:00,44988.0,2011-06-29 15:55:00 +2011-06-29 20:00:00,45344.0,2011-06-29 16:00:00 +2011-06-29 20:05:00,45585.0,2011-06-29 16:05:00 +2011-06-29 20:10:00,45821.0,2011-06-29 16:10:00 +2011-06-29 20:15:00,46052.0,2011-06-29 16:15:00 +2011-06-29 20:20:00,46283.0,2011-06-29 16:20:00 +2011-06-29 20:25:00,46542.0,2011-06-29 16:25:00 +2011-06-29 20:30:00,46811.0,2011-06-29 16:30:00 +2011-06-29 20:35:00,47035.0,2011-06-29 16:35:00 +2011-06-29 20:40:00,47185.0,2011-06-29 16:40:00 +2011-06-29 20:45:00,47391.0,2011-06-29 16:45:00 +2011-06-29 20:50:00,47649.0,2011-06-29 16:50:00 +2011-06-29 20:55:00,47880.0,2011-06-29 16:55:00 +2011-06-29 21:00:00,48119.0,2011-06-29 17:00:00 +2011-06-29 21:05:00,48360.0,2011-06-29 17:05:00 +2011-06-29 21:10:00,48592.0,2011-06-29 17:10:00 +2011-06-29 21:15:00,48804.0,2011-06-29 17:15:00 +2011-06-29 21:20:00,48944.0,2011-06-29 17:20:00 +2011-06-29 21:25:00,49103.0,2011-06-29 17:25:00 +2011-06-29 21:30:00,49278.0,2011-06-29 17:30:00 +2011-06-29 21:35:00,49430.0,2011-06-29 17:35:00 +2011-06-29 21:40:00,49556.0,2011-06-29 17:40:00 +2011-06-29 21:45:00,49664.0,2011-06-29 17:45:00 +2011-06-29 21:50:00,49765.0,2011-06-29 17:50:00 +2011-06-29 21:55:00,49856.0,2011-06-29 17:55:00 +2011-06-29 22:00:00,49938.0,2011-06-29 18:00:00 +2011-06-29 22:05:00,50014.0,2011-06-29 18:05:00 +2011-06-29 22:10:00,50083.0,2011-06-29 18:10:00 +2011-06-29 22:15:00,50143.0,2011-06-29 18:15:00 +2011-06-29 22:20:00,50198.0,2011-06-29 18:20:00 +2011-06-29 22:25:00,50248.0,2011-06-29 18:25:00 +2011-06-29 22:30:00,50293.0,2011-06-29 18:30:00 +2011-06-29 22:35:00,50333.0,2011-06-29 18:35:00 +2011-06-29 22:40:00,50369.0,2011-06-29 18:40:00 +2011-06-29 22:45:00,50401.0,2011-06-29 18:45:00 +2011-06-29 22:50:00,50430.0,2011-06-29 18:50:00 +2011-06-29 22:55:00,50456.0,2011-06-29 18:55:00 +2011-06-29 23:00:00,50480.0,2011-06-29 19:00:00 +2011-06-29 23:05:00,50502.0,2011-06-29 19:05:00 +2011-06-29 23:10:00,50523.0,2011-06-29 19:10:00 +2011-06-29 23:15:00,50544.0,2011-06-29 19:15:00 +2011-06-29 23:20:00,50565.0,2011-06-29 19:20:00 +2011-06-29 23:25:00,50584.0,2011-06-29 19:25:00 +2011-06-29 23:30:00,50602.0,2011-06-29 19:30:00 +2011-06-29 23:35:00,50618.0,2011-06-29 19:35:00 +2011-06-29 23:40:00,50633.0,2011-06-29 19:40:00 +2011-06-29 23:45:00,50647.0,2011-06-29 19:45:00 +2011-06-29 23:50:00,50660.0,2011-06-29 19:50:00 +2011-06-29 23:55:00,50672.0,2011-06-29 19:55:00 +2011-06-30 00:00:00,50682.0,2011-06-29 20:00:00 +2011-06-30 00:05:00,50691.0,2011-06-29 20:05:00 +2011-06-30 00:10:00,50698.0,2011-06-29 20:10:00 +2011-06-30 00:15:00,50703.0,2011-06-29 20:15:00 +2011-06-30 00:20:00,50705.0,2011-06-29 20:20:00 +2011-06-30 00:25:00,50707.0,2011-06-29 20:25:00 +2011-06-30 00:30:00,50707.0,2011-06-29 20:30:00 +2011-06-30 09:45:00,0.0,2011-06-30 05:45:00 +2011-06-30 09:50:00,1.0,2011-06-30 05:50:00 +2011-06-30 09:55:00,4.0,2011-06-30 05:55:00 +2011-06-30 10:00:00,9.0,2011-06-30 06:00:00 diff --git a/pvanalytics/quality/energy.py b/pvanalytics/quality/energy.py new file mode 100644 index 00000000..73678885 --- /dev/null +++ b/pvanalytics/quality/energy.py @@ -0,0 +1,147 @@ +"""Quality control functions for energy data.""" +import warnings + + +def cumulative_energy_simple_diff_check(energy_series, + pct_increase_threshold=95, + system_self_consumption=-0.5): + """Check if an energy time series is cumulative via simple differencing. + + To determine if an energy data stream is cumulative, subsequent values in + the series are differenced to determine if the data stream is consistently + increasing. If the percentage of increasing values in the data set exceeds + the pct_increase_threshold parameter, the energy series is determined as + cumulative and a True boolean is returned. Otherwise, False is returned. + + Parameters + ---------- + energy_series: Series + Time series of energy data stream with datetime index. + pct_increase_threshold: Int, default 95 + The percentage threshold to consider the energy series as cumulative. + system_self_consumption: Float, default -0.5 + The difference threshold to account for the effect of nighttime system + self-consumption on the energy data stream. + + Returns + ------- + Boolean + True if energy_series is cumulative, False otherwise. + """ + # Simple diff function + differenced_series = energy_series.diff().dropna() + if len(differenced_series) == 0: + warnings.warn( + "The energy time series has a length of zero and cannot be run.") + return False + else: + # If over X percent of the data is increasing (set via the + # pct_increase_threshold), then assume that the column is cumulative + differenced_series_positive_mask = ( + differenced_series >= system_self_consumption) + pct_over_zero = differenced_series_positive_mask.value_counts( + normalize=True) * 100 + if pct_over_zero[True] >= pct_increase_threshold: + return True + else: + return False + + +def cumulative_energy_avg_diff_check(energy_series, + pct_increase_threshold=95, + system_self_consumption=-0.5): + """Check if an energy time series is cumulative via average differencing. + + To determine if an energy data stream is cumulative, subsequent values in + the series are average differenced to determine if the data stream is + consistently increasing. If the percentage of increasing values in the + data set exceeds the pct_increase_threshold parameter, the energy series + is determined as cumulative and a True boolean is returned. + Otherwise, False is returned. + + Parameters + ---------- + energy_series: Series + Time series of energy data stream with datetime index. + pct_increase_threshold: int, default 95 + The percentage threshold to consider the energy series as cumulative. + system_self_consumption: Float, default -0.5 + The difference threshold to account for the effect of nighttime system + self-consumption on the energy data stream. + + Returns + ------- + Boolean + True if energy_series is cumulative, False otherwise. + """ + differenced_series = energy_series.diff().dropna() + # Get the averaged difference + avg_diff_series = 0.5 * \ + (differenced_series.shift(-1) + differenced_series).dropna() + if len(differenced_series) == 0: + warnings.warn( + "The energy time series has a length of zero and cannot be run.") + return False + else: + # If over X percent of the data is increasing (set via the + # pct_increase_threshold), then assume that the column is cumulative + avg_series_positive_mask = (avg_diff_series >= system_self_consumption) + pct_over_zero = avg_series_positive_mask.value_counts( + normalize=True) * 100 + if pct_over_zero[True] >= pct_increase_threshold: + return True + else: + return False + + +def convert_cumulative_energy(energy_series, pct_increase_threshold=95, + system_self_consumption=-0.5): + """Convert cumulative to interval-based, non-cumulative energy, if needed. + + Two main test are run to determine if the associated energy + data stream is cumulative or not: a simple differencing function is run + on the series via cumulative_energy_simple_diff_check, and an + average differencing function is run on the series via + cumulative_energy_avg_diff_check. + + Parameters + ---------- + energy_series: Series + Time series of energy data stream with datetime index. + pct_increase_threshold: int, default 95 + The percentage threshold to consider the energy series as cumulative. + system_self_consumption: Float, default -0.5 + The difference threshold to account for the effect of nighttime system + self-consumption on the energy data stream. + + Returns + ------- + Series + corrected_energy_series is retuned if the energy series is cumulative. + If the energy series passes the simple difference check, then the + the series is corrected via the simple differencing. Else, if + energy series passes the average difference check, then the series is + corrected via average differencing. + If neither checks are passes, then the original non-cumulative + energy_series is returned. + """ + # Check if energy series is cumulative with simple difference and average + # difference + simple_diff_check = cumulative_energy_simple_diff_check( + energy_series, pct_increase_threshold, system_self_consumption) + avg_diff_check = cumulative_energy_avg_diff_check(energy_series, + pct_increase_threshold, + system_self_consumption) + if simple_diff_check: + # Return simple difference of energy series if it passes the simple + # difference check + corrected_energy_series = energy_series.diff() + return corrected_energy_series + elif avg_diff_check: + # Return average differnce of energy series if it passes the + # average difference check + corrected_energy_series = 0.5 * \ + (energy_series.diff().shift(-1) + energy_series.diff()) + return corrected_energy_series + else: + return energy_series diff --git a/pvanalytics/tests/quality/test_energy.py b/pvanalytics/tests/quality/test_energy.py new file mode 100644 index 00000000..a4b88121 --- /dev/null +++ b/pvanalytics/tests/quality/test_energy.py @@ -0,0 +1,164 @@ +"""Tests for energy functions.""" +import pytest +import os +import pandas as pd +from pandas.testing import assert_series_equal +from pvanalytics.quality import energy + +script_directory = os.path.dirname(__file__) +energy_filepath = os.path.join(script_directory, + "../../data/system_10004_ac_energy.csv") +energy_df = pd.read_csv(energy_filepath) + + +@pytest.fixture +def cumulative_series(): + """ + A pandas energy time series with cumulative data. + """ + data = energy_df["ac_energy_inv_16425"] + return pd.Series(data=data) + + +@pytest.fixture +def noncumulative_series(): + """ + A pandas energy time series with noncumulative data. + """ + # Perform .diff() to turn cumulative data into noncumulative + diff_data = energy_df["ac_energy_inv_16425"].diff().dropna() + return pd.Series(data=diff_data) + + +@pytest.fixture +def zero_length_series(): + """ + A pandas energy time series that has zero length. + """ + data = [] + return pd.Series(data=data, dtype="float64") + + +@pytest.fixture +def simple_diff_energy_series(): + """ + The differenced pandas energy series using the simple .diff() function. + """ + diff_data = energy_df["ac_energy_inv_16425"].diff() + return pd.Series(data=diff_data) + + +@pytest.fixture +def alt_cumulative_series(): + """ + A cumulative energy series. + """ + cumulative_series = pd.Series([1.5, 1, 2, 5, 8]) + return cumulative_series + + +@pytest.fixture +def alt_avg_diff_series(): + """ + The average differene energy series. + """ + cumulative_series = pd.Series([1.5, 1, 2, 5, 8]) + avg_diff_series = 0.5 * \ + (cumulative_series.diff().shift(-1) + cumulative_series.diff()) + return pd.Series(avg_diff_series) + + +def test_cumulative_energy_simple_diff_check_true(cumulative_series): + """ + Tests if cumulative_energy_simple_diff_check for cumulative series is True. + """ + assert energy.cumulative_energy_simple_diff_check( + energy_series=cumulative_series, system_self_consumption=0.0) is True + + +def test_noncumulative_energy_simple_diff_check_false(noncumulative_series): + """ + Tests if cumulative_energy_simple_diff_check for noncumulative series + is False. + """ + assert energy.cumulative_energy_simple_diff_check( + energy_series=noncumulative_series, + system_self_consumption=0.0) is False + + +def test_zero_length_energy_simple_diff_check_false(zero_length_series): + """ + Tests if cumulative_energy_simple_diff_check for zero length series is + False. + """ + assert energy.cumulative_energy_simple_diff_check( + energy_series=zero_length_series) is False + + +def test_cumulative_energy_avg_diff_check_true(cumulative_series): + """ + Tests if cumulative_energy_avg_diff_check for cumulative series is True. + """ + assert energy.cumulative_energy_avg_diff_check( + energy_series=cumulative_series, system_self_consumption=0.0) is True + + +def test_noncumulative_energy_avg_diff_check_false(noncumulative_series): + """ + Tests if cumulative_energy_avg_diff_check for noncumulative series + is False. + """ + assert energy.cumulative_energy_avg_diff_check( + energy_series=noncumulative_series, + system_self_consumption=0.0) is False + + +def test_zero_length_energy_avg_diff_check_false(zero_length_series): + """ + Tests if cumulative_energy_avg_diff_check for zero length series is + False. + """ + assert energy.cumulative_energy_avg_diff_check( + energy_series=zero_length_series) is False + + +def test_convert_cumulative_with_simple_diff(cumulative_series, + simple_diff_energy_series): + """ + Tests convert_cumulative_energy for cumulative series. + Test returns the corrected differenced series via simple differencing. + """ + simple_diff_result = energy.convert_cumulative_energy( + energy_series=cumulative_series, system_self_consumption=0.0) + assert_series_equal(simple_diff_result, simple_diff_energy_series) + + +def test_convert_cumulative_with_avg_diff(alt_cumulative_series, + alt_avg_diff_series): + """ + Tests convert_cumulative_energy for cumulative series. + Test returns the corrected differenced series via average differencing. + """ + simple_diff_result = energy.convert_cumulative_energy( + energy_series=alt_cumulative_series, system_self_consumption=0.0) + assert_series_equal(simple_diff_result, alt_avg_diff_series) + + +def test_convert_noncumulative(noncumulative_series): + """ + Tests convert_cumulative_energy for non-cumulative series. + Test returns the original non-cumulative energy series. + """ + energy_result = energy.convert_cumulative_energy( + energy_series=noncumulative_series, system_self_consumption=0.0) + assert_series_equal(energy_result, noncumulative_series) + + +def test_check_zero_length(zero_length_series): + """ + Tests convert_cumulative_energy for zero length series. + Test returns the original zero length energy series. + """ + energy_result = energy.convert_cumulative_energy( + energy_series=zero_length_series, system_self_consumption=0.0) + assert_series_equal(energy_result, zero_length_series)