From 65bf5f4ee279844b588567d8637e7ec2d2943ecf Mon Sep 17 00:00:00 2001 From: Jan Pecinovsky Date: Fri, 8 Dec 2023 15:41:14 +0000 Subject: [PATCH] Input models --- data/mvlr/sample_gas.json | 1869 ++++++++++++++++++++++++ data/mvlr/sample_solar.json | 2586 +++++++++++++++++++++++++++++++++ demo_mvlr.ipynb | 923 ++++++++++++ openenergyid/__init__.py | 2 +- openenergyid/mvlr/__init__.py | 17 +- openenergyid/mvlr/main.py | 28 + openenergyid/mvlr/models.py | 127 +- openenergyid/mvlr/mvlr.py | 52 +- 8 files changed, 5547 insertions(+), 57 deletions(-) create mode 100644 data/mvlr/sample_gas.json create mode 100644 data/mvlr/sample_solar.json create mode 100644 demo_mvlr.ipynb create mode 100644 openenergyid/mvlr/main.py diff --git a/data/mvlr/sample_gas.json b/data/mvlr/sample_gas.json new file mode 100644 index 0000000..1390f9a --- /dev/null +++ b/data/mvlr/sample_gas.json @@ -0,0 +1,1869 @@ +{ + "timeZone": "Europe/Brussels", + "dependentVariable": "energyUse/naturalGas", + "independentVariables": [ + { + "name": "temperatureEquivalent", + "variants": [ + "HDD_14", + "HDD_14.5", + "HDD_15", + "HDD_15.5", + "HDD_16", + "HDD_16.5", + "HDD_17", + "HDD_17.5", + "HDD_18", + "HDD_18.5", + "CDD_20", + "CDD_21", + "CDD_22", + "CDD_23", + "CDD_24", + "CDD_25", + "FDD_0", + "FDD_1", + "FDD_2", + "FDD_3", + "FDD_4", + "FDD_5" + ] + } + ], + "granularities": ["P1M"], + "frame": { + "columns": [ + "energyUse/naturalGas", + "temperatureEquivalent" + ], + "index": [ + "2021-04-03T00:00:00+02:00", + "2021-04-04T00:00:00+02:00", + "2021-04-05T00:00:00+02:00", + "2021-04-06T00:00:00+02:00", + "2021-04-07T00:00:00+02:00", + "2021-04-08T00:00:00+02:00", + "2021-04-09T00:00:00+02:00", + "2021-04-10T00:00:00+02:00", + "2021-04-11T00:00:00+02:00", + "2021-04-12T00:00:00+02:00", + "2021-04-13T00:00:00+02:00", + "2021-04-14T00:00:00+02:00", + "2021-04-15T00:00:00+02:00", + "2021-04-16T00:00:00+02:00", + "2021-04-17T00:00:00+02:00", + "2021-04-18T00:00:00+02:00", + "2021-04-19T00:00:00+02:00", + "2021-04-20T00:00:00+02:00", + "2021-04-21T00:00:00+02:00", + "2021-04-22T00:00:00+02:00", + "2021-04-23T00:00:00+02:00", + "2021-04-24T00:00:00+02:00", + "2021-04-25T00:00:00+02:00", + "2021-04-26T00:00:00+02:00", + "2021-04-27T00:00:00+02:00", + "2021-04-28T00:00:00+02:00", + "2021-04-29T00:00:00+02:00", + "2021-04-30T00:00:00+02:00", + "2021-05-01T00:00:00+02:00", + "2021-05-02T00:00:00+02:00", + "2021-05-03T00:00:00+02:00", + "2021-05-04T00:00:00+02:00", + "2021-05-05T00:00:00+02:00", + "2021-05-06T00:00:00+02:00", + "2021-05-07T00:00:00+02:00", + "2021-05-08T00:00:00+02:00", + "2021-05-09T00:00:00+02:00", + "2021-05-10T00:00:00+02:00", + "2021-05-11T00:00:00+02:00", + "2021-05-12T00:00:00+02:00", + "2021-05-13T00:00:00+02:00", + "2021-05-14T00:00:00+02:00", + "2021-05-15T00:00:00+02:00", + "2021-05-16T00:00:00+02:00", + "2021-05-17T00:00:00+02:00", + "2021-05-18T00:00:00+02:00", + "2021-05-19T00:00:00+02:00", + "2021-05-20T00:00:00+02:00", + "2021-05-21T00:00:00+02:00", + "2021-05-22T00:00:00+02:00", + "2021-05-23T00:00:00+02:00", + "2021-05-24T00:00:00+02:00", + "2021-05-25T00:00:00+02:00", + "2021-05-26T00:00:00+02:00", + "2021-05-27T00:00:00+02:00", + "2021-05-28T00:00:00+02:00", + "2021-05-29T00:00:00+02:00", + "2021-05-30T00:00:00+02:00", + "2021-05-31T00:00:00+02:00", + "2021-06-01T00:00:00+02:00", + "2021-06-02T00:00:00+02:00", + "2021-06-03T00:00:00+02:00", + "2021-06-04T00:00:00+02:00", + "2021-06-05T00:00:00+02:00", + "2021-06-06T00:00:00+02:00", + "2021-06-07T00:00:00+02:00", + "2021-06-08T00:00:00+02:00", + "2021-06-09T00:00:00+02:00", + "2021-06-10T00:00:00+02:00", + "2021-06-11T00:00:00+02:00", + "2021-06-12T00:00:00+02:00", + "2021-06-13T00:00:00+02:00", + "2021-06-14T00:00:00+02:00", + "2021-06-15T00:00:00+02:00", + "2021-06-16T00:00:00+02:00", + "2021-06-17T00:00:00+02:00", + "2021-06-18T00:00:00+02:00", + "2021-06-19T00:00:00+02:00", + "2021-06-20T00:00:00+02:00", + "2021-06-21T00:00:00+02:00", + "2021-06-22T00:00:00+02:00", + "2021-06-23T00:00:00+02:00", + "2021-06-24T00:00:00+02:00", + "2021-06-25T00:00:00+02:00", + "2021-06-26T00:00:00+02:00", + "2021-06-27T00:00:00+02:00", + "2021-06-28T00:00:00+02:00", + "2021-06-29T00:00:00+02:00", + "2021-06-30T00:00:00+02:00", + "2021-07-01T00:00:00+02:00", + "2021-07-02T00:00:00+02:00", + "2021-07-03T00:00:00+02:00", + "2021-07-04T00:00:00+02:00", + "2021-07-05T00:00:00+02:00", + "2021-07-06T00:00:00+02:00", + "2021-07-07T00:00:00+02:00", + "2021-07-08T00:00:00+02:00", + "2021-07-09T00:00:00+02:00", + "2021-07-10T00:00:00+02:00", + "2021-07-11T00:00:00+02:00", + "2021-07-12T00:00:00+02:00", + "2021-07-13T00:00:00+02:00", + "2021-07-14T00:00:00+02:00", + "2021-07-15T00:00:00+02:00", + "2021-07-16T00:00:00+02:00", + "2021-07-17T00:00:00+02:00", + "2021-07-18T00:00:00+02:00", + "2021-07-19T00:00:00+02:00", + "2021-07-20T00:00:00+02:00", + "2021-07-21T00:00:00+02:00", + "2021-07-22T00:00:00+02:00", + "2021-07-23T00:00:00+02:00", + "2021-07-24T00:00:00+02:00", + "2021-07-25T00:00:00+02:00", + "2021-07-26T00:00:00+02:00", + "2021-07-27T00:00:00+02:00", + "2021-07-28T00:00:00+02:00", + "2021-07-29T00:00:00+02:00", + "2021-07-30T00:00:00+02:00", + "2021-07-31T00:00:00+02:00", + "2021-08-01T00:00:00+02:00", + "2021-08-02T00:00:00+02:00", + "2021-08-03T00:00:00+02:00", + "2021-08-04T00:00:00+02:00", + "2021-08-05T00:00:00+02:00", + "2021-08-06T00:00:00+02:00", + "2021-08-07T00:00:00+02:00", + "2021-08-08T00:00:00+02:00", + "2021-08-09T00:00:00+02:00", + "2021-08-10T00:00:00+02:00", + "2021-08-11T00:00:00+02:00", + "2021-08-12T00:00:00+02:00", + "2021-08-13T00:00:00+02:00", + "2021-08-14T00:00:00+02:00", + "2021-08-15T00:00:00+02:00", + "2021-08-16T00:00:00+02:00", + "2021-08-17T00:00:00+02:00", + "2021-08-18T00:00:00+02:00", + "2021-08-19T00:00:00+02:00", + "2021-08-20T00:00:00+02:00", + "2021-08-21T00:00:00+02:00", + "2021-08-22T00:00:00+02:00", + "2021-08-23T00:00:00+02:00", + "2021-08-24T00:00:00+02:00", + "2021-08-25T00:00:00+02:00", + "2021-08-26T00:00:00+02:00", + "2021-08-27T00:00:00+02:00", + "2021-08-28T00:00:00+02:00", + "2021-08-29T00:00:00+02:00", + "2021-08-30T00:00:00+02:00", + "2021-08-31T00:00:00+02:00", + "2021-09-01T00:00:00+02:00", + "2021-09-02T00:00:00+02:00", + "2021-09-03T00:00:00+02:00", + "2021-09-04T00:00:00+02:00", + "2021-09-05T00:00:00+02:00", + "2021-09-06T00:00:00+02:00", + "2021-09-07T00:00:00+02:00", + "2021-09-08T00:00:00+02:00", + "2021-09-09T00:00:00+02:00", + "2021-09-10T00:00:00+02:00", + "2021-09-11T00:00:00+02:00", + "2021-09-12T00:00:00+02:00", + "2021-09-13T00:00:00+02:00", + "2021-09-14T00:00:00+02:00", + "2021-09-15T00:00:00+02:00", + "2021-09-16T00:00:00+02:00", + "2021-09-17T00:00:00+02:00", + "2021-09-18T00:00:00+02:00", + "2021-09-19T00:00:00+02:00", + "2021-09-20T00:00:00+02:00", + "2021-09-21T00:00:00+02:00", + "2021-09-22T00:00:00+02:00", + "2021-09-23T00:00:00+02:00", + "2021-09-24T00:00:00+02:00", + "2021-09-25T00:00:00+02:00", + "2021-09-26T00:00:00+02:00", + "2021-09-27T00:00:00+02:00", + "2021-09-28T00:00:00+02:00", + "2021-09-29T00:00:00+02:00", + "2021-09-30T00:00:00+02:00", + "2021-10-01T00:00:00+02:00", + "2021-10-02T00:00:00+02:00", + "2021-10-03T00:00:00+02:00", + "2021-10-04T00:00:00+02:00", + "2021-10-05T00:00:00+02:00", + "2021-10-06T00:00:00+02:00", + "2021-10-07T00:00:00+02:00", + "2021-10-08T00:00:00+02:00", + "2021-10-09T00:00:00+02:00", + "2021-10-10T00:00:00+02:00", + "2021-10-11T00:00:00+02:00", + "2021-10-12T00:00:00+02:00", + "2021-10-13T00:00:00+02:00", + "2021-10-14T00:00:00+02:00", + "2021-10-15T00:00:00+02:00", + "2021-10-16T00:00:00+02:00", + "2021-10-17T00:00:00+02:00", + "2021-10-18T00:00:00+02:00", + "2021-10-19T00:00:00+02:00", + "2021-10-20T00:00:00+02:00", + "2021-10-21T00:00:00+02:00", + "2021-10-22T00:00:00+02:00", + "2021-10-23T00:00:00+02:00", + "2021-10-24T00:00:00+02:00", + "2021-10-25T00:00:00+02:00", + "2021-10-26T00:00:00+02:00", + "2021-10-27T00:00:00+02:00", + "2021-10-28T00:00:00+02:00", + "2021-10-29T00:00:00+02:00", + "2021-10-30T00:00:00+02:00", + "2021-10-31T00:00:00+02:00", + "2021-11-01T00:00:00+01:00", + "2021-11-02T00:00:00+01:00", + "2021-11-03T00:00:00+01:00", + "2021-11-04T00:00:00+01:00", + "2021-11-05T00:00:00+01:00", + "2021-11-06T00:00:00+01:00", + "2021-11-07T00:00:00+01:00", + "2021-11-08T00:00:00+01:00", + "2021-11-09T00:00:00+01:00", + "2021-11-10T00:00:00+01:00", + "2021-11-11T00:00:00+01:00", + "2021-11-12T00:00:00+01:00", + "2021-11-13T00:00:00+01:00", + "2021-11-14T00:00:00+01:00", + "2021-11-15T00:00:00+01:00", + "2021-11-16T00:00:00+01:00", + "2021-11-17T00:00:00+01:00", + "2021-11-18T00:00:00+01:00", + "2021-11-19T00:00:00+01:00", + "2021-11-20T00:00:00+01:00", + "2021-11-21T00:00:00+01:00", + "2021-11-22T00:00:00+01:00", + "2021-11-23T00:00:00+01:00", + "2021-11-24T00:00:00+01:00", + "2021-11-25T00:00:00+01:00", + "2021-11-26T00:00:00+01:00", + "2021-11-27T00:00:00+01:00", + "2021-11-28T00:00:00+01:00", + "2021-11-29T00:00:00+01:00", + "2021-11-30T00:00:00+01:00", + "2021-12-01T00:00:00+01:00", + "2021-12-02T00:00:00+01:00", + "2021-12-03T00:00:00+01:00", + "2021-12-04T00:00:00+01:00", + "2021-12-05T00:00:00+01:00", + "2021-12-06T00:00:00+01:00", + "2021-12-07T00:00:00+01:00", + "2021-12-08T00:00:00+01:00", + "2021-12-09T00:00:00+01:00", + "2021-12-10T00:00:00+01:00", + "2021-12-11T00:00:00+01:00", + "2021-12-12T00:00:00+01:00", + "2021-12-13T00:00:00+01:00", + "2021-12-14T00:00:00+01:00", + "2021-12-15T00:00:00+01:00", + "2021-12-16T00:00:00+01:00", + "2021-12-17T00:00:00+01:00", + "2021-12-18T00:00:00+01:00", + "2021-12-19T00:00:00+01:00", + "2021-12-20T00:00:00+01:00", + "2021-12-21T00:00:00+01:00", + "2021-12-22T00:00:00+01:00", + "2021-12-23T00:00:00+01:00", + "2021-12-24T00:00:00+01:00", + "2021-12-25T00:00:00+01:00", + "2021-12-26T00:00:00+01:00", + "2021-12-27T00:00:00+01:00", + "2021-12-28T00:00:00+01:00", + "2021-12-29T00:00:00+01:00", + "2021-12-30T00:00:00+01:00", + "2021-12-31T00:00:00+01:00", + "2022-01-01T00:00:00+01:00", + "2022-01-02T00:00:00+01:00", + "2022-01-03T00:00:00+01:00", + "2022-01-04T00:00:00+01:00", + "2022-01-05T00:00:00+01:00", + "2022-01-06T00:00:00+01:00", + "2022-01-07T00:00:00+01:00", + "2022-01-08T00:00:00+01:00", + "2022-01-09T00:00:00+01:00", + "2022-01-10T00:00:00+01:00", + "2022-01-11T00:00:00+01:00", + "2022-01-12T00:00:00+01:00", + "2022-01-13T00:00:00+01:00", + "2022-01-14T00:00:00+01:00", + "2022-01-15T00:00:00+01:00", + "2022-01-16T00:00:00+01:00", + "2022-01-17T00:00:00+01:00", + "2022-01-18T00:00:00+01:00", + "2022-01-19T00:00:00+01:00", + "2022-01-20T00:00:00+01:00", + "2022-01-21T00:00:00+01:00", + "2022-01-22T00:00:00+01:00", + "2022-01-23T00:00:00+01:00", + "2022-01-24T00:00:00+01:00", + "2022-01-25T00:00:00+01:00", + "2022-01-26T00:00:00+01:00", + "2022-01-27T00:00:00+01:00", + "2022-01-28T00:00:00+01:00", + "2022-01-29T00:00:00+01:00", + "2022-01-30T00:00:00+01:00", + "2022-01-31T00:00:00+01:00", + "2022-02-01T00:00:00+01:00", + "2022-02-02T00:00:00+01:00", + "2022-02-03T00:00:00+01:00", + "2022-02-04T00:00:00+01:00", + "2022-02-05T00:00:00+01:00", + "2022-02-06T00:00:00+01:00", + "2022-02-07T00:00:00+01:00", + "2022-02-08T00:00:00+01:00", + "2022-02-09T00:00:00+01:00", + "2022-02-10T00:00:00+01:00", + "2022-02-11T00:00:00+01:00", + "2022-02-12T00:00:00+01:00", + "2022-02-13T00:00:00+01:00", + "2022-02-14T00:00:00+01:00", + "2022-02-15T00:00:00+01:00", + "2022-02-16T00:00:00+01:00", + "2022-02-17T00:00:00+01:00", + "2022-02-18T00:00:00+01:00", + "2022-02-19T00:00:00+01:00", + "2022-02-20T00:00:00+01:00", + "2022-02-21T00:00:00+01:00", + "2022-02-22T00:00:00+01:00", + "2022-02-23T00:00:00+01:00", + "2022-02-24T00:00:00+01:00", + "2022-02-25T00:00:00+01:00", + "2022-02-26T00:00:00+01:00", + "2022-02-27T00:00:00+01:00", + "2022-02-28T00:00:00+01:00", + "2022-03-01T00:00:00+01:00", + "2022-03-02T00:00:00+01:00", + "2022-03-03T00:00:00+01:00", + "2022-03-04T00:00:00+01:00", + "2022-03-05T00:00:00+01:00", + "2022-03-06T00:00:00+01:00", + "2022-03-07T00:00:00+01:00", + "2022-03-08T00:00:00+01:00", + "2022-03-09T00:00:00+01:00", + "2022-03-10T00:00:00+01:00", + "2022-03-11T00:00:00+01:00", + "2022-03-12T00:00:00+01:00", + "2022-03-13T00:00:00+01:00", + "2022-03-14T00:00:00+01:00", + "2022-03-15T00:00:00+01:00", + "2022-03-16T00:00:00+01:00", + "2022-03-17T00:00:00+01:00", + "2022-03-18T00:00:00+01:00", + "2022-03-19T00:00:00+01:00", + "2022-03-20T00:00:00+01:00", + "2022-03-21T00:00:00+01:00", + "2022-03-22T00:00:00+01:00", + "2022-03-23T00:00:00+01:00", + "2022-03-24T00:00:00+01:00", + "2022-03-25T00:00:00+01:00", + "2022-03-26T00:00:00+01:00", + "2022-03-27T00:00:00+01:00", + "2022-03-28T00:00:00+02:00", + "2022-03-29T00:00:00+02:00", + "2022-03-30T00:00:00+02:00", + "2022-03-31T00:00:00+02:00", + "2022-04-01T00:00:00+02:00", + "2022-04-02T00:00:00+02:00" + ], + "data": [ + [ + 34.35275, + 7.61 + ], + [ + 88.2305, + 6.32 + ], + [ + 96.7945, + 4.46 + ], + [ + 113.68, + 2.06 + ], + [ + 118.0105, + 1.83 + ], + [ + 66.0935, + 3.71 + ], + [ + 35.9365, + 7.05 + ], + [ + 89.019, + 7.37 + ], + [ + 98.3785, + 5.51 + ], + [ + 100.546, + 3.76 + ], + [ + 103.69725, + 3.9 + ], + [ + 109.91375, + 4.83 + ], + [ + 104.331, + 5.17 + ], + [ + 91.53825, + 6.12 + ], + [ + 72.78175, + 7.21 + ], + [ + 70.67375, + 8.23 + ], + [ + 68.95, + 8.43 + ], + [ + 74.426, + 10.11 + ], + [ + 69.77325, + 10.92 + ], + [ + 60.50875, + 9.34 + ], + [ + 35.808625, + 9.01 + ], + [ + 28.3535, + 9.36 + ], + [ + 71.283875, + 8.5 + ], + [ + 74.95225, + 8.71 + ], + [ + 57.17075, + 10.14 + ], + [ + 47.90575, + 12.09 + ], + [ + 67.55575, + 9.36 + ], + [ + 78.7465, + 7.43 + ], + [ + 85.559, + 6.96 + ], + [ + 94.61425, + 6.99 + ], + [ + 72.71475, + 8.69 + ], + [ + 67.1465, + 9.52 + ], + [ + 64.557, + 8.42 + ], + [ + 63.78625, + 7.55 + ], + [ + 85.27775, + 7.77 + ], + [ + 55.0035, + 10.65 + ], + [ + 30.24175, + 15.9 + ], + [ + 17.7685, + 16.64 + ], + [ + 20.15575, + 14.61 + ], + [ + 28.8645, + 12.81 + ], + [ + 33.43, + 11.78 + ], + [ + 33.85425, + 11.65 + ], + [ + 63.4125, + 11.01 + ], + [ + 54.84575, + 11.13 + ], + [ + 41.58475, + 11.05 + ], + [ + 42.23825, + 11.51 + ], + [ + 45.76075, + 10.88 + ], + [ + 38.913, + 11.38 + ], + [ + 35.535, + 12.38 + ], + [ + 45.6655, + 11.2 + ], + [ + 49.964, + 11.56 + ], + [ + 50.59275, + 10.92 + ], + [ + 57.95425, + 10.35 + ], + [ + 60.58725, + 10.77 + ], + [ + 54.12, + 11.38 + ], + [ + 39.78325, + 12.37 + ], + [ + 33.82375, + 14.58 + ], + [ + 24.29825, + 15.78 + ], + [ + 13.28525, + 17.31 + ], + [ + 8.064, + 18.51 + ], + [ + 7.278, + 20.08 + ], + [ + 4.5425, + 20.72 + ], + [ + 2.93325, + 19.76 + ], + [ + 3.55125, + 16.19 + ], + [ + 8.09175, + 15.88 + ], + [ + 9.2335, + 16.91 + ], + [ + 6.573, + 18.58 + ], + [ + 5.04875, + 19.23 + ], + [ + 4.60775, + 19.82 + ], + [ + 4.145, + 19.91 + ], + [ + 3.54175, + 18.36 + ], + [ + 4.37475, + 17.68 + ], + [ + 10.29175, + 19.88 + ], + [ + 8.3095, + 20.8 + ], + [ + 8.492, + 22.61 + ], + [ + 6.93025, + 24.06 + ], + [ + 3.514, + 24.14 + ], + [ + 2.90075, + 20.99 + ], + [ + 4.5, + 20.06 + ], + [ + 4.42625, + 17.49 + ], + [ + 5.02325, + 14.84 + ], + [ + 3.927, + 13.96 + ], + [ + 6.26625, + 15.05 + ], + [ + 3.3045, + 15.28 + ], + [ + 3.09975, + 17.25 + ], + [ + 4.75925, + 18.95 + ], + [ + 4.81675, + 19.43 + ], + [ + 6.219, + 18.48 + ], + [ + 3.65075, + 15.32 + ], + [ + 5.88975, + 14.26 + ], + [ + 6.8805, + 16.37 + ], + [ + 3.4115, + 17.73 + ], + [ + 0.5665, + 17.52 + ], + [ + 0.0, + 17.21 + ], + [ + 7.16475, + 17.22 + ], + [ + 5.80975, + 17.64 + ], + [ + 3.7835, + 18.02 + ], + [ + 2.13125, + 17.57 + ], + [ + 2.633, + 17.18 + ], + [ + 9.50625, + 16.9 + ], + [ + 6.59075, + 18.14 + ], + [ + 4.83175, + 17.64 + ], + [ + 6.09975, + 16.57 + ], + [ + 7.70425, + 16.02 + ], + [ + 4.13525, + 16.08 + ], + [ + 2.1265, + 18.21 + ], + [ + 1.9495, + 20.28 + ], + [ + 1.42775, + 20.29 + ], + [ + 4.31025, + 19.86 + ], + [ + 2.12625, + 19.87 + ], + [ + 0.2645, + 20.02 + ], + [ + 0.0, + 19.73 + ], + [ + 0.0, + 19.2 + ], + [ + 0.0, + 18.96 + ], + [ + 0.21, + 18.42 + ], + [ + 5.2735, + 18.12 + ], + [ + 3.6015, + 17.95 + ], + [ + 0.07, + 17.55 + ], + [ + 12.909, + 17.54 + ], + [ + 1.058, + 16.67 + ], + [ + 0.0, + 15.65 + ], + [ + 0.0, + 15.56 + ], + [ + 3.01, + 15.94 + ], + [ + 0.0, + 16.69 + ], + [ + 0.0, + 18.21 + ], + [ + 0.0, + 17.88 + ], + [ + 1.32, + 17.03 + ], + [ + 0.04, + 16.05 + ], + [ + 0.0, + 15.99 + ], + [ + 2.31, + 16.47 + ], + [ + 0.0, + 17.03 + ], + [ + 0.0, + 18.75 + ], + [ + 0.75, + 19.13 + ], + [ + 9.246, + 18.75 + ], + [ + 2.57, + 19.43 + ], + [ + 3.74, + 16.6 + ], + [ + 3.8, + 14.42 + ], + [ + 12.483, + 15.44 + ], + [ + 4.208, + 16.4 + ], + [ + 4.779, + 17.74 + ], + [ + 0.0, + 18.72 + ], + [ + 2.429, + 17.74 + ], + [ + 4.658, + 17.49 + ], + [ + 5.32, + 17.2 + ], + [ + 8.876, + 16.96 + ], + [ + 2.329, + 16.17 + ], + [ + 2.059, + 15.51 + ], + [ + 7.956, + 16.03 + ], + [ + 2.729, + 15.65 + ], + [ + 4.289, + 16.56 + ], + [ + 7.938, + 16.95 + ], + [ + 7.877, + 16.63 + ], + [ + 2.716, + 16.86 + ], + [ + 4.012, + 17.98 + ], + [ + 4.767, + 17.64 + ], + [ + 4.99, + 18.61 + ], + [ + 3.552, + 19.03 + ], + [ + 8.198, + 19.99 + ], + [ + 4.376, + 20.49 + ], + [ + 5.381, + 20.68 + ], + [ + 5.119, + 19.5 + ], + [ + 3.762, + 17.88 + ], + [ + 8.943, + 16.69 + ], + [ + 4.917, + 16.46 + ], + [ + 5.462, + 17.37 + ], + [ + 0.815, + 17.49 + ], + [ + 6.697, + 16.38 + ], + [ + 2.987, + 16.08 + ], + [ + 0.0, + 16.83 + ], + [ + 1.981, + 16.67 + ], + [ + 4.729, + 15.54 + ], + [ + 6.288, + 13.88 + ], + [ + 5.895, + 13.6 + ], + [ + 8.459, + 14.41 + ], + [ + 4.506, + 15.89 + ], + [ + 4.033, + 16.47 + ], + [ + 4.326, + 17.27 + ], + [ + 4.335, + 16.21 + ], + [ + 8.127, + 14.49 + ], + [ + 5.805, + 12.79 + ], + [ + 7.062, + 11.55 + ], + [ + 49.289, + 12.54 + ], + [ + 41.584, + 13.7 + ], + [ + 39.129, + 13.25 + ], + [ + 24.293, + 13.28 + ], + [ + 41.824, + 12.73 + ], + [ + 50.596, + 11.6 + ], + [ + 33.769, + 11.41 + ], + [ + 46.895, + 11.62 + ], + [ + 46.511, + 11.59 + ], + [ + 53.19, + 11.17 + ], + [ + 37.871, + 11.14 + ], + [ + 45.103, + 10.45 + ], + [ + 60.594, + 9.52 + ], + [ + 43.926, + 10.18 + ], + [ + 49.177, + 10.44 + ], + [ + 69.606, + 9.39 + ], + [ + 56.901, + 9.81 + ], + [ + 49.781, + 11.27 + ], + [ + 28.99, + 14.71 + ], + [ + 35.124, + 15.89 + ], + [ + 46.26, + 11.84 + ], + [ + 74.373, + 9.14 + ], + [ + 69.325, + 8.78 + ], + [ + 67.815, + 8.94 + ], + [ + 55.945, + 9.97 + ], + [ + 43.9352, + 11.1 + ], + [ + 58.1958, + 12.25 + ], + [ + 57.369, + 12.39 + ], + [ + 43.246, + 12.77 + ], + [ + 51.247, + 12.39 + ], + [ + 39.534, + 12.01 + ], + [ + 54.762, + 10.39 + ], + [ + 77.762, + 8.14 + ], + [ + 76.69, + 6.85 + ], + [ + 87.283, + 6.27 + ], + [ + 45.279, + 6.91 + ], + [ + 44.795, + 7.33 + ], + [ + 83.629, + 8.63 + ], + [ + 101.518, + 7.53 + ], + [ + 95.296, + 6.82 + ], + [ + 91.075, + 5.73 + ], + [ + 82.913, + 5.87 + ], + [ + 79.19, + 6.55 + ], + [ + 71.309, + 8.95 + ], + [ + 70.044, + 9.22 + ], + [ + 73.95, + 7.4 + ], + [ + 79.222, + 5.79 + ], + [ + 90.5, + 6.1 + ], + [ + 83.924, + 7.05 + ], + [ + 61.869, + 9.12 + ], + [ + 45.7016, + 8.95 + ], + [ + 79.7549, + 7.72 + ], + [ + 88.45775, + 5.62 + ], + [ + 118.71475, + 4.44 + ], + [ + 102.357, + 5.25 + ], + [ + 83.751, + 4.6 + ], + [ + 114.271, + 4.02 + ], + [ + 101.051, + 2.77 + ], + [ + 85.0888, + 2.68 + ], + [ + 108.4177, + 2.49 + ], + [ + 102.70375, + 5.44 + ], + [ + 121.00275, + 6.84 + ], + [ + 109.2184, + 4.07 + ], + [ + 133.3946, + 2.92 + ], + [ + 121.95, + 3.64 + ], + [ + 103.3352, + 3.75 + ], + [ + 127.38305, + 3.02 + ], + [ + 156.00875, + 3.57 + ], + [ + 121.817, + 4.48 + ], + [ + 106.932, + 4.01 + ], + [ + 154.468, + 2.57 + ], + [ + 126.233, + 3.44 + ], + [ + 91.206, + 6.32 + ], + [ + 89.109, + 8.02 + ], + [ + 66.104, + 7.89 + ], + [ + 113.569, + 8.15 + ], + [ + 67.172, + 7.83 + ], + [ + 65.4128, + 6.6 + ], + [ + 114.8702, + 6.04 + ], + [ + 102.869, + 5.71 + ], + [ + 5.8576, + 5.27 + ], + [ + 161.2064, + 1.82 + ], + [ + 180.658, + -0.1 + ], + [ + 138.237, + 1.64 + ], + [ + 104.085, + 5.44 + ], + [ + 116.534, + 4.46 + ], + [ + 112.2984, + 4.27 + ], + [ + 98.30685, + 6.76 + ], + [ + 105.0115, + 8.71 + ], + [ + 72.17925, + 9.83 + ], + [ + 14.993, + 12.11 + ], + [ + 13.056, + 12.63 + ], + [ + 14.24175, + 12.39 + ], + [ + 60.59525, + 11.91 + ], + [ + 86.8992, + 10.18 + ], + [ + 78.1548, + 7.62 + ], + [ + 133.931, + 4.75 + ], + [ + 89.5496, + 3.59 + ], + [ + 154.3414, + 3.48 + ], + [ + 50.0136, + 3.69 + ], + [ + 109.2404, + 3.84 + ], + [ + 97.3192, + 1.49 + ], + [ + 133.2458, + 1.68 + ], + [ + 101.6792, + 2.09 + ], + [ + 143.4218, + 1.9 + ], + [ + 124.603, + 2.7 + ], + [ + 89.7864, + 2.71 + ], + [ + 150.0086, + 2.67 + ], + [ + 93.984, + 4.28 + ], + [ + 132.281, + 4.76 + ], + [ + 95.716, + 4.14 + ], + [ + 155.64625, + 3.6 + ], + [ + 187.02075, + 3.06 + ], + [ + 89.3424, + 4.0 + ], + [ + 143.0476, + 4.39 + ], + [ + 127.088, + 3.8 + ], + [ + 126.817, + 1.56 + ], + [ + 171.211, + 1.47 + ], + [ + 83.6184, + 3.92 + ], + [ + 108.64035, + 3.9 + ], + [ + 113.31725, + 6.44 + ], + [ + 126.329, + 5.59 + ], + [ + 100.4176, + 5.16 + ], + [ + 115.7174, + 5.66 + ], + [ + 71.079, + 7.39 + ], + [ + 65.9424, + 7.28 + ], + [ + 107.2296, + 6.57 + ], + [ + 103.747, + 5.64 + ], + [ + 94.844, + 6.55 + ], + [ + 99.539, + 5.89 + ], + [ + 79.84, + 7.36 + ], + [ + 80.985, + 8.33 + ], + [ + 83.851, + 6.6 + ], + [ + 107.444, + 4.48 + ], + [ + 134.789, + 3.46 + ], + [ + 101.152, + 5.38 + ], + [ + 78.732, + 7.64 + ], + [ + 85.717, + 7.64 + ], + [ + 83.355, + 9.7 + ], + [ + 61.6048, + 9.87 + ], + [ + 88.9642, + 9.3 + ], + [ + 75.8832, + 7.21 + ], + [ + 104.6268, + 8.08 + ], + [ + 117.517, + 7.02 + ], + [ + 88.454, + 6.96 + ], + [ + 124.331, + 7.04 + ], + [ + 68.7608, + 6.34 + ], + [ + 117.9492, + 4.74 + ], + [ + 125.707, + 3.76 + ], + [ + 108.312, + 4.16 + ], + [ + 88.185, + 5.08 + ], + [ + 108.199, + 5.98 + ], + [ + 90.688, + 6.38 + ], + [ + 80.3815, + 6.73 + ], + [ + 65.309, + 6.26 + ], + [ + 70.688, + 5.34 + ], + [ + 86.15875, + 3.53 + ], + [ + 76.415, + 2.37 + ], + [ + 99.31375, + 3.58 + ], + [ + 86.401, + 6.61 + ], + [ + 41.694, + 9.28 + ], + [ + 19.26, + 10.71 + ], + [ + 19.292, + 10.95 + ], + [ + 21.365, + 10.99 + ], + [ + 23.0624, + 9.97 + ], + [ + 30.0896, + 8.87 + ], + [ + 47.658, + 9.0 + ], + [ + 42.501, + 8.42 + ], + [ + 25.3096, + 8.55 + ], + [ + 37.99915, + 8.99 + ], + [ + 63.5395, + 6.48 + ], + [ + 49.70975, + 8.34 + ], + [ + 12.1464, + 11.45 + ], + [ + 14.4321, + 11.95 + ], + [ + 12.7775, + 12.07 + ], + [ + 27.1805, + 11.81 + ], + [ + 25.3705, + 12.04 + ], + [ + 62.942, + 10.59 + ], + [ + 18.647, + 10.94 + ], + [ + 21.487, + 11.34 + ], + [ + 45.3512, + 9.9 + ], + [ + 63.1818, + 6.44 + ], + [ + 57.543, + 2.98 + ], + [ + 25.797, + 2.63 + ] + ] + } +} \ No newline at end of file diff --git a/data/mvlr/sample_solar.json b/data/mvlr/sample_solar.json new file mode 100644 index 0000000..62ea043 --- /dev/null +++ b/data/mvlr/sample_solar.json @@ -0,0 +1,2586 @@ +{ + "timeZone": "Europe/Brussels", + "independentVariables": [ + { + "name": "temperatureEquivalent", + "variants": ["HDD_16.5", "CDD_24", "HDD_15", "FDD_0"] + }, + { + "name": "solarRadiation", + "variants": [] + }, + { + "name": "windPower", + "variants": [] + } + ], + "dependentVariable": "energyProduction/solarPhotovoltaic", + "granularities": ["P7D", "P1M"], + "frame": { + "columns": [ + "energyProduction/solarPhotovoltaic", + "temperatureEquivalent", + "solarRadiation", + "windPower" + ], + "index": [ + "2021-01-01T00:00:00+01:00", + "2021-01-02T00:00:00+01:00", + "2021-01-03T00:00:00+01:00", + "2021-01-04T00:00:00+01:00", + "2021-01-05T00:00:00+01:00", + "2021-01-06T00:00:00+01:00", + "2021-01-07T00:00:00+01:00", + "2021-01-08T00:00:00+01:00", + "2021-01-09T00:00:00+01:00", + "2021-01-10T00:00:00+01:00", + "2021-01-11T00:00:00+01:00", + "2021-01-12T00:00:00+01:00", + "2021-01-13T00:00:00+01:00", + "2021-01-14T00:00:00+01:00", + "2021-01-15T00:00:00+01:00", + "2021-01-16T00:00:00+01:00", + "2021-01-17T00:00:00+01:00", + "2021-01-18T00:00:00+01:00", + "2021-01-19T00:00:00+01:00", + "2021-01-20T00:00:00+01:00", + "2021-01-21T00:00:00+01:00", + "2021-01-22T00:00:00+01:00", + "2021-01-23T00:00:00+01:00", + "2021-01-24T00:00:00+01:00", + "2021-01-25T00:00:00+01:00", + "2021-01-26T00:00:00+01:00", + "2021-01-27T00:00:00+01:00", + "2021-01-28T00:00:00+01:00", + "2021-01-29T00:00:00+01:00", + "2021-01-30T00:00:00+01:00", + "2021-01-31T00:00:00+01:00", + "2021-02-01T00:00:00+01:00", + "2021-02-02T00:00:00+01:00", + "2021-02-03T00:00:00+01:00", + "2021-02-04T00:00:00+01:00", + "2021-02-05T00:00:00+01:00", + "2021-02-06T00:00:00+01:00", + "2021-02-07T00:00:00+01:00", + "2021-02-08T00:00:00+01:00", + "2021-02-09T00:00:00+01:00", + "2021-02-10T00:00:00+01:00", + "2021-02-11T00:00:00+01:00", + "2021-02-12T00:00:00+01:00", + "2021-02-13T00:00:00+01:00", + "2021-02-14T00:00:00+01:00", + "2021-02-15T00:00:00+01:00", + "2021-02-16T00:00:00+01:00", + "2021-02-17T00:00:00+01:00", + "2021-02-18T00:00:00+01:00", + "2021-02-19T00:00:00+01:00", + "2021-02-20T00:00:00+01:00", + "2021-02-21T00:00:00+01:00", + "2021-02-22T00:00:00+01:00", + "2021-02-23T00:00:00+01:00", + "2021-02-24T00:00:00+01:00", + "2021-02-25T00:00:00+01:00", + "2021-02-26T00:00:00+01:00", + "2021-02-27T00:00:00+01:00", + "2021-02-28T00:00:00+01:00", + "2021-03-01T00:00:00+01:00", + "2021-03-02T00:00:00+01:00", + "2021-03-03T00:00:00+01:00", + "2021-03-04T00:00:00+01:00", + "2021-03-05T00:00:00+01:00", + "2021-03-06T00:00:00+01:00", + "2021-03-07T00:00:00+01:00", + "2021-03-08T00:00:00+01:00", + "2021-03-09T00:00:00+01:00", + "2021-03-10T00:00:00+01:00", + "2021-03-11T00:00:00+01:00", + "2021-03-12T00:00:00+01:00", + "2021-03-13T00:00:00+01:00", + "2021-03-14T00:00:00+01:00", + "2021-03-15T00:00:00+01:00", + "2021-03-16T00:00:00+01:00", + "2021-03-17T00:00:00+01:00", + "2021-03-18T00:00:00+01:00", + "2021-03-19T00:00:00+01:00", + "2021-03-20T00:00:00+01:00", + "2021-03-21T00:00:00+01:00", + "2021-03-22T00:00:00+01:00", + "2021-03-23T00:00:00+01:00", + "2021-03-24T00:00:00+01:00", + "2021-03-25T00:00:00+01:00", + "2021-03-26T00:00:00+01:00", + "2021-03-27T00:00:00+01:00", + "2021-03-28T00:00:00+01:00", + "2021-03-29T00:00:00+02:00", + "2021-03-30T00:00:00+02:00", + "2021-03-31T00:00:00+02:00", + "2021-04-01T00:00:00+02:00", + "2021-04-02T00:00:00+02:00", + "2021-04-03T00:00:00+02:00", + "2021-04-04T00:00:00+02:00", + "2021-04-05T00:00:00+02:00", + "2021-04-06T00:00:00+02:00", + "2021-04-07T00:00:00+02:00", + "2021-04-08T00:00:00+02:00", + "2021-04-09T00:00:00+02:00", + "2021-04-10T00:00:00+02:00", + "2021-04-11T00:00:00+02:00", + "2021-04-12T00:00:00+02:00", + "2021-04-13T00:00:00+02:00", + "2021-04-14T00:00:00+02:00", + "2021-04-15T00:00:00+02:00", + "2021-04-16T00:00:00+02:00", + "2021-04-17T00:00:00+02:00", + "2021-04-18T00:00:00+02:00", + "2021-04-19T00:00:00+02:00", + "2021-04-20T00:00:00+02:00", + "2021-04-21T00:00:00+02:00", + "2021-04-22T00:00:00+02:00", + "2021-04-23T00:00:00+02:00", + "2021-04-24T00:00:00+02:00", + "2021-04-25T00:00:00+02:00", + "2021-04-26T00:00:00+02:00", + "2021-04-27T00:00:00+02:00", + "2021-04-28T00:00:00+02:00", + "2021-04-29T00:00:00+02:00", + "2021-04-30T00:00:00+02:00", + "2021-05-01T00:00:00+02:00", + "2021-05-02T00:00:00+02:00", + "2021-05-03T00:00:00+02:00", + "2021-05-04T00:00:00+02:00", + "2021-05-05T00:00:00+02:00", + "2021-05-06T00:00:00+02:00", + "2021-05-07T00:00:00+02:00", + "2021-05-08T00:00:00+02:00", + "2021-05-09T00:00:00+02:00", + "2021-05-10T00:00:00+02:00", + "2021-05-11T00:00:00+02:00", + "2021-05-12T00:00:00+02:00", + "2021-05-13T00:00:00+02:00", + "2021-05-14T00:00:00+02:00", + "2021-05-15T00:00:00+02:00", + "2021-05-16T00:00:00+02:00", + "2021-05-17T00:00:00+02:00", + "2021-05-18T00:00:00+02:00", + "2021-05-19T00:00:00+02:00", + "2021-05-20T00:00:00+02:00", + "2021-05-21T00:00:00+02:00", + "2021-05-22T00:00:00+02:00", + "2021-05-23T00:00:00+02:00", + "2021-05-24T00:00:00+02:00", + "2021-05-25T00:00:00+02:00", + "2021-05-26T00:00:00+02:00", + "2021-05-27T00:00:00+02:00", + "2021-05-28T00:00:00+02:00", + "2021-05-29T00:00:00+02:00", + "2021-05-30T00:00:00+02:00", + "2021-05-31T00:00:00+02:00", + "2021-06-01T00:00:00+02:00", + "2021-06-02T00:00:00+02:00", + "2021-06-03T00:00:00+02:00", + "2021-06-04T00:00:00+02:00", + "2021-06-05T00:00:00+02:00", + "2021-06-06T00:00:00+02:00", + "2021-06-07T00:00:00+02:00", + "2021-06-08T00:00:00+02:00", + "2021-06-09T00:00:00+02:00", + "2021-06-10T00:00:00+02:00", + "2021-06-11T00:00:00+02:00", + "2021-06-12T00:00:00+02:00", + "2021-06-13T00:00:00+02:00", + "2021-06-14T00:00:00+02:00", + "2021-06-15T00:00:00+02:00", + "2021-06-16T00:00:00+02:00", + "2021-06-17T00:00:00+02:00", + "2021-06-18T00:00:00+02:00", + "2021-06-19T00:00:00+02:00", + "2021-06-20T00:00:00+02:00", + "2021-06-21T00:00:00+02:00", + "2021-06-22T00:00:00+02:00", + "2021-06-23T00:00:00+02:00", + "2021-06-24T00:00:00+02:00", + "2021-06-25T00:00:00+02:00", + "2021-06-26T00:00:00+02:00", + "2021-06-27T00:00:00+02:00", + "2021-06-28T00:00:00+02:00", + "2021-06-29T00:00:00+02:00", + "2021-06-30T00:00:00+02:00", + "2021-07-01T00:00:00+02:00", + "2021-07-02T00:00:00+02:00", + "2021-07-03T00:00:00+02:00", + "2021-07-04T00:00:00+02:00", + "2021-07-05T00:00:00+02:00", + "2021-07-06T00:00:00+02:00", + "2021-07-07T00:00:00+02:00", + "2021-07-08T00:00:00+02:00", + "2021-07-09T00:00:00+02:00", + "2021-07-10T00:00:00+02:00", + "2021-07-11T00:00:00+02:00", + "2021-07-12T00:00:00+02:00", + "2021-07-13T00:00:00+02:00", + "2021-07-14T00:00:00+02:00", + "2021-07-15T00:00:00+02:00", + "2021-07-16T00:00:00+02:00", + "2021-07-17T00:00:00+02:00", + "2021-07-18T00:00:00+02:00", + "2021-07-19T00:00:00+02:00", + "2021-07-20T00:00:00+02:00", + "2021-07-21T00:00:00+02:00", + "2021-07-22T00:00:00+02:00", + "2021-07-23T00:00:00+02:00", + "2021-07-24T00:00:00+02:00", + "2021-07-25T00:00:00+02:00", + "2021-07-26T00:00:00+02:00", + "2021-07-27T00:00:00+02:00", + "2021-07-28T00:00:00+02:00", + "2021-07-29T00:00:00+02:00", + "2021-07-30T00:00:00+02:00", + "2021-07-31T00:00:00+02:00", + "2021-08-01T00:00:00+02:00", + "2021-08-02T00:00:00+02:00", + "2021-08-03T00:00:00+02:00", + "2021-08-04T00:00:00+02:00", + "2021-08-05T00:00:00+02:00", + "2021-08-06T00:00:00+02:00", + "2021-08-07T00:00:00+02:00", + "2021-08-08T00:00:00+02:00", + "2021-08-09T00:00:00+02:00", + "2021-08-10T00:00:00+02:00", + "2021-08-11T00:00:00+02:00", + "2021-08-12T00:00:00+02:00", + "2021-08-13T00:00:00+02:00", + "2021-08-14T00:00:00+02:00", + "2021-08-15T00:00:00+02:00", + "2021-08-16T00:00:00+02:00", + "2021-08-17T00:00:00+02:00", + "2021-08-18T00:00:00+02:00", + "2021-08-19T00:00:00+02:00", + "2021-08-20T00:00:00+02:00", + "2021-08-21T00:00:00+02:00", + "2021-08-22T00:00:00+02:00", + "2021-08-23T00:00:00+02:00", + "2021-08-24T00:00:00+02:00", + "2021-08-25T00:00:00+02:00", + "2021-08-26T00:00:00+02:00", + "2021-08-27T00:00:00+02:00", + "2021-08-28T00:00:00+02:00", + "2021-08-29T00:00:00+02:00", + "2021-08-30T00:00:00+02:00", + "2021-08-31T00:00:00+02:00", + "2021-09-01T00:00:00+02:00", + "2021-09-02T00:00:00+02:00", + "2021-09-03T00:00:00+02:00", + "2021-09-04T00:00:00+02:00", + "2021-09-05T00:00:00+02:00", + "2021-09-06T00:00:00+02:00", + "2021-09-07T00:00:00+02:00", + "2021-09-08T00:00:00+02:00", + "2021-09-09T00:00:00+02:00", + "2021-09-10T00:00:00+02:00", + "2021-09-11T00:00:00+02:00", + "2021-09-12T00:00:00+02:00", + "2021-09-13T00:00:00+02:00", + "2021-09-14T00:00:00+02:00", + "2021-09-15T00:00:00+02:00", + "2021-09-16T00:00:00+02:00", + "2021-09-17T00:00:00+02:00", + "2021-09-18T00:00:00+02:00", + "2021-09-19T00:00:00+02:00", + "2021-09-20T00:00:00+02:00", + "2021-09-21T00:00:00+02:00", + "2021-09-22T00:00:00+02:00", + "2021-09-23T00:00:00+02:00", + "2021-09-24T00:00:00+02:00", + "2021-09-25T00:00:00+02:00", + "2021-09-26T00:00:00+02:00", + "2021-09-27T00:00:00+02:00", + "2021-09-28T00:00:00+02:00", + "2021-09-29T00:00:00+02:00", + "2021-09-30T00:00:00+02:00", + "2021-10-01T00:00:00+02:00", + "2021-10-02T00:00:00+02:00", + "2021-10-03T00:00:00+02:00", + "2021-10-04T00:00:00+02:00", + "2021-10-05T00:00:00+02:00", + "2021-10-06T00:00:00+02:00", + "2021-10-07T00:00:00+02:00", + "2021-10-08T00:00:00+02:00", + "2021-10-09T00:00:00+02:00", + "2021-10-10T00:00:00+02:00", + "2021-10-11T00:00:00+02:00", + "2021-10-12T00:00:00+02:00", + "2021-10-13T00:00:00+02:00", + "2021-10-14T00:00:00+02:00", + "2021-10-15T00:00:00+02:00", + "2021-10-16T00:00:00+02:00", + "2021-10-17T00:00:00+02:00", + "2021-10-18T00:00:00+02:00", + "2021-10-19T00:00:00+02:00", + "2021-10-20T00:00:00+02:00", + "2021-10-21T00:00:00+02:00", + "2021-10-22T00:00:00+02:00", + "2021-10-23T00:00:00+02:00", + "2021-10-24T00:00:00+02:00", + "2021-10-25T00:00:00+02:00", + "2021-10-26T00:00:00+02:00", + "2021-10-27T00:00:00+02:00", + "2021-10-28T00:00:00+02:00", + "2021-10-29T00:00:00+02:00", + "2021-10-30T00:00:00+02:00", + "2021-10-31T00:00:00+02:00", + "2021-11-01T00:00:00+01:00", + "2021-11-02T00:00:00+01:00", + "2021-11-03T00:00:00+01:00", + "2021-11-04T00:00:00+01:00", + "2021-11-05T00:00:00+01:00", + "2021-11-06T00:00:00+01:00", + "2021-11-07T00:00:00+01:00", + "2021-11-08T00:00:00+01:00", + "2021-11-09T00:00:00+01:00", + "2021-11-10T00:00:00+01:00", + "2021-11-11T00:00:00+01:00", + "2021-11-12T00:00:00+01:00", + "2021-11-13T00:00:00+01:00", + "2021-11-14T00:00:00+01:00", + "2021-11-15T00:00:00+01:00", + "2021-11-16T00:00:00+01:00", + "2021-11-17T00:00:00+01:00", + "2021-11-18T00:00:00+01:00", + "2021-11-19T00:00:00+01:00", + "2021-11-20T00:00:00+01:00", + "2021-11-21T00:00:00+01:00", + "2021-11-22T00:00:00+01:00", + "2021-11-23T00:00:00+01:00", + "2021-11-24T00:00:00+01:00", + "2021-11-25T00:00:00+01:00", + "2021-11-26T00:00:00+01:00", + "2021-11-27T00:00:00+01:00", + "2021-11-28T00:00:00+01:00", + "2021-11-29T00:00:00+01:00", + "2021-11-30T00:00:00+01:00", + "2021-12-01T00:00:00+01:00", + "2021-12-02T00:00:00+01:00", + "2021-12-03T00:00:00+01:00", + "2021-12-04T00:00:00+01:00", + "2021-12-05T00:00:00+01:00", + "2021-12-06T00:00:00+01:00", + "2021-12-07T00:00:00+01:00", + "2021-12-08T00:00:00+01:00", + "2021-12-09T00:00:00+01:00", + "2021-12-10T00:00:00+01:00", + "2021-12-11T00:00:00+01:00", + "2021-12-12T00:00:00+01:00", + "2021-12-13T00:00:00+01:00", + "2021-12-14T00:00:00+01:00", + "2021-12-15T00:00:00+01:00", + "2021-12-16T00:00:00+01:00", + "2021-12-17T00:00:00+01:00", + "2021-12-18T00:00:00+01:00", + "2021-12-19T00:00:00+01:00", + "2021-12-20T00:00:00+01:00", + "2021-12-21T00:00:00+01:00", + "2021-12-22T00:00:00+01:00", + "2021-12-23T00:00:00+01:00", + "2021-12-24T00:00:00+01:00", + "2021-12-25T00:00:00+01:00", + "2021-12-26T00:00:00+01:00", + "2021-12-27T00:00:00+01:00", + "2021-12-28T00:00:00+01:00", + "2021-12-29T00:00:00+01:00", + "2021-12-30T00:00:00+01:00", + "2021-12-31T00:00:00+01:00" + ], + "data": [ + [ + 3.982, + 1.95, + 583.87, + 5.83 + ], + [ + 1.188, + 2.02, + 583.87, + 6.86 + ], + [ + 0.528, + 2.43, + 583.87, + 24.39 + ], + [ + 0.316, + 2.17, + 583.87, + 50.65 + ], + [ + 0.241, + 2.04, + 583.87, + 42.88 + ], + [ + 0.826, + 2.17, + 583.87, + 19.68 + ], + [ + 1.887, + 1.85, + 583.87, + 24.39 + ], + [ + 1.133, + 1.55, + 583.87, + 15.62 + ], + [ + 3.164, + -0.26, + 583.87, + 0.73 + ], + [ + 0, + -0.46, + 583.87, + 2.74 + ], + [ + 0, + 1.81, + 583.87, + 140.61 + ], + [ + 0, + 4.11, + 583.87, + 74.09 + ], + [ + 0, + 3.34, + 583.87, + 13.82 + ], + [ + 0, + 2.02, + 583.87, + 32.77 + ], + [ + 0, + 0.99, + 583.87, + 17.58 + ], + [ + 0, + 0.25, + 583.87, + 46.66 + ], + [ + 0, + 2.19, + 583.87, + 17.58 + ], + [ + 0, + 3.47, + 583.87, + 64 + ], + [ + 0, + 5.1, + 583.87, + 405.22 + ], + [ + 0, + 7.33, + 583.87, + 438.98 + ], + [ + 0.698, + 7.61, + 583.87, + 438.98 + ], + [ + 3.993, + 5.48, + 583.87, + 29.79 + ], + [ + 0.586, + 3.86, + 583.87, + 46.66 + ], + [ + 3.476, + 2.02, + 583.87, + 42.88 + ], + [ + 3.802, + 1.97, + 583.87, + 19.68 + ], + [ + 4.398, + 2.39, + 583.87, + 59.32 + ], + [ + 0.403, + 3.07, + 583.87, + 50.65 + ], + [ + 0.718, + 6.51, + 583.87, + 79.51 + ], + [ + 2.941, + 8.29, + 583.87, + 125 + ], + [ + 1.049, + 5.16, + 583.87, + 85.18 + ], + [ + 4.999, + 2.18, + 583.87, + 50.65 + ], + [ + 0.758, + 2.73, + 1775, + 10.65 + ], + [ + 1.133, + 6.11, + 1775, + 97.34 + ], + [ + 0.859, + 8.47, + 1775, + 103.82 + ], + [ + 4.355, + 8.2, + 1775, + 39.3 + ], + [ + 4.539, + 7.96, + 1775, + 19.68 + ], + [ + 1.581, + 6.25, + 1775, + 50.65 + ], + [ + 0, + 1.15, + 1775, + 46.66 + ], + [ + 0, + -3.32, + 1775, + 64 + ], + [ + 0, + -5.36, + 1775, + 74.09 + ], + [ + 0, + -5.43, + 1775, + 64 + ], + [ + 0, + -4.61, + 1775, + 32.77 + ], + [ + 0.015, + -4.63, + 1775, + 97.34 + ], + [ + 0.018, + -3.95, + 1775, + 97.34 + ], + [ + 0.04, + -1.35, + 1775, + 157.46 + ], + [ + 0.828, + 2.38, + 1775, + 157.46 + ], + [ + 6.109, + 6.75, + 1775, + 125 + ], + [ + 5.287, + 8.84, + 1775, + 132.65 + ], + [ + 3.371, + 8.49, + 1775, + 238.33 + ], + [ + 7.054, + 7.88, + 1775, + 110.59 + ], + [ + 9.622, + 10.81, + 1775, + 343 + ], + [ + 10.322, + 12.25, + 1775, + 125 + ], + [ + 5.864, + 13.2, + 1775, + 97.34 + ], + [ + 9.279, + 14.14, + 1775, + 175.62 + ], + [ + 10.757, + 14.52, + 1775, + 132.65 + ], + [ + 5.821, + 13.29, + 1775, + 27 + ], + [ + 8.869, + 9.68, + 1775, + 27 + ], + [ + 3.32, + 5.71, + 1775, + 12.17 + ], + [ + 9.023, + 5.58, + 1775, + 50.65 + ], + [ + 7.415, + 5.71, + 2874.19, + 35.94 + ], + [ + 9.457, + 7.88, + 2874.19, + 12.17 + ], + [ + 8.527, + 9.94, + 2874.19, + 8 + ], + [ + 0.385, + 7.52, + 2874.19, + 17.58 + ], + [ + 10.775, + 4.55, + 2874.19, + 54.87 + ], + [ + 11.43, + 2.89, + 2874.19, + 27 + ], + [ + 10.235, + 2.46, + 2874.19, + 24.39 + ], + [ + 10.598, + 3.78, + 2874.19, + 4.1 + ], + [ + 1.597, + 4.89, + 2874.19, + 13.82 + ], + [ + 4.373, + 6.05, + 2874.19, + 185.19 + ], + [ + 6.888, + 8.28, + 2874.19, + 571.79 + ], + [ + 3.479, + 7.68, + 2874.19, + 328.51 + ], + [ + 6.811, + 7.29, + 2874.19, + 357.91 + ], + [ + 7.032, + 6.3, + 2874.19, + 59.32 + ], + [ + 4.97, + 6.23, + 2874.19, + 110.59 + ], + [ + 2.533, + 5.65, + 2874.19, + 13.82 + ], + [ + 4.519, + 5.52, + 2874.19, + 64 + ], + [ + 3.259, + 5.12, + 2874.19, + 17.58 + ], + [ + 14.839, + 5.08, + 2874.19, + 91.12 + ], + [ + 15.496, + 5.02, + 2874.19, + 21.95 + ], + [ + 4.528, + 5.67, + 2874.19, + 64 + ], + [ + 3.804, + 5.93, + 2874.19, + 12.17 + ], + [ + 13.591, + 7.21, + 2874.19, + 21.95 + ], + [ + 15.311, + 8.82, + 2874.19, + 27 + ], + [ + 4.958, + 8.93, + 2874.19, + 19.68 + ], + [ + 7.954, + 8.92, + 2874.19, + 140.61 + ], + [ + 9.586, + 7.74, + 2874.19, + 110.59 + ], + [ + 10.822, + 9.23, + 2874.19, + 132.65 + ], + [ + 16.768, + 12.1, + 2874.19, + 68.92 + ], + [ + 16.417, + 14.6, + 2874.19, + 12.17 + ], + [ + 16.023, + 16.23, + 2874.19, + 6.86 + ], + [ + 14.546, + 15.04, + 4316.67, + 35.94 + ], + [ + 12.786, + 9.79, + 4316.67, + 97.34 + ], + [ + 9.26, + 7.61, + 4316.67, + 79.51 + ], + [ + 4.949, + 6.32, + 4316.67, + 12.17 + ], + [ + 7.953, + 4.46, + 4316.67, + 132.65 + ], + [ + 5.199, + 2.06, + 4316.67, + 59.32 + ], + [ + 3.337, + 1.83, + 4316.67, + 68.92 + ], + [ + 11.566, + 3.71, + 4316.67, + 27 + ], + [ + 12.213, + 7.05, + 4316.67, + 24.39 + ], + [ + 2.012, + 7.37, + 4316.67, + 15.62 + ], + [ + 7.027, + 5.51, + 4316.67, + 74.09 + ], + [ + 12.185, + 3.76, + 4316.67, + 12.17 + ], + [ + 13.994, + 3.9, + 4316.67, + 6.86 + ], + [ + 9.301, + 4.83, + 4316.67, + 15.62 + ], + [ + 8.998, + 5.17, + 4316.67, + 19.68 + ], + [ + 13.642, + 6.12, + 4316.67, + 42.88 + ], + [ + 17.361, + 7.21, + 4316.67, + 54.87 + ], + [ + 17.893, + 8.23, + 4316.67, + 15.62 + ], + [ + 10.701, + 8.43, + 4316.67, + 8 + ], + [ + 14.958, + 10.11, + 4316.67, + 5.83 + ], + [ + 15.312, + 10.92, + 4316.67, + 46.66 + ], + [ + 17.779, + 9.34, + 4316.67, + 54.87 + ], + [ + 18.86, + 9.01, + 4316.67, + 39.3 + ], + [ + 17.982, + 9.36, + 4316.67, + 74.09 + ], + [ + 15.819, + 8.5, + 4316.67, + 91.12 + ], + [ + 18.878, + 8.71, + 4316.67, + 50.65 + ], + [ + 17.577, + 10.14, + 4316.67, + 21.95 + ], + [ + 15.945, + 12.09, + 4316.67, + 24.39 + ], + [ + 4.529, + 9.36, + 4316.67, + 39.3 + ], + [ + 8.24, + 7.43, + 4316.67, + 9.26 + ], + [ + 11.391, + 6.96, + 4712.9, + 13.82 + ], + [ + 13.257, + 6.99, + 4712.9, + 12.17 + ], + [ + 14.998, + 8.69, + 4712.9, + 97.34 + ], + [ + 5.86, + 9.52, + 4712.9, + 389.02 + ], + [ + 13.067, + 8.42, + 4712.9, + 54.87 + ], + [ + 12.078, + 7.55, + 4712.9, + 21.95 + ], + [ + 14.887, + 7.77, + 4712.9, + 21.95 + ], + [ + 6.353, + 10.65, + 4712.9, + 175.62 + ], + [ + 12.653, + 15.9, + 4712.9, + 205.38 + ], + [ + 11.3, + 16.64, + 4712.9, + 125 + ], + [ + 8.679, + 14.61, + 4712.9, + 6.86 + ], + [ + 13.005, + 12.81, + 4712.9, + 12.17 + ], + [ + 11.173, + 11.78, + 4712.9, + 15.62 + ], + [ + 10.723, + 11.65, + 4712.9, + 13.82 + ], + [ + 6.17, + 11.01, + 4712.9, + 35.94 + ], + [ + 12, + 11.13, + 4712.9, + 35.94 + ], + [ + 7.821, + 11.05, + 4712.9, + 85.18 + ], + [ + 13.932, + 11.51, + 4712.9, + 27 + ], + [ + 10.391, + 10.88, + 4712.9, + 17.58 + ], + [ + 12.928, + 11.38, + 4712.9, + 85.18 + ], + [ + 11.481, + 12.38, + 4712.9, + 328.51 + ], + [ + 4.348, + 11.2, + 4712.9, + 195.11 + ], + [ + 13.775, + 11.56, + 4712.9, + 125 + ], + [ + 8.087, + 10.92, + 4712.9, + 117.65 + ], + [ + 7.623, + 10.35, + 4712.9, + 64 + ], + [ + 11.307, + 10.77, + 4712.9, + 35.94 + ], + [ + 5.679, + 11.38, + 4712.9, + 39.3 + ], + [ + 16.522, + 12.37, + 4712.9, + 12.17 + ], + [ + 17.938, + 14.58, + 4712.9, + 29.79 + ], + [ + 19.6, + 15.78, + 4712.9, + 29.79 + ], + [ + 18.676, + 17.31, + 4712.9, + 19.68 + ], + [ + 19.882, + 18.51, + 5206.67, + 21.95 + ], + [ + 19.384, + 20.08, + 5206.67, + 13.82 + ], + [ + 0.233, + 20.72, + 5206.67, + 19.68 + ], + [ + 12.601, + 19.76, + 5206.67, + 8 + ], + [ + 3.941, + 16.19, + 5206.67, + 19.68 + ], + [ + 19.415, + 15.88, + 5206.67, + 12.17 + ], + [ + 19.779, + 16.91, + 5206.67, + 13.82 + ], + [ + 14.922, + 18.58, + 5206.67, + 4.1 + ], + [ + 16.949, + 19.23, + 5206.67, + 5.83 + ], + [ + 19.119, + 19.82, + 5206.67, + 10.65 + ], + [ + 18.627, + 19.91, + 5206.67, + 13.82 + ], + [ + 11.461, + 18.36, + 5206.67, + 35.94 + ], + [ + 19.592, + 17.68, + 5206.67, + 5.83 + ], + [ + 19.387, + 19.88, + 5206.67, + 13.82 + ], + [ + 15.95, + 20.8, + 5206.67, + 21.95 + ], + [ + 18.692, + 22.61, + 5206.67, + 8 + ], + [ + 14.741, + 24.06, + 5206.67, + 46.66 + ], + [ + 15.524, + 24.14, + 5206.67, + 85.18 + ], + [ + 6.214, + 20.99, + 5206.67, + 27 + ], + [ + 13.365, + 20.06, + 5206.67, + 27 + ], + [ + 3.943, + 17.49, + 5206.67, + 39.3 + ], + [ + 4.796, + 14.84, + 5206.67, + 64 + ], + [ + 7.661, + 13.96, + 5206.67, + 21.95 + ], + [ + 8.117, + 15.05, + 5206.67, + 13.82 + ], + [ + 7.841, + 15.28, + 5206.67, + 17.58 + ], + [ + 10.987, + 17.25, + 5206.67, + 3.38 + ], + [ + 9.203, + 18.95, + 5206.67, + 13.82 + ], + [ + 8.973, + 19.43, + 5206.67, + 5.83 + ], + [ + 10.515, + 18.48, + 5206.67, + 17.58 + ], + [ + 2.625, + 15.32, + 5206.67, + 24.39 + ], + [ + 5.075, + 14.26, + 4416.13, + 15.62 + ], + [ + 11.833, + 16.37, + 4416.13, + 6.86 + ], + [ + 6.917, + 17.73, + 4416.13, + 15.62 + ], + [ + 9.081, + 17.52, + 4416.13, + 4.91 + ], + [ + 8.687, + 17.21, + 4416.13, + 24.39 + ], + [ + 10.78, + 17.22, + 4416.13, + 166.38 + ], + [ + 14.771, + 17.64, + 4416.13, + 29.79 + ], + [ + 11.934, + 18.02, + 4416.13, + 4.1 + ], + [ + 12.367, + 17.57, + 4416.13, + 8 + ], + [ + 7.516, + 17.18, + 4416.13, + 3.38 + ], + [ + 14.63, + 16.9, + 4416.13, + 4.91 + ], + [ + 8.459, + 18.14, + 4416.13, + 4.91 + ], + [ + 3.909, + 17.64, + 4416.13, + 29.79 + ], + [ + 1.852, + 16.57, + 4416.13, + 110.59 + ], + [ + 0.998, + 16.02, + 4416.13, + 79.51 + ], + [ + 7.21, + 16.08, + 4416.13, + 27 + ], + [ + 17.438, + 18.21, + 4416.13, + 32.77 + ], + [ + 18.423, + 20.28, + 4416.13, + 29.79 + ], + [ + 17.635, + 20.29, + 4416.13, + 10.65 + ], + [ + 17.707, + 19.86, + 4416.13, + 9.26 + ], + [ + 18.308, + 19.87, + 4416.13, + 8 + ], + [ + 17.164, + 20.02, + 4416.13, + 13.82 + ], + [ + 18.673, + 19.73, + 4416.13, + 32.77 + ], + [ + 4.226, + 19.2, + 4416.13, + 19.68 + ], + [ + 12.032, + 18.96, + 4416.13, + 15.62 + ], + [ + 8.156, + 18.42, + 4416.13, + 32.77 + ], + [ + 8.638, + 18.12, + 4416.13, + 39.3 + ], + [ + 11.336, + 17.95, + 4416.13, + 85.18 + ], + [ + 14.571, + 17.55, + 4416.13, + 64 + ], + [ + 10.709, + 17.54, + 4416.13, + 110.59 + ], + [ + 11.947, + 16.67, + 4416.13, + 39.3 + ], + [ + 6.173, + 15.65, + 3790.32, + 8 + ], + [ + 8.968, + 15.56, + 3790.32, + 4.1 + ], + [ + 12.084, + 15.94, + 3790.32, + 4.1 + ], + [ + 10.696, + 16.69, + 3790.32, + 4.1 + ], + [ + 12.848, + 18.21, + 3790.32, + 15.62 + ], + [ + 10.534, + 17.88, + 3790.32, + 74.09 + ], + [ + 12.856, + 17.03, + 3790.32, + 85.18 + ], + [ + 10.948, + 16.05, + 3790.32, + 117.65 + ], + [ + 9.849, + 15.99, + 3790.32, + 50.65 + ], + [ + 7.875, + 16.47, + 3790.32, + 13.82 + ], + [ + 16.017, + 17.03, + 3790.32, + 8 + ], + [ + 12.19, + 18.75, + 3790.32, + 3.38 + ], + [ + 11.637, + 19.13, + 3790.32, + 15.62 + ], + [ + 14.761, + 18.75, + 3790.32, + 9.26 + ], + [ + 14.892, + 19.43, + 3790.32, + 21.95 + ], + [ + 5.65, + 16.6, + 3790.32, + 39.3 + ], + [ + 3.462, + 14.42, + 3790.32, + 17.58 + ], + [ + 4.148, + 15.44, + 3790.32, + 19.68 + ], + [ + 6.134, + 16.4, + 3790.32, + 21.95 + ], + [ + 6.86, + 17.74, + 3790.32, + 12.17 + ], + [ + 11.957, + 18.72, + 3790.32, + 9.26 + ], + [ + 6.425, + 17.74, + 3790.32, + 35.94 + ], + [ + 2.67, + 17.49, + 3790.32, + 35.94 + ], + [ + 0, + 17.2, + 3790.32, + 50.65 + ], + [ + 0, + 16.96, + 3790.32, + 35.94 + ], + [ + 0, + 16.17, + 3790.32, + 39.3 + ], + [ + 0, + 15.51, + 3790.32, + 39.3 + ], + [ + 0, + 16.03, + 3790.32, + 39.3 + ], + [ + 0, + 15.65, + 3790.32, + 39.3 + ], + [ + 0, + 16.56, + 3790.32, + 54.87 + ], + [ + 0, + 16.95, + 3790.32, + 42.88 + ], + [ + 0, + 16.63, + 3480, + 13.82 + ], + [ + 12.591, + 16.86, + 3480, + 24.39 + ], + [ + 15.797, + 17.98, + 3480, + 24.39 + ], + [ + 7.974, + 17.64, + 3480, + 21.95 + ], + [ + 15.584, + 18.61, + 3480, + 8 + ], + [ + 13.86, + 19.03, + 3480, + 4.91 + ], + [ + 16.132, + 19.99, + 3480, + 10.65 + ], + [ + 17.074, + 20.49, + 3480, + 15.62 + ], + [ + 13.371, + 20.68, + 3480, + 39.3 + ], + [ + 6.374, + 19.5, + 3480, + 21.95 + ], + [ + 5.126, + 17.88, + 3480, + 17.58 + ], + [ + 9.232, + 16.69, + 3480, + 10.65 + ], + [ + 13.953, + 16.46, + 3480, + 15.62 + ], + [ + 7.901, + 17.37, + 3480, + 21.95 + ], + [ + 4.598, + 17.49, + 3480, + 13.82 + ], + [ + 10.663, + 16.38, + 3480, + 5.83 + ], + [ + 14.849, + 16.08, + 3480, + 4.91 + ], + [ + 13.948, + 16.83, + 3480, + 12.17 + ], + [ + 11.153, + 16.67, + 3480, + 4.91 + ], + [ + 12.411, + 15.54, + 3480, + 19.68 + ], + [ + 14.304, + 13.88, + 3480, + 10.65 + ], + [ + 13.469, + 13.6, + 3480, + 2.74 + ], + [ + 11.021, + 14.41, + 3480, + 19.68 + ], + [ + 7.983, + 15.89, + 3480, + 24.39 + ], + [ + 11.76, + 16.47, + 3480, + 6.86 + ], + [ + 7.841, + 17.27, + 3480, + 32.77 + ], + [ + 3.586, + 16.21, + 3480, + 79.51 + ], + [ + 12.913, + 14.49, + 3480, + 46.66 + ], + [ + 7.499, + 12.79, + 3480, + 68.92 + ], + [ + 5.514, + 11.55, + 3480, + 54.87 + ], + [ + 4.238, + 12.54, + 1806.45, + 166.38 + ], + [ + 3.929, + 13.7, + 1806.45, + 226.98 + ], + [ + 1.879, + 13.25, + 1806.45, + 64 + ], + [ + 9.631, + 13.28, + 1806.45, + 148.88 + ], + [ + 4.098, + 12.73, + 1806.45, + 175.62 + ], + [ + 2.991, + 11.6, + 1806.45, + 59.32 + ], + [ + 6.885, + 11.41, + 1806.45, + 2.2 + ], + [ + 9.178, + 11.62, + 1806.45, + 12.17 + ], + [ + 10.019, + 11.59, + 1806.45, + 8 + ], + [ + 7.863, + 11.17, + 1806.45, + 4.91 + ], + [ + 4.766, + 11.14, + 1806.45, + 9.26 + ], + [ + 3.537, + 10.45, + 1806.45, + 17.58 + ], + [ + 4.669, + 9.52, + 1806.45, + 4.1 + ], + [ + 4.118, + 10.18, + 1806.45, + 17.58 + ], + [ + 3.939, + 10.44, + 1806.45, + 13.82 + ], + [ + 7.577, + 9.39, + 1806.45, + 5.83 + ], + [ + 5.708, + 9.81, + 1806.45, + 9.26 + ], + [ + 6.164, + 11.27, + 1806.45, + 85.18 + ], + [ + 2.164, + 14.71, + 1806.45, + 140.61 + ], + [ + 2.034, + 15.89, + 1806.45, + 262.14 + ], + [ + 4.537, + 11.84, + 1806.45, + 140.61 + ], + [ + 4.459, + 9.14, + 1806.45, + 29.79 + ], + [ + 5.794, + 8.78, + 1806.45, + 10.65 + ], + [ + 5.162, + 8.94, + 1806.45, + 74.09 + ], + [ + 3.371, + 9.97, + 1806.45, + 50.65 + ], + [ + 4.856, + 11.1, + 1806.45, + 54.87 + ], + [ + 4.689, + 12.25, + 1806.45, + 64 + ], + [ + 4.195, + 12.39, + 1806.45, + 166.38 + ], + [ + 3.681, + 12.77, + 1806.45, + 226.98 + ], + [ + 1.062, + 12.39, + 1806.45, + 110.59 + ], + [ + 3.01, + 12.01, + 1806.45, + 157.46 + ], + [ + 3.859, + 10.39, + 796.67, + 117.65 + ], + [ + 2.21, + 8.14, + 796.67, + 21.95 + ], + [ + 3.786, + 6.85, + 796.67, + 6.86 + ], + [ + 2.545, + 6.27, + 796.67, + 10.65 + ], + [ + 2.477, + 6.91, + 796.67, + 9.26 + ], + [ + 2.096, + 7.33, + 796.67, + 85.18 + ], + [ + 2.819, + 8.63, + 796.67, + 59.32 + ], + [ + 3.879, + 7.53, + 796.67, + 4.91 + ], + [ + 3.377, + 6.82, + 796.67, + 9.26 + ], + [ + 2.788, + 5.73, + 796.67, + 4.91 + ], + [ + 2.218, + 5.87, + 796.67, + 4.1 + ], + [ + 3.979, + 6.55, + 796.67, + 50.65 + ], + [ + 1.592, + 8.95, + 796.67, + 29.79 + ], + [ + 1.267, + 9.22, + 796.67, + 21.95 + ], + [ + 0.167, + 7.4, + 796.67, + 19.68 + ], + [ + 0.271, + 5.79, + 796.67, + 2.74 + ], + [ + 1.645, + 6.1, + 796.67, + 12.17 + ], + [ + 3.011, + 7.05, + 796.67, + 29.79 + ], + [ + 0.927, + 9.12, + 796.67, + 10.65 + ], + [ + 0.43, + 8.95, + 796.67, + 13.82 + ], + [ + 1.209, + 7.72, + 796.67, + 17.58 + ], + [ + 1.568, + 5.62, + 796.67, + 50.65 + ], + [ + 1.567, + 4.44, + 796.67, + 1 + ], + [ + 0.747, + 5.25, + 796.67, + 2.2 + ], + [ + 0.964, + 4.6, + 796.67, + 3.38 + ], + [ + 0.615, + 4.02, + 796.67, + 79.51 + ], + [ + 2.529, + 2.77, + 796.67, + 15.62 + ], + [ + 1.384, + 2.68, + 796.67, + 17.58 + ], + [ + 2.386, + 2.49, + 796.67, + 27 + ], + [ + 0.296, + 5.44, + 796.67, + 140.61 + ], + [ + 0.964, + 6.84, + 435.48, + 175.62 + ], + [ + 1.167, + 4.07, + 435.48, + 17.58 + ], + [ + 1.045, + 2.92, + 435.48, + 103.82 + ], + [ + 0.429, + 3.64, + 435.48, + 32.77 + ], + [ + 1.205, + 3.75, + 435.48, + 19.68 + ], + [ + 1.274, + 3.02, + 435.48, + 39.3 + ], + [ + 2.041, + 3.57, + 435.48, + 166.38 + ], + [ + 2.256, + 4.48, + 435.48, + 148.88 + ], + [ + 0.888, + 4.01, + 435.48, + 85.18 + ], + [ + 0.302, + 2.57, + 435.48, + 64 + ], + [ + 2.226, + 3.44, + 435.48, + 21.95 + ], + [ + 0.297, + 6.32, + 435.48, + 79.51 + ], + [ + 0.391, + 8.02, + 435.48, + 29.79 + ], + [ + 0.71, + 7.89, + 435.48, + 21.95 + ], + [ + 0.537, + 8.15, + 435.48, + 17.58 + ], + [ + 1.747, + 7.83, + 435.48, + 1.33 + ], + [ + 0.338, + 6.6, + 435.48, + 15.62 + ], + [ + 0.314, + 6.04, + 435.48, + 17.58 + ], + [ + 0.256, + 5.71, + 435.48, + 9.26 + ], + [ + 0.759, + 5.27, + 435.48, + 9.26 + ], + [ + 1.256, + 1.82, + 435.48, + 8 + ], + [ + 2.673, + -0.1, + 435.48, + 13.82 + ], + [ + 1.07, + 1.64, + 435.48, + 85.18 + ], + [ + 0.561, + 5.44, + 435.48, + 24.39 + ], + [ + 0.392, + 4.46, + 435.48, + 29.79 + ], + [ + 1.533, + 4.27, + 435.48, + 19.68 + ], + [ + 0.742, + 6.76, + 435.48, + 79.51 + ], + [ + 0.753, + 8.71, + 435.48, + 205.38 + ], + [ + 0.38, + 9.83, + 435.48, + 68.92 + ], + [ + 1.224, + 12.11, + 435.48, + 157.46 + ], + [ + 1.102, + 12.63, + 435.48, + 85.18 + ] + ] + } +} diff --git a/demo_mvlr.ipynb b/demo_mvlr.ipynb new file mode 100644 index 0000000..0b26460 --- /dev/null +++ b/demo_mvlr.ipynb @@ -0,0 +1,923 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Introduction\n", + "\n", + "This notebook is a demonstration of the *Multivariable Linear Regression*\n", + "\n", + "The *Multivariable Linear Regression* package (short: `mvlr`) can be found in the `openergyid.mvlr` module." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 1: Importing the libraries" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "from openenergyid.mvlr import MultiVariableRegressionInput, find_best_mvlr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 2: Loading Input Data\n", + "\n", + "In the `data` folder, a few json samples are stored.\n", + "\n", + "The input model is described by the `MultivariableRegressionInput` class. You can find the class definition in the `openergyid.mvlr` module, or you can use `MultiVariableRegressionInput.model_json_schema()` to get the json schema of the input model.\n", + "\n", + "By using the `MultiVariableRegressionInput.model_validate_json()` method, you can load the input model from a json file with automatic validation. Regular constructors are also available." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "with open('data/mvlr/sample_solar.json', 'r') as f:\n", + " input_data = MultiVariableRegressionInput.model_validate_json(f.read())" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'timezone': 'Europe/Brussels',\n", + " 'independent_variables': [{'name': 'temperatureEquivalent',\n", + " 'variants': ['HDD_16.5', 'CDD_24', 'HDD_15', 'FDD_0']},\n", + " {'name': 'solarRadiation', 'variants': []},\n", + " {'name': 'windPower', 'variants': []}],\n", + " 'dependent_variable': 'energyProduction/solarPhotovoltaic',\n", + " 'frame': {'columns': ['energyProduction/solarPhotovoltaic',\n", + " 'temperatureEquivalent',\n", + " 'solarRadiation',\n", + " 'windPower'],\n", + " 'index': [datetime.datetime(2021, 1, 1, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 2, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 3, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 4, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 5, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 6, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 7, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 8, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 9, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 10, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 11, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 12, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 13, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 14, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 15, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 16, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 17, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 18, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 19, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 20, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 21, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 22, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 23, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 24, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 25, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 26, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 27, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 28, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 29, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 30, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 1, 31, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 1, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 2, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 3, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 4, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 5, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 6, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 7, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 8, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 9, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 10, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 11, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 12, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 13, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 14, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 15, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 16, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 17, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 18, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 19, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 20, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 21, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 22, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 23, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 24, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 25, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 26, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 27, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 2, 28, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 1, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 2, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 3, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 4, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 5, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 6, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 7, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 8, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 9, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 10, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 11, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 12, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 13, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 14, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 15, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 16, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 17, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 18, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 19, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 20, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 21, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 22, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 23, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 24, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 25, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 26, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 27, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 28, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 3, 29, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 3, 30, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 3, 31, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 1, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 2, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 3, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 4, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 5, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 6, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 7, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 8, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 9, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 10, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 11, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 12, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 13, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 14, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 15, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 16, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 17, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 18, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 19, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 20, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 21, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 22, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 23, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 24, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 25, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 26, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 27, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 28, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 29, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 4, 30, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 1, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 2, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 3, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 4, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 5, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 6, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 7, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 8, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 9, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 10, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 11, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 12, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 13, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 14, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 15, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 16, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 17, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 18, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 19, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 20, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 21, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 22, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 23, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 24, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 25, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 26, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 27, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 28, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 29, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 30, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 5, 31, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 1, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 2, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 3, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 4, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 5, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 6, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 7, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 8, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 9, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 10, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 11, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 12, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 13, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 14, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 15, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 16, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 17, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 18, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 19, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 20, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 21, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 22, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 23, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 24, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 25, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 26, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 27, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 28, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 29, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 6, 30, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 1, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 2, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 3, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 4, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 5, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 6, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 7, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 8, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 9, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 10, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 11, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 12, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 13, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 14, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 15, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 16, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 17, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 18, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 19, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 20, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 21, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 22, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 23, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 24, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 25, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 26, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 27, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 28, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 29, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 30, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 7, 31, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 1, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 2, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 3, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 4, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 5, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 6, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 7, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 8, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 9, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 10, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 11, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 12, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 13, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 14, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 15, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 16, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 17, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 18, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 19, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 20, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 21, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 22, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 23, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 24, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 25, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 26, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 27, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 28, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 29, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 30, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 8, 31, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 1, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 2, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 3, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 4, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 5, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 6, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 7, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 8, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 9, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 10, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 11, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 12, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 13, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 14, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 15, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 16, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 17, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 18, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 19, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 20, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 21, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 22, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 23, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 24, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 25, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 26, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 27, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 28, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 29, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 9, 30, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 1, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 2, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 3, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 4, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 5, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 6, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 7, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 8, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 9, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 10, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 11, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 12, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 13, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 14, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 15, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 16, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 17, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 18, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 19, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 20, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 21, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 22, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 23, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 24, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 25, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 26, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 27, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 28, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 29, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 30, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 10, 31, 0, 0, tzinfo=TzInfo(+02:00)),\n", + " datetime.datetime(2021, 11, 1, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 2, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 3, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 4, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 5, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 6, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 7, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 8, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 9, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 10, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 11, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 12, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 13, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 14, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 15, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 16, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 17, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 18, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 19, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 20, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 21, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 22, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 23, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 24, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 25, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 26, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 27, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 28, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 29, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 11, 30, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 1, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 2, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 3, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 4, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 5, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 6, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 7, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 8, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 9, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 10, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 11, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 12, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 13, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 14, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 15, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 16, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 17, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 18, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 19, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 20, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 21, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 22, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 23, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 24, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 25, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 26, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 27, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 28, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 29, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 30, 0, 0, tzinfo=TzInfo(+01:00)),\n", + " datetime.datetime(2021, 12, 31, 0, 0, tzinfo=TzInfo(+01:00))],\n", + " 'data': [[3.982, 1.95, 583.87, 5.83],\n", + " [1.188, 2.02, 583.87, 6.86],\n", + " [0.528, 2.43, 583.87, 24.39],\n", + " [0.316, 2.17, 583.87, 50.65],\n", + " [0.241, 2.04, 583.87, 42.88],\n", + " [0.826, 2.17, 583.87, 19.68],\n", + " [1.887, 1.85, 583.87, 24.39],\n", + " [1.133, 1.55, 583.87, 15.62],\n", + " [3.164, -0.26, 583.87, 0.73],\n", + " [0.0, -0.46, 583.87, 2.74],\n", + " [0.0, 1.81, 583.87, 140.61],\n", + " [0.0, 4.11, 583.87, 74.09],\n", + " [0.0, 3.34, 583.87, 13.82],\n", + " [0.0, 2.02, 583.87, 32.77],\n", + " [0.0, 0.99, 583.87, 17.58],\n", + " [0.0, 0.25, 583.87, 46.66],\n", + " [0.0, 2.19, 583.87, 17.58],\n", + " [0.0, 3.47, 583.87, 64.0],\n", + " [0.0, 5.1, 583.87, 405.22],\n", + " [0.0, 7.33, 583.87, 438.98],\n", + " [0.698, 7.61, 583.87, 438.98],\n", + " [3.993, 5.48, 583.87, 29.79],\n", + " [0.586, 3.86, 583.87, 46.66],\n", + " [3.476, 2.02, 583.87, 42.88],\n", + " [3.802, 1.97, 583.87, 19.68],\n", + " [4.398, 2.39, 583.87, 59.32],\n", + " [0.403, 3.07, 583.87, 50.65],\n", + " [0.718, 6.51, 583.87, 79.51],\n", + " [2.941, 8.29, 583.87, 125.0],\n", + " [1.049, 5.16, 583.87, 85.18],\n", + " [4.999, 2.18, 583.87, 50.65],\n", + " [0.758, 2.73, 1775.0, 10.65],\n", + " [1.133, 6.11, 1775.0, 97.34],\n", + " [0.859, 8.47, 1775.0, 103.82],\n", + " [4.355, 8.2, 1775.0, 39.3],\n", + " [4.539, 7.96, 1775.0, 19.68],\n", + " [1.581, 6.25, 1775.0, 50.65],\n", + " [0.0, 1.15, 1775.0, 46.66],\n", + " [0.0, -3.32, 1775.0, 64.0],\n", + " [0.0, -5.36, 1775.0, 74.09],\n", + " [0.0, -5.43, 1775.0, 64.0],\n", + " [0.0, -4.61, 1775.0, 32.77],\n", + " [0.015, -4.63, 1775.0, 97.34],\n", + " [0.018, -3.95, 1775.0, 97.34],\n", + " [0.04, -1.35, 1775.0, 157.46],\n", + " [0.828, 2.38, 1775.0, 157.46],\n", + " [6.109, 6.75, 1775.0, 125.0],\n", + " [5.287, 8.84, 1775.0, 132.65],\n", + " [3.371, 8.49, 1775.0, 238.33],\n", + " [7.054, 7.88, 1775.0, 110.59],\n", + " [9.622, 10.81, 1775.0, 343.0],\n", + " [10.322, 12.25, 1775.0, 125.0],\n", + " [5.864, 13.2, 1775.0, 97.34],\n", + " [9.279, 14.14, 1775.0, 175.62],\n", + " [10.757, 14.52, 1775.0, 132.65],\n", + " [5.821, 13.29, 1775.0, 27.0],\n", + " [8.869, 9.68, 1775.0, 27.0],\n", + " [3.32, 5.71, 1775.0, 12.17],\n", + " [9.023, 5.58, 1775.0, 50.65],\n", + " [7.415, 5.71, 2874.19, 35.94],\n", + " [9.457, 7.88, 2874.19, 12.17],\n", + " [8.527, 9.94, 2874.19, 8.0],\n", + " [0.385, 7.52, 2874.19, 17.58],\n", + " [10.775, 4.55, 2874.19, 54.87],\n", + " [11.43, 2.89, 2874.19, 27.0],\n", + " [10.235, 2.46, 2874.19, 24.39],\n", + " [10.598, 3.78, 2874.19, 4.1],\n", + " [1.597, 4.89, 2874.19, 13.82],\n", + " [4.373, 6.05, 2874.19, 185.19],\n", + " [6.888, 8.28, 2874.19, 571.79],\n", + " [3.479, 7.68, 2874.19, 328.51],\n", + " [6.811, 7.29, 2874.19, 357.91],\n", + " [7.032, 6.3, 2874.19, 59.32],\n", + " [4.97, 6.23, 2874.19, 110.59],\n", + " [2.533, 5.65, 2874.19, 13.82],\n", + " [4.519, 5.52, 2874.19, 64.0],\n", + " [3.259, 5.12, 2874.19, 17.58],\n", + " [14.839, 5.08, 2874.19, 91.12],\n", + " [15.496, 5.02, 2874.19, 21.95],\n", + " [4.528, 5.67, 2874.19, 64.0],\n", + " [3.804, 5.93, 2874.19, 12.17],\n", + " [13.591, 7.21, 2874.19, 21.95],\n", + " [15.311, 8.82, 2874.19, 27.0],\n", + " [4.958, 8.93, 2874.19, 19.68],\n", + " [7.954, 8.92, 2874.19, 140.61],\n", + " [9.586, 7.74, 2874.19, 110.59],\n", + " [10.822, 9.23, 2874.19, 132.65],\n", + " [16.768, 12.1, 2874.19, 68.92],\n", + " [16.417, 14.6, 2874.19, 12.17],\n", + " [16.023, 16.23, 2874.19, 6.86],\n", + " [14.546, 15.04, 4316.67, 35.94],\n", + " [12.786, 9.79, 4316.67, 97.34],\n", + " [9.26, 7.61, 4316.67, 79.51],\n", + " [4.949, 6.32, 4316.67, 12.17],\n", + " [7.953, 4.46, 4316.67, 132.65],\n", + " [5.199, 2.06, 4316.67, 59.32],\n", + " [3.337, 1.83, 4316.67, 68.92],\n", + " [11.566, 3.71, 4316.67, 27.0],\n", + " [12.213, 7.05, 4316.67, 24.39],\n", + " [2.012, 7.37, 4316.67, 15.62],\n", + " [7.027, 5.51, 4316.67, 74.09],\n", + " [12.185, 3.76, 4316.67, 12.17],\n", + " [13.994, 3.9, 4316.67, 6.86],\n", + " [9.301, 4.83, 4316.67, 15.62],\n", + " [8.998, 5.17, 4316.67, 19.68],\n", + " [13.642, 6.12, 4316.67, 42.88],\n", + " [17.361, 7.21, 4316.67, 54.87],\n", + " [17.893, 8.23, 4316.67, 15.62],\n", + " [10.701, 8.43, 4316.67, 8.0],\n", + " [14.958, 10.11, 4316.67, 5.83],\n", + " [15.312, 10.92, 4316.67, 46.66],\n", + " [17.779, 9.34, 4316.67, 54.87],\n", + " [18.86, 9.01, 4316.67, 39.3],\n", + " [17.982, 9.36, 4316.67, 74.09],\n", + " [15.819, 8.5, 4316.67, 91.12],\n", + " [18.878, 8.71, 4316.67, 50.65],\n", + " [17.577, 10.14, 4316.67, 21.95],\n", + " [15.945, 12.09, 4316.67, 24.39],\n", + " [4.529, 9.36, 4316.67, 39.3],\n", + " [8.24, 7.43, 4316.67, 9.26],\n", + " [11.391, 6.96, 4712.9, 13.82],\n", + " [13.257, 6.99, 4712.9, 12.17],\n", + " [14.998, 8.69, 4712.9, 97.34],\n", + " [5.86, 9.52, 4712.9, 389.02],\n", + " [13.067, 8.42, 4712.9, 54.87],\n", + " [12.078, 7.55, 4712.9, 21.95],\n", + " [14.887, 7.77, 4712.9, 21.95],\n", + " [6.353, 10.65, 4712.9, 175.62],\n", + " [12.653, 15.9, 4712.9, 205.38],\n", + " [11.3, 16.64, 4712.9, 125.0],\n", + " [8.679, 14.61, 4712.9, 6.86],\n", + " [13.005, 12.81, 4712.9, 12.17],\n", + " [11.173, 11.78, 4712.9, 15.62],\n", + " [10.723, 11.65, 4712.9, 13.82],\n", + " [6.17, 11.01, 4712.9, 35.94],\n", + " [12.0, 11.13, 4712.9, 35.94],\n", + " [7.821, 11.05, 4712.9, 85.18],\n", + " [13.932, 11.51, 4712.9, 27.0],\n", + " [10.391, 10.88, 4712.9, 17.58],\n", + " [12.928, 11.38, 4712.9, 85.18],\n", + " [11.481, 12.38, 4712.9, 328.51],\n", + " [4.348, 11.2, 4712.9, 195.11],\n", + " [13.775, 11.56, 4712.9, 125.0],\n", + " [8.087, 10.92, 4712.9, 117.65],\n", + " [7.623, 10.35, 4712.9, 64.0],\n", + " [11.307, 10.77, 4712.9, 35.94],\n", + " [5.679, 11.38, 4712.9, 39.3],\n", + " [16.522, 12.37, 4712.9, 12.17],\n", + " [17.938, 14.58, 4712.9, 29.79],\n", + " [19.6, 15.78, 4712.9, 29.79],\n", + " [18.676, 17.31, 4712.9, 19.68],\n", + " [19.882, 18.51, 5206.67, 21.95],\n", + " [19.384, 20.08, 5206.67, 13.82],\n", + " [0.233, 20.72, 5206.67, 19.68],\n", + " [12.601, 19.76, 5206.67, 8.0],\n", + " [3.941, 16.19, 5206.67, 19.68],\n", + " [19.415, 15.88, 5206.67, 12.17],\n", + " [19.779, 16.91, 5206.67, 13.82],\n", + " [14.922, 18.58, 5206.67, 4.1],\n", + " [16.949, 19.23, 5206.67, 5.83],\n", + " [19.119, 19.82, 5206.67, 10.65],\n", + " [18.627, 19.91, 5206.67, 13.82],\n", + " [11.461, 18.36, 5206.67, 35.94],\n", + " [19.592, 17.68, 5206.67, 5.83],\n", + " [19.387, 19.88, 5206.67, 13.82],\n", + " [15.95, 20.8, 5206.67, 21.95],\n", + " [18.692, 22.61, 5206.67, 8.0],\n", + " [14.741, 24.06, 5206.67, 46.66],\n", + " [15.524, 24.14, 5206.67, 85.18],\n", + " [6.214, 20.99, 5206.67, 27.0],\n", + " [13.365, 20.06, 5206.67, 27.0],\n", + " [3.943, 17.49, 5206.67, 39.3],\n", + " [4.796, 14.84, 5206.67, 64.0],\n", + " [7.661, 13.96, 5206.67, 21.95],\n", + " [8.117, 15.05, 5206.67, 13.82],\n", + " [7.841, 15.28, 5206.67, 17.58],\n", + " [10.987, 17.25, 5206.67, 3.38],\n", + " [9.203, 18.95, 5206.67, 13.82],\n", + " [8.973, 19.43, 5206.67, 5.83],\n", + " [10.515, 18.48, 5206.67, 17.58],\n", + " [2.625, 15.32, 5206.67, 24.39],\n", + " [5.075, 14.26, 4416.13, 15.62],\n", + " [11.833, 16.37, 4416.13, 6.86],\n", + " [6.917, 17.73, 4416.13, 15.62],\n", + " [9.081, 17.52, 4416.13, 4.91],\n", + " [8.687, 17.21, 4416.13, 24.39],\n", + " [10.78, 17.22, 4416.13, 166.38],\n", + " [14.771, 17.64, 4416.13, 29.79],\n", + " [11.934, 18.02, 4416.13, 4.1],\n", + " [12.367, 17.57, 4416.13, 8.0],\n", + " [7.516, 17.18, 4416.13, 3.38],\n", + " [14.63, 16.9, 4416.13, 4.91],\n", + " [8.459, 18.14, 4416.13, 4.91],\n", + " [3.909, 17.64, 4416.13, 29.79],\n", + " [1.852, 16.57, 4416.13, 110.59],\n", + " [0.998, 16.02, 4416.13, 79.51],\n", + " [7.21, 16.08, 4416.13, 27.0],\n", + " [17.438, 18.21, 4416.13, 32.77],\n", + " [18.423, 20.28, 4416.13, 29.79],\n", + " [17.635, 20.29, 4416.13, 10.65],\n", + " [17.707, 19.86, 4416.13, 9.26],\n", + " [18.308, 19.87, 4416.13, 8.0],\n", + " [17.164, 20.02, 4416.13, 13.82],\n", + " [18.673, 19.73, 4416.13, 32.77],\n", + " [4.226, 19.2, 4416.13, 19.68],\n", + " [12.032, 18.96, 4416.13, 15.62],\n", + " [8.156, 18.42, 4416.13, 32.77],\n", + " [8.638, 18.12, 4416.13, 39.3],\n", + " [11.336, 17.95, 4416.13, 85.18],\n", + " [14.571, 17.55, 4416.13, 64.0],\n", + " [10.709, 17.54, 4416.13, 110.59],\n", + " [11.947, 16.67, 4416.13, 39.3],\n", + " [6.173, 15.65, 3790.32, 8.0],\n", + " [8.968, 15.56, 3790.32, 4.1],\n", + " [12.084, 15.94, 3790.32, 4.1],\n", + " [10.696, 16.69, 3790.32, 4.1],\n", + " [12.848, 18.21, 3790.32, 15.62],\n", + " [10.534, 17.88, 3790.32, 74.09],\n", + " [12.856, 17.03, 3790.32, 85.18],\n", + " [10.948, 16.05, 3790.32, 117.65],\n", + " [9.849, 15.99, 3790.32, 50.65],\n", + " [7.875, 16.47, 3790.32, 13.82],\n", + " [16.017, 17.03, 3790.32, 8.0],\n", + " [12.19, 18.75, 3790.32, 3.38],\n", + " [11.637, 19.13, 3790.32, 15.62],\n", + " [14.761, 18.75, 3790.32, 9.26],\n", + " [14.892, 19.43, 3790.32, 21.95],\n", + " [5.65, 16.6, 3790.32, 39.3],\n", + " [3.462, 14.42, 3790.32, 17.58],\n", + " [4.148, 15.44, 3790.32, 19.68],\n", + " [6.134, 16.4, 3790.32, 21.95],\n", + " [6.86, 17.74, 3790.32, 12.17],\n", + " [11.957, 18.72, 3790.32, 9.26],\n", + " [6.425, 17.74, 3790.32, 35.94],\n", + " [2.67, 17.49, 3790.32, 35.94],\n", + " [0.0, 17.2, 3790.32, 50.65],\n", + " [0.0, 16.96, 3790.32, 35.94],\n", + " [0.0, 16.17, 3790.32, 39.3],\n", + " [0.0, 15.51, 3790.32, 39.3],\n", + " [0.0, 16.03, 3790.32, 39.3],\n", + " [0.0, 15.65, 3790.32, 39.3],\n", + " [0.0, 16.56, 3790.32, 54.87],\n", + " [0.0, 16.95, 3790.32, 42.88],\n", + " [0.0, 16.63, 3480.0, 13.82],\n", + " [12.591, 16.86, 3480.0, 24.39],\n", + " [15.797, 17.98, 3480.0, 24.39],\n", + " [7.974, 17.64, 3480.0, 21.95],\n", + " [15.584, 18.61, 3480.0, 8.0],\n", + " [13.86, 19.03, 3480.0, 4.91],\n", + " [16.132, 19.99, 3480.0, 10.65],\n", + " [17.074, 20.49, 3480.0, 15.62],\n", + " [13.371, 20.68, 3480.0, 39.3],\n", + " [6.374, 19.5, 3480.0, 21.95],\n", + " [5.126, 17.88, 3480.0, 17.58],\n", + " [9.232, 16.69, 3480.0, 10.65],\n", + " [13.953, 16.46, 3480.0, 15.62],\n", + " [7.901, 17.37, 3480.0, 21.95],\n", + " [4.598, 17.49, 3480.0, 13.82],\n", + " [10.663, 16.38, 3480.0, 5.83],\n", + " [14.849, 16.08, 3480.0, 4.91],\n", + " [13.948, 16.83, 3480.0, 12.17],\n", + " [11.153, 16.67, 3480.0, 4.91],\n", + " [12.411, 15.54, 3480.0, 19.68],\n", + " [14.304, 13.88, 3480.0, 10.65],\n", + " [13.469, 13.6, 3480.0, 2.74],\n", + " [11.021, 14.41, 3480.0, 19.68],\n", + " [7.983, 15.89, 3480.0, 24.39],\n", + " [11.76, 16.47, 3480.0, 6.86],\n", + " [7.841, 17.27, 3480.0, 32.77],\n", + " [3.586, 16.21, 3480.0, 79.51],\n", + " [12.913, 14.49, 3480.0, 46.66],\n", + " [7.499, 12.79, 3480.0, 68.92],\n", + " [5.514, 11.55, 3480.0, 54.87],\n", + " [4.238, 12.54, 1806.45, 166.38],\n", + " [3.929, 13.7, 1806.45, 226.98],\n", + " [1.879, 13.25, 1806.45, 64.0],\n", + " [9.631, 13.28, 1806.45, 148.88],\n", + " [4.098, 12.73, 1806.45, 175.62],\n", + " [2.991, 11.6, 1806.45, 59.32],\n", + " [6.885, 11.41, 1806.45, 2.2],\n", + " [9.178, 11.62, 1806.45, 12.17],\n", + " [10.019, 11.59, 1806.45, 8.0],\n", + " [7.863, 11.17, 1806.45, 4.91],\n", + " [4.766, 11.14, 1806.45, 9.26],\n", + " [3.537, 10.45, 1806.45, 17.58],\n", + " [4.669, 9.52, 1806.45, 4.1],\n", + " [4.118, 10.18, 1806.45, 17.58],\n", + " [3.939, 10.44, 1806.45, 13.82],\n", + " [7.577, 9.39, 1806.45, 5.83],\n", + " [5.708, 9.81, 1806.45, 9.26],\n", + " [6.164, 11.27, 1806.45, 85.18],\n", + " [2.164, 14.71, 1806.45, 140.61],\n", + " [2.034, 15.89, 1806.45, 262.14],\n", + " [4.537, 11.84, 1806.45, 140.61],\n", + " [4.459, 9.14, 1806.45, 29.79],\n", + " [5.794, 8.78, 1806.45, 10.65],\n", + " [5.162, 8.94, 1806.45, 74.09],\n", + " [3.371, 9.97, 1806.45, 50.65],\n", + " [4.856, 11.1, 1806.45, 54.87],\n", + " [4.689, 12.25, 1806.45, 64.0],\n", + " [4.195, 12.39, 1806.45, 166.38],\n", + " [3.681, 12.77, 1806.45, 226.98],\n", + " [1.062, 12.39, 1806.45, 110.59],\n", + " [3.01, 12.01, 1806.45, 157.46],\n", + " [3.859, 10.39, 796.67, 117.65],\n", + " [2.21, 8.14, 796.67, 21.95],\n", + " [3.786, 6.85, 796.67, 6.86],\n", + " [2.545, 6.27, 796.67, 10.65],\n", + " [2.477, 6.91, 796.67, 9.26],\n", + " [2.096, 7.33, 796.67, 85.18],\n", + " [2.819, 8.63, 796.67, 59.32],\n", + " [3.879, 7.53, 796.67, 4.91],\n", + " [3.377, 6.82, 796.67, 9.26],\n", + " [2.788, 5.73, 796.67, 4.91],\n", + " [2.218, 5.87, 796.67, 4.1],\n", + " [3.979, 6.55, 796.67, 50.65],\n", + " [1.592, 8.95, 796.67, 29.79],\n", + " [1.267, 9.22, 796.67, 21.95],\n", + " [0.167, 7.4, 796.67, 19.68],\n", + " [0.271, 5.79, 796.67, 2.74],\n", + " [1.645, 6.1, 796.67, 12.17],\n", + " [3.011, 7.05, 796.67, 29.79],\n", + " [0.927, 9.12, 796.67, 10.65],\n", + " [0.43, 8.95, 796.67, 13.82],\n", + " [1.209, 7.72, 796.67, 17.58],\n", + " [1.568, 5.62, 796.67, 50.65],\n", + " [1.567, 4.44, 796.67, 1.0],\n", + " [0.747, 5.25, 796.67, 2.2],\n", + " [0.964, 4.6, 796.67, 3.38],\n", + " [0.615, 4.02, 796.67, 79.51],\n", + " [2.529, 2.77, 796.67, 15.62],\n", + " [1.384, 2.68, 796.67, 17.58],\n", + " [2.386, 2.49, 796.67, 27.0],\n", + " [0.296, 5.44, 796.67, 140.61],\n", + " [0.964, 6.84, 435.48, 175.62],\n", + " [1.167, 4.07, 435.48, 17.58],\n", + " [1.045, 2.92, 435.48, 103.82],\n", + " [0.429, 3.64, 435.48, 32.77],\n", + " [1.205, 3.75, 435.48, 19.68],\n", + " [1.274, 3.02, 435.48, 39.3],\n", + " [2.041, 3.57, 435.48, 166.38],\n", + " [2.256, 4.48, 435.48, 148.88],\n", + " [0.888, 4.01, 435.48, 85.18],\n", + " [0.302, 2.57, 435.48, 64.0],\n", + " [2.226, 3.44, 435.48, 21.95],\n", + " [0.297, 6.32, 435.48, 79.51],\n", + " [0.391, 8.02, 435.48, 29.79],\n", + " [0.71, 7.89, 435.48, 21.95],\n", + " [0.537, 8.15, 435.48, 17.58],\n", + " [1.747, 7.83, 435.48, 1.33],\n", + " [0.338, 6.6, 435.48, 15.62],\n", + " [0.314, 6.04, 435.48, 17.58],\n", + " [0.256, 5.71, 435.48, 9.26],\n", + " [0.759, 5.27, 435.48, 9.26],\n", + " [1.256, 1.82, 435.48, 8.0],\n", + " [2.673, -0.1, 435.48, 13.82],\n", + " [1.07, 1.64, 435.48, 85.18],\n", + " [0.561, 5.44, 435.48, 24.39],\n", + " [0.392, 4.46, 435.48, 29.79],\n", + " [1.533, 4.27, 435.48, 19.68],\n", + " [0.742, 6.76, 435.48, 79.51],\n", + " [0.753, 8.71, 435.48, 205.38],\n", + " [0.38, 9.83, 435.48, 68.92],\n", + " [1.224, 12.11, 435.48, 157.46],\n", + " [1.102, 12.63, 435.48, 85.18]]},\n", + " 'granularities': [, ],\n", + " 'allow_negative_predictions': False,\n", + " 'validation_parameters': {'rsquared': 0.75,\n", + " 'f_pvalue': 0.05,\n", + " 'pvalues': 0.05}}" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "input_data.model_dump()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Step 4: Running the model\n", + "\n", + "The `find_best_mvlr` function is the main function of the `mvlr` module. It takes an input model and returns a `MultivariableRegressionOutput` object." + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "result = find_best_mvlr(input_data)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'dependent_variable': 'energyProduction/solarPhotovoltaic',\n", + " 'independent_variables': [{'name': 'solarRadiation',\n", + " 'coef': 0.0024924735991862625,\n", + " 't_stat': 12.250914745542833,\n", + " 'p_value': 2.404202661661546e-07,\n", + " 'std_err': 0.0002034520401909647,\n", + " 'confidence_interval': {'confidence': 0.95,\n", + " 'lower': 0.0020391542039252418,\n", + " 'upper': 0.0029457929944472832}}],\n", + " 'r2': 0.9375331511967008,\n", + " 'r2_adj': 0.9312864663163709,\n", + " 'f_stat': 150.08491210255892,\n", + " 'prob_f_stat': 2.40420266166154e-07,\n", + " 'intercept': {'name': 'Intercept',\n", + " 'coef': 2.733302450232918,\n", + " 't_stat': 0.13401884485997137,\n", + " 'p_value': 0.8960465198298829,\n", + " 'std_err': 20.39491127601338,\n", + " 'confidence_interval': {'confidence': 0.95,\n", + " 'lower': -42.70939174623032,\n", + " 'upper': 48.175996646696156}},\n", + " 'granularity': ,\n", + " 'frame': {'columns': ['energyProduction/solarPhotovoltaic', 'solarRadiation'],\n", + " 'index': [Timestamp('2021-01-01 00:00:00+0100', tz='Europe/Brussels'),\n", + " Timestamp('2021-02-01 00:00:00+0100', tz='Europe/Brussels'),\n", + " Timestamp('2021-03-01 00:00:00+0100', tz='Europe/Brussels'),\n", + " Timestamp('2021-04-01 00:00:00+0200', tz='Europe/Brussels'),\n", + " Timestamp('2021-05-01 00:00:00+0200', tz='Europe/Brussels'),\n", + " Timestamp('2021-06-01 00:00:00+0200', tz='Europe/Brussels'),\n", + " Timestamp('2021-07-01 00:00:00+0200', tz='Europe/Brussels'),\n", + " Timestamp('2021-08-01 00:00:00+0200', tz='Europe/Brussels'),\n", + " Timestamp('2021-09-01 00:00:00+0200', tz='Europe/Brussels'),\n", + " Timestamp('2021-10-01 00:00:00+0200', tz='Europe/Brussels'),\n", + " Timestamp('2021-11-01 00:00:00+0100', tz='Europe/Brussels'),\n", + " Timestamp('2021-12-01 00:00:00+0100', tz='Europe/Brussels')],\n", + " 'data': [[40.328, 18099.97],\n", + " [108.824, 49700.0],\n", + " [264.38, 89099.89],\n", + " [360.802, 129500.1],\n", + " [357.702, 146099.9],\n", + " [374.439, 156200.1],\n", + " [342.98199999999997, 136900.03],\n", + " [219.634, 117499.92],\n", + " [318.481, 104400.0],\n", + " [150.203, 55999.950000000004],\n", + " [58.608, 23900.1],\n", + " [30.832, 13499.880000000001]]}}" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "result.model_dump()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/openenergyid/__init__.py b/openenergyid/__init__.py index 19e551f..69fdcc8 100644 --- a/openenergyid/__init__.py +++ b/openenergyid/__init__.py @@ -1,6 +1,6 @@ """Open Energy ID Python SDK.""" -__version__ = "0.1.6" +__version__ = "0.1.7" from .enums import Granularity from .models import TimeSeries diff --git a/openenergyid/mvlr/__init__.py b/openenergyid/mvlr/__init__.py index 395ca13..3fb1fd3 100644 --- a/openenergyid/mvlr/__init__.py +++ b/openenergyid/mvlr/__init__.py @@ -1,12 +1,19 @@ """Multi-variable linear regression (MVLR) module.""" -from .mvlr import MultiVariableLinearRegression, find_best_mvlr, ValidationParameters -from .models import IndependentVariable, MultiVariableRegressionResult +from .main import find_best_mvlr +from .models import ( + IndependentVariableInput, + MultiVariableRegressionInput, + MultiVariableRegressionResult, + ValidationParameters, + IndependentVariableResult, +) __all__ = [ - "MultiVariableLinearRegression", - "MultiVariableRegressionResult", - "IndependentVariable", "find_best_mvlr", + "IndependentVariableInput", + "MultiVariableRegressionInput", + "MultiVariableRegressionResult", "ValidationParameters", + "IndependentVariableResult", ] diff --git a/openenergyid/mvlr/main.py b/openenergyid/mvlr/main.py new file mode 100644 index 0000000..9094b29 --- /dev/null +++ b/openenergyid/mvlr/main.py @@ -0,0 +1,28 @@ +"""Main module for the MultiVariableLinearRegression class.""" + +from .models import MultiVariableRegressionInput, MultiVariableRegressionResult +from .helpers import resample_input_data +from .mvlr import MultiVariableLinearRegression + + +def find_best_mvlr( + data: MultiVariableRegressionInput, +) -> MultiVariableRegressionResult: + """Cycle through multiple granularities and return the best model.""" + for granularity in data.granularities: + frame = data.data_frame() + frame = resample_input_data(data=frame, granularity=granularity) + mvlr = MultiVariableLinearRegression( + data=frame, + y=data.dependent_variable, + granularity=granularity, + allow_negative_predictions=data.allow_negative_predictions, + ) + mvlr.do_analysis() + if mvlr.validate( + min_rsquared=data.validation_parameters.rsquared, + max_f_pvalue=data.validation_parameters.f_pvalue, + max_pvalues=data.validation_parameters.pvalues, + ): + return MultiVariableRegressionResult.from_mvlr(mvlr) + raise ValueError("No valid model found.") diff --git a/openenergyid/mvlr/models.py b/openenergyid/mvlr/models.py index 469780a..f67b431 100644 --- a/openenergyid/mvlr/models.py +++ b/openenergyid/mvlr/models.py @@ -1,5 +1,6 @@ """Models for multivariable linear regression.""" -from typing import Optional +from typing import Any, List, Optional +import pandas as pd from pydantic import BaseModel, Field, ConfigDict import statsmodels.formula.api as fm @@ -10,6 +11,118 @@ from .mvlr import MultiVariableLinearRegression +COLUMN_TEMPERATUREEQUIVALENT = "temperatureEquivalent" + + +###################### +# MVLR Input Models # +###################### + + +class ValidationParameters(BaseModel): + """Parameters for validation of a multivariable linear regression model.""" + + rsquared: float = Field( + 0.75, ge=0, le=1, description="Minimum acceptable value for the adjusted R-squared" + ) + f_pvalue: float = Field( + 0.05, ge=0, le=1, description="Maximum acceptable value for the F-statistic" + ) + pvalues: float = Field( + 0.05, ge=0, le=1, description="Maximum acceptable value for the p-values of the t-statistic" + ) + + +class IndependentVariableInput(BaseModel): + """ + Independent variable. + + Has to corresponds to a column in the data frame. + """ + + name: str = Field( + description="Name of the independent variable. " + "If the name is `temperatureEquivalent`, " + "it will be unpacked into columns according to the variants." + ) + variants: Optional[list[str]] = Field( + default=None, + description="Variants of the `temperatureEquivalent` independent variable. " + "Eg. `HDD_16.5` will be Heating Degree Days with a base temperature of 16.5°C, " + "`CDD_0` will be Cooling Degree Days with a base temperature of 0°C.", + ) + + +class MultiVariableRegressionInput(BaseModel): + """Multi-variable regression input.""" + + timezone: str = Field(alias="timeZone") + independent_variables: List[IndependentVariableInput] = Field( + alias="independentVariables", min_length=1 + ) + dependent_variable: str = Field(alias="dependentVariable") + frame: TimeSeries + granularities: list[Granularity] + allow_negative_predictions: bool = Field(alias="allowNegativePredictions", default=False) + validation_parameters: ValidationParameters = Field( + alias="validationParameters", default=ValidationParameters() + ) + + def model_post_init(self, __context: Any) -> None: + """Post init hook.""" + # Check if all independent variables are present in the data frame + for iv in self.independent_variables: # pylint: disable=not-an-iterable + if iv.name not in self.frame.columns: + raise ValueError(f"Independent variable {iv.name} not found in the data frame.") + + return super().model_post_init(__context) + + def _data_frame(self) -> pd.DataFrame: + """Convert the data to a pandas DataFrame.""" + return self.frame.to_pandas(timezone=self.timezone) + + def data_frame(self) -> pd.DataFrame: + """ + Return the data frame ready for analysis. + + Unpacks degree days and removes unnecessary columns. + + If an independent variable named `temperatureEquivalent` is present, + it will be unpacked into columns according to the variants. + Eg. Variant "HDD_16.5" will be Heating Degree Days + with a base temperature of 16.5°C, + "CDD_0" will be Cooling Degree Days with a base temperature of 0°C. + """ + frame = self._data_frame() + columns_to_retain = [self.dependent_variable] + for iv in self.independent_variables: # pylint: disable=not-an-iterable + if iv.name == COLUMN_TEMPERATUREEQUIVALENT and iv.variants is not None: + for variant in iv.variants: + prefix, base_temperature = variant.split("_") + if prefix == "CDD": + frame[variant] = frame[COLUMN_TEMPERATUREEQUIVALENT] - float( + base_temperature + ) + else: + frame[variant] = ( + float(base_temperature) - frame[COLUMN_TEMPERATUREEQUIVALENT] + ) + frame[variant] = frame[variant].clip(lower=0) + columns_to_retain.append(variant) + frame.drop(columns=[COLUMN_TEMPERATUREEQUIVALENT], inplace=True) + else: + columns_to_retain.append(iv.name) + + frame = frame[columns_to_retain].copy() + + return frame + + +###################### +# MVLR Result Models # +###################### + + class ConfidenceInterval(BaseModel): """Confidence interval for a coefficient.""" @@ -18,7 +131,7 @@ class ConfidenceInterval(BaseModel): upper: float -class IndependentVariable(BaseModel): +class IndependentVariableResult(BaseModel): """Independent variable for a multivariable linear regression model.""" name: str @@ -33,7 +146,7 @@ class IndependentVariable(BaseModel): model_config = ConfigDict(populate_by_name=True) @classmethod - def from_fit(cls, fit: fm.ols, name: str) -> "IndependentVariable": + def from_fit(cls, fit: fm.ols, name: str) -> "IndependentVariableResult": """Create an IndependentVariable from a fit.""" return cls( name=name, @@ -53,12 +166,12 @@ class MultiVariableRegressionResult(BaseModel): """Result of a multivariable regression model.""" dependent_variable: str = Field(alias="dependentVariable") - independent_variables: list[IndependentVariable] = Field(alias="independentVariables") + independent_variables: list[IndependentVariableResult] = Field(alias="independentVariables") r2: float = Field(ge=0, le=1, alias="rSquared") r2_adj: float = Field(ge=0, le=1, alias="rSquaredAdjusted") f_stat: float = Field(ge=0, alias="fStat") prob_f_stat: float = Field(ge=0, le=1, alias="probFStat") - intercept: IndependentVariable + intercept: IndependentVariableResult granularity: Granularity frame: TimeSeries @@ -73,7 +186,7 @@ def from_mvlr(cls, mvlr: MultiVariableLinearRegression) -> "MultiVariableRegress param_keys.remove("Intercept") independent_variables = [] for k in param_keys: - independent_variables.append(IndependentVariable.from_fit(mvlr.fit, k)) + independent_variables.append(IndependentVariableResult.from_fit(mvlr.fit, k)) # Create resulting TimeSeries cols_to_keep = list(param_keys) @@ -88,7 +201,7 @@ def from_mvlr(cls, mvlr: MultiVariableLinearRegression) -> "MultiVariableRegress r2_adj=mvlr.fit.rsquared_adj, f_stat=mvlr.fit.fvalue, prob_f_stat=mvlr.fit.f_pvalue, - intercept=IndependentVariable.from_fit(mvlr.fit, "Intercept"), + intercept=IndependentVariableResult.from_fit(mvlr.fit, "Intercept"), granularity=mvlr.granularity, frame=TimeSeries.from_pandas(frame), ) diff --git a/openenergyid/mvlr/mvlr.py b/openenergyid/mvlr/mvlr.py index b3da789..78c0ffb 100644 --- a/openenergyid/mvlr/mvlr.py +++ b/openenergyid/mvlr/mvlr.py @@ -3,29 +3,12 @@ import numpy as np import pandas as pd -from pydantic import BaseModel, Field import statsmodels.formula.api as fm from patsy import LookupFactor, ModelDesc, Term # pylint: disable=no-name-in-module from statsmodels.sandbox.regression.predstd import wls_prediction_std from openenergyid.enums import Granularity -from .helpers import resample_input_data - - -class ValidationParameters(BaseModel): - """Parameters for validation of a multivariable linear regression model.""" - - rsquared: float = Field( - 0.75, ge=0, le=1, description="Minimum acceptable value for the adjusted R-squared" - ) - f_pvalue: float = Field( - 0.05, ge=0, le=1, description="Maximum acceptable value for the F-statistic" - ) - pvalues: float = Field( - 0.05, ge=0, le=1, description="Maximum acceptable value for the p-values of the t-statistic" - ) - class MultiVariableLinearRegression: """Multi-variable linear regression. @@ -56,7 +39,6 @@ def __init__( confint: float = 0.95, cross_validation: bool = False, allow_negative_predictions: bool = False, - validation_params: ValidationParameters = None, granularity: Granularity = None, ): """Parameters @@ -80,8 +62,6 @@ def __init__( If True, allow predictions to be negative. For gas consumption or PV production, this is not physical so allow_negative_predictions should be False - validation_params : ValidationParameters, default=None - Parameters to validate the model. """ self.data = data.copy() if y not in self.data.columns: @@ -95,7 +75,6 @@ def __init__( self.confint = confint self.cross_validation = cross_validation self.allow_negative_predictions = allow_negative_predictions - self.validation_params = validation_params or ValidationParameters() self.granularity = granularity self._fit = None self._list_of_fits = [] @@ -299,7 +278,7 @@ def remove_from_model_desc(x: str, model_desc: ModelDesc) -> ModelDesc: pars_to_prune = fit.pvalues.where(fit.pvalues > p_max).dropna().index.tolist() try: pars_to_prune.remove("Intercept") - except KeyError: + except ValueError: pass while pars_to_prune: corrected_model_desc = remove_from_model_desc( @@ -310,7 +289,7 @@ def remove_from_model_desc(x: str, model_desc: ModelDesc) -> ModelDesc: pars_to_prune = fit.pvalues.where(fit.pvalues > p_max).dropna().index.tolist() try: pars_to_prune.remove("Intercept") - except KeyError: + except ValueError: pass return fit @@ -400,40 +379,25 @@ def add_prediction(self): """ self.data = self._predict(fit=self.fit, data=self.data) - @property - def is_valid(self) -> bool: + def validate( + self, min_rsquared: float = 0.75, max_f_pvalue: float = 0.05, max_pvalues: float = 0.05 + ) -> bool: """Checks if the model is valid. Returns ------- bool: True if the model is valid, False otherwise. """ - if self.fit.rsquared_adj < self.validation_params.rsquared: + if self.fit.rsquared_adj < min_rsquared: return False - if self.fit.f_pvalue > self.validation_params.f_pvalue: + if self.fit.f_pvalue > max_f_pvalue: return False param_keys = self.fit.pvalues.keys().tolist() param_keys.remove("Intercept") for k in param_keys: - if self.fit.pvalues[k] > self.validation_params.pvalues: + if self.fit.pvalues[k] > max_pvalues: return False return True - - -def find_best_mvlr( - data: pd.DataFrame, - y: str, - granularities: list[Granularity], - **kwargs, -) -> MultiVariableLinearRegression: - """Cycle through multiple granularities and return the best model.""" - for granularity in granularities: - data = resample_input_data(data=data, granularity=granularity) - mvlr = MultiVariableLinearRegression(data=data, y=y, granularity=granularity, **kwargs) - mvlr.do_analysis() - if mvlr.is_valid: - return mvlr - raise ValueError("No valid model found.")