From 279ef54d86cd20511bd65187ebee5727a36779b1 Mon Sep 17 00:00:00 2001 From: wassname Date: Sun, 18 Oct 2020 13:12:09 +0800 Subject: [PATCH] dataloading --- Makefile | 2 +- notebooks/RNN_Timeseries_Seq2Seq.ipynb | 4016 +++++++++--------------- notebooks/RNN_Timeseries_Seq2Seq.py | 519 +++ requirements/environment.max.yaml | 221 ++ requirements/environment.min.yaml | 26 + requirements/environment.yaml | 2 +- requirements/readme.md | 10 + requirements/requirements.txt | 0 seq2seq_time/data/dataset.py | 100 + seq2seq_time/predict.py | 72 + seq2seq_time/util.py | 10 + 11 files changed, 2497 insertions(+), 2481 deletions(-) create mode 100644 notebooks/RNN_Timeseries_Seq2Seq.py create mode 100644 requirements/environment.max.yaml create mode 100644 requirements/environment.min.yaml create mode 100644 requirements/requirements.txt create mode 100644 seq2seq_time/data/dataset.py create mode 100644 seq2seq_time/predict.py create mode 100644 seq2seq_time/util.py diff --git a/Makefile b/Makefile index 2170eac..3aade1f 100644 --- a/Makefile +++ b/Makefile @@ -51,7 +51,7 @@ lint: ## Set up python interpreter environment create_environment: @echo ">>> Detected conda, creating conda environment." - conda create --name $(PROJECT_NAME) python=3 + conda create --name $(PROJECT_NAME) python=3.7 @echo ">>> New conda env created. Activate with:\nsource activate $(PROJECT_NAME)" ## Test python environment is setup correctly diff --git a/notebooks/RNN_Timeseries_Seq2Seq.ipynb b/notebooks/RNN_Timeseries_Seq2Seq.ipynb index bd15109..32754b1 100644 --- a/notebooks/RNN_Timeseries_Seq2Seq.ipynb +++ b/notebooks/RNN_Timeseries_Seq2Seq.ipynb @@ -18,15 +18,17 @@ "- with rough uncertainty (uncalibrated)\n", "- outputing sequence of predictions\n", "\n", - "This gets you close to real world applications\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "\n", - "Key learning objectives:\n", - "- Understand the LSTM's maintain a memory along sequences\n", - "- A rough overview of sequence to sequence approaches, and the data prep involved\n", - "- Understand likelihood and outputting a distribution\n", - "- Evalute a timeseries solution\n", - "\n", - "" + "- [ ] TODO mike autocorrelation baseline\n", + "- [ ] TODO mike acorn data" ] }, { @@ -34,8 +36,31 @@ "execution_count": 1, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:15.235547Z", - "start_time": "2020-10-16T04:36:14.522810Z" + "end_time": "2020-10-18T03:12:41.037540Z", + "start_time": "2020-10-18T03:12:40.520045Z" + } + }, + "outputs": [], + "source": [ + "# OPTIONAL: Load the \"autoreload\" extension so that code can change. But blacklist large modules\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "%aimport -pandas\n", + "%aimport -torch\n", + "%aimport -numpy\n", + "%aimport -matplotlib\n", + "%aimport -dask\n", + "%aimport -tqdm\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "ExecuteTime": { + "end_time": "2020-10-18T03:12:42.247775Z", + "start_time": "2020-10-18T03:12:41.040058Z" } }, "outputs": [], @@ -53,7 +78,39 @@ "import matplotlib.pyplot as plt\n", "\n", "from pathlib import Path\n", - "from tqdm.auto import tqdm" + "from tqdm.auto import tqdm\n", + "\n", + "import pytorch_lightning as pl" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "ExecuteTime": { + "end_time": "2020-10-18T03:12:42.334734Z", + "start_time": "2020-10-18T03:12:42.250766Z" + } + }, + "outputs": [], + "source": [ + "from seq2seq_time.data.dataset import Seq2SeqDataSet\n", + "from seq2seq_time.predict import predict" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "ExecuteTime": { + "end_time": "2020-10-18T03:12:42.363653Z", + "start_time": "2020-10-18T03:12:42.336896Z" + } + }, + "outputs": [], + "source": [ + "import logging, sys\n", + "logging.basicConfig(stream=sys.stdout, level=logging.INFO)" ] }, { @@ -70,11 +127,11 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 5, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:15.249766Z", - "start_time": "2020-10-16T04:36:15.237079Z" + "end_time": "2020-10-18T03:12:42.426253Z", + "start_time": "2020-10-18T03:12:42.366725Z" } }, "outputs": [ @@ -90,13 +147,13 @@ "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", "print(f'using {device}')\n", "\n", + "columns_target=['energy(kWh/hh)']\n", "window_past = 48*4\n", "window_future = 48*4\n", "batch_size = 64\n", "num_workers = 0\n", "freq = '30T'\n", - "max_rows = 1e5\n", - "use_future = False # Cheat!" + "max_rows = 1e5" ] }, { @@ -108,18 +165,18 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 159, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:15.295873Z", - "start_time": "2020-10-16T04:36:15.251348Z" + "end_time": "2020-10-18T05:10:01.335567Z", + "start_time": "2020-10-18T05:10:01.272903Z" }, "lines_to_next_cell": 0 }, "outputs": [], "source": [ "\n", - "def get_smartmeter_df(indir=Path('../../data/processed/smartmeter')):\n", + "def get_smartmeter_df(indir=Path('../data/raw/smart-meters-in-london')):\n", " \"\"\"\n", " Data loading and cleanding is always messy, so understand this code is optional.\n", " \"\"\"\n", @@ -131,9 +188,16 @@ " \n", " # concatendate them\n", " df = pd.concat([pd.read_csv(f, parse_dates=[1], na_values=['Null']) for f in csv_files])\n", + " \n", + " # Add ACORN categories\n", + " df_households = pd.read_csv(indir/'informations_households.csv')\n", + " df_households = df_households[['LCLid', 'stdorToU', 'Acorn_grouped']]\n", + " df = pd.merge(df, df_households, on='LCLid')\n", "\n", " # Take the mean over all houses\n", - " df = df.groupby('tstp').mean()\n", + " name, df = next(iter(df.groupby('LCLid')))\n", + " df = df.set_index('tstp')\n", + " print(df)\n", "\n", " # Load weather data\n", " df_weather = pd.read_csv(indir/'weather_hourly_darksky.csv', parse_dates=[3])\n", @@ -154,6 +218,8 @@ " def is_holiday(dt):\n", " return dt.floor('D') in holidays\n", " df['holiday'] = time.apply(is_holiday).astype(int)\n", + " \n", + " # TODO pd.read_csv('../data/raw/smart-meters-in-london/acorn_details.csv', engine='python')\n", "\n", "\n", " # Add time features \n", @@ -174,19 +240,6 @@ " return df" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "ExecuteTime": { - "end_time": "2020-10-11T01:19:12.463006Z", - "start_time": "2020-10-11T01:19:12.458426Z" - }, - "lines_to_next_cell": 2 - }, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {}, @@ -196,14 +249,43 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 160, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:20.888572Z", - "start_time": "2020-10-16T04:36:15.297303Z" - } + "end_time": "2020-10-18T05:10:07.567408Z", + "start_time": "2020-10-18T05:10:01.929712Z" + }, + "scrolled": true }, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " LCLid energy(kWh/hh) stdorToU Acorn_grouped\n", + "tstp \n", + "2012-10-12 00:30:00 MAC000002 0.000 Std Affluent\n", + "2012-10-12 01:00:00 MAC000002 0.000 Std Affluent\n", + "2012-10-12 01:30:00 MAC000002 0.000 Std Affluent\n", + "2012-10-12 02:00:00 MAC000002 0.000 Std Affluent\n", + "2012-10-12 02:30:00 MAC000002 0.000 Std Affluent\n", + "... ... ... ... ...\n", + "2014-02-27 22:00:00 MAC000002 0.416 Std Affluent\n", + "2014-02-27 22:30:00 MAC000002 1.350 Std Affluent\n", + "2014-02-27 23:00:00 MAC000002 1.247 Std Affluent\n", + "2014-02-27 23:30:00 MAC000002 1.218 Std Affluent\n", + "2014-02-28 00:00:00 MAC000002 1.387 Std Affluent\n", + "\n", + "[24141 rows x 4 columns]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/wassname/anaconda/envs/seq2seq-time/lib/python3.7/site-packages/ipykernel_launcher.py:50: FutureWarning: Series.dt.weekofyear and Series.dt.week have been deprecated. Please use Series.dt.isocalendar().week instead.\n" + ] + }, { "data": { "text/html": [ @@ -225,7 +307,10 @@ " \n", " \n", " \n", + " LCLid\n", " energy(kWh/hh)\n", + " stdorToU\n", + " Acorn_grouped\n", " visibility\n", " windBearing\n", " temperature\n", @@ -245,99 +330,114 @@ " \n", " \n", " \n", - " 2011-12-03 09:00:00\n", - " 0.149000\n", - " 13.07\n", - " 262.0\n", - " 11.00\n", - " 8.84\n", - " 1002.07\n", - " 11.00\n", - " 5.99\n", - " 0.87\n", + " 2012-10-12 11:30:00\n", + " MAC000002\n", + " 0.143\n", + " Std\n", + " Affluent\n", + " 13.52\n", + " 267.0\n", + " 12.59\n", + " 4.48\n", + " 1007.25\n", + " 12.59\n", + " 6.96\n", + " 0.58\n", " 0\n", - " 12\n", - " 3\n", - " 48\n", - " 9\n", - " 0\n", - " 5\n", - " \n", - " \n", - " 2011-12-03 09:30:00\n", - " 0.154000\n", - " 13.07\n", - " 262.0\n", - " 11.00\n", - " 8.84\n", - " 1002.07\n", - " 11.00\n", - " 5.99\n", - " 0.87\n", - " 0\n", - " 12\n", - " 3\n", - " 48\n", - " 9\n", - " 30\n", - " 5\n", - " \n", - " \n", - " 2011-12-03 10:00:00\n", - " 0.768000\n", - " 12.76\n", - " 268.0\n", - " 11.42\n", - " 7.52\n", - " 1002.76\n", - " 11.42\n", - " 6.10\n", - " 0.77\n", - " 0\n", - " 12\n", - " 3\n", - " 48\n", " 10\n", - " 0\n", - " 5\n", - " \n", - " \n", - " 2011-12-03 10:30:00\n", - " 1.179000\n", - " 12.76\n", - " 268.0\n", - " 11.42\n", - " 7.52\n", - " 1002.76\n", - " 11.42\n", - " 6.10\n", - " 0.77\n", - " 0\n", " 12\n", - " 3\n", - " 48\n", - " 10\n", - " 30\n", - " 5\n", - " \n", - " \n", - " 2011-12-03 11:00:00\n", - " 0.588000\n", - " 13.07\n", - " 274.0\n", - " 11.41\n", - " 6.39\n", - " 1003.24\n", - " 11.41\n", - " 6.20\n", - " 0.71\n", - " 0\n", - " 12\n", - " 3\n", - " 48\n", + " 41\n", " 11\n", + " 30\n", + " 4\n", + " \n", + " \n", + " 2012-10-12 12:00:00\n", + " MAC000002\n", + " 0.663\n", + " Std\n", + " Affluent\n", + " 13.52\n", + " 260.0\n", + " 13.86\n", + " 4.32\n", + " 1007.37\n", + " 13.86\n", + " 6.92\n", + " 0.53\n", " 0\n", - " 5\n", + " 10\n", + " 12\n", + " 41\n", + " 12\n", + " 0\n", + " 4\n", + " \n", + " \n", + " 2012-10-12 12:30:00\n", + " MAC000002\n", + " 0.256\n", + " Std\n", + " Affluent\n", + " 13.52\n", + " 260.0\n", + " 13.86\n", + " 4.32\n", + " 1007.37\n", + " 13.86\n", + " 6.92\n", + " 0.53\n", + " 0\n", + " 10\n", + " 12\n", + " 41\n", + " 12\n", + " 30\n", + " 4\n", + " \n", + " \n", + " 2012-10-12 13:00:00\n", + " MAC000002\n", + " 0.155\n", + " Std\n", + " Affluent\n", + " 13.52\n", + " 253.0\n", + " 13.99\n", + " 4.48\n", + " 1007.54\n", + " 13.99\n", + " 7.00\n", + " 0.53\n", + " 0\n", + " 10\n", + " 12\n", + " 41\n", + " 13\n", + " 0\n", + " 4\n", + " \n", + " \n", + " 2012-10-12 13:30:00\n", + " MAC000002\n", + " 0.199\n", + " Std\n", + " Affluent\n", + " 13.52\n", + " 253.0\n", + " 13.99\n", + " 4.48\n", + " 1007.54\n", + " 13.99\n", + " 7.00\n", + " 0.53\n", + " 0\n", + " 10\n", + " 12\n", + " 41\n", + " 13\n", + " 30\n", + " 4\n", " \n", " \n", " ...\n", @@ -357,10 +457,16 @@ " ...\n", " ...\n", " ...\n", + " ...\n", + " ...\n", + " ...\n", " \n", " \n", " 2014-02-27 22:00:00\n", - " 0.678429\n", + " MAC000002\n", + " 0.416\n", + " Std\n", + " Affluent\n", " 14.00\n", " 216.0\n", " 4.10\n", @@ -379,7 +485,10 @@ " \n", " \n", " 2014-02-27 22:30:00\n", - " 0.652071\n", + " MAC000002\n", + " 1.350\n", + " Std\n", + " Affluent\n", " 14.00\n", " 216.0\n", " 4.10\n", @@ -398,7 +507,10 @@ " \n", " \n", " 2014-02-27 23:00:00\n", - " 0.545190\n", + " MAC000002\n", + " 1.247\n", + " Std\n", + " Affluent\n", " 14.03\n", " 200.0\n", " 3.93\n", @@ -417,7 +529,10 @@ " \n", " \n", " 2014-02-27 23:30:00\n", - " 0.442571\n", + " MAC000002\n", + " 1.218\n", + " Std\n", + " Affluent\n", " 14.03\n", " 200.0\n", " 3.93\n", @@ -436,7 +551,10 @@ " \n", " \n", " 2014-02-28 00:00:00\n", - " 0.328810\n", + " MAC000002\n", + " 1.387\n", + " Std\n", + " Affluent\n", " 12.63\n", " 190.0\n", " 3.81\n", @@ -455,66 +573,66 @@ " \n", " \n", "\n", - "

39247 rows × 16 columns

\n", + "

24119 rows × 19 columns

\n", "" ], "text/plain": [ - " energy(kWh/hh) visibility windBearing temperature \\\n", - "2011-12-03 09:00:00 0.149000 13.07 262.0 11.00 \n", - "2011-12-03 09:30:00 0.154000 13.07 262.0 11.00 \n", - "2011-12-03 10:00:00 0.768000 12.76 268.0 11.42 \n", - "2011-12-03 10:30:00 1.179000 12.76 268.0 11.42 \n", - "2011-12-03 11:00:00 0.588000 13.07 274.0 11.41 \n", - "... ... ... ... ... \n", - "2014-02-27 22:00:00 0.678429 14.00 216.0 4.10 \n", - "2014-02-27 22:30:00 0.652071 14.00 216.0 4.10 \n", - "2014-02-27 23:00:00 0.545190 14.03 200.0 3.93 \n", - "2014-02-27 23:30:00 0.442571 14.03 200.0 3.93 \n", - "2014-02-28 00:00:00 0.328810 12.63 190.0 3.81 \n", + " LCLid energy(kWh/hh) stdorToU Acorn_grouped \\\n", + "2012-10-12 11:30:00 MAC000002 0.143 Std Affluent \n", + "2012-10-12 12:00:00 MAC000002 0.663 Std Affluent \n", + "2012-10-12 12:30:00 MAC000002 0.256 Std Affluent \n", + "2012-10-12 13:00:00 MAC000002 0.155 Std Affluent \n", + "2012-10-12 13:30:00 MAC000002 0.199 Std Affluent \n", + "... ... ... ... ... \n", + "2014-02-27 22:00:00 MAC000002 0.416 Std Affluent \n", + "2014-02-27 22:30:00 MAC000002 1.350 Std Affluent \n", + "2014-02-27 23:00:00 MAC000002 1.247 Std Affluent \n", + "2014-02-27 23:30:00 MAC000002 1.218 Std Affluent \n", + "2014-02-28 00:00:00 MAC000002 1.387 Std Affluent \n", "\n", - " dewPoint pressure apparentTemperature windSpeed \\\n", - "2011-12-03 09:00:00 8.84 1002.07 11.00 5.99 \n", - "2011-12-03 09:30:00 8.84 1002.07 11.00 5.99 \n", - "2011-12-03 10:00:00 7.52 1002.76 11.42 6.10 \n", - "2011-12-03 10:30:00 7.52 1002.76 11.42 6.10 \n", - "2011-12-03 11:00:00 6.39 1003.24 11.41 6.20 \n", - "... ... ... ... ... \n", - "2014-02-27 22:00:00 1.64 1005.67 1.41 3.02 \n", - "2014-02-27 22:30:00 1.64 1005.67 1.41 3.02 \n", - "2014-02-27 23:00:00 1.61 1004.62 1.42 2.75 \n", - "2014-02-27 23:30:00 1.61 1004.62 1.42 2.75 \n", - "2014-02-28 00:00:00 1.53 1003.57 1.47 2.53 \n", + " visibility windBearing temperature dewPoint pressure \\\n", + "2012-10-12 11:30:00 13.52 267.0 12.59 4.48 1007.25 \n", + "2012-10-12 12:00:00 13.52 260.0 13.86 4.32 1007.37 \n", + "2012-10-12 12:30:00 13.52 260.0 13.86 4.32 1007.37 \n", + "2012-10-12 13:00:00 13.52 253.0 13.99 4.48 1007.54 \n", + "2012-10-12 13:30:00 13.52 253.0 13.99 4.48 1007.54 \n", + "... ... ... ... ... ... \n", + "2014-02-27 22:00:00 14.00 216.0 4.10 1.64 1005.67 \n", + "2014-02-27 22:30:00 14.00 216.0 4.10 1.64 1005.67 \n", + "2014-02-27 23:00:00 14.03 200.0 3.93 1.61 1004.62 \n", + "2014-02-27 23:30:00 14.03 200.0 3.93 1.61 1004.62 \n", + "2014-02-28 00:00:00 12.63 190.0 3.81 1.53 1003.57 \n", "\n", - " humidity holiday month day week hour minute \\\n", - "2011-12-03 09:00:00 0.87 0 12 3 48 9 0 \n", - "2011-12-03 09:30:00 0.87 0 12 3 48 9 30 \n", - "2011-12-03 10:00:00 0.77 0 12 3 48 10 0 \n", - "2011-12-03 10:30:00 0.77 0 12 3 48 10 30 \n", - "2011-12-03 11:00:00 0.71 0 12 3 48 11 0 \n", - "... ... ... ... ... ... ... ... \n", - "2014-02-27 22:00:00 0.84 0 2 27 9 22 0 \n", - "2014-02-27 22:30:00 0.84 0 2 27 9 22 30 \n", - "2014-02-27 23:00:00 0.85 0 2 27 9 23 0 \n", - "2014-02-27 23:30:00 0.85 0 2 27 9 23 30 \n", - "2014-02-28 00:00:00 0.85 0 2 28 9 0 0 \n", + " apparentTemperature windSpeed humidity holiday month \\\n", + "2012-10-12 11:30:00 12.59 6.96 0.58 0 10 \n", + "2012-10-12 12:00:00 13.86 6.92 0.53 0 10 \n", + "2012-10-12 12:30:00 13.86 6.92 0.53 0 10 \n", + "2012-10-12 13:00:00 13.99 7.00 0.53 0 10 \n", + "2012-10-12 13:30:00 13.99 7.00 0.53 0 10 \n", + "... ... ... ... ... ... \n", + "2014-02-27 22:00:00 1.41 3.02 0.84 0 2 \n", + "2014-02-27 22:30:00 1.41 3.02 0.84 0 2 \n", + "2014-02-27 23:00:00 1.42 2.75 0.85 0 2 \n", + "2014-02-27 23:30:00 1.42 2.75 0.85 0 2 \n", + "2014-02-28 00:00:00 1.47 2.53 0.85 0 2 \n", "\n", - " dayofweek \n", - "2011-12-03 09:00:00 5 \n", - "2011-12-03 09:30:00 5 \n", - "2011-12-03 10:00:00 5 \n", - "2011-12-03 10:30:00 5 \n", - "2011-12-03 11:00:00 5 \n", - "... ... \n", - "2014-02-27 22:00:00 3 \n", - "2014-02-27 22:30:00 3 \n", - "2014-02-27 23:00:00 3 \n", - "2014-02-27 23:30:00 3 \n", - "2014-02-28 00:00:00 4 \n", + " day week hour minute dayofweek \n", + "2012-10-12 11:30:00 12 41 11 30 4 \n", + "2012-10-12 12:00:00 12 41 12 0 4 \n", + "2012-10-12 12:30:00 12 41 12 30 4 \n", + "2012-10-12 13:00:00 12 41 13 0 4 \n", + "2012-10-12 13:30:00 12 41 13 30 4 \n", + "... ... ... ... ... ... \n", + "2014-02-27 22:00:00 27 9 22 0 3 \n", + "2014-02-27 22:30:00 27 9 22 30 3 \n", + "2014-02-27 23:00:00 27 9 23 0 3 \n", + "2014-02-27 23:30:00 27 9 23 30 3 \n", + "2014-02-28 00:00:00 28 9 0 0 4 \n", "\n", - "[39247 rows x 16 columns]" + "[24119 rows x 19 columns]" ] }, - "execution_count": 4, + "execution_count": 160, "metadata": {}, "output_type": "execute_result" } @@ -522,19 +640,19 @@ "source": [ "df = get_smartmeter_df()\n", "\n", - "df = df.resample(freq).first().dropna() # Where empty we will backfill, this will respect causality, and mostly maintain the mean\n", + "# df = df.resample(freq).first().dropna() # Where empty we will backfill, this will respect causality, and mostly maintain the mean\n", "\n", - "df = df.tail(int(max_rows)) # Just use last X rows\n", + "df = df.tail(int(max_rows)).copy() # Just use last X rows\n", "df" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 161, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:20.962200Z", - "start_time": "2020-10-16T04:36:20.889920Z" + "end_time": "2020-10-18T05:10:07.699157Z", + "start_time": "2020-10-18T05:10:07.569250Z" } }, "outputs": [ @@ -580,68 +698,68 @@ " \n", " \n", " count\n", - " 39247.000000\n", - " 39247.000000\n", - " 39247.000000\n", - " 39247.000000\n", - " 39247.000000\n", - " 39247.000000\n", - " 39247.000000\n", - " 39247.000000\n", - " 39247.000000\n", - " 39247.000000\n", - " 39247.000000\n", - " 39247.000000\n", - " 39247.000000\n", - " 39247.000000\n", - " 39247.000000\n", - " 39247.000000\n", + " 24119.000000\n", + " 24119.000000\n", + " 24119.000000\n", + " 24119.000000\n", + " 24119.000000\n", + " 24119.000000\n", + " 24119.000000\n", + " 24119.000000\n", + " 24119.000000\n", + " 24119.000000\n", + " 24119.000000\n", + " 24119.000000\n", + " 24119.000000\n", + " 24119.000000\n", + " 24119.000000\n", + " 24119.000000\n", " \n", " \n", " mean\n", - " 0.449280\n", - " 11.289506\n", - " 197.401840\n", - " 10.533910\n", - " 6.550560\n", - " 1013.987087\n", - " 9.272663\n", - " 3.927207\n", - " 0.779764\n", - " 0.022014\n", - " 6.353046\n", - " 15.742095\n", - " 25.771779\n", - " 11.503147\n", - " 14.999618\n", - " 2.997885\n", + " 0.252733\n", + " 11.132308\n", + " 193.259215\n", + " 9.896434\n", + " 6.069227\n", + " 1012.490613\n", + " 8.446964\n", + " 4.000070\n", + " 0.786521\n", + " 0.021891\n", + " 6.672416\n", + " 15.899623\n", + " 27.084746\n", + " 11.504664\n", + " 14.999378\n", + " 2.999129\n", " \n", " \n", " std\n", - " 0.218968\n", - " 2.975889\n", - " 90.833443\n", - " 5.924281\n", - " 5.155743\n", - " 11.457274\n", - " 7.109520\n", - " 2.041219\n", - " 0.140156\n", - " 0.146732\n", - " 3.673233\n", - " 8.769535\n", - " 15.991587\n", - " 6.921932\n", - " 15.000191\n", - " 2.000922\n", + " 0.247079\n", + " 3.143717\n", + " 92.104725\n", + " 5.940428\n", + " 5.195058\n", + " 11.420208\n", + " 7.175969\n", + " 2.103774\n", + " 0.138358\n", + " 0.146332\n", + " 3.881916\n", + " 8.744709\n", + " 16.913482\n", + " 6.922411\n", + " 15.000311\n", + " 2.002766\n", " \n", " \n", " min\n", - " 0.023000\n", + " 0.065000\n", " 0.270000\n", " 0.000000\n", - " -5.640000\n", - " -9.980000\n", + " -3.860000\n", + " -8.920000\n", " 975.740000\n", " -8.880000\n", " 0.040000\n", @@ -656,69 +774,69 @@ " \n", " \n", " 25%\n", - " 0.293000\n", - " 10.360000\n", - " 127.000000\n", - " 6.410000\n", - " 2.720000\n", - " 1007.320000\n", - " 3.740000\n", - " 2.430000\n", - " 0.700000\n", + " 0.112000\n", + " 9.960000\n", + " 115.000000\n", + " 5.640000\n", + " 2.240000\n", + " 1005.470000\n", + " 2.980000\n", + " 2.450000\n", + " 0.710000\n", " 0.000000\n", " 3.000000\n", " 8.000000\n", - " 11.000000\n", + " 10.000000\n", " 6.000000\n", " 0.000000\n", " 1.000000\n", " \n", " \n", " 50%\n", - " 0.436375\n", - " 12.310000\n", - " 219.000000\n", - " 9.980000\n", - " 6.620000\n", - " 1014.500000\n", - " 9.770000\n", - " 3.710000\n", - " 0.810000\n", + " 0.158000\n", + " 12.130000\n", + " 214.000000\n", + " 9.140000\n", + " 6.040000\n", + " 1013.450000\n", + " 7.120000\n", + " 3.760000\n", + " 0.820000\n", " 0.000000\n", - " 6.000000\n", + " 7.000000\n", " 16.000000\n", - " 25.000000\n", + " 28.000000\n", " 12.000000\n", " 0.000000\n", " 3.000000\n", " \n", " \n", " 75%\n", - " 0.583882\n", - " 13.080000\n", - " 257.000000\n", - " 14.630000\n", - " 10.470000\n", - " 1021.850000\n", - " 14.630000\n", - " 5.110000\n", + " 0.286000\n", + " 13.070000\n", + " 255.000000\n", + " 13.670000\n", + " 9.840000\n", + " 1020.550000\n", + " 13.670000\n", + " 5.200000\n", " 0.890000\n", " 0.000000\n", " 10.000000\n", " 23.000000\n", - " 40.000000\n", + " 43.000000\n", " 18.000000\n", " 30.000000\n", " 5.000000\n", " \n", " \n", " max\n", - " 1.981000\n", + " 2.994000\n", " 16.090000\n", " 359.000000\n", " 32.400000\n", - " 19.880000\n", - " 1043.320000\n", + " 18.950000\n", + " 1040.130000\n", " 32.420000\n", " 14.800000\n", " 1.000000\n", @@ -736,39 +854,39 @@ ], "text/plain": [ " energy(kWh/hh) visibility windBearing temperature dewPoint \\\n", - "count 39247.000000 39247.000000 39247.000000 39247.000000 39247.000000 \n", - "mean 0.449280 11.289506 197.401840 10.533910 6.550560 \n", - "std 0.218968 2.975889 90.833443 5.924281 5.155743 \n", - "min 0.023000 0.270000 0.000000 -5.640000 -9.980000 \n", - "25% 0.293000 10.360000 127.000000 6.410000 2.720000 \n", - "50% 0.436375 12.310000 219.000000 9.980000 6.620000 \n", - "75% 0.583882 13.080000 257.000000 14.630000 10.470000 \n", - "max 1.981000 16.090000 359.000000 32.400000 19.880000 \n", + "count 24119.000000 24119.000000 24119.000000 24119.000000 24119.000000 \n", + "mean 0.252733 11.132308 193.259215 9.896434 6.069227 \n", + "std 0.247079 3.143717 92.104725 5.940428 5.195058 \n", + "min 0.065000 0.270000 0.000000 -3.860000 -8.920000 \n", + "25% 0.112000 9.960000 115.000000 5.640000 2.240000 \n", + "50% 0.158000 12.130000 214.000000 9.140000 6.040000 \n", + "75% 0.286000 13.070000 255.000000 13.670000 9.840000 \n", + "max 2.994000 16.090000 359.000000 32.400000 18.950000 \n", "\n", " pressure apparentTemperature windSpeed humidity \\\n", - "count 39247.000000 39247.000000 39247.000000 39247.000000 \n", - "mean 1013.987087 9.272663 3.927207 0.779764 \n", - "std 11.457274 7.109520 2.041219 0.140156 \n", + "count 24119.000000 24119.000000 24119.000000 24119.000000 \n", + "mean 1012.490613 8.446964 4.000070 0.786521 \n", + "std 11.420208 7.175969 2.103774 0.138358 \n", "min 975.740000 -8.880000 0.040000 0.230000 \n", - "25% 1007.320000 3.740000 2.430000 0.700000 \n", - "50% 1014.500000 9.770000 3.710000 0.810000 \n", - "75% 1021.850000 14.630000 5.110000 0.890000 \n", - "max 1043.320000 32.420000 14.800000 1.000000 \n", + "25% 1005.470000 2.980000 2.450000 0.710000 \n", + "50% 1013.450000 7.120000 3.760000 0.820000 \n", + "75% 1020.550000 13.670000 5.200000 0.890000 \n", + "max 1040.130000 32.420000 14.800000 1.000000 \n", "\n", " holiday month day week hour \\\n", - "count 39247.000000 39247.000000 39247.000000 39247.000000 39247.000000 \n", - "mean 0.022014 6.353046 15.742095 25.771779 11.503147 \n", - "std 0.146732 3.673233 8.769535 15.991587 6.921932 \n", + "count 24119.000000 24119.000000 24119.000000 24119.000000 24119.000000 \n", + "mean 0.021891 6.672416 15.899623 27.084746 11.504664 \n", + "std 0.146332 3.881916 8.744709 16.913482 6.922411 \n", "min 0.000000 1.000000 1.000000 1.000000 0.000000 \n", - "25% 0.000000 3.000000 8.000000 11.000000 6.000000 \n", - "50% 0.000000 6.000000 16.000000 25.000000 12.000000 \n", - "75% 0.000000 10.000000 23.000000 40.000000 18.000000 \n", + "25% 0.000000 3.000000 8.000000 10.000000 6.000000 \n", + "50% 0.000000 7.000000 16.000000 28.000000 12.000000 \n", + "75% 0.000000 10.000000 23.000000 43.000000 18.000000 \n", "max 1.000000 12.000000 31.000000 52.000000 23.000000 \n", "\n", " minute dayofweek \n", - "count 39247.000000 39247.000000 \n", - "mean 14.999618 2.997885 \n", - "std 15.000191 2.000922 \n", + "count 24119.000000 24119.000000 \n", + "mean 14.999378 2.999129 \n", + "std 15.000311 2.002766 \n", "min 0.000000 0.000000 \n", "25% 0.000000 1.000000 \n", "50% 0.000000 3.000000 \n", @@ -776,7 +894,7 @@ "max 30.000000 6.000000 " ] }, - "execution_count": 5, + "execution_count": 161, "metadata": {}, "output_type": "execute_result" } @@ -785,34 +903,14 @@ "df.describe()" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "

Exercise: Debug

