From 836ef94946ded456f21c2ff91463bc49fd66f6c6 Mon Sep 17 00:00:00 2001
From: parthvijay27 <104063672+parthvijay27@users.noreply.github.com>
Date: Mon, 10 Jul 2023 16:04:12 +0530
Subject: [PATCH] Add files via upload
---
Graded Assignment 2/ass_2_final.ipynb | 998 ++++++++++++++++++++++++++
1 file changed, 998 insertions(+)
create mode 100644 Graded Assignment 2/ass_2_final.ipynb
diff --git a/Graded Assignment 2/ass_2_final.ipynb b/Graded Assignment 2/ass_2_final.ipynb
new file mode 100644
index 0000000..70ae503
--- /dev/null
+++ b/Graded Assignment 2/ass_2_final.ipynb
@@ -0,0 +1,998 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "a639aedd",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import pandas as pd\n",
+ "from pathlib import Path\n",
+ "import numpy as np"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "653a3482",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " timestamp | \n",
+ " value | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 02-12-2013 21:15 | \n",
+ " 73.967322 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 02-12-2013 21:20 | \n",
+ " 74.935882 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 02-12-2013 21:25 | \n",
+ " 76.124162 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 02-12-2013 21:30 | \n",
+ " 78.140707 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 02-12-2013 21:35 | \n",
+ " 79.329836 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 22690 | \n",
+ " 19-02-2014 15:05 | \n",
+ " 98.185415 | \n",
+ "
\n",
+ " \n",
+ " | 22691 | \n",
+ " 19-02-2014 15:10 | \n",
+ " 97.804168 | \n",
+ "
\n",
+ " \n",
+ " | 22692 | \n",
+ " 19-02-2014 15:15 | \n",
+ " 97.135468 | \n",
+ "
\n",
+ " \n",
+ " | 22693 | \n",
+ " 19-02-2014 15:20 | \n",
+ " 98.056852 | \n",
+ "
\n",
+ " \n",
+ " | 22694 | \n",
+ " 19-02-2014 15:25 | \n",
+ " 96.903861 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
22695 rows × 2 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " timestamp value\n",
+ "0 02-12-2013 21:15 73.967322\n",
+ "1 02-12-2013 21:20 74.935882\n",
+ "2 02-12-2013 21:25 76.124162\n",
+ "3 02-12-2013 21:30 78.140707\n",
+ "4 02-12-2013 21:35 79.329836\n",
+ "... ... ...\n",
+ "22690 19-02-2014 15:05 98.185415\n",
+ "22691 19-02-2014 15:10 97.804168\n",
+ "22692 19-02-2014 15:15 97.135468\n",
+ "22693 19-02-2014 15:20 98.056852\n",
+ "22694 19-02-2014 15:25 96.903861\n",
+ "\n",
+ "[22695 rows x 2 columns]"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "file_path = Path(\"/Users/vivekvijay/Downloads/machine_temp_failure_missing.csv\")\n",
+ "df = pd.read_csv(file_path)\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "7d332df3",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n",
+ "RangeIndex: 22695 entries, 0 to 22694\n",
+ "Data columns (total 2 columns):\n",
+ " # Column Non-Null Count Dtype \n",
+ "--- ------ -------------- ----- \n",
+ " 0 timestamp 22695 non-null object \n",
+ " 1 value 21410 non-null float64\n",
+ "dtypes: float64(1), object(1)\n",
+ "memory usage: 354.7+ KB\n"
+ ]
+ }
+ ],
+ "source": [
+ "df.info()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "b044233b",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " value | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | count | \n",
+ " 21410.000000 | \n",
+ "
\n",
+ " \n",
+ " | mean | \n",
+ " 85.968188 | \n",
+ "
\n",
+ " \n",
+ " | std | \n",
+ " 13.553070 | \n",
+ "
\n",
+ " \n",
+ " | min | \n",
+ " 2.084721 | \n",
+ "
\n",
+ " \n",
+ " | 25% | \n",
+ " 83.082867 | \n",
+ "
\n",
+ " \n",
+ " | 50% | \n",
+ " 89.251290 | \n",
+ "
\n",
+ " \n",
+ " | 75% | \n",
+ " 93.910748 | \n",
+ "
\n",
+ " \n",
+ " | max | \n",
+ " 108.510543 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " value\n",
+ "count 21410.000000\n",
+ "mean 85.968188\n",
+ "std 13.553070\n",
+ "min 2.084721\n",
+ "25% 83.082867\n",
+ "50% 89.251290\n",
+ "75% 93.910748\n",
+ "max 108.510543"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.describe()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "425bd488",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " timestamp | \n",
+ " temperature | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 02-12-2013 21:15 | \n",
+ " 73.967322 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 02-12-2013 21:20 | \n",
+ " 74.935882 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 02-12-2013 21:25 | \n",
+ " 76.124162 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 02-12-2013 21:30 | \n",
+ " 78.140707 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 02-12-2013 21:35 | \n",
+ " 79.329836 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 22690 | \n",
+ " 19-02-2014 15:05 | \n",
+ " 98.185415 | \n",
+ "
\n",
+ " \n",
+ " | 22691 | \n",
+ " 19-02-2014 15:10 | \n",
+ " 97.804168 | \n",
+ "
\n",
+ " \n",
+ " | 22692 | \n",
+ " 19-02-2014 15:15 | \n",
+ " 97.135468 | \n",
+ "
\n",
+ " \n",
+ " | 22693 | \n",
+ " 19-02-2014 15:20 | \n",
+ " 98.056852 | \n",
+ "
\n",
+ " \n",
+ " | 22694 | \n",
+ " 19-02-2014 15:25 | \n",
+ " 96.903861 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
22695 rows × 2 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " timestamp temperature\n",
+ "0 02-12-2013 21:15 73.967322\n",
+ "1 02-12-2013 21:20 74.935882\n",
+ "2 02-12-2013 21:25 76.124162\n",
+ "3 02-12-2013 21:30 78.140707\n",
+ "4 02-12-2013 21:35 79.329836\n",
+ "... ... ...\n",
+ "22690 19-02-2014 15:05 98.185415\n",
+ "22691 19-02-2014 15:10 97.804168\n",
+ "22692 19-02-2014 15:15 97.135468\n",
+ "22693 19-02-2014 15:20 98.056852\n",
+ "22694 19-02-2014 15:25 96.903861\n",
+ "\n",
+ "[22695 rows x 2 columns]"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df.rename(columns={\"value\": \"temperature\"},inplace = True)\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "3f02950a",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Index(['timestamp', 'temperature'], dtype='object')\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(df.columns)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "bfee7da3",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " timestamp | \n",
+ " temperature | \n",
+ " delta_temperature | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 02-12-2013 21:15 | \n",
+ " 73.967322 | \n",
+ " 0.968560 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 02-12-2013 21:20 | \n",
+ " 74.935882 | \n",
+ " 1.188280 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 02-12-2013 21:25 | \n",
+ " 76.124162 | \n",
+ " 2.016546 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 02-12-2013 21:30 | \n",
+ " 78.140707 | \n",
+ " 1.189128 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 02-12-2013 21:35 | \n",
+ " 79.329836 | \n",
+ " -0.619417 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 22689 | \n",
+ " 19-02-2014 15:00 | \n",
+ " NaN | \n",
+ " NaN | \n",
+ "
\n",
+ " \n",
+ " | 22690 | \n",
+ " 19-02-2014 15:05 | \n",
+ " 98.185415 | \n",
+ " -0.381246 | \n",
+ "
\n",
+ " \n",
+ " | 22691 | \n",
+ " 19-02-2014 15:10 | \n",
+ " 97.804168 | \n",
+ " -0.668700 | \n",
+ "
\n",
+ " \n",
+ " | 22692 | \n",
+ " 19-02-2014 15:15 | \n",
+ " 97.135468 | \n",
+ " 0.921384 | \n",
+ "
\n",
+ " \n",
+ " | 22693 | \n",
+ " 19-02-2014 15:20 | \n",
+ " 98.056852 | \n",
+ " -1.152991 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
22694 rows × 3 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " timestamp temperature delta_temperature\n",
+ "0 02-12-2013 21:15 73.967322 0.968560\n",
+ "1 02-12-2013 21:20 74.935882 1.188280\n",
+ "2 02-12-2013 21:25 76.124162 2.016546\n",
+ "3 02-12-2013 21:30 78.140707 1.189128\n",
+ "4 02-12-2013 21:35 79.329836 -0.619417\n",
+ "... ... ... ...\n",
+ "22689 19-02-2014 15:00 NaN NaN\n",
+ "22690 19-02-2014 15:05 98.185415 -0.381246\n",
+ "22691 19-02-2014 15:10 97.804168 -0.668700\n",
+ "22692 19-02-2014 15:15 97.135468 0.921384\n",
+ "22693 19-02-2014 15:20 98.056852 -1.152991\n",
+ "\n",
+ "[22694 rows x 3 columns]"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "df['delta_temperature'] = df['temperature'].shift(-1) - df['temperature']\n",
+ "df = df[:-1]\n",
+ "df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "0863f03d",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "x = df['timestamp']\n",
+ "y = df['temperature']\n",
+ "plt.plot(x, y)\n",
+ "\n",
+ "plt.xlabel(\"TimeStamps\")\n",
+ "plt.ylabel(\"Temperature\")\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "c8599495",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEGCAYAAABVSfMhAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAAsTAAALEwEAmpwYAAAryUlEQVR4nO3dd3wUdf4/8Nc7jVBCD0gPnQugKAHpRUBRVOy9nf5O/Vq+KpZvTsWGCmc/9U7F3j29O0GJAtKrYOhdWgAhQKiBQPr798fObjbJ1uzuzJbX8/HIIzuzszPvbHbnPZ86oqogIiIyS5zVARARUWxh4iEiIlMx8RARkamYeIiIyFRMPEREZKoEqwPwR9OmTTUtLc3qMIiIIsqKFSsOqWqq1XHYRVTiSUtLQ3Z2ttVhEBFFFBHZZXUMzljVRkREpmLiISIiUzHxEBGRqZh4iIjIVCFPPCLSRkTmishGEdkgIg8Y6xuLyC8istX43SjUsRARkfXMKPGUAnhYVdMB9ANwr4ikA8gEMFtVOwOYbSwTEVGUC3niUdVcVV1pPD4BYBOAVgDGAvjU2OxTAJeFOhYiIrKeqW08IpIG4GwAywA0V9Vc46n9AJq7ec2dIpItItl5eXnmBBohpq3dh2Oniq0Og4jIL6YlHhGpB+A/AB5U1Xzn59R2UyCXNwZS1cmqmqGqGampYTPw1nJ7jpzCfV+twv1fr7I6FCIiv5iSeEQkEbak86Wq/tdYfUBEWhjPtwBw0IxYokVRaRkAYN+x0xZHQkTkHzN6tQmADwFsUtXXnJ76AcCtxuNbAUwNdSxERGQ9M+ZqGwjgZgDrRGS1se5xAJMAfCsidwDYBeAaE2IhIiKLhTzxqOoiAOLm6RGhPj4REYUXzlxARESmYuIhIiJTMfEQEZGpmHginMvBT0REYYyJJ2K5669BRBTemHiIiMhUTDxERGQqJh4iIjIVEw8REZmKiYeIiEzFxENERKZi4iEiIlMx8UQ6jiAlogjDxBOhhONHiShCMfEQEZGpmHiIiMhUTDxERGQqJh4iIjIVEw8REZmKiYeIiEzFxBPhOIyHiCINEw8REZmKiSfCcRwpEUUaJh4iIjIVEw8REZmKiYeIiEzFxENERKZi4iEiIlMx8RARkamYeCIcB5ASUaRh4olQHL9DRJGKiYeIiEwV8sQjIh+JyEERWe+07hkR2Ssiq42fi0IdBxERhQczSjyfABjtYv3rqtrL+PnJhDiIiCgMhDzxqOoCAEdCfRwiIooMVrbx3Ccia42quEYWxkFERCayKvG8A6AjgF4AcgG86m5DEblTRLJFJDsvL8+k8IiIKFQsSTyqekBVy1S1HMD7APp62HayqmaoakZqaqp5QUYIVY7kIaLIYkniEZEWTouXA1jvbltyTYQjeYgoMiWE+gAi8jWAYQCaisgfAJ4GMExEesE28D4HwF2hjoOIiMJDyBOPql7vYvWHoT4uERGFJ85cQEREpmLiISIiUzHxEBGRqZh4iIjIVEw8RERkKiaeCMfho0QUaZh4iIjIVEw8EY7zFxBRpGHiISIiUzHxEBGRqZh4iIjIVEw8RERkKiYeIiIyFRMPERGZioknwnEAKRFFGiaeCMXxO0QUqZh4iIjIVEw8RERkKiYeIiIyFRMPERGZioknwu06fMrqEIiI/MLEQ0REpmLiISIiU/mUeESknYiMNB7XFpGU0IZF3ggH8hBRhPKaeETkLwD+DeA9Y1VrAFNCGBMREUUxX0o89wIYCCAfAFR1K4BmoQyKiIiily+Jp0hVi+0LIpIAThFGREQ15EvimS8ijwOoLSKjAHwH4MfQhkVEZJ6vl+9GWmYWjp0q9r4xBcyXxPN/APIArANwF4CfADwZyqCIiMz0+dJdAIA/jp62OJLYkODpSRGJB7BBVbsBeN+ckIiIKJp5LPGoahmALSLS1qR4iIgoynks8RgaAdggIssBFNhXquqlIYuKiMhE7C1lLl8Sz/iQR0FEFAY4MNscXhOPqs4P5AAi8hGAiwEcVNUexrrGAP4FIA1ADoBrVPVoIMchIqLI4MvMBSdEJN/4KRSRMhHJ9+MYnwAYXWVdJoDZqtoZwGxjmYjIrQnTNuK8V+eFZN+qrGwzky8lHse8bCIiAMYC6OfrAVR1gYikVVk9FsAw4/GnAObB1m2biMilDxftDPkxBKxrM4Nfs1OrzRQAFwR43Oaqmms83g+gubsNReROEckWkey8vLwAD0tERFbzWuIRkSucFuMAZAAoDFYAqqoi4racq6qTAUwGgIyMDJaHiYginC+92i5xelwKW2eAsQEe94CItFDVXBFpAeBggPsjIgoYe7WZw5fE84GqLnZeISIDEViy+AHArQAmGb+nBrAvIiKKIL608bzl4zqXRORrAEsBdBWRP0TkDtgSzigR2QpgpLFMfmAjKBFFKrclHhHpD2AAgFQRGef0VH0A8b4eQFWvd/PUCF/3QUQUSuxNbS5PVW1JAOoZ2zjf6jofwFWhDIqIiKKX28RjzFgwX0Q+UdVdJsZERGQqdiowly+dC06JyMsAugNItq9U1fNCFhURkYlY1WYuXzoXfAlgM4D2AJ6FrTv1byGMiYjIEiz5mMOXxNNEVT8EUKKq81X1dgAs7RARUY34UtVWYvzOFZExAPYBaBy6kIiIzKW8I4+pfEk8z4tIAwAPwzZ+pz6Ah0IaFRGRBTg+zhweE4+IxAPorKrTABwHMNyUqMgr1kUTUaTy2MajqmUA3A0AJSIi8psvVW2LReRt2O4YWmBfqaorQxYVEZGJ2J3aXL4knl7G7+ec1inYs42IogyrsM3hyx1I2a5DRERB43Ucj4g0F5EPReRnYzndmGGaiCgqsKbNXL4MIP0EwAwALY3l3wE8GKJ4KAqdKi7FpJ83o6i0zOpQiDxiTZs5fEk8TVX1WwDlAKCqpQB4BiGf/XPudrw7fzu++HW31aEQURjwJfEUiEgTGKVREekH25geIp8Ul5UDAEqN30QU23zp1TYOtltVdxSRxQBSwfvxEBFRDfnSq22liAwF0BW2KtAtqlri5WVEREQueU08IpIM4B4Ag2CrblsoIu+qamGog6Powp5DRAT4VtX2GYATsE0QCgA3APgcwNWhCoqiC3sKUbhTTl1gKl8STw9VTXdanisiG0MVEBGRVThzgTl86dW20ujJBgAQkXMBZIcuJIo2vJYkIme+lHh6A1giIvZBGG0BbBGRdQBUVc8MWXQUVXgxSeGKF0fm8iXxjA55FBQTJv68GcdPl+Cx0d2sDoXIDV4emcFrVZuq7gKQD6ABgCb2H1XdZTxH5JHzV/mf87ZbFgcRhQdfulNPAHAbgO2oKJHytghERFQjvlS1XQOgo6oWhzoYolDbe+w0BEDLhrWtDoXCCRt5TOVLr7b1ABqGOA4iUwycNAcDJs2xOoywdjC/MGbHtbA7tTl8STwTAawSkRki8oP9J9SBEcWq08VlSMvMwttztpp+7J2HCtD3xdl4b8EO049NscOXxPMpgL8BmATgVacfckFVUcJZmCkAx0/bpkL8/Ffz++78cfQUAGDh1jzTj22l2CzfWceXNp5TqvpmyCOJEk9N3YDPf92FnEljrA6FyG9i9EGM0Zo2dqY2iS+JZ6GITITt1ghF9pWqujJkUUUwK65SKTpZcfKP9TaOGM23pvMl8Zxt/O7ntC4o3alFJAe2CUjLAJSqakag+4wVsX6CiGbh8L+N1RIPmcOX+/EMD3EMw1X1UIiPQUQ+sOc8jdFr/zDI+THBa+cCEWkuIh+KyM/GcrqI3BH60Chq8NscOYz/VaSVeN6bvx2bcvMD3k+E/dkRy5debZ8AmAGgpbH8O4AHg3R8BTBTRFaIyJ2uNhCRO0UkW0Sy8/Jiq6cNxTYrToKOzgUWHDsQE3/ejIvfWlTj1wfj2qiwpAynikuDsKfo5zbxiIi9Gq6pqn4LoBwAVLUUtjaZYBikqucAuBDAvSIypOoGqjpZVTNUNSM1NTVIhyUKX1YWEMOhfammysqtTZdDX56L9KdmWBpDpPBU4llu/C4QkSYwLoKMe/McD8bBVXWv8fsggO8B9A3GfinMRNrlM/F/VgMH8ou8b0QAPCce+7XPONi6UncUkcWw3Qr7/kAPLCJ1RSTF/hjA+bBNz0MU8T5dkoPc46cD2ocl3alNOMbJolLc+Vk2DuQXmnA0CkeeEk+qiIwDMAy20shLAH4G8D6AkUE4dnMAi0RkDWylqyxVnR6E/VK4ieDqm5rIPX4aT/+wAXd8Erk36vWnV9vU1XsxZdVex3JRaRmenroex065nld46uq9mLnxAN6YZf6UQBQePHWnjgdQD9VPG3WCcWBV3QHgrGDsiyiclJbZTtr2qW8iiYj/Mxc88M1qAMBlZ7cCAExdtQ+fLt2FknLFi5f39PBK1ufFKk+JJ1dVnzMtEiI/bdh3HJtyT+Cq3q2tDqUS+0k7zpc+o65YWEK0dy4IJCWUGW9AWZnrvcT6tDzkOfHEWAUJRZoxb9q6z4Zd4jFO2xKBXyHHANIAsoK3Qajh3HOOydAcnq7JRpgWRYRbv/c49hw5ZXUYFCbsJ6/AT7DmnwWDUeKRCB2ESuZxm3hU9YiZgUSyi99ahMEvzbU6DAoT5Wov8YSf8nLF32dtxdGC0N1Q2NdBqOGUmHYcKgAAHAnC+1JYEqxhjtGrprXQROSG/XwqYVintHj7Ibw+63c8MWVd6A7ipcQTzvPBrdp9NOB9jPt2deCBRLmYTTxpmVm4/ZPfrA6DopCjqq2Grw9l25C9x11Bkbur8sAb/r1FH4b5OKhW7Ao8eUW7mE08ADBn80GrQ6CoFGDmCSUvMQWjjccuHEs0FB5iOvGQOSKxd1cgHN2pq1zab96fj7TMLKzZc8yv/QRTRTWX5+cDObhUyV4ni0pdtnuEUxsPmYuJhyjIyt0UeGZvspWwp2/Yb25ATioGiLrr6hz47NRVk1uPp2dg1OvznZ6PrQsRqo6JJ0KFY8M1VRaJ/6KKcTwB7MPYyfdO0+jsOVJ93rqyMCryJMXbToV92je2OJLYwMRDFGTuBpAu2mq70e7aP455fH0oE5avDf/FpeU1P4bTQQqKXNyfxnj+vyv34sWfNmH5zsBGbgQy2NWuY7N6ACoSEIUW3+UqDp8sQlpmFr7N3mN1KD6baWHVTaT7evlu5BhjOIKl3DhniwBLtx9GWmYWLn17EZbuOAwAPp9oQ1Ee8Da4s9SoJ9xy4ITf+07LzMLCrXmYsmqfY53LxONk8oIduOa9pX4fK9iCmeudb4+gqvhpXS6KSjm2x1nMJ568E0WVZh3IOWx7/PXy3VaF5Lc7P1+BfccCm4I/Fqkq/vrfdRj2yrzg7tde4hHBp0tyAABr/6i4hVWJmznM7AI9CR47VYzf3SSOisGdrmMItPAwecEOzP+94k7BN3ywzPH44rcW4raPl0dMC4+qYtHWQygP4AZzi7cdxj1frsQrM7YEMbLIF/OJp88Ls1zOOuBrz6PN+wO/z3sw3PvVStOOlXOoACt3H63xCO3hr8zDqzOj94sY6DieQEs6l769GOe/vgD3fun+M+GcYDbsO460zCys33sccUHOCtsOnnQ8Xr83H/O2+Hb7+sKSMvR4egamr/evNH+isCQosw8AwMyNB3DTh8vwsXHxUBP2Gcr3+nFhWFaueHnG5qD9HeEo5hNPVfaqiHIFdh4q8HhyLSwpw+g3FjqWd+SddLttqBWV+F8nv3l/Pt6Y9bvXJFtYUoZlOw6j2/ifcehkEYa9Mg9X/HMJuo2fjt9y/K+f33moAG/N2eb36/x1IL8QT01db9kUJuVBaHs4Vey6quqTxTvdVmPtNkrwWetyqz3nqv3ol40HANiqbKt2AfeXt6o1wHuJD7CdqE8WleKl6Zv9On7PZ2binAm/YNvBE9jux/fRuQpy9+FTOFJQjFwjWew+XFEVq6ooKav4rk1fvx9pmVn446jruRrtidzdbbmvfncJXvvld8fyazO34KxnZ+Ifc7fjie9DOLuExWIy8Swz6tqrKigqxSPfrXEsD39lHu77ahUA2wfuzGdmIC0zy/F8aZUP03mvzoevjhQUuz0h5h4/jfzCEhw/VeJob/K1jvjwySKP954vLCnDtLW2OvjRbyzEG7O2Yuw/FnvcZ6/nZuLayb+isKQcS7ZXfu/+OXcb7vtqJb5z0SZWWFJm2j1pduSdxH9W/FFp3bkvzsZnS3fh48U51bafunqvx/eppq6bvBQXv2WbNXvzfv/bSYCKktKRgmKkPzWjWptQ1tpcPPPjRnR/ekaN9+2cE53nVgs08azcfczrNlNW7/W6jaec/fIM78lo5GsLMOLV+bjzM99uxmf/s08UlWDIy3MxcNIcR8nTubQy8efN6PzEz47OF3d/sQIAXH7GACDOyDzuPmq/5RzFm7NtN8R77Zff8eacbThpJO9onvMt5hLPil1Hce3kX10+99nSXdiRV7mheeFWW9VA1rpc5BdWXM0dLSjGTy6uKO28nXDPmfAL+rwwC7/uOIz+E2fjoNNtgPtPnIMRr853XLk+9u+16PrkdLdXVQCwMTcf+YUl6P38LDyftdGx/tvsPZiz+YBjecK0jbjvq1UeSyqHThZh3LerUVhShv3HC1HoVJr6369XVdp27pY8TFubi0f/vbbafq58ZwnOenamh3chOFbvOYbRf1+Ih50uGpw7h7hK2g98s7rSRYarnlHODcNr9hzD8VMV/9OycsWSbYfw1uyt+HxpDlbvOYbnp23Erzv8LwFuPXACrxtXvR8s3IHhVdqcrnlvKfJOFOFIQTEmTNvosVp17hbXs3EUFJVi1GvzsXavra3JuY3HftJ9a842fLfCfaea9XuPV3ufnD9bvnL1Xm/YZ4urpKwc78zb7jixHz9dgkVbD2GrU5vVP+Zux/T1ufho0U5jf+6PNXOjf/Hd8L6tTep0SZljv7M2HUTmf2yf78+X7gIAFJeVY/G2Q47XfbWsepvwkJfm4q7PVxgxVgS5Zs8x/LBmX7W2I3sCsrM/HcoJXa3i6X48UWfxtkO40amx09kdn/yG2R6m0DnqdNJZvvMIXvtli8eTzLo/jmNQ56Ye4zlRWIrrjCQ4fcN+3NI/zfFc3omiatsP+ttc5EwaA8B1+8HAiXMA2K6+nr6kOwBb0gKAnRMvwrvzd2C1Ua12srB6lUhxqe3L9GdjDrtz2zfG//2nZsX9Wz9ajg37bO1f787f7nKbIwXFaFw3qdK6JdsOoWXD2mhcLwlPTVmPZ8f2QIPaiR6PdZlTiS0tMwuPXtC1UtvAG7O24u0529CwTuX9TFld0fvqw0U7MbBTUzRLqYWf1u/H6O5n4PcDJ3DPlytxx6D2+HDRTqS3qI/HRnfFyt3HcOxUMT4zTkI1kZ1zBBv25ePpHzY41t0xuD2ez9rkcvsVu47i6+W7KzXcA7YEWFJWjuTEeADAnz92Pf/g6j3HsPXgSfzNqLr6dccRpGVmIWfSmEqfJee/6e05W3FuhyZYs+eYI67nxnZHUnwcGtVNwoCOTXB7DW7v7SpRrNlzHN1bNsDD367BD2v2OeI8XFCMmz6s/p29+wtb8h3aNRUj/KhpcMe5LcqVb37bgwmX9cBpoxTy/LSN+Oa3iiR9ukrpZMv+E44LR8BWO7IpNx9f/LoLXxpJKrVeLcfzc12ce46dKkZ2zhFc9e5S/PPGc3BRzxb+/2FhKiYSz9wtBzF/S57be8ADcJt0ikrLcc17S3Gu08AyX7p/nnSq6/5l4wE8+M0qzH1kGPq+ONvl9qq26h/7bYQB4P6v/eswcMJD/frK3UcdX2YAjg+/XVpmFoZ1Ta3U+OtvE0VaZhZ6tKqP9Xt963BxzXtLMaRzKh6/qBsSjPET9l5QN/Vriymr96F1ozp45IKufsXx8owtSEqoXJgvLVccOun+/1/1hD9+ynrHDeZyj9uqWjbm5uM2Nyd2d9yVLK96t/pnqGpVobNx367GqeLqJbdRr8/HjrwCrBw/Co3qVE/Qp4vLsOtIAT5bmgOg+v/UU/veKzN/r7buqakViXLl+FFuX+tJtotJNFfuPorHa9CmMfI135KOquKFrE0oLC1DrYR4fLhoJ8ZfnI5ZGw9g2c7DLqvCnpu2sdKyc5uRc9Jx5YI3FlRanrclr1rHiuvfr6h5+bOLCYvX/HHc8Zp7vlzpuOiMBhKMwVdmycjI0Oxs/6+wnNtlzDKkSyo+u70vAKDDX7Pc1vH6a/OE0UhOjMfS7YcrfXCr+vT2vhjcqSk6PP4TACAhTqq1SXkz8Yqe+Ot/Q9/A+d7NvVE3KcHlle1dQzvgrxf+yeXrzPq/ptRK8JjUw0WnZvWqXbkP7NQEi7e5btO0a9Wwtl+9ruxWPDkSvZ+f5ffrzNa/QxPExwkWOVWNRaJAEo+IrFDVjCCGE5CYKPFY4fDJiqqyYLZhP/LdGlzZu7XbKhW7Wz9ajs0TRjuW/U06AAKqSvLHg9+srlZVYZeXX73K0WyRkHQA19VF3pIO4F9XX2euSmDhaKmbzkRkHSaeEMkvDE1vrmlrczFtrftODc4+WLgjoGNtyjVnjJK7pEPhjXfdpZqKuV5tZgmHGXhd1dFHmpqU1IgovDHxhEgkzkwcjmZt8r+7LlE0ch64GumYeEIk0IF4ZBOKQZ5EkSiaBpQy8YQI005wMO0Q2UTTd4GJJ0R2BHmq/VgVSd39iUIpmr4KTDwU1qLpy0YUiGi69QkTD4W1YMzwTBQNPg3g9gzhhomHwhr7FhDZRNM1GBMPERGZiomHiCgCuLtdeSSyNPGIyGgR2SIi20Qk08pYiIjCGavagkBE4gH8A8CFANIBXC8i6VbFQ0QUzqKpvdPKEk9fANtUdYeqFgP4BsBYC+MhIgpb8VHUMGLln9IKgPPdlP4w1hE5JMRxDggiAI67zEaDsM+hInKniGSLSHZeXp73F1BU4TgeIpto+ipYmXj2AmjjtNzaWFeJqk5W1QxVzUhNTTUtOAoP0VSvTRQI9moLjt8AdBaR9iKSBOA6AD9YGA8RUdjKzjlqdQhBY9kdSFW1VETuAzADQDyAj1R1g1XxUHhq1bC21SEQhYVouh+Ppbe+VtWfAPxkZQwU3q7t08b7RkQxIJqqncO+cwEREUVXRxsmHgprUfRdIwoIEw+RSaKpJw9RIMqjp4mHiYfCW6M6SVaHQBQWWOIhv9x4blurQ4hYQ7pw7BYRANzUr53VIQQNE48JWjeqY3UIEYsT5hDZMPGQXzjdGBFRhZhIPFf1bm36MZ0HPgoTT40lJsTER5TIu+hp4omNxNPtjBTTj3nrgIpi8YCOTU0/fjTokFrX55kLHhvdNcTREFkrmnp4xkTisYI4tU7UTjJ/OvPOzeqZfsxgm3h5T4/Pf/n/zgUAtGiQjHuGdWInjhjTIbVuUPcXJ8D8R4cFdZ/kWkwknrG9gnubn0/+3MfrNs5XJ6VlFY/rJMVj4WPDgxqPK7+MG4o3ru3l8rmuzc0vAbry+EXdPD4vXuoou7esDwC4OsM2rc4Ll/fExz78b/zxopfkR9bo1aYhJl1xZsD7+f6eAY7HQ7ukol0T78msfrI1M43VSuD9eCJKakotZP3voKDtb1jXZn5t38mp9DH+4nS0aVwH53Xzbx/+mP7gYADAZWe7TrhVz+c5k8YgZ9IYx3KLBsl+HW9w55pVJV7WqxWu7+t+LjZvbWMN6yRh/bMX4MERnR3rhrv439hLRr7o0ao+khMrvhZjzmzh82vDUY9W9THzoSGV1jWum4TlT4xA28aee1t+e1f/UIbm8NDILi7XPznmT25fc33fNkG5I2dDp3FimRe6P56zxZnn1fh4mRd2Q9fmKbipX/XSeSc3tRSzxg3FkszzLKk5CZWYSDwA0L1lg2rrHhzZ2cWWNpec1dLx+Ku/nItnLkn3uP/0FvXx9g1nO5ZbNKhom4iPE9w9tCOuOKcVrjWuzl+6yv3V2qVntcR3d/dHh6Z18ctDQ3Df8E4ejw0AfdIaAQBu7tcO3c6o71j/jxvOwff3DMCCRytKWX+78kyPpZ5xo2wngs0TRns98d43vBOeutjze+OWABOvONMRe0qthKpPe1WvVgLiqnQbbFqvFu4Z1tGx7JxIPHnv5t6Ydv9gbJ5wITZPGI2dEy9Cg9qJ1bar5aHDg6+l2YZ1EpEzaYzHqp2Lep7hdT990xp7fH7a/YPRpXlKpQuLhY8NR7OUZHx6e1+Pr63n9P94YERnTBjbvVJ7qXPs0+6vuLCr6+cJ8pb+7fCy0/fhrqEdkDNpDBrX9Tx4OC4IvXbse0hJTkBX42+bcu9ALPo/9//HlORE7Jx4kddOS1W/460a1sYV57TCjIeG4PnLKpekb+3fDh/fVr20fsO5bdGpWT20jLJZ2mMm8VTVskEyHhzZBaPSmwNApS8mALx5XS/H4wEdm2JwlYGM9w7vWGl5yr0DcfGZLTHn4aH4+YHBlRIXYLvSee2aXo6TpPOXZlAnW4nh4VFd0LReLTxyflf0SWuMOY8MQ+fmKXjkgq7VrlqrOrd9E3xwSwbGV0kCY85sgbPbNkLbJnXw1MXpWJx5Hs5q0xAzPOzv6ow2yJk0BsmJ8bhzcAcAQKM61U/AAPDIBV3RuXkKPrglw1H1BQAdmnqvsrC/B9f3tV393WBcBd7Ury36tm+MHq2qXyz4IvvJkXhstHM1XuUTlLuTtfP/JDkx3mVV34uX98TmCaMx4bIeuG1AGr76S+XSVJvGddC0XsUJ09XJc8OzF2DV+FEA4LFqJ7VerUrL9WpVr+KZeGXlE9jfnT637tR1sR/AcxVSj1YNcHP/NPxw3yD8/bpemP3w0Eqxd25uu1pPio/DhudGe43hf5wuDERsPU+TE+PwwIjOeOwCz1WwAFA7KQHxxnfJVeehnElj8MLlPfDFHa5Lu/83uhu+v2cA6hsXFs7f115tGqJ1ozqYNW5IpQu2SVf0dFTNiQheufosl/uukxSPz27vi2syKpfmF2eeh2Yp1WsTUpIT8OzYHmhTpQQ6vGtq1Fb1WnpbBKu8f0uG42T//i0Z1Z5PSU6odtKxL7U3TqjJTvWtTeomIcm4Cu6Q6lujfqM6ibh3eEeM7dUKbRvXwedLd+H2Qe1x/wjXpbAuXtplbuzXtlIpy5XbB7X3+Pz7t2Rg2tp9ldbZ34bWjergnZv+hI6p9dDnhVnVXjsyvTn6pDXG+KnrcVXv1sgvLMF9X61Ch9S62JFX4PJ49vf0inNa44pzWqO0rBydUuvhynNaVyvF1MT56c0xc+MBpLeoj7QmdZBz+BQA4OM/98H5ry9ArzYNkbUu1+t+nrkkHc/8uBHT7h+E7i3rQ0Rws9NgviFdUrHg97xKV+12K8ePQlpmVqV17k78VTkPPF7z1PlISohD3okibMzNx91frMDQLqnomFoPOZPGYMm2Q2jeIBkdU+vhgW9W+7T/qj66rQ+uendppXUdmtbFjkMFjgu0pIQ4l22mjtlcqvzbaifG43RJGQBbYssvLAVgO/G/M2+78RKBiGDzhAsrvdZVgeaKs1uhR6sGuLhnCxSXlaNnqwZ45tJ0XPmOLe6UWglYYJQ6bzzX9j+a/+gwDH15XqX9OCe+BY8OR4uG1RNCp2a279wHt2QgLg44r1vz6gG5MLBTU8eMG7f0b4fPlu7C5W6qvQFg7iPDHI+d36NoK+U4i6nEU7VUU1WzlFoYc2YLPOiiztlev5rWxHYycD4x/vr4CL9jERE86nRl95chHfzehzNvSccXo9KbO04wVSkU/To0cSzHxwlWPDmy0jYN6iTizett1Y078k4CsNXf3//1Kpf7rJrcE+LjHB0FguGdm3qjtLwctRLiMe/R4Y4EULdWAhZnngdVxbAVqfh+1V4s2X7YbdXebQPb47aB7pP25Jt7I/90CZrVt528BnVqiimr91U6uQWqgVHibNukDjbm5gOoXOU3oJP/7WxtG9fBhT3OwM/r9wMAMpxKgn3bN0bHZnXx4/2DUFBU6nYfI//UHHM2H3AkiY5VLrwGdGyC2ZsPAgBmPjQU/SbORvP6lUty4qbeZVT6GTi3/R4s23kEAPD0Jem4tk8b1EmynbaS4+Lxo1HFd8lZLfHjmn14aFQXNKpSymzXpC6WPT4CifFxeHnG5mqf8bZNPLd1jXTznQCAv17YDRlpjdG7XaNqFxhARcm/v9N3p6qmTiXbpy7pjke+W+MxnmgQU4nHm+VPjKyyPAJFJbYpYVs0qI2Pb+uD3kZ7xPCuzfDyjC0YN6oLEoPRyumH9Bb1HSefQLirKnBWO9GWcM+oX3FFuPyJEWhQO9FjL5sOqfWw7YULkRAfVy3xfHZ7X7w1Z6vL9pNgio8TxMe5j1FEcHVGGwzpkoq35mzF0K41mxcuOTEeyYnxlZYBuGy8b+Ki6q3bGSnYvP8ENjx7AUSA9KdmGPHZqmdOFJZUeUVwxnPExwneuam3yxOmvWNBrQTPJbQPbq2oMfjkz33Q00X1aEqtBJwoKkVDI3neW6XN0l3Cr1crAf+6q78jvuv6tHXbwP73a3vhhct7VGsntGtufH4nBqEnnLO7hla/uHCey/Pm/mlITUnGhT2qt9ctfGw49h47XWndVb1bIyFO8OC/Vkf1BLlMPB5UrY8d7tQTLb1lfax5+vyQnzxd+Z9hHfHov9egsCSwedJ9mdGhc/MUvHFtr0p/u6t6alcS3CTkIV1Sw2ryz+b1k6s19obKCqNtx9m3d/fHwfyiaif43u0aGQNoK5dm7Sc2f9vWn7joT9hxyHW1ZzA49/acMLY7xk+13cl+9iNDcTC/CMmJ8S5rHbx1m/dFXJygfrL530Vv4uPEbQedNo3rVGvXAWydi04UleKaDPNnXDELE08AzE469vrfwZ2bom5SAgpLik05rrtu2eSbWeOGYuRr890+Xz850eVJ8+y2jTzuV7z0+6ua3N1V5755/dlYueuox335y7nqt1lKssuLFXv7j69pJ3KmngqsRBoXV7kNMRox8UQQ+5VhJN+WIxamtrF3QDnDGA/VqVk9/O3KnhjxJ98ap71JN3oPeuvq/to13qtSAdsV9qVVemGawd5MGjkJhYKFiSeCXHxmC3y5bDeSE+PRJ60xpm/Yb3VIPrmlfzss3X4YWw+eRA8X46nM8vfremG30bMtlP4yuAPObN0Q/TtWNChf2yd40/m0a1IXOyde5LaKyt6mYnbbo7OBnZpiUKemeNzDINDv7h6ArHX7HO2I7ohE9sUWVcfEE0GevbQ7Hj6/K2onxTuupiPBc2N7QFWRc/iUozRghWBPneROXJxUSjr++vov/XDoZJHHbXxpF7GyJFE7KR5feJkxIr1lfUfpzZOEOEFJWeRkHiZJ75h4IkhCfJxjQOKjF3RFakotvDxji8VR+UZELE06kSSQpAUAz1/eAy/+tAl1k/z/ei9/fETYzYGcEBeHkrKyqLr1c6yL2ZkLIl3dWgnVuqUSAbaS3bLHRzpG9vujWf1kR9fjcNGrTUMA3jtTWG1sL1s7GdOjdyzxEFFYm3xLb2w9eDLsJ8m89KyWmLp6n/cNiSUeIgpvKcmJOMdL13KKLEw8EW5MzxZBvyEWEdWcsi3KK1a1Rbh/3HiO1SEQESpm6kjycNsMsmHiISIKgkGdmuKeYR1xh5dZ4ImJh4goKOLjpMp9oMgdlgmJiMhUTDxERGQqJh4iIjKVJYlHRJ4Rkb0istr4uciKOIiIyHxWdi54XVVfsfD4RERkAVa1ERGRqaxMPPeJyFoR+UhE3M6HISJ3iki2iGTn5eWZGR8REYWAhGp6BxGZBeAMF089AeBXAIdgm8h1AoAWqnq7t31mZGRodnZ2UOMkIop2IrJCVTOsjsMuZInH5wBE0gBMU9UePmybB2BXDQ/Vu4avIyIKBwUANtfwte1UNTWYwQTCks4FItJCVXONxcsBrPfldYG8cSLCmfuIKJLVDqdSSyCs6tX2koj0gq2qLQfAXRbFQUREJrO8qs0sLPEQUYQrV9Xwvhuej2JpklAmHiKKZL9ZHUCwxEyJh4iIwgMHkBIRkamYeIiIyFQ1buMRkWIAiUGMhYiIosNGVe3u7skatfGISAsA+wKJioiIopaqqtsatZomnnwAKYFERURE0UtVxd1zNW3jqVPD1xERUYxj5wIiIjJVTRPPqaBGQUREMaOmiYczPRMRUY3UKPGo6lYAJUGOhYiIosMjnp7klDlERGQqdi4gIiJTMfEQEZGpmHiIiMhUTDxERGQqJh4iIjIVEw9FDRFpIiKrjZ/9IrLXeHxSRP4ZpGP0E5Flxn43icgzxvphIjIgGMcginaxdOtrinKqehhALwAwEsJJVX0lyIf5FMA1qrpGROIBdDXWDwNwEsCSIB+PKOqwxENRzyiNTDMePyMin4rIQhHZJSJXiMhLIrJORKaLSKKxXW8RmS8iK0RkhnErEABoBiAXAFS1TFU3ikgagLsBPGSUhAaLyCVGyWiViMwSkeZ+Hj/Haf1yEelkrL9aRNaLyBoRWWDqG0kUJEw8FIs6AjgPwKUAvgAwV1V7AjgNYIxx8n8LwFWq2hvARwBeMF77OoAtIvK9iNwlIsmqmgPgXQCvq2ovVV0IYBGAfqp6NoBvADzm6/GdtjturH8bwBvGuqcAXKCqZxmvJ4o4rGqjWPSzqpaIyDoA8QCmG+vXAUiDrfqsB4BfRATGNvZSznMi8iWA8wHcAOB62KrZqmoN4F9GSSkJwE4/jm/3tdPv143HiwF8IiLfAvivv384UThgiYdiUREAqGo5gBKtmDeqHLaLMQGwwSi99FLVnqp6vv3FqrpdVd8BMALAWSLSxMUx3gLwtlFiuQtAsh/Hdxyq6mNVvRvAkwDaAFjh5thEYY2Jh6i6LQBSRaQ/AIhIooh0Nx6PEaMYBKAzgDIAxwCcQOW78jYAsNd4fGsN47jW6fdS4/gdVXWZqj4FIA+2BEQUUVjVRlSFqhaLyFUA3hSRBrB9T94AsAHAzQBeF5FTAEoB3KiqZSLyI4B/i8hYAPcDeAbAdyJyFMAcAO1rEEojEVkLWwnpemPdyyLSGbZS2WwAa2r4ZxJZhrNTE4UhEckBkKGqh6yOhSjYWNVGRESmYomHiIhMxRIPERGZiomHiIhMxcRDRESmYuIhIiJTMfEQEZGp/j+hgESyAZoWlAAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import matplotlib.pyplot as plt\n",
+ "\n",
+ "x = df['timestamp']\n",
+ "y = df['delta_temperature']\n",
+ "plt.plot(x, y)\n",
+ "\n",
+ "plt.xlabel(\"TimeStamps\")\n",
+ "plt.ylabel(\"Temperature\")\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "3e8419a4",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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XXYZAOBLX/oS1q1bl1LKamhowJo1a/Duu8ZKGYcOHUJHpoAaz891112HioqKnrTp06fjkUcegarixRdfxJlnntlT1ZYwdOhQnHHGGXjxxRehqnjkkUdw/fXX9+y/fLmxmO7y5ct70omK0eWX20unDFQ1speJEydquvb29l5pWbW0qNbUqIoY1y0t9vZPc/nll+sTTzyRkrZo0SK99dZb9emnn9apU6fqNddco5/+9Kd17ty52t3draqq//qv/6rjxo3TsWPH6ne+852U/a+99lodOXJkStrKlSt1woQJOn78eL3wwgt106ZNGfNz2WWX9crPqVOndN68eTpq1CgdN26cbtmypeexCRMm9NzesmWLjh07VkeNGqW33Xabnjp1SlVVDx48qFdeeaXW1tZqQ0ODdnV1ZTy37feCKIJiMVWjt1PqJRYLOmfmAGzVEPyGJy6imnEh1Eior6/XrVu3pqTt2LEDn/3sZwPKESXje0HFIFvtelh/XkVkm6rWB52PhOKumiMiosAxEBERucCF8dxjICIicmHRImNilmQlJUY6WcNARETkUno7EYfW2cNARETkwvz5vccRdXcb6WQNAxERkQtdXfbSqTcGIh+Ulpairq4OEyZMwIUXXojf/OY3Offp37+/Z+f/4IMPepZ/qKurw+DBg/HNb34TAPDJJ5/gpptuQm1tLS666CLs2bMn4zHWr1+P8847D7W1tSmza7/11lu46KKLUFtbi5tuugnHjx/3LN9EVJyKPhD5sQpE3759sX37drzyyiu4++67cdddd7k/qA0DBgzoWf5h+/btqKmp6VkCYunSpRg0aBB2796NO+64o2em72Td3d247bbb8MQTT6C9vR0rVqxAe3s7AODOO+/EHXfcgd27d2PQoEFYunRpXp8bUdiw15x7RR2IfFoFIsWRI0cwaNCgnvv33nsvJk2ahPPPPx/f+973em2vqvj2t7+NcePGYfz48Vi1ahUA4LbbbsNjjz0GwJj255ZbbgEALFu2DAuyzBb++9//Hu+++y6mTp0KIHUJhxkzZqCtrQ3pg5o3b96M2tpajBo1CuXl5Zg5cybWrVsHVcWGDRswY8YMAFwCgggAbrzRXjr1VtSTnmZbBaKx0flxP/74Y9TV1eHYsWPYv38/NmzYAAB48sknsWvXLmzevBmqiunTp+O5557DpZde2rPvo48+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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "above_threshold = df[df['temperature'] > 70.00]\n",
+ "below_threshold = df[df['temperature'] <= 70.00]\n",
+ "\n",
+ "\n",
+ "plt.scatter(above_threshold['timestamp'], above_threshold['temperature'], color='red', label='Above 70.00')\n",
+ "\n",
+ "\n",
+ "plt.scatter(below_threshold['timestamp'], below_threshold['temperature'], color='blue', label='Below 70.00')\n",
+ "\n",
+ "\n",
+ "plt.xlabel('TimeStamps')\n",
+ "plt.ylabel('Temperature')\n",
+ "plt.legend()\n",
+ "\n",
+ "\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "9c0df8dd",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def read_dataset(file, date_col=None):\n",
+ " '''\n",
+ " folder: is a Path object\n",
+ " file: the CSV filename in that Path object. \n",
+ " date_col: specify a date_col to use as index_col \n",
+ " \n",
+ " returns: a pandas DataFrame with a DatetimeIndex\n",
+ " '''\n",
+ " df = pd.read_csv(file, \n",
+ " index_col=date_col, \n",
+ " parse_dates=[date_col])\n",
+ " return df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "57ef107e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def plot_dfs(df1, df2, col, title=None, xlabel=None, ylabel=None):\n",
+ " '''\t\n",
+ " df1: original dataframe without missing data\n",
+ " df2: dataframe with missing data\n",
+ " col: column name that contains missing data\n",
+ " ''' \n",
+ " df_missing = df2.rename(columns={col: 'missing'})\n",
+ " \n",
+ " columns = df_missing.loc[:, 'missing':].columns.tolist()\n",
+ " subplots_size = len(columns)\n",
+ " \n",
+ " # subplots_size = df2.shape[1]\n",
+ " fig, ax = plt.subplots(subplots_size+1, 1, sharex=True)\n",
+ " plt.subplots_adjust(hspace=0.25)\n",
+ " fig.suptitle = title \n",
+ " \n",
+ " df1[col].plot(ax=ax[0], figsize=(10, 16))\n",
+ " ax[0].set_title('Original Dataset')\n",
+ " ax[0].set_xlabel(xlabel)\n",
+ " ax[0].set_ylabel(ylabel) \n",
+ " \n",
+ " for i, colname in enumerate(columns):\n",
+ " df_missing[colname].plot(ax=ax[i+1])\n",
+ " ax[i+1].set_title(colname)\n",
+ "\n",
+ " plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d6105403",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def rmse_score(df1, df2, col=None):\n",
+ " '''\n",
+ " df1: original dataframe without missing data\n",
+ " df2: dataframe with missing data\n",
+ " col: column name that contains missing data\n",
+ "\n",
+ " returns: a list of scores\n",
+ " '''\n",
+ " df_missing = df2.rename(columns={col: 'missing'})\n",
+ " columns = df_missing.loc[:, 'missing':].columns.tolist()\n",
+ " scores = []\n",
+ " for comp_col in columns[1:]:\n",
+ " rmse = np.sqrt(np.mean((df1[col] - df_missing[comp_col])**2))\n",
+ " scores.append(rmse)\n",
+ " print(f'RMSE for {comp_col}: {rmse}')\n",
+ " return scores"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "ac4e3d1f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df.isnull()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "4596cb9c",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "file1 = \"/Users/vivekvijay/Downloads/machine_temp_failure_missing.csv\"\n",
+ "file2 = \"/Users/vivekvijay/Downloads/machine_temp_failure_original.csv\"\n",
+ "df_missing = read_dataset(file1, 'timestamp')\n",
+ "df_original = read_dataset(file2, 'timestamp')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "c6deb878",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df_missing.rename(columns={\"value\": \"temperature\"},inplace = True)\n",
+ "df_original.rename(columns ={\"value\":\"temperature\"},inplace = True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "bee6bdfa",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df_missing"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "dfb38112",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df_original"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3a1bd3b4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df_missing.isnull().sum()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f0ec6158",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plot_dfs(df_original, \n",
+ " df_missing, \n",
+ " 'temperature',\n",
+ " title=\"Temp vs Time\",\n",
+ " xlabel=\"Timestamp\",\n",
+ " ylabel=\"Temperature\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "41469ff8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df_missing['ffill'] = df_missing['temperature'].fillna(method='ffill')\n",
+ "df_missing['bfill'] = df_missing['temperature'].fillna(method='bfill')\n",
+ "df_missing['mean'] = df_missing['temperature'].fillna(df_missing['temperature'].mean())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3c77f88d",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "_ = rmse_score(df_original, \n",
+ " df_missing, \n",
+ " 'temperature')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "11402c0e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plot_dfs(df_original, df_missing, 'temperature')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b130295f",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sklearn.impute import SimpleImputer\n",
+ "df_missing = read_dataset(file1, 'timestamp')\n",
+ "df_original = read_dataset(file2, 'timestamp')\n",
+ "df_missing.rename(columns={\"value\": \"temperature\"},inplace = True)\n",
+ "df_original.rename(columns ={\"value\":\"temperature\"},inplace = True)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f5e220f8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "strategy = [\n",
+ " ('Mean Strategy', 'mean'),\n",
+ " ('Median Strategy', 'median'),\n",
+ " ('Most Frequent Strategy', 'most_frequent')]\n",
+ "temp_vals = df_missing['temperature'].values.reshape(-1,1)\n",
+ "\n",
+ "for s_name, s in strategy:\n",
+ " df_missing[s_name] = (\n",
+ " SimpleImputer(strategy=s).fit_transform(temp_vals))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "a71db380",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "df_missing.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8550b180",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "_ = rmse_score(df_original, df_missing, 'temperature')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "89d9d2cd",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plot_dfs(df_original, df_missing, 'temperature')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "b06e0626",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "pip install seaborn"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7de54d50",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "import seaborn as sns\n",
+ "import scipy.stats as stats\n",
+ "plt.figure(figsize=(8, 6))\n",
+ "sns.boxplot(data=df_missing['temperature'])\n",
+ "plt.title('Box Plot - Temperature')\n",
+ "plt.xlabel('Temperature')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "95127734",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plt.figure(figsize=(8, 6))\n",
+ "sns.boxenplot(data=df_missing['temperature'])\n",
+ "plt.title('Boxen Plot - Temperature')\n",
+ "plt.xlabel('Temperature')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "9f72ce78",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "plt.figure(figsize=(8, 6))\n",
+ "pd.plotting.lag_plot(df_missing['temperature'])\n",
+ "plt.title('Lag Plot - Temperature')\n",
+ "plt.xlabel('Temperature (t)')\n",
+ "plt.ylabel('Temperature (t+1)')\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "89fe6a3b",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def iqr_outliers(data):\n",
+ " q1 = data.quantile(0.25)\n",
+ " q3 = data.quantile(0.75)\n",
+ " iqr = q3 - q1\n",
+ " lower_bound = q1 - 1.5 * iqr\n",
+ " upper_bound = q3 + 1.5 * iqr\n",
+ " outliers = data[(data < lower_bound) | (data > upper_bound)]\n",
+ " return outliers"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "c42ed264",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "outliers = iqr_outliers(df_missing['temperature'])\n",
+ "print('Outliers:')\n",
+ "print(outliers)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d50668e2",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "z_scores = stats.zscore(df_missing['temperature'])\n",
+ "plt.figure(figsize=(8, 6))\n",
+ "plt.plot(z_scores)\n",
+ "plt.title('Z-Score Plot - Temperature')\n",
+ "plt.xlabel('Index')\n",
+ "plt.ylabel('Z-Score')\n",
+ "plt.show()"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.10.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}