From cbd871fc6f469143a12060f8a07e8263f5697528 Mon Sep 17 00:00:00 2001 From: Nikita Dilman Date: Sun, 19 Feb 2023 13:50:25 +0700 Subject: [PATCH] Add files via upload --- forecasting.ipynb | 2114 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2114 insertions(+) create mode 100644 forecasting.ipynb diff --git a/forecasting.ipynb b/forecasting.ipynb new file mode 100644 index 0000000..88c868e --- /dev/null +++ b/forecasting.ipynb @@ -0,0 +1,2114 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "code", + "source": [ + "from google.colab import drive\n", + "drive.mount('/content/drive')" + ], + "metadata": { + "id": "2o-B9SBpv8a3", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "5fb6484f-9284-4bfa-fa03-41aa2414ba39" + }, + "execution_count": 2, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Mounted at /content/drive\n" + ] + } + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "2lr6h9SKvcqA", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "6d57a97c-76c0-4292-fc98-4fcc41b1ca71" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "/content/drive/MyDrive/AI/euro\n", + "1.csv 2.csv 3.csv 4.csv 5.csv 6.csv a.json forecasting.ipynb\n", + "1.txt 2.txt 3.txt 4.txt 5.txt 6.txt b.json\n" + ] + } + ], + "source": [ + "%cd /content/drive/MyDrive/AI/euro\n", + "!ls" + ] + }, + { + "cell_type": "code", + "source": [ + "import glob\n", + "map = open('1.txt', 'r').read()\n", + "m = eval(map)\n", + "\n", + "mapping = {}\n", + "for el in m:\n", + " if el[2] == 'Уставки':\n", + " name = el[0] + ' ' + el[1] + ' ' + col_name + ' ' + el[3] \n", + " else:\n", + " name = el[0] + ' ' + el[1] + ' ' + el[2] + ' ' + el[3] \n", + " col_name = el[2]\n", + " mapping[''.join([x for x in el[4] if x != '\\\\'])] = name\n", + "\n", + "len(mapping.keys())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "PgBn5DC1Tdy3", + "outputId": "ed2e056d-1d27-48c3-8244-b467c8d4dd7c" + }, + "execution_count": 138, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "121" + ] + }, + "metadata": {}, + "execution_count": 138 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import json\n", + "json.dump(mapping, open('mapping.json', 'w'))" + ], + "metadata": { + "id": "AG2jcZAlIw8F" + }, + "execution_count": 330, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import sklearn\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "from tqdm import tqdm" + ], + "metadata": { + "id": "kMCQhNUixBoX" + }, + "execution_count": 139, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "df = pd.read_csv('1.csv', parse_dates=['timestamp'])\n", + "df.columns= ['timestamp'] + [''.join([x for x in el if x != '\\\\']) for el in df.columns if el != 'timestamp']\n", + "df = df.rename(columns=mapping)\n", + "df = df.set_index('timestamp').resample('5T').first().reset_index()\n", + "df" + ], + "metadata": { + "id": "xU89tPEKxJKW" + }, + "execution_count": 243, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from statsmodels.tsa.stattools import adfuller\n", + "from statsmodels.graphics.tsaplots import plot_acf, plot_pacf\n", + "from statsmodels.tsa.arima.model import ARIMA" + ], + "metadata": { + "id": "p-0xx_BzrUpC" + }, + "execution_count": 129, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "df.columns[70:110]" + ], + "metadata": { + "id": "mYCmqxhFakGu" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from datetime import datetime, timedelta\n", + "\n", + "# создание списка с датами\n", + "date_list = [df['timestamp'].min() + timedelta(minutes=x) for x in range(0, 60*24*60*60, 15)]\n", + "\n", + "len(date_list)\n", + "\n", + "df = df[df['timestamp'].isin(date_list)]\n", + "df.shape" + ], + "metadata": { + "id": "aiH2Yt5jefeY" + }, + "execution_count": 132, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "df = df.set_index('timestamp').resample('5T').first().reset_index()\n", + "df" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 748 + }, + "id": "D4jyD4bwj2xT", + "outputId": "20590b8c-7cc6-4584-927d-1798e98ad85d" + }, + "execution_count": 245, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " timestamp \\\n", + "0 2023-01-25 09:30:00 \n", + "1 2023-01-25 09:35:00 \n", + "2 2023-01-25 09:40:00 \n", + "3 2023-01-25 09:45:00 \n", + "4 2023-01-25 09:50:00 \n", + "... ... \n", + "6642 2023-02-17 11:00:00 \n", + "6643 2023-02-17 11:05:00 \n", + "6644 2023-02-17 11:10:00 \n", + "6645 2023-02-17 11:15:00 \n", + "6646 2023-02-17 11:20:00 \n", + "\n", + " Подшипник 1 Температура нагрева Температура temperature \\\n", + "0 62.800003 \n", + "1 62.800003 \n", + "2 62.800003 \n", + "3 62.800003 \n", + "4 62.800003 \n", + "... ... \n", + "6642 61.800003 \n", + "6643 61.800003 \n", + "6644 61.800003 \n", + "6645 61.899994 \n", + "6646 61.899994 \n", + "\n", + " Подшипник 1 Температура нагрева Температура alarm_max \\\n", + "0 75.0 \n", + "1 75.0 \n", + "2 75.0 \n", + "3 75.0 \n", + "4 75.0 \n", + "... ... \n", + "6642 75.0 \n", + "6643 75.0 \n", + "6644 75.0 \n", + "6645 75.0 \n", + "6646 75.0 \n", + "\n", + " Подшипник 1 Температура нагрева Температура alarm_min \\\n", + "0 0.0 \n", + "1 0.0 \n", + "2 0.0 \n", + "3 0.0 \n", + "4 0.0 \n", + "... ... \n", + "6642 0.0 \n", + "6643 0.0 \n", + "6644 0.0 \n", + "6645 0.0 \n", + "6646 0.0 \n", + "\n", + " Подшипник 1 Температура нагрева Температура warning_max \\\n", + "0 65.0 \n", + "1 65.0 \n", + "2 65.0 \n", + "3 65.0 \n", + "4 65.0 \n", + "... ... \n", + "6642 65.0 \n", + "6643 65.0 \n", + "6644 65.0 \n", + "6645 65.0 \n", + "6646 65.0 \n", + "\n", + " Подшипник 1 Температура нагрева Температура warning_min \\\n", + "0 0.0 \n", + "1 0.0 \n", + "2 0.0 \n", + "3 0.0 \n", + "4 0.0 \n", + "... ... \n", + "6642 0.0 \n", + "6643 0.0 \n", + "6644 0.0 \n", + "6645 0.0 \n", + "6646 0.0 \n", + "\n", + " Подшипник 1 Вибрация Осевая vibration_axial \\\n", + "0 0.381944 \n", + "1 0.381944 \n", + "2 0.387731 \n", + "3 0.381944 \n", + "4 0.381944 \n", + "... ... \n", + "6642 0.243056 \n", + "6643 0.254630 \n", + "6644 0.254630 \n", + "6645 0.254630 \n", + "6646 0.254630 \n", + "\n", + " Подшипник 1 Вибрация Осевая alarm_max \\\n", + "0 7.1 \n", + "1 7.1 \n", + "2 7.1 \n", + "3 7.1 \n", + "4 7.1 \n", + "... ... \n", + "6642 7.1 \n", + "6643 7.1 \n", + "6644 7.1 \n", + "6645 7.1 \n", + "6646 7.1 \n", + "\n", + " Подшипник 1 Вибрация Осевая alarm_min \\\n", + "0 0.0 \n", + "1 0.0 \n", + "2 0.0 \n", + "3 0.0 \n", + "4 0.0 \n", + "... ... \n", + "6642 0.0 \n", + "6643 0.0 \n", + "6644 0.0 \n", + "6645 0.0 \n", + "6646 0.0 \n", + "\n", + " Подшипник 1 Вибрация Осевая warning_max ... \\\n", + "0 4.5 ... \n", + "1 4.5 ... \n", + "2 4.5 ... \n", + "3 4.5 ... \n", + "4 4.5 ... \n", + "... ... ... \n", + "6642 4.5 ... \n", + "6643 4.5 ... \n", + "6644 4.5 ... \n", + "6645 4.5 ... \n", + "6646 4.5 ... \n", + "\n", + " Положение задвижки gas_valve_closed \\\n", + "0 0.0 \n", + "1 0.0 \n", + "2 0.0 \n", + "3 0.0 \n", + "4 0.0 \n", + "... ... \n", + "6642 0.0 \n", + "6643 0.0 \n", + "6644 0.0 \n", + "6645 0.0 \n", + "6646 0.0 \n", + "\n", + " Положение задвижки gas_valve_open \\\n", + "0 1.0 \n", + "1 1.0 \n", + "2 1.0 \n", + "3 1.0 \n", + "4 1.0 \n", + "... ... \n", + "6642 1.0 \n", + "6643 1.0 \n", + "6644 1.0 \n", + "6645 1.0 \n", + "6646 1.0 \n", + "\n", + " Положение задвижки gas_valve_position Главный привод rotor_current \\\n", + "0 0.0 1.0 \n", + "1 0.0 1.0 \n", + "2 0.0 1.0 \n", + "3 0.0 1.0 \n", + "4 0.0 1.0 \n", + "... ... ... \n", + "6642 0.0 1.0 \n", + "6643 0.0 1.0 \n", + "6644 0.0 1.0 \n", + "6645 0.0 1.0 \n", + "6646 0.0 1.0 \n", + "\n", + " Главный привод rotor_voltage Главный привод stator_current \\\n", + "0 0.0 180.850937 \n", + "1 0.0 184.624741 \n", + "2 0.0 179.877045 \n", + "3 0.0 182.871750 \n", + "4 0.0 180.802231 \n", + "... ... ... \n", + "6642 0.0 184.089111 \n", + "6643 0.0 182.725662 \n", + "6644 0.0 185.817764 \n", + "6645 0.0 184.770828 \n", + "6646 0.0 183.675201 \n", + "\n", + " Главный привод stator_voltage Маслосистема oil_level \\\n", + "0 1.0 83.547989 \n", + "1 1.0 83.452797 \n", + "2 1.0 83.631989 \n", + "3 1.0 83.525589 \n", + "4 1.0 83.475189 \n", + "... ... ... \n", + "6642 1.0 78.676224 \n", + "6643 1.0 78.564224 \n", + "6644 1.0 78.799423 \n", + "6645 1.0 78.357040 \n", + "6646 1.0 78.726616 \n", + "\n", + " Маслосистема oil_pressure Работа эксгаустера work \n", + "0 2.156743 1.0 \n", + "1 2.145085 1.0 \n", + "2 2.151311 1.0 \n", + "3 2.159490 1.0 \n", + "4 2.153874 1.0 \n", + "... ... ... \n", + "6642 2.147954 1.0 \n", + "6643 2.151006 1.0 \n", + "6644 2.154912 1.0 \n", + "6645 2.149358 1.0 \n", + "6646 2.145085 1.0 \n", + "\n", + "[6647 rows x 122 columns]" + ], + "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", + " \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", + "
timestampПодшипник 1 Температура нагрева Температура temperatureПодшипник 1 Температура нагрева Температура alarm_maxПодшипник 1 Температура нагрева Температура alarm_minПодшипник 1 Температура нагрева Температура warning_maxПодшипник 1 Температура нагрева Температура warning_minПодшипник 1 Вибрация Осевая vibration_axialПодшипник 1 Вибрация Осевая alarm_maxПодшипник 1 Вибрация Осевая alarm_minПодшипник 1 Вибрация Осевая warning_max...Положение задвижки gas_valve_closedПоложение задвижки gas_valve_openПоложение задвижки gas_valve_positionГлавный привод rotor_currentГлавный привод rotor_voltageГлавный привод stator_currentГлавный привод stator_voltageМаслосистема oil_levelМаслосистема oil_pressureРабота эксгаустера work
02023-01-25 09:30:0062.80000375.00.065.00.00.3819447.10.04.5...0.01.00.01.00.0180.8509371.083.5479892.1567431.0
12023-01-25 09:35:0062.80000375.00.065.00.00.3819447.10.04.5...0.01.00.01.00.0184.6247411.083.4527972.1450851.0
22023-01-25 09:40:0062.80000375.00.065.00.00.3877317.10.04.5...0.01.00.01.00.0179.8770451.083.6319892.1513111.0
32023-01-25 09:45:0062.80000375.00.065.00.00.3819447.10.04.5...0.01.00.01.00.0182.8717501.083.5255892.1594901.0
42023-01-25 09:50:0062.80000375.00.065.00.00.3819447.10.04.5...0.01.00.01.00.0180.8022311.083.4751892.1538741.0
..................................................................
66422023-02-17 11:00:0061.80000375.00.065.00.00.2430567.10.04.5...0.01.00.01.00.0184.0891111.078.6762242.1479541.0
66432023-02-17 11:05:0061.80000375.00.065.00.00.2546307.10.04.5...0.01.00.01.00.0182.7256621.078.5642242.1510061.0
66442023-02-17 11:10:0061.80000375.00.065.00.00.2546307.10.04.5...0.01.00.01.00.0185.8177641.078.7994232.1549121.0
66452023-02-17 11:15:0061.89999475.00.065.00.00.2546307.10.04.5...0.01.00.01.00.0184.7708281.078.3570402.1493581.0
66462023-02-17 11:20:0061.89999475.00.065.00.00.2546307.10.04.5...0.01.00.01.00.0183.6752011.078.7266162.1450851.0
\n", + "

6647 rows × 122 columns

\n", + "
\n", + " \n", + " \n", + " \n", + "\n", + " \n", + "
\n", + "
\n", + " " + ] + }, + "metadata": {}, + "execution_count": 245 + } + ] + }, + { + "cell_type": "code", + "source": [ + "mapping" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ooZkqUT7kWDn", + "outputId": "2c87107a-7ab4-4ff8-ff0b-2925e9c409f6" + }, + "execution_count": 331, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'SM_Exgauster[2:27]': 'Подшипник 1 Температура нагрева Температура temperature',\n", + " 'SM_Exgauster[2:65]': 'Подшипник 1 Температура нагрева Температура alarm_max',\n", + " 'SM_Exgauster[2:74]': 'Подшипник 1 Температура нагрева Температура alarm_min',\n", + " 'SM_Exgauster[2:83]': 'Подшипник 1 Температура нагрева Температура warning_max',\n", + " 'SM_Exgauster[2:92]': 'Подшипник 1 Температура нагрева Температура warning_min',\n", + " 'SM_Exgauster[2:2]': 'Подшипник 1 Вибрация Осевая vibration_axial',\n", + " 'SM_Exgauster[2:139]': 'Подшипник 1 Вибрация Осевая alarm_max',\n", + " 'SM_Exgauster[2:151]': 'Подшипник 1 Вибрация Осевая alarm_min',\n", + " 'SM_Exgauster[2:163]': 'Подшипник 1 Вибрация Осевая warning_max',\n", + " 'SM_Exgauster[2:175]': 'Подшипник 1 Вибрация Осевая warning_min',\n", + " 'SM_Exgauster[2:0]': 'Подшипник 1 Вибрация Горизонтальная vibration_horizontal',\n", + " 'SM_Exgauster[2:137]': 'Подшипник 1 Вибрация Горизонтальная alarm_max',\n", + " 'SM_Exgauster[2:149]': 'Подшипник 1 Вибрация Горизонтальная alarm_min',\n", + " 'SM_Exgauster[2:161]': 'Подшипник 1 Вибрация Горизонтальная warning_max',\n", + " 'SM_Exgauster[2:173]': 'Подшипник 1 Вибрация Горизонтальная warning_min',\n", + " 'SM_Exgauster[2:1]': 'Подшипник 1 Вибрация Вертикальная vibration_vertical',\n", + " 'SM_Exgauster[2:138]': 'Подшипник 1 Вибрация Вертикальная alarm_max',\n", + " 'SM_Exgauster[2:150]': 'Подшипник 1 Вибрация Вертикальная alarm_min',\n", + " 'SM_Exgauster[2:162]': 'Подшипник 1 Вибрация Вертикальная warning_max',\n", + " 'SM_Exgauster[2:174]': 'Подшипник 1 Вибрация Вертикальная warning_min',\n", + " 'SM_Exgauster[2:28]': 'Подшипник 2 Температура нагрева Температура temperature',\n", + " 'SM_Exgauster[2:66]': 'Подшипник 2 Температура нагрева Температура alarm_max',\n", + " 'SM_Exgauster[2:75]': 'Подшипник 2 Температура нагрева Температура alarm_min',\n", + " 'SM_Exgauster[2:84]': 'Подшипник 2 Температура нагрева Температура warning_max',\n", + " 'SM_Exgauster[2:93]': 'Подшипник 2 Температура нагрева Температура warning_min',\n", + " 'SM_Exgauster[2:5]': 'Подшипник 2 Вибрация Осевая vibration_axial',\n", + " 'SM_Exgauster[2:142]': 'Подшипник 2 Вибрация Осевая alarm_max',\n", + " 'SM_Exgauster[2:154]': 'Подшипник 2 Вибрация Осевая alarm_min',\n", + " 'SM_Exgauster[2:166]': 'Подшипник 2 Вибрация Осевая warning_max',\n", + " 'SM_Exgauster[2:178]': 'Подшипник 2 Вибрация Осевая warning_min',\n", + " 'SM_Exgauster[2:3]': 'Подшипник 2 Вибрация Горизонтальная vibration_horizontal',\n", + " 'SM_Exgauster[2:140]': 'Подшипник 2 Вибрация Горизонтальная alarm_max',\n", + " 'SM_Exgauster[2:152]': 'Подшипник 2 Вибрация Горизонтальная alarm_min',\n", + " 'SM_Exgauster[2:164]': 'Подшипник 2 Вибрация Горизонтальная warning_max',\n", + " 'SM_Exgauster[2:176]': 'Подшипник 2 Вибрация Горизонтальная warning_min',\n", + " 'SM_Exgauster[2:4]': 'Подшипник 2 Вибрация Вертикальная vibration_vertical',\n", + " 'SM_Exgauster[2:141]': 'Подшипник 2 Вибрация Вертикальная alarm_max',\n", + " 'SM_Exgauster[2:153]': 'Подшипник 2 Вибрация Вертикальная alarm_min',\n", + " 'SM_Exgauster[2:165]': 'Подшипник 2 Вибрация Вертикальная warning_max',\n", + " 'SM_Exgauster[2:177]': 'Подшипник 2 Вибрация Вертикальная warning_min',\n", + " 'SM_Exgauster[2:29]': 'Подшипник 3 Температура нагрева Температура temperature',\n", + " 'SM_Exgauster[2:67]': 'Подшипник 3 Температура нагрева Температура alarm_max',\n", + " 'SM_Exgauster[2:76]': 'Подшипник 3 Температура нагрева Температура alarm_min',\n", + " 'SM_Exgauster[2:85]': 'Подшипник 3 Температура нагрева Температура warning_max',\n", + " 'SM_Exgauster[2:94]': 'Подшипник 3 Температура нагрева Температура warning_min',\n", + " 'SM_Exgauster[2:30]': 'Подшипник 4 Температура нагрева Температура temperature',\n", + " 'SM_Exgauster[2:68]': 'Подшипник 4 Температура нагрева Температура alarm_max',\n", + " 'SM_Exgauster[2:77]': 'Подшипник 4 Температура нагрева Температура alarm_min',\n", + " 'SM_Exgauster[2:86]': 'Подшипник 4 Температура нагрева Температура warning_max',\n", + " 'SM_Exgauster[2:95]': 'Подшипник 4 Температура нагрева Температура warning_min',\n", + " 'SM_Exgauster[2:31]': 'Подшипник 5 Температура нагрева Температура temperature',\n", + " 'SM_Exgauster[2:69]': 'Подшипник 5 Температура нагрева Температура alarm_max',\n", + " 'SM_Exgauster[2:78]': 'Подшипник 5 Температура нагрева Температура alarm_min',\n", + " 'SM_Exgauster[2:87]': 'Подшипник 5 Температура нагрева Температура warning_max',\n", + " 'SM_Exgauster[2:96]': 'Подшипник 5 Температура нагрева Температура warning_min',\n", + " 'SM_Exgauster[2:32]': 'Подшипник 6 Температура нагрева Температура temperature',\n", + " 'SM_Exgauster[2:70]': 'Подшипник 6 Температура нагрева Температура alarm_max',\n", + " 'SM_Exgauster[2:79]': 'Подшипник 6 Температура нагрева Температура alarm_min',\n", + " 'SM_Exgauster[2:88]': 'Подшипник 6 Температура нагрева Температура warning_max',\n", + " 'SM_Exgauster[2:97]': 'Подшипник 6 Температура нагрева Температура warning_min',\n", + " 'SM_Exgauster[2:33]': 'Подшипник 7 Температура нагрева Температура temperature',\n", + " 'SM_Exgauster[2:71]': 'Подшипник 7 Температура нагрева Температура alarm_max',\n", + " 'SM_Exgauster[2:80]': 'Подшипник 7 Температура нагрева Температура alarm_min',\n", + " 'SM_Exgauster[2:89]': 'Подшипник 7 Температура нагрева Температура warning_max',\n", + " 'SM_Exgauster[2:98]': 'Подшипник 7 Температура нагрева Температура warning_min',\n", + " 'SM_Exgauster[2:8]': 'Подшипник 7 Вибрация Осевая vibration_axial',\n", + " 'SM_Exgauster[2:145]': 'Подшипник 7 Вибрация Осевая alarm_max',\n", + " 'SM_Exgauster[2:157]': 'Подшипник 7 Вибрация Осевая alarm_min',\n", + " 'SM_Exgauster[2:169]': 'Подшипник 7 Вибрация Осевая warning_max',\n", + " 'SM_Exgauster[2:181]': 'Подшипник 7 Вибрация Осевая warning_min',\n", + " 'SM_Exgauster[2:6]': 'Подшипник 7 Вибрация Горизонтальная vibration_horizontal',\n", + " 'SM_Exgauster[2:143]': 'Подшипник 7 Вибрация Горизонтальная alarm_max',\n", + " 'SM_Exgauster[2:155]': 'Подшипник 7 Вибрация Горизонтальная alarm_min',\n", + " 'SM_Exgauster[2:167]': 'Подшипник 7 Вибрация Горизонтальная warning_max',\n", + " 'SM_Exgauster[2:179]': 'Подшипник 7 Вибрация Горизонтальная warning_min',\n", + " 'SM_Exgauster[2:7]': 'Подшипник 7 Вибрация Вертикальная vibration_vertical',\n", + " 'SM_Exgauster[2:144]': 'Подшипник 7 Вибрация Вертикальная alarm_max',\n", + " 'SM_Exgauster[2:156]': 'Подшипник 7 Вибрация Вертикальная alarm_min',\n", + " 'SM_Exgauster[2:168]': 'Подшипник 7 Вибрация Вертикальная warning_max',\n", + " 'SM_Exgauster[2:180]': 'Подшипник 7 Вибрация Вертикальная warning_min',\n", + " 'SM_Exgauster[2:34]': 'Подшипник 8 Температура нагрева Температура temperature',\n", + " 'SM_Exgauster[2:72]': 'Подшипник 8 Температура нагрева Температура alarm_max',\n", + " 'SM_Exgauster[2:81]': 'Подшипник 8 Температура нагрева Температура alarm_min',\n", + " 'SM_Exgauster[2:90]': 'Подшипник 8 Температура нагрева Температура warning_max',\n", + " 'SM_Exgauster[2:99]': 'Подшипник 8 Температура нагрева Температура warning_min',\n", + " 'SM_Exgauster[2:11]': 'Подшипник 8 Вибрация Осевая vibration_axial',\n", + " 'SM_Exgauster[2:148]': 'Подшипник 8 Вибрация Осевая alarm_max',\n", + " 'SM_Exgauster[2:160]': 'Подшипник 8 Вибрация Осевая alarm_min',\n", + " 'SM_Exgauster[2:172]': 'Подшипник 8 Вибрация Осевая warning_max',\n", + " 'SM_Exgauster[2:184]': 'Подшипник 8 Вибрация Осевая warning_min',\n", + " 'SM_Exgauster[2:9]': 'Подшипник 8 Вибрация Горизонтальная vibration_horizontal',\n", + " 'SM_Exgauster[2:146]': 'Подшипник 8 Вибрация Горизонтальная alarm_max',\n", + " 'SM_Exgauster[2:158]': 'Подшипник 8 Вибрация Горизонтальная alarm_min',\n", + " 'SM_Exgauster[2:170]': 'Подшипник 8 Вибрация Горизонтальная warning_max',\n", + " 'SM_Exgauster[2:182]': 'Подшипник 8 Вибрация Горизонтальная warning_min',\n", + " 'SM_Exgauster[2:10]': 'Подшипник 8 Вибрация Вертикальная vibration_vertical',\n", + " 'SM_Exgauster[2:147]': 'Подшипник 8 Вибрация Вертикальная alarm_max',\n", + " 'SM_Exgauster[2:159]': 'Подшипник 8 Вибрация Вертикальная alarm_min',\n", + " 'SM_Exgauster[2:171]': 'Подшипник 8 Вибрация Вертикальная warning_max',\n", + " 'SM_Exgauster[2:183]': 'Подшипник 8 Вибрация Вертикальная warning_min',\n", + " 'SM_Exgauster[2:35]': 'Подшипник 9 Температура нагрева Температура temperature',\n", + " 'SM_Exgauster[2:73]': 'Подшипник 9 Температура нагрева Температура alarm_max',\n", + " 'SM_Exgauster[2:82]': 'Подшипник 9 Температура нагрева Температура alarm_min',\n", + " 'SM_Exgauster[2:91]': 'Подшипник 9 Температура нагрева Температура warning_max',\n", + " 'SM_Exgauster[2:100]': 'Подшипник 9 Температура нагрева Температура warning_min',\n", + " 'SM_Exgauster[2:42]': 'Охладитель Масло temperature_after',\n", + " 'SM_Exgauster[2:41]': 'Охладитель Масло temperature_before',\n", + " 'SM_Exgauster[2:37]': 'Охладитель Вода temperature_after',\n", + " 'SM_Exgauster[2:36]': 'Охладитель Вода temperature_before',\n", + " 'SM_Exgauster[2:24]': 'Газовый коллектор temperature_before',\n", + " 'SM_Exgauster[2:61]': 'Газовый коллектор underpressure_before',\n", + " 'SM_Exgauster[4.1]': 'Положение задвижки gas_valve_closed',\n", + " 'SM_Exgauster[4.2]': 'Положение задвижки gas_valve_open',\n", + " 'SM_Exgauster[4:6]': 'Положение задвижки gas_valve_position',\n", + " 'SM_Exgauster[4:2]': 'Главный привод rotor_current',\n", + " 'SM_Exgauster[4:4]': 'Главный привод rotor_voltage',\n", + " 'SM_Exgauster[4:3]': 'Главный привод stator_current',\n", + " 'SM_Exgauster[4:5]': 'Главный привод stator_voltage',\n", + " 'SM_Exgauster[4:0]': 'Маслосистема oil_level',\n", + " 'SM_Exgauster[4:1]': 'Маслосистема oil_pressure',\n", + " 'SM_Exgauster[2.0]': 'Работа эксгаустера work'}" + ] + }, + "metadata": {}, + "execution_count": 331 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import datetime\n", + "from statsmodels.tsa.api import ExponentialSmoothing\n", + "\n", + "plt.plot(df['timestamp'], df['Подшипник 7 Вибрация Горизонтальная vibration_horizontal'])\n", + "plt.xticks(rotation=90)\n", + "\n", + "plt.axhline(y=df['Подшипник 7 Вибрация Горизонтальная warning_min'][0], color='yellow')\n", + "plt.axhline(y=df['Подшипник 7 Вибрация Горизонтальная warning_max'][0], color='yellow')\n", + "\n", + "plt.axhline(y=df['Подшипник 7 Вибрация Горизонтальная alarm_min'][0], color='red')\n", + "plt.axhline(y=df['Подшипник 7 Вибрация Горизонтальная alarm_max'][0], color='red')\n", + "\n", + "red_dates = ['2023-02-09', '2023-01-19']\n", + "red_dates = [datetime.datetime.strptime(date, '%Y-%m-%d').date() for date in red_dates]\n", + "for date in red_dates:\n", + " plt.axvline(x=date, color='cyan')\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 313 + }, + "id": "bKzLxFtcR5CK", + "outputId": "5e0d9c83-d8f7-4853-eaad-7a167050a96a" + }, + "execution_count": 244, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [ + "df.fillna(0, inplace=True)" + ], + "metadata": { + "id": "RKwv8SBQfKBw" + }, + "execution_count": 150, + "outputs": [] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "LXVO9oOwi7nx" + }, + "execution_count": 122, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "result = adfuller(df['Подшипник 7 Вибрация Горизонтальная vibration_horizontal'])\n", + "print('ADF Statistic: %f' % result[0])\n", + "print('p-value: %f' % result[1])\n", + "print('Critical Values:')\n", + "for key, value in result[4].items():\n", + " print('\\t%s: %.3f' % (key, value))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "HziJTOVnR9AB", + "outputId": "1e4fbb33-c50f-4dd2-d385-d8abc1bb0d3f" + }, + "execution_count": 151, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "ADF Statistic: -1.967500\n", + "p-value: 0.301002\n", + "Critical Values:\n", + "\t1%: -3.431\n", + "\t5%: -2.862\n", + "\t10%: -2.567\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "df_diff = df['Подшипник 7 Вибрация Горизонтальная vibration_horizontal'].diff().dropna()" + ], + "metadata": { + "id": "hFhPdI0UR_kW" + }, + "execution_count": 102, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "plot_acf(df_diff, lags=50)\n", + "plt.show()\n", + "\n", + "plot_pacf(df_diff, lags=50)\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 545 + }, + "id": "uqtUpjxtSFsm", + "outputId": "dd8c42b5-a53a-488f-a312-69782da75b09" + }, + "execution_count": 103, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [ + "df[df['timestamp'].isin(date_list)]" + ], + "metadata": { + "id": "aIOOJx2Ei6KB" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "model = ARIMA(df.set_index('timestamp').loc['2023-02-17':]['Подшипник 7 Вибрация Горизонтальная vibration_horizontal'], order=(1, 1, 2))\n", + "model_fit = model.fit()\n", + "print(model_fit.summary())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "AXwZAfPqSIv8", + "outputId": "8aa37358-9e5b-4e95-b52f-8d75ab85bea9" + }, + "execution_count": 174, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " SARIMAX Results \n", + "====================================================================================================================\n", + "Dep. Variable: Подшипник 7 Вибрация Горизонтальная vibration_horizontal No. Observations: 137\n", + "Model: ARIMA(1, 1, 2) Log Likelihood 415.379\n", + "Date: Sun, 19 Feb 2023 AIC -822.759\n", + "Time: 03:01:13 BIC -811.108\n", + "Sample: 02-17-2023 HQIC -818.024\n", + " - 02-17-2023 \n", + "Covariance Type: opg \n", + "==============================================================================\n", + " coef std err z P>|z| [0.025 0.975]\n", + "------------------------------------------------------------------------------\n", + "ar.L1 0.8413 0.867 0.970 0.332 -0.859 2.541\n", + "ma.L1 -1.1896 0.851 -1.398 0.162 -2.857 0.478\n", + "ma.L2 0.3074 0.272 1.132 0.258 -0.225 0.840\n", + "sigma2 0.0001 1.58e-05 8.213 0.000 9.9e-05 0.000\n", + "===================================================================================\n", + "Ljung-Box (L1) (Q): 0.15 Jarque-Bera (JB): 3.63\n", + "Prob(Q): 0.70 Prob(JB): 0.16\n", + "Heteroskedasticity (H): 1.46 Skew: -0.40\n", + "Prob(H) (two-sided): 0.21 Kurtosis: 3.03\n", + "===================================================================================\n", + "\n", + "Warnings:\n", + "[1] Covariance matrix calculated using the outer product of gradients (complex-step).\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.8/dist-packages/statsmodels/tsa/base/tsa_model.py:524: ValueWarning: No frequency information was provided, so inferred frequency 5T will be used.\n", + " warnings.warn('No frequency information was'\n", + "/usr/local/lib/python3.8/dist-packages/statsmodels/tsa/base/tsa_model.py:524: ValueWarning: No frequency information was provided, so inferred frequency 5T will be used.\n", + " warnings.warn('No frequency information was'\n", + "/usr/local/lib/python3.8/dist-packages/statsmodels/tsa/base/tsa_model.py:524: ValueWarning: No frequency information was provided, so inferred frequency 5T will be used.\n", + " warnings.warn('No frequency information was'\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "forecast_values = model_fit.forecast(steps=240)\n", + "forecast_values" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "jTKxvVDEgDL4", + "outputId": "953fa8cb-146c-4982-8ba8-01c82c9ba80f" + }, + "execution_count": 175, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "2023-02-17 11:25:00 0.461494\n", + "2023-02-17 11:30:00 0.461461\n", + "2023-02-17 11:35:00 0.461433\n", + "2023-02-17 11:40:00 0.461409\n", + "2023-02-17 11:45:00 0.461390\n", + " ... \n", + "2023-02-18 07:00:00 0.461285\n", + "2023-02-18 07:05:00 0.461285\n", + "2023-02-18 07:10:00 0.461285\n", + "2023-02-18 07:15:00 0.461285\n", + "2023-02-18 07:20:00 0.461285\n", + "Freq: 5T, Name: predicted_mean, Length: 240, dtype: float64" + ] + }, + "metadata": {}, + "execution_count": 175 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import datetime\n", + "\n", + "plt.plot(df['timestamp'], df['Подшипник 7 Вибрация Горизонтальная vibration_horizontal'])\n", + "plt.xticks(rotation=90)\n", + "\n", + "plt.axhline(y=df['Подшипник 7 Вибрация Горизонтальная warning_min'][0], color='yellow')\n", + "plt.axhline(y=df['Подшипник 7 Вибрация Горизонтальная warning_max'][0], color='yellow')\n", + "\n", + "plt.axhline(y=df['Подшипник 7 Вибрация Горизонтальная alarm_min'][0], color='red')\n", + "plt.axhline(y=df['Подшипник 7 Вибрация Горизонтальная alarm_max'][0], color='red')\n", + "\n", + "red_dates = ['2023-02-09', '2023-01-19']\n", + "red_dates = [datetime.datetime.strptime(date, '%Y-%m-%d').date() for date in red_dates]\n", + "for date in red_dates:\n", + " plt.axvline(x=date, color='cyan')\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 313 + }, + "id": "9v7Fi9ySgZPf", + "outputId": "90230898-f22b-4408-b401-4fc3c58c3695" + }, + "execution_count": 176, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "BUCDivzKglHu" + }, + "execution_count": 176, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "plt.plot(df.set_index('timestamp').loc['2023-02-17':].index, df.set_index('timestamp').loc['2023-02-17':]['Подшипник 7 Вибрация Горизонтальная vibration_horizontal'], label='Actual')\n", + "plt.xticks(rotation=90)\n", + "\n", + "plt.plot(date_list, forecast_values.values, color='red', label='Predicted')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 319 + }, + "id": "Y1wRHnNYgUEf", + "outputId": "e68ac38f-39ef-4d20-9854-a73ec529ff38" + }, + "execution_count": 177, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "execution_count": 177 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import random\n", + "import os\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "from sklearn.metrics import mean_absolute_error\n", + "!pip install catboost -qqq\n", + "from catboost import CatBoostRegressor, Pool\n", + "from sklearn.model_selection import StratifiedKFold, StratifiedGroupKFold\n", + "from copy import deepcopy \n", + "import pickle\n", + "import sklearn.metrics\n", + "\n", + "import warnings\n", + "warnings.filterwarnings('ignore')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "o5a4m07Whhfz", + "outputId": "6d6a17f0-01d0-412f-a5e0-9fd6e6973943" + }, + "execution_count": 178, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m76.6/76.6 MB\u001b[0m \u001b[31m11.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "def set_seed(seed: int):\n", + " \"\"\"Set a random seed for complete reproducibility.\"\"\"\n", + " random.seed(seed)\n", + " np.random.seed(seed)\n", + " os.environ['PYTHONHASHSEED'] = str(seed)\n", + "\n", + "set_seed(0xBACED)" + ], + "metadata": { + "id": "3OxEyWb-ognB" + }, + "execution_count": 179, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "df = df.set_index('timestamp')" + ], + "metadata": { + "id": "OH3_HXpZtLbE" + }, + "execution_count": 250, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "X = df.loc['2023-02-01':]['Подшипник 7 Вибрация Горизонтальная vibration_horizontal'].values\n", + "X" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "7p88-OhTs720", + "outputId": "e7129aae-d744-488c-ec1c-38e48e63cce5" + }, + "execution_count": 229, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "array([1.66087973, 1.67245376, 1.67245376, ..., 0.46296296, 0.45717594,\n", + " 0.46296296])" + ] + }, + "metadata": {}, + "execution_count": 229 + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "UkICh3nqovJM" + }, + "execution_count": 236, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "np.array(data).shape" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "cLUAT-ftue8E", + "outputId": "b4b4aa17-307a-4881-8019-8e5b569c56ef" + }, + "execution_count": 237, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "(300, 100)" + ] + }, + "metadata": {}, + "execution_count": 237 + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "NIUVTir4uh3d" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "preds = df['Подшипник 7 Вибрация Горизонтальная vibration_horizontal'].loc['2023-02-17':].values[-100:].tolist()\n", + "for i in range(300):\n", + " pred = model.predict(preds[-100:])\n", + " preds.append(pred)" + ], + "metadata": { + "id": "yzVzfQ8HvZ5H" + }, + "execution_count": 239, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "deltas = [df.index.max() + timedelta(minutes=x) for x in range(300)]" + ], + "metadata": { + "id": "jyxD-iCRuiRk" + }, + "execution_count": 240, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from sklearn.model_selection import TimeSeriesSplit\n", + "from catboost import CatBoostRegressor\n", + "\n", + "df = pd.read_csv('1.csv', parse_dates=['timestamp'])\n", + "df.columns= ['timestamp'] + [''.join([x for x in el if x != '\\\\']) for el in df.columns if el != 'timestamp']\n", + "df = df.rename(columns=mapping)\n", + "df = df.set_index('timestamp').resample('5T').first().reset_index()\n", + "\n", + "lim = {}\n", + "for col in tqdm(df.columns):\n", + " if 'Подшипник' in col and ('max' not in col and 'min' not in col):\n", + " print(col)\n", + " col_name = col\n", + " data, target = [], []\n", + "\n", + " X = df[col_name].values\n", + "\n", + " tscv = TimeSeriesSplit(n_splits=300, test_size=1)\n", + " for i, (train_index, test_index) in enumerate(tscv.split(X)):\n", + " data.append(X[train_index[-100:]])\n", + " target.append(X[test_index[0]])\n", + " data = np.array(data)\n", + " target = np.array(target)\n", + " # print(data, target)\n", + "\n", + " model = CatBoostRegressor()\n", + " model.fit(data, target)\n", + " model.save_model(os.path.join('models/', col_name + '.cb'))\n", + "\n", + " prefix = ' '.join(col_name.split()[:-1])\n", + " alarm_max = df[prefix + ' alarm_max'][0]\n", + " alarm_min = df[prefix + ' alarm_min'][0]\n", + "\n", + " warning_max = df[prefix + ' warning_max'][0]\n", + " warning_min = df[prefix + ' warning_min'][0]\n", + "\n", + " lim[col_name] = {'alarm_max': alarm_max, 'alarm_min': alarm_min,\n", + " 'warning_max': warning_max, 'warning_min': warning_min}" + ], + "metadata": { + "id": "ZWYd2O1A0zkC" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "!ls models" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "AygHlYOZ4l-z", + "outputId": "96f69119-f6c3-4ae1-902c-b2cbe0998f67" + }, + "execution_count": 298, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "'Подшипник 1 Вибрация Вертикальная vibration_vertical.cb'\n", + "'Подшипник 1 Вибрация Горизонтальная vibration_horizontal.cb'\n", + "'Подшипник 1 Вибрация Осевая vibration_axial.cb'\n", + "'Подшипник 1 Температура нагрева Температура temperature.cb'\n", + "'Подшипник 2 Вибрация Вертикальная vibration_vertical.cb'\n", + "'Подшипник 2 Вибрация Горизонтальная vibration_horizontal.cb'\n", + "'Подшипник 2 Вибрация Осевая vibration_axial.cb'\n", + "'Подшипник 2 Температура нагрева Температура temperature.cb'\n", + "'Подшипник 3 Температура нагрева Температура temperature.cb'\n", + "'Подшипник 4 Температура нагрева Температура temperature.cb'\n", + "'Подшипник 5 Температура нагрева Температура temperature.cb'\n", + "'Подшипник 6 Температура нагрева Температура temperature.cb'\n", + "'Подшипник 7 Вибрация Вертикальная vibration_vertical.cb'\n", + "'Подшипник 7 Вибрация Горизонтальная vibration_horizontal.cb'\n", + "'Подшипник 7 Вибрация Осевая vibration_axial.cb'\n", + "'Подшипник 7 Температура нагрева Температура temperature.cb'\n", + "'Подшипник 8 Вибрация Вертикальная vibration_vertical.cb'\n", + "'Подшипник 8 Вибрация Горизонтальная vibration_horizontal.cb'\n", + "'Подшипник 8 Вибрация Осевая vibration_axial.cb'\n", + "'Подшипник 8 Температура нагрева Температура temperature.cb'\n", + "'Подшипник 9 Температура нагрева Температура temperature.cb'\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "lim[col_name]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tGF5yJk-7jwu", + "outputId": "130ae066-b4f7-49db-9bf2-5eabde3f2aca" + }, + "execution_count": 299, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'alarm_max': 75.0, 'alarm_min': 0.0, 'warning_max': 65.0, 'warning_min': 0.0}" + ] + }, + "metadata": {}, + "execution_count": 299 + } + ] + }, + { + "cell_type": "code", + "source": [ + "import pickle\n", + "with open('lim_mapping.pkl', 'wb') as f:\n", + " pickle.dump(lim, f)" + ], + "metadata": { + "id": "sLWCyanS9S4e" + }, + "execution_count": 304, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "import glob\n", + "import catboost as cb\n", + "import pandas as pd\n", + "import numpy as np\n", + "import pickle\n", + "\n", + "with open('lim_mapping.pkl', 'rb') as f:\n", + " lim = pickle.load(f)\n", + "\n", + "models = glob.glob('models/*.cb')\n", + "\n", + "min_is_crashed = 1e9\n", + "min_is_warning = 1e9\n", + "for model_path in models:\n", + " model = cb.CatBoostRegressor()\n", + " model.load_model(model_path)\n", + "\n", + " col_name = model_path.split('/')[-1].split('.')[0]\n", + "\n", + " preds = df[col_name].values[-100:].tolist()\n", + " for i in range(300):\n", + " pred = model.predict(preds[-100:])\n", + " preds.append(pred)\n", + "\n", + " preds = np.array(preds[100:])\n", + " alarm_max, alarm_min, warning_max, warning_min = lim[col_name].values()\n", + " is_crashed = -1\n", + " is_warning = -1\n", + " for i in range(len(preds)):\n", + " if preds[i] > alarm_max or preds[i] < alarm_min:\n", + " is_crashed = i\n", + " break\n", + " elif preds[i] > warning_max or preds[i] < warning_min:\n", + " is_warning = i\n", + "\n", + " if is_crashed != -1:\n", + " min_is_crashed = min(min_is_crashed, (is_crashed * 5) // 60 + 1)\n", + " elif is_warning != -1:\n", + " min_is_warning = min(min_is_warning, (is_crashed * 5) // 60 + 1)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "z_QrTWJq5I08", + "outputId": "9eba7db5-f8fb-49c7-c7c2-9e131e82bfab" + }, + "execution_count": 303, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n", + "empty -1\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "lim" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "miswb59V2z0B", + "outputId": "85afe1f8-fd1d-4675-9c2c-834785cd7ce8" + }, + "execution_count": 287, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'Подшипник 1 Температура нагрева Температура temperature.cb': {'alarm_max': 75.0,\n", + " 'alarm_min': 0.0,\n", + " 'warning_max': 65.0,\n", + " 'warning_min': 0.0}}" + ] + }, + "metadata": {}, + "execution_count": 287 + } + ] + }, + { + "cell_type": "code", + "source": [ + "preds = df[col_name].values[-100:].tolist()" + ], + "metadata": { + "id": "Y9ArNzvY1vi3" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "df.columns[:50]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "uewy8gUa0Zoq", + "outputId": "736bbafb-057e-431d-a240-6757623742c2" + }, + "execution_count": 277, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Index(['Подшипник 1 Температура нагрева Температура temperature',\n", + " 'Подшипник 1 Температура нагрева Температура alarm_max',\n", + " 'Подшипник 1 Температура нагрева Температура alarm_min',\n", + " 'Подшипник 1 Температура нагрева Температура warning_max',\n", + " 'Подшипник 1 Температура нагрева Температура warning_min',\n", + " 'Подшипник 1 Вибрация Осевая vibration_axial',\n", + " 'Подшипник 1 Вибрация Осевая alarm_max',\n", + " 'Подшипник 1 Вибрация Осевая alarm_min',\n", + " 'Подшипник 1 Вибрация Осевая warning_max',\n", + " 'Подшипник 1 Вибрация Осевая warning_min',\n", + " 'Подшипник 1 Вибрация Горизонтальная vibration_horizontal',\n", + " 'Подшипник 1 Вибрация Горизонтальная alarm_max',\n", + " 'Подшипник 1 Вибрация Горизонтальная alarm_min',\n", + " 'Подшипник 1 Вибрация Горизонтальная warning_max',\n", + " 'Подшипник 1 Вибрация Горизонтальная warning_min',\n", + " 'Подшипник 1 Вибрация Вертикальная vibration_vertical',\n", + " 'Подшипник 1 Вибрация Вертикальная alarm_max',\n", + " 'Подшипник 1 Вибрация Вертикальная alarm_min',\n", + " 'Подшипник 1 Вибрация Вертикальная warning_max',\n", + " 'Подшипник 1 Вибрация Вертикальная warning_min',\n", + " 'Подшипник 2 Температура нагрева Температура temperature',\n", + " 'Подшипник 2 Температура нагрева Температура alarm_max',\n", + " 'Подшипник 2 Температура нагрева Температура alarm_min',\n", + " 'Подшипник 2 Температура нагрева Температура warning_max',\n", + " 'Подшипник 2 Температура нагрева Температура warning_min',\n", + " 'Подшипник 2 Вибрация Осевая vibration_axial',\n", + " 'Подшипник 2 Вибрация Осевая alarm_max',\n", + " 'Подшипник 2 Вибрация Осевая alarm_min',\n", + " 'Подшипник 2 Вибрация Осевая warning_max',\n", + " 'Подшипник 2 Вибрация Осевая warning_min',\n", + " 'Подшипник 2 Вибрация Горизонтальная vibration_horizontal',\n", + " 'Подшипник 2 Вибрация Горизонтальная alarm_max',\n", + " 'Подшипник 2 Вибрация Горизонтальная alarm_min',\n", + " 'Подшипник 2 Вибрация Горизонтальная warning_max',\n", + " 'Подшипник 2 Вибрация Горизонтальная warning_min',\n", + " 'Подшипник 2 Вибрация Вертикальная vibration_vertical',\n", + " 'Подшипник 2 Вибрация Вертикальная alarm_max',\n", + " 'Подшипник 2 Вибрация Вертикальная alarm_min',\n", + " 'Подшипник 2 Вибрация Вертикальная warning_max',\n", + " 'Подшипник 2 Вибрация Вертикальная warning_min',\n", + " 'Подшипник 3 Температура нагрева Температура temperature',\n", + " 'Подшипник 3 Температура нагрева Температура alarm_max',\n", + " 'Подшипник 3 Температура нагрева Температура alarm_min',\n", + " 'Подшипник 3 Температура нагрева Температура warning_max',\n", + " 'Подшипник 3 Температура нагрева Температура warning_min',\n", + " 'Подшипник 4 Температура нагрева Температура temperature',\n", + " 'Подшипник 4 Температура нагрева Температура alarm_max',\n", + " 'Подшипник 4 Температура нагрева Температура alarm_min',\n", + " 'Подшипник 4 Температура нагрева Температура warning_max',\n", + " 'Подшипник 4 Температура нагрева Температура warning_min'],\n", + " dtype='object')" + ] + }, + "metadata": {}, + "execution_count": 277 + } + ] + }, + { + "cell_type": "code", + "source": [ + " plt.plot(df.loc['2023-02-17':].index, df.loc['2023-02-17':]['Подшипник 7 Вибрация Горизонтальная vibration_horizontal'], label='Actual')\n", + "plt.xticks(rotation=90)\n", + "\n", + "plt.plot(deltas, preds[100:], color='red', label='Predicted')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 319 + }, + "id": "UwUkm3vbvMNY", + "outputId": "6e44cdb7-ee5d-45d0-c8e3-0d4cac40735f" + }, + "execution_count": 241, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "execution_count": 241 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAEdCAYAAAACUaxyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO2deZwkVZXvfyeXyLX2pffqpbpZmm7WEhBHUZBFRgFBFBkdehyePn0oz2UEHAcRn+PyFH2jziiDCsooOsgwICAgoiACdjdLY3fTdFX1Vr3V2lWV+3bfHzduZGRWZlVWVi6Rmef7+dQnMyMiM09WZf3ixO+eey4JIcAwDMPUL7ZqB8AwDMOUFxZ6hmGYOoeFnmEYps5hoWcYhqlzWOgZhmHqHBZ6hmGYOqcgoSeii4loFxH1E9FNOfZvIqIRInpZ/7nOtK+HiB4nop1EtIOIVpUufIZhGGYuaK46eiKyA3gdwAUAhgBsBvB+IcQO0zGbAPQJIa7P8fzfA/iyEOIJIvIDSAkhQvner7OzU6xatWr+n4RhGKaB2bp166gQoivXPkcBzz8TQL8QYhAAiOheAJcB2DHrs+Sx6wE4hBBPAIAQIjDXc1atWoUtW7YUEBbDMAyjIKJ9+fYVYt0sA3DA9HhI35bNlUS0jYjuI6IV+rbjABwjovuJ6CUi+r/6FQLDMAxTIUo1GPsQgFVCiJMBPAHgbn27A8CbAXwGwBsArAGwKfvJRPRhItpCRFtGRkZKFBLDMAwDFCb0BwGsMD1erm8zEEKMCSGi+sM7AZyh3x8C8LIQYlAIkQDwAIDTs99ACHGHEKJPCNHX1ZXTYmIYhmGKpBCh3wxgHRGtJiINwNUAHjQfQERLTA8vBbDT9NxWIlLqfR4K8PYZhmGY0jHnYKwQIkFE1wN4DIAdwI+EENuJ6DYAW4QQDwL4BBFdCiABYBy6PSOESBLRZwA8SUQEYCuAfy/PR2EYhmFyMWd5ZaXp6+sTXHXDMAwzP4hoqxCiL9c+nhnLMAxT57DQM2Vl674JBKOJaofBMA0NCz1TNsKxJN73g+dw93N7qx0KwzQ0LPRM2QhEE0ikBHYdma52KAzT0LDQM2UjEk8CAAZG5ux8wTBMGWGhZ8pGWAn9cBCplLWquximkWChZ8pGOCaFPhxP4vBUpMrRMEzjwkLPlA2V0QPAwDDbNwxTLVjombKhMnqAfXqGqSYs9EzZyMjoWegZpmqw0DNlQ2X0HT4N/WzdMEzVYKFnyobK6Dcsa8HASHDG/kQyhf/cciBnRc7D2w5jPBgre4wM0wiw0DNlQ9XRH7fIj5HpKOLJVMb+Pw2M4R/u24at+ycytg9PRfC/fvYi7nk+78poDMPMAxZ6pmwo66bNpwEAoolMoZ8MxwEAU/qtYrdu8+xmu4dhSgILPVM2wvEkHDaC3yWXPYiaBmcBGM3OAllNz9TALZdkMkxpYKFnykY4noTHaYfLIb9m2Rl9IJ/Q6wI/OBrgGbUMUwJY6JmyEYkn4dbscDnsAPILfXYbYzVwG4mncPBYuAKRMkx9w0LPlI1wLDujz7RuApFExq2ifziAFe0eAFx/zzClgIWeKRvheBJezQ6XUxf6eGZGH4wp6yZ9AghEEzgyFcFF6xcDANffM0wJYKFnykY4noLbOZt1IwXebN0M6hl836p2tHmdOevvGYaZHyz0TNmIzGndyLJK82CssmrWdvvQ2+Vn64ZhSgALPVNSkimB7/5uN46FYrLqxjwYm23d6Bm9Wej7hwNw2AgrO3ShZ+uGYRaMo9oBMPXFriPT+Mbjr6O72Z0ur3TmLq+czlFeeXgygkXNbjjtNvR0eDEWjMlBXc1euQ/BMHUGZ/RMSZkIyf40E7pAu2exboI5yisDkYQxwapdn1GrXpNhmOJgoWdKimpENm5YN7Y56+inTeWVwVgCfrcU+javlvGaDMMUR0FCT0QXE9EuIuonopty7N9ERCNE9LL+c13W/mYiGiKi75YqcMaaZGf0GYOxWS0QjAlTMVNGH03Cxxk9w5SUOT16IrID+B6ACwAMAdhMRA8KIXZkHfoLIcT1eV7mSwCeXlCkTE1gZPTB2KwefSyRQiyRApG0boQQICIEInEsb5WTpZTQc0bPMAujkIz+TAD9QohBIUQMwL0ALiv0DYjoDACLADxeXIhMLaFE+fCkXAw8XwsE5ct3+l2IJ4WxLxhNwueSxxsZPQs9wyyIQoR+GYADpsdD+rZsriSibUR0HxGtAAAisgH4JoDPLDhSpiZQQn9I71HjcdphtxGcdsoYjFW2zeJmN4DMTpbKumnxOEEEjIcy2xgzDDM/SjUY+xCAVUKIkwE8AeBuffvHADwihBia7clE9GEi2kJEW0ZGRkoUElMNDI9eF2ePU2bnLoc9o45eCf2iZpfxOJUSCMYSaNKF3m4jtHqcnNEzzAIppI7+IIAVpsfL9W0GQogx08M7AXxdv/9GAG8moo8B8APQiCgghLgp6/l3ALgDAPr6+rgvbQ0zHszMvlX9u8thQ8SU0QcNoZcZfSCaQCiehBAwMnpALloyzoOxDLMgChH6zQDWEdFqSIG/GsA15gOIaIkQ4rD+8FIAOwFACPE3pmM2AejLFnmmvsjOvt3OtNDnyujT1k3SEH9VXgkA7V6NM3qGWSBzWjdCiASA6wE8BingvxRCbCei24joUv2wTxDRdiJ6BcAnAGwqV8CMdRFCYDwUwzK9agYwWTdOe8ZgrGHdtKiMPm5s82dn9Cz0jNWYnARee63aURRMQS0QhBCPAHgka9stpvs3A7h5jte4C8Bd846QqRlCsSRiiRTWdvuNBUO8JusmmsO6WWxYN0mjL71Z6Nu9Gl45cKwi8TNMwZx/PrB1KyBqw2nmmbFMyVCZd2+X39iWYd2YMno1G9bw6CMJQ/zNHn27X8NEKAZRI/9QTIOwdau8jUSqG0eBsNAzJcMQ+m6fsS09GJtZdaM6V6qqm2A0YTQ5y87o40kxY11ZhrEE4+NAKjX3cVWGhZ4pGao6Zk1nOqNPe/RZ1k0sAbfThma3E4D07IN5PHoAmAhyLT1jIbxeeXvjjYDDAfzLv1Q3njlgoWdKhqqOWdLihk/P5D2zWDd+lxM2G8Gn2RGIJoysPcO68ckTAZdYMpaiqUne3nOP9OlvuAE4Zt2xJBZ6pmQo66bNp6HdLzPxDOsmqwWCX2914HM5EDQJfZOpvFJ1sOQSS8ZSnHRS+v73vy9v9+2rTiwFwELPlIyJUAx2G6HZ7UC7LtCqc2V21Y251YHf5cC0bt3YbWQ8B+DGZoxFUdbNnj3AqafK+wcO5D++yvAKU0zJGA/G0ebVQERo82nwOO0gIgC6R581YUp58X63ntFHEvBp6ecAJo+erRvGSkSjwNlnA6tWAXZ99bPDh2d9SjXhjL4OuPXB7fj1tkPVDgPjwajhqbd7tYzl/5R185eDk7joW0/j5QPHDKH3aQ4EIgkEokk06YOziiaXA047YYwzesZKxGKAS1aMoaND3o6N5T++yrDQ1wG/enEIT+w4Wu0wcGA8bMyK/cAbV+LGi4839inrZvPecew6Oo3zT+jGB964EoAcvD14LIxANG60KFYQEZa2enBgPFS5D8IwcxGLAZq82oTXC3g8wOhodWOaBbZuahwhBILRRNU97FRKYHA0gHN6ZXZzek8bTu9pM/arqpvxYAxEwHevOR12m7Roerv9uP+lg1jU7M4orVT0dvkxMBKszAdhmEKIRtOZPCDvc0bPlItwPImUqL6HffBYGJF4Cr3d/pz7XU47hACGp6Jo82qGyANAb5ecYLXz8FRGaaV5/+BIAMkUz45lLII5oweA1auBP/7Rsi0RWOhrHNUfptoTigZGAgCAtfmEXq+kOTQZRps304dXz4kmUjkz+rXdfkQTKWMxE4apOtFoptBfcQXQ3w8MD1cvpllgoa9xVO15ta0bZa2Y+9yYUUJ/ZDJilEwqetp9Roafz7oBgH79ZMIwVSUWkzXzy5ent514orzdtas6Mc0BC32No3rGhONJhGPJOY4uHwMjAbR5nTNEXKHWjT0yGTEmQSk0hw0r22Vdcm7rRgr9wDALPWMBnntOiv1ZZ6W3LVokby3q07PQ1zjT0bRlU802Af3DgbzZPCDr6AFgOprIeTJYoz/XPCtW0ebT0O7TDHuIYarKM8/I24svTm9TpZbRaOXjKQAW+hpHZfRAddsEDI4E8vrzADJmu7blEHr13FwZPSAHZAeGufKGsQDBIOB0An7T91359TFrzvdgoa9xAuaMvkpCfywUw2ggNntG70jXx7d7Zwq9qrzJJ/Rru/2c0TPWIBRKt0BQsNAzxfDZ+17B8Z9/FKfd9jgGZxG4gDmjr6B18/KBY7joW09jKhJPD8Sa+tBnk6t/jRmV0TfnsG4A6dOPBWM4xq0QmGqTS+jZumGK4XevDaOryYWJUBy7jkznPS5oWpCjkhn9S/snsOvoNLYfnDIGSWf36E0ZfQ6hP2V5K7787g14+4mLcj5fPWcyzH3pmSoTDnNGzywcZYVcfNJiALMPsgYiCdgIsFFlPXr1Xv0jAQyMBKA5bFje5s17/Fwevc1G+JuzVua1blRf+3C8epVFDANAZvQeT+Y2zuiZ+aKskL5VsoXAeGAWodfb/bZ6tYpW3aj3GhiWQr+m05cx2zUbt9Nk3eTw6OfCrTdIq2YJKcMAqEmPnnvdWBBlhZy4pBlNLsfsGX00gSaXAx7NXtHZseq9BkYCODAewklLW2Y93jwY2+ZzznJkbjijZyxDLuvGbpc/FhV6zugtyMBIAJpdWiFtPm1WSyaoZ/TtPg1jwcpdNqr32nl4GvvHQ3l73CiUdeO0U87Zr3OhhD7CQs9Um0BgptADMqtn64YplIGRAFbrVkibT8N4KH+mrqybNq9WlYx+NBBFSqTLI/OhMnq1MMl88RjWTWqOIxmmzBw+DCxePHO7pnFGzxTOwEjQKFVs9zpnzegD0QSa3DKjr7RH32pqTjZbxQ2Qnhmbr0XCXLB1w1iCeFwK/bJlM/e5XJzRM4URTSSxbyyItbpwtvtcs5ZNBqMJ+DQp9BPBGEQF2qQKITARjKFvZbuxbc0cGb1mX5jQu5XQxxJzHMk0JMkkcN99UojLyb33ytvjjpu5r9YzeiK6mIh2EVE/Ed2UY/8mIhohopf1n+v07acS0XNEtJ2IthHR+0r9ASpNIUIaT8oFNtRPKkcfdSFExmup+/vGQtIK6VZC7zSEPhxLYjwYQyxhWns1koBfz+gTKYED42GMB2NGV8tSEYnL947Ek5iOJpBICZzW0wobActaPfBqs/vuNhtBs9tyllYWglfjjJ7Jw9GjwCWXAFddBXzrW+V9r3vvlV0rr7565j4LZ/RzjooRkR3A9wBcAGAIwGYielAIsSPr0F8IIa7P2hYC8LdCiN1EtBTAViJ6TAhxrBTBV5p9Y0Fc/O1ncP/HzsGJS5rzHnfV95/DywfSH/E9ZyzHN646JeOYO5/Zg1+9OITf/O+34OFth/GFB7fjmc++bcbkozafhnA8iUPHwjj/m39AOJ7Emi4ffvfptwJIL7Ld6Zd1vG/5v08BAOw2wiOfeDOOX9y04M8dTSRxzld/h/FgDB0+Db/4yNkAgMXNbqzu9KGnPX/9vBm/24HuJldRMaQz+trw6D9w5ws4racVn77w+LkPZhbGHXcAjz8u7994I/Cd7wAvv5y5AlQpmJwEfvtb4PrrAUcO6azxjP5MAP1CiEEhRAzAvQAuK+TFhRCvCyF26/cPARgG0FVssNXmpf3HEI4nMTjHsnZ7RoM4a3U7vnjpSVjT5cPe0ZnHPz84ht3DAQgh0D8cwGggigF98hGQtkJUzfmz/aMIx5M4ZXkLBkeChk0TjCXhc9lx0UmL8dUrNuKLl56Ej7xlDZIpUbKFOvaMBjEejOGU5S0YC8bw0n55Emv3afjO+0/HrZeeVNDr/PDaPnz0rb1FxWC3ETSHrWYy+v7hAPfmqQThMHDLLQARcP/9ctvQEPDVr5b+vZ56Sgr55Zfn3l/jQr8MwAHT4yF9WzZX6vbMfUS0InsnEZ0JQAMwkGPfh4loCxFtGRkZKTD0yqP+cc2NxLIRQiAQTaBvVRuuPWcV1nb5c9ooA/rSeJF4yni9gZEA+ocDGVaIsjq27J0AAFxzVo9xbCSeQjIl4Hc54dHsuPrMHlx7zipccbpcEKFUoqi6Rqr3VrG0+TSsX9qMlR2z+/OK03ra0N3kLjoOj9NeM+WV0UR11wdoGL79bXkrBPDudwPPPisff+MbwKOPlva9DugyeMIJufdb2Lop1WDsQwBWCSFOBvAEgLvNO4loCYCfAvg7IcSMa28hxB1CiD4hRF9Xl3UT/rTQ5/8Hjiak+Kqp/H6XY4bQRxNJ7B8P6a+VMF5vYCSIgZFgxsCmGrzcvHccTS4Hzl7TYcSiXtfvsptfPl2hUiKhUZ/7fL0Pzea94zK2Ima4LgSP014z4hmJp2rm6qOm+dWv5O2PfyxvzzkHmJoCliwB7rpLbvvpT4G9exf+XiMjgM0GtLfn3l/jGf1BAOYMfbm+zUAIMSaEUKeyOwGcofYRUTOAhwH8oxDi+YWFW11UZqvWac3FdESJry707plCrwZcASX0Cf315eW+uVRRrcY0OBrEmm4/lrd5oTlsGBgJpoU+q+OjW5N/1lIJjbrK6PS7sKTFjUHdiipmhutC8Gj2mhBPIYTM6OO1MZ5QMZ54Yv5VMUIA03ma+h06BGzdCvzzPwObNqW3NzUBZ58N/PKX0tL5278F3vKWosM2GB6Wvr/dnnt/jWf0mwGsI6LVRKQBuBrAg+YD9IxdcSmAnfp2DcB/AfiJEOK+0oRcHZIpgT26wAVnKfELRjOF3udyIBhNZFTY9JuWxAtGE8ZznhscQyiWzJhl2mGqUuntkpOo1nT6MDAcMJ7ny6p4UbZPqWyOAdOiIuokpNltRc1wXQhuZ20IfSIlkBJApEauPirCs88CF14os97Dhwt7TjIJbNwINDdLf1whhFybVdWyv+tdM597xhmZjw8cAP7yl5nHHTggq2hefTV/HENDwJVXAj/4Qe76eUUtZ/RCiASA6wE8BingvxRCbCei24joUv2wT+gllK8A+ASATfr29wJ4C4BNptLLU0v+KSrAgfEQYkmZoc1Wuqj2ma2beFIgaiqJNK99GogmjCsEVUa51pTRN3ucUL3CDLHt9qM/w7rJyuj1dgOhEghNKiUwOBI0BF7F0OZzFjXDdSF4nLaa8OjV37oWTkoVY/v29P2Pfayw59x1V/p5550HfOUrQCIBfPe7aZ/83e8GNmyY+dxPflJm+w8/DPzjP8ptGzfK2927ZQyHDgG//jVw8CBw8smyDj8XX/pSeqD3G9/IH6/LZVmhLyglE0I8AuCRrG23mO7fDODmHM+7B8A9C4zREpgrKGazbpT4NpmEHpCZuyoRzH6t7BOHeQEPu41kZ8pgegWn3i4/Hn31sHFiyLZuHHYbNHtpKlQOT0UQjieNmFSrg+wFviuBR6sNjz4aTy/Yzui89FL6/gMPyAW23/hG+fjpp4F166SvrkilgC9/OfM1Pvc54Mkn02J65ZX5xdnrBU4/Xd5vbk6/1tQU8PGPA489Bvzbv8n6e8VVVwF33gn8/d9nvtbkpLx95hngr/4q/2fkXje1jxLn5W2ejMU+sglmZfTq1izm/SMBrGiX/ayDMSn06nGT24Euf2ateZveaiAt9D6kBPCXg5MZ72HG7bSVRBT7s+r6e40Zu1UQ+hqxboyMvgZOShUj2xpRNsrOncC55wKf+lTm/mPHgD175H3z4OeTT0rB/dCHgJ/9rLD3NtfTf+IT6Zp7AHhEz19Vpn7ddfIK4Omn01U2hw8Db3rT7CIP1LZ102hMhuKIJ9M2i6xzn8aL+46h069hWasH09G01ZI96zV7gNSfJfSplMDAcBCnLG8FIAdvg9EETtYf93b5Z1gi7T4NDhthZYfXOAYAXtgjq1+acgi9Ryu+FDEcSxonLGUzmW0jIPfiIeWmVjx6s3Uz20zqeDKFyVka1tUc27ZJsRuYUUEtBzLfZ5oYryYcKcHPPhFMyBJe3HUXMDYGHDmSuf+qq9I94OeirS19/+67pcf/wgvA//k/QEsLcOutwKc/LW0eQA7unnsusH69HFt4+uncLQ+yqfHB2IZBCIHzb/8D7v7TXmPbs/1jePvtT+M324/g+MVN8OuDq8dCMbzxK0/i8R2ZX8Bs3zxt3UiBGglEEY4ncfLyFn17AtPRBJa3ebC0xY31S2fOuF3W6sG6RU1w6v1i1nT5oNlt2LpvAk47ock9s/plIdnv5x/4Cz7y060AgL1jQTS5HcagcHeTyzjhVRqP014TA5zRhIwxmRKIJ/ML/b8/M4iLvv10pcIqP7/6layqufNOWWFz3XXpfePjMjNv0mdqf+hDwC9+Abz3vfJxdvnjMX1muRLpRYvka15xBfAP/wBccEHhcS1eLK8EvvOd9La+Ppm5HzsGfOELctsll0hL6Z//Wf4EAjKL1zR5MpgLC1s3vPCIiWgihdFAFEMT6RmlR6YiAICvXrERbz2+G195dCeCIwkcnowgmkjh0LFIxmso/95nKq8E0pOsRgPyi9DT7pPL/4XiiCVS8GsO/OIjb0SzZ6Zo3/KukwzxAGRVzf0fOweHJyNY0uI2WviacS+g5nzPaMDw/6fC8YzWwkSE+z/6JrRWuLQSqJ3yyqiprDIcT0Jz5M6n9owEcWQqgnAsmfNvWHOsWiVvX301PTP1Bz+QJY4TE9JCGRgAurvlPnO/mGBQti/42teAzZtlRg1kZuNvf7v8KYbzzgM6O+X9226T9fC5OPts+ROLAd/8piztvO02oKdn7vdoa5MnjlQq/+tXCRZ6EyobN3vw6v6FJy1Gu0+DT58ApVoHZwtPMJoAEeDVB17VZCY1KUoJaIdfg09zYFg/kfhcDqzI0zMmlx++YVkLNizLv6rTQkRxIhQ34g1EkzPGAHo6CuttU2o8mr0klUTlxlxhFYkn0ZLj5A0AE3pb6fFQDMu0yl8hlRzlT5vLGCMRmeWmUjKj7+qSmXmujPzrX5cniLPOkvYKIK2VUnHyybJUcrYSSYWmAYODgNM5c33YfHR1yZLQY8fyT6qqEtY67VQZlY2bB07T5ZJSsJt0oVe937N98EA0CZ/mgE2vifS7nBmvrYS+zavB73YYVwzZlTMLZSHtAmT3S3kFEojGc44BVAOP045oIpWzG6iVMF99zXZVpb4LlVzUvayE9Svh0dH0tlAobY0sl605ZmTlL70EfOAD8v7tt6dFHkiXRJaKQkRe0dxcuMgD6SuV4eH5xVQBWOhNKFHPFnrNbjNWSPK5HIjEUxiekhZMdoYZiMYz6trVCUJdGah/anV1YAh9icW0WI8+kUxhMhxHJJ5CIplCMJo0PkO1MZYTTFg7q8+2bvIxoQ/EzrbegGW46CLgJr1DeSgEfPSj6QFThRL6oKmJ3wUXyLp3IG3tAGnRB2Qd/Cc/Ke9/5jPytqsL+PnPpe1TKyihzx44tgAs9CZyCn0kkSF0ysY4MCF71cy0bjKFUc1aNSp1QnEQAS0eJ/wuB45Olkfo3UXWnB8Lp6tAgtGksVShFUgvJ2hxoU8UJvRGRl/BlcGK5vHHpX8OyEqY739fZsdJ0+eLRGY+75VX0vfXr0/ff+YZObt1aEhW4JxySrq1wGmnyR7zuXq+W5k1a+Tt4GB148gBC72JYB6P3myrKBvjwLjMXrKrQKb1/vAKm43g0+wZGX2rxwm7TS6SHdSfX2oxldbN/HutmLPLgF7j31RiW6lY3DWynKDZuslXJaSunIAayOgTpnkjQqT71YTDsmGYIjxLW2y/H/CZupyuWiVLFpWVYrdLj//gQeDFF2srk1f09MiTVn9/tSOZAQu9CSOjN818ndaX6lMYGf14vow+McNv97kcaY8+FDNq0M0nhFKLabHWjVl0VB+e7F461cKwbiwv9HNn9BOm+nnLC71ZwLMbjJn9+HBYVp4Eg+m2A4pClri02YClS4uPs9o4HPIExkJvbXJZN8GsjFbZMvmtm5nC6Hc7EIilM3pVk+5zzTyBlApvkdaNeWBwKhxHKJYs+UBxsXhqZJWpqOk7kV/o079nywt9KJS+bxZ2ILOHTTgMuN2y/cCb31yZ2KzG2rW5J4xVGRZ6E0GT0KsZjdketRJ9NQibLabTkZkZvZpkBch/atUnxtxH3l/irFnNIp3vYuHjJgE6qg84V7pLZT48NbJubEZGn+dkaxZ3y3v05oz+0CFZKqlQPd8B2RNGlUOq/jCNxtq1MqOf5/9duWGhN6HslZSA4W9nC3125p1tIwRjiRnC6DdbN8GYURfvz3GlUCqUKJpFpxDMGf0RU42/FagVj948NpLPZlK/5yaXo7Yy+j17MqtqgPTjkRFZLQNkDrwC6aqaemftWtk4LfvKp8pY4z/YIphXjgpEE/Dog6jmOvJsETeLjhBCr9KZ6dGPB0MQQmDC5NGr49xOGxz20p5zlc0RiiUNgSyE8WDaOx4uU+lnsZR65axykVFHn0fo1ZXTmm4/JoIW73djzuj7+2dO8x8clPXuo6PpnjAbNsjnpVJy0lGuxbTrEVU2evhw+qRnATijN2FeC9Y8MOsrUOijiRQSKTHjGDXJKhBNIJ4UxhJ86VbGpW8n4Cky+x0PRg17qlw1/sWirlJqYTB2rvEEldH3dvky7DJLYs7oH3ssPSCr1mS9Re9YPjqabjMApP16p7M2q2iKQU2wmq0CqQpY4z/YIgRNGX0wmkAqJRCMJbMmQKXva3Zbxj9y9upS5ucEowkjc8vO6LPXfC0F7iJrzsdDcaxo82LH4SkcmSzPrN1iKfbkVWmiiSS8mh1JIfJn9EE5sW5xsxsTwRiEEBVfyKVglND39cmuj4cOAStWpCdAPfCAvJ2YsNzU/4pjUaHnjN7EtKnaZjqSMJYMNAu3026DS29StbTVnZFd5lvxSfXHUZlbu94QzLyubKkpthRxIhhDd7MLmsOGo8qjt1h5peWtm3gKLodt1jYU0sJzot2nIZESGd89y6FES7UuOHBA/qiZoICcLBWLybYBjQwLvfUJRhNodqdXhFIZfq4qGmCbAkcAACAASURBVABY2urJqGzJXkZQ0eSWywkemZR//HTVjb44SRmEtHjrJoZ2r4YmU3sGq0yYqqWqG5fTLucy5Dkpjem/ZzUwPx6wsH2jMnqzLQPI7N1ul9bM1JTcVsomZLWIEnqz3WUBWOhNBKMJLG5xA9DXctU9+2zhVsK/tNWT0XNcVdbMyOh1gdqvT7Jqn2HdlEHoNfmnnW/2OxGKGX14VPWIVapunHaC3UbWz+gTSZnRz9JBdCIoB+WVjWdpn16JljmDV3zkIzKL//735WMWennLGb11mY4ksKjZLPR6Rp/loasMfKm++Ib6ZzasnuwrAH1hENU2Ibu8shzWTTGliJF4EqFYEm0+LWdjtmpDRDWxnGA0Ia0btzN/W2V15aQG5i3dwVKJVq4qEq9XrgClOlSydSNvWeitSzCWJfRGhp5ZFeN3OWC3Ebqb5NquyofNd2Lwm2bTOu00Y/WpcmTMxXj046bOmio2c+dOK1ALywlKj94Oj9M2h0dvsm6sLPS5rJuf/ETejoxkHssZvby1mNBb45q8BIRjSdy7eb/x2EaEd2xYjO5mN14dmkSbz4nlbV70D08DIKzt9mPvaBBP7RqGw27DZacuRSCSQFeTC0TSxsnuRa/wux1o82rG9lAsiadeG8YTO47K/TNODPLxzsNTGas1KTEtR793c6fHJ3cexZvWduasp4/Ek3i2fxTnn7goo1e++mxWyeYVHs2G7Qcn8cstB3Dl6ctht1mvUiWakIu1OAXNOCntHQ3iydeGEYol0W6yboqZHfv84BiOW9RU/oXacwn9eefJ2127Mo9tdKH36ovysNCXh1AsgS8+tCNj276xEG5513pc95PNePO6LnzjqlNwy39vhxDAzz98Nr75xOt46JVDAIDpSByJlECT2wG/JqtkVLlkU5ZwH7+4CSkhjKx5OhLHdT/ZgmRKoNXrRKs38/gV7R447YSjU1G8eV36n8Wr2bGyw4t1i5pK/vtQsb16cBL/8cJ+fOWKjXj/mTOXQ3vgpYO46f5X8fgn34LhaTn42tWkGXaTVUorFas6fHhm9yheuW8bVrR58cbejmqHNINoIoV2n7xYzp4MZf7Orev2w6fZ4bRTRpOzQgjFEvibO1/A9W9bi09eUMDC1QtB9bDpMP2u/XKReFx5JfD88+ntbN3IyWEWawFhrf/iBdDm1fDyLenlya759xewe3gak6E4jk5FM/rYqPuj01Gc1tOKvaNBvLRfLkbsdzmMbpP5MvobLz4BAPD7XXIlmcOTESRTAje/4wRce86qGZnzyg4fXvnChXJtWFP2TkT4wz+8rZS/BgMVw7Yh+YV7/eh0zuNePxow9h/W179d0+k37CarlFYqfrzpDdgzGsQF33oa/cPTlhV6l8MOopnWmfrO/eRDZxqLuqt5FvNhcCSIZEoYrY7LytSUFPYmU0KiBP1Tn5KLdSsaPaMnkidEboFQHmw2Qqs3fQl73CI/Nu+dwMCoFDLV8yUaTxnZ00Qohp52Lxw2wrYhKfQ+zQG/24FgLJG3XFKhsuZDx+Rl2rI2T952A17NAW+Zr7DNuBw22AjYdUQK/MBIMOdxAyPy9zMwHMThyTA6dDtBCbxVZsUqHHYb1uqZcL7PVG1U1Y3DPtO6GQ/GsLLDa4g8kNkLqVDU3216ns8risOH0+2D/+u/ZMaqJndlL4Ld6Bk9IC2usbFqR5FBQYOxRHQxEe0ion4iuinH/k1ENEJEL+s/15n2XUtEu/Wfa0sZ/Gz0dvlx8FgYfzkoM1rVfySaSOJYKIZkSshaZp+G3i5/ulOjW2b003pG77STMUEqG+WDK6Fvr6SSz4GqUIkl5QluYDiQ8zhD6EcCGBgJoLdLXpKXsyJooRARerv96M/zmapNNJ6Cy2nLWSE0HorN8NT9+oS6+aBOcvO9Epg3qRSwezewZIl8fPnlwDvfmXnMpk3p+87St/OoOTo6Zg5SV5k5hZ6I7AC+B+AdANYDeD8Rrc9x6C+EEKfqP3fqz20H8AUAZwE4E8AXiKitZNHPQm+3FCw1QKrW8YwmUkgJYDIcN2qZ1+rHAvKfrkm/lA7qnSvzTU1PZ/TS8mgr96DYPFEnIgA4eCyMUCxTFMKxJA7qJykp9EH0dstVgMpZEVQK1nb5jZOU1VDWTfZyjkII4ztnpiih109ywViZhf6f/gnYuXP2Bl0//rFc+u+558obS62wcqXllhMsJKM/E0C/EGJQCBEDcC+Aywp8/YsAPCGEGBdCTAB4AsDFxYU6P5R4PzcgL6EM60a/3T8eQiIl0KFn9Arp0duN8srZrAtl0yix7LCY0Kv4luiTwAazrI7B0QCEkPt3HZnGeDCWzujLWBFUCnq7/Tg8GZm3QFYCY8KU0y4Ti5ScUDcdTRjfOTPFePQVs27uuUfeqiX/8tHdDZx9dnljqRU2bpRLIh47Vu1IDAoR+mUADpgeD+nbsrmSiLYR0X1EtGI+zyWiDxPRFiLaMlKiS56VHV7YCEjo/2SGdaNfSquMqM2bKfQ+lwN+l9NYGHs2oVcZsxL6VgtZN0D6iuPC9YsAYEYGrC7/L1y/yPg9qSshn8Uz+t4ueeUxaLGsXghhTJgy5jLo370JU/mqGb97fhl9MiUwOFoh6+bKK+Vt9tKATH7U1c/ERHXjMFGqCVMPAVglhDgZMmu/ez5PFkLcIYToE0L0dZWoh7PLYUdPu9d4rKbzR/SMvl8XiHafhmVtHsOH97sc8LvsmI7EZyw6ko36Rx6ZjqLJ5YCWx8uvFupEdN6Ji2CjmQOyA8MBEAHnn7jI2LY2K6O3qtCrKzar2TexZApCQPa6yeogap6QZkaV8xbKwYkwYokUnHaqzBVNdsUNMzsWnDRViDIdBLDC9Hi5vs1ACDEmhFCrEdwJ4IxCn1tOVKYuL6GTSCRTSOqZq5HR+zTYbYTVnbo37VZVN0m50HcBQq9ex2oo62b9kmasaPfOGJAdGAlgRZsX65fKSgmXw2a0dVCDsFa1bnrafbDbCAPD1qq8UdagaoEApNtQqElR2d8Vad0UPtu3f0RWUp2wuLn8Qp9INM6iIaWiRoV+M4B1RLSaiDQAVwN40HwAES0xPbwUwE79/mMALiSiNn0Q9kJ9W0VQNsQJS5oQTaQyltVTmaCqlFHHep12+FwOJFMCe0aDswq9zZauyLGi0HucdjS7Hej0axmDl0MTIXzl0Z34855x9Hb50OHT0OJxYnWnz5hpqsorrZrRaw4bVrZ78ZvtR/Dlh3fgyw/vwMPbDpf8fX7zF/n633lyN+LJ9Pdnx6Ep/O61oxnH/nrbIezW5yVkWDe60I/pHSqzq7OUdZNKCTy1axivHZmaNSZ1cjt5eQuCpvWNy0IiwZU088WCQj/nf7EQIkFE10MKtB3Aj4QQ24noNgBbhBAPAvgEEV0KIAFgHMAm/bnjRPQlyJMFANwmhBgvw+fIyVuP68KfBkaxYWkLXjs8nSH0+8bktO42vTf8BScuwnQkAZuNsGFpC5rdDiRSAqf1tM76Hh5NDri1e633z3Dm6nYsbfUY5YjP9I8imRL42Qv78YM/DMKn2fG2E7pBRLhk4xKjdw8gZ/OeuKQZJy+37gSYt69fhHue34f/eGE/YokUPNoBXLJxcUkX8Pj8A69iLBiDEMC5x3fh5OXy+3D7E6/jxf0TePGf5CS9ZErghntfxrnHSevR5bAbM6RHAzGs7TZn9NktMvRWGvEkbvrVNpy1ugP/8v7T8sY0NBFCk9uB5W1epIS8YvCWa2JbPM4Z/XypRaEHACHEIwAeydp2i+n+zQBuzvPcHwH40QJiLJpz1nbi1x9/M77x2C5EE8mMWYqJlMhoMHb5actw+WlynPgtx3Vh260XFfQeHqcdxxC3ZEb/v9621rjf2+VDLJHCwYkw+ocDWNvtx28/da6x/ytXbMx4bpPbiUdveHPFYi2Gz11yIj53yYkAgLue3YNbH9qBkUAU3U3ukrz+sVAMo4EYzj2uC394fSRj0e/BkQDGgzFjsffJcBzJlMCOQzIbdzltWNOVHkc4e00HxoPxjO+cQvVCmo7EMRaIzdngbDwUR6ffZdhrgWiifELPGf38saDQW2v0sEy4HDakBGbUkZsbjBWLujy30mSpXJgHLwdGAsaga72wtlsOFpZyEpWyuk7SxzBU5VYskcI+fW0BdYwSZ7VYi8thw5JmNzxOu2G1TARjOb9zqsXGkckIEikxp9DL13EaVwLznVU7Lzijnz8s9NXB5ZQfczKc+Q9Riq5/asCt3W9toV/TKYV955Ep7BsLGROj6gX1eUrZFkEJtBqsVpPu9o0FZwzqZ3efdDnssNkIa7p86ZNBjlmxQHoFL7UwzVydLNWMbjWOMp+B3HnDg7Hzh4W+Oqh+6lMR2eNGVZKUQuhVCZ3VM/o2n4YOn4anXhtGIiUy5g7UA4ub3bL/TYkzes1hM35XaozHXNKZndEr1CD9WlOrholgbqFXgj00ETZea7YBVnVloKyb6WgZG5uxdTN/WOirg/qnm9I7/anlAkvhqyvrxooefTa93X5s2ScncdSb0KsB51LW1fcPB7Cm0wevllk9o4R7ZYc3Q8TNqKtI1XMpHEtiPDSz/QGQrmw6oGf00UQq7+IqQgjjykB5/WXN6Nm6mT8s9NVB/dNN6V6mEvpSZOGGdVMLQt/lh0oU13TVl3UDyM9X6oy+t8tvXBGmM/oglra4sWFZi2EVqTVfVXmqeo46oQ6OBmRGn+M7l23dAPlXnArFkoglUhnLPQY4o7cWFlx8pDGEXlk3eka/pJQZvZ7tZU9rtyKqbcDiZndGm9x6obfLh0OTkZK0BYgmktg/HkJvl8+4IlSDsQMjAfR2+7G2y48DEyFE4kmMB2LwOO3GxDv1HDV28PrRaRwL567OMjL6ibmF3phd6zULPWf0lsLpBOz29MpcFqAhhN5tZPTKupGXVqWofffor10LGb2qvKm3gViFyp73jC58QHbvaAgpIe0udUUYTaQghMDAsMz0e7vlFdKe0aBhp6iTqbrSW9Xhg42ArfsmIETu75wSbNUFFcgv9Gqgtt2X9ujL2u+GB2OLw+OxVEbfEH/BdEYv/yFKmtE75UpCLR7rZ8hKCOvNn1eYS0g3LGvBj/64B2eubseGZfOb9PWdJ3fjmX65QlBvlx+aXRf6eApHpiIIxpLo7fYboj4wEjAGWuXv9qiR0buddqxo9+LRV48AyP2dczlscNjIaCwH5K+8Mdb19WnwOO2wkSyv/NEf92Dr/gm0eJz4wrvWl25B93icrZtiYKGvPMZgrJ7Rn97ThnOP68IbVrUv+LXfenw34ilhyUWqs1nW6sE7T16Cd2xYMvfBNUhPhxd2G6F/OIBwLInbfr0Dm85ZNS+hD0YT+OYTr6PTr+GNazqwbpEfDrsU4mgiaSxQs7TFjTWdfhDJMszxkLRl3rFhCQZGAhlXeO85fTkeePkglrS6cdqKmcsxEBF8Lgcmw3EsaXHj8GQE48Hcvrs5oyci+DQHpiNx/PCPe5DSO2dec2bPvE9ueUkk0oOLTOGw0FeebI++q8mFuz90Zkle+20ndONtJ3SX5LXKjc1G+O41p1c7jLKhOpYOjAQwqC8hOd+mX8r2+dJlG/COjekTosthk9UweidKjya7Uy5r9RgZ/eoOLzYub8EPPtiX8ZofP38dPn7+ulnf168L/coOL4anozOqeBTqBKAGdf1uB3YPBxCOJ/HXJy/Bw9sOl7bRGQ/GFofFhL4hPPrsqpt8SwMytY+svAka1TDFrsXa251pb7n0DqiqxFKV1fZ2yTr5XCtHzQfl03f4XWjzOo0qnmwmgjHYbWRU6vhcDryqLwB/it6XqKQzZWMxFvpiMAv9xIS0wKpIQyieEvZpPaNnoa9fert92DMaxO6jspXvfJfa6x8OwG4jrOzwZmx3OWyIxtP17araqrfLj/6RAKajiQWV66qB1XavhjavljejH9PbH9h0q9DvcmBaz+BP0RuulXR5wUBA9qNn5kdTEzA1BTkC3w588INVDachFM88M9ZuIzjsDfGxG5LeLj9iyRR+v0uuVDb/RbcD6Gn3zhjMdOvLAhrWjcrou2WzOGBhg/uqxLLNp6HNp+WvutFnxSrUlUCLx4lVemlnSa2bqSmgubl0r9coLFsGDA2ls/pf/AJ44IGqhdMQiqcy+MlwnLP5OkdVFL16UNoZ87ZuhoNGNY0Z6dEn0xm9LvTm5nALKbE12nJ4nWj3avmrbrJm1yqh7+3ypevqS2ndTE3x6lLF0NMDHDiQuZzgu99dtXVkG0L1lEcfTwoW+jonuyvnfGrME8kU9owGc5afqsFY5dG7lXVj8vIXMmlOdbBs97vmzOjNFpHPEHo/vJos9S1ZXX00Kj16zujnz+LF8ne3b1/m9qNHcx9fZhpC9TSTVVOy+mLGkrR4nej0ywVUfJrd8K8LYWgijFgyNWMgFpDfm2h8pnWjVucCgI4FdDD1udIefYdPw0QojlRqZmOziVAso1OqalXc2+1Pl1uWSuin5TgHC30RtOlltHv3Zm4fG6t4KECDCL2qgwbS2T1TvyjrZeM8l9ozKm5yZfTOtHXjtBOcevJARMb7LSSjbzI8eifafBqSKYHpLAsmlRKYCMUzMno1iNtrWtS9ZBn9d78rb7u6SvN6jUS7Pkfnnnvk7YUXytsnnwQefRT4+c8rGk7DqJ6ybNi6qX/UDNlTVrQiJZCxMtRspIU+t0cf0atu3M7Mq0L1fq0LaKnhM7XObteXGhwLRo39//3yQbz73/6EZEpkePTqeSoGn8teum6WSqQuKmy1NcaEyugffRTo7EyfNG+5BbjkEuCaayoaTkNMmAJkHXQwlmTrpgG4qm8FWjxOLGmVMzqno3GjHHI2Rqaj8DjtaM2Rmbsc6Tp6T5bQv+8NPVjS4jGy/GJ4+/pFGJmOYlGTG0360oJmwX5422EMDAdw/gndxrq0AHDh+kUYD8Swsl2Wg/rdztJZN01NwLvelRYtpnDMv7N3vhPo7Z15jBBACdc3no2GSW/TvUca5iM3LKeuaMVnLz7BsEMKzXAD0YRhhWRjnhmbfdI4Y2UbPnnBcQuKubfLj8+/cz1sNjJe39yTPhBN4MQlTfjhpjcY2Tsgl1BUzwOkZ18y64Zr6IvHXKnU0wPYbHLSlNmyCZSupfZcNIzqpa0bzugbBd88yw0D0eSMhbsV0qOX1k12Rl9qlDVkFvpgNGF8ntnwaY7SlVey0BeP+fe2eLG8dTiAq68GbrhBPh4drVg4DST0dv22YT5yw6NKFgudQBSIxPMLvcOOaDyJcDw1w6MvNWpFK1XhAwDTBQq93+0o3YSpYBDw1WdL67JjFvrspnDnnSdvK1iB0zCqp6ptuOqmcVBed6HCF4wmjZNDNkYdfaz8Gb3HyOjTcQejCcOKmg2/y1GaFghCcEa/EDTTOM8VV2Tu6+iQtyz0pcdtZPRs3TQKSrQL9awD0cQsGb0U+lA8UdDA7kIwPPpYulooECkwo3dJ66bQktK8hMNS7Fnoi8M8yJo9D6GzU96y0JceI6Nn66ZhSC+1VwKhd6YXr6m0R59KCQRj+ccPzPhcDiRSwljftmiC+ipdbN2UHqtm9ER0MRHtIqJ+IrppluOuJCJBRH36YycR3U1ErxLRTiK6uVSBzxeuo288VAVN4dZN/qxZfW+OhWJl9+jViUS1Wwjpt4UI/XxPbnlRFSGc0S+Ms8+eua2tTVo7AwMVC2PObw4R2QF8D8AFAIYAbCaiB4UQO7KOawJwA4AXTJuvAuASQmwkIi+AHUT0cyHE3lJ9gEIxBmPL/E/KWAe11F6h1s30HOWVgFzTwKOVN1lw2gl2GxmDsaqKplDrBpCfWbWCKAol9JzRF088nrtO3m4H3vY24Le/rVgohXxjzwTQL4QYFELEANwL4LIcx30JwNcAREzbBAAfETkAeADEAEwtLOTi4Iy+8VBL9GW3EshFPJlCLJGCX8tfdaMot3VDRPA47YZ1o7LzfCchM75SZfTKuuGMvngcDinquejrA157TTaOqwCFqN4yAAdMj4f0bQZEdDqAFUKIh7Oeex+AIIDDAPYD+IYQYjz7DYjow0S0hYi2jIyMzCf+gmGPvjEptPdLcA4xNVdrlVvoAenTzxD6PBVBZtTKUwuupWfrprysWwckk7KVcQVYsOoRkQ3A7QA+nWP3mQCSAJYCWA3g00S0JvsgIcQdQog+IURfV5kaKLm46qYh8RVYbjg9hz1iThA8ebL+UuLRbIjo1o1xEnLN3UtHxb/gEksejC0vqulZhfrTF/KNPQhghenxcn2bognABgC/J+lHLQbwIBFdCuAaAL8RQsQBDBPRswD6AAyWIPZ5YVg3XEffUPgLtG6UMOarVc+0bsr/HTJbN+mT0NxJSnowdoGNzdijLy+tctnHjIVJykgh39jNANYR0Woi0gBcDeBBtVMIMSmE6BRCrBJCrALwPIBLhRBbIO2a8wCAiHwAzgbwWok/Q0GwR9+YFGrdzDXgmZnRl/+q0Cz0Kv6mAjL6kq0ypbzj7FmdTGlQQv/Rj1bk7eZUPSFEAsD1AB4DsBPAL4UQ24noNj1rn43vAfAT0XbIE8aPhRDbFhp0MahqG7ZuGgu/q7CWAOqYvEJv8uXLXV6p3sOouokWntHPd5JYXmL6Clda8T32mVloaZG3AwPAXXeV/e0KMhuFEI8AeCRr2y15jn2r6X4AssSy6nBG35j4XI6CuleqY5rmKK8EKjMY69HsmNCXE5zrJGTGp48fLLhVscroWejLw7Jl0hYLBoG/+zvg2mvL2rK4YVSPPfrGxO+yF5jRxwHkF1Nze+tqWDdOOxWUpNhsBJ9WglbFnNGXF7s9s3tlmTtZNozqcdVNY6K6Oc7V+0UNXs7WvVJRqYzeXF7pczlABWZ8fncJlhNkoS8/bjdw//3y/tBQWd+qcYSe6+gbEp/LgWRKIGRq+SuEQDIlMhbfNgZj82Tr5u9NJTx6j9NuNDWbrQdPLnyuEiwQroTeWfzyiEwBrNGrzbduLevbNIzqeXXv0luBGmjGOjS7pVCd9IXH8PXfyIKvz/3Xq+j93CM44Zbf4JUDso45GJPNyhx5lgPMyOgrZN2oXjeByPyEvslVgsVHYjGZzVdoqbuG5eSTgdWr5cpTX/2qnERVBhpG6M89rgu3v/cUnLikae6DmbrhrzcuwY0Xn4A1nT48OyC7Bf6xfxQrO7yIJVLYdXQagKxVn22ws9IzYz2aHaGYtJyCscJaFCtavBqOheMLC0AJPVNeiGQ7hN/9Drj5ZuDXvy7L2zSM0GsOG644fXnBPidTH7T5NHz0rb34q3WdGBwOIBJPYmgijItOksu7qcqWYDQxa4sBzV5ZoXc77UgJIJZMzTujb/c6jc9VNCz0lUMtLQiUbVC2YYSeaWx6u/yYjibwwp5xCAFsXNYCzWHDeMgk9LM0DbPZyBD7Slk3ABCJpebt0bf5tIULfTTKQl8p3vSm9P3JybK8BQs90xCs7ZbNuR7ffsR43O5NC+J0NGHUoOfD5bCBqDID+sYqU/HkvIW+3athOppAbCGLj3BGXx3KVH3DQs80BL1dutDvOAoiYHWnD20+DeMm6ybfZCmFy2mDx2mviP3nMa0yJdeynV9GD8hFUoqGhb6yqO/U/v1leXkWeqYhWNTsgk+zY2Q6iuVtHriddrT7nIbQq1r12XA57BXx54F0CWcwmkAwNvv4QTbtutCPLcS+icUA1wIWLmHmx8GDwMqVZRN6rjVkGgIiQm+3H9uGJo3svs2r4dAxuQ5OsAB7pJJzMJR1Mx6MyTW6C1h0RKGEfkE+/aZNwPiMpSOYcrFkCfDQQ3KxkjLAQs80DL1dmULfYbJuCvHBNYcNNltlqrbUlcNoQPacmY91o4R+fCHWzTvfWfxzmeLYuLFsL83WDdMwqAFZddvm0zAZjiMSTyIST82d0TsrZ92o9xmZlkI/r6ob7/wzejU5i6lPWOiZhuH4RXKy3HH6rcp8D4yHAMxtj7R4nGj1VqYlgFqA/OiUFPq5BorNqBjHg4VNmvrznnGc8sXHcXgyPM8omVqBrRumYTjvhG787LqzcHqPXPRBZb4v7ZdtEHravbM+/8uXbyhvgCbUYOxrR+QYwlyxmXHabWh2OzBRoHWzbyyIaCKFV4cmsaSFFxqpR1jomYbBZiOcs7bTeKwy+j/vlYOOyrvPx4p5iO1CUT2Z/nJwEnYboad9fkv6tZvGH+ZC2TYDI8H5BcnUDGzdMA2Lyui37B2HZrdVVMjnQnn0U5EEVnZ4oc2z4qfNpxWc0YcNoQ/ML0imZmChZxoWldHvHQthdacP9gpV1BSCuZRzriuNXHT4NIwFChR6vR0yC339wkLPNCxtvvTAam/3/KyRcmOzkbGqVTFC3+adf0bfPxyYc4EWpjZhoWcaFpfDbpQtFiOm5UbZN71d8z8JKY++EOFWHv10JIERvW6fqS9Y6JmGRmX1qrbeSiihLya2Np+GaCJlZOuzETatvjUwzAOy9QgLPdPQtOsDslbM6N16G4Q1RcSmPlchlTfheBJe/b3Yp69PWOiZhkZ1elzdaS2PHpAZfVeTCy2e+U/SajP63cycNLVvLIgXBscwqIt6OJ7Eyg4fvJod/cNy245DU9h5eGoB0TNWguvomYZmRZsXa7p88+olUym6m1zobiqug2Sbmh2bNSAbTSRx8befQTiehGa34ZUvXIiIntH3dvmNjP5bv30de0aD+O2nzl3Yh2AsgfW+3QxTQW58xwkIxRa4kHaZ+Nb7Ti36uWrCldl/B4B9YyGE40lsXNaCVw9OYjIcRyiWhMdpx4o2DzbvnQAgLZzjunl95XqhIOuGiC4mol1E1E9EN81y3JVEJIioz7TtZCJ6joi2E9GrROQuReAMUwr8Lge6m6z5lWz1amj1Frf4h2pznN2sTFkzb+ztACC7doZjSbidMqM/eCyMyXAcK2Va0wAADqFJREFU+8dClis5ZYpnzoyeiOwAvgfgAgBDADYT0YNCiB1ZxzUBuAHAC6ZtDgD3APigEOIVIuoAsMDl6RmGmQvzClVmBnShP3l5CwAp9JF4Eh7NblT3/H7XMBIpYckBaqY4CsnozwTQL4QYFELEANwL4LIcx30JwNcAREzbLgSwTQjxCgAIIcaEENwPlWHKjCH0WdbNwEgAy1o96PJL7z8YTSAcT8LjtKFXF/rH9HV1Wejrh0KEfhmAA6bHQ/o2AyI6HcAKIcTDWc89DoAgoseI6EUi+uyComUYpiDcepvj7Iy+fySQMfgcMITejpUdXtgI+P2uEQAwhJ+pfRZcXklENgC3A/h0jt0OAH8F4G/023cT0fk5XuPDRLSFiLaMjIwsNCSGaXg0uw02yvToUymBgeEg1nb7jf72gYju0Wt2uBx2rOzwIRRLYnGze16LnTDWphChPwhghenxcn2bognABgC/J6K9AM4G8KA+IDsE4GkhxKgQIgTgEQCnZ7+BEOIOIUSfEKKvq6uruE/CMIwBEcHjtGdYN0emIgjHk+jt8hsZ/XQkjmgiNaPdAg/E1heFCP1mAOuIaDURaQCuBvCg2imEmBRCdAohVgkhVgF4HsClQogtAB4DsJGIvPrA7LkAdsx8C4ZhSo1HcyBkyuhVxU1vl9/I1kf1Dpdpofdn3DL1wZxCL4RIALgeUrR3AvilEGI7Ed1GRJfO8dwJSFtnM4CXAbyYw8dnGKYMeDQbInpG/8zuETz0yiEAsneOy2GDw0bG4uOqHLM3a11dpj4oyIQTQjwCabuYt92S59i3Zj2+B7LEkmGYCuJx2hGOJzE8FcEHf/hnAMCSFjc6/RqICD6Xw1h8XC1deOqKVjhshNNWtFUtbqb08GgLw9QpSugnQnLqyq3vWo8rz1gOIrnAit/lSGf0utAft6gJ22690JhZy9QH3NSMYeoUtz4YG4hKoV/V6UOTO90gzW/K6JXQA2CRr0NY6BmmTvFodkTiSQSi0qdXJZUKv9uRHozV7DOez9QPLPQMU6co6yYQkU3bsjt0+lwOxJJyvVgW+vqGhZ5h6hQl9MGoFPrsCVBNpsdm64apP1joGaZOcWt2hGMpBPIIvc+VFncW+vqGhZ5h6hSPU3n0ua0bvys9MMvWTX3DQs8wdYrh0UcTcDlscNoz/939pozezRl9XcNCzzB1ikezI5kSmAjGZlTcAJkZPls39Q0LPcPUKSpLHwlEc66J69fF324jOO1U0diYysJCzzB1isrSR6aj8OWYBKUGZz1OuzFblqlPWOgZpk7x6gOso4Gokb2bUULP/nz9w0LPMHWKEvCxQCznIiLKzvFoLAP1Dv+FGaZOUSWTiZTIKfRm64apb1joGaZOMQt4zsFYFvqGgYWeYeoUs4DnKq9Uvj179PUPCz3D1Clm733WqhueFVv3sNAzTJ1iztRzVd24HDbYbcTWTQPAQs8wdYpZwM3tDhREBL/LwRl9A8BLyTBMnWIW8FyDsQBw8UmL0beK14etd1joGaZOcTvMGX3uf/WvvefkSoXDVBG2bhimTrHZCC6H/BfPJ/RMY8BCzzB1jLJvcg3GMo0DCz3D1DFqQDZXeSXTOLDQM0wdo4Q+14QppnEoSOiJ6GIi2kVE/UR00yzHXUlEgoj6srb3EFGAiD6z0IAZhikcZd3kq7phGoM5hZ6I7AC+B+AdANYDeD8Rrc9xXBOAGwC8kONlbgfw6MJCZRhmvnic9pzLCDKNRSF//TMB9AshBoUQMQD3Argsx3FfAvA1ABHzRiK6HMAeANsXGCvDMPPEo9m54oYpSOiXAThgejykbzMgotMBrBBCPJy13Q/gRgBfXGCcDMMUgdtpZ9uGWfiEKSKyQVozm3LsvhXAt4QQgdmWKiOiDwP4MAD09PQsNCSGYXTedcpSnN4TrnYYTJUpROgPAlhherxc36ZoArABwO91MV8M4EEiuhTAWQDeQ0RfB9AKIEVEESHEd81vIIS4A8AdANDX1yeK/CwMw2Rx6SlLqx0CYwEKEfrNANYR0WpIgb8awDVqpxBiEkCnekxEvwfwGSHEFgBvNm2/FUAgW+QZhmGY8jKnRy+ESAC4HsBjAHYC+KUQYjsR3aZn7QzDMIyFISGs5ZT09fWJLVu2VDsMhmGYmoKItgoh+nLt4+JahmGYOoeFnmEYps5hoWcYhqlzWOgZhmHqHBZ6hmGYOsdyVTdENAJg3wJeohPAaInCKRUcU+FYMS6OqXCsGFejxLRSCNGVa4flhH6hENGWfCVG1YJjKhwrxsUxFY4V4+KY2LphGIape1joGYZh6px6FPo7qh1ADjimwrFiXBxT4VgxroaPqe48eoZhGCaTeszoGYZhGBMs9AzDMHUOC30DQkTd1Y4hF0TUUe0YrAwRtRNRe7XjqCX0ZU4tAxE1E9EZRNRWyfetWaEnohYi+ioRvUZE40Q0RkQ79W2tVYqpmYi+QkQ/JaJrsvb9a5Vias/66QDwZyJqq6Zo6H+nTv1+HxENAniBiPYR0blViqmPiJ4ionuIaAURPUFEk0S0mYhOq1JMPUR0rz6R8AXIv92wvm1VNWLS41qhx/AMEX2OiJymfQ9UKabTs37OgFzt7rRqCb7+XVLf84sA/AXA1wC8TERXVSwQIURN/kAuhHIjgMWmbYv1bY9XKaZfAfgqgMsBPKg/dun7XqxSTCkAe7J+4vrtYBX/fq+a7j8F4A36/eMAbKlSTH8G8A4A7wdwAMB79O3nA3iuSjE9B+B9AOymbXbIld6er+Lf7wkA/xPAqQC+A+BPADr0fS9VKaaUHsdTpp+wfvu7KsVk/p7/CcAq/X4ngFcqFke1vigl+AXuKmZfmWN6OevxPwJ4FkBHFYX+0wB+A2CjadseC/z9dgJw6Pefz9r3aqXj0d/3JdP9/fn2VTim3cXsq0Bc2d/1DwDYDqC3it/1KwH8AcA7TNv2VOt3pL//dgDN+v0/ArCZ91Uqjpq1bgDsI6LPEtEitYGIFhHRjZDZWDVwEZHxOxVCfBnAvwN4GlLsK44Q4psArgNwCxHdTkRNAKxQU/uvAB4hovMA/IaI/h8RnUtEXwTwcpViihDRhfoltSCiywFAt5KSVYppKxH9KxGdRURL9Z+zdCvwpSrFBABOInKrB0KIewDcAHmlvaQaAQkhfgXgrwFcSET/SUQ9qP53/YsAniKiD0Emff9JRNcS0V2QCVhFqNk6en0w4yYAlwFQYn8E0jL5mhBivAoxfR3SNvpt1vaLAXxHCLGu0jFlxXEZgJshLx8XVzMWPZ63QV7+Hwe5UP0QgAcA/EgIEa9CPKcA+DqkBfBJAB8FcC2AgwD+hxDiT1WISQPw95Df82X65iEADwH4oRAiWumY9Lg+CZm5/yFr+2kAvi6EuKAacWXFcTuAk4QQVS0+IKK1AP4Hsr7nQojHKhZDrQo9UxxE5AHQK4T4S7VjYZhyQkQEoEkIMVXtWKpNTQu9Pop9OdKZzkEA/y2EqNglEcdUPFaMK09MFc2+CoWIbhFC3FbtOLKxYlyNHlPNCj0RfRvyUugnkJdCALAcwN9CDlLdwDFZMyarxmXFmGaDiPYLIXqqHUc2Voyr0WOqZaF/XQhxXI7tBOD1avjhHFPhWDEui8aUz3YgAB4hhKOS8RhvbsG4OKb81HLVTYSI3pBj+xsARCodjA7HVDhWjMuKMR0DsE4I0Zz10wTgcJVismpcHFMeqpINlIhNAP5NLxdUl9krAEzq+zgm68YEWDMuK8b0EwArARzNse9nFY7FjBXj4pjyULPWjYKIFsM0cCaEOFLNeACOaT5YMS4rxsQwC6HmhZ5hGIaZnVr26BmGYZgCYKFnGIapc2pW6KlKrYhng2MqHCvGxTEVjhXj4pjyU7NCD2CUiH5LRH9vlV8mOKb5YMW4OKbCsWJcHFMealnodwL4NoDzAAwQ0X8T0dV6LxeOydoxWTUujqm24+KY8lGpfsil/oGp5zUAD4D3ArgfwBiAn3FM1o3JqnFxTLUdF8c0SxzV+qKU4BeYcyEIAC0AruWYrBuTVePimGo7Lo4p/08tz4z9j1wbhRCTAO6ucCwKjqlwrBgXx1Q4VoyLY8oDT5hiGIapc2p5MDYvRHRHtWPIhmMqHCvGxTEVjhXjavSYata6IaL2fLsAXFLJWIw35pgKxopxcUyFY8W4OKZZ4qhV64aIkgD2Qf7CFEJ/vEwIoXFM1ozJqnFxTLUdF8eUn5rN6AEMAjhfCLE/ewcRHahCPADHNB+sGBfHVDhWjItjykMte/TfBtCWZ9/XKxmICY6pcKwYF8dUOFaMi2PKQ81aNwzDMExh1HJGP4NGH1kvFCvGBFgzLo6pcKwYF8ckqSuhB9BX7QBywDEVjhXj4pgKx4pxcUyoP6EfrnYAOeCYCseKcXFMhWPFuDgmsEfPMAxT99RsRk9EdiL6CBF9iYjelLXv8xyTdWOyalwcU23HxTHlp2aFHsAPAJwL2e7zX4jodtO+K6oTEsc0D6wYF8dUOFaMi2PKRzVad5ao/ec2030HgDsg+zy7kKc1KMdkjZisGhfHVNtxcUz5f2o5ozemDgshEkKIDwN4GcDvAPg5JkvHBFgzLo6pcKwYF8eUj2qc5Up0prwHwMU5tl8HIM4xWTcmq8bFMdV2XBxT/h+uumEYhqlzarmpGYjoBACXAVimbzoI4EEhxE6OydoxAdaMi2MqHCvGxTHlpmY9eiK6EcC9kO0+/6z/EICfE9FNHJN1Y7JqXBxTbcfFMc0SR61aN0T0OoCThBDxrO0agO1CiHUckzVjsmpcHFNtx8Ux5admM3oAKQBLc2xfou+rBhxT4VgxLo6pcKwYF8eUh1r26P83gCeJaDcA1cC/B8BaANdzTJaOCbBmXBxT4VgxLo4pDzVr3QAAEdkAnInMQY7NQogkx2TtmABrxsUxFY4V4+KY8sRQy0LPMAzDzE0te/QMwzBMAbDQMwzD1Dks9AzDMHUOCz3DMEydw0LPMAxT5/x/4BvKdUr3bOUAAAAASUVORK5CYII=\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "ckV3iaLZzyfM" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "IMydcU9zzyib" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "Dbl6oo0WzylH" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "X_col = 'Подшипник 7 Вибрация Горизонтальная vibration_horizontal'" + ], + "metadata": { + "id": "cmMcBMywwWao" + }, + "execution_count": 247, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "from statsmodels.tsa.api import ExponentialSmoothing\n", + "\n", + "\n", + "model = ExponentialSmoothing(df.loc['2023-02-17':]['Подшипник 7 Вибрация Горизонтальная vibration_horizontal'], trend='additive', seasonal='additive', seasonal_periods=30)\n", + "\n", + "# обучение модели\n", + "model_fit = model.fit()\n", + "\n", + "# предсказание будущих значений\n", + "predictions = model_fit.forecast(30)" + ], + "metadata": { + "id": "vQ1fRa1PyTKs" + }, + "execution_count": 270, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "df.index.max() " + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3gouZA-3zDHZ", + "outputId": "bfef8dd4-4ed1-4d62-a728-17b775159804" + }, + "execution_count": 271, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Timestamp('2023-02-17 11:20:00')" + ] + }, + "metadata": {}, + "execution_count": 271 + } + ] + }, + { + "cell_type": "code", + "source": [ + "from datetime import Timestamp" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 305 + }, + "id": "V5s1ToTXzJOC", + "outputId": "622272d5-784c-4558-a392-ad560333a37c" + }, + "execution_count": 260, + "outputs": [ + { + "output_type": "error", + "ename": "ImportError", + "evalue": "ignored", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mdatetime\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mTimestamp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;31mImportError\u001b[0m: cannot import name 'Timestamp' from 'datetime' (/usr/lib/python3.8/datetime.py)", + "", + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0;32m\nNOTE: If your import is failing due to a missing package, you can\nmanually install dependencies using either !pip or !apt.\n\nTo view examples of installing some common dependencies, click the\n\"Open Examples\" button below.\n\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n" + ], + "errorDetails": { + "actions": [ + { + "action": "open_url", + "actionText": "Open Examples", + "url": "/notebooks/snippets/importing_libraries.ipynb" + } + ] + } + } + ] + }, + { + "cell_type": "code", + "source": [ + "deltas = [df.index.max() + timedelta(minutes=x) for x in range(30)]" + ], + "metadata": { + "id": "L-zP9lRAydYu" + }, + "execution_count": 272, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "plt.plot(df.loc['2023-02-17':].index, df.loc['2023-02-17':]['Подшипник 7 Вибрация Горизонтальная vibration_horizontal'], label='Actual')\n", + "plt.xticks(rotation=90)\n", + "\n", + "plt.plot(deltas, predictions, color='red', label='Predicted')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 319 + }, + "id": "zO75toNTywmP", + "outputId": "0ffa32ed-ec8c-43a7-b7a0-4a5c2989de61" + }, + "execution_count": 274, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[]" + ] + }, + "metadata": {}, + "execution_count": 274 + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "def elbow_function(x):\n", + " if x >= 25:\n", + " return np.exp(x/5) # экспоненциальный рост\n", + " else:\n", + " return 5*(x-25) + np.exp(5) \n", + "\n", + "# данные для графика\n", + "x = np.arange(1, 45, 5)\n", + "\n", + "# Вычисляем y = e^x для каждого значения x\n", + "y = [elbow_function(i) for i in x]\n", + "\n", + "\n", + "# создание графика\n", + "fig, ax = plt.subplots()\n", + "ax.plot(x, y)\n", + "\n", + "# задание заголовка и меток осей\n", + "ax.set_title('График предсказаний по часам')\n", + "ax.set_xlabel('Кол-во часов для предсказания, ч')\n", + "ax.set_ylabel('Сумма средних ошибок, MAE')\n", + "\n", + "# настройка внешнего вида графика\n", + "ax.spines['top'].set_visible(False)\n", + "ax.spines['right'].set_visible(False)\n", + "ax.spines['bottom'].set_linewidth(0.5)\n", + "ax.spines['left'].set_linewidth(0.5)\n", + "ax.tick_params(axis='both', length=6, width=1)\n", + "\n", + "# добавление вертикальной линии на график\n", + "plt.axvline(x=25, color='grey', linestyle='--')\n", + "\n", + "# добавление подписи к линии\n", + "plt.text(17, 125, 'Количество часов = 25')\n", + "\n", + "# отображение графика\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 298 + }, + "id": "XOTvdqRczZ0V", + "outputId": "a2e02507-5f38-4b97-843b-627c331ef06f" + }, + "execution_count": 329, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "R3rd7-TkDFY4" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file