\n", - "\n", - " Sometimes the best way to understand something is to interact with it. But if the code is inside a function it's difficult. Use the python debugger to play with the dataloading code.\n", - " \n", - " - insert the line `import pdb; pdb.set_trace()` in the function above\n", - " - run the function definition\n", - " - run the function again\n", - " - you should be in a debugger, try pressing `?` then enter\n", - " - try printing a variable\n", - " - `q` to exit\n", - "\n", - "
" - ] - }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 162, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:21.409733Z", - "start_time": "2020-10-16T04:36:20.963445Z" - }, - "scrolled": true + "end_time": "2020-10-18T05:10:07.830847Z", + "start_time": "2020-10-18T05:10:07.701848Z" + } }, "outputs": [ { @@ -852,259 +950,398 @@ " hour\n", " minute\n", " dayofweek\n", + " Acorn_grouped\n", + " stdorToU\n", + " LCLid\n", " \n", " \n", " \n", " \n", - " count\n", - " 3.924700e+04\n", - " 3.924700e+04\n", - " 3.924700e+04\n", - " 3.924700e+04\n", - " 3.924700e+04\n", - " 3.924700e+04\n", - " 3.924700e+04\n", - " 3.924700e+04\n", - " 3.924700e+04\n", - " 3.924700e+04\n", - " 3.924700e+04\n", - " 3.924700e+04\n", - " 3.924700e+04\n", - " 3.924700e+04\n", - " 3.924700e+04\n", - " 3.924700e+04\n", + " 2012-10-12 11:30:00\n", + " -0.444130\n", + " 0.759528\n", + " 0.800636\n", + " 0.453439\n", + " -0.305918\n", + " -0.458899\n", + " 0.577361\n", + " 1.406991\n", + " -1.492695\n", + " -0.149604\n", + " 0.857219\n", + " -0.445950\n", + " 0.822749\n", + " -0.072904\n", + " 1.000041\n", + " 0.499755\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " \n", " \n", - " mean\n", - " 1.216615e-16\n", - " -9.110126e-16\n", - " 3.476042e-17\n", - " 2.317361e-17\n", - " -1.738021e-17\n", - " 5.086608e-15\n", - " -6.952083e-17\n", - " 1.158681e-16\n", - " -8.110764e-17\n", - " -3.331207e-17\n", - " 9.848785e-17\n", - " -1.303516e-16\n", - " 5.793403e-17\n", - " -6.734831e-17\n", - " -2.648162e-16\n", - " 3.584668e-17\n", + " 2012-10-12 12:00:00\n", + " 1.660500\n", + " 0.759528\n", + " 0.724633\n", + " 0.667233\n", + " -0.336717\n", + " -0.448391\n", + " 0.754344\n", + " 1.387977\n", + " -1.854084\n", + " -0.149604\n", + " 0.857219\n", + " -0.445950\n", + " 0.822749\n", + " 0.071557\n", + " -0.999959\n", + " 0.499755\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " \n", " \n", - " std\n", - " 1.000013e+00\n", - " 1.000013e+00\n", - " 1.000013e+00\n", - " 1.000013e+00\n", - " 1.000013e+00\n", - " 1.000013e+00\n", - " 1.000013e+00\n", - " 1.000013e+00\n", - " 1.000013e+00\n", - " 1.000013e+00\n", - " 1.000013e+00\n", - " 1.000013e+00\n", - " 1.000013e+00\n", - " 1.000013e+00\n", - " 1.000013e+00\n", - " 1.000013e+00\n", + " 2012-10-12 12:30:00\n", + " 0.013222\n", + " 0.759528\n", + " 0.724633\n", + " 0.667233\n", + " -0.336717\n", + " -0.448391\n", + " 0.754344\n", + " 1.387977\n", + " -1.854084\n", + " -0.149604\n", + " 0.857219\n", + " -0.445950\n", + " 0.822749\n", + " 0.071557\n", + " 1.000041\n", + " 0.499755\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " \n", " \n", - " min\n", - " -1.946796e+00\n", - " -3.702976e+00\n", - " -2.173256e+00\n", - " -2.730140e+00\n", - " -3.206283e+00\n", - " -3.338279e+00\n", - " -2.553322e+00\n", - " -1.904380e+00\n", - " -3.922565e+00\n", - " -1.500332e-01\n", - " -1.457330e+00\n", - " -1.681079e+00\n", - " -1.549070e+00\n", - " -1.661862e+00\n", - " -9.999745e-01\n", - " -1.498271e+00\n", + " 2012-10-12 13:00:00\n", + " -0.395562\n", + " 0.759528\n", + " 0.648631\n", + " 0.689117\n", + " -0.305918\n", + " -0.433505\n", + " 0.772460\n", + " 1.426005\n", + " -1.854084\n", + " -0.149604\n", + " 0.857219\n", + " -0.445950\n", + " 0.822749\n", + " 0.216018\n", + " -0.999959\n", + " 0.499755\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " \n", " \n", - " 25%\n", - " -7.137231e-01\n", - " -3.123495e-01\n", - " -7.750751e-01\n", - " -6.961120e-01\n", - " -7.429789e-01\n", - " -5.819161e-01\n", - " -7.782148e-01\n", - " -7.334959e-01\n", - " -5.691148e-01\n", - " -1.500332e-01\n", - " -9.128440e-01\n", - " -8.828511e-01\n", - " -9.237337e-01\n", - " -7.950405e-01\n", - " -9.999745e-01\n", - " -9.984948e-01\n", + " 2012-10-12 13:30:00\n", + " -0.217478\n", + " 0.759528\n", + " 0.648631\n", + " 0.689117\n", + " -0.305918\n", + " -0.433505\n", + " 0.772460\n", + " 1.426005\n", + " -1.854084\n", + " -0.149604\n", + " 0.857219\n", + " -0.445950\n", + " 0.822749\n", + " 0.216018\n", + " 1.000041\n", + " 0.499755\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " \n", " \n", - " 50%\n", - " -5.893824e-02\n", - " 3.429252e-01\n", - " 2.377807e-01\n", - " -9.349948e-02\n", - " 1.346874e-02\n", - " 4.476806e-02\n", - " 6.995454e-02\n", - " -1.064117e-01\n", - " 2.157353e-01\n", - " -1.500332e-01\n", - " -9.611440e-02\n", - " 2.940958e-02\n", - " -4.826216e-02\n", - " 7.178048e-02\n", - " -9.999745e-01\n", - " 1.056932e-03\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", + " ...\n", " \n", " \n", - " 75%\n", - " 6.147169e-01\n", - " 6.016747e-01\n", - " 6.561341e-01\n", - " 6.914159e-01\n", - " 7.602183e-01\n", - " 6.862901e-01\n", - " 7.535537e-01\n", - " 5.794616e-01\n", - " 7.865354e-01\n", - " -1.500332e-01\n", - " 9.928584e-01\n", - " 8.276377e-01\n", - " 8.897430e-01\n", - " 9.386015e-01\n", - " 1.000025e+00\n", - " 1.000609e+00\n", + " 2014-02-27 22:00:00\n", + " 0.660800\n", + " 0.912217\n", + " 0.246907\n", + " -0.975781\n", + " -0.852602\n", + " -0.597253\n", + " -0.980649\n", + " -0.465873\n", + " 0.386532\n", + " -0.149604\n", + " -1.203661\n", + " 1.269408\n", + " -1.069273\n", + " 1.516170\n", + " -0.999959\n", + " 0.000435\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " \n", " \n", - " max\n", - " 6.995269e+00\n", - " 1.613150e+00\n", - " 1.779083e+00\n", - " 3.690974e+00\n", - " 2.585391e+00\n", - " 2.560233e+00\n", - " 3.255864e+00\n", - " 5.326685e+00\n", - " 1.571385e+00\n", - " 6.665191e+00\n", - " 1.537345e+00\n", - " 1.739898e+00\n", - " 1.640147e+00\n", - " 1.660952e+00\n", - " 1.000025e+00\n", - " 1.500385e+00\n", + " 2014-02-27 22:30:00\n", + " 4.441040\n", + " 0.912217\n", + " 0.246907\n", + " -0.975781\n", + " -0.852602\n", + " -0.597253\n", + " -0.980649\n", + " -0.465873\n", + " 0.386532\n", + " -0.149604\n", + " -1.203661\n", + " 1.269408\n", + " -1.069273\n", + " 1.516170\n", + " 1.000041\n", + " 0.000435\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " \n", + " \n", + " 2014-02-27 23:00:00\n", + " 4.024161\n", + " 0.921760\n", + " 0.073188\n", + " -1.004399\n", + " -0.858377\n", + " -0.689197\n", + " -0.979256\n", + " -0.594216\n", + " 0.458810\n", + " -0.149604\n", + " -1.203661\n", + " 1.269408\n", + " -1.069273\n", + " 1.660631\n", + " -0.999959\n", + " 0.000435\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " \n", + " \n", + " 2014-02-27 23:30:00\n", + " 3.906788\n", + " 0.921760\n", + " 0.073188\n", + " -1.004399\n", + " -0.858377\n", + " -0.689197\n", + " -0.979256\n", + " -0.594216\n", + " 0.458810\n", + " -0.149604\n", + " -1.203661\n", + " 1.269408\n", + " -1.069273\n", + " 1.660631\n", + " 1.000041\n", + " 0.000435\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " \n", + " \n", + " 2014-02-28 00:00:00\n", + " 4.590792\n", + " 0.476418\n", + " -0.035387\n", + " -1.024600\n", + " -0.873777\n", + " -0.781141\n", + " -0.972288\n", + " -0.698792\n", + " 0.458810\n", + " -0.149604\n", + " -1.203661\n", + " 1.383766\n", + " -1.069273\n", + " -1.661979\n", + " -0.999959\n", + " 0.499755\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", " \n", " \n", "\n", + "

24119 rows × 19 columns

\n", "" ], "text/plain": [ - " energy(kWh/hh) visibility windBearing temperature dewPoint \\\n", - "count 3.924700e+04 3.924700e+04 3.924700e+04 3.924700e+04 3.924700e+04 \n", - "mean 1.216615e-16 -9.110126e-16 3.476042e-17 2.317361e-17 -1.738021e-17 \n", - "std 1.000013e+00 1.000013e+00 1.000013e+00 1.000013e+00 1.000013e+00 \n", - "min -1.946796e+00 -3.702976e+00 -2.173256e+00 -2.730140e+00 -3.206283e+00 \n", - "25% -7.137231e-01 -3.123495e-01 -7.750751e-01 -6.961120e-01 -7.429789e-01 \n", - "50% -5.893824e-02 3.429252e-01 2.377807e-01 -9.349948e-02 1.346874e-02 \n", - "75% 6.147169e-01 6.016747e-01 6.561341e-01 6.914159e-01 7.602183e-01 \n", - "max 6.995269e+00 1.613150e+00 1.779083e+00 3.690974e+00 2.585391e+00 \n", + " energy(kWh/hh) visibility windBearing temperature \\\n", + "2012-10-12 11:30:00 -0.444130 0.759528 0.800636 0.453439 \n", + "2012-10-12 12:00:00 1.660500 0.759528 0.724633 0.667233 \n", + "2012-10-12 12:30:00 0.013222 0.759528 0.724633 0.667233 \n", + "2012-10-12 13:00:00 -0.395562 0.759528 0.648631 0.689117 \n", + "2012-10-12 13:30:00 -0.217478 0.759528 0.648631 0.689117 \n", + "... ... ... ... ... \n", + "2014-02-27 22:00:00 0.660800 0.912217 0.246907 -0.975781 \n", + "2014-02-27 22:30:00 4.441040 0.912217 0.246907 -0.975781 \n", + "2014-02-27 23:00:00 4.024161 0.921760 0.073188 -1.004399 \n", + "2014-02-27 23:30:00 3.906788 0.921760 0.073188 -1.004399 \n", + "2014-02-28 00:00:00 4.590792 0.476418 -0.035387 -1.024600 \n", "\n", - " pressure apparentTemperature windSpeed humidity \\\n", - "count 3.924700e+04 3.924700e+04 3.924700e+04 3.924700e+04 \n", - "mean 5.086608e-15 -6.952083e-17 1.158681e-16 -8.110764e-17 \n", - "std 1.000013e+00 1.000013e+00 1.000013e+00 1.000013e+00 \n", - "min -3.338279e+00 -2.553322e+00 -1.904380e+00 -3.922565e+00 \n", - "25% -5.819161e-01 -7.782148e-01 -7.334959e-01 -5.691148e-01 \n", - "50% 4.476806e-02 6.995454e-02 -1.064117e-01 2.157353e-01 \n", - "75% 6.862901e-01 7.535537e-01 5.794616e-01 7.865354e-01 \n", - "max 2.560233e+00 3.255864e+00 5.326685e+00 1.571385e+00 \n", + " dewPoint pressure apparentTemperature windSpeed \\\n", + "2012-10-12 11:30:00 -0.305918 -0.458899 0.577361 1.406991 \n", + "2012-10-12 12:00:00 -0.336717 -0.448391 0.754344 1.387977 \n", + "2012-10-12 12:30:00 -0.336717 -0.448391 0.754344 1.387977 \n", + "2012-10-12 13:00:00 -0.305918 -0.433505 0.772460 1.426005 \n", + "2012-10-12 13:30:00 -0.305918 -0.433505 0.772460 1.426005 \n", + "... ... ... ... ... \n", + "2014-02-27 22:00:00 -0.852602 -0.597253 -0.980649 -0.465873 \n", + "2014-02-27 22:30:00 -0.852602 -0.597253 -0.980649 -0.465873 \n", + "2014-02-27 23:00:00 -0.858377 -0.689197 -0.979256 -0.594216 \n", + "2014-02-27 23:30:00 -0.858377 -0.689197 -0.979256 -0.594216 \n", + "2014-02-28 00:00:00 -0.873777 -0.781141 -0.972288 -0.698792 \n", "\n", - " holiday month day week hour \\\n", - "count 3.924700e+04 3.924700e+04 3.924700e+04 3.924700e+04 3.924700e+04 \n", - "mean -3.331207e-17 9.848785e-17 -1.303516e-16 5.793403e-17 -6.734831e-17 \n", - "std 1.000013e+00 1.000013e+00 1.000013e+00 1.000013e+00 1.000013e+00 \n", - "min -1.500332e-01 -1.457330e+00 -1.681079e+00 -1.549070e+00 -1.661862e+00 \n", - "25% -1.500332e-01 -9.128440e-01 -8.828511e-01 -9.237337e-01 -7.950405e-01 \n", - "50% -1.500332e-01 -9.611440e-02 2.940958e-02 -4.826216e-02 7.178048e-02 \n", - "75% -1.500332e-01 9.928584e-01 8.276377e-01 8.897430e-01 9.386015e-01 \n", - "max 6.665191e+00 1.537345e+00 1.739898e+00 1.640147e+00 1.660952e+00 \n", + " humidity holiday month day week \\\n", + "2012-10-12 11:30:00 -1.492695 -0.149604 0.857219 -0.445950 0.822749 \n", + "2012-10-12 12:00:00 -1.854084 -0.149604 0.857219 -0.445950 0.822749 \n", + "2012-10-12 12:30:00 -1.854084 -0.149604 0.857219 -0.445950 0.822749 \n", + "2012-10-12 13:00:00 -1.854084 -0.149604 0.857219 -0.445950 0.822749 \n", + "2012-10-12 13:30:00 -1.854084 -0.149604 0.857219 -0.445950 0.822749 \n", + "... ... ... ... ... ... \n", + "2014-02-27 22:00:00 0.386532 -0.149604 -1.203661 1.269408 -1.069273 \n", + "2014-02-27 22:30:00 0.386532 -0.149604 -1.203661 1.269408 -1.069273 \n", + "2014-02-27 23:00:00 0.458810 -0.149604 -1.203661 1.269408 -1.069273 \n", + "2014-02-27 23:30:00 0.458810 -0.149604 -1.203661 1.269408 -1.069273 \n", + "2014-02-28 00:00:00 0.458810 -0.149604 -1.203661 1.383766 -1.069273 \n", "\n", - " minute dayofweek \n", - "count 3.924700e+04 3.924700e+04 \n", - "mean -2.648162e-16 3.584668e-17 \n", - "std 1.000013e+00 1.000013e+00 \n", - "min -9.999745e-01 -1.498271e+00 \n", - "25% -9.999745e-01 -9.984948e-01 \n", - "50% -9.999745e-01 1.056932e-03 \n", - "75% 1.000025e+00 1.000609e+00 \n", - "max 1.000025e+00 1.500385e+00 " + " hour minute dayofweek Acorn_grouped stdorToU \\\n", + "2012-10-12 11:30:00 -0.072904 1.000041 0.499755 0.0 0.0 \n", + "2012-10-12 12:00:00 0.071557 -0.999959 0.499755 0.0 0.0 \n", + "2012-10-12 12:30:00 0.071557 1.000041 0.499755 0.0 0.0 \n", + "2012-10-12 13:00:00 0.216018 -0.999959 0.499755 0.0 0.0 \n", + "2012-10-12 13:30:00 0.216018 1.000041 0.499755 0.0 0.0 \n", + "... ... ... ... ... ... \n", + "2014-02-27 22:00:00 1.516170 -0.999959 0.000435 0.0 0.0 \n", + "2014-02-27 22:30:00 1.516170 1.000041 0.000435 0.0 0.0 \n", + "2014-02-27 23:00:00 1.660631 -0.999959 0.000435 0.0 0.0 \n", + "2014-02-27 23:30:00 1.660631 1.000041 0.000435 0.0 0.0 \n", + "2014-02-28 00:00:00 -1.661979 -0.999959 0.499755 0.0 0.0 \n", + "\n", + " LCLid \n", + "2012-10-12 11:30:00 0.0 \n", + "2012-10-12 12:00:00 0.0 \n", + "2012-10-12 12:30:00 0.0 \n", + "2012-10-12 13:00:00 0.0 \n", + "2012-10-12 13:30:00 0.0 \n", + "... ... \n", + "2014-02-27 22:00:00 0.0 \n", + "2014-02-27 22:30:00 0.0 \n", + "2014-02-27 23:00:00 0.0 \n", + "2014-02-27 23:30:00 0.0 \n", + "2014-02-28 00:00:00 0.0 \n", + "\n", + "[24119 rows x 19 columns]" ] }, - "execution_count": 6, + "execution_count": 162, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# Normalise\n", - "from sklearn.preprocessing import StandardScaler\n", - "input_columns = df.columns[1:]\n", - "out_columns = df.columns[:1]\n", - "scaler_input = StandardScaler()\n", - "scaler_output = StandardScaler()\n", - "df_norm = df.copy()\n", - "df_norm[input_columns] = scaler_input.fit_transform(df[input_columns])\n", - "df_norm[out_columns] = scaler_output.fit_transform(df[out_columns])\n", - "df_norm.describe()" + "import sklearn\n", + "from sklearn.preprocessing import StandardScaler, OrdinalEncoder\n", + "from sklearn_pandas import DataFrameMapper\n", + "\n", + "columns_input_numeric = list(df.drop(columns=columns_target)._get_numeric_data().columns)\n", + "columns_categorical = list(set(df.columns)-set(columns_input_numeric)-set(columns_target))\n", + "\n", + "output_scalers = [([n], StandardScaler()) for n in columns_target]\n", + "transformers=output_scalers + \\\n", + "[([n], StandardScaler()) for n in columns_input_numeric] + \\\n", + "[([n], OrdinalEncoder()) for n in columns_categorical]\n", + "scaler = DataFrameMapper(transformers, df_out=True)\n", + "df_norm = scaler.fit_transform(df)\n", + "df_norm" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 163, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:21.414354Z", - "start_time": "2020-10-16T04:36:21.411122Z" + "end_time": "2020-10-18T05:10:07.883594Z", + "start_time": "2020-10-18T05:10:07.834002Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "StandardScaler()" + ] + }, + "execution_count": 163, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "output_scaler = next(filter(lambda r:r[0][0] in columns_target, mapper4.features))[-1]\n", + "output_scaler" + ] + }, + { + "cell_type": "code", + "execution_count": 164, + "metadata": { + "ExecuteTime": { + "end_time": "2020-10-18T05:10:07.940549Z", + "start_time": "2020-10-18T05:10:07.885654Z" } }, "outputs": [], "source": [ - "# Resample\n", - "df_norm = df_norm.fillna(0)" + "# # Resample\n", + "df_norm = df_norm.resample(freq).first().fillna(0)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 165, "metadata": { "ExecuteTime": { - "end_time": "2020-10-10T05:04:20.745565Z", - "start_time": "2020-10-10T05:04:20.741168Z" - } - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "ExecuteTime": { - "end_time": "2020-10-16T04:36:23.402331Z", - "start_time": "2020-10-16T04:36:21.416369Z" + "end_time": "2020-10-18T05:10:11.052548Z", + "start_time": "2020-10-18T05:10:07.942532Z" }, "lines_to_next_cell": 0 }, @@ -1112,16 +1349,16 @@ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 8, + "execution_count": 165, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX4AAAEECAYAAAAvY19bAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAzP0lEQVR4nO3dd5hcdfX48ffJphcCKUBIgA3Sm5QQaSJFgYAgoKIo/sCGBRBEvhJQREQQEWIoAoIgvQYQSIGQRhLS2IT0XjbJJpvsZpNs73t+f8xssjs75c7MvXOnnNfz7LO7U+49U+65n/upoqoYY4zJHZ38DsAYY0xqWeI3xpgcY4nfGGNyjCV+Y4zJMZb4jTEmx1jiN8aYHNPZ7wCcGDBggObn5/sdhjHGZJT58+fvUNWBobdnROLPz8+noKDA7zCMMSajiMjGcLdbVY8xxuQYS/zGGJNjLPEbY0yOyYg6fmOMiVdjYyNFRUXU1dX5HYrnunfvzpAhQ+jSpYujx1viN8ZkpaKiIvr06UN+fj4i4nc4nlFVysrKKCoqYujQoY6eY1U9xpisVFdXR//+/bM66QOICP3794/rysYSv6GlxabmNtkp25N+q3hfpyX+HFdcXsthd43nrc83+x2KMVln9+7dPPnkk3E/75JLLmH37t3uBxRkiT/HrS+tBuB/C7f4HIkx2SdS4m9ubo76vPHjx7Pvvvt6FJU17hpjjGdGjhzJunXrOOmkk+jSpQu9e/dm0KBBLFy4kOXLl3PFFVewefNm6urquOWWW7jhhhuAvbMVVFVVMWLECM4++2xmzZrF4MGDef/99+nRo0dScVniN8ZkvXs/XMbyrRWubvPYg/bhnsuOi/qYBx98kKVLl7Jw4UKmTZvGpZdeytKlS/f0vnn++efp168ftbW1nHbaaXz729+mf//+7baxZs0aXn/9dZ599lmuvvpq3nnnHa699tqkYrfEb4wxKTJ8+PB2XS4fe+wx3nvvPQA2b97MmjVrOiT+oUOHctJJJwFw6qmnUlhYmHQclviNMVkvVsk8VXr16rXn72nTpjFp0iRmz55Nz549Offcc8N2yezWrduev/Py8qitrU06DmvcNcYYj/Tp04fKysqw95WXl7PffvvRs2dPVq5cyZw5c1IWl5X4c9ytby70OwRjslb//v0566yzOP744+nRowcHHHDAnvsuvvhinn76aU488USOOuooTj/99JTFZYk/x5VW1gOgNobLGE+89tprYW/v1q0bEyZMCHtfaz3+gAEDWLp06Z7bb7/9dldisqoeY4zJMZb4jTEmx1jiN8aYHGOJ3xhjcowlfmOMyTGW+I0xJsd4lvhF5HkRKRGRpW1u6ycin4jImuDv/bzav4mPYv05jXFbotMyA4wePZqamhqXIwrwssT/AnBxyG0jgcmqegQwOfi/McZkpXRN/J4N4FLV6SKSH3Lzt4Bzg3+/CEwD7vAqBmOM8VPbaZm/8Y1vsP/++/PWW29RX1/PlVdeyb333kt1dTVXX301RUVFNDc3c/fdd7N9+3a2bt3Keeedx4ABA5g6daqrcaV65O4BqloMoKrFIrJ/ivdvjMlFE0bCtiXubvPAE2DEg1Ef0nZa5okTJzJmzBjmzZuHqnL55Zczffp0SktLOeiggxg3bhwQmMOnb9++jBo1iqlTpzJgwAB34yaNG3dF5AYRKRCRgtLSUr/DMcaYpEycOJGJEydy8sknc8opp7By5UrWrFnDCSecwKRJk7jjjjuYMWMGffv29TyWVJf4t4vIoGBpfxBQEumBqvoM8AzAsGHDrOXRGJO4GCXzVFBV7rzzTn7xi190uG/+/PmMHz+eO++8kwsvvJA//elPnsaS6hL/B8B1wb+vA95P8f6NMSZl2k7LfNFFF/H8889TVVUFwJYtWygpKWHr1q307NmTa6+9lttvv50FCxZ0eK7bPCvxi8jrBBpyB4hIEXAP8CDwloj8FNgEfNer/Zv42Oycxriv7bTMI0aM4Ac/+AFnnHEGAL179+aVV15h7dq1/N///R+dOnWiS5cuPPXUUwDccMMNjBgxgkGDBrneuCuaAUf8sGHDtKCgwO8wslL+yECD0leG9uPNX5zhczTGuGfFihUcc8wxfoeRMuFer4jMV9VhoY9N28ZdY4wx3rDEb4wxOcYSvzHG5BhL/AYAEb8jMMZ9mdCG6YZ4X6clfmNMVurevTtlZWVZn/xVlbKyMrp37+74ObbYujEmKw0ZMoSioiJyYeR/9+7dGTJkiOPHW+I3gPXjN9mnS5cuDB061O8w0pJV9ZgO6hqbKSjc6XcYxhiPWOI3Hdz17hK+8/RsNu/0Zi5wY4y/LPGbDpYXVwBQVd/kcyTG5IAFL8Gf+0Jdecp2aYnfGGP8NPtfgd8VW1O2S0v8JqKq+iY+t7p+Y7KOJX4T0Y2vLuC7T8+mvLbR8XN+P2YRT01b52FUxmSptl3rGuugodqzXVniNwCE681ZUlkPQENTi+PtvFVQxN8/WulSVMbkgjDD5h87CR44yLM9WuI3xph0U1ns6eYt8ZuYNOz1gDHGVctTtyChJX5jjEkHn8a5LvC6KfDEcGiqj3tXlvhNTJV11p/fGM8kOjXu2NtgxyooL4r7qZb4TQeh8/Zc8Min/gRijPGEJX5jTG6bcAesz63CjSV+Y0xum/s0vHS5jwGkfhUkS/wmwDruGJMzLPEbY0yOscRvjDF+8mHBa0v8xhiTY3xJ/CLyWxFZJiJLReR1EXG+SrAxxiSjdheMuz0wEVqOSnniF5HBwG+AYap6PJAHfD/VcRhjctTUB+DzZ2HRa35HEpRoVU/iPTL8qurpDPQQkc5ATyB1KxAYY3JbS3AkujqfdTatJdBGkPLEr6pbgIeBTUAxUK6qE0MfJyI3iEiBiBSUlpamOkxjjMlaflT17Ad8CxgKHAT0EpFrQx+nqs+o6jBVHTZw4MBUh5nTbDZOY1Io9Z16fKnq+TqwQVVLVbUReBc404c4TAShc/UYY7KLH4l/E3C6iPQUEQEuAFb4EIcxxuQkP+r45wJjgAXAkmAMz8S7nTHzi/jT+0tdjs4YY1It9XU9nVO+R0BV7wHuSWYbt7+9CIC/fOt4N0IyxuSaHK7TtJG7xpgc40NrapqxxG+MMX6yuXqMX6wLp8k08zfuoqQid6ddSKaqyhK/MSYjffupWVz86Ay/w/BRa+KP/4ohZuOuiJwBXAt8FRgE1AJLgXHAK6paHvdejTHGBTurG/wOwX9uT9kgIhOAnwEfAxcTSPzHAn8EugPvi4ifa5YZD1iljzGplH7dOX+kqjtCbqsi0Ad/AfCIiAzwJDKTVvJHjmP9A5fQqZP1iDAm00Ut8YdJ+gk9xmSHWevK+PMHy/wOw5jk+NCLJt04atwVkatEZI2IlItIhYhUikiF18GZ9HLtc3N5YVah32EYkzu2LPBks0579TwEXK6qfVV1H1Xto6r7eBKR8UUOD2I0Jn09ex5Ulbi+WaeJf7uq2kRqOaCirpG1JVV+h2FM9mhqSK5kVV/pXixBsXr1XCUiVwEFIvKmiFzTelvwdpNl7nx3id8hmAy1tqSKZ6ev9zuM9NJUD38dCJ/8KfJjEm1zSOJcEqtXz2Vt/q4BLgzZ7buJ79qko9LKer9DMBnqqic/o6KuievOzKdrZxsbCkBjTeD3ghfhwvs82onLA7hU9ccJx2KMySk1Dc1ABnSaybQGLQ/idTQts4gMBH4O5Ld9jqr+xPWIjDE5TVWZsrKE84/eH0n7s4gb0neStveBvsAkAlM1tP4YY4yr3i4o4qcvFvDG55u92YEfJ5OkCu0+lfiBnqp6h+t7d8Hakkq27K7ja0faguzJyLCLX5PFtpbXAlBcng0zb7pwkvGgqsdpiX+siFzi+t5d8PVR07nu+Xl+h2GMMWE4SNo+XIFELfGLSCWByAW4S0Tqgcbg/2qDuLKQFf1Nusi0RljPpL6qp5+qNrq+V2OMiUCyamnE9KzqiZX4Z4tIEfAR8JGqFroegTEmq1hBPV6xTg4pTvyqOkxEDgVGAKNFZDAwE5gAfKqqNtonS2zdXWuDt0xS3K6q9vz8kfFnKA+XXlTVjar6tKpeAZwJfAh8HZghItalM0sUl9dx2v2T/A7DGEcnkIamlmT2kMRzfRDrBJXAGddpd87g/rURmBL8IXgFYLJJhh0TJjcd+ccJfocQn/pymDkazr61430xE7dP3TlF5CwR+UREVovI+tYfVd2SyE5FZF8RGSMiK0VkRXBdX5MOMv3q15h0Neked7eXRFWV0xL/c8BvgflAc8J72+tRAo3F3xGRrkBPF7ZpjHFZSUUdA/t082XqhITz2js/g2O/BcdcFvuxmSDmG+HyYuttlKvqBFUtUdWy1p+49waIyD7AOQROJqhqg6ruTmRbxhjvLCkqZ/gDk3nTq6kTIkj6FLPkbXjzWjdCSV6azjUUaz7+U0TkFGCqiPxDRM5ovS14eyIOA0qB/4rIFyLyHxHpleC2jDEeWVMSWABk7oadPkeS7dJs5C7wSMj/w9r8rcD5Ce7zFOBmVZ0rIo8CI4G72z5IRG4AbgA45JBDEthNR8/P3MDRB/bhzMMHuLI9Y0xH6lJDkVvbSZmKYujZDzp323ubK11GU9+P/zzX9whFQJGqzg3+P4ZA4g/d9zPAMwDDhg1z5ZX/ZexyAAofvNSNzcWkqhSX13HQvj1Ssj9j/BQYcZv8oZq62hEXE2pLC4w6Go65HL73snvbhdRP0iYiZSIyTkT+ICLnikjSjbCqug3YLCJHBW+6AFie7HbT0TPT13Pmg1NYW+L+mpnZrry2kfFLiv0OwxAowGQVT84swfdo5dj495VwPN4N4BpKoAdOF+AuAgn7cxF5VESuTnivcDPwqogsBk4CHkhiW2lr1rpA+/fmXbU+R+Kck8vrG14q8DyO295cyK9fXUDhjmrP92XC87tdMtz5ZtTEVeSPzLVxoykewKWqFcDE4A/BRtgfA7cCNwFvxb3HwHYX0r69wGSQicu3e76PouDJsq7Jjd7DJpNE6zr63MwNKYzEBwtfg5N+0P62VE/SJiIHEZim4UzgtODN84E/ArNdjyZbZdCVcnbNjGhMiiWUpNscc//7FQwOLROnfnbOImAB8E9gpKo2uB5BFvP7UtkYN2RQucVHLh7szybSWTI+sRL/WcAZwJXAbSJSSKCkPxsosNk5o/O6Taykoo7+vbuR18nOMMZ9fl/9eXb4pHtjdUNIZ5BU9+pR1dmqOkpVv6OqpwK/A+qBF4Fy16PJVh4cP6WV9Qx/YDIPfbTS/Y0bkwQv86ofU0d4LtZrqtkJH90FzRHWxKreAc1Nce0y5pQNInK0iPxERP5DYB7+PwBLCNTzGyc8OBB2Vgdq3aauKnF/48YkIkb+am5RXp5dmOSUyi7w9OQRerC7sK+P74Q5/4IVH4S//5mvwdhb4tpkrH78O4C3ga8AM4DLVPVAVb1SVR+Oa085yMvvl1ejGt3abnV9fCUQk/3emV/E3e8v46lp6xw9Pt1rZFKmOdi0Gu0NWR7hpBBBrDr+L6lquYj0U9V2E3aIyFBVzfK+VenP73rYSCrrmujVLa7lHmhu0Q7tFblw8K/aVkm/Xl0Z2Kdb7Af7wK3PoKIuUFVRXht9Ge9srM1Jig91/K31+B8GZ9UEQESOJbASl3Eg4+Yc8cH8jbv40l3jmbVuB5BbB/9Fo6dz3sPT/A6jg7g/A4+/5pc/MZOqTLqSbGmBTRF6vdfshIqtyW0/iROC02mZHyCQ/HuLyKkEqn/SZN7T3NT6mWdLgpyzPjDKecaaHb7GUdfYTEtL6k/UGZXQYoj1nZxXWMaPnptLc4z3ObTAtLgow/qTzH4cXoswwcFDh8GoYxxuKPX9+AO7VR0nIl0IjODtA1yhqmtcjyZLeVEdE+lkX9fYTNe8TnQKVpk0NreworiCE4fs63oM2UZVOfruj7hm+MH87aoT/Q7Hd15Vsy3dUgEEeqYd2Ld7h/vTtfoyujBvVulqh493+Hpd/EBiNe4+LiKPichjBKZg3gfYANwcvM044EVVT7htNrcEEte9Hy7bc9vfJ6zk8ic+Y/X29JoobvPOGvJHjmPWWn9L+OG8Pi+1C48Yn2RKA5KjMOM7Wcaq6ikgMEVD688/gHfa/G+iSEW5pW2/5opgo1nbxLV0a+DyeEeVs7F2qSptfV4Y6Cvw9vyilOzPxM/rakT/2r6CL2zR66nfdVMikx+4X68ba5K2F13bk0nKy7MLGT60P0cd2AcIX1i59c2FADQ0J95P2o+DceqqEhZu3g3sPVlmSmHMBEaQn/vwtD3fO6efnQ9NKe0VL/R4B2Fe4Nhb4Yon298WM6FHut+jxl0R+VBELgvW74fed5iI/EVEfpLw3hM0eUX02SEnLtvGqm3pVbWRrLvfX8ZFo6d3uL3tV2Lplsxp/GqbHH7838/5JMKMn9nSeJ2Jxi12th7C1FUl1DTEP4vqWQ9Oifs5GW/1R/E/p2qb62HEatz9OXAbMFpEdhJYK7c7gXn61wJPqOr7rkcVQ6QkAYG64xteDtRCpWqlrbZenrORzTtruOsSpy32yWmbGKMmSb9LVxFYXk9frdNvp+lXJ72VrIDVH7uzLScDuOIUq6pnG/B74Pcikg8MAmqB1apa41oULmqtO/bL3f9bCuBa4j/hno+5/KSDOtwevjtnxzTqdZ39uMXFdO/SiQuOOcCV7YWevKzKJ33kjxzHuUcN5IUfD293u2efkd+f/bqpsP8x0OfA+J/75OnuxxNNnIe5o378InITsDs4advCdE362aiyvolX526KeP8Wn1f3uvG1Bfz0xY4rcsVqK4h1TCdaxTNnfRl1jbZ4i1emrSpt9/+CTbt4fMpaV/eRNtV7L1+RkimS/bjudTqA60CgQETeEpGLJSunyPOOFyWi1gE/u2rCD3+vb2r2/erHERe/SWtLKvn+M3PadWeN5asPTeHNzyOfWE1ApMFWVz05iy27M2dp0bhVbPE7gr3iuRxWhTGRm18dJX5V/SNwBPAccD2wRkQeEJEvOXm+CQys+s+M9TFHK8bS2uAWbgHstt+Lv3y4nO8+PZu1pVWBxzvc/ueFu5KKzyt/m7CCT1eXRn3M7uBJcPX2Ksfb3byzljveWZJUbNlOVbnz3cWp32/K95hllr4T8S6nJX40kGm2BX+agP2AMSLyULLxuSkdr0VE4PyHp/HXcSt4uyC5wUE3vrYAiH1QrAz2aoo1IZZfwp24ovn3p+u57vl5nmzbxDbGhfEWTj8Wzw/htkmieNHevyu3wzs/g4YU12Q7TVqpGrnbSkR+IyLzgYeAz4ATVPVXwKnAt12LxgXxvDd1jc28OKvQ87lZVGFreR1AQt3enEqnc54fw+7T8aRv0ty/z9n79+R7YcnbsOxd/+JxS0N11LudlvgHAFep6kWq+raqNgKoagvwzeQijJ9bB/jjU9ZwzwfLeH9R7Hq8mWt2MDPOCcRS2RRSUddISeXe0bnzNwaqbLw6qSU7BYQX700yBSKnI5tNoHePXVWFcPx+pCgn1Ec/Pp0m/tFApYj0a/PTBUBVVyQXYfyivcfx5JPWOuGq+til8Gufm8u1z811vvEU21QW/vK0yaPEf+E/p9OYzAjhCB+iXxN0DfvrJF/2mwkUd07U4TaxdEs5Hy0NP1As7U8uLS1QuzvOJ6XqNUXfj9PEv4DA4K3VwJrg3xtEZEFwmmYThdvf3/LaxnbpcfKK7Xzz8ZmOYyjcUc2MNdEbSp1oceGFuZnoraon83zz8Zn88pUF7W6L93P8LN6J/tw6IKfcB38/NDC3fipEfWPiGwDjNPF/BFyiqgNUtT8wAngL+DXwZNRnRiAieSLyhYiMjf+5zh4XqSSR6b5878R2/98/Lr6LrnMfnsaPnnPWUOq3dC/05YKyqvqke6OBd5/lF5v29kRL6boGy/8X+F2bZE84Txp33Un8w1R1z/hjVZ0InKOqc4BE14u7BXC9mqhtCTK0JOGXtp+rW9/9dMiHyRzIrU997wubnTMZu6obok5h4oY56/0ZD+L0+/XwxNWMnrSaqatKOP4el6ZJyHJOE/9OEblDRA4N/vwe2CUieUDcFb0iMgS4FPhPvM+NxZY5zCyhBcnQwk8i1Te59A342UsF/PylAnbXJDLdb3pKpPpv9KQ1e1Zxi70Dl+sEfbssjTGAKwqnif8HwBDgf8Gfg4O35QER1haLajSBOYASbx3MIE6+F80tyq9emc+i4PTEcXHwPfbihBjt+Im0v41l1R422sV+I3ZVO0uQy7ZmxkynG8sC3fYam1OffE6975OU7OeLTbv2LNSeXtw6gXjROJVk4g+W6ker6s2qenLw52ZVLVXVBlWNa6IOEfkmUKKqURdyEZEbRKRARApKS2M3RD4xZQ3feWpWxNJCqg/kzTtrwkayuGg3U1Z2vDQv2lXDhKXbuPn1LxxtP93aMUdPirbMXMDiot187R/TeHFWoUfF8ugbnbCkmJPv+4QCB1NZrC1xPvo3F6lCWYSTaKTzeryFDwUamlq48slZXP10hEXLvbL47TgenAbXmHHObhgz8atqMzBQRLomE1cbZwGXi0gh8AZwvoi8Ema/z6jqMFUdNnDgwJgbfXjiago2hm9kmbV2B5c+FrnXy5j5RdQ3uTuw6qsPTWV5cUWH299fuJWfvNBxUrNQ60qr0m65xFBtv1ujJ8VegnnDjkDpdP6m3R5FFF1rVUCkdQsyuSG5bVLdWd1A/shxTF1V4mNEe436ZDVPTHG+RHfbHNbac2ylk/U13Pz83v1Z9Pvrq6Bud+Dv4kVQ3/FYDy9Mkc2NqqcOX97ob4ajxdaBQuAzEfkA2DMkTFVHxRNb8Dl3AncCiMi5wO2qem2824nHxp3Rh2Av2rybB8at4LZvHEXfnnvXnKlvamb8kmKuOGlwQvstDo7WTcQFj3zq+LHpVvqPZfKK7Zx9eH8Ptpxp74QbOr7m1qvb52Zs4Lyj9m933weLtrKzqp7rzxqakugAHpscSPpHB1ePi6S8tpF/frKagX0S7S+SpHjmz3/8FKgJtim881M4OMXTMMfiUh3/VmBs8PF92vyknXBT8jopyb04eyNf/stEattMqTB60hp+++YiT3tNtLQof/5gGetKU1+10NCUXBNLvAWV1kFANQ3N/Hv6+oT22dDUwouzCqN2L4z1eadDwb6qvonHJ69xpZtkLDUNTXz/mdmsK63iN69/wZ8/XO75PiEwAKvtVceqGFewoyau4oVZhbyzoCj4/CQDKFsX3+Nr4hgPUBWSE4radI+ecn98+3VD6MG4fmrUhzsq8avqvYFtSy9VjT4JRBxUdRowzcljl20tZ31pNZd9ueOiJG2NfNf5TIvhvlc/fmEeb9xwBgDbKwIl9oo69/sGn//IND686Wy2VdTxwqxCXppd6Po+YrnrveRmpYz3wGz71Vxf6uxrtGRLOSMenbHn/39/uo5HPllN186duGb4Ie0eOz3G7J3pNJv4Pz5ayYuzN3JI/57ubDDKZzF99Q7mrN/J3yesdGdfMZTXNtKjax5jFxc7brOCvaPMXatye/wUOOX/wYYZcNpP4cybXdpwDNPjnbcyzu9lS8veaqZIxv426t1OJ2k7Q0SWE+x3LyJfFpGEBm4l6tLHZsb1JWorNMF9tLSYURNX8VqYBU7a9VkOfgEj1ZWWVNTtucJoblFOuz/8sP9w3+P1pdUsKtq95//WpOS0W17bbTpJaH8bv7JDbxo3Ru9G4qhONozQVzJ+SftBeK2zjVaFORk/Otl5PXKy3l+4xXEPoXCqg1eW9Sm+6kqF9TsCV6/bQqo6vb4SCzt4a8FLsGsDTPyj8w1VejnwM+RV/rlvzNJ5B1Pug4eGQnWbKxRtgQkjYVeho03EM1fPRUAZgKouAs6J9oR0MS1M0v7lKwt4LI5VgyItOj38gclc/9/AJV5tYzOllfFP9BV6MFTUNbEiTKNwqB/+J755g5YXV7CtIvE2h3CiJZ3Rn3Ts5eNmkkqke+oLswoDz00yw2zZXcstbyzkV69G7ZgGBK4aw81p5EdDcrhdrt5eSVMScy55oe3XJJ73KdpKdXusmwIFz0d/zJS/Ot9pq1R+oCuDkx1om2rtunKY+xS8/WNHm4hnPv7QieQzYn276//7uevb/HjZNr760BQgcIUQa4GQDTti19+3/bLf+Ko3I45Du7om+131I3m5dfLYWd3A4wleIbS2jYSWaEPVNDTxlQcm84f3lrCruoEbX13QoT+6W+fCaB9FuPdsW3kd60uruPCf0/nHx6tc3V/rnfEMxgvXg831sSeq8PKVexcvd6qqBN6+PtCTJ+05e8+cJv7NInImoCLSVURux4PpFtJNpLfwD+8tYfPOvcvNxVog5IHxketWwzVGr98RXzNKGl7th33vHI3IDMkO0Z4xe10Zr8+Lf9lEBUa+s5hHwlyVuKm1o8CkFSU89ek6xi0p5nUnpdI4hL4/60qrHDUYn/63yTz0USDhL2gz140b1u2oJn/kOOZuaD9eIlpB4cJ/Tt9brdfmRblaldU6t068pt4Py96DJW9FeVCKSkGjjoMdyX9vnXbn/CXwKDAYKAImAjcmvfeEeZvq1pZUcvvbi1mYyCjaOLw2dxNjg9VIXk2fnK1U4Zpn5wB0aORduHk3tQ3N9OiaF/H5sRbEeWFWIfePW8G8P3w9+WDDcLs0++KsQp6cFujFcvzgfcLvM2SXczY4nOIgTrOCs2XG2xtud4T1o12zw91F4ROTRO7auR4qYsxttW2po0057dWzA/ihoy16oGODp7dJ8uujpke9P1zJJZGPc2yEtoNU8fJd9KoayGnPnH9NXctN5x9O9y55NDa3sCnGWI5QX7g4yCzaFBWhr6exuYXOnSTuHkitSR9g6Zb2bUSxtpTIZ/Xdp2dFvG/C0m1hbxdxtq/WeF3/Dk1NoO4eAg2n6WDaA7Ef09LYvtE3AkeJX0QGAj8H8ts+R1UjL+PuotrGFrrEflhKnP/ItIhD1f2SLj075raZJCtciTaROBPtgvnE1LUs2LSL687M5xcvt2+ELa9tTMl7Fm/su6obOPm+T7hzxNH84mtfcriPePbQ/jNJ5i1Y4OHo63TqdgvAig/d21Y8YwUStfz9mA9xWtXzPjADmERaNOr698WI1P/8sieiL4SSC773zBzXtxnpk/6bgz7ps9aVMWS/Hh1ufyxCo+5hd413FFMik8w5ec72ykBj8bsLtkRN/H//aCW9uuZx0/lHONp3ayJt7QrbalewasUqGWNIdr79UA6rYxI27raYD3Ga+Huq6h3JRZPdnA5IymVOTtePTV4T9Rrfj1P+2pJKymubOPXQ/drH4rBkmmxibW5R7np3Cb/42mEcNrA3TwWrdZwm/lafF7qcwFIgk+dPiuiz0X5H4LhXz1gRucTTSIznznt4mqvbi3cGy0VFzmZIjTbGYrvLYxGc+Pqo6Xz7qch12pG0PS10OEkEE9rEZR3rw0OryZZuKefNgs3c+ubCMPtIs2oRF2TfKwqxJJ6ZP73htMR/C3CniDQAjQQ+G1XV8N0HTFqqDdN1NBlX/zvyVLnhSmpPfxrn3Clh/G/h1rC3//A/4auZ3C4x1jQ08cbnoUNaOhq/pJhfOxiPMbFNz5fQJP7rV+fTNa8TP05yQrXYjbupKVY73c2aNgWKeKv7B5J5VzV+cFri7wtcD/wtmOyPA77hVVDReDnNQK5J9ngPNwbBbU4P/M/WetQ1cd3exrg568v4y4fLeSY4wdyGHdURB+89N3PDnr931zTueY4TrZ/L+CXbIp7ockW839Hp3aLPUZOc7LkWcZr4/wWcDlwT/L8SeMKTiGJ4MEUTTWWSeC73h0eYTygRuTD0oKJ27/wvP3h2Djuq2vfouu75eTw+eQ1jFztL0K0nsnBvXSIzdcY6MTpZuSpVH2O8pfcdVfFPgdJDvOxxlz1feKdVPV9R1VNE5AsAVd3l4sIscVm2tYITh+zrx66zQkkC8wllslT0DGwdAfzNE/fOHJvIblsnAwxNLz94NrHeUpt21nDinydyzpGxFzJKR2MXF2ds7OnOaYm/MbgEo8Kefv1pMqrBJDquIJESVerFTqHvfRFjNGMSfhMyI2yyJ5LWqot46tWrY4wyjqR10Fqs6arT2e/HLPY7hKzkNPE/BrwH7C8i9wMzAQfDyNyRGQnKP06ncs5Wv31zUcT7km3HaGgzc2Ws7ptNzS2MeHRG2DWV3bC4qJxJbRqDG5tbXKl1TlWXyczvmpk9dfxOp2x4VUTmAxcQePVXqGrWT9KWKdJxnh+3DvJ0G8QZza6aRlYUVzhaUzncSWRP/X+UN+9nL+3d9v3jVrA1ieU9TbzS7zhLlNM6flR1JZAWLasfh+n7bLJL69THXi57GS8hsFRmJLscXHlFS+6ts2U61bq+gDHxcjwffzrZmWZz5ZiOki0bxTs1dSRuXjE0tSiTV4ZfjQ1ot0RkMlJdrsyecqxxKiMTv8k8a0sSW4oxWamsV07FwunGTxlU7xiDJX7jidCqjIWbnU3XkCvsFGH8ZInfpET2lJVSwM4KaSp7PhhL/MYT6TKn+tvzvevjn4xYVVBuzGtkTCSW+I0nQqt60uQ8kBGUFE9Nkvkd7E2cLPGblLDE3569HxlorJcTwKVWyhO/iBwsIlNFZIWILBORW1IdgzF+aZ1QL1ohe4NLXVmNR6oydwqMVo4HcLmoCfidqi4QkT7AfBH5RFWX+xCL8UhlXVPsB+WgcGsR+83pAjkmyMHShuku5SV+VS1W1QXBvyuBFcDgVMdhvNW7W/syRTauFGVyVHPsqa7Tna91/CKSD5wMzA1z3w0iUiAisSc+MWknr1P7RG912u19sCi3F1jJaFnwZfYt8YtIb+Ad4FZVrQi9X1WfUdVhqjos9dEZY0wklvgTIiJdCCT9V1X1XT9iMMYPVuWVBazEHz8JjOx5DlihqqNSvX/jj3QZ0GWM8afEfxbwI+B8EVkY/LnEhziMh9Kv70p6SMdePSZOWVCISXl3TlWdSTZUkhmTRQp3VJM/oJffYZgUsZG7JiXsTB+QrnX89421YTTOpednGA9L/MYToYdGFlwdZzWrgIpDFnyZLfGblEjXkq4x8cv877IlfuMJK0FmlsxPZSlkJX5jnMmCYyWr2Yk6Hpn/ZbbEb1LinTRdEMUEZH4qS6EsKMVY4jeeCF2IZfLKEp8iSS8VdZk/wZexxG+MicP2ijq/QzDJshK/MeHZFA3hvVWQGVVe1fW2nkJYDdmxSI4lfmNMB0u22OIsYc3+F1bVY0wEoXX8Jr2Fflovz97oSxxpLwsWYQFL/MYjK7dV+h2CiUNoGXbckmJf4sgIS8f4HUHSLPEbY7KhvTJ1tMXvCJJmid8YYxzLjipMS/zGGJNjLPEbk2Ivzir0O4QOrC0+t1jiNybF7vlgmd8hxGR1/hGogmR+2sz8V2CMSVpoore8H0WnLn5HkDRL/MaYDmzkdRR5lviNMVnI0n4kCp1SvlS56yzxG2M66GQl/sisxG+MyUqW9yPL6+p3BEmzxG880aNLnt8hmCRY3o9ArarHmIjyOlnqyCztPy+r6onCqnoSIyIXi8gqEVkrIiP9iMF4q8VGBGWY9p+XnbejsO6c8RORPOBfwAjgWOAaETk21XEYb1nezywtIZ9XJ8v8EVhVT6KGA2tVdb2qNgBvAN/yIQ7jodrGZr9DMHEIXT/BqnqiyLPEn4jBwOY2/xcFbzPG+KRDid/yfniq1qsnQeG+Uh0qBkTkBhEpEJGCFMRkTE4LPQCtxB+Btlgdf4KKgIPb/D8E2Br6IFV9RlWHqeqwlEVmTI4KreqxKRsi0BbolPldlf1I/J8DR4jIUBHpCnwf+MCHOIzHGpv3rlRkeSS9hfbCsqqeKLKgO2fKWylUtUlEbgI+BvKA51U1/eepNXE74g8TePT7J7F8a4XfoZgYPltbRlNzC53zAmVBq+qJoKEK1k7yO4qk+dI8rarjgfF+7Nuk1i1vLAQCJUjr4ZnePl62nUtPHATYFVpE81/wOwJX2MhdYwwAN762gBXFdnWWCyzxm5QI7S5o0lNJZb3fIZgUyPyRCMYY11z3/DzA5lrKdlld4j98/95+h2BMRmq2S7SslrWJ/9RD92PSbV/zOwxjjEk7WZv4v3bkQL9DMMaYtJS1if+Gcw4D4CdnDfU5EmO89/g1J/sdAneOONqV7dz69SNiPuZvV53gyr5ylYQO1U5HBx95vOZd9fc9/w/P78ePzjiU2sZm/jp2OT88/VA276yhpLKeeRt28otzDuPOS44BoKm5hRdnb2RjWTXfO+1gJi7bztbdtQzerwdLt5QzdEAvuuR1orlFufC4A3jr8yJWl1SyqayGQ/v3ZE1JFZV1TfzuG0fyyCer6dujC906d9rT+6F7l07cdN7hdO3ciQfGr+S1n32FZlVenLWRa08/hOv/+/meuG8673D27dmFfr260tDUwrzCnezTvQvHDOrDgN7dWLKlnP16duWeD5ZxcL8ebNlVy8mH7Meh/XpSVt3Ap6tLAfj2KUOYtW4HJx28LxOWbgNgYJ9ulFbW07NrHjeedziH9OvJza9/AcAph+xLt8559O/dlbGLixlx/IF7nhfOo98/iXUlVTw2ZS0At1xwBO9+UcS9lx9H725dmL9xF3//aCVdO3fimtMOZsvuWi487kD+/MEyxvzyTC55bEbEbV/25YOorm+irLqBLbtq6dO9MxN/ew6VdU2sLali5prAa3xsylr+esXxPDdzA8cO2odxS4o5+sA+rNxW2W57g/ftwU/OHsrmnTWMmV/EcQftw9wNO9m/Tze65HViy+5aAEZd/WV+P2YxXztyIDPW7uDuS4/hkhMGcd/Y5fxv4VZOPXQ/zjliIP+ctJqXfzocVaioa2TaqlJWbavkiAN6s2Z7Fdefmc9VpwymqUXpkteJ9aVVjJlfxD49unDVyYNZsa2SdSVVXHT8gTQ0tTB0QC9qG5pZU1LJ5U981i72T//vXA7t36vDe7SprIY568u4+rTAzCZLt5TTv3dXOnfqRE1DE8XldZx+WH82ldXQ0NxCj655DN63B+U1jXy8bBun5u+HKqwvreKYQfvw8bJt5PfvRf6AXhzavyeFO6qZta6Mvj26MK9wJ6/N3RTx87r9wiPZWBY4tn5/8VEcd1DfPffVNDRRVd9EXUMLh/TvCQTaBnbXNNC7e2eq65tZWVzB4Qf0ZsbqHdz13hJm3nE+A/t0o7lFEQK9iPp070z3Lnl8snw7FxyzP13yOrFmeyUvzCrk5EP2Y8uuWk46ZF9q6ps4NX8/1pZUceaXBrCruoHNu2pQhbGLtzJn/U6uHjaY7278C91Xvtv+hfT7EuxcF/j7q7+DlePhnNth42dQXhSYf+fYy+Hz5+DckbDiA+g7BOoqIP+rsPJDWPDS3u31PQR+9F5gm421oM0w4Q44+pvQsz8sexd2rt/7+DNugvP/CPOeDexv3r/h8iegW2/YOAtamuCwc2H5BzDkNOixLxx1CTRUw6zHA4PGLn4Axt4GuzdCn0HwvVdg9yZY+CoceiYcdSn0ORAm/hGO+AYcfRmSlzc/3LQ3GZH4hw0bpgUFNldbplFVm/PFGB+JSNjEn7VVPcZ/lvSNSU+W+I0xJsdY4jfGmBxjid8YY3KMJX5jjMkxlviNMSbHWOI3xpgcY4nfGGNyTEYM4BKRSmBVnE/rC5S7GIbb2xsA7HBxe+BujOn+et2Oz4tt2mt2hx3LiTtKVft0uFVV0/4HKEjgOc+4HIPb24v7NaUyxnR/vW7HZ685PV+zRzHmzGuOFFs2V/V8mObb84KbMab76/UiPnvN6cmOZZdlSlVPgYaZbyKTZeNriibXXi/Ya84V6fyaI8WWKSX+Z/wOwAPZ+JqiybXXC/aac0U6v+awsWVEid8YY4x7MqXEb4wxxiWW+I0xJsdY4veYiFT5HUMqiciVIqIi4s46fBki1ucsItNEJC0bAOMlIkNE5H0RWSMi60TkURHpGuXxt4pIz1TG6IVsOpYt8Ru3XQPMBL4fz5NEJM+bcIybJLC6zrvA/1T1COBIoDdwf5Sn3QpkfOLPJpb4U0BEeovIZBFZICJLRORbwdvzRWSFiDwrIstEZKKI9PA73kSJSG/gLOCnBBO/iJwrItNF5D0RWS4iT4tIp+B9VSLyFxGZC5zhX+TuCL7WsW3+f0JErvcxJC+cD9Sp6n8BVLUZ+C3wExHpJSIPB7/ji0XkZhH5DXAQMFVEpvoYtyuy5Vi2xJ8adcCVqnoKcB7wiOxdl/AI4F+qehywG/i2PyG64grgI1VdDewUkVOCtw8HfgecAHwJuCp4ey9gqap+RVVnpjpYk5DjgPltb1DVCmAT8DNgKHCyqp4IvKqqjwFbgfNU9bxUB+uBrDiWLfGnhgAPiMhiYBIwGDggeN8GVV0Y/Hs+kJ/y6NxzDfBG8O83gv8DzFPV9cHS4evA2cHbm4F3UhuiSZIA4fqAC3AO8LSqNgGo6s5UBpYiWXEsd/Y7gBzxQ2AgcKqqNopIIdA9eF99m8c1A2l7eRiNiPQnUA1wvIgokEcgQYynY6Jo/b8ueDLIFk20L0x1j/TADLaMkJKsiOwDHAysJ/xJIZtkxbFsJf7U6AuUBL8o5wGH+h2QB74DvKSqh6pqvqoeDGwgULofLiJDg3X73yPQ+JuNNgLHikg3EekLXOB3QB6YDPQUkf8HexrlHwFeACYCvxSRzsH7+gWfUwl0nCEyM2XFsWyJ30PBA6AeeBUYJiIFBEoMK30NzBvXAO+F3PYO8ANgNvAgsJTAySD0cRmt9XNW1c3AW8BiAp/5F74G5gENDPW/EviuiKwBVhOo974L+A+Buv7FIrKIwGcPgWkDJmRy4262Hcs2ZYOHROTLwLOqOtzvWPwiIucCt6vqN30OxTP2OWe/bPuMrcTvERH5JYGGzD/6HYvxjn3O2S8bP2Mr8RtjTI6xEr9LRORgEZkaHMSxTERuCd7eT0Q+CQ5v/0RE9gve3j/4+CoReSJkWx+JyKLgdp62Ua3GpI6bx3KbbX4gIktT+TqiscTvnibgd6p6DHA6cKOIHAuMBCYHh7dPDv4PgQaxu4Hbw2zralX9MnA8ga5j3/U6eGPMHm4ey4jIVUBazfNjid8lqlqsqguCf1cCKwgM7vgW8GLwYS8SGN2KqlYHR6vWhdlWRfDPzkBXsr9vtDFpw81jOTiNyW3AX72P3DlL/B4QkXzgZGAucICqFkPgCwXs73AbHwMlBPpAj/EmUmNMNC4cy/cRGOdQ41WMibDE77LgGf4d4NY2Jfe4qepFwCCgG4ERscaYFEr2WBaRk4DDVTXtxq1Y4neRiHQh8EV5VVXfDd68XUQGBe8fRKAU74iq1gEfELjENMakiEvH8hnAqcFpHWYCR4rING8ijo8lfpcEZ+h7DlihqqPa3PUBcF3w7+uA92Nsp3ebL1dn4BIydHSgMZnIrWNZVZ9S1YNUNZ/A1CWrVfVc9yOOn/Xjd4mInA3MAJYALcGb7yJQN/gWcAiB4ezfbZ21MFgS2IdAA+5u4EKgDBhLoIonD5gC/LZ1xkNjjLfcOpZVdXmbbeYDY1X1+JS8iBgs8RtjTI6xqh5jjMkxlviNMSbHWOI3xpgcY4nfGGNyjCV+Y4zJMZb4jTEmx1jiN8aYHGOJ3xhjcsz/Bzsn5cJm+a5MAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] @@ -1147,140 +1384,406 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 166, "metadata": { "ExecuteTime": { - "end_time": "2020-10-14T22:36:25.702374Z", - "start_time": "2020-10-14T22:36:25.681535Z" + "end_time": "2020-10-18T05:10:11.115105Z", + "start_time": "2020-10-18T05:10:11.054595Z" }, "lines_to_next_cell": 2 }, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
energy(kWh/hh)visibilitywindBearingtemperaturedewPointpressureapparentTemperaturewindSpeedhumidityholidaymonthdayweekhourminutedayofweekAcorn_groupedstdorToULCLid
2012-10-12 11:30:00-0.4441300.7595280.8006360.453439-0.305918-0.4588990.5773611.406991-1.492695-0.1496040.857219-0.4459500.822749-0.0729041.0000410.4997550.00.00.0
2012-10-12 12:00:001.6605000.7595280.7246330.667233-0.336717-0.4483910.7543441.387977-1.854084-0.1496040.857219-0.4459500.8227490.071557-0.9999590.4997550.00.00.0
2012-10-12 12:30:000.0132220.7595280.7246330.667233-0.336717-0.4483910.7543441.387977-1.854084-0.1496040.857219-0.4459500.8227490.0715571.0000410.4997550.00.00.0
2012-10-12 13:00:00-0.3955620.7595280.6486310.689117-0.305918-0.4335050.7724601.426005-1.854084-0.1496040.857219-0.4459500.8227490.216018-0.9999590.4997550.00.00.0
2012-10-12 13:30:00-0.2174780.7595280.6486310.689117-0.305918-0.4335050.7724601.426005-1.854084-0.1496040.857219-0.4459500.8227490.2160181.0000410.4997550.00.00.0
............................................................
2014-02-27 22:00:000.6608000.9122170.246907-0.975781-0.852602-0.597253-0.980649-0.4658730.386532-0.149604-1.2036611.269408-1.0692731.516170-0.9999590.0004350.00.00.0
2014-02-27 22:30:004.4410400.9122170.246907-0.975781-0.852602-0.597253-0.980649-0.4658730.386532-0.149604-1.2036611.269408-1.0692731.5161701.0000410.0004350.00.00.0
2014-02-27 23:00:004.0241610.9217600.073188-1.004399-0.858377-0.689197-0.979256-0.5942160.458810-0.149604-1.2036611.269408-1.0692731.660631-0.9999590.0004350.00.00.0
2014-02-27 23:30:003.9067880.9217600.073188-1.004399-0.858377-0.689197-0.979256-0.5942160.458810-0.149604-1.2036611.269408-1.0692731.6606311.0000410.0004350.00.00.0
2014-02-28 00:00:004.5907920.476418-0.035387-1.024600-0.873777-0.781141-0.972288-0.6987920.458810-0.149604-1.2036611.383766-1.069273-1.661979-0.9999590.4997550.00.00.0
\n", + "

24170 rows × 19 columns

\n", + "
" + ], + "text/plain": [ + " energy(kWh/hh) visibility windBearing temperature \\\n", + "2012-10-12 11:30:00 -0.444130 0.759528 0.800636 0.453439 \n", + "2012-10-12 12:00:00 1.660500 0.759528 0.724633 0.667233 \n", + "2012-10-12 12:30:00 0.013222 0.759528 0.724633 0.667233 \n", + "2012-10-12 13:00:00 -0.395562 0.759528 0.648631 0.689117 \n", + "2012-10-12 13:30:00 -0.217478 0.759528 0.648631 0.689117 \n", + "... ... ... ... ... \n", + "2014-02-27 22:00:00 0.660800 0.912217 0.246907 -0.975781 \n", + "2014-02-27 22:30:00 4.441040 0.912217 0.246907 -0.975781 \n", + "2014-02-27 23:00:00 4.024161 0.921760 0.073188 -1.004399 \n", + "2014-02-27 23:30:00 3.906788 0.921760 0.073188 -1.004399 \n", + "2014-02-28 00:00:00 4.590792 0.476418 -0.035387 -1.024600 \n", + "\n", + " dewPoint pressure apparentTemperature windSpeed \\\n", + "2012-10-12 11:30:00 -0.305918 -0.458899 0.577361 1.406991 \n", + "2012-10-12 12:00:00 -0.336717 -0.448391 0.754344 1.387977 \n", + "2012-10-12 12:30:00 -0.336717 -0.448391 0.754344 1.387977 \n", + "2012-10-12 13:00:00 -0.305918 -0.433505 0.772460 1.426005 \n", + "2012-10-12 13:30:00 -0.305918 -0.433505 0.772460 1.426005 \n", + "... ... ... ... ... \n", + "2014-02-27 22:00:00 -0.852602 -0.597253 -0.980649 -0.465873 \n", + "2014-02-27 22:30:00 -0.852602 -0.597253 -0.980649 -0.465873 \n", + "2014-02-27 23:00:00 -0.858377 -0.689197 -0.979256 -0.594216 \n", + "2014-02-27 23:30:00 -0.858377 -0.689197 -0.979256 -0.594216 \n", + "2014-02-28 00:00:00 -0.873777 -0.781141 -0.972288 -0.698792 \n", + "\n", + " humidity holiday month day week \\\n", + "2012-10-12 11:30:00 -1.492695 -0.149604 0.857219 -0.445950 0.822749 \n", + "2012-10-12 12:00:00 -1.854084 -0.149604 0.857219 -0.445950 0.822749 \n", + "2012-10-12 12:30:00 -1.854084 -0.149604 0.857219 -0.445950 0.822749 \n", + "2012-10-12 13:00:00 -1.854084 -0.149604 0.857219 -0.445950 0.822749 \n", + "2012-10-12 13:30:00 -1.854084 -0.149604 0.857219 -0.445950 0.822749 \n", + "... ... ... ... ... ... \n", + "2014-02-27 22:00:00 0.386532 -0.149604 -1.203661 1.269408 -1.069273 \n", + "2014-02-27 22:30:00 0.386532 -0.149604 -1.203661 1.269408 -1.069273 \n", + "2014-02-27 23:00:00 0.458810 -0.149604 -1.203661 1.269408 -1.069273 \n", + "2014-02-27 23:30:00 0.458810 -0.149604 -1.203661 1.269408 -1.069273 \n", + "2014-02-28 00:00:00 0.458810 -0.149604 -1.203661 1.383766 -1.069273 \n", + "\n", + " hour minute dayofweek Acorn_grouped stdorToU \\\n", + "2012-10-12 11:30:00 -0.072904 1.000041 0.499755 0.0 0.0 \n", + "2012-10-12 12:00:00 0.071557 -0.999959 0.499755 0.0 0.0 \n", + "2012-10-12 12:30:00 0.071557 1.000041 0.499755 0.0 0.0 \n", + "2012-10-12 13:00:00 0.216018 -0.999959 0.499755 0.0 0.0 \n", + "2012-10-12 13:30:00 0.216018 1.000041 0.499755 0.0 0.0 \n", + "... ... ... ... ... ... \n", + "2014-02-27 22:00:00 1.516170 -0.999959 0.000435 0.0 0.0 \n", + "2014-02-27 22:30:00 1.516170 1.000041 0.000435 0.0 0.0 \n", + "2014-02-27 23:00:00 1.660631 -0.999959 0.000435 0.0 0.0 \n", + "2014-02-27 23:30:00 1.660631 1.000041 0.000435 0.0 0.0 \n", + "2014-02-28 00:00:00 -1.661979 -0.999959 0.499755 0.0 0.0 \n", + "\n", + " LCLid \n", + "2012-10-12 11:30:00 0.0 \n", + "2012-10-12 12:00:00 0.0 \n", + "2012-10-12 12:30:00 0.0 \n", + "2012-10-12 13:00:00 0.0 \n", + "2012-10-12 13:30:00 0.0 \n", + "... ... \n", + "2014-02-27 22:00:00 0.0 \n", + "2014-02-27 22:30:00 0.0 \n", + "2014-02-27 23:00:00 0.0 \n", + "2014-02-27 23:30:00 0.0 \n", + "2014-02-28 00:00:00 0.0 \n", + "\n", + "[24170 rows x 19 columns]" + ] + }, + "execution_count": 166, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "## Pytorch Dataset\n", - "\n", - "A sequence to sequence model needs a sequence of inputs and a sequence of outputs. \n", - "\n", - "Lets use the pytorch dataset class to provide an array interface that makes these sequences on the fly\n", - "\n", - "In the Dataset class we define a few methods:\n", - "\n", - "- `__init__`: What information is required to create the object and how this information is saved.\n", - "- `__len__`: Returns the number of data points (images) when we use `len()` function.\n", - "- `__getitem__`: We can define how indexing would work for this class.\n", - "\n", - "Out getitem returns:\n", - "\n", - "- x_past: The past inputs\n", - "- y_past: The past labels\n", - "- x_future: (optional) The future inputs\n", - "- y_future: The labels" + "df_norm" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 167, "metadata": { "ExecuteTime": { - "end_time": "2020-10-10T01:54:06.413882Z", - "start_time": "2020-10-10T01:54:06.398280Z" - } - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "ExecuteTime": { - "end_time": "2020-10-16T04:36:23.417088Z", - "start_time": "2020-10-16T04:36:23.404221Z" + "end_time": "2020-10-18T05:10:11.164373Z", + "start_time": "2020-10-18T05:10:11.118220Z" } }, "outputs": [], "source": [ - "class SmartMeterSeq2SeqDataSet(torch.utils.data.Dataset):\n", - " \"\"\"\n", - " Takes in dataframe and returns sequences through time.\n", - " \n", - " Returns x_past, y_past, x_future, etc.\n", - " \"\"\"\n", - " \n", - " def __init__(self, df, window_past=40, window_future=10, label_names=['energy(kWh/hh)']):\n", - " # Use numpy instead of pandas, for speed\n", - " self.x = df.drop(columns=label_names).copy().values\n", - " self.y = df[label_names].copy().values\n", - " self.t = df[label_names].index.copy()\n", - " self.columns = list(df.columns)\n", - " self.window_past = window_past\n", - " self.window_future = window_future\n", - " self.label_names = label_names\n", - "\n", - " def get_components(self, i):\n", - " \"\"\"Get past and future rows.\"\"\"\n", - " x = self.x[i : i + (self.window_past + self.window_future)].copy()\n", - " y = self.y[i : i + (self.window_past + self.window_future)].copy()\n", - " \n", - " # Add a feature, relative days since present time\n", - " tstp = (np.arange(len(x))-self.window_past)[:, None]\n", - " is_past = tstp<0\n", - " x = np.concatenate([x, tstp, is_past], -1)\n", - " \n", - " # Split into future and past\n", - " x_past = x[:self.window_past]\n", - " y_past = y[:self.window_past]\n", - " x_future = x[self.window_past:]\n", - " y_future = y[self.window_past:]\n", - " if not use_future:\n", - " # Stop it cheating by using future weather measurements\n", - " x_future[:, :8]=0\n", - " return x_past, y_past, x_future, y_future\n", - "\n", - "\n", - " def __getitem__(self, i):\n", - " \"\"\"This is how python implements square brackets\"\"\"\n", - " if i<0:\n", - " # Handle negative integers\n", - " i = len(self)+i\n", - " data = self.get_components(i)\n", - " # From dataframe to torch\n", - " return [d.astype(np.float32) for d in data]\n", - " \n", - " \n", - " def get_rows(self, i):\n", - " \"\"\"\n", - " Output pandas dataframes for display purposes.\n", - " \"\"\"\n", - " x_cols = list(self.columns)[1:] + ['tstp', 'is_past']\n", - " x_past, y_past, x_future, y_future = self.get_components(i)\n", - " t_past = self.t[i:i+self.window_past]\n", - " t_future = self.t[i+self.window_past:i+self.window_past + self.window_future]\n", - " x_past = pd.DataFrame(x_past, columns=x_cols, index=t_past)\n", - " x_future = pd.DataFrame(x_future, columns=x_cols, index=t_future)\n", - " y_past = pd.DataFrame(y_past, columns=self.label_names, index=t_past)\n", - " y_future = pd.DataFrame(y_future, columns=self.label_names, index=t_future)\n", - " return x_past, y_past, x_future, y_future\n", - " \n", - " def __len__(self):\n", - " return len(self.x) - (self.window_past + self.window_future)\n", - " \n", - " def __repr__(self):\n", - " return f'<{type(self).__name__}(df.shape={self.x.shape})>'" + "columns_blank=['visibility',\n", + " 'windBearing', 'temperature', 'dewPoint', 'pressure',\n", + " 'apparentTemperature', 'windSpeed', 'humidity']" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 168, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:23.495185Z", - "start_time": "2020-10-16T04:36:23.418310Z" + "end_time": "2020-10-18T05:10:11.231829Z", + "start_time": "2020-10-18T05:10:11.166878Z" } }, "outputs": [ @@ -1288,64 +1791,87 @@ "name": "stdout", "output_type": "stream", "text": [ - "\n", - "\n" + "\n", + "\n" ] } ], "source": [ - "ds_train = SmartMeterSeq2SeqDataSet(df_train, window_past=window_past, window_future=window_future)\n", - "ds_test = SmartMeterSeq2SeqDataSet(df_test, window_past=window_past, window_future=window_future)\n", + "ds_train = Seq2SeqDataSet(df_train,\n", + " window_past=window_past,\n", + " window_future=window_future,\n", + " columns_blank=columns_blank)\n", + "ds_test = Seq2SeqDataSet(df_test,\n", + " window_past=window_past,\n", + " window_future=window_future,\n", + " columns_blank=columns_blank)\n", "print(ds_train)\n", "print(ds_test)" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 172, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:23.546799Z", - "start_time": "2020-10-16T04:36:23.496472Z" + "end_time": "2020-10-18T05:10:48.082215Z", + "start_time": "2020-10-18T05:10:33.412624Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "180 ms ± 5.28 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)\n" + ] + } + ], + "source": [ + "%%timeit\n", + "for i in range(100):\n", + " ds_train[i]" + ] + }, + { + "cell_type": "code", + "execution_count": 169, + "metadata": { + "ExecuteTime": { + "end_time": "2020-10-18T05:10:11.286456Z", + "start_time": "2020-10-18T05:10:11.233988Z" } }, "outputs": [ { "data": { "text/plain": [ - "array([[ 0. , 0. , 0. , ..., -0.49871895,\n", - " 0. , 0. ],\n", - " [ 0. , 0. , 0. , ..., -0.49871895,\n", - " 1. , 0. ],\n", - " [ 0. , 0. , 0. , ..., -0.49871895,\n", - " 2. , 0. ],\n", - " ...,\n", - " [ 0. , 0. , 0. , ..., 1.5003846 ,\n", - " 189. , 0. ],\n", - " [ 0. , 0. , 0. , ..., 1.5003846 ,\n", - " 190. , 0. ],\n", - " [ 0. , 0. , 0. , ..., 1.5003846 ,\n", - " 191. , 0. ]], dtype=float32)" + "array([ 0. , 0. , 0. , 0. , 0. ,\n", + " 0. , 0. , 0. , -0.1496042 , 0.85721916,\n", + " 0.4689078 , 0.88187414, -0.21736582, 1.0000415 , 0.9990746 ,\n", + " 0. , 0. , 0. , 3.9583333 , 0. ],\n", + " dtype=float32)" ] }, - "execution_count": 11, + "execution_count": 169, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "# we can treat it like an array\n", "ds_train[0]\n", "len(ds_train)\n", - "ds_train[0][2]" + "ds_train[0][2][-2]" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 170, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:23.789576Z", - "start_time": "2020-10-16T04:36:23.548125Z" + "end_time": "2020-10-18T05:10:11.668935Z", + "start_time": "2020-10-18T05:10:11.288600Z" } }, "outputs": [ @@ -1385,109 +1911,127 @@ " hour\n", " minute\n", " dayofweek\n", - " tstp\n", + " Acorn_grouped\n", + " stdorToU\n", + " LCLid\n", + " tsp_days\n", " is_past\n", " \n", " \n", " \n", " \n", - " 2011-12-07 11:30:00\n", - " 0.598314\n", - " 0.788246\n", - " -0.331506\n", - " -0.915604\n", - " -0.597627\n", - " -0.664282\n", - " 2.499907\n", - " -1.068565\n", - " -0.150033\n", - " 1.537345\n", - " -0.996884\n", - " 1.452546\n", - " -0.072690\n", - " 1.000025\n", - " -0.498719\n", - " -5.0\n", + " 2012-10-16 14:00:00\n", + " 0.540038\n", + " 0.529200\n", + " 0.815373\n", + " -0.344417\n", + " -0.843313\n", + " 0.876978\n", + " 2.267368\n", + " -2.070918\n", + " -0.149604\n", + " 0.857219\n", + " 0.011479\n", + " 0.881874\n", + " 0.360479\n", + " -0.999959\n", + " -0.998205\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " -0.104167\n", " 1.0\n", " \n", " \n", - " 2011-12-07 12:00:00\n", - " 0.517665\n", - " 0.854302\n", - " -0.255547\n", - " -1.183270\n", - " -0.561841\n", - " -0.609425\n", - " 2.916330\n", - " -1.639365\n", - " -0.150033\n", - " 1.537345\n", - " -0.996884\n", - " 1.452546\n", - " 0.071780\n", - " -0.999975\n", - " -0.498719\n", - " -4.0\n", + " 2012-10-16 14:30:00\n", + " 0.540038\n", + " 0.529200\n", + " 0.815373\n", + " -0.344417\n", + " -0.843313\n", + " 0.876978\n", + " 2.267368\n", + " -2.070918\n", + " -0.149604\n", + " 0.857219\n", + " 0.011479\n", + " 0.881874\n", + " 0.360479\n", + " 1.000041\n", + " -0.998205\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " -0.083333\n", " 1.0\n", " \n", " \n", - " 2011-12-07 12:30:00\n", - " 0.517665\n", - " 0.854302\n", - " -0.255547\n", - " -1.183270\n", - " -0.561841\n", - " -0.609425\n", - " 2.916330\n", - " -1.639365\n", - " -0.150033\n", - " 1.537345\n", - " -0.996884\n", - " 1.452546\n", - " 0.071780\n", - " 1.000025\n", - " -0.498719\n", - " -3.0\n", + " 2012-10-16 15:00:00\n", + " 0.600477\n", + " 0.518342\n", + " 0.798539\n", + " -0.261644\n", + " -0.818795\n", + " 0.863042\n", + " 1.753994\n", + " -1.998640\n", + " -0.149604\n", + " 0.857219\n", + " 0.011479\n", + " 0.881874\n", + " 0.504941\n", + " -0.999959\n", + " -0.998205\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " -0.062500\n", " 1.0\n", " \n", " \n", - " 2011-12-07 13:00:00\n", - " 0.598314\n", - " 0.898339\n", - " -0.260611\n", - " -1.377231\n", - " -0.491143\n", - " -0.603799\n", - " 2.754660\n", - " -1.924765\n", - " -0.150033\n", - " 1.537345\n", - " -0.996884\n", - " 1.452546\n", - " 0.216251\n", - " -0.999975\n", - " -0.498719\n", - " -2.0\n", + " 2012-10-16 15:30:00\n", + " 0.600477\n", + " 0.518342\n", + " 0.798539\n", + " -0.261644\n", + " -0.818795\n", + " 0.863042\n", + " 1.753994\n", + " -1.998640\n", + " -0.149604\n", + " 0.857219\n", + " 0.011479\n", + " 0.881874\n", + " 0.504941\n", + " 1.000041\n", + " -0.998205\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " -0.041667\n", " 1.0\n", " \n", " \n", - " 2011-12-07 13:30:00\n", - " 0.598314\n", - " 0.898339\n", - " -0.260611\n", - " -1.377231\n", - " -0.491143\n", - " -0.603799\n", - " 2.754660\n", - " -1.924765\n", - " -0.150033\n", - " 1.537345\n", - " -0.996884\n", - " 1.452546\n", - " 0.216251\n", - " 1.000025\n", - " -0.498719\n", - " -1.0\n", + " 2012-10-16 16:00:00\n", + " 0.492323\n", + " 0.485770\n", + " 0.635248\n", + " -0.232770\n", + " -0.805660\n", + " 0.727866\n", + " 0.741507\n", + " -1.709528\n", + " -0.149604\n", + " 0.857219\n", + " 0.011479\n", + " 0.881874\n", + " 0.649402\n", + " -0.999959\n", + " -0.998205\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " -0.020833\n", " 1.0\n", " \n", " \n", @@ -1496,41 +2040,48 @@ ], "text/plain": [ " visibility windBearing temperature dewPoint pressure \\\n", - "2011-12-07 11:30:00 0.598314 0.788246 -0.331506 -0.915604 -0.597627 \n", - "2011-12-07 12:00:00 0.517665 0.854302 -0.255547 -1.183270 -0.561841 \n", - "2011-12-07 12:30:00 0.517665 0.854302 -0.255547 -1.183270 -0.561841 \n", - "2011-12-07 13:00:00 0.598314 0.898339 -0.260611 -1.377231 -0.491143 \n", - "2011-12-07 13:30:00 0.598314 0.898339 -0.260611 -1.377231 -0.491143 \n", + "2012-10-16 14:00:00 0.540038 0.529200 0.815373 -0.344417 -0.843313 \n", + "2012-10-16 14:30:00 0.540038 0.529200 0.815373 -0.344417 -0.843313 \n", + "2012-10-16 15:00:00 0.600477 0.518342 0.798539 -0.261644 -0.818795 \n", + "2012-10-16 15:30:00 0.600477 0.518342 0.798539 -0.261644 -0.818795 \n", + "2012-10-16 16:00:00 0.492323 0.485770 0.635248 -0.232770 -0.805660 \n", "\n", " apparentTemperature windSpeed humidity holiday \\\n", - "2011-12-07 11:30:00 -0.664282 2.499907 -1.068565 -0.150033 \n", - "2011-12-07 12:00:00 -0.609425 2.916330 -1.639365 -0.150033 \n", - "2011-12-07 12:30:00 -0.609425 2.916330 -1.639365 -0.150033 \n", - "2011-12-07 13:00:00 -0.603799 2.754660 -1.924765 -0.150033 \n", - "2011-12-07 13:30:00 -0.603799 2.754660 -1.924765 -0.150033 \n", + "2012-10-16 14:00:00 0.876978 2.267368 -2.070918 -0.149604 \n", + "2012-10-16 14:30:00 0.876978 2.267368 -2.070918 -0.149604 \n", + "2012-10-16 15:00:00 0.863042 1.753994 -1.998640 -0.149604 \n", + "2012-10-16 15:30:00 0.863042 1.753994 -1.998640 -0.149604 \n", + "2012-10-16 16:00:00 0.727866 0.741507 -1.709528 -0.149604 \n", "\n", " month day week hour minute \\\n", - "2011-12-07 11:30:00 1.537345 -0.996884 1.452546 -0.072690 1.000025 \n", - "2011-12-07 12:00:00 1.537345 -0.996884 1.452546 0.071780 -0.999975 \n", - "2011-12-07 12:30:00 1.537345 -0.996884 1.452546 0.071780 1.000025 \n", - "2011-12-07 13:00:00 1.537345 -0.996884 1.452546 0.216251 -0.999975 \n", - "2011-12-07 13:30:00 1.537345 -0.996884 1.452546 0.216251 1.000025 \n", + "2012-10-16 14:00:00 0.857219 0.011479 0.881874 0.360479 -0.999959 \n", + "2012-10-16 14:30:00 0.857219 0.011479 0.881874 0.360479 1.000041 \n", + "2012-10-16 15:00:00 0.857219 0.011479 0.881874 0.504941 -0.999959 \n", + "2012-10-16 15:30:00 0.857219 0.011479 0.881874 0.504941 1.000041 \n", + "2012-10-16 16:00:00 0.857219 0.011479 0.881874 0.649402 -0.999959 \n", "\n", - " dayofweek tstp is_past \n", - "2011-12-07 11:30:00 -0.498719 -5.0 1.0 \n", - "2011-12-07 12:00:00 -0.498719 -4.0 1.0 \n", - "2011-12-07 12:30:00 -0.498719 -3.0 1.0 \n", - "2011-12-07 13:00:00 -0.498719 -2.0 1.0 \n", - "2011-12-07 13:30:00 -0.498719 -1.0 1.0 " + " dayofweek Acorn_grouped stdorToU LCLid tsp_days \\\n", + "2012-10-16 14:00:00 -0.998205 0.0 0.0 0.0 -0.104167 \n", + "2012-10-16 14:30:00 -0.998205 0.0 0.0 0.0 -0.083333 \n", + "2012-10-16 15:00:00 -0.998205 0.0 0.0 0.0 -0.062500 \n", + "2012-10-16 15:30:00 -0.998205 0.0 0.0 0.0 -0.041667 \n", + "2012-10-16 16:00:00 -0.998205 0.0 0.0 0.0 -0.020833 \n", + "\n", + " is_past \n", + "2012-10-16 14:00:00 1.0 \n", + "2012-10-16 14:30:00 1.0 \n", + "2012-10-16 15:00:00 1.0 \n", + "2012-10-16 15:30:00 1.0 \n", + "2012-10-16 16:00:00 1.0 " ] }, - "execution_count": 12, + "execution_count": 170, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -1557,11 +2108,11 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 171, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:23.809966Z", - "start_time": "2020-10-16T04:36:23.790927Z" + "end_time": "2020-10-18T05:10:11.730692Z", + "start_time": "2020-10-18T05:10:11.670641Z" } }, "outputs": [ @@ -1601,13 +2152,16 @@ " hour\n", " minute\n", " dayofweek\n", - " tstp\n", + " Acorn_grouped\n", + " stdorToU\n", + " LCLid\n", + " tsp_days\n", " is_past\n", " \n", " \n", " \n", " \n", - " 2011-12-11 11:30:00\n", + " 2012-10-20 14:00:00\n", " 0.0\n", " 0.0\n", " 0.0\n", @@ -1616,18 +2170,21 @@ " 0.0\n", " 0.0\n", " 0.0\n", - " -0.150033\n", - " 1.537345\n", - " -0.540753\n", - " 1.452546\n", - " -0.072690\n", - " 1.000025\n", - " 1.500385\n", - " 187.0\n", + " -0.149604\n", + " 0.857219\n", + " 0.468908\n", + " 0.881874\n", + " 0.360479\n", + " -0.999959\n", + " 0.999075\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 3.895833\n", " 0.0\n", " \n", " \n", - " 2011-12-11 12:00:00\n", + " 2012-10-20 14:30:00\n", " 0.0\n", " 0.0\n", " 0.0\n", @@ -1636,18 +2193,21 @@ " 0.0\n", " 0.0\n", " 0.0\n", - " -0.150033\n", - " 1.537345\n", - " -0.540753\n", - " 1.452546\n", - " 0.071780\n", - " -0.999975\n", - " 1.500385\n", - " 188.0\n", + " -0.149604\n", + " 0.857219\n", + " 0.468908\n", + " 0.881874\n", + " 0.360479\n", + " 1.000041\n", + " 0.999075\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 3.916667\n", " 0.0\n", " \n", " \n", - " 2011-12-11 12:30:00\n", + " 2012-10-20 15:00:00\n", " 0.0\n", " 0.0\n", " 0.0\n", @@ -1656,18 +2216,21 @@ " 0.0\n", " 0.0\n", " 0.0\n", - " -0.150033\n", - " 1.537345\n", - " -0.540753\n", - " 1.452546\n", - " 0.071780\n", - " 1.000025\n", - " 1.500385\n", - " 189.0\n", + " -0.149604\n", + " 0.857219\n", + " 0.468908\n", + " 0.881874\n", + " 0.504941\n", + " -0.999959\n", + " 0.999075\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 3.937500\n", " 0.0\n", " \n", " \n", - " 2011-12-11 13:00:00\n", + " 2012-10-20 15:30:00\n", " 0.0\n", " 0.0\n", " 0.0\n", @@ -1676,18 +2239,21 @@ " 0.0\n", " 0.0\n", " 0.0\n", - " -0.150033\n", - " 1.537345\n", - " -0.540753\n", - " 1.452546\n", - " 0.216251\n", - " -0.999975\n", - " 1.500385\n", - " 190.0\n", + " -0.149604\n", + " 0.857219\n", + " 0.468908\n", + " 0.881874\n", + " 0.504941\n", + " 1.000041\n", + " 0.999075\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 3.958333\n", " 0.0\n", " \n", " \n", - " 2011-12-11 13:30:00\n", + " 2012-10-20 16:00:00\n", " 0.0\n", " 0.0\n", " 0.0\n", @@ -1696,14 +2262,17 @@ " 0.0\n", " 0.0\n", " 0.0\n", - " -0.150033\n", - " 1.537345\n", - " -0.540753\n", - " 1.452546\n", - " 0.216251\n", - " 1.000025\n", - " 1.500385\n", - " 191.0\n", + " -0.149604\n", + " 0.857219\n", + " 0.468908\n", + " 0.881874\n", + " 0.649402\n", + " -0.999959\n", + " 0.999075\n", + " 0.0\n", + " 0.0\n", + " 0.0\n", + " 3.979167\n", " 0.0\n", " \n", " \n", @@ -1712,35 +2281,42 @@ ], "text/plain": [ " visibility windBearing temperature dewPoint pressure \\\n", - "2011-12-11 11:30:00 0.0 0.0 0.0 0.0 0.0 \n", - "2011-12-11 12:00:00 0.0 0.0 0.0 0.0 0.0 \n", - "2011-12-11 12:30:00 0.0 0.0 0.0 0.0 0.0 \n", - "2011-12-11 13:00:00 0.0 0.0 0.0 0.0 0.0 \n", - "2011-12-11 13:30:00 0.0 0.0 0.0 0.0 0.0 \n", + "2012-10-20 14:00:00 0.0 0.0 0.0 0.0 0.0 \n", + "2012-10-20 14:30:00 0.0 0.0 0.0 0.0 0.0 \n", + "2012-10-20 15:00:00 0.0 0.0 0.0 0.0 0.0 \n", + "2012-10-20 15:30:00 0.0 0.0 0.0 0.0 0.0 \n", + "2012-10-20 16:00:00 0.0 0.0 0.0 0.0 0.0 \n", "\n", " apparentTemperature windSpeed humidity holiday \\\n", - "2011-12-11 11:30:00 0.0 0.0 0.0 -0.150033 \n", - "2011-12-11 12:00:00 0.0 0.0 0.0 -0.150033 \n", - "2011-12-11 12:30:00 0.0 0.0 0.0 -0.150033 \n", - "2011-12-11 13:00:00 0.0 0.0 0.0 -0.150033 \n", - "2011-12-11 13:30:00 0.0 0.0 0.0 -0.150033 \n", + "2012-10-20 14:00:00 0.0 0.0 0.0 -0.149604 \n", + "2012-10-20 14:30:00 0.0 0.0 0.0 -0.149604 \n", + "2012-10-20 15:00:00 0.0 0.0 0.0 -0.149604 \n", + "2012-10-20 15:30:00 0.0 0.0 0.0 -0.149604 \n", + "2012-10-20 16:00:00 0.0 0.0 0.0 -0.149604 \n", "\n", " month day week hour minute \\\n", - "2011-12-11 11:30:00 1.537345 -0.540753 1.452546 -0.072690 1.000025 \n", - "2011-12-11 12:00:00 1.537345 -0.540753 1.452546 0.071780 -0.999975 \n", - "2011-12-11 12:30:00 1.537345 -0.540753 1.452546 0.071780 1.000025 \n", - "2011-12-11 13:00:00 1.537345 -0.540753 1.452546 0.216251 -0.999975 \n", - "2011-12-11 13:30:00 1.537345 -0.540753 1.452546 0.216251 1.000025 \n", + "2012-10-20 14:00:00 0.857219 0.468908 0.881874 0.360479 -0.999959 \n", + "2012-10-20 14:30:00 0.857219 0.468908 0.881874 0.360479 1.000041 \n", + "2012-10-20 15:00:00 0.857219 0.468908 0.881874 0.504941 -0.999959 \n", + "2012-10-20 15:30:00 0.857219 0.468908 0.881874 0.504941 1.000041 \n", + "2012-10-20 16:00:00 0.857219 0.468908 0.881874 0.649402 -0.999959 \n", "\n", - " dayofweek tstp is_past \n", - "2011-12-11 11:30:00 1.500385 187.0 0.0 \n", - "2011-12-11 12:00:00 1.500385 188.0 0.0 \n", - "2011-12-11 12:30:00 1.500385 189.0 0.0 \n", - "2011-12-11 13:00:00 1.500385 190.0 0.0 \n", - "2011-12-11 13:30:00 1.500385 191.0 0.0 " + " dayofweek Acorn_grouped stdorToU LCLid tsp_days \\\n", + "2012-10-20 14:00:00 0.999075 0.0 0.0 0.0 3.895833 \n", + "2012-10-20 14:30:00 0.999075 0.0 0.0 0.0 3.916667 \n", + "2012-10-20 15:00:00 0.999075 0.0 0.0 0.0 3.937500 \n", + "2012-10-20 15:30:00 0.999075 0.0 0.0 0.0 3.958333 \n", + "2012-10-20 16:00:00 0.999075 0.0 0.0 0.0 3.979167 \n", + "\n", + " is_past \n", + "2012-10-20 14:00:00 0.0 \n", + "2012-10-20 14:30:00 0.0 \n", + "2012-10-20 15:00:00 0.0 \n", + "2012-10-20 15:30:00 0.0 \n", + "2012-10-20 16:00:00 0.0 " ] }, - "execution_count": 13, + "execution_count": 171, "metadata": {}, "output_type": "execute_result" } @@ -1750,153 +2326,6 @@ "x_future.tail()" ] }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "ExecuteTime": { - "end_time": "2020-10-16T04:36:23.862674Z", - "start_time": "2020-10-16T04:36:23.811251Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "31014\n" - ] - }, - { - "data": { - "text/plain": [ - "(192, 17)" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "# and treat it like an array\n", - "print(len(ds_train))\n", - "ds_train[0][0].shape" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "ExecuteTime": { - "end_time": "2020-10-14T06:56:02.750012Z", - "start_time": "2020-10-14T06:56:02.690554Z" - } - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "

Exercise: Dataset

\n", - "\n", - " Lets understand the dataset by using it\n", - " \n", - " - get the 2nd to last element of the dataset\n", - " - get the shape of each of the 4 returned elements of ds_train[0]\n", - " - get the type of each of the 4 returned elements of ds_train[0]\n", - "
\n", - " \n", - " → Hints\n", - " \n", - " \n", - " - `type(x)`\n", - " - `x.shape`\n", - "\n", - "
\n", - "
\n", - "
\n", - "
\n", - " \n", - " → Solution\n", - " \n", - "\n", - " ```python\n", - " # x_past, y_past, x_future, y_future\n", - " print(ds_train[-2])\n", - " print([x.shape for x in ds_train[0]])\n", - " print([type(x) for x in ds_train[0]])\n", - " ```\n", - " or \n", - "\n", - " ```python\n", - " print(ds_train[-2])\n", - " for x in ds_train[0]:\n", - " print(x.shape)\n", - " print(type(x))\n", - " ```\n", - "\n", - " \n", - "
\n", - "\n", - "
" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "ExecuteTime": { - "end_time": "2020-10-14T06:56:02.797942Z", - "start_time": "2020-10-14T06:56:02.751303Z" - } - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "metadata": { - "ExecuteTime": { - "end_time": "2020-10-10T06:00:31.785768Z", - "start_time": "2020-10-10T06:00:31.739120Z" - } - }, - "source": [ - "## LSTM: A minute of Theory\n", - "\n", - "This is a hand on course, not theory so we will look at a high level view of one type of RNN, the LSTM. But lets look at the theory for a moment, to get some broad idea of how they work\n", - "\n", - "The figure below is from d2l.ai and shows how an RNN can operate on a text sequence to predict the next charector.\n", - "\n", - "![](images/rnn-train.svg)\n", - "\n", - "How does the model itself work? Let look at an excerpt from the open source machine learning book [d2l.ai](d2l.ai):\n", - "\n", - "![](images/rnn.svg)\n", - "\n", - "> The figure below illustrates the computational logic of an RNN at three adjacent time steps. At any time step `t`, the computation of the hidden state can be treated as: \n", - "\n", - "> i) concatenating the input `Xt` at the current time step `t` and the hidden state `Ht−1` at the previous time step `t−1` ; \n", - "\n", - "> ii) feeding the concatenation result into a fully-connected layer with the activation function `ϕ`. \n", - "\n", - "> The output of such a fully-connected layer is the hidden state `Ht` of the current time step t . In this case, the model parameters are the concatenation of `Wxh` and `Whh` , and a bias of `bh`. The hidden state of the current time step `t` , `Ht` , will participate in computing the hidden state `Ht+1` of the next time step t+1 . What is more, `Ht` will also be fed into the fully-connected output layer to compute the output `Ot` of the current time step `t` .\n", - "\n", - "To understand more see these visualisations:\n", - "\n", - "- [distill.pub memorization in rnns](https://distill.pub/2019/memorization-in-rnns/)\n", - "- [Chris Olah Understanding LSTMs](https://colah.github.io/posts/2015-08-Understanding-LSTMs/)\n", - "\n", - "And see these chapters:\n", - "\n", - "- [d2l.ai RNN's](http://d2l.ai/chapter_recurrent-neural-networks/rnn.html)\n", - "- [d2l.ai LSTM's](http://d2l.ai/chapter_recurrent-modern/lstm.html)\n" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -1906,11 +2335,11 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 20, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:23.905143Z", - "start_time": "2020-10-16T04:36:23.863988Z" + "end_time": "2020-10-18T03:13:19.024883Z", + "start_time": "2020-10-18T03:13:18.985567Z" }, "lines_to_end_of_cell_marker": 2, "lines_to_next_cell": 0 @@ -1976,11 +2405,11 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 21, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:25.472238Z", - "start_time": "2020-10-16T04:36:23.906383Z" + "end_time": "2020-10-18T03:13:22.376133Z", + "start_time": "2020-10-18T03:13:19.027681Z" }, "lines_to_next_cell": 0 }, @@ -1989,14 +2418,14 @@ "data": { "text/plain": [ "Seq2SeqNet(\n", - " (encoder): LSTM(18, 32, num_layers=2, batch_first=True)\n", - " (decoder): LSTM(17, 32, num_layers=2, batch_first=True)\n", + " (encoder): LSTM(21, 32, num_layers=2, batch_first=True)\n", + " (decoder): LSTM(20, 32, num_layers=2, batch_first=True)\n", " (mean): Linear(in_features=32, out_features=1, bias=True)\n", " (std): Linear(in_features=32, out_features=1, bias=True)\n", ")" ] }, - "execution_count": 16, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -2014,20 +2443,11 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": { - "lines_to_next_cell": 2 - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 17, + "execution_count": 22, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:25.475887Z", - "start_time": "2020-10-16T04:36:25.473549Z" + "end_time": "2020-10-18T03:13:22.410148Z", + "start_time": "2020-10-18T03:13:22.378324Z" } }, "outputs": [], @@ -2036,69 +2456,13 @@ "optimizer = optim.Adam(model.parameters(), lr=1e-3)" ] }, - { - "cell_type": "markdown", - "metadata": { - "ExecuteTime": { - "end_time": "2020-10-11T00:50:26.565378Z", - "start_time": "2020-10-11T00:50:26.559693Z" - } - }, - "source": [ - "
\n", - "

Exercise: Model

\n", - "\n", - " To understand the model we first need to understand the inputs and outputs.\n", - " \n", - " * Make fake data of the correct shape, and pass it into the model.\n", - " * What is the data type of the output?\n", - " \n", - " ```python\n", - " past_x, past_y, future_x, future_y\n", - " output = model(?)\n", - " print(output)\n", - " ```\n", - " \n", - "\n", - "
\n", - " → Hints\n", - "\n", - " * `x_past = torch.rand((batch_size, window_past, input_size)).to(device)`\n", - "\n", - "
\n", - "\n", - "
\n", - "
\n", - "
\n", - " \n", - " → Solution\n", - " \n", - "\n", - " ```python\n", - " past_x = torch.rand((batch_size, window_past, input_size)).to(device)\n", - " future_x = torch.rand((batch_size, window_future, input_size)).to(device)\n", - " past_y = torch.rand((batch_size, window_past, output_size)).to(device)\n", - " future_y = torch.rand((batch_size, window_future, output_size)).to(device)\n", - " output = model(past_x, past_y, future_x, future_y) \n", - " print(output)\n", - " \n", - " # We can also use torchsummaryX to summarise the model size\n", - " from deep_ml_curriculum.torchsummaryX import summary\n", - " summary(model, past_x, past_y, future_x, future_y)\n", - " ```\n", - "\n", - "
\n", - "\n", - "
" - ] - }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 23, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:25.608259Z", - "start_time": "2020-10-16T04:36:25.477144Z" + "end_time": "2020-10-18T03:13:22.551272Z", + "start_time": "2020-10-18T03:13:22.412202Z" } }, "outputs": [ @@ -2110,16 +2474,16 @@ "========================================================\n", " Kernel Shape Output Shape Params Mult-Adds\n", "Layer \n", - "0_encoder - [64, 192, 32] 15104 14592\n", - "1_decoder - [64, 192, 32] 14976 14464\n", + "0_encoder - [64, 192, 32] 15488 14976\n", + "1_decoder - [64, 192, 32] 15360 14848\n", "2_mean [32, 1] [64, 192, 1] 33 32\n", "3_std [32, 1] [64, 192, 1] 33 32\n", "--------------------------------------------------------\n", " Totals\n", - "Total params 30146\n", - "Trainable params 30146\n", + "Total params 30914\n", + "Trainable params 30914\n", "Non-trainable params 0\n", - "Mult-Adds 29120\n", + "Mult-Adds 29888\n", "========================================================\n" ] }, @@ -2129,7 +2493,7 @@ "1" ] }, - "execution_count": 18, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -2143,137 +2507,11 @@ "output = model(past_x, past_y, future_x, future_y) \n", "print(output)\n", "\n", - "from deep_ml_curriculum.torchsummaryX import summary\n", + "from torchsummaryX import summary\n", "summary(model, past_x, past_y, future_x, future_y )\n", "1" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Concept: Likelihood\n", - "\n", - "In this notebook we wont just predict an answer, but how wrong we might be: the mean and standard deviation.\n", - "\n", - "So instead of the mean squared error, like in most regression problems, we are going to be predicting a normal distribution, and minimising the [Negative Log Likihood (NLL)](https://pytorch.org/docs/stable/generated/torch.nn.NLLLoss.html). \n", - "\n", - "This means our model will output a distribution, and we will try to make sure it overlaps with the true answer as much possible. This is the concept of likelihood, which is illustrated below.\n", - "\n", - "The image below shows a distribution in blue, then possible answers in red." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "ExecuteTime": { - "start_time": "2020-10-11T01:09:11.555Z" - } - }, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "ExecuteTime": { - "end_time": "2020-10-16T04:36:25.825576Z", - "start_time": "2020-10-16T04:36:25.609500Z" - } - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/anaconda/envs/py37_pytorch/lib/python3.7/site-packages/torch/distributions/distribution.py:134: UserWarning: sample_n will be deprecated. Use .sample((n,)) instead\n", - " warnings.warn('sample_n will be deprecated. Use .sample((n,)) instead', UserWarning)\n" - ] - }, - { - "data": { - "image/png": "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kpJSpd3n82nNmjX1VhPBCkCtlZWV6Sc/+Yl27Nihjh07asaMGfrVr34VvK35hB07dmj58uXavn278vLyNHr0aO3evVuhoaGaN2+eOnfurN27d6uiokLffPONJP/s5N9tXKkutz2u0IhIlR8plCQVZfxJ7f7ldoVd2FmF772oTj/sraKP31TbvlcRqgA0OuaxAlBrzjk553TkyBE553To0CF161b18SyrVq3ShAkTdP7558vn86lHjx7atGmTJOn555/Xww8/LEkKCQkJjnYd/uQtRV0xVqERkZKk0Lb+mcEtNEyu7Jj/kSwhoaooOayjn29S2/irGuKQAeC0CFYAai08PFyLFi1Sv3791K1bN+3YsUN33XVXlX779u3TxRf/45l1sbGx2rdvnwoL/aNQjzzyiK644golJyfr66+/liQd/zZPZd/s099feUj7X/p3Hf1iiyQp6oqxOvTRH1Tw1tO6cNhNKvxgmS4cdpPMrAGOGABOj2AFoNaOHz+uRYsW6eOPP1ZeXp769++v+fPnV+nnnKvSZmYqKytTbm6uhg8frq1bt2rYsGF68MEH/R0qynX82zx1uWW+Oo5/SAV/WqCKksMKi+6siyamqeukJ2Th56v88DcKj4nVwdVP6MCqX570gGMAaGgEKwC1dmIumMsuu0xmpptuuknr16+v0i82NlZ79+4NLufm5qpbt26KiYlRmzZt9MMf/lCSlJycrK1bt0qSQqNi1KbnUFlomMLbXaTwmO46/m3eSfst/OvLajfiNh3a8rra9hmpdldOVOEHNV/MCgD1jWAFoNa6d++uHTt26MCBA5Kkd955R717967Sb/z48Vq+fLlKS0u1Z88eZWVlafDgwTIzXXfddVoXmP/m3XffVZ8+fSRJbXoOU8lX2yRJ5cXf6fg3eQprd1FwnyVffarQyA4K79Bd7nipZCZZiP89ADQS7goEUGvdunXTL37xC33/+99XeHi4Lr30Ur3wwguSpNdee02bN2/Wo48+qr59++qmm25Snz59FBYWpqeffjr49Plf/vKXmjRpkn7605+qU6dO+s1vfiNJivBdoaN7tirvf+6VLETtR96h0AuiJflPLX63/rfqeEOqJCkqIUkHV6fLVZSrw79Oq1oogBansLBQS5cu1bRpTetv3qq79qGhJSYmus2bN9fvh5x4hlEDzwyLetScv9PmWnsD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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Here is out distribution\n", - "y_dist = torch.distributions.Normal(loc=2, scale=3)\n", - "# We can sample from it. Lets see the predictions:\n", - "n = y_dist.sample_n(1000).numpy()\n", - "\n", - "# We can also get the probability of an answer being sampled from the distribution\n", - "y_dist.log_prob(2).exp() # log and exp cancel out\n", - "\n", - "plt.figure(figsize=(10, 5))\n", - "plt.title('Likihood illustration')\n", - "plt.hist(n, bins=25, label='pred')\n", - "for y_true in [-10, -5, -3, -1, 2]:\n", - " prob = y_dist.log_prob(y_true).exp().numpy()\n", - " plt.vlines(x=y_true, ymin=0, ymax=100, color='r', label=f'true')\n", - " plt.text(x=y_true, y=90+y_true*2, s=f'{prob: 3.3%}')\n", - "plt.legend()\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "

Exercise Likelihood

\n", - "\n", - " If you have a normal distribution with mean 1 and std 3. What is the likelihood of 2?\n", - " \n", - " \n", - " \n", - "\n", - "
\n", - " → Hints\n", - "\n", - " * `y_dist = torch.distributions.Normal(?, ?)`\n", - " * `print(y_dist.log_prob(?).exp())`\n", - "\n", - "
\n", - "\n", - "
\n", - "
\n", - "
\n", - " \n", - " → Solution\n", - " \n", - "\n", - " ```python\n", - " y_dist = torch.distributions.Normal(1, 3)\n", - " print(y_dist.log_prob(2).exp())\n", - " ```\n", - "\n", - "
\n", - "\n", - "
" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "ExecuteTime": { - "end_time": "2020-10-11T01:10:45.385149Z", - "start_time": "2020-10-11T01:10:45.377300Z" - } - }, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {}, @@ -2283,21 +2521,15 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:25.829742Z", - "start_time": "2020-10-16T04:36:25.826919Z" + "end_time": "2020-10-18T03:13:46.465743Z", + "start_time": "2020-10-18T03:13:46.421819Z" } }, "outputs": [], - "source": [ - "def to_numpy(x):\n", - " \"\"\"Helper function to avoid repeating code\"\"\"\n", - " if isinstance(x, torch.Tensor):\n", - " x = x.cpu().detach().numpy()\n", - " return x" - ] + "source": [] }, { "cell_type": "code", @@ -2313,11 +2545,11 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 26, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:36:25.874531Z", - "start_time": "2020-10-16T04:36:25.831061Z" + "end_time": "2020-10-18T03:13:46.876098Z", + "start_time": "2020-10-18T03:13:46.830008Z" } }, "outputs": [], @@ -2412,11 +2644,11 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 27, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:42:55.508891Z", - "start_time": "2020-10-16T04:36:25.875735Z" + "end_time": "2020-10-18T03:15:16.972584Z", + "start_time": "2020-10-18T03:13:46.913019Z" } }, "outputs": [ @@ -2428,28 +2660,36 @@ "version_minor": 0 }, "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='test', max=15.0, style=ProgressStyle(description_width='i…" + "HBox(children=(HTML(value='test'), FloatProgress(value=0.0, max=9.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/media/wassname/Storage5/projects2/3ST/seq2seq-time/seq2seq_time/data/dataset.py:55: FutureWarning: Support for multi-dimensional indexing (e.g. `obj[:, None]`) is deprecated and will be removed in a future version. Convert to a numpy array before indexing instead.\n", + " tstp = (t - now)[:, None]\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "Start: Test Loss = 1.23\n" + "Start: Test Loss = 1.09\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "943cf67e6c454fe889296d6c458e0415", + "model_id": "d56643c9fb0045cca2e911ee83573c80", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='epochs', max=8.0, style=ProgressStyle(description_width='…" + "HBox(children=(HTML(value='epochs'), FloatProgress(value=0.0, max=8.0), HTML(value='')))" ] }, "metadata": {}, @@ -2463,7 +2703,7 @@ "version_minor": 0 }, "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='train', max=485.0, style=ProgressStyle(description_width=…" + "HBox(children=(HTML(value='train'), FloatProgress(value=0.0, max=297.0), HTML(value='')))" ] }, "metadata": {}, @@ -2473,7 +2713,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch 1/8: Training Loss = 0.99\n" + "Epoch 1/8: Training Loss = 1.30\n" ] }, { @@ -2484,7 +2724,7 @@ "version_minor": 0 }, "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='test', max=15.0, style=ProgressStyle(description_width='i…" + "HBox(children=(HTML(value='test'), FloatProgress(value=0.0, max=9.0), HTML(value='')))" ] }, "metadata": {}, @@ -2494,19 +2734,19 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch 1/8: Test Loss = 0.75\n", + "Epoch 1/8: Test Loss = 1.07\n", "--------------------------------------------------\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "", + "model_id": "3a2766c65aea418bb80d4548778a8618", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='train', max=485.0, style=ProgressStyle(description_width=…" + "HBox(children=(HTML(value='train'), FloatProgress(value=0.0, max=297.0), HTML(value='')))" ] }, "metadata": {}, @@ -2516,287 +2756,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "Epoch 2/8: Training Loss = 0.59\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='test', max=15.0, style=ProgressStyle(description_width='i…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 2/8: Test Loss = 0.19\n", - "--------------------------------------------------\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='train', max=485.0, style=ProgressStyle(description_width=…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 3/8: Training Loss = 0.45\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='test', max=15.0, style=ProgressStyle(description_width='i…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 3/8: Test Loss = 0.13\n", - "--------------------------------------------------\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='train', max=485.0, style=ProgressStyle(description_width=…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 4/8: Training Loss = 0.39\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='test', max=15.0, style=ProgressStyle(description_width='i…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 4/8: Test Loss = 0.12\n", - "--------------------------------------------------\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='train', max=485.0, style=ProgressStyle(description_width=…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 5/8: Training Loss = 0.36\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='test', max=15.0, style=ProgressStyle(description_width='i…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 5/8: Test Loss = 0.14\n", - "--------------------------------------------------\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='train', max=485.0, style=ProgressStyle(description_width=…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 6/8: Training Loss = 0.29\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='test', max=15.0, style=ProgressStyle(description_width='i…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 6/8: Test Loss = 0.06\n", - "--------------------------------------------------\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='train', max=485.0, style=ProgressStyle(description_width=…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 7/8: Training Loss = 0.29\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='test', max=15.0, style=ProgressStyle(description_width='i…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 7/8: Test Loss = 0.13\n", - "--------------------------------------------------\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='train', max=485.0, style=ProgressStyle(description_width=…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 8/8: Training Loss = 0.27\n" - ] - }, - { - "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "", - "version_major": 2, - "version_minor": 0 - }, - "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='test', max=15.0, style=ProgressStyle(description_width='i…" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Epoch 8/8: Test Loss = 0.07\n", - "--------------------------------------------------\n", "\n" ] }, @@ -2806,13 +2765,13 @@ "1" ] }, - "execution_count": 22, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "
" ] @@ -2833,97 +2792,28 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Predict\n", - "\n", - "When we generate prediction in a sequence to sequence model we start at a time, then predict N steps into the future. So we have 2 dimensions: source time, target time.\n", - "\n", - "But we also care about how far we were predicting into the future, so we have 3 dimensions: source time, target time, time ahead.\n", - "\n", - "It's hard to use pandas for data with virtual dimensions so we will use xarray. Xarray has an interface similar to pandas but can have N dimensions. It also allow coordinates which are virtual dimensions." + "## Predict\n" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 45, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:42:56.136515Z", - "start_time": "2020-10-16T04:42:55.511479Z" - } - }, - "outputs": [], - "source": [ - "import xarray as xr \n", - "\n", - "def predict(model, ds_test, batch_size):\n", - " load_test = torch.utils.data.dataloader.DataLoader(ds_test, batch_size=batch_size)\n", - " xrs = []\n", - " for i, batch in enumerate(tqdm(load_test, desc='predict')):\n", - " model.eval()\n", - " with torch.no_grad():\n", - " x_past, y_past, x_future, y_future = [d.to(device) for d in batch]\n", - " y_dist = model(x_past, y_past, x_future, y_future)\n", - " nll = -y_dist.log_prob(y_future)\n", - "\n", - " # Convert to numpy\n", - " mean = to_numpy(y_dist.loc.squeeze(-1))\n", - " std = to_numpy(y_dist.scale.squeeze(-1))\n", - " nll = to_numpy(nll.squeeze(-1))\n", - " y_future = to_numpy(y_future.squeeze(-1))\n", - " y_past = to_numpy(y_past.squeeze(-1)) \n", - "\n", - " # Make an xarray.Dataset for the data\n", - " bs = y_future.shape[0]\n", - " t_source = ds_test.t[i:i+bs].values\n", - " t_ahead = pd.timedelta_range(0, periods=ds_test.window_future, freq=freq).values\n", - " t_behind = pd.timedelta_range(end=-pd.Timedelta(freq), periods=ds_test.window_past, freq=freq)\n", - " xr_out = xr.Dataset(\n", - " {\n", - " # Format> name: ([dimensions,...], array),\n", - " \"y_past\": ([\"t_source\", \"t_behind\",], y_past),\n", - " \"nll\": ([\"t_source\", \"t_ahead\",], nll),\n", - " \"y_pred\": ([\"t_source\", \"t_ahead\",], mean),\n", - " \"y_pred_std\": ([\"t_source\", \"t_ahead\",], std),\n", - " \"y_true\": ([\"t_source\", \"t_ahead\",], y_future),\n", - " },\n", - " coords={\"t_source\": t_source, \"t_ahead\": t_ahead, \"t_behind\": t_behind},\n", - " )\n", - " xrs.append(xr_out)\n", - "\n", - " # Join all batches\n", - " ds_preds = xr.concat(xrs, dim=\"t_source\")\n", - " \n", - " # undo scaling on y\n", - " ds_preds['y_pred_std'].values = ds_preds.y_pred_std * scaler_output.scale_\n", - " ds_preds['y_past'].values = scaler_output.inverse_transform(ds_preds.y_past)\n", - " ds_preds['y_pred'].values = scaler_output.inverse_transform(ds_preds.y_pred)\n", - " ds_preds['y_true'].values = scaler_output.inverse_transform(ds_preds.y_true)\n", - " \n", - " # Final metric, mean NLL for up to 6 hours ahead\n", - " test_NLL = ds_preds.isel(t_ahead=slice(0, 12)).nll.mean().item()\n", - " print(f'NLL mean over <=6 hours: {test_NLL:2.4g} (lower is better)')\n", - " return ds_preds" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": { - "ExecuteTime": { - "end_time": "2020-10-16T04:42:57.535661Z", - "start_time": "2020-10-16T04:42:56.138208Z" + "end_time": "2020-10-18T03:20:30.913161Z", + "start_time": "2020-10-18T03:20:22.210516Z" } }, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d6aa7dc536e946bb94eff61e69a9d951", + "model_id": "820cbbfac250476597dafb2e6b43fc9f", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "HBox(children=(FloatProgress(value=0.0, description='predict', max=20.0, style=ProgressStyle(description_width…" + "HBox(children=(HTML(value='predict'), FloatProgress(value=0.0, max=12.0), HTML(value='')))" ] }, "metadata": {}, @@ -2933,686 +2823,71 @@ "name": "stdout", "output_type": "stream", "text": [ - "\n", - "NLL mean over <=6 hours: 0.08013 (lower is better)\n" + "\n" + ] + }, + { + "ename": "AttributeError", + "evalue": "'StandardScaler' object has no attribute 'scale_'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0moutput_scaler\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mscaler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransformers\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mds_preds\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mds_test\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbatch_size\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0;36m6\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdevice\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mscaler\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0moutput_scaler\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/media/wassname/Storage5/projects2/3ST/seq2seq-time/seq2seq_time/predict.py\u001b[0m in \u001b[0;36mpredict\u001b[0;34m(model, ds_test, batch_size, device, scaler)\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[0;31m# undo scaling on y\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 58\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mscaler\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 59\u001b[0;31m \u001b[0mds_preds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'y_pred_std'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mds_preds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0my_pred_std\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mscaler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscale_\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 60\u001b[0m \u001b[0mds_preds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'y_past'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mscaler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minverse_transform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mds_preds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0my_past\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 61\u001b[0m \u001b[0mds_preds\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'y_pred'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mscaler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minverse_transform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mds_preds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0my_pred\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mAttributeError\u001b[0m: 'StandardScaler' object has no attribute 'scale_'" ] } ], "source": [ - "ds_preds = predict(model, ds_test, batch_size*6)" + "# TODO get working\n", + "output_scaler = scaler.transformers[-4][1]\n", + "ds_preds = predict(model, ds_test, batch_size*6, device=device, scaler=output_scaler)" ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 64, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:42:57.593546Z", - "start_time": "2020-10-16T04:42:57.537033Z" + "end_time": "2020-10-18T03:22:35.990991Z", + "start_time": "2020-10-18T03:22:35.937050Z" } }, "outputs": [ { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
<xarray.Dataset>\n",
-       "Dimensions:        (t_ahead: 192, t_behind: 192, t_source: 7465)\n",
-       "Coordinates:\n",
-       "  * t_source       (t_source) datetime64[ns] 2013-09-17T12:00:00 ... 2013-09-...\n",
-       "  * t_ahead        (t_ahead) timedelta64[ns] 00:00:00 ... 3 days 23:30:00\n",
-       "  * t_behind       (t_behind) timedelta64[ns] -4 days +00:00:00 ... -1 days +...\n",
-       "    t_target       (t_source, t_ahead) datetime64[ns] 2013-09-17T12:00:00 ......\n",
-       "    t_past         (t_source, t_behind) datetime64[ns] 2013-09-13T12:00:00 .....\n",
-       "    t_ahead_hours  (t_ahead) float64 0.0 0.0 1.0 1.0 2.0 ... 94.0 94.0 95.0 95.0\n",
-       "Data variables:\n",
-       "    y_past         (t_source, t_behind) float32 0.34182978 ... 0.42559525\n",
-       "    nll            (t_source, t_ahead) float32 -0.39930427 ... -0.5875193\n",
-       "    y_pred         (t_source, t_ahead) float32 0.4066002 ... 0.43110877\n",
-       "    y_pred_std     (t_source, t_ahead) float64 0.0581 0.05431 ... 0.04713\n",
-       "    y_true         (t_source, t_ahead) float32 0.39902174 ... 0.44257143
" - ], - "text/plain": [ - "\n", - "Dimensions: (t_ahead: 192, t_behind: 192, t_source: 7465)\n", - "Coordinates:\n", - " * t_source (t_source) datetime64[ns] 2013-09-17T12:00:00 ... 2013-09-...\n", - " * t_ahead (t_ahead) timedelta64[ns] 00:00:00 ... 3 days 23:30:00\n", - " * t_behind (t_behind) timedelta64[ns] -4 days +00:00:00 ... -1 days +...\n", - " t_target (t_source, t_ahead) datetime64[ns] 2013-09-17T12:00:00 ......\n", - " t_past (t_source, t_behind) datetime64[ns] 2013-09-13T12:00:00 .....\n", - " t_ahead_hours (t_ahead) float64 0.0 0.0 1.0 1.0 2.0 ... 94.0 94.0 95.0 95.0\n", - "Data variables:\n", - " y_past (t_source, t_behind) float32 0.34182978 ... 0.42559525\n", - " nll (t_source, t_ahead) float32 -0.39930427 ... -0.5875193\n", - " y_pred (t_source, t_ahead) float32 0.4066002 ... 0.43110877\n", - " y_pred_std (t_source, t_ahead) float64 0.0581 0.05431 ... 0.04713\n", - " y_true (t_source, t_ahead) float32 0.39902174 ... 0.44257143" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" + "ename": "AttributeError", + "evalue": "'StandardScaler' object has no attribute 'mean_'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0moutput_scaler\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mscaler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransformers\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;31m# output_scaler.scale_\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0moutput_scaler\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmean_\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m: 'StandardScaler' object has no attribute 'mean_'" + ] } ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], "source": [ - "# Add some derived coordinates, they will be the ones not in bold\n", - "# The target time, is a function of the source time, and how far we predict ahead\n", - "ds_preds = ds_preds.assign_coords(t_target=ds_preds.t_source+ds_preds.t_ahead)\n", - "\n", - "ds_preds = ds_preds.assign_coords(t_past=ds_preds.t_source+ds_preds.t_behind)\n", - "\n", - "# Some plots don't like timedeltas, so lets make a coordinate for time ahead in hours\n", - "ds_preds = ds_preds.assign_coords(t_ahead_hours=(ds_preds.t_ahead*1.0e-9/60/60).astype(float))\n", - "\n", - "ds_preds" + "# TODO Metrics... smape etc" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:42:57.971613Z", - "start_time": "2020-10-16T04:42:57.594840Z" + "end_time": "2020-10-18T03:12:49.084984Z", + "start_time": "2020-10-18T03:12:40.700Z" } }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAE9CAYAAAD6c07jAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOyde3hU1bm435XrZHIPCQm3EERwICABUVQu1R4RW63W22m11CpHrNW29NiL/qxaj61H26rVHvWgtrQq1VpP67FaKxyrFkSlUBLlFhAQQoDcEyDZmcwl6/fHmp3sTGYyM0kme9D1Ps88mdm3+WbPZH3ruy4hpUSj0Wg0moFIslsAjUaj0SQ+WlloNBqNJiJaWWg0Go0mIlpZaDQajSYiWlloNBqNJiJaWWg0Go0mIlpZaE4ohBC/FUL8JPB8oRBi1yCvs1IIcefwSqfRfHLRykIz7Agh9gshOoUQ7UKIeiHEb4QQWcP9PlLK9VLKU6KQ51ohxDtB594opfzxcMskhLhbCCGFEFdatqUEtpUFXvcovBDnSyHEycMsU5kQ4i0hhCGEqBZCnBfFOWmBY2uDtr8lhGgUQhwTQnwghLhkOGXVJC5aWWjixReklFnAHOB04I7gA4QQKSMu1cjQAtwjhEi2W5AAzwOVwCjgh8D/CCGKIpzzfaAhxPYVwBgpZQ5wA7BaCDFmOIXVJCZaWWjiipTyEPBXYAb0zJxvFkJ8BHwU2HaREKJKCNEmhHhXCHGqeb4QYrYQYosQ4rgQ4gXAYdl3jnXmK4SYIIT4U2Dm2yyEeFQIMQ1YCZwVsHTaAsf2md0LIZYLIfYIIVqEEH8WQoy17JNCiBuFEB8JIVqFEI8JIcQAH/t1wAMsHdLNGwaEEFNRCvtHUspOKeUfga3A5QOcMwkl+33B+6SUH0opfeZLIBWYMOyCaxIOrSw0cUUIMQH4PGpma/JFYB4wXQgxB1gFfB01830C+LMQIl0IkQb8L/AsUAC8SJhBLjCLfxU4AJQB44DfSyl3AjcC70kps6SUeSHO/SxqYPxXYEzgGr8POuwilIU0K3DckgE+tgTuBH4khEgd4LioEUIsCCjTcI8FYU4tB/ZJKY9btn0Q2B6O/wJuBzrDyPKqEMINbATeBjbH/IE0JxxaWWjixf8GZvHvAH8H/tOy7z4pZYuUshNYDjwhpdwopfRLKZ8GuoAzA49U4GEppVdK+T/ApjDvdwYwFvi+lLJDSumWUr4T5thgvgKsklJukVJ2Af8PZYmUWY65X0rZJqWsAd4CKga6oJTyz0AjcH2UMgyIlPIdKWXeAI9wnzULOBq07SiQHepgIcSlQIqU8qUBZLkocP7ngTVSyu7YP5HmREMrC028+GJgEJsopbwpoBhMDlqeTwS+a50lo9waYwOPQ7Jvt8sDYd5vAnDA4iKJhbHW60op24FmlHViUmd5bqAG4UjcgYoROCIdOFwIIbYH3G3tQoiFQDuQE3RYDnA8xLmZwM+Ab0V6n4Dy/iuwRAhx8TCIrklwtLLQ2IF18D8I3Bs0S3ZKKZ8HjgDjguIDpWGueRAoDRM0j9Ra+TBKaQE9g+Yo4FCkDzIQUsr/A/YANw3lOgGZFlqUQKjHwsB7lgfcbVlSyvXAduAkIYTVkpgV2B7MFJQLb70Qog74EzBGCFEXZGVZSQEmD/XzaRIfrSw0dvMUcKMQYp5QZAohLgwMbu8BPuDbgfTTy1DuplD8A6Vc7g9cwyGEmB/YVw+MD8RAQvEccJ0QokIIkY5ymW2UUu4fhs/3Q+AHIbYnB2Q0H1bZ0oL2JQfShLMGeKwP9eZSyt1AFSp+4gi4mU4F/hji8G0oC60i8Lgede8qgINCCJcQ4nNCiAwhRKoQYimwCOVm1HzC0cpCYytSys2ouMWjQCtqJn5tYJ8HuCzwuhX4Emq2G+o6fuALwMlADVAbOB7gTdRMuk4I0RTi3L+hAtJ/RCmcycCXh+HjIaXcgFJkwdyGCiCbjzct+7YH7btuiGJ8GZiLuof3A1dIKRuh12IJyOqTUtaZD1QKcHfgtR8QwN2olNpGVBrtl6SUW4Yon+YEQOjFjzQajUYTCW1ZaDQajSYiWlloNBqNJiJaWWg0Go0mIlpZaDQajSYiWlloNBqNJiInXNfPwsJCWVZWZrcYGo1Gc0Lxz3/+s0lKGanbcFhOOGVRVlbG5s26b5lGo9HEghAiXKucqNBuKI1Go9FERCsLjUaj0UREKwuNRqPRROSEi1loNBpNLHi9Xmpra3G73XaLMiI4HA7Gjx9PauqwrLvVQ9yUhRBiFWp1sQYp5YwQ+wXwCGoBFQO4Vjck02g0w01tbS3Z2dmUlZUx8Gq4Jz5SSpqbm6mtrWXSpEnDeu14uqF+C1wwwP7PofrnT0Et/P7fcZRFo9F8SnG73YwaNeoTrygAhBCMGjUqLlZU3JSFlHIdqsVxOC4BnpGK94E8IcSYeMmj0Wg+vXwaFIVJvD6rnQHucfRdXrOWvstYajQajSaIt99+m4suumjE39dOZRFK/YVcXEMIcYMQYrMQYnNjY2OcxdJoBsk556iHRjMI/H6/3SIMiJ3Koha1hKPJeNRayP2QUj4ppZwrpZxbVDToanWNRqOxhf379+Nyufja177GqaeeyhVXXIFhGJSVlXHPPfewYMECXnzxRdauXctZZ53FnDlzuPLKK2lvbwfg9ddfx+VysWDBAv70p5CLRcYdO5XFn4FrAusunwkclVIesVEejUajiRu7du3ihhtu4MMPPyQnJ4fHH38cUKmu77zzDueddx4/+clPeOONN9iyZQtz587loYcewu12s3z5cl555RXWr19PXV2dLfLHM3X2eeAcoFAIUQv8CEgFkFKuBF5Dpc3uQaXODnWdYY1GoxmQ73wHqqqG95oVFfDww5GPmzBhAvPnzwdg6dKl/PKXvwTgS19SS8W///777Nixo+cYj8fDWWedRXV1NZMmTWLKlCk95z755JPD+yGiIG7KQkp5VYT9Erg5Xu+v0Wg0iURwlpL5OjMzE1A1EosXL+b555/vc1xVVVVCZHPpCm6NRvOpIRoLIF7U1NTw3nvvcdZZZ/H888+zYMECKisre/afeeaZ3HzzzezZs4eTTz4ZwzCora3F5XLx8ccfs3fvXiZPntxPmYwUujeURqPRjADTpk3j6aef5tRTT6WlpYVvfOMbffYXFRXx29/+lquuuopTTz2VM888k+rqahwOB08++SQXXnghCxYsYOLEibbIry0LjUajGQGSkpJYuXJln2379+/v8/qzn/0smzZt6nfuBRdcQHV1dTzFi4i2LDQajUYTEa0sNBqNJs6UlZWxbds2u8UYElpZaDQajSYiWlloNBqNJiJaWWg0Go0mIlpZaDQajSYiWlloNBpNHDl48CDnnnsu06ZNo7y8nEceeSTqc6uqqnjttdfC7i8rK6OpqWk4xIyIrrPQaDSfKt5+e3ivF6krfUpKCg8++CBz5szh+PHjnHbaaSxevJjp06dHvHZVVRWbN2/m85///PAIOwS0ZaHRaDRxZMyYMcyZMweA7Oxspk2bxqFDh/od9+KLLzJjxgxmzZrFokWL8Hg83HXXXbzwwgtUVFTwwgsv0NzczPnnn8/s2bP5+te/jmqxNzJoy0Kj0WhGiP3791NZWcm8efP67bvnnntYs2YN48aNo62tjbS0NO655x42b97Mo48+CsC3v/1tFixYwF133cVf/vKXEe0+qy0LjUajGQHa29u5/PLLefjhh8nJyem3f/78+Vx77bU89dRTYVfNW7duHUuXLgXgwgsvJD8/P64yW9HKQqPRaOKM1+vl8ssv5ytf+QqXXXZZyGNWrlzJT37yEw4ePEhFRQXNzc0hj7OrXblWFhqNRhNHpJT827/9G9OmTeOWW24Je9zevXuZN28e99xzD4WFhRw8eJDs7GyOHz/ec8yiRYv43e9+B8Bf//pXWltb4y6/iVYWGo1GE0c2bNjAs88+y5tvvklFRQUVFRUh02G///3vM3PmTGbMmMGiRYuYNWsW5557Ljt27OgJcP/oRz9i3bp1zJkzh7Vr11JaWjpin0OMZDR9OJg7d67cvHmz3WJoNP0xcyiHOzdTMyR27tzJtGnT7BZjRAn1mYUQ/5RSzh3sNbVlodFoNJqIaGWh0Wg0mohoZaHRaDSaiGhlodFoNJqIaGWh0Wg0mohoZaHRaDSaiGhlodFoNHGkra2Nxx9/3G4xhoxWFhqNRhNHwimLcP2fEhWtLDQajSaO3Hbbbezdu5eKigpOP/10zj33XK6++mpmzpzJ/v37mTFjRs+xDzzwAHfffTeg2n9ccMEFnHbaaSxcuJDq6mqbPoFCtyjXaDSaIAzDoLq6GpfLhdPpHNK17r//frZt20ZVVRVvv/02F154Idu2bWPSpEns378/7Hk33HADK1euZMqUKWzcuJGbbrqJN998c0iyDAWtLDQajcaCYRjMnDmT+vp6iouL2bp165AVhpUzzjiDSZMmDXhMe3s77777LldeeWXPtq6urmGTYTBoZaHRaDQWqqurqa+vp6Ojg/r6eqqrq3tWuhsOMjMze56npKTQ3d3d89rtdgPQ3d1NXl4eVVVVw/a+Q0XHLDQajcaCy+WiuLiYzMxMiouLcblcQ7pecJtxK8XFxTQ0NNDc3ExXVxevvvoqADk5OUyaNIkXX3wRUG3OP/jggyHJMVTiqiyEEBcIIXYJIfYIIW4LsT9XCPGKEOIDIcR2IcR18ZRHo9FoTMI13HY6nWzdupV169YNiwtq1KhRzJ8/nxkzZvD973+/z77U1FTuuusu5s2bx0UXXYTL5cI0NH73u9/x61//mlmzZlFeXs7LL788JDmGStxalAshkoHdwGKgFtgEXCWl3GE55nYgV0p5qxCiCNgFlEgpPeGuq1uUaxIW3aK8Hz4fGAaEWEV0xAjVrru7G7q6ICPDJqHC0N2t7ldW1tCuc6K1KD8D2COl3BcY/H8PXBJ0jASyhVonMAtoAXxxlEmj0YwgdXVw8KDdUvTH51OPRFvOx5QpEUsw4qksxgHWn0ltYJuVR4FpwGFgK7BCStmNRqP5RNDcrB6JhjkYdyfYaGPKk2hyQXyVRahVxYP1+BKgChgLVACPCiH6GaxCiBuEEJuFEJsbGxuHX1KNRhMXDKPX5ZNIJOqgnKhKDOKrLGqBCZbX41EWhJXrgD9JxR7gY6Bf6oGU8kkp5Vwp5dyioqK4CazRaIYPq5IIZIQmDImqLBJVLoivstgETBFCTBJCpAFfBv4cdEwN8C8AQohi4BRgXxxl0mg+cRiGwcsvb+HoUcNuUfpgWMTp7LRPjmCsA3EiDcqJKpdJ3IrypJQ+IcQ3gTVAMrBKSrldCHFjYP9K4MfAb4UQW1Fuq1ullE3xkkmj+aRhGAYzZszkyJF6CguL2bVreKuNh4JVQSSSZZGog3KiymUS1wpuKeVrwGtB21Zanh8Gzo+nDBrNJxmz2tjt7qCpafirjYeCVVkkkmVhzYBKpGyoYFm6uyEpgcqmdbsPjeYEprS0lOzsPLq7Jfn5xZx88tCqjYcTa1A7kQLc1lm7lOohQqXjjDDByiKRFBnodh8azQmLYRjMmzePo0dbycrK5/HHNyJEYrigADye0M/txo5Bef/+/UybNo3ly5dTXl7O+eefT2dnJ1VVVZx55pmceuqpXHnlpbS2ttLY2MCiRachJXzwwQcIIaipqQFg8uTJGIY9sSmtLDQYhsGWLVts+xFqBkevC8qgvb2NhoYaEukr1MqiLx999BE333wz27dvJy8vjz/+8Y9cc801/PSnP+XDDz9k+vSZ3H//f1BUNBq3201b2zHWr1/P3LlzWb9+PQcOHGD06NG2xaS0G+pTTrzbMWvih8vlYvToYo4cqSc/v5jSUldCKQur68nnSxwffNr555BqeZ2UROiqsGiJsr3LpEmTqKioAOC0005j7969tLW18ZnPfAaAr3zlayxdqlqSz5t3Nu++u4F169Zx++238/rrryOlZOHChUMQdGgkwFensRNrO+bDhw9TWVlpt0iaKHE6nfzjH1t55JF1rFq1FYfDmVBZR8HWRCLFLayMVGggPT2953lycjJtbW195bAIctZZC3nnHWVNXHLJJXzwwQe88847LFq0aISk7Y+2LD7luFwuioqKMAyDrq4uli5dyvbt27V1cYIghJOpU3uznxJlQPZ6+6d/ejyJ0bjPeO3tPq/T0sAyjo8Yubm55Ofns379ehYuXMhzzz3L/PnKypg/fxE/+ckdfOYzi0hKSqKgoIDXXnuN++67b+QFDaAti085TqeT1atX43A4kFLS2Nho+1q/mugJtiQSRVmEilEkQtwiVP2CnVlHTz/9NN///vc59dRT2bq1iltvvQuAiRPLAHosiQULFpCXl0d+fr5domrLQgOzZ89mzJgxPXGLoS72ohk5vN6+rxNhQIbEVRahFMNIKIuysjK2bdvW8/p73/tez/P333+f7m7o6Oh7zs6dNT2tym+//XZuv/32+As6AFpZaHoWexmuBeo1I0ewsvD71bbU1NDHjxS+EAsNJIqy6O724/G4SUtzkJSUnBD1DHYpsVjQykIDKIWRKJW/mugJN4O3W1kEKzEIrUBGmu5uP/v378Dn85KSkkpZ2XSSkpLtFiusYkiUgkHQMQuN5oTGHJTdboPdu7fgdhsJEbcIpRgSYUEft9uNz+dFym58Pi8ejzshZvADKYtEQVsWI4BhGNrFo4kLXq9SFMuWzaS1VdVbrF+/lYICe39noZSFnZaFlBIhBGlpDlJSUnssi7Q0R0INyMNBvJbK1soizuiiN0088Xqhpqaa1lbVTLC1tZ5du6qZPNlel2IiKQuHw0FzczOjRo1CiGTKyqb3iVmA/e6e4bIspJQ0NzfjcDiGLlQQWlnEGWvRW319YnUF1Zz4eL1QWuoiP7+4x7IoK7M/my1UzMIuN9T48eOpra2lsbERrze0HOnp9ioLc03wYNLSYq96dzgcjB8/fngEs6CVRZxxuVwUFxfrtFTNsOP1qpmnw+Fk1aqt1NRUU1rqIi3Nfss1kSyL1NRUJk2aBMDOndDS0v+YM8+EOEzGo2b37tBrlU+fDqNHj7w8odDKIs7otNRPBokYd7LO3h2O3kruRMg6StQAd7h7Y/c9s76/1SVmt1xWIho4QoizhBCPCSE+FEI0CiFqhBCvCSFuFkLkjoSQJzpmWmqiDDKa2DDjTosWLWLmzJkJ0503lKvH7Tb48EP7OwibgfedO3uXe02Egc+Ua9267axc6eXYMbXdbtnM7/LDD+Hii2H9evXabrmsDKgshBB/Ba5HLY16ATAGmA7cATiAl4UQF8dbSE380O3JIxMq7pQIBCsLMyvq2mvtV2rt7UqWb31rI1/8opN333XT3W3/cqGmXP/xH1W88EIqd96pzB27B2Xz/V9/Hdrb4Sc/6S2wTBQiWRZflVL+m5Tyz1LKw1JKn5SyXUq5RUr5oJTyHODdEZBTEwcMw6C8vJwFCxZQXl6uFUYYzLhTZmZmQsWdggvyzKyozk57lZqUsG9fNS0t9fj9XwXgmWfUqGe3K2rvXiVXd7fqubRjh8Dvt19Z+P1KkW7cqF57PHDwoP1yWRlQWUgpmyJdIJpjNIlJZWUlBw4coLOzkwMHDuj25GEw407r1q1j69atAAlhjQXPOkePLiUrKw+Hw2mrUvP7VYZWVtYiIAvw09CgmhzZPfiNG+ciJ+csYAKpqf/A50ti795O2+Xy+aC2VgXfL7tMbdu7137laiWqpCwhxGVCiI+EEEeFEMeEEMeFEMfiLdwnAcMw2LBhAxs2bLB9cNEMHms7lESJX1iVhdttcNNN8zh+XC2xunHjRttiZObA6/GcAYDT+RtaWwVHj9qrLLq7IS3NyXXXvRqQ6zkAbr31Vtrb7f3f9PngwAH1/JxzICUF9u07AZUF8DPgYillrpQyR0qZLaXMiadgnwRMN8/ChQtZuHBhwrl6TjnlFEpKSnA4HEycOJHZs2fbLVLCk0jxC6uy+Pjjapqa5tHVlUN7e1vPms124PMpl5hhjAHa8Hr/AqjB0M7Bz3zv+vp0hJC43S8APo4fH8/u3fZ9j6q5IZhf2eTJUFp6gloWQL2UcmdcJfkEUl1dTV1dHVJKpJS2Dy5WDMNg3rx5HD16lFGjRrFp06aEy9ZKxOB7IsUvrMriN7+Zhdf7HMnJ95KfX8zJJ9snl+mGSk6ejhB7yctrAODdd/dy7Jh936Vp1Rw8CMXFkoICJ0LsJzW13NZCRlOuAwegqAicThg3DurqTiBlEXA/XQZsFkK8IIS4ytwW2K4ZAJfLRUlJCUIIhBC2Dy5WzBmyYRi0tdk7Ew1FoqarBscv7FSw1nTLTZtU24qSkqtYtWor6en2yeXzqbqP/Pz5nHZaKULUAl5eeOEPLFhgn3VtVRYTJiSxatVWTjqpiPHjF9g6KJty1dQoiwKgoEDFL04YZQF8IfDIAQzgfMu2i+Ir2omP0+lk+/btrF+/nvXr1yfUcqWJNEMORSK5e4JJlLoZMxtq7VrIyoIvfxkOH87A73faGhvw+ZRsDQ1JFBV10tJSDzQAxTQ22vdd+v3K5VNbC2Y3jEOH3mHv3nouvti+CYmpEA4d6pWrsBCOH4cEmSMBESq4pZTXjZQgn1ScTifz58+3W4x+JHpleWFhIU6nEyllQiqzRMC0LHbtgmnTYM4c+P3v4Y03PmLOnHFkZtrznfr9cOSIGpjfffchfL4uoA4opqjIvu/S54OjR6GzU7l5amqq8XoPIOUCmpvt69vm86nlcNvbIS/Pw+7d28jOLgfSaWgYcXHCElW7DyFEEbAcKLOeI6VcFh+xNCNBoi541NTUxOTJk/H5fCQnJ/PWW28lnDKzGzMvv6sLPv5Y9TYqKekEMnj00Ud46aW/smOHPW4yn4+eQa6zczsAQjQyevQ81q61z7r2+Xr7LxUWqriK0/k3jh/PJS9voq1KzJTrpZdu57nnHsPhuAz4HY2NtogUkmgD3C8DucAbwF8sD41m2FmzZg2+gB/F7/ez3ux9YDOJFHA3XVBmxszUqdDernJQfL5Rtrp7fL7eZn25uX4cjkwcjnZ8vgJbmxz6/b2DckGBiqtcf/23AXj44c22KTGrXMeObcXrdXP8uFKyR450JUzcItpGgk4p5a1xlUQzoiRiYzxQcpWUlJCSkoLP5yMlJYUlS5bYLVbCrUtiKouPP1Z/J0+GggIXSUlNCDGRwkJ7i/JMZfHEE6/S2FjN3/42kz/9Kcn2WIopV0GB+ltSkg7A0aMZNknV17KAI4G/hwHYu7cBv38Cyfav/Bq1ZfGqEOLzcZXkU0CizEwTNdPIlOuSSy5h7Nix/PrXv+bIkSMUFhbaLVqfgPvhw4dtr3Y34xX19Wq9g9Gj1Uy5rKyA6dMv54037FNm5qCckQH5+aobblFRKj4ftLbaIlIfuaBXWZh/7XT3WJVFXl43IIBmwIuUJQljWURKnTUrtVegFEZnLBXcQogLhBC7hBB7hBC3hTnmHCFElRBiuxDi74P7GIlPIg3QiZppZJWrubmZioqKhFAUoLLHioqKEELQ1dXF0qVLbf0OTcuioQFGjVIVvwBFRUm43bm2unvMQdkciAHy89Xf997bYWvWUXOzqmPIyOgrV5ONTYv8fmho8AJeDGM/o0aV8J//+WeysyXHjiVO+mwky6LAUrGdJKXMiLaCWwiRDDwGfA7VqfYqIcT0oGPygMdR1eHlwJWD/yiJTSIN0ImaNpuocpkuu1/96lc4HA6klDQ2Ntr6HZrKor4eiot7txcWQlOTpKrKPgvWnCmPGtW7LTPTDcCtt37PtsmSqcRGjVLtUXbv3kJqqpLjmI3Ni3w+OHjwGFCPx9NBe/tRHnro67S37+Ott9Zy/HhiWP6RYhbvCVVR8zrwupRyfwzXPgPYI6XcByCE+D1wCbDDcszVwJ+klDUAUsoEShQbXhJpxbxETZtNRLmssYqioiKKi4tpaGggLy+PUrOCygZMN1RdXTcTJrThdjtwOJzk5nppbU3my18+l7FjC22JrZgxi5NO6t3W0fExMA2PJ9225YVNZZGb62fZspk9y9Cmpe2hpqaB48ezyc62J3vM48kjNfUQycmZZGXl0d7eipTNeDxOdu6sZswY+7MWI3WdnYtyQQE8LITYJIT4hRDifCFEeoRrjwMOWl7XBrZZmQrkCyHeFkL8UwhxTSzCn2g888wzrFmzxvbgKCROYVkwiSaX1SJsbGzkV7/6Ffn5+bS2tjJv3jzbZu8ej1JkdXU+tmxZxbJlM3G7DVSANAm3O8s2CzaUG+rkk8sASE0ttm2ypCyebvz+Wlpb63C7O2hpqcPnq+fNN19n1iz7LJ729mRmzSrnkUfW8dRTVeTnl5CUdJSkpCJOOikxLOyIAW4p5QEp5Uop5ReBs4FXgPOA9UKIgdJnQy1/LoNepwCnARcCS4A7hRBT+11IiBuEEJuFEJsbEynxOErM2emSJUu45prE1YeJEoBPJIJdYw6Hg7a2NgzDsNWd6PHAtm17gTT8/r20ttZTU1NNWZnySaWnj7NtUDYM6OjojQcAjBqlggRXXnmHbZOljg6Dw4ePsmvX63i9HhwOJ9nZ+UjZgt9vn3L1+5UbLC8vmalT55CXV8iqVVs544x5jBo13dbWLVaizYYCQErplVK+KaX8gZTyDOCGAQ6vBSZYXo/HzAfre8zrUsqOwLoY64BZId73SSnlXCnl3KKiolhETggSKV4RjkQKwCeS0gruBTV79mxb4yrmvWlrM8jIOBmA1NRm8vOLKS11kZenDP7bbnvWtkG5rU39zbFENc2AckbGeNusxo8+qkbKXLq760lJSeO7332Sp56qIiWlg6SkQkaPts/iOXas7/1yOJyMHTuK9vakhAlwR1vBPR+4G5hI3wruk8KdA2wCpgghJgGHgC+jYhRWXgYeFUKkAGnAPOAX0Qp/opBI8YpwhFJodlR3J1o9A/SvdLcrrmK9Nzk5xXzjG6pw65Zb7uGcc0pxOJxkZqpj8/JOwY7b5verlhrQd/BLTobMTHsDybm5LiCJlJR2CgpKWLDgUhwOJ3Pm5HH4sId337Xnt+Z2K0ssJ4oTQaMAACAASURBVChlyOn00NGRxtGjBuPH229dRGtZ/Bp4CFgAnG55hEVK6QO+iVq/eyfwBynldiHEjUKIGwPH7EQFzz8E/gH8Skq5bTAfJJFJpE6l4UiUTKRgpVVZWZkwVoaJXXEV671pba1n3746AE491YXDoWTJUgvS2TYo+3yqAR70H/yysnr3jTRSgtut7tHSpTexatXWnnuWk5OCx+PseT3ShLLE3G6DP//5fgDOP39hQvz+o63gPiql/GusF5dSvga8FrRtZdDrnwM/j/XaJxqJ2ofJJFEykaxWWFFREUuXLqWxsTFhrAw7Me9NXV09ubnFJCWNBfrGBkxlYdegbLpUALKz++7LzFTN8uzAjAsATJ1ahsPRuy87W8llh7tHyt5CRauyqKmpprNTLZ3X3OyzzdK3MqCyEEKY0r0lhPg58Cegy9wvpdwSR9k0I0wiKDSr0urs7GTJkiW2u8ZCYUe7FPPe/P3v1Qjh4je/SSM9nT4Dn+mGMl1BI00ky8IclEe6fYVViQXLlZHhpaMjlbY2g8LCkU8zNr8rq3JVa5grRZKbe1JCuK4jWRYPBr2ea3kugc8OrzgaTa/SMgwjIWM9Zuygrq6O/Px8qqqqRqzS3Ol0MnnyHA4fVgNJXh4IS95hWhqkpqpBWcq++0YCv79XWQRbFhkZPg4f9nD8OOTljeygHE5ZuN0Gr7zyIHAn55yzgN273xlR69UqV25u73aHw8kddzzGd78Ld9zxPE6nI/QFRpBI61mcO1KCaDTBJIprLBhzuVzDMDAMg4qKCnbv3s1wStfRoRbpAVXclprau+/oUTXIHTrkJTc3C+idpguhrIuODjUQWc8bCczBLymJPgF2t9vgww/X4HbPZvbsf2H79pF1KYZSFkLAwYPVdHaqVSKbmrwjbr1alaspV0qKsrxGjVIKwjDsVxQQuTdUsxDiL0KIHwZ6OCXGf+sJQiKlgFpJVLlCkWhFeqBiB/mWQEFra+uwpUP7/Wp5zc2b1QJCR46oZVNloELJ64XmZoNly2ayc+fHHDjwdqAYrxeru2ekMd1QOTm9Vk1JCdTWVuPx1CFlDg0NI58+bh2UzbjO5MlQXu7qeZ2XN3nErddQMZ6pU3vX4gb74jzBRMqGmgQ8AqQCtwMHA1Xcjwgh/jXu0p3AhKtbsHugTqR6ihMVp9NJVVUV48aNw+l0UlJSMmyDzPbtsG9fr3IANcjt36+et7Wp4Gdraz1SFuL1HmTPnr4dcK2WxUhjrkZnDnxCwJQpMG2ai4wMP5BLUdHw3a9Y5Dp2TCkKM14yejSMGePkttv+C4D77vv9iE9KrJaYGW/KzVXuxRNKWUgpj0kp10op75ZSng+UAk+jKq6fHwkBT1RC1S3YOVCbSqqysjLhCwRPBAoLC9m9ezfr168ftiytAwd6W2gHU1MDH30Eu3er4GdubhEwmu7uOu69d2kf68LMOrLTssjO9rN79xaSkgySk6G42MmXv3wDkMyaNR/aNiibrh6HQ8V3cnMhN1e5eTyekXf3BFti6enqkZvbW8i4f/+RhJjURXJDjRVCXCGEeEgIsR5VE3EycAcwUEHep55QdQt2VXJbldTSpUspKiqyvZ4iFuy2xsIxnC4yr7fXegiFlHDoUG8DwS996ceoOtZ62toaqanp/S3Z6YZS2T3d7N37d1asWMTVV6tJUU4O5OSkAeD12tOszxyUodfyycrqHZTtSDf2epUSM+Ux5UtNhe5uAyE6eOWVFxPCCxApG6oW2IKqqr5NSumJv0ifDEIFZ+2q5LYqKVDLlmZkZIQMGifaCnqJWNEdD1pa+rqewuF2q3hFU1MWsJTU1KM9rT7GjlWL+Njthmpr8+L1HqG7u4OWFjUpOvnkOT2Dsh1uleBB2fybmortclmVmOmKAjh8uBopx+L3OxIidTySspgPnAVcCtwihNgPvBd4bJZSdg1w7qee4LoFu7J7gpXU7NmzQ753Ig7MidKGJN70Lqs5MGa8wutVBXlXXPEVrrnmURwOJ+PH97bVMAx7LAvVDTeNjIwu/P7Mnn5LSUm9g7Id1eXmoDxW3baeeIAQvSmrdioxc+0P67/blCkukpPrkTI/IbwAkWIW70kpH5JSXiGlPA34Lqoo72nAprKfExs7snus7UY2btzYEz8Jxu6Gh6HcTYnShiTemC0fIlFa6iI/v5jUVLWWxoIFZ+NwOMnIUANNVlavsvDY4AcwDOjsFFx22VIeeWQdlZVqwmGdwdvp7jEVQ4ZlyW1zVh8wvEdcLhXjUa+tw0JurpNJkyZSXn4+H35o/8QtYrsPIYQL1Zr8bJSlkY+yLFYOdJ4msTDdYANZDnY2PAxn1SRCrUW8XXOxDOwOh5NVq7by7LNNPPccFBerUc8cBNPSegccO2bwpoVUUJDGtGlzyMtTr02LB+yZwbvd6n3NQdmqLDIyVMA7EdxQVrnS0iAzMwkpc0mPtHrQCBApwN0EvIjqBrse+IKUskRKeamU8oGREFAzfESyHOxseDiQbMNpjcUaLB+JDLZYB3WHw0lamrIsTCVh/k1Pt7flh5nNlZPTd+CDXhntsCxaW1VMKDtbKYYky8iXlqZktcOyMDvOmnJZ26CYir+zE7q7R162YCLVWUyWUs4E/p+U8mkp5R5zR6D1uOYEIhqXjl1FcCPhbhrMwD8SrrnBDFKtrWpATgn4BsyZqdWyGGllYdZYgBr8gpWFOau3Q1mYFo9h7Af6fu+mi8wOZWEq14wMD/v29Z3EmErMrvhTMJFiFubP7RUhRE9HFSHEdNSKeZoTiERulT4Ssg1m4B8JJdY1iDSRtrbebrNC9CqIlJTeCuWRVhYeT9/WFcHKwnRJjfSg7PdDY6MbgNWrv8uVV87sNyg7nWpQHmlMZfH88z/g+uv7TmKsciW8srDwnyiFkSWEOA3lmloaP7E08SIR22eYDCTbcNRaDGbgHwklNhhl0dLSO/g6nX0bBprunpFWFmYQGZSySEvru9+urCOvF/burQ08P0Rzc9+Jgl1uKGvH2Y6O/XR29p3EWN1QdqRBBxPVehZSyr8IIVKBtUA28EUp5UdxlUwTFxKtjsJKONmGK6V3sMHyeLdud7tjP6ehAU49VT235uZDrxIZaXePx9O3z1GwssjMVJbPSA/KXi84HGqF57Q0N0VFfScKqalqUB6KcjUMpXBi6fLbV7kKDKPvJCYlRcnldtuT2RZMpPUs/gvVitwkB9gHfEsIgZTy2/EUTjO8NDU1UVFRQWtrKyUlJQnlihpIIQxnrUUirNlhRcrYB4LubmhqUs3moL+yMN1Tu3YdwDCKBvUdD6a9uZnZY/Y5ClYWwxEbOHIExoyJ7RyPB9xulU50331Pc9llU/rck5QUFVw+ckTd26Ro/S0Wdu6ECRNUv6locbt7FfrPfvYc48btZOHC3kmMNd346NHYrh0PIt2WzcA/LY+fA3+0vNacIJittA8dOoRhGNTV1SVUX6iB4gmf5FoLjye6ym0rra3KhWEqi+DYgMOhXHXPPPP4oDK4urpUa5FYcbt7q6SF6N8ePSUFMjK6OXSoeVDuRK8Xdu1SbplY5TIH5VmzZvVbS8O0LIbi7jEMpWxiobOz17IoKspg7ty+LlhrunG0dTjxJNJ6Fk+PlCCa+FJdXU2ruX4jkJ+fP6yD7lDdWwPVeCRCrUW8iDVe4XYb/POfNYCrZ6YZPINvbKwG5uDzDa5NREuLamo4btzA1kXwd24OftbMLCsej0FLSy3vvLOdmTO/F7Nlaw74jY1QWhr1aT1ymR1ng+VSSmzwgWS3W53X1hbbKoCmEjPXIAmWC3ozyOxaU91KpDqLV4QQXwjEK4L3nSSEuEcIsSx+4n0ysaMxnsvloqSkBKfTybhx46iqqhq2QdeaklpeXs7f/vY3NmzYENPnixRIHonA/GC+l6F+l9G4oNxug927t9DW1sSyZTN54IF7AMjJUVPs4IKt6dNdCNFBcvKonnYbsdDaqmbxA81mQ6Uhd3b2FpglJfW3LD7+uBq//yjd3Y5BpSGbyqKpKabT+imxYLmsloXZqDEWTLealLHFicz7lZ2t7lcoZWFmtiWCsogU4F4O3AI8LIRoARoBB2qdiz3Ao1LKl+Mr4icLu/ovxXN2bnUhdXR0sHjxYgAmTpzI9u3bEyaQPJD1M5ilUoO/y93jxpEco8M7krIwGwe2ttaTlZVHe3srXm9R4NzdwKx+yiI720l+fjfTp1/NSy9dH/N3beq95ube+Ecw1tUCTZdmZ+ecnj5HoVbomz7dRWpqFV5v7qDciaZcx4/HFlswZ/DmoBwsm5l63N2tMrWC1+iOVi5Qg7qZYBCNXNbmhqGUhSlLIiiLSHUWdVLKH0gpJwNXAj9GKY9yKeVirShix87+S/GanZsuJIdDrQcgpURKGdPni7e1Fakgzzr4HTp0iIqKioiyBH+Xg/XDD4TZONDt7uD48VaysvJJTp4CdDJt2hRSUvoPmsrXnURKSiGpqbF/16ZrzOK17EdpaSmegKbzeDyUlJT2rEYXKhMKICfHyZw5ZzBhQsWgJkmmYpUytvRb07LIzg6/zKzDoS5eXx/7d2hV+LEM6lbLIiUltMvvhFEWJkKIbwJtgcaCVVLKxFpY4ATikxisdTqdbNy4sc9So0KIqD/fSLTUiKSkB7NUavB3ORglHMmyMBsHOhyZFBSU8NRTVZxyyjWcfHI6GRnOkD2DUlJ6mwnG6lbp7u49xzDCB3xrampIC2iEtLQ0du1S61ibzfpCDcpKrhT8fueQ71W07h6zVYbpHgsll2EYPPPMDwG46KLPx/z7s8oVbfptR0dv6mw4ucDeFinBRGszlwCbhRB/EEJcIESsSXUak0Suoh4shmGwZs0a2gJO7vT0dB577DFWr14d1fkjYW1ZB/aioiJaW1v7xFUGs1Rq8HeZnJQUc2ZTpMHcbBz4yCPrWLVqK3l5hTQ25jBpkvrXDacsnM7eASkWrAF3KcPPaM0YWGZmJiUlJRQUuPD5lIIJN4NPTh5ar6PBDMpmm4+BBmXVhVmlf7W0uGP+/Vnl8nqjs3pMq81qWYQiPd0IyGV/oUVUykJKeQcwBfg1cC3wkRDiP4UQk+Mo2yeWRK6ijhXTKli+fDmdgZxGn8/HT3/6U5YsWRKVpTAS1pY5sK9Zs4bu7m4WL17MwoULKS8v75FvMEulBn+XMeoKvN7eALZ1aVQrDoeTqVPn4HA4aW9X2UBlZWpfKHfPUCyLYEsnXJC7vd3Jn/+8lTffVG3I29udPbPfgdw9mZmDS1G1WjwDyRVMS0uvZRFOLpfLRU6O2pGTUxrz7+/48b7fXzj3nd+vFHB3tyqqVOcObPEsXXo6AE899QvbV8qLOhonpZRAXeDhQ7Uq/x8hxM/iJJvmBMC0Cjotye+pqak0NDTQ0dHB4cOHqaysHPAaI2VtOZ1OMjIyaGhoCBtXCR78Y46lxKgtjh1TAewVKxaxbNnMsArD5MAB9XcgZWFdAGkolgWEzjxqboYdO6Cx0YnHM4dt25w9BXkAGRld7NoV+p6ZymKoSszjCV3c194OW7aoJWr37FHKoqNDDdLWxotWnE4nDzzwBAD33PNMTL8/wzD40pf6fn+hlEV7O2zaBP/4h3ocOxZZiVVXV9PScgDw09EhbK+LijZm8W0hxD+BnwEbgJlSym8ApwGXx1E+TYJjWgVOp5OUlJQeF05RURFCCLq6uli6dGnEwXakrC3TfSKEiBhXaWpqYurUqSxcuDDqWEqsbqg9e3oD2K2t9X3W0j50CCor3ezc2Ttr3b5d7ZsyRf0NZ1mYbqhYq8ODlYVh9M326e5Wg7CJz9f7HqbL6qmnbuBf/zV0/GmwqaChPofZhM/E64WqKnXt/fuhtrbvew0UGygqUskZXV2OmOTaubOalpa+39/Ro33dbN3dsHWryn7q7Oxt72IqMYfDw+7d/ZWry+Vi9OhioB2HY7Tt8c1oLYtC4DIp5RIp5YtSSi+AlLIbuChu0mliZqRrOEyrYP369Rw5coT169ezfft2nnvuORwOB1JKGhsbB5wVjaTMTqeT7du3s379+h5ZwzUuHEzFeyy6QkoYO9ZFXl4RaWkZ5ORMZOfOctauhV/8Aq69VnLLLQ5uumksX/3qJWzbtoENG/ycdFJv9Xb4QDIYhqSqKrb7GmpQrqvrff7xx+ErqM1Bub19H4YROv402I64oeQKtnpqakK7t0yL5/jxPfh8oe+FmXUUayB58uTeBARzLXSzQM+ktjZ08aVpgfzhDz/gqqv6K1en08m6dVvJy8tg/vyltruto2okCDwMIIQosGw7LqX0Sil3Dr9YJxbB+fuGYfS4XsKtdx0vOeyq4TDrI8zahNmzZzNmzJiIq+7Z0a/K6XQyf/78AY8ZbMV7LJaFz9d7vN9/PY2N9/HwwypinZEB5eVH2bHjFrze+2lqeoh///ev4/Ot40tf8gJKS4SyLISA9HQP3d1pXHfdBYwblx31fbW6h9xug5qaavx+F+PGOTEMNfCZ20tLXTgcvdc0lUVubjIdHaHjT8OpLI4dU9vT0tT1TEsimLq6LiCdJ5/8N155pZYdO/rfC1NZxNoRNyVFJSAE34+9e1W9RWurUrChMJVdR8cuvN7Qfc9ycpzk5Chl4/OFD4SPBNFaFltQBXm7gY8Czz8WQmwJtCz/1BKc9tnU1ER5eTkLFy7sF0CNN3avoW0lmjhELLP3eFgfA11z0BXvMSgLr9eso+jE778HKfeSnHweubmX8PTTTdx/fxqFhX8nJeU64GR8vneBTmbO3NVzjXBuFY9HmQNdXckx/RbMYK1ZLb5ixSK++tWZvP22wQcfQGdn+BiLmXn01FOvsWZN6O/dVBaxzuCtFoOZENDZabBjh5rF79gRXlF/9FE9AB7PHhobQ9+Lwaaohou9dHTA5s3KbRhOLvN+5eV5cDpDK1czg2ww8afhJlo99TrwkpRyDYAQ4nzgAuAPwOOoZVc/lQQP0GvWrKGurg4Z+IUMtUtqMANVIVv7KxUVFdHZ2dkzENrRV8lc9zvce0c7e4+HxRTpmrFUvJvfyazubqSMvoLb51N1FOnpy+nqygOW4Pf/g6NH4aabKnj22d2sWrWVPXsqufvuK2hru5icnPc57bTHeq4RyrIAmDixOLC/hNGjnVHXu1x66Uyam3urxVXAtp4DB6qZOnVOnyLB5ubD7NjxHllZ+ZSWumhsdJKdDbm5TubOnYMjhPt/sL2OzPYjO3e6+a//UhXt+fnFrFq1lba2gX8LUo4B/KSnt4dtf+J0Dq59+rFjBl/72mKam68kL+9+Vq/+bY91EWleY1oWK1e+QkFBNWec0f93Zu1b5fX2bxo5kkT7y55rKgoAKeVaYJGU8n0g7FLigZqMXUKIPUKI2wY47nQhhF8IcUXUkicIwWmfS5YsiRhAHewsOVLxmjU9FGDJkiWUl5dTXl4e14K3SPIuXLiQqVOn0hTkZI529j4cFlPwPY/mmtEE3a3fyaZNm/D7oy8g8PlUWmxp6Z0kJ+8G/tGzr729lZqaahwOJzNmzGf16hd5/PHTee65x/q4fsJZFqNGqX/L7373eTZvjk65VldX09xcj9v9/2hufpyMjDzS0jLIyyuitFT9hktLVYxFCIHH4+YHP7iAFSsWsmzZTBoafAPGUmDwS6v6fPDoo3D77Q4aG68MmRAQjra2VEaNEvzyl2+FvRfmoByrG6qqqpLm5vPw+79Dc/Pv2Lx504Bp0Faam9V7FhQ4+3WcNbHWpti9pkW0yqJFCHGrEGJi4PEDoFUIkQyE/O8I7HsM+BwwHbgqsBxrqON+CqwJ3mcXsQzmodwtv/rVr3jsscf4v//7v34B1KFUK0c7wGVkZNDY2EhHRwd1dXUxDbTD6e6J1ELDGhzfvXt32F5MQ63DMAyD8vJyFixY0OMWHK7aDut34vV4MDqjv29er/K179iRCpidcwRpaQ7y80t6BmjoW2thkpoavius6YMfNcpFSkp0VpjL5SI3dzTwQ6S8mLa2LxDsV3M4nPzwh6tJTVVmg9/v67E+Dh3qorBQtR8J13l1sJbF8eMGO3d2Bt7zNtLT83oCypFoaoLCwiSmTp1Dbm7oe5GcrNqnHz4cfft0wzD45jeX4vebMqRy111/6VGekRRGczOYP/lwytXMbBtsk8PhJFplcTUwHvjfwGNCYFsy8K9hzjkD2COl3Cel9AC/By4Jcdy3UGtkNMQgd9wYzGBuDfCWl5ezePFibr75Zq6//vp+xw5llhztAGc9rqSkJOpBcbjbbkTTQiOa2ftQ6zAqKys5cOAAnZ2dHDhwgMrKyj5W2DPPPNPn+FgUpvVep6alkeGIXjafTy2a090tyMvbjMORSUnJRB588A1WrdraRzGEItwAA73KwjCin5E6nU6uvfZPPa+lXI7H46alpY49e1TChjkAFhQUk57uJDk5BYfDSX5+McePOykqik6uWGbwhmFw8cVncPhwKikpHyBlHsuWbY7qHoGpLJQSCxcgVu3T9/D+++uZMSO6376yxBqBGcArwPtIeXmP8oxk9TQ3q6aLEP6eJSUNPg16uIkYswjM/B+WUoZbc3tPmO3jgIOW17UExTaEEOOAS4HPAqdHlHYEGMqqbOZMeqB4xUDrNkSDObANlGUV7G83ZYvkex/OFelMOaqqqvpkOw12Bh+vjrTXXHNNn7gFEFN8xHqvZ33nO3g80ccsvF44cMADpPHgg4/T1XWgX4aRleAspHDxCugdlDs6oq+W7u6G5mZl/CcnP4LfvwI4Ca/3Y+69dyn//d+buOmmebS21pOXV8QDD6xl/PhTaGioYcwYF5dcIigsHFhZmJbFnj0HMYxRUbvHmppKgBR8vrsR4jfs3TsRh6P/8BUqU6upSS1BO1Am0Z491fj9PqSMfg0Ql8tFQcF4Dh1yIcRfSEoCv/97pKePJj8/K6LV09QE06Ypq2agDro5OYmhLCL+sqWUfqBICDHATzMkoQzk4LyAh4FbA+8R/kJC3CCE2CyE2NzY2BijGLExFPdENAVfg50lm7P+JUuWcM011/TbFzwTts7Yoy14sxbY5eXlURrLCjNhGEwLjeFm9uzZTJw4EYfDwcSJE5k9ezbQVznW1dXx0ksvUVlZSV1dXc+2aCw/8/7G2hvq+HGDZ555HjjGbbedEVFRBGchheoLZWK1LKJVFl4vNDSkkZ0tueeefwEgOflSpJS0tTWyefOanuB2W1tjIJ5RyNSpc+jocCIlES2L1FRzFb+norZeXS4XaWmBBcepQoj32Lq1v08m1D0yO7sWFoZPBgCzfboXIXL7rdEdDqfTyUMPVQKprFhxM9/61uVACjfcsCGi1ePxQH09lJR42bdvYCs2L0+1ChmoC/BIEO00aD+wQQhxpxDiFvMR4ZxalLvKZDxwOOiYucDvhRD7gSuAx4UQXwy+kJTySSnlXCnl3CIzghYnggdzIKb4RTQFX4OpVg7nvgrlOrIqj1jjL2b32NbWVubNmzcssQurVTDSiz6ZmUqbNm1iw4YNfb4Tq3L0eDzccMMNXH311X1ab8esMGNQFrt3V+N2lwB7aGvr67YI7hdlzUIyXRzDbVn4fKpnUXGx4OyzZzB6dDepqZ/tKTibO3dJvwI0U9aNGz8CoKRkYGVx6FA14MfnS4vJDStESeBZPU7nNo4cyegX9wh1j/bvV/vGjOliz57wv72cHCennz6PkpIK3nor+klNc7NKT5o8OZslS1TL+MbGkyO6x2pqlCX32mu3cOONA7t9zfUxYl30abiJNnX2cOCRBGRHec4mYIoQYhJwCPgyKs7Rg5RykvlcCPFb4FUp5f9Gef24YQ5ugykYi6bgazCEcl8ZhsFLL73UE0Sur6+nsrKyx7ViKtbGxsaoU05rampoa2vrud5wpf3aUTAYbXrsSy+9xPLlyzEMg4aGBlJSUvD5fKSkpLBr166IiyBZicWymDDBhRD5JCVV9ht8zQWPzPRQs1W5ua201DWgsnA61cNcrzsalGWhBny322DSpE527bqA++9fx8SJrp4OuFY3jylrY+MVwE8ZN84YcA0NtYqfQVJSftSW+86d1XR2ZgFHSUuTLFt2Ab/8Jaxdu4fzzsujoaGG0lJXyHv05pvqGk888Xna2zcyZkz4315+fgpdXSkxFb4dDkx/1U/EoKysm8rKDFQ4NzxmoZ5hvI/HM7Db1wz72W1ZRHVbpJT/ASCEyJRSRpWJLKX0BdbBWIO6c6uklNuFEDcG9q8cpMwjgrVgDOhxScRzJbeBCBWHMFd283g8OJ1OiotVbr1pgfj9foQQdHZ2xuSHHUpMxYq1JqSyspIjR470kWWgGozhYKAYjFW2JUuW4A2kmni9XsaOHUttbW1PX6tYVvuLpd2HEE6gjPPPz2DFil63RagZ8tSpc/oN1AO5oZKTlUuoqSl6y+LYMYO6ujRcLm9AAVyIz/dLkpOn4XCoGbSZlWViyurzuYB6tm17g4qKS4HQ9ys720lBQTcu15d49dXrorqvJ5/sIjX1CN3dDRQUlDB2bBPQycqVa1m5cgWpqWnk55ewatXWfvfo448hNbWbY8c20dU18KCcl6dcVrHEBszusU6nEUgfvgG//7s0NxuMGhXepbhlyzFSUoopKDjO0aMDu7wLAn0zYq16H26ibSR4lhBiB7Az8HqWEOLxSOdJKV+TUk6VUk6WUt4b2LYylKKQUl4rpfyfGOWPG5WVlTSbJZZE3+4hnljdV+ZAaBgGaWlpPPnkk2zdupXZs2cPKhPK+h7D0QE2eF3uq6++GrfbjRCCoqIiSktL477gUbj4U7Dr7oMPPiAlMJ1MT0/n7rvvjrqvlXm9LVu24O/ujklb1NWB3y+YPr2kR1G43QYeTyd5eUWkpzvJyspj9GjlCgtOnx3IskhOVrPdaJWFYRjMn38WhpHC228/SGtrHT7fXwB4443w/g9zNi/ELGAriCi9ugAAIABJREFUP//5cs49t39NjYlKBVWr+EWb0puW5mTKlAs46aTRANx11+eBN/H7F/dJ3TXrUqz3aN8+KCuTFBQUkZEx8P9BXl7ktceDaWhQ1d91dUpp+v1rgRTefjvY464wLbG1a3cCu/jv/36H558f+H/NVBZ2r5YXbcziYWAJ0AwgpfwAWBQvoexG9ZFfSleg+9eYMWOib/cwQgSnx1566aU9wWxzsN++fTubNm3iiSeeYOPGjVHLPxwdYIODx42NjUgpSUtL484772TXrl1xb00STvEFy/bVr36Vrq4uhBCMHj2aiy++mDFjxsScbrxp0yZ8MRTlmS6M0WoM7BlIvve98/F43GRm5tLe3spNN80LmbM/nMqiurqaxkZ1QY/nI7Ky8nE46klO3sPu3WNxuw22bdvAtm0bcLsN9u1Tab/p6U4eeOAfSDkdqMLj6aSuLvyytMnJanA9dix0c71Q+HzQ1pZMbm43bW2NeDxuVFOJKSQlndKTulta6qK7W8nV2anSc7dtgxkzklm1aisvvTTwoGy6e2KJDTQ2qvRXU2mmp38AuDl4cGKf4/x+eO01eOONWlpaJN3di5DyZRoaaqioGPh/LTPTCLyXvelQUXvnpJQHgxbIi9ITeuKh/nHU4OZwOHjxxRdxOp1s2bJlQJfJQK04hpuB2lEMJeYyXAS3HgFoaGjA4/HwrW99i9GjR/dsj+fysqFSbq2y5eXl0dra2vNdr169msLCwqhbffQpyktKotMwyItCLin7K4uammpaWuro6jLo6jJQCYWyjyvKSiQ3VGEhNDdLPvywkilTBv4cLpeL7OwZdHVBbm4nTz1VRUNDDWvXTuTll5P42tfOprHxQwAyMx+kvf3fAbj8ckhP7wBGobr/KMyamuB7n5SklMWRI9ErC69X+esrKrI4ckTFJLKyPqSpCZYt28zpp++mtNSFYThZsQJ27waXC+bMUS6l885TVll5+RwG+vnHqiz8/t4aDms854knUqms7I1ZdHbCnXfCP/8JSUlTSEr6C5BMfv6blJZ+a0ClbxgGX/vaHKCap556lB//+EbbJq3RWhYHhRBnA1IIkSaE+B4Bl9QnEeusfezYsUyYMCHiugaxFrQNpVLaPNeUVS0LafQ7ZjAttoeLYAtn+/btPPnkk6SlpWEYBo2NjaxevTomd9dQ2qRYz7PKVlVV1bM86NixY3vSamNNNzaL8tLTnVH5vM1gMvS2Gy8tdZGdbV3HHFJTHX1cUSapqeGrpEG5e/LyPHR3C5YvvzLib9LpdLJihfIO/+xnT/ekxJ5/fio+n6C5eUFgwajTaG9fwemnt3DBBfDHP8Lzz08gJWU7KqeFHgst3AQgPz82y+L4cWUlFBWl9iwx++yzf2X8eNi6NYupU+eQnu7k3ntVltEFF8C+fZLnngOXy8+kSSqzLFx7chPT3RO8TkY4vN6+VdimC+yss5KpqYFdgX6PK1dCZSWsWAEXXywoKzuFyy7bx49+dBcwsNJXhX+1wHEMI9XW5qDRWhY3Ao+gCu1qgbXAzfESym6ss/bS0tKoAt2xFLQNJTPIeu5A2U6DbbE9nATP6i+99FLuuuuuPrJHa4UN9p6FO88qW7RWRLjPaC3KO34sic7OgV1EoGa8DQ2qN1BmptrmcDh56qkqli+voL29ldzcQnw+X48rypq7H0nM5GTo7j4ITKarq4D6+p0RExyOHlWjVnFxb7e6KVNg4sRuamtvAT4Afk9SUgO33ppDfj7MmgU1NQKXq5N7783A4+kkPT2d1atXh72XeXkqWButsqhXTWMpKOgbYD/7bKWs9uxRiwtt2QLf/jZ87nMGW7Z8htbWQlpb97JsmZe2tkbuu6+Y7dsjxwaiVRZdXepY8zyTc881ePrpVH7xiyTOOy+ZV15RFtgXA0UBbrebZcsW89prKmvrgw+2Ei4hwOVyUVRUTE1NC2lp42yNm0a7BneTlPIrUspiKeVoKeVSKWVz5DNPPKyz9jlz5lBTU9Nn0M3Nze3p5moYBhs2bGDDhg2UlpZGHUweSssP67mHDx/uKSALvs6gW2zHkVCNDqMNbg/2ng1Xw8CBMM//v7YzWXtsXtjFgax4PMrfPXp03/5OeXmFPPvsbh55ZD133PEcHR1HQ7aPiEZZTJ8+FoDU1KlRufqampTFYr22EPCd7yShMuDXA2nk519LZqZyKV1wAdxwA5xxxnRGjRqDw9HXQgtFfn5sgWTTXWfpHAPA1Vcrl9aKFfDLX8KMGUc5/3yDPXsqaWvbjtf7Oq2tB3tWsgvXntzEbL2xe3cN7e2Rf5MNDapWIs/id3S7Db75zXI6O5eza1cyjz2m3GHXXdd7THC228cfh5fJ6XTy1ltbmTChiNmzL7H1fzgqy0IIUQQsB8qs50gpl8VHLHsInrWvXr2aU045hZKSEo4cOaJcDampLFmyhKKiIrq7uzl4UHU0mThxIps2baKmpibiDHUo6alqplGEYRh4PB6Sk5NxOBwUFRX1uU4sLbZHkuBGh/FM6TUMg87OzhGJjQDcX3M1Hp/g9BiURagaU3P27HYb/eoGTCK1qk5OhsmT1UGf+9zPee65vIi/geZmNSAHNyd0uQyuvfYtfvvb9fh8z9PR0dwvhmL67BsaqrniioF/b+ZM3HTDRcJqWZi43Qb19dXce+80Vq5MY+/elXz00Q+5/vp8pOzG61Vrl2Zl5ZGams7Ro00Rv3+n0wCc/OEPv+Hdd58Z0AqxymVVFnv2VFJXtx9Vx9xMdvYo7rnn8T7XCa4HmTFj4N9kTo6TsWN717+wi2jdUC+jphVv8AkPbJuzUMMwWLx4MWPGjOGtt97i7LPPpqmpiebmZqSU+P3+gA9X5UoeOXKEXbt2RVWQN5SB3Ol0snr1ahYvXkxnZyd+v78n7TPUsfGuC4klqG8ea1phsQz85j0zVyCMRi6r4l+zZk1cVy00DINc0cIu36SomuQdPWpQV5fMKae04XZnh6z4DVUEZxLpY5gtt4uLob19bES3GKjByFwEKClJzZrNDK2Wljqk9OBwpPXriGuV99RTBw4iQ+8MPtrOPeagnJ+veks1NvbKlJ2dz223Pc0dd9xKV1cHLS1dgAj8Xwra29soKCjh0UfXcNVVA3//hw9XA1Px+bJpaIg8iTGVXV6eum/918J4la4uB7W13w6pWGtqqv9/e+ceXmV15f/Pysn1JEDIjYRAuAgYQBAUL/UytKVqtRfHto5jvdXR2nbsTau2ld/YqTMdOzNtZ7y1HUeLttg6rdVWabUtXqrxgopBFImKykUIkEAS4RySkGT9/tjvm5xczzlJzgWyPs/zPiTvefOeL/u8Z6+991p7LaZNq4r6/cnMhIoKF9mlOnim4UQTq7EIquo3E6okDfBHrzt27KCtra17A9nTTz9NU1NTdyitiFBS4taTd+70K5K1ce6557J+/fqYdvwOtyP3l2wmTZrEzp07aWtro62trXs/QDI3DcbjR+h77Zo1a3jjjTcGvHYo+ib+G+z9Ig0/QF5eXkINxYIFC5jf/C0amUtDgxuhDnX9hz88n+bmOtasuZtLL/0pK1ZsGNRg9I2Cgh4/x2BkZLhj+nTYssWFnw6VhgPc+vvEic4QTZnioor8JZO2tjA5OUG+8Y07OOWUcwZNZzGUs9bHNxZ79sTW+flGpbgYFi+Ge+/tHTV2000XUVhYSnMzFBaWevfeycGDbbS3t9Lc3EBBQfTP/8gjqwkEdqM6Pab8UL6xmDDB+Xb27IH9+xczaVIVu3ZtQwSKigY3rFVV1Vx22QKam4d+nt0Gy3ZCoWy2bw8zZUp6R0OtEpGzEqokDfBHr6tXr2batGm9ChpFptrOysqira2NlpYWSkpKyPG+IfX19YPGl48GkckEAVatWtVLZ7KdX/H4Efpe+8Ybb3DxxRcnzG8xWvUqYsHXVcAeWijmrbfqhvRbuCyqrbi6YTvZuze2Ij4+WVmxVUzLzITKyoNs2dLlGbChaWpyo+SiIjeSzc7uWTLJzc2nqKh8SEMBsRkLfyzV0hJbjYbdu1051uJiZwBPPLF31Fgo1MLy5Su5+eanWLFiAz/5yYuMHz8RETewKywsjenzHzcuyOLFU6ms/GhM+aF27HBhb3l5BwgGobIS8vKC3H33Rm699WluueXpQQcB4JasGhvroz7P7e1h7r//qwCceOJnk5pbLZJYjcXXgIdF5ICIvC8i+0QkxfsJE4Of22nDhg3dYZ0lJSWsW7eOyspK8vLy6OzspKGhgQMHDhAKhRjvZ21j4JoNo0VkZ9nQ0MDEiRO7da5Zs2bAENpEEk+H3PdaIG6HdTzvN1o70WPB11Uoe+kgm7Ky6iErwbkiQ34dsN0UFcVWxMdnXIzZ2To6wjz22D/T0ZHBBz5w+pDPhu9wnjixx29RWtqzZHLzzU/FVD8iFmPh+2mammJLrdHY6AyY/zWrqnJRYyUlld6GvHKmTDmS9vYDbNpUy3vvvUEo9D6qSlZWDsuXr2TixOiff2YmVFUFaGwMkpERfUn15ptvBeDaa51/KTPTfTZ+dcOjjjq5O39W3+p5ra1hvve9C2lv78lqMNjzvGlTHaFQrdcW41MWPhvrMtQE4AJghqreKCJVQEXiZKWevstEfqrtBx98kMsvv5xOLztbUVERzz77LCeddNKIazZEYyAnbzDo6isnO0kfxOd7GSi31XD9FrH6SJLhs4nUtWLeD2ELtLUF2b+/Z7PdQNdff/0fuOoquPLKb/Pxj8+MqYiPT6zGYtu2OsJhlw12z56MIZcpm5vxNuT1+ENKSmD79sGXwgZioLrbfSkqcu+zdat7z4KCoa/3He/+0ltODlRUuKixrVvrKCur4ktfOo5du7YAUFY2td+ylOrQS4PglnsqK90mum3bYNq0wa+tq6sjFMoFWmhu3tbdtv4eEp+BkkLm5gbZurWO5uaGXptBB3ue58+vZuLEA+zaBfn581MWPhvrzOJ24ETgfO/3fcBtCVGUxgSDQc444ww6vPwJgUCAZ599lqqqqmHVbIh3k1ks6Su2b9/Offfdl7QZRjxhp5HXDnfkPxqpSBJBMBikssD5tN5/fyBnZw9dXdDc7HrVY445qttQDFUAJ5JYk+DOmlXN+PHuWS0omDNkJ+OHp7a3b6az0z0748fH70yNZXksEHC+lM2bo1fMU3XGwu2x6DlfWNhjxHbv3uo54F3ASVNTA8uXr+Q//9OFaF977Rl88IPRlzozM52vBno21A2Gq7ExBZE9lJT0DHb6hvcOlBQSepb3gsHoocYFBUF+/vPnmTNnP8uXX5X2O7hPUNUrgVYAVW0C4i2GdFiwdetWsr3QkpycnO6EafF2YvHs+I7czwH0ex8/nBaco/3yyy/vrjU9XEazFvdgpGvHP1yKMt2Q0t9xPBitrT3ppv3OZcoUOP54N7L1ycx06/SRzVNQEPvMYty4ID/84b0AXH757UO287vvulDTe++9mqOPds9jIBD7e4EzLLH6UnxjES05Xns77N2riOymq6vnWYwMV62qqqaoqKfoWFHRJGbNWkx2dh7NzQ0x7bGAnpkFwNtvD60rGAwyf/7HmT59Ek8+2TPYGT++9876SJ9PZPizv7z3xBOxDZby84P86lcFXH116rrdWJehDnrlVRW6913EnjHtECGWMFB/s9tIU3jHuuM7HA4zf/58tmxxU+xp06b1S5nth9MuW7aMtrY2VHVEtShSUXsiHsLhcHcIbSLDYeOlOMv1fP7u5I6OgUt5+sYiI8N1LllZMGOG62Rmz3bn9u1zy1jjxzt/Qm2tq3o3Y0b/+w1GVhaUl7veu6lpaGfCunXbgSM4eHBrr2ensDD2bKe5ubHNRNwI3kX3vP76ARYsGNzC7NgRJhwO8tRTt7NkyUpee809i5Ej+NzcICtWbOiuEz5r1uLuaCN/P0Ms39XMTOdPEXG5q1pbB19WU3XJDcvL83tpychwhixyT8T11/+8WxfAm2++TFVVNQUFQY4/PrbvZzw1NhJFrDOLW4AHgTIR+R5QA/xbwlSlgFhH+qPlOI3VWRtZ1zvSCPRl8eLFVFRUDFnSNVZGssM8FkaaF2v+/PmceuqpnHrqqSOeQY0mhQG3JXnvXue1HWwpqrXVhalOmOAMREVF79HopEkwa1aPQzcrC447zh1+2GksZGa69f1g0HVeQzmTMzLc+ktOTqjXs9M3lcVQxPpVaGsL88tfutLAX/rSF2hpGfzze/bZdwDo6NjWvfcBXKSW7+vw627PmrW426kMPaP3FSti+64GAu6+RUVub8dQS4luxtN/eQx62qy5uZGLLprDNdecxne/ex67d2/joovm8LWvnco//MMCAoHYn9tDxlio6r3AdcBNQD3wt6r6m0QKSzbxdJCjsXwSq9GJpa63f79YSrrGQiLDTuNNuNiXWI1nsgmHw7yzzpVlu+ee22htDQ+6FLVvX+/d2/5GuKEQib63oi9+B1NY6GYyQzV1Q4ObEtx11896PY8TJsTeUcX6uL3+ei1NTTUANDUV8Oyzg2+0zM6e5f3b3O9ZLCoauO52JLm5QU44IbbvqogzGGVlLlx3qKXEcNgFBRQV9Y8AmzjR6fr85xfR2LidtrYDNDZu53Ofm0dj43YvfctO9uyJ/bmNZVNlool1ZoGq1qnq7ap6m6oedhlnkxmX7+NHMtXW1vLMM88M2HHGYwT8sN+TTz45KYZsOIx01hKr8Uw2dXV1cDBEEfWEw7PYurVu0JFpfX2YLVtaKSvznc+J0eR38hMnOmMx2N6PcDjMihW/APZx/fUX9nrNbSyL7f1iMXrgO/LrgTAwa8g9KXv3umH7jTd+r9+zWFw8uAM5ksJYcsZ7ZGe7md3u3UPPLLZvd4EKZWX9AxOCQdi1q459+3rXQVXtWbkvKJjI4sWxP7eHlLE43ElmXL5PrEsqo2UE4iFRzueRGuVYjWcyHPSRVFdXk5WdzemspKvrLPLz5w7Y2ezdG+b88xewa5dSW7uCrq5wTHsThoO/Y7uoaOiZRV1dHQcO5AMNNDb2N+CxRl/FaiyWLFlMeXkVIu+Qk7OAqqrBI4G2bm33/mZ6v895/Hg44oj+DuTImZBIz3JeLOTkQHHxQXbu7KKxcfBn57333L/elqF+HHusc7pnZ+eRkREgOzuPQCCTnJw8SkoqWbFiHeXlsX+3EvWMxEMarISlB8ksXOQTuaQCjMgpnQqG02ajkeDQN55D6Uq2gz4YDHLcccfxlW01/HrrNfz2t5lMm9Y/ncULL9R5kVB5tLVtpKGhDkjM5+13msXFB1mzJoPdu9s44oj+7VBdXU1WVoj29kbKyvob8OJitzzTGZEVrrTU/e6n887Pj55OxGfChCD33LOBb36znb1759HZOfCYNRwOc+ut/wNcxaWXLqKurrbX5ygCM2f2zp81f36QKVNg3ToXaFBWNnTdj750dYX5y1/+k4MHv8O55y7l7bf/SkFB/zbzQ40rBtltNnt2kBUrXmXLFrcPpKNjK0uXVvHii2+wZYvTHY+u7Gw4cCDMyy+nLjGozSwY+Tr6cOm7pDJUwZhUEBmyO1BxpeG22WjMWgabOYTDYR588MFBU7cnkkBGBvMmtHDWWR38/vfK5s0H+s0uJkyopqDAjaTHjWth/vzEfd7BoFs7f/LJb9DeHuCTnxw4VURXV5DKypNZsGAOtbX9DWsg0HuDWmkpzJ8PRx3V46eYPDk+bRMmBJkzp5CdOzPYv3/g2hYbNtQRDhcAjezZs33Az3HqVCgsdPstpk4NMnWqMyILF7rw3OnT49O1bVsdBw64ioDNzcWsXTvws+MFJw5qLHJyYM4cp6uysoRPfeoY8vODfOUrF3PttWfwiU/E953p7Axz3nnJ76MiGTPGYqhliURH/wxGMBjkxRdfpLy8nOzsbNrb29MmsifaElltbS319dHz2iRK20CGyj9/xRVX0N7eTjAYTLpPo6uri+efP5uuLuHLX/4O9fU9bXbgALS3B7nsMrf34aabbqO4OHEjxOxsl0n1wIFHAWhunsP69f0/p6Ym2Ls3g6qqQgoLB9YzdarrGCsqYM4cdy4jAxYtgpkzB+80ByMnB2bMaKO9HWprW2lq6n9NaWk1WVlTEWkYcMYDbvZ09NHOcM2b13Pe3/gXy76PSObNq6ao6G2gk+zsjzFpUv/3DIVg2za3PFZUNPj3dfp0WLLE1bNobR3ZIGbz5jr27k1+H9ULP6rkUDmOPfZYjZdQKKQzZ87U/Px8nTlzpoZCobheTyRr167VYDCouD0sWllZmdT3H0pXbm5ut668vDxdu3atqrr2mj59uoqIiohOnz496W2Wn5+vgObn53frijwfDAZ15cqVyW3LpUt1+5xjNSenQGGXZmT8Uu+7b233y6+8ovrEE6oXX6yakaH66KOqLS2JlfTMMyGtqJipsFlzc1fp5s39n/0VK2oVVL/4xcRqiWTt2pBOmrRQoVXz8+/StWv7f06vvaY6e3aHzpvXrHv2JOdz3L1b9ZFHQjpjxj6tru7QV17pf82LLzZobu5dCi06bVr0/sLvX4LBoGZmZmowGIy7n9m7N6SVlSPro4CXdAR975iYWUSbOaTCue1TXV3dK6NtIhMRxsNQUUd1dXU0NDR4idqyuPPOO5PeZgM5ySPPl5WVMT3eNYhRIDcnSFFRGRkZTwEfYvz4avbscWvc/vr+W291UFbWimo45nDT4VJS4tb0lywJkp19Wq/NYo2NjcyePYcvfOHzAJSXx1jndBTYvr2Olpa3gT8TDn+Il1+u65WBtrPT7Q3Zvj3AkUdOGHTGM9r4UUdz5+7jzTcz2Lat9xJZOBzmzDMX0do6GXiLhobote39/iccDpOdnc0dd9wRdz9TWBjk/vtT00f5jAljEUsETqpSTwSDwe6MtsFgsF8iwqH8BonWNVjUkZ9eREQ4ePAgl19+edK1+cY9Mtuuf344ZVtHk2uuuYNlyybT1VVOS0uQV191tSHALUe88EI9u3f/gcsuW0B7e2K1+eOQN9+8lfffz+ajHz2T+npXEnjRokXs2LGd9vZyALKy3k2olkjmzXNRTJmZT6I6g87O6d1OY3CGorHRRXBNmxZ73qyR4/ZtrF59KV1dwgsvtOEVwwRg7do69u3bC8wFNlJYGL22fWT/U15ezjnnnBN3PyMCkyenNj3OmDAWqZw5xIKf0bZvIsJU71YOBoMsXryYvD4Lv356kdzcXFS1u/BSMvH3qJxwwgm9fBd+26XCB9XZ1UVd3Qtcc81p/OUvVwJQW+uGpX6a6ldfXU9n51S6utbS1JR4baWlsGdPHa2tfwagqWkWK1Y8SG1tbURteZdD5KSTqhKqJZKSkiA//vEaCgrchrxvfvM/eOedMF5gILt29YSnxpPiZKS8/XYdzc27aG9/HAjx1FMt7NjRs0clO7uKgwdzgGmI1FFT82xM2Y9Ho/+JZ/d+IhgTxgJ6OpfBaj4kOy6/LwPNbHwnsr9mmEpH8vz583nmmWdobGzkmWeeobW1NembGPsykJM9HA5z4YUX0toavU7AaBMOhznY0e6FQr8K7OO55/b22mX8ve8553ZW1usUFyen3Y45ppqioj1ACx0dx3HjjVdw/vkXUlpaRk5OkNzcBeTk6IBhtYliwgRoadnKgQMvAPXs23ccGzbUUl/fk0rDNxazZydNljdrnkROThZZWWt4660iurrczLC1FV57bSuBwFEABAKbaGpqjOm+o7FyEe8O/lFnJA6PVBzDcXCr9ndiNzQ06Nq1azUUCqXUwd1Xo6+poaFBKyoquh3MqXYki4jm5uZqIBDodmxXVVVpTU1NStqrr5O9qqpKV69erXfddVd3wEBubq7W1NQkTVPHqafqM1k53Z8ZPKKBwDt6yy01mpubr5Ct8I6Wlu7Rm2+u0Q0bktNuDQ2qDz7YoJmZjym84rVNUH/ykxq9/faXtbKyU6ur3XXJZOPGkJaXT1f4qcJ+LSqaqatWNehLL6k+/HBIZ81q1pycDn355eQ+X+++26AlJZUaCFyroPq//7tHn3hC9amnVP/4x5AGg79UUJ006cNpEYwSK5iDOzYindw7d+5k0aJF3csXtbW1KVm2iCRyFD937lzmzp1LfX094FKh33nnnSPK9zQc/LXWXC9TWmtrK52dnd0PT0NDQ0JrWw9FXyd7KBTitNNO47LLLusOm41WJ2C0CWRkUF19PNdddxfZ2bnAQ3R2zmDXrjwmTpxEIHAdMIPm5kv4/vcvTtqu3IIC2L17K6o1wFHABHJz8ykvP5K6usVs357BsmWbuutYJIvJk4MsX76SQOBBIJ+9e5dwySVHs21bI5/97A/YtGkCbW2XcvbZyV1+3bNnK/v2NdHZ+QgAV131r7S2hunshPXrg4TD57Ns2S5WrXo47Za0E8pILE0qjpHOLILBoJaWlnaPPvPz87WmpiblM4vIUXzfI5XhtP4MR0QU0IyMjJSFzEYS+XlmZGT0aq+cnJzkh82qqi5dqk2Lluojj7hw1ezsIxRUly5t0pNPXqugKvKwN7LP1yefXBv9nqPE6tUhLSo6T92e8h9odnauFhXN0HHjDmh29rOak5OvM2Yk99nv6lL9859DWlRUqbBR4XWFLL366rsVdig84bVVT9h2MgiFQlpaWuk9T++qSK1++9v36iOPhHThwg6dOLFNH3oopJs2JU3SqMAIZxYp7/zjPYZrLFRdx1dZWdm9nOLHOzc0NGhNTU3KllRUe5ZV+hqK0tJSbUj2+kAEfZeicnJytKKiQlevXp3yKXgoFNKVK1dqTk5OrzabPHlyarQtXarvH7tUn3hC9eGH3VJGRsatXgetCr9QyFMR0fLy6UnbO6Cq+u67qg880KDZ2Ss8LZ9Q+Lr389/027OSLDZuVP3hD1crfNLT8iU955wXvJ9PUxHRadOSPyiprfWXoi5QUA0EvqNFRR9XUM3M/KZWVMzUTZuvqxnCAAAWcElEQVQOnSUo1TQ3FsBHgTeATcC3Bnj9AmC9dzwLHB3tniMxFn03wJWWluqWLVtSPqvwqamp6dXxZWRk6JYtW1KmR7VnBJ+bm9s9u0hFpzIYkb4LQMvLy1NnXJcu1dDxS/XVV1X/+te1mpMTVMhQOF/hEu9nNDs7V2+/PXm+FFXVzk7VO+9cq9nZ4xXWRxiw1QqiOTl5KXn+OzpUH388pGVlVd5MYrfCqwp1On58id500yptaUn+d7KzU/XRRxt0woRShXsj2qtJoUBzc4P6+OPp8R2IlbQ1FkAAeBuYiSvB+gowr881JwETvZ/PBNZEu+9IjEUoFNLKysruzjgnJ0dvuOGGXktSqewE++qL3DWdSkKhkNbU1GhVVZXm5uamdPlpIHx9qZwZqqrq0qXa9oGlun9/36WMyCWyoFZUzNTnnku+zpdecstjmZnHR3R+R+ukSVV6772pa7t331W99dYazcw8RiHs6fq0N6BL3RLsqlVrNTs7TyHPWyJThcsU0JKSyqTODEeDkRqLRGadPR7YpKrvAIjIfcDZwOv+Bar6bMT1zwNTEqinewPcwoULqa+vp62tjRtvvJFAIJCSPEKD6Vu0aBFNTU39NuilUtfixYvJyMhAYqmbmWSiZaFNJlnZkJ0PEGT16nUsW7aI99/fQzA4jptvfprW1hBVVdWUlSXfMVpV1ZOhNRRq4v3336a4+HZmzVrMggXBhO8mH4zycpg9ezGlpc00NJxHR8c44LcA7N/flLJMzCedVM348UU0Nm4HTgWOAF6gsLCUlSvXUVQ0hpzbJDZFeSUQsfeR94AThrj+MuCRBOoB3Aa43/zmN931qgE6OzvJz89nzZo1KY9u8DfoJTtdejT86KMDBw50b8I7VFKpJ5NIU3rkkSX84hdvdqfP9st9Aowbl3xtxcUwbpzLhOpY0v1aogowxUJuLkyd6jbpff7zzrh2dATIzs6htDR1A6aJE4M88MA6zjlnIXv37kR1D8XFFdx773pmzoyxyMdhRCKNxUBDUB3wQpEP4YzFKYO8fgVwBUBV1ch3mfr1qjdv3tx9LhQKsXXrVkpirfSSQPwNPOmEH0br14hIhxlPupOTAxUVQXJze3+WGRk9aTiSSUaGyx77zjs954qLXb3vVBfXmTEDnntuK/v3N9Pe3kpubpA777yDs8+OPzXGaLJgQQkrV25i06Za7/fFnHJKegzgkk0i91m8B0yN+H0KsKPvRSKyELgTOFtV9/R9HUBV71DVJaq6pNQvXDwC/LxHq1evZvLkyQPmZDJ6k+4pU9KVysr+5woLY69rPdpUVbl03iKuWFF1tUvjnbzcSwOTlwenndZT9c7PoTRQ4aFkUlgI8+cHOeqokznqqJOZN88VLYqncNHhgji/RwJuLJIJvAksA7YDLwKfVdUNEddUAY8DF/fxXwzKkiVL9KWXXho1namokGccpnzwg+7fJ5/sdXrvXpdbqLDQddBZWb2r56WCXbvc8k+spVCTxcaNYd58s47TTkuv7+POne5zjKyZcaghImtVdUn0KwcmYeMbVe0QkS8Df8JFRv1MVTeIyBe9138K3AAUAz/2HKcdI/nPDId0XPIxDi+KilKtoD+D1Y5ONXPnBqmuPiblxrQv5eXuGMskdDKsqn8E/tjn3E8jfr4cuDyRGgzDOLRIN0NhOMZMbijDMAxj+JixMAzDMKJixsIwDMOIihkLwzAMIypmLAzDMIyomLEwDMMwomLGwjAMw4iKGQvDMAwjKmYsDMMwjKiYsTAMwzCiYsbCMAzDiIoZC8MwDCMqZiwMwzCMqJixMAzDMKJixsIwDMOIihkLwzAMIypmLAzDMIyomLEwDMMwomLGwjAMw4iKGQvDMAwjKmYsDMMwjKiYsTAMwzCiYsbCMAzDiIoZC8MwDCMqZiwMwzCMqJixMAzDMKJixsIwDMOIihkLwzAMIypmLAzDMIyomLEwDMMwomLGwjAMw4hKQo2FiHxURN4QkU0i8q0BXhcRucV7fb2IHJNIPYZhGMbwSJixEJEAcDtwJjAPOF9E5vW57ExgtndcAfwkUXoMwzCM4ZPImcXxwCZVfUdV24H7gLP7XHM28HN1PA8UikhFAjUZhmEYwyCRxqIS2Bbx+3veuXivMQzDMFJMZgLvLQOc02Fcg4hcgVumoqqqauTKDCMRPPlkqhUYRsJI5MziPWBqxO9TgB3DuAZVvUNVl6jqktLS0lEXahiGYQxNIo3Fi8BsEZkhItnA3wMP9bnmIeBiLyrqRKBFVesTqMkwDMMYBglbhlLVDhH5MvAnIAD8TFU3iMgXvdd/CvwROAvYBISBSxOlxzAMwxg+ifRZoKp/xBmEyHM/jfhZgSsTqcEwDMMYObaD2zAMw4iKGQvDMAwjKmYsDMMwjKiYsTAMwzCiYsbCMAzDiIq4gKRDBxFpALYM889LgMZRlDOapKs20xUfpis+TFf8DFfbNFUd9q7mQ85YjAQReUlVl6Rax0CkqzbTFR+mKz5MV/ykSpstQxmGYRhRMWNhGIZhRGWsGYs7Ui1gCNJVm+mKD9MVH6YrflKibUz5LAzDMIzhMdZmFoZhGMYwMGMxDERkoKJNRh+81PRph4hMEpGsVOs41Ejn5z6dtaUjw2kvMxYxIiInicinwWXLTZeHU0TOEJGvp1pHX0TkbOAWERmXLm0FICJn4uqojPd+TwttIrJERM4XkSNFJG2+lyIyU0SOgu4s0WmDiBwhIsdAemkTkYJUaxgIEZkuIgtgeO2VNg9luuIVZgoCvwS+LCKXQrfBSGn7icjpwL8Br6RSR19EZBlO18Oqui9dvshee/0LUIrTlxadjIh8AvgFcDbwP7hNVylHRD4JrAK+IyI/F5HPiMi4VOsCEJFzgD8DN4nIQyJynogUpYGujwG/E5GlqdYSiadrFfAjEXlMRCZ552MeLJmxiAFVDQO/Bp4A5nk1wVHVrlRpEpFTcbVCLlTVJ0SkUETK02R5ZRHwI1X9g6dpmYjMS+WXWUQ+BNwOfB5YCOT7I+ZUzi5EpAK4Cvh7Vf17YBtwovd55qRY11eB81T1XNyA5DvARSJSmCpdnrY8XOXNC1T1DFwneCJwQYqfsaOBn+GKuV2VLgZDRE4Cfghcpqqn4Z6xmyG+wZIZiyhENOZmoBB4GWcw/lVElnszj1S045vAPuBUz0A8gAupWyUiZ6WiA4x4zyKg3GuX+4EvAjcAy0WkLAW6MoEJwEWqWgsEgTxgGaR8dtEC7AeqvU74NOBzwD3AFSlc0mgB2vBmOar6Q+A9YA5wDKTUyHbgvouLPG13AE8DM4ClKdT2LvBN4J+AR4BrU20wvHbIBr6rqmu8098GbBlqtBGRgPfji8BeVf0V7ot0DTBRHUmfYajqLuAo4EYgBNynqp/ElbH9MpCfAk3+A3g3cCrwK+Aub2T637gOe0YKdHUAq1T1eREJqOpu3Mjqa/6adwppA/4PN+N5FLhVVT8FrMS14bBz+YyQTuBJ4CwRuUhE/gXYCdQD/wipM7KqehD4EXC0N2pGVR8A3gEuT4U2ERFVfR/4hao24FYiHgKuE5EPetdUegOXpOH1T08CqyNOZwBzRWSipyummaIZiwEQkYUiMh9AVTu9028AFSJyAXARcBswTkQuToUuT9t2YDFwrTe6QlV/5L1clSpduFnYPcBcPOOgqs/jRjizkqzLd852eP92el/sp3Cd9NHetYHB75QQXZHP16+BTwPPAa97538D5ODaMBW62nDLnHXAB3EDo0tV9d+BjmQvkYnIR0TkNm9G/wGcIdsBfCzCYNwGZIpIdbJ1Af8iIif7/YWqNuFm+78HvigiPwZuxX2mSdPltdeJngHDW4VoBdpVtUlELgL+PabPU1XtiDiAM4EunDE4JuJ8EPgxriM80zv3GaAilboGuO48oBYoTXF7lQFfAB4DrgY+C6wDZqRLewGX4DrDnBQ9X8f2ee3jwPeB03HO7vVAVap19bnuUuAZID+JbfYxry2+DFyL8x1OAuYBy4E7cf6VC3DLs8l69gfSdcQA1/0fbla2KF10AStwy1EvAAtjuW9Sp0Tpjuc4Ow64Hrdk8nduEKq1qhoWkfuAe7Rn7e9B7Zl5JFsXqvpyxDUB4Hzcl+cz6o0kUqVLVXeLyD24EeCVwGTgYlV9N5W6vNczVLVLVe8RkZOBCtwgINm6zvWeL/9zfBe3Dn81kIULXtiaIl2o6to+1/0Dzsn9MVUNJVqX955lOB/OV1X1SS8aazZQqaovi0gLMBP4Gs6Hd16Snv2BdM3CtV/kdacDJwEfUdXXUq0rwr96Os5n9xFVfTOme3tWxvAQkemqutlr9BtwD+ADqvpixDUBoEuT2HiD6Pqtqr4Ucc1ZwNuq+kaKdR0S7eVdJ+mmS0TygWx1SxnppGsKkKeqbyVRVwbO6V/jGygR+V/gHVW9KeK6LOj2Z6RS19uq+v2I6ybilvDeSTNdXwX+rKp1Md/bjMXgiItF/idctMrNwEeAjX07nDTR9Zq6SJ9001UXaThM16C6bsGN9N6MmLmmgy6/vZKuq68h938Xkf8HtKrqD8TtBXknGaP2YejarKrr01DX66q6Kd77m4N7ELyomV24TVwduE15PwIOpKmu9jTVFTZdMem619O1P810+e2VdF0DzPj8/mobsEtEPg78M85hm466kvqMxajru8O9v/ksPPx17Ij1bD+qYZeIhIH5wFJVfd10mS7TlTptQAC3wXIjbu9M3KPkMazrwuHqGrPGwnM8nQI049JSvCUimaraIW6375mqep3nICoAzkjGF8Z0ma6xqCtGbWep6rXAHtwGwc8mw39iujw0SeFv6XTg1obX4ULtvuI19qneawtxG/A+E3F9pukyXaYrPbThBrlTTFdydY1JB7eILAdCqvrf3u+/BE4GPomLAqlQ1Wf86ZzpMl2mK220ZWmSIp5MV2/G6jJUGzAlInrgNVyulN8Cp6jqM5CSRIGmy3SNRV3xaEtah2y6ejNmZhYicgRwUFW3ikgJ8CAul0wQtxv1LBH5L+B3qvpX02W6TNfY1Ga6BmZMzCzE5b7/f0CLiLyCy4N/GnA8UAz8wbt0HEmsJWC6TNdY1JXO2kzXEIyWwyVdD1xFtOdxW+7LgU/hLPI/9rnuMmADyctdZLpM15jTlc7aTNfQx1iYWXQA24EdqrpTRP4ENAJXikiLqt4rIvNwmTUv0CTkLjJdpmsM60pnbaZrCA77Hdzqqty9CfxMRMapy5dSC/wOVw8CXGWrL6nqOtNlukzX2NRmuqILOWwPehz4AVzKgruBcd65Kbj02UlJMW66TNdY15XO2kxX9OOwnFmIuJKK6rWoum3v/wU0AI+IyBzgw7gogmTGRpsu0zXmdKWzNtMVhyZPy2GBiMzAbUjpUNVm71xAXXW06d5rX8Hlv68Cvq5JmE6aLtM1FnWlszbTNQySPa1K1IGrDvU8cD8u42MJPcbwQ7ja1HO0Z0qXlOpopst0jUVd6azNdA1TXzLfLIGNfDrO4XMcrqby74DJ3muZuNrGnzFdpst0jW1tpmv4x2GxDCUiXwE2qeojIlIK1OASadXiHECvqpvGJbsqmukyXWNOVzprM10j0Hg4GAsfEcnFFUd/Fngc+AAwF1dbuEVTk/PGdJmuMakrnbWZrvg5ZDflichs4H11RVpEHa0i8gVV3eldE8ZFDHQkq5FNl+kai7rSWZvpGh0OydBZETkbNzW7QUSqVFXFFSoH2BVx6ZG4rfJZpst0ma6xp810jR6H3DKUiEzA1SuuA3YDk4Cb1WVi9AuUC/B14ELgEk1CMXfTZbrGoq501ma6RpdDzlhAdyzyHqAaOBvIA25R1c3e6/nAtcD9yWxk02W6xqKudNZmukaPQ8ZYiEgVbnqWqS43in/+BFxj5wLXAMfgogqaTZfpMl1jT5vpSgyHhM9CRD4G/BG4FVghIkf6r6nqGuD3QD0u3Owx3Bqf6TJdpmuMaTNdCURTuMkj2gEIMBV4FZd+dxLwDWAHML/Ptf8NvAscZbpMl+kaW9pMVxI++1QLiKGxA8AdQCU9y2ZfxeV397e+TwReARabLtNlusamNtOV4P9HqgUM0cCzcFvfi3GbVK7r8/p1uHS9Qe/3XNNlukzX2NNmupL0+adawCCN/HFgPfBX4Dbgk8Bm4NsR10wH/oceSy2my3SZrrGlzXQl70i7HdwichLwA+B8Va0VkTtwRclPAp4XkQBwH3AKcCxQCDSp19qmy3SZrrGhzXQlmVRbqwEs8knA5yJ+LwX+4P08E/gZ8GPgJWCB6TJdpmtsajNdyT1SLmCAhg4A4yN+noLLvFjhnZuGy2k1wXSZLtM1drWZruQeabfPQlU7VfV971cBmoG9qlovIhfisi9mqWqL6TJdpmvsajNdyeWQ2MEtInfjNqycjpvevZpaRQ7TFR+mKz7SVRekrzbTlTjS2lh4ybSygI3ev8tU9a3UqjJd8WK64iNddUH6ajNdiSetjYWPiHwOeFFVN6RaSySmKz5MV3ykqy5IX22mK3EcKsYiZaUEh8J0xYfpio901QXpq810JY5DwlgYhmEYqSXtoqEMwzCM9MOMhWEYhhEVMxaGYRhGVMxYGIZhGFExY2EctojIVBF5QkQ2isgGEfmad75IRP4iIm95/070zhd71+8Xkdv63OtREXnFu89PvWRwA73nsSLyqohsEpFbvDh7RGSaiDwmIutF5EkRmTLI3/+NiLwsIh0i8pk+r/2H9/4bI+9tGMnAjIVxONMBfENV5wInAleKyDzgW8BjqjobV8LyW971rcA/4eog9+XvVPVo4ChcYrhzB3nPnwBXALO946Pe+R8AP1fVhcCNwE2D/P1W4HPALyNPeplMTwYWehqOA5YO9h83jNHGjIVx2KKq9ar6svfzPtwu2krgbOAe77J7gL/1rgmpag3OaPS9l5/rJxPIBvrFnItIBS6B3HNeTP3P/XsD83CGCeAJT8NAmjer6nqgq+9LQK733jm43cC7hvr/G8ZoYsbCGBOIyHRgMbAGmKSq9eAMClAW4z3+BOwG9gH3D3BJJfBexO/veefAlcz8tPfzOcA4ESmOVb+qPoczMvXe8SdV3Rjr3xvGSDFjYRz2iEgB8Fvg6xEzhLhR1TOACtzI/sMDvdVAf+b9ew2wVERqcctH23HLZDEhIrOAubh015XAh0Xkb2JXbxgjw4yFcVgjIlk4Q3Gvqj7gnd7lLRn5S0e7Y72fqrYCDwFni0hARNZ5x424mUSk43oKsMP7ux2q+ilVXQws9861iMj3/HtEeetzgOdVdb+q7gcewflhDCMpmLEwDlu8aKG7gI2q+qOIlx4CLvF+vgT4fZT7FEQYl0zgLKDOq1uwyDtu8Ja09onIid57X+zfW0RKRMT/vn0bVy0NVV3u3yPKf2crbmaS6RnApTgfjGEkBcsNZRy2iMgpwNPAq/Q4jK/H+S1+DVThOuFzVXWv9zebgfE4R3Izrv7AHmAVbvkpADwOXKWq/ZaRRGQJcDeQhxv9f0VV1QuDvQm3LPUUcKWqtg3w98cBDwITcY72nao63wvV/THwN949HlXVq0fQPIYRF2YsDMMwjKjYMpRhGIYRFTMWhmEYRlTMWBiGYRhRMWNhGIZhRMWMhWEYhhEVMxaGYRhGVMxYGIZhGFExY2EYhmFE5f8DjSw+ledG0A0AAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "def plot_prediction(ds_preds, i):\n", " \"\"\"Plot a prediction into the future, at a single point in time.\"\"\"\n", @@ -3684,37 +2959,14 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:42:58.121923Z", - "start_time": "2020-10-16T04:42:57.972985Z" + "end_time": "2020-10-18T03:12:49.086270Z", + "start_time": "2020-10-18T03:12:40.700Z" } }, - "outputs": [ - { - "data": { - "text/plain": [ - "Text(0.5, 1.0, 'NLL vs time (no. samples=7465)')" - ] - }, - "execution_count": 27, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "d = ds_preds.mean('t_source') # Mean over all predictions\n", "\n", @@ -3730,37 +2982,14 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:42:58.284011Z", - "start_time": "2020-10-16T04:42:58.123318Z" + "end_time": "2020-10-18T03:12:49.088308Z", + "start_time": "2020-10-18T03:12:40.700Z" } }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "d = ds_preds.mean('t_source') # Mean over all predictions\n", "d['likelihood'] = np.exp(-d.nll) # get likelihood, after taking mean in log domain\n", @@ -3779,124 +3008,18 @@ "outputs": [], "source": [] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "

Exercise Xarray Scatter Plot

\n", - "\n", - " Lets try out xarray. Many people like seeing a plot of y_true vs y_pred.\n", - " \n", - " 1. Make a plot of y_true vs y_pred\n", - " 2. (hard) Make a plot of the NLL over time. Does this solution get worse with time?\n", - " \n", - "\n", - "
\n", - " → Hints\n", - "\n", - " * The interface is similar to pandas\n", - " * Fill in the columns here: `ds_preds.plot.scatter(?, ?, s=2)`\n", - " * Take the mean over t_ahead\n", - "\n", - "
\n", - "\n", - "
\n", - "
\n", - "
\n", - " \n", - " → Solution\n", - " \n", - "\n", - " ```python\n", - " # This is easy with xarray\n", - " ds_preds.plot.scatter('y_true', 'y_pred', s=2)\n", - " ```\n", - "\n", - "
\n", - "\n", - "
" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "
\n", - "

(hard) Exercise: Loss vs Time plot

\n", - "\n", - " Solutions typically decay in usefullness with time, and can require retraining. Does this one?\n", - " \n", - " 2. Make a plot of the NLL over time. Does this solution get worse with time?\n", - " \n", - "\n", - "
\n", - " → Hints\n", - "\n", - " * Take the mean over t_ahead\n", - " * group by t_source\n", - "\n", - "
\n", - "\n", - "
\n", - "
\n", - "
\n", - " \n", - " → Solution\n", - " \n", - "\n", - " ```python\n", - " \n", - " # this is hard because we need to take the mean over t_ahead\n", - " # then group by t_source\n", - " d = ds_preds.mean('t_ahead').groupby('t_source').mean()\n", - " # And even then it's clearer with smoothing\n", - " d.plot.scatter('t_source', 'nll')\n", - " plt.xticks(rotation=45)\n", - " plt.title('NLL over time (lower is better)')\n", - " 1\n", - " ```\n", - "\n", - "
\n", - "\n", - "
" - ] - }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:42:59.170079Z", - "start_time": "2020-10-16T04:42:58.285409Z" + "end_time": "2020-10-18T03:12:49.089886Z", + "start_time": "2020-10-18T03:12:40.700Z" } }, - "outputs": [ - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 29, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ - "\n", + "# Make a plot of the NLL over time. Does this solution get worse with time?\n", "# this is hard because we need to take the mean over t_ahead\n", "# then group by t_source\n", "d = ds_preds.mean('t_ahead').groupby('t_source').mean()\n", @@ -3909,79 +3032,14 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": { "ExecuteTime": { - "end_time": "2020-10-16T04:43:00.044504Z", - "start_time": "2020-10-16T04:42:59.171439Z" + "end_time": "2020-10-18T03:12:49.091195Z", + "start_time": "2020-10-18T03:12:40.700Z" } }, - "outputs": [ - { - "data": { - "text/plain": [ - "1" - ] - }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "# Lets zoom in and see how fast the solution expires\n", - "d = ds_preds.mean('t_ahead').groupby('t_source').mean().isel(t_source=slice(0, 24))\n", - "d.plot.scatter('t_source', 'nll')\n", - "plt.xticks(rotation=45)\n", - "plt.title('NLL over time (lower is better)')\n", - "1" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "ExecuteTime": { - "end_time": "2020-10-16T04:43:00.831224Z", - "start_time": "2020-10-16T04:43:00.045832Z" - } - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 31, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# A scatter plot is easy with xarray\n", "ds_preds.plot.scatter('y_true', 'y_pred', s=.01)" @@ -4001,9 +3059,9 @@ "formats": "ipynb,py:light" }, "kernelspec": { - "display_name": "deep_ml_curriculum", + "display_name": "seq2seq-time", "language": "python", - "name": "deep_ml_curriculum" + "name": "seq2seq-time" }, "language_info": { "codemirror_mode": { @@ -4015,7 +3073,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.0" + "version": "3.7.8" }, "toc": { "base_numbering": 1, diff --git a/notebooks/RNN_Timeseries_Seq2Seq.py b/notebooks/RNN_Timeseries_Seq2Seq.py new file mode 100644 index 0000000..f34d039 --- /dev/null +++ b/notebooks/RNN_Timeseries_Seq2Seq.py @@ -0,0 +1,519 @@ +# -*- coding: utf-8 -*- +# --- +# jupyter: +# jupytext: +# formats: ipynb,py:light +# text_representation: +# extension: .py +# format_name: light +# format_version: '1.5' +# jupytext_version: 1.6.0 +# kernelspec: +# display_name: seq2seq-time +# language: python +# name: seq2seq-time +# --- + +# # Sequence to Sequence Models for Timeseries Regression +# +# +# In this notebook we are going to tackle a harder problem: +# - predicting the future on a timeseries +# - using an LSTM +# - with rough uncertainty (uncalibrated) +# - outputing sequence of predictions +# +# +# +# + +# +# - [ ] TODO mike autocorrelation baseline +# - [ ] TODO mike acorn data + +# OPTIONAL: Load the "autoreload" extension so that code can change. But blacklist large modules +# %load_ext autoreload +# %autoreload 2 +# %aimport -pandas +# %aimport -torch +# %aimport -numpy +# %aimport -matplotlib +# %aimport -dask +# %aimport -tqdm +# %matplotlib inline + +# + +# Imports +import torch +from torch import nn, optim +from torch.nn import functional as F +from torch.autograd import Variable +import torch +import torch.utils.data + +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt + +from pathlib import Path +from tqdm.auto import tqdm + +import pytorch_lightning as pl +# - + +from seq2seq_time.data.dataset import Seq2SeqDataSet +from seq2seq_time.predict import predict + +import logging, sys +logging.basicConfig(stream=sys.stdout, level=logging.INFO) + +# ## Parameters + +# + +device = "cuda" if torch.cuda.is_available() else "cpu" +print(f'using {device}') + +columns_target=['energy(kWh/hh)'] +window_past = 48*4 +window_future = 48*4 +batch_size = 64 +num_workers = 0 +freq = '30T' +max_rows = 1e5 + + +# - + +# ## Load data + +# + + +def get_smartmeter_df(indir=Path('../data/raw/smart-meters-in-london')): + """ + Data loading and cleanding is always messy, so understand this code is optional. + """ + + # Load csv files + csv_files = sorted((indir/'halfhourly_dataset').glob('*.csv'))[:1] + +# import pdb; pdb.set_trace() # you can use debugging in jupyter to interact with variables inside a function + + # concatendate them + df = pd.concat([pd.read_csv(f, parse_dates=[1], na_values=['Null']) for f in csv_files]) + + # Add ACORN categories + df_households = pd.read_csv(indir/'informations_households.csv') + df_households = df_households[['LCLid', 'stdorToU', 'Acorn_grouped']] + df = pd.merge(df, df_households, on='LCLid') + + # Take the mean over all houses + name, df = next(iter(df.groupby('LCLid'))) + df = df.set_index('tstp') + print(df) + + # Load weather data + df_weather = pd.read_csv(indir/'weather_hourly_darksky.csv', parse_dates=[3]) + use_cols = ['visibility', 'windBearing', 'temperature', 'time', 'dewPoint', + 'pressure', 'apparentTemperature', 'windSpeed', + 'humidity'] + df_weather = df_weather[use_cols].set_index('time') + df_weather = df_weather.resample(freq).first().ffill() # Resample to match energy data + + # Join weather and energy data + df = pd.concat([df, df_weather], 1).dropna() + + # Also find bank holidays + df_hols = pd.read_csv(indir/'uk_bank_holidays.csv', parse_dates=[0]) + holidays = set(df_hols['Bank holidays'].dt.round('D')) + + time = df.index.to_series() + def is_holiday(dt): + return dt.floor('D') in holidays + df['holiday'] = time.apply(is_holiday).astype(int) + + # TODO pd.read_csv('../data/raw/smart-meters-in-london/acorn_details.csv', engine='python') + + + # Add time features + df["month"] = time.dt.month + df['day'] = time.dt.day + df['week'] = time.dt.week + df['hour'] = time.dt.hour + df['minute'] = time.dt.minute + df['dayofweek'] = time.dt.dayofweek + + # Drop nan and 0's + df = df[df['energy(kWh/hh)']!=0] + df = df.dropna() + + # sort by time + df = df.sort_index() + + return df +# - +# Our dataset is the london smartmeter data. But at half hour intervals + +# + +df = get_smartmeter_df() + +# df = df.resample(freq).first().dropna() # Where empty we will backfill, this will respect causality, and mostly maintain the mean + +df = df.tail(int(max_rows)).copy() # Just use last X rows +df +# - + +df.describe() + +# + +import sklearn +from sklearn.preprocessing import StandardScaler, OrdinalEncoder +from sklearn_pandas import DataFrameMapper + +columns_input_numeric = list(df.drop(columns=columns_target)._get_numeric_data().columns) +columns_categorical = list(set(df.columns)-set(columns_input_numeric)-set(columns_target)) + +output_scalers = [([n], StandardScaler()) for n in columns_target] +transformers=output_scalers + \ +[([n], StandardScaler()) for n in columns_input_numeric] + \ +[([n], OrdinalEncoder()) for n in columns_categorical] +scaler = DataFrameMapper(transformers, df_out=True) +df_norm = scaler.fit_transform(df) +df_norm +# - + +output_scaler = next(filter(lambda r:r[0][0] in columns_target, mapper4.features))[-1] +output_scaler + +# # Resample +df_norm = df_norm.resample(freq).first().fillna(0) + +# + +# split data, with the test in the future +n_split = -int(len(df)*0.2) +df_train = df_norm[:n_split] +df_test = df_norm[n_split:] + +# Show split +df_train['energy(kWh/hh)'].plot(label='train') +df_test['energy(kWh/hh)'].plot(label='test') +plt.ylabel('energy(kWh/hh)') +plt.legend() +# - +df_norm + + +columns_blank=['visibility', + 'windBearing', 'temperature', 'dewPoint', 'pressure', + 'apparentTemperature', 'windSpeed', 'humidity'] + +ds_train = Seq2SeqDataSet(df_train, + window_past=window_past, + window_future=window_future, + columns_blank=columns_blank) +ds_test = Seq2SeqDataSet(df_test, + window_past=window_past, + window_future=window_future, + columns_blank=columns_blank) +print(ds_train) +print(ds_test) + +# %%timeit +for i in range(100): + ds_train[i] + +# we can treat it like an array +ds_train[0] +len(ds_train) +ds_train[0][2][-2] + +# + +# We can get rows +x_past, y_past, x_future, y_future = ds_train.get_rows(10) + +# Plot one instance, this is what the model sees +y_past['energy(kWh/hh)'].plot(label='past') +y_future['energy(kWh/hh)'].plot(ax=plt.gca(), label='future') +plt.legend() +plt.ylabel('energy(kWh/hh)') + +# Notice we've added on two new columns tsp (time since present) and is_past +x_past.tail() +# - + +# Notice we've hidden some future columns to prevent cheating +x_future.tail() + + +# ## Model + +# + + +class Seq2SeqNet(nn.Module): + def __init__(self, input_size, input_size_decoder, output_size, hidden_size=32, lstm_layers=2, lstm_dropout=0, _min_std = 0.05): + super().__init__() + self._min_std = _min_std + + self.encoder = nn.LSTM( + input_size=input_size + output_size, + hidden_size=hidden_size, + batch_first=True, + num_layers=lstm_layers, + dropout=lstm_dropout, + ) + self.decoder = nn.LSTM( + input_size=input_size_decoder, + hidden_size=hidden_size, + batch_first=True, + num_layers=lstm_layers, + dropout=lstm_dropout, + ) + self.mean = nn.Linear(hidden_size, output_size) + self.std = nn.Linear(hidden_size, output_size) + + def forward(self, context_x, context_y, target_x, target_y=None): + x = torch.cat([context_x, context_y], -1) + _, (h_out, cell) = self.encoder(x) + + ## Shape + # hidden = [batch size, n layers * n directions, hid dim] + # cell = [batch size, n layers * n directions, hid dim] + # output = [batch size, seq len, hid dim * n directions] + outputs, (_, _) = self.decoder(target_x, (h_out, cell)) + + + # outputs: [B, T, num_direction * H] + mean = self.mean(outputs) + log_sigma = self.std(outputs) + log_sigma = torch.clamp(log_sigma, np.log(self._min_std), -np.log(self._min_std)) + + sigma = torch.exp(log_sigma) + y_dist = torch.distributions.Normal(mean, sigma) + return y_dist + + +# - + + + +# + +input_size = x_past.shape[-1] +output_size = y_future.shape[-1] + +model = Seq2SeqNet(input_size, input_size, output_size, + hidden_size=32, + lstm_layers=2, + lstm_dropout=0).to(device) +model +# - +# Init the optimiser +optimizer = optim.Adam(model.parameters(), lr=1e-3) + +# + + +past_x = torch.rand((batch_size, window_past, input_size)).to(device) +future_x = torch.rand((batch_size, window_future, input_size)).to(device) +past_y = torch.rand((batch_size, window_past, output_size)).to(device) +future_y = torch.rand((batch_size, window_future, output_size)).to(device) +output = model(past_x, past_y, future_x, future_y) +print(output) + +from torchsummaryX import summary +summary(model, past_x, past_y, future_x, future_y ) +1 +# - + +# ## Training + + + + + +# + +def train_epoch(ds, model, bs=128): + model.train() + + training_loss = [] + + # Put data into a torch loader + load_train = torch.utils.data.dataloader.DataLoader( + ds, + batch_size=bs, + pin_memory=False, + num_workers=num_workers, + shuffle=True, + ) + + for batch in tqdm(load_train, leave=False, desc='train'): + # Send data to gpu + x_past, y_past, x_future, y_future = [d.to(device) for d in batch] + + # Discard previous gradients + optimizer.zero_grad() + + # Run model + y_dist = model(x_past, y_past, x_future, y_future) + + # Get loss, it's Negative Log Likelihood + loss = -y_dist.log_prob(y_future).mean() + + # Backprop + loss.backward() + optimizer.step() + + # Record stats + training_loss.append(loss.item()) + + return np.mean(training_loss) + + +def test_epoch(ds, model, bs=512): + model.eval() + + test_loss = [] + load_test = torch.utils.data.dataloader.DataLoader(ds, + batch_size=bs, + pin_memory=False, + num_workers=num_workers) + for batch in tqdm(load_test, leave=False, desc='test'): + # Send data to gpu + x_past, y_past, x_future, y_future = [d.to(device) for d in batch] + with torch.no_grad(): + # Run model + y_dist = model(x_past, y_past, x_future, y_future) + # Get loss, it's Negative Log Likelihood + loss = -y_dist.log_prob(y_future).mean() + + test_loss.append(loss.item()) + + return np.mean(test_loss) + + +def training_loop(ds_train, ds_test, model, epochs=1, bs=128): + all_losses = [] + try: + test_loss = test_epoch(ds_test, model) + print(f"Start: Test Loss = {test_loss:.2f}") + for epoch in tqdm(range(epochs), desc='epochs'): + loss = train_epoch(ds_train, model, bs=bs) + print(f"Epoch {epoch+1}/{epochs}: Training Loss = {loss:.2f}") + + test_loss = test_epoch(ds_test, model) + print(f"Epoch {epoch+1}/{epochs}: Test Loss = {test_loss:.2f}") + print("-" * 50) + + all_losses.append([loss, test_loss]) + + except KeyboardInterrupt: + # This lets you stop manually. and still get the results + pass + + # Visualising the results + all_losses = np.array(all_losses) + plt.plot(all_losses[:, 0], label="Training") + plt.plot(all_losses[:, 1], label="Test") + plt.title("Loss") + plt.legend() + + return all_losses + + +# - + +# this might take 1 minute per epoch on a gpu +training_loop(ds_train, ds_test, model, epochs=8, bs=batch_size) +1 + +# ## Predict +# + +# TODO get working +output_scaler = scaler.transformers[-4][1] +ds_preds = predict(model, ds_test, batch_size*6, device=device, scaler=output_scaler) + + + +# + +# TODO Metrics... smape etc + +# + +def plot_prediction(ds_preds, i): + """Plot a prediction into the future, at a single point in time.""" + d = ds_preds.isel(t_source=i) + + # Get arrays + xf = d.t_target + yp = d.y_pred + s = d.y_pred_std + yt = d.y_true + now = d.t_source.squeeze() + + # plot prediction + plt.fill_between(xf, yp-2*s, yp+2*s, alpha=0.25, + facecolor="b", + interpolate=True, + label="2 std",) + plt.plot(xf, yp, label='pred', c='b') + + # plot true + plt.scatter( + d.t_past, + d.y_past, + c='k', + s=6 + ) + plt.scatter(xf, yt, label='true', c='k', s=6) + + # plot a red line for now + plt.vlines(x=now, ymin=0, ymax=1, label='now', color='r') + + now=pd.Timestamp(now.values) + plt.title(f'Prediction NLL={d.nll.mean().item():2.2g}') + plt.xlabel(f'{now.date()}') + plt.ylabel('energy(kWh/hh)') + plt.legend() + plt.xticks(rotation=45) + plt.show() + +# plot_prediction(ds_preds, 0) +# plot_prediction(ds_preds, 12) # 6 hours later +plot_prediction(ds_preds, 24) # 12 hours later +plot_prediction(ds_preds, 48) # 12 hours later +# - + +# ## Error vs time ahead + + + +# + +d = ds_preds.mean('t_source') # Mean over all predictions + +# Plot with xarray, it has a pandas like interface +d.plot.scatter('t_ahead_hours', 'nll') + +# Tidy the graph +n = len(ds_preds.t_source) +plt.ylabel('Negative Log Likelihood (lower is better)') +plt.xlabel('Hours ahead') +plt.title(f'NLL vs time (no. samples={n})') +# - + +d = ds_preds.mean('t_source') # Mean over all predictions +d['likelihood'] = np.exp(-d.nll) # get likelihood, after taking mean in log domain +d.plot.scatter('t_ahead_hours', 'likelihood') + + + +# Make a plot of the NLL over time. Does this solution get worse with time? +# this is hard because we need to take the mean over t_ahead +# then group by t_source +d = ds_preds.mean('t_ahead').groupby('t_source').mean() +# And even then it's clearer with smoothing +d.plot.scatter('t_source', 'nll') +plt.xticks(rotation=45) +plt.title('NLL over time (lower is better)') +1 + +# A scatter plot is easy with xarray +ds_preds.plot.scatter('y_true', 'y_pred', s=.01) + + diff --git a/requirements/environment.max.yaml b/requirements/environment.max.yaml new file mode 100644 index 0000000..a485d98 --- /dev/null +++ b/requirements/environment.max.yaml @@ -0,0 +1,221 @@ +name: seq2seq-time +channels: + - pytorch + - conda-forge + - defaults +dependencies: + - _libgcc_mutex=0.1=conda_forge + - _openmp_mutex=4.5=1_gnu + - absl-py=0.10.0=py37hc8dfbb8_1 + - aiohttp=3.6.3=py37h7b6447c_0 + - appdirs=1.4.4=py_0 + - argon2-cffi=20.1.0=py37h8f50634_2 + - async-timeout=3.0.1=py_1000 + - async_generator=1.10=py_0 + - attrs=20.2.0=pyh9f0ad1d_0 + - awscli=1.18.159=py37hc8dfbb8_0 + - backcall=0.2.0=pyh9f0ad1d_0 + - backports=1.0=py_2 + - backports.functools_lru_cache=1.6.1=py_0 + - black=20.8b1=py_1 + - blas=1.0=mkl + - bleach=3.2.1=pyh9f0ad1d_0 + - blinker=1.4=py_1 + - botocore=1.18.18=pyh9f0ad1d_0 + - brotlipy=0.7.0=py37hb5d75c8_1001 + - c-ares=1.16.1=h516909a_3 + - ca-certificates=2020.10.14=0 + - cachetools=4.1.1=py_0 + - certifi=2020.6.20=py37he5f6b98_2 + - cffi=1.14.3=py37h00ebd2e_1 + - chardet=3.0.4=py37he5f6b98_1008 + - click=7.1.2=pyh9f0ad1d_0 + - colorama=0.4.3=py_0 + - cryptography=3.1.1=py37hff6837a_1 + - cudatoolkit=10.2.89=hfd86e86_1 + - cycler=0.10.0=py_2 + - dataclasses=0.7=py37_0 + - dbus=1.13.18=hb2f20db_0 + - decorator=4.4.2=py_0 + - defusedxml=0.6.0=py_0 + - docutils=0.15.2=py37_0 + - entrypoints=0.3=py37hc8dfbb8_1002 + - expat=2.2.10=he6710b0_2 + - fontconfig=2.13.1=h1056068_1002 + - freetype=2.10.3=he06d7ca_0 + - fsspec=0.8.4=py_0 + - future=0.18.2=py37hc8dfbb8_2 + - gettext=0.19.8.1=hf34092f_1003 + - glib=2.66.1=he1b5a44_1 + - google-auth=1.22.1=py_0 + - google-auth-oauthlib=0.4.1=py_2 + - grpcio=1.31.0=py37hb0870dc_0 + - gst-plugins-base=1.14.5=h0935bb2_2 + - gstreamer=1.14.5=h36ae1b5_2 + - icu=67.1=he1b5a44_0 + - idna=2.10=pyh9f0ad1d_0 + - importlib-metadata=2.0.0=py37hc8dfbb8_0 + - importlib_metadata=2.0.0=1 + - iniconfig=1.1.1=py_0 + - intel-openmp=2020.2=254 + - ipykernel=5.3.4=py37hc6149b9_1 + - ipython=7.18.1=py37hc6149b9_1 + - ipython_genutils=0.2.0=py_1 + - ipywidgets=7.5.1=pyh9f0ad1d_1 + - jedi=0.17.2=py37hc8dfbb8_1 + - jinja2=2.11.2=pyh9f0ad1d_0 + - jmespath=0.10.0=pyh9f0ad1d_0 + - joblib=0.17.0=py_0 + - jpeg=9d=h516909a_0 + - jsonschema=3.2.0=py37hc8dfbb8_1 + - jupyter_client=6.1.7=py_0 + - jupyter_core=4.6.3=py37hc8dfbb8_2 + - jupyterlab_pygments=0.1.2=pyh9f0ad1d_0 + - kiwisolver=1.2.0=py37h99015e2_1 + - krb5=1.17.1=hfafb76e_3 + - lcms2=2.11=hbd6801e_0 + - ld_impl_linux-64=2.35=h769bd43_9 + - libblas=3.8.0=17_openblas + - libcblas=3.8.0=17_openblas + - libclang=10.0.1=default_hde54327_1 + - libedit=3.1.20191231=he28a2e2_2 + - libevent=2.1.10=hcdb4288_3 + - libffi=3.2.1=he1b5a44_1007 + - libgcc-ng=9.3.0=h5dbcf3e_17 + - libgfortran-ng=7.5.0=hae1eefd_17 + - libgfortran4=7.5.0=hae1eefd_17 + - libglib=2.66.1=h0dae87d_1 + - libgomp=9.3.0=h5dbcf3e_17 + - libiconv=1.16=h516909a_0 + - liblapack=3.8.0=17_openblas + - libllvm10=10.0.1=he513fc3_3 + - libopenblas=0.3.10=pthreads_hb3c22a3_5 + - libpng=1.6.37=hed695b0_2 + - libpq=12.3=h1281834_2 + - libprotobuf=3.13.0.1=h8b12597_0 + - libsodium=1.0.18=h516909a_1 + - libstdcxx-ng=9.3.0=h2ae2ef3_17 + - libtiff=4.1.0=hc7e4089_6 + - libuuid=2.32.1=h14c3975_1000 + - libwebp-base=1.1.0=h516909a_3 + - libxcb=1.14=h7b6447c_0 + - libxkbcommon=0.10.0=he1b5a44_0 + - libxml2=2.9.10=h68273f3_2 + - lz4-c=1.9.2=he1b5a44_3 + - markdown=3.3.1=pyh9f0ad1d_0 + - markupsafe=1.1.1=py37hb5d75c8_2 + - matplotlib=3.3.2=py37hc8dfbb8_1 + - matplotlib-base=3.3.2=py37hc9afd2a_1 + - mccabe=0.6.1=py_1 + - mistune=0.8.4=py37h8f50634_1002 + - mkl=2020.2=256 + - more-itertools=8.5.0=py_0 + - multidict=4.7.6=py37h7b6447c_1 + - mypy=0.790=py_0 + - mypy_extensions=0.4.3=py37hc8dfbb8_1 + - mysql-common=8.0.21=2 + - mysql-libs=8.0.21=hf3661c5_2 + - nbclient=0.5.1=py_0 + - nbconvert=6.0.7=py37hc8dfbb8_1 + - nbformat=5.0.8=py_0 + - ncurses=6.2=he1b5a44_2 + - nest-asyncio=1.4.1=py_0 + - ninja=1.10.1=hfc4b9b4_2 + - notebook=6.1.4=py37hc8dfbb8_1 + - nspr=4.29=he1b5a44_1 + - nss=3.58=h27285de_1 + - numpy=1.19.2=py37h7ea13bd_1 + - oauthlib=3.1.0=py_0 + - olefile=0.46=pyh9f0ad1d_1 + - openssl=1.1.1h=h516909a_0 + - packaging=20.4=pyh9f0ad1d_0 + - pandas=1.1.3=py37h9fdb41a_2 + - pandoc=2.11.0.2=hd18ef5c_0 + - pandocfilters=1.4.2=py_1 + - parso=0.7.1=pyh9f0ad1d_0 + - pathspec=0.8.0=pyh9f0ad1d_0 + - pcre=8.44=he1b5a44_0 + - pexpect=4.8.0=py37hc8dfbb8_1 + - pickleshare=0.7.5=py37hc8dfbb8_1002 + - pillow=8.0.0=py37h718be6c_0 + - pip=20.2.4=py_0 + - pluggy=0.13.1=py37hc8dfbb8_3 + - prometheus_client=0.8.0=pyh9f0ad1d_0 + - prompt-toolkit=3.0.8=py_0 + - protobuf=3.13.0.1=py37h3340039_1 + - psutil=5.7.2=py37hb5d75c8_1 + - ptyprocess=0.6.0=py37_1000 + - py=1.9.0=pyh9f0ad1d_0 + - pyasn1=0.4.8=py_0 + - pyasn1-modules=0.2.8=py_0 + - pycodestyle=2.6.0=pyh9f0ad1d_0 + - pycparser=2.20=pyh9f0ad1d_2 + - pydocstyle=5.1.1=py_0 + - pyflakes=2.2.0=pyh9f0ad1d_0 + - pygments=2.7.1=py_0 + - pyjwt=1.7.1=py_0 + - pylama=7.7.1=py_0 + - pyopenssl=19.1.0=py37_0 + - pyparsing=2.4.7=pyh9f0ad1d_0 + - pyqt=5.12.3=py37h8685d9f_4 + - pyrsistent=0.17.3=py37h8f50634_1 + - pysocks=1.7.1=py37he5f6b98_2 + - pytest=6.1.1=py37hc8dfbb8_1 + - python=3.7.8=h425cb1d_1_cpython + - python-dateutil=2.8.1=py_0 + - python_abi=3.7=1_cp37m + - pytorch=1.6.0=py3.7_cuda10.2.89_cudnn7.6.5_0 + - pytorch-lightning=1.0.2=py_0 + - pytz=2020.1=pyh9f0ad1d_0 + - pyyaml=5.3.1=py37hb5d75c8_1 + - pyzmq=19.0.2=py37hac76be4_2 + - qt=5.12.9=h1f2b2cb_0 + - readline=8.0=he28a2e2_2 + - regex=2020.10.15=py37h8f50634_0 + - requests=2.24.0=pyh9f0ad1d_0 + - requests-oauthlib=1.3.0=pyh9f0ad1d_0 + - rsa=4.4.1=pyh9f0ad1d_0 + - s3transfer=0.3.3=py37hc8dfbb8_2 + - scikit-learn=0.23.2=py37h6785257_0 + - scipy=1.5.2=py37hb14ef9d_2 + - send2trash=1.5.0=py_0 + - setuptools=49.6.0=py37he5f6b98_2 + - six=1.15.0=pyh9f0ad1d_0 + - snowballstemmer=2.0.0=py_0 + - sqlite=3.33.0=h4cf870e_1 + - tensorboard=2.3.0=py_0 + - tensorboard-plugin-wit=1.6.0=pyh9f0ad1d_0 + - terminado=0.9.1=py37hc8dfbb8_1 + - testpath=0.4.4=py_0 + - threadpoolctl=2.1.0=pyh5ca1d4c_0 + - tk=8.6.10=hed695b0_1 + - toml=0.10.1=pyh9f0ad1d_0 + - torchvision=0.7.0=py37_cu102 + - tornado=6.0.4=py37h8f50634_2 + - tqdm=4.50.2=pyh9f0ad1d_0 + - traitlets=5.0.5=py_0 + - typed-ast=1.4.1=py37h516909a_0 + - typing-extensions=3.7.4.3=0 + - typing_extensions=3.7.4.3=py_0 + - urllib3=1.25.10=py_0 + - wcwidth=0.2.5=pyh9f0ad1d_2 + - webencodings=0.5.1=py_1 + - werkzeug=1.0.1=pyh9f0ad1d_0 + - wheel=0.35.1=pyh9f0ad1d_0 + - widgetsnbextension=3.5.1=py37hc8dfbb8_2 + - xarray=0.16.1=py_0 + - xz=5.2.5=h516909a_1 + - yaml=0.2.5=h516909a_0 + - yapf=0.30.0=pyh9f0ad1d_0 + - yarl=1.6.2=py37h8f50634_0 + - zeromq=4.3.3=he1b5a44_2 + - zipp=3.3.1=py_0 + - zlib=1.2.11=h516909a_1010 + - zstd=1.4.5=h6597ccf_2 + - pip: + - pyqt5-sip==4.19.18 + - pyqtchart==5.12 + - pyqtwebengine==5.12.1 + - sklearn-pandas==2.0.2 + - torchsummaryx==1.3.0 +prefix: /home/wassname/anaconda/envs/seq2seq-time diff --git a/requirements/environment.min.yaml b/requirements/environment.min.yaml new file mode 100644 index 0000000..fdbc036 --- /dev/null +++ b/requirements/environment.min.yaml @@ -0,0 +1,26 @@ +name: seq2seq-time +channels: + - conda-forge + - defaults +dependencies: + - python==3.7 + - pip + - awscli + - ipykernel + - tqdm + - xarray + - pandas + - pytorch + - torchvision + - cudatoolkit==10.2 + - black + - pylama + - mypy + - pytest + - numpy + - matplotlib + - scikit-learn + - pytorch-lightning + - yapf + - ipywidgets +prefix: /home/wassname/anaconda/envs/seq2seq-time diff --git a/requirements/environment.yaml b/requirements/environment.yaml index 718a9de..4dc84cd 100644 --- a/requirements/environment.yaml +++ b/requirements/environment.yaml @@ -11,5 +11,5 @@ dependencies: - awscli - pip: # local package - - -e . + # - -e . diff --git a/requirements/readme.md b/requirements/readme.md index 340249b..d022f01 100644 --- a/requirements/readme.md +++ b/requirements/readme.md @@ -4,3 +4,13 @@ This project has multiple ways of documenting requirements - environment.min.yaml - This is the minimum requirements, use it to install a new test or dev environment - environment.max.yaml - This pins all conda packages, use for production or finding vunrebilities - requirements.txt - For people or bots not using conda + +``` +# Install requirements +conda create --name seq2seq-time python=3.7 -f ./requirements/environment.yaml +conda activate seq2seq-time +# Install this package in editable mode +python -m pip install -e . +# Install kernel +python -m ipykernel install --user --name seq2seq-time --display-name seq2seq-time +``` diff --git a/requirements/requirements.txt b/requirements/requirements.txt new file mode 100644 index 0000000..e69de29 diff --git a/seq2seq_time/data/dataset.py b/seq2seq_time/data/dataset.py new file mode 100644 index 0000000..88b7a3d --- /dev/null +++ b/seq2seq_time/data/dataset.py @@ -0,0 +1,100 @@ +import pandas as pd +import torch.utils.data +import numpy as np + +def assert_normalized(df): + stats = df.describe().T + np.testing.assert_allclose(stats['mean'].values, 0, atol=0.1), 'means should be normalized to ~0' + np.testing.assert_allclose(stats['std'].values, 1, atol=0.1), 'standard deviations should be normalized to ~0' + +def assert_no_objects(df): + for name, dtype in df.dtypes.iteritems(): + assert dtype.name!='object', f'all objects should be pd.categories. {name} is not' + + +class Seq2SeqDataSet(torch.utils.data.Dataset): + """ + Takes in dataframe and returns sequences through time. + + Returns x_past, y_past, x_future, etc. + """ + + def __init__(self, df: pd.DataFrame, window_past=40, window_future=10, columns_target=['energy(kWh/hh)'], columns_blank=[],): + """ + Args: + - df: DataFrame with time index, already scaled + - columns_blank: The columns we will blank, in the future + """ + super().__init__() + # TODO auto categorical columns + # TODO specify blank future columns + assert isinstance(df.index, pd.DatetimeIndex), 'should have a datetime index' + assert df.index.freq is not None, 'should have freq' + # assert_normalized(df) + assert_no_objects(df) + + # Use numpy instead of pandas, for speed + self.x = df.drop(columns=columns_target).copy().values + self.y = df[columns_target].copy().values + self.t = df.index.copy() + self.columns = list(df.columns) + self.icol_blank = [df.drop(columns=columns_target).columns.tolist().index(n) for n in columns_blank] + + self.window_past = window_past + self.window_future = window_future + self.columns_target = columns_target + + def get_components(self, i): + """Get past and future rows.""" + x = self.x[i : i + (self.window_past + self.window_future)].copy() + y = self.y[i:i + (self.window_past + self.window_future)].copy() + t = self.t[i:i + (self.window_past + self.window_future)].copy() + t = t.astype(int) * 1e-9 / 60 / 60 / 24 # days + t = t.values + now = t[self.window_past] + + # Add a features: relative hours since present time, is future + tstp = (t - now)[:, None] + is_past = tstp < 0 + x = np.concatenate([x, tstp, is_past], -1) + + # Split into future and past + x_past = x[:self.window_past] + y_past = y[:self.window_past] + x_future = x[self.window_past:] + y_future = y[self.window_past:] + + # Stop it cheating by using future weather measurements + x_future[:, self.icol_blank] = 0 + return x_past, y_past, x_future, y_future + + + def __getitem__(self, i): + """This is how python implements square brackets""" + if i<0: + # Handle negative integers + i = len(self)+i + data = self.get_components(i) + # From dataframe to torch + return [d.astype(np.float32) for d in data] + + + def get_rows(self, i): + """ + Output pandas dataframes for display purposes. + """ + x_cols = list(self.columns)[1:] + ['tsp_days', 'is_past'] + x_past, y_past, x_future, y_future = self.get_components(i) + t_past = self.t[i:i+self.window_past] + t_future = self.t[i+self.window_past:i+self.window_past + self.window_future] + x_past = pd.DataFrame(x_past, columns=x_cols, index=t_past) + x_future = pd.DataFrame(x_future, columns=x_cols, index=t_future) + y_past = pd.DataFrame(y_past, columns=self.columns_target, index=t_past) + y_future = pd.DataFrame(y_future, columns=self.columns_target, index=t_future) + return x_past, y_past, x_future, y_future + + def __len__(self): + return len(self.x) - (self.window_past + self.window_future) + + def __repr__(self): + return f'<{type(self).__name__}(shape={self.x.shape}, times={self.t[0]} to {self.t[1]} at {self.t.freq.freqstr})>' diff --git a/seq2seq_time/predict.py b/seq2seq_time/predict.py new file mode 100644 index 0000000..a3acad5 --- /dev/null +++ b/seq2seq_time/predict.py @@ -0,0 +1,72 @@ +import xarray as xr +import torch +from tqdm.auto import tqdm +import pandas as pd + +from .util import to_numpy + +def predict(model, ds_test, batch_size, device='cpu', scaler=None): + """ + Gather all predictions into xarray. + + When we generate prediction in a sequence to sequence model we start at a time then predict + N steps into the future. So we have 2 dimensions: source time, target time. + + But we also care about how far we were predicting into the future, so we have 3 dimensions: source time, target time, time ahead. + + It's hard to use pandas for data with virtual dimensions so we will use xarray. Xarray has an interface similar to pandas but also allows coordinates which are virtual dimensions. + """ + load_test = torch.utils.data.dataloader.DataLoader(ds_test, batch_size=batch_size) + freq = ds_test.t.freq + xrs = [] + for i, batch in enumerate(tqdm(load_test, desc='predict')): + model.eval() + with torch.no_grad(): + x_past, y_past, x_future, y_future = [d.to(device) for d in batch] + y_dist = model(x_past, y_past, x_future, y_future) + nll = -y_dist.log_prob(y_future) + + # Convert to numpy + mean = to_numpy(y_dist.loc.squeeze(-1)) + std = to_numpy(y_dist.scale.squeeze(-1)) + nll = to_numpy(nll.squeeze(-1)) + y_future = to_numpy(y_future.squeeze(-1)) + y_past = to_numpy(y_past.squeeze(-1)) + + # Make an xarray.Dataset for the data + bs = y_future.shape[0] + t_source = ds_test.t[i:i+bs].values + t_ahead = pd.timedelta_range(0, periods=ds_test.window_future, freq=freq).values + t_behind = pd.timedelta_range(end=-pd.Timedelta(freq), periods=ds_test.window_past, freq=freq) + xr_out = xr.Dataset( + { + # Format> name: ([dimensions,...], array), + "y_past": (["t_source", "t_behind",], y_past), + "nll": (["t_source", "t_ahead",], nll), + "y_pred": (["t_source", "t_ahead",], mean), + "y_pred_std": (["t_source", "t_ahead",], std), + "y_true": (["t_source", "t_ahead",], y_future), + }, + coords={"t_source": t_source, "t_ahead": t_ahead, "t_behind": t_behind}, + ) + xrs.append(xr_out) + + # Join all batches + ds_preds = xr.concat(xrs, dim="t_source") + + # undo scaling on y + if scaler: + ds_preds['y_pred_std'].values = ds_preds.y_pred_std * scaler.scale_ + ds_preds['y_past'].values = scaler.inverse_transform(ds_preds.y_past) + ds_preds['y_pred'].values = scaler.inverse_transform(ds_preds.y_pred) + ds_preds['y_true'].values = scaler.inverse_transform(ds_preds.y_true) + + # Add some derived coordinates, they will be the ones not in bold + # The target time, is a function of the source time, and how far we predict ahead + ds_preds = ds_preds.assign_coords(t_target=ds_preds.t_source+ds_preds.t_ahead) + + ds_preds = ds_preds.assign_coords(t_past=ds_preds.t_source+ds_preds.t_behind) + + # Some plots don't like timedeltas, so lets make a coordinate for time ahead in hours + ds_preds = ds_preds.assign_coords(t_ahead_hours=(ds_preds.t_ahead*1.0e-9/60/60).astype(float)) + return ds_preds diff --git a/seq2seq_time/util.py b/seq2seq_time/util.py new file mode 100644 index 0000000..ba1324a --- /dev/null +++ b/seq2seq_time/util.py @@ -0,0 +1,10 @@ +from pathlib import Path +import torch + +project_dir = Path(__file__).parent.parent + +def to_numpy(x): + """Helper function to avoid repeating code""" + if isinstance(x, torch.Tensor): + x = x.cpu().detach().numpy() + return x