{ "cells": [ { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Display signals" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def show_signals(data):\n", " Accelerometer_X_axis_data = data[:, 0]\n", " Accelerometer_Y_axis_data = data[:, 1]\n", " Accelerometer_Z_axis_data = data[:, 2]\n", " Gyroscope_X_axis_data = data[:, 3]\n", " Gyroscope_Y_axis_data = data[:, 4]\n", " Gyroscope_Z_axis_data = data[:, 5]\n", " time = np.linspace(0.01, data.shape[0] / 100, data.shape[0])\n", "\n", " plt.figure(figsize=(20, 10), dpi=80)\n", "\n", " ax1 = plt.subplot(231)\n", " ax1.plot(time, Accelerometer_X_axis_data, \"b\")\n", " ax1.title.set_text(f\"Accelerometer X axis\")\n", " ax1.set_xlabel(\"time (s) ->\")\n", " ax1.set_ylabel(\"Acceleration (m/s^2)\")\n", " ax1.grid(True)\n", "\n", " ax2 = plt.subplot(232)\n", " ax2.plot(time, Accelerometer_Y_axis_data, \"g\")\n", " ax2.title.set_text(f\"Accelerometer Y axis\")\n", " ax2.set_xlabel(\"time (s) ->\")\n", " ax2.set_ylabel(\"Acceleration (m/s^2)\")\n", " ax2.grid(True)\n", "\n", " ax3 = plt.subplot(233)\n", " ax3.plot(time, Accelerometer_Z_axis_data, \"r\")\n", " ax3.title.set_text(f\"Accelerometer Z axis\")\n", " ax3.set_xlabel(\"time (s) ->\")\n", " ax3.set_ylabel(\"Acceleration (m/s^2)\")\n", " ax3.grid(True)\n", "\n", " ax4 = plt.subplot(234)\n", " ax4.plot(time, Gyroscope_X_axis_data, \"b\")\n", " ax4.title.set_text(f\"Gyroscope X axis\")\n", " ax4.set_xlabel(\"time (s) ->\")\n", " ax4.set_ylabel(\"Angular rotation (rad/s)\")\n", " ax4.grid(True)\n", "\n", " ax5 = plt.subplot(235)\n", " ax5.plot(time, Gyroscope_Y_axis_data, \"g\")\n", " ax5.title.set_text(f\"Gyroscope Y axis\")\n", " ax5.set_xlabel(\"time (s) ->\")\n", " ax5.set_ylabel(\"Angular rotation (rad/s)\")\n", " ax5.grid(True)\n", "\n", " ax6 = plt.subplot(236)\n", " ax6.plot(time, Gyroscope_Z_axis_data, \"r\")\n", " ax6.title.set_text(f\"Gyroscope Z axis\")\n", " ax6.set_xlabel(\"time (s) ->\")\n", " ax6.set_ylabel(\"Angular rotation (rad/s)\")\n", " ax6.grid(True)\n", "\n", " plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## New pairs of activities" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[['Stand', 'Talk-stand'], ['Stand', 'Pick'], ['Stand', 'Jump'], ['Stand', 'Walk'], ['Stand', 'Walk-backward'], ['Stand', 'Walk-circle'], ['Stand', 'Run'], ['Stand', 'Stair-up'], ['Stand', 'Stair-down'], ['Stand', 'Table-tennis'], ['Sit', 'Talk-sit'], ['Talk-sit', 'Sit'], ['Talk-stand', 'Stand'], ['Talk-stand', 'Pick'], ['Talk-stand', 'Jump'], ['Talk-stand', 'Walk'], ['Talk-stand', 'Walk-backward'], ['Talk-stand', 'Walk-circle'], ['Talk-stand', 'Run'], ['Talk-stand', 'Stair-up'], ['Talk-stand', 'Stair-down'], ['Talk-stand', 'Table-tennis'], ['Lay', 'Sit-up'], ['Pick', 'Stand'], ['Pick', 'Talk-stand'], ['Pick', 'Jump'], ['Pick', 'Walk'], ['Pick', 'Walk-backward'], ['Pick', 'Walk-circle'], ['Pick', 'Run'], ['Pick', 'Stair-up'], ['Pick', 'Stair-down'], ['Pick', 'Table-tennis'], ['Jump', 'Stand'], ['Jump', 'Talk-stand'], ['Jump', 'Pick'], ['Jump', 'Walk'], ['Jump', 'Walk-backward'], ['Jump', 'Walk-circle'], ['Jump', 'Run'], ['Jump', 'Stair-up'], ['Jump', 'Stair-down'], ['Jump', 'Table-tennis'], ['Sit-up', 'Lay'], ['Walk', 'Stand'], ['Walk', 'Talk-stand'], ['Walk', 'Pick'], ['Walk', 'Jump'], ['Walk', 'Walk-circle'], ['Walk', 'Run'], ['Walk', 'Stair-up'], ['Walk', 'Stair-down'], ['Walk', 'Table-tennis'], ['Walk-backward', 'Stand'], ['Walk-backward', 'Talk-stand'], ['Walk-backward', 'Pick'], ['Walk-backward', 'Jump'], ['Walk-backward', 'Table-tennis'], ['Walk-circle', 'Stand'], ['Walk-circle', 'Talk-stand'], ['Walk-circle', 'Pick'], ['Walk-circle', 'Jump'], ['Walk-circle', 'Walk'], ['Walk-circle', 'Run'], ['Walk-circle', 'Stair-up'], ['Walk-circle', 'Stair-down'], ['Walk-circle', 'Table-tennis'], ['Run', 'Stand'], ['Run', 'Talk-stand'], ['Run', 'Pick'], ['Run', 'Jump'], ['Run', 'Walk'], ['Run', 'Walk-circle'], ['Run', 'Stair-up'], ['Run', 'Stair-down'], ['Run', 'Table-tennis'], ['Stair-up', 'Stand'], ['Stair-up', 'Talk-stand'], ['Stair-up', 'Pick'], ['Stair-up', 'Jump'], ['Stair-up', 'Walk'], ['Stair-up', 'Walk-circle'], ['Stair-up', 'Run'], ['Stair-up', 'Stair-down'], ['Stair-down', 'Stand'], ['Stair-down', 'Talk-stand'], ['Stair-down', 'Pick'], ['Stair-down', 'Jump'], ['Stair-down', 'Walk'], ['Stair-down', 'Walk-circle'], ['Stair-down', 'Run'], ['Stair-down', 'Stair-up'], ['Table-tennis', 'Stand'], ['Table-tennis', 'Talk-stand'], ['Table-tennis', 'Pick'], ['Table-tennis', 'Jump'], ['Table-tennis', 'Walk'], ['Table-tennis', 'Walk-backward'], ['Table-tennis', 'Walk-circle'], ['Table-tennis', 'Run']] \n", "\n", "Num. of samples: 100\n" ] } ], "source": [ "f = open(\"dataset/data_augmentation_KU-HAR.txt\", \"r\")\n", "all_lines = f.readlines()\n", "\n", "pairs = []\n", "\n", "for line in all_lines:\n", " line = line.rstrip().split(\" \")\n", "\n", " # store pairs\n", " pairs.append([line[0], line[-1]])\n", "\n", "print(pairs, \"\\n\")\n", "print(\"Num. of samples: \", len(pairs))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Dataset" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(20750, 1800) (20750,) \n", "\n", "Mean: [ 0.04835381 -0.04000019 -0.06103219 0.01185658 0.00415822 0.00092788]\n", "Std: [3.6388602 2.1443195 2.8478932 1.309968 1.0470778 1.0666409]\n", "Max: [194.52 91.779 340.59 97.376 79.272 78.783]\n", "Min: [-172.74 -143.17 -315.89 -113.8 -85.757 -78.866] \n", "\n", "(20655, 300, 6) (20655, 300) \n", "\n" ] } ], "source": [ "CLASS_LABELS = np.array(\n", " [\n", " \"Stand\",\n", " \"Sit\",\n", " \"Talk-sit\",\n", " \"Talk-stand\",\n", " \"Stand-sit\",\n", " \"Lay\",\n", " \"Lay-stand\",\n", " \"Pick\",\n", " \"Jump\",\n", " \"Push-up\",\n", " \"Sit-up\",\n", " \"Walk\",\n", " \"Walk-backward\",\n", " \"Walk-circle\",\n", " \"Run\",\n", " \"Stair-up\",\n", " \"Stair-down\",\n", " \"Table-tennis\",\n", " ]\n", ")\n", "\n", "df = pd.read_csv(\"./dataset/KU-HAR_time_domain_subsamples_20750x300.csv\", header=None)\n", "\n", "signals = df.values[:, 0:1800]\n", "signals = np.array(signals, dtype=np.float32)\n", "labels = df.values[:, 1800]\n", "labels = np.array(labels, dtype=np.int64)\n", "\n", "print(signals.shape, labels.shape, \"\\n\")\n", "\n", "# indexes = []\n", "# for i in range(signals.shape[0]):\n", "# for j in range(signals.shape[1]):\n", "# if (np.abs(signals[i, j]) > 350.0):\n", "# indexes.append(i)\n", "# break\n", "# print(indexes)\n", "# print(f\"Remove {len(indexes)} elements !\")\n", "\n", "# for i in indexes:\n", "# print(f\"Label: {labels[i]}\")\n", "# plt.plot(signals[i, 0:300])\n", "# plt.show()\n", "\n", "# broken samples in original dataset\n", "indexes = [\n", " 6587,\n", " 6588,\n", " 6589,\n", " 6590,\n", " 6591,\n", " 6592,\n", " 6593,\n", " 6594,\n", " 6595,\n", " 6596,\n", " 6597,\n", " 6598,\n", " 6599,\n", " 6600,\n", " 6601,\n", " 6602,\n", " 6603,\n", " 6604,\n", " 6605,\n", " 6606,\n", " 6607,\n", " 6660,\n", " 6661,\n", " 6662,\n", " 6663,\n", " 6664,\n", " 6665,\n", " 6666,\n", " 6667,\n", " 6668,\n", " 6669,\n", " 6670,\n", " 6671,\n", " 6672,\n", " 6673,\n", " 6674,\n", " 6675,\n", " 6676,\n", " 6677,\n", " 6678,\n", " 6679,\n", " 6680,\n", " 6681,\n", " 6682,\n", " 6683,\n", " 6684,\n", " 6685,\n", " 6686,\n", " 6687,\n", " 6716,\n", " 6717,\n", " 6718,\n", " 6719,\n", " 6720,\n", " 6721,\n", " 6722,\n", " 6723,\n", " 6724,\n", " 6725,\n", " 6726,\n", " 6727,\n", " 6728,\n", " 6729,\n", " 6730,\n", " 6731,\n", " 6732,\n", " 6733,\n", " 6734,\n", " 6735,\n", " 6736,\n", " 6737,\n", " 6738,\n", " 6739,\n", " 6740,\n", " 6741,\n", " 6742,\n", " 6743,\n", " 6750,\n", " 6751,\n", " 6752,\n", " 6753,\n", " 6754,\n", " 6755,\n", " 6756,\n", " 6757,\n", " 6758,\n", " 6759,\n", " 6760,\n", " 6761,\n", " 6762,\n", " 6763,\n", " 6764,\n", " 6765,\n", " 6766,\n", " 6767,\n", "]\n", "\n", "# delete the bad samples\n", "signals = np.delete(signals, indexes, 0)\n", "labels = np.delete(labels, indexes, 0)\n", "\n", "signals = np.stack(\n", " [\n", " signals[:, 0:300], # ACC X\n", " signals[:, 300:600], # ACC Y\n", " signals[:, 600:900], # ACC Z\n", " signals[:, 900:1200], # GYRO X\n", " signals[:, 1200:1500], # GYRO Y\n", " signals[:, 1500:1800], # GYRO Z\n", " ],\n", " axis=-1,\n", ")\n", "labels = np.repeat(labels.reshape(labels.shape[0], 1), signals.shape[1], axis=1)\n", "\n", "print(\"Mean:\", np.mean(signals, axis=(0, 1)))\n", "print(\"Std:\", np.std(signals, axis=(0, 1)))\n", "print(\"Max:\", np.max(signals, axis=(0, 1)))\n", "print(\"Min:\", np.min(signals, axis=(0, 1)), \"\\n\")\n", "\n", "print(signals.shape, labels.shape, \"\\n\")\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Working on 0 sample\n", "[0]\n", "[3] \n", "\n", "(1886,)\n", "(1866,) \n", "\n", "(1866, 600, 6)\n", "(1866, 600) \n", "\n", "(1866, 300, 6)\n", "(1866, 300) \n", "\n", "Working on 1 sample\n", "[0]\n", "[7] \n", "\n", "(1886,)\n", "(1333,) \n", "\n", "(1333, 600, 6)\n", "(1333, 600) \n", "\n", "(1333, 300, 6)\n", "(1333, 300) \n", "\n", "Working on 2 sample\n", "[0]\n", "[8] \n", "\n", "(1886,)\n", "(666,) \n", "\n", "(666, 600, 6)\n", "(666, 600) \n", "\n", "(666, 300, 6)\n", "(666, 300) \n", "\n", "Working on 3 sample\n", "[0]\n", "[11] \n", "\n", "(1886,)\n", "(882,) \n", "\n", "(882, 600, 6)\n", "(882, 600) \n", "\n", "(882, 300, 6)\n", "(882, 300) \n", "\n", "Working on 4 sample\n", "[0]\n", "[12] \n", "\n", "(1886,)\n", "(317,) \n", "\n", "(317, 600, 6)\n", "(317, 600) \n", "\n", "(317, 300, 6)\n", "(317, 300) \n", "\n", "Working on 5 sample\n", "[0]\n", "[13] \n", "\n", "(1886,)\n", "(259,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 6 sample\n", "[0]\n", "[14] \n", "\n", "(1886,)\n", "(500,) \n", "\n", "(500, 600, 6)\n", "(500, 600) \n", "\n", "(500, 300, 6)\n", "(500, 300) \n", "\n", "Working on 7 sample\n", "[0]\n", "[15] \n", "\n", "(1886,)\n", "(798,) \n", "\n", "(798, 600, 6)\n", "(798, 600) \n", "\n", "(798, 300, 6)\n", "(798, 300) \n", "\n", "Working on 8 sample\n", "[0]\n", "[16] \n", "\n", "(1886,)\n", "(781,) \n", "\n", "(781, 600, 6)\n", "(781, 600) \n", "\n", "(781, 300, 6)\n", "(781, 300) \n", "\n", "Working on 9 sample\n", "[0]\n", "[17] \n", "\n", "(1886,)\n", "(458,) \n", "\n", "(458, 600, 6)\n", "(458, 600) \n", "\n", "(458, 300, 6)\n", "(458, 300) \n", "\n", "Working on 10 sample\n", "[1]\n", "[2] \n", "\n", "(1874,)\n", "(1797,) \n", "\n", "(1797, 600, 6)\n", "(1797, 600) \n", "\n", "(1797, 300, 6)\n", "(1797, 300) \n", "\n", "Working on 11 sample\n", "[2]\n", "[1] \n", "\n", "(1797,)\n", "(1874,) \n", "\n", "(1797, 600, 6)\n", "(1797, 600) \n", "\n", "(1797, 300, 6)\n", "(1797, 300) \n", "\n", "Working on 12 sample\n", "[3]\n", "[0] \n", "\n", "(1866,)\n", "(1886,) \n", "\n", "(1866, 600, 6)\n", "(1866, 600) \n", "\n", "(1866, 300, 6)\n", "(1866, 300) \n", "\n", "Working on 13 sample\n", "[3]\n", "[7] \n", "\n", "(1866,)\n", "(1333,) \n", "\n", "(1333, 600, 6)\n", "(1333, 600) \n", "\n", "(1333, 300, 6)\n", "(1333, 300) \n", "\n", "Working on 14 sample\n", "[3]\n", "[8] \n", "\n", "(1866,)\n", "(666,) \n", "\n", "(666, 600, 6)\n", "(666, 600) \n", "\n", "(666, 300, 6)\n", "(666, 300) \n", "\n", "Working on 15 sample\n", "[3]\n", "[11] \n", "\n", "(1866,)\n", "(882,) \n", "\n", "(882, 600, 6)\n", "(882, 600) \n", "\n", "(882, 300, 6)\n", "(882, 300) \n", "\n", "Working on 16 sample\n", "[3]\n", "[12] \n", "\n", "(1866,)\n", "(317,) \n", "\n", "(317, 600, 6)\n", "(317, 600) \n", "\n", "(317, 300, 6)\n", "(317, 300) \n", "\n", "Working on 17 sample\n", "[3]\n", "[13] \n", "\n", "(1866,)\n", "(259,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 18 sample\n", "[3]\n", "[14] \n", "\n", "(1866,)\n", "(500,) \n", "\n", "(500, 600, 6)\n", "(500, 600) \n", "\n", "(500, 300, 6)\n", "(500, 300) \n", "\n", "Working on 19 sample\n", "[3]\n", "[15] \n", "\n", "(1866,)\n", "(798,) \n", "\n", "(798, 600, 6)\n", "(798, 600) \n", "\n", "(798, 300, 6)\n", "(798, 300) \n", "\n", "Working on 20 sample\n", "[3]\n", "[16] \n", "\n", "(1866,)\n", "(781,) \n", "\n", "(781, 600, 6)\n", "(781, 600) \n", "\n", "(781, 300, 6)\n", "(781, 300) \n", "\n", "Working on 21 sample\n", "[3]\n", "[17] \n", "\n", "(1866,)\n", "(458,) \n", "\n", "(458, 600, 6)\n", "(458, 600) \n", "\n", "(458, 300, 6)\n", "(458, 300) \n", "\n", "Working on 22 sample\n", "[5]\n", "[10] \n", "\n", "(1813,)\n", "(1005,) \n", "\n", "(1005, 600, 6)\n", "(1005, 600) \n", "\n", "(1005, 300, 6)\n", "(1005, 300) \n", "\n", "Working on 23 sample\n", "[7]\n", "[0] \n", "\n", "(1333,)\n", "(1886,) \n", "\n", "(1333, 600, 6)\n", "(1333, 600) \n", "\n", "(1333, 300, 6)\n", "(1333, 300) \n", "\n", "Working on 24 sample\n", "[7]\n", "[3] \n", "\n", "(1333,)\n", "(1866,) \n", "\n", "(1333, 600, 6)\n", "(1333, 600) \n", "\n", "(1333, 300, 6)\n", "(1333, 300) \n", "\n", "Working on 25 sample\n", "[7]\n", "[8] \n", "\n", "(1333,)\n", "(666,) \n", "\n", "(666, 600, 6)\n", "(666, 600) \n", "\n", "(666, 300, 6)\n", "(666, 300) \n", "\n", "Working on 26 sample\n", "[7]\n", "[11] \n", "\n", "(1333,)\n", "(882,) \n", "\n", "(882, 600, 6)\n", "(882, 600) \n", "\n", "(882, 300, 6)\n", "(882, 300) \n", "\n", "Working on 27 sample\n", "[7]\n", "[12] \n", "\n", "(1333,)\n", "(317,) \n", "\n", "(317, 600, 6)\n", "(317, 600) \n", "\n", "(317, 300, 6)\n", "(317, 300) \n", "\n", "Working on 28 sample\n", "[7]\n", "[13] \n", "\n", "(1333,)\n", "(259,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 29 sample\n", "[7]\n", "[14] \n", "\n", "(1333,)\n", "(500,) \n", "\n", "(500, 600, 6)\n", "(500, 600) \n", "\n", "(500, 300, 6)\n", "(500, 300) \n", "\n", "Working on 30 sample\n", "[7]\n", "[15] \n", "\n", "(1333,)\n", "(798,) \n", "\n", "(798, 600, 6)\n", "(798, 600) \n", "\n", "(798, 300, 6)\n", "(798, 300) \n", "\n", "Working on 31 sample\n", "[7]\n", "[16] \n", "\n", "(1333,)\n", "(781,) \n", "\n", "(781, 600, 6)\n", "(781, 600) \n", "\n", "(781, 300, 6)\n", "(781, 300) \n", "\n", "Working on 32 sample\n", "[7]\n", "[17] \n", "\n", "(1333,)\n", "(458,) \n", "\n", "(458, 600, 6)\n", "(458, 600) \n", "\n", "(458, 300, 6)\n", "(458, 300) \n", "\n", "Working on 33 sample\n", "[8]\n", "[0] \n", "\n", "(666,)\n", "(1886,) \n", "\n", "(666, 600, 6)\n", "(666, 600) \n", "\n", "(666, 300, 6)\n", "(666, 300) \n", "\n", "Working on 34 sample\n", "[8]\n", "[3] \n", "\n", "(666,)\n", "(1866,) \n", "\n", "(666, 600, 6)\n", "(666, 600) \n", "\n", "(666, 300, 6)\n", "(666, 300) \n", "\n", "Working on 35 sample\n", "[8]\n", "[7] \n", "\n", "(666,)\n", "(1333,) \n", "\n", "(666, 600, 6)\n", "(666, 600) \n", "\n", "(666, 300, 6)\n", "(666, 300) \n", "\n", "Working on 36 sample\n", "[8]\n", "[11] \n", "\n", "(666,)\n", "(882,) \n", "\n", "(666, 600, 6)\n", "(666, 600) \n", "\n", "(666, 300, 6)\n", "(666, 300) \n", "\n", "Working on 37 sample\n", "[8]\n", "[12] \n", "\n", "(666,)\n", "(317,) \n", "\n", "(317, 600, 6)\n", "(317, 600) \n", "\n", "(317, 300, 6)\n", "(317, 300) \n", "\n", "Working on 38 sample\n", "[8]\n", "[13] \n", "\n", "(666,)\n", "(259,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 39 sample\n", "[8]\n", "[14] \n", "\n", "(666,)\n", "(500,) \n", "\n", "(500, 600, 6)\n", "(500, 600) \n", "\n", "(500, 300, 6)\n", "(500, 300) \n", "\n", "Working on 40 sample\n", "[8]\n", "[15] \n", "\n", "(666,)\n", "(798,) \n", "\n", "(666, 600, 6)\n", "(666, 600) \n", "\n", "(666, 300, 6)\n", "(666, 300) \n", "\n", "Working on 41 sample\n", "[8]\n", "[16] \n", "\n", "(666,)\n", "(781,) \n", "\n", "(666, 600, 6)\n", "(666, 600) \n", "\n", "(666, 300, 6)\n", "(666, 300) \n", "\n", "Working on 42 sample\n", "[8]\n", "[17] \n", "\n", "(666,)\n", "(458,) \n", "\n", "(458, 600, 6)\n", "(458, 600) \n", "\n", "(458, 300, 6)\n", "(458, 300) \n", "\n", "Working on 43 sample\n", "[10]\n", "[5] \n", "\n", "(1005,)\n", "(1813,) \n", "\n", "(1005, 600, 6)\n", "(1005, 600) \n", "\n", "(1005, 300, 6)\n", "(1005, 300) \n", "\n", "Working on 44 sample\n", "[11]\n", "[0] \n", "\n", "(882,)\n", "(1886,) \n", "\n", "(882, 600, 6)\n", "(882, 600) \n", "\n", "(882, 300, 6)\n", "(882, 300) \n", "\n", "Working on 45 sample\n", "[11]\n", "[3] \n", "\n", "(882,)\n", "(1866,) \n", "\n", "(882, 600, 6)\n", "(882, 600) \n", "\n", "(882, 300, 6)\n", "(882, 300) \n", "\n", "Working on 46 sample\n", "[11]\n", "[7] \n", "\n", "(882,)\n", "(1333,) \n", "\n", "(882, 600, 6)\n", "(882, 600) \n", "\n", "(882, 300, 6)\n", "(882, 300) \n", "\n", "Working on 47 sample\n", "[11]\n", "[8] \n", "\n", "(882,)\n", "(666,) \n", "\n", "(666, 600, 6)\n", "(666, 600) \n", "\n", "(666, 300, 6)\n", "(666, 300) \n", "\n", "Working on 48 sample\n", "[11]\n", "[13] \n", "\n", "(882,)\n", "(259,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 49 sample\n", "[11]\n", "[14] \n", "\n", "(882,)\n", "(500,) \n", "\n", "(500, 600, 6)\n", "(500, 600) \n", "\n", "(500, 300, 6)\n", "(500, 300) \n", "\n", "Working on 50 sample\n", "[11]\n", "[15] \n", "\n", "(882,)\n", "(798,) \n", "\n", "(798, 600, 6)\n", "(798, 600) \n", "\n", "(798, 300, 6)\n", "(798, 300) \n", "\n", "Working on 51 sample\n", "[11]\n", "[16] \n", "\n", "(882,)\n", "(781,) \n", "\n", "(781, 600, 6)\n", "(781, 600) \n", "\n", "(781, 300, 6)\n", "(781, 300) \n", "\n", "Working on 52 sample\n", "[11]\n", "[17] \n", "\n", "(882,)\n", "(458,) \n", "\n", "(458, 600, 6)\n", "(458, 600) \n", "\n", "(458, 300, 6)\n", "(458, 300) \n", "\n", "Working on 53 sample\n", "[12]\n", "[0] \n", "\n", "(317,)\n", "(1886,) \n", "\n", "(317, 600, 6)\n", "(317, 600) \n", "\n", "(317, 300, 6)\n", "(317, 300) \n", "\n", "Working on 54 sample\n", "[12]\n", "[3] \n", "\n", "(317,)\n", "(1866,) \n", "\n", "(317, 600, 6)\n", "(317, 600) \n", "\n", "(317, 300, 6)\n", "(317, 300) \n", "\n", "Working on 55 sample\n", "[12]\n", "[7] \n", "\n", "(317,)\n", "(1333,) \n", "\n", "(317, 600, 6)\n", "(317, 600) \n", "\n", "(317, 300, 6)\n", "(317, 300) \n", "\n", "Working on 56 sample\n", "[12]\n", "[8] \n", "\n", "(317,)\n", "(666,) \n", "\n", "(317, 600, 6)\n", "(317, 600) \n", "\n", "(317, 300, 6)\n", "(317, 300) \n", "\n", "Working on 57 sample\n", "[12]\n", "[17] \n", "\n", "(317,)\n", "(458,) \n", "\n", "(317, 600, 6)\n", "(317, 600) \n", "\n", "(317, 300, 6)\n", "(317, 300) \n", "\n", "Working on 58 sample\n", "[13]\n", "[0] \n", "\n", "(259,)\n", "(1886,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 59 sample\n", "[13]\n", "[3] \n", "\n", "(259,)\n", "(1866,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 60 sample\n", "[13]\n", "[7] \n", "\n", "(259,)\n", "(1333,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 61 sample\n", "[13]\n", "[8] \n", "\n", "(259,)\n", "(666,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 62 sample\n", "[13]\n", "[11] \n", "\n", "(259,)\n", "(882,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 63 sample\n", "[13]\n", "[14] \n", "\n", "(259,)\n", "(500,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 64 sample\n", "[13]\n", "[15] \n", "\n", "(259,)\n", "(798,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 65 sample\n", "[13]\n", "[16] \n", "\n", "(259,)\n", "(781,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 66 sample\n", "[13]\n", "[17] \n", "\n", "(259,)\n", "(458,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 67 sample\n", "[14]\n", "[0] \n", "\n", "(500,)\n", "(1886,) \n", "\n", "(500, 600, 6)\n", "(500, 600) \n", "\n", "(500, 300, 6)\n", "(500, 300) \n", "\n", "Working on 68 sample\n", "[14]\n", "[3] \n", "\n", "(500,)\n", "(1866,) \n", "\n", "(500, 600, 6)\n", "(500, 600) \n", "\n", "(500, 300, 6)\n", "(500, 300) \n", "\n", "Working on 69 sample\n", "[14]\n", "[7] \n", "\n", "(500,)\n", "(1333,) \n", "\n", "(500, 600, 6)\n", "(500, 600) \n", "\n", "(500, 300, 6)\n", "(500, 300) \n", "\n", "Working on 70 sample\n", "[14]\n", "[8] \n", "\n", "(500,)\n", "(666,) \n", "\n", "(500, 600, 6)\n", "(500, 600) \n", "\n", "(500, 300, 6)\n", "(500, 300) \n", "\n", "Working on 71 sample\n", "[14]\n", "[11] \n", "\n", "(500,)\n", "(882,) \n", "\n", "(500, 600, 6)\n", "(500, 600) \n", "\n", "(500, 300, 6)\n", "(500, 300) \n", "\n", "Working on 72 sample\n", "[14]\n", "[13] \n", "\n", "(500,)\n", "(259,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 73 sample\n", "[14]\n", "[15] \n", "\n", "(500,)\n", "(798,) \n", "\n", "(500, 600, 6)\n", "(500, 600) \n", "\n", "(500, 300, 6)\n", "(500, 300) \n", "\n", "Working on 74 sample\n", "[14]\n", "[16] \n", "\n", "(500,)\n", "(781,) \n", "\n", "(500, 600, 6)\n", "(500, 600) \n", "\n", "(500, 300, 6)\n", "(500, 300) \n", "\n", "Working on 75 sample\n", "[14]\n", "[17] \n", "\n", "(500,)\n", "(458,) \n", "\n", "(458, 600, 6)\n", "(458, 600) \n", "\n", "(458, 300, 6)\n", "(458, 300) \n", "\n", "Working on 76 sample\n", "[15]\n", "[0] \n", "\n", "(798,)\n", "(1886,) \n", "\n", "(798, 600, 6)\n", "(798, 600) \n", "\n", "(798, 300, 6)\n", "(798, 300) \n", "\n", "Working on 77 sample\n", "[15]\n", "[3] \n", "\n", "(798,)\n", "(1866,) \n", "\n", "(798, 600, 6)\n", "(798, 600) \n", "\n", "(798, 300, 6)\n", "(798, 300) \n", "\n", "Working on 78 sample\n", "[15]\n", "[7] \n", "\n", "(798,)\n", "(1333,) \n", "\n", "(798, 600, 6)\n", "(798, 600) \n", "\n", "(798, 300, 6)\n", "(798, 300) \n", "\n", "Working on 79 sample\n", "[15]\n", "[8] \n", "\n", "(798,)\n", "(666,) \n", "\n", "(666, 600, 6)\n", "(666, 600) \n", "\n", "(666, 300, 6)\n", "(666, 300) \n", "\n", "Working on 80 sample\n", "[15]\n", "[11] \n", "\n", "(798,)\n", "(882,) \n", "\n", "(798, 600, 6)\n", "(798, 600) \n", "\n", "(798, 300, 6)\n", "(798, 300) \n", "\n", "Working on 81 sample\n", "[15]\n", "[13] \n", "\n", "(798,)\n", "(259,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 82 sample\n", "[15]\n", "[14] \n", "\n", "(798,)\n", "(500,) \n", "\n", "(500, 600, 6)\n", "(500, 600) \n", "\n", "(500, 300, 6)\n", "(500, 300) \n", "\n", "Working on 83 sample\n", "[15]\n", "[16] \n", "\n", "(798,)\n", "(781,) \n", "\n", "(781, 600, 6)\n", "(781, 600) \n", "\n", "(781, 300, 6)\n", "(781, 300) \n", "\n", "Working on 84 sample\n", "[16]\n", "[0] \n", "\n", "(781,)\n", "(1886,) \n", "\n", "(781, 600, 6)\n", "(781, 600) \n", "\n", "(781, 300, 6)\n", "(781, 300) \n", "\n", "Working on 85 sample\n", "[16]\n", "[3] \n", "\n", "(781,)\n", "(1866,) \n", "\n", "(781, 600, 6)\n", "(781, 600) \n", "\n", "(781, 300, 6)\n", "(781, 300) \n", "\n", "Working on 86 sample\n", "[16]\n", "[7] \n", "\n", "(781,)\n", "(1333,) \n", "\n", "(781, 600, 6)\n", "(781, 600) \n", "\n", "(781, 300, 6)\n", "(781, 300) \n", "\n", "Working on 87 sample\n", "[16]\n", "[8] \n", "\n", "(781,)\n", "(666,) \n", "\n", "(666, 600, 6)\n", "(666, 600) \n", "\n", "(666, 300, 6)\n", "(666, 300) \n", "\n", "Working on 88 sample\n", "[16]\n", "[11] \n", "\n", "(781,)\n", "(882,) \n", "\n", "(781, 600, 6)\n", "(781, 600) \n", "\n", "(781, 300, 6)\n", "(781, 300) \n", "\n", "Working on 89 sample\n", "[16]\n", "[13] \n", "\n", "(781,)\n", "(259,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 90 sample\n", "[16]\n", "[14] \n", "\n", "(781,)\n", "(500,) \n", "\n", "(500, 600, 6)\n", "(500, 600) \n", "\n", "(500, 300, 6)\n", "(500, 300) \n", "\n", "Working on 91 sample\n", "[16]\n", "[15] \n", "\n", "(781,)\n", "(798,) \n", "\n", "(781, 600, 6)\n", "(781, 600) \n", "\n", "(781, 300, 6)\n", "(781, 300) \n", "\n", "Working on 92 sample\n", "[17]\n", "[0] \n", "\n", "(458,)\n", "(1886,) \n", "\n", "(458, 600, 6)\n", "(458, 600) \n", "\n", "(458, 300, 6)\n", "(458, 300) \n", "\n", "Working on 93 sample\n", "[17]\n", "[3] \n", "\n", "(458,)\n", "(1866,) \n", "\n", "(458, 600, 6)\n", "(458, 600) \n", "\n", "(458, 300, 6)\n", "(458, 300) \n", "\n", "Working on 94 sample\n", "[17]\n", "[7] \n", "\n", "(458,)\n", "(1333,) \n", "\n", "(458, 600, 6)\n", "(458, 600) \n", "\n", "(458, 300, 6)\n", "(458, 300) \n", "\n", "Working on 95 sample\n", "[17]\n", "[8] \n", "\n", "(458,)\n", "(666,) \n", "\n", "(458, 600, 6)\n", "(458, 600) \n", "\n", "(458, 300, 6)\n", "(458, 300) \n", "\n", "Working on 96 sample\n", "[17]\n", "[11] \n", "\n", "(458,)\n", "(882,) \n", "\n", "(458, 600, 6)\n", "(458, 600) \n", "\n", "(458, 300, 6)\n", "(458, 300) \n", "\n", "Working on 97 sample\n", "[17]\n", "[12] \n", "\n", "(458,)\n", "(317,) \n", "\n", "(317, 600, 6)\n", "(317, 600) \n", "\n", "(317, 300, 6)\n", "(317, 300) \n", "\n", "Working on 98 sample\n", "[17]\n", "[13] \n", "\n", "(458,)\n", "(259,) \n", "\n", "(259, 600, 6)\n", "(259, 600) \n", "\n", "(259, 300, 6)\n", "(259, 300) \n", "\n", "Working on 99 sample\n", "[17]\n", "[14] \n", "\n", "(458,)\n", "(500,) \n", "\n", "(458, 600, 6)\n", "(458, 600) \n", "\n", "(458, 300, 6)\n", "(458, 300) \n", "\n", "[[[ 4.2305e-03 5.0337e-03 -2.0325e-02 -4.2764e-05 1.2474e-02\n", " -8.7965e-04]\n", " [-1.3906e-02 2.9063e-02 -2.0546e-02 -2.9549e-03 1.8303e-03\n", " -1.9847e-03]\n", " [ 2.7433e-02 4.5905e-02 -4.0888e-03 -7.7477e-03 6.2355e-03\n", " -1.5093e-03]\n", " ...\n", " [-3.0725e+00 -2.7911e+00 5.3162e-01 8.5135e-01 -1.3699e-01\n", " 5.6564e-01]\n", " [-1.9467e+00 -2.9414e+00 -1.4299e-02 9.9769e-01 -2.1398e-01\n", " 6.5887e-01]\n", " [-4.5537e-01 -2.6009e+00 -1.0866e+00 1.0066e+00 -2.5817e-01\n", " 5.4443e-01]]\n", "\n", " [[ 1.2482e-02 -8.1862e-02 7.5474e-03 -2.4319e-02 -1.0539e-02\n", " -7.9325e-03]\n", " [ 6.7856e-02 -5.4918e-02 7.1386e-02 -2.3936e-02 1.5593e-03\n", " -3.3457e-03]\n", " [ 7.8103e-02 -1.2147e-02 6.6126e-02 -2.1341e-02 2.0339e-02\n", " -5.5823e-03]\n", " ...\n", " [ 6.3593e-02 -5.2421e-01 8.8235e-01 -1.1490e+00 -1.7162e-01\n", " 3.3109e-03]\n", " [ 1.8897e-01 -4.6818e-01 6.4908e-01 -1.1930e+00 -1.9300e-01\n", " 8.1978e-03]\n", " [ 5.7390e-01 -3.5587e-01 1.0611e+00 -1.2946e+00 -9.8261e-02\n", " 8.4003e-03]]\n", "\n", " [[ 1.2127e-02 -1.4245e-02 5.9104e-02 -3.1197e-02 6.9761e-03\n", " -3.9340e-03]\n", " [ 6.2075e-02 2.1417e-02 7.1605e-02 -2.8208e-02 1.7098e-02\n", " -5.2953e-03]\n", " [ 2.2942e-02 3.8522e-02 1.1432e-02 -3.1241e-02 1.8490e-02\n", " -1.3736e-02]\n", " ...\n", " [-7.6039e-01 1.0858e+00 -1.1409e+00 -4.6425e-01 9.5936e-02\n", " -3.7481e-01]\n", " [-1.3449e+00 4.8127e-01 -1.0343e+00 -5.6259e-01 3.1796e-02\n", " -3.7481e-01]\n", " [-1.5980e+00 -3.5652e-01 -1.0850e+00 -5.5465e-01 -1.2798e-02\n", " -3.7481e-01]]\n", "\n", " ...\n", "\n", " [[-8.7649e+00 3.3890e+00 -7.2155e+00 -1.5611e+00 -1.1298e-01\n", " 1.3026e-01]\n", " [-8.7176e+00 2.6337e+00 -6.2457e+00 -1.3539e+00 2.8779e-01\n", " 1.9277e-01]\n", " [-5.6337e+00 -4.1883e-01 -3.6112e+00 -1.1712e+00 -1.3831e-01\n", " 3.3798e-01]\n", " ...\n", " [ 3.6760e+00 -6.8272e+00 -1.5986e+00 2.7165e-02 4.8450e+00\n", " -7.2727e+00]\n", " [ 5.6307e-01 2.5257e+00 -8.2712e+00 4.1453e-01 7.6321e+00\n", " -6.7581e+00]\n", " [ 6.1067e+00 -1.8245e+00 2.1541e+01 1.4560e-01 2.7643e+00\n", " -2.8827e+00]]\n", "\n", " [[-1.5986e+00 1.4603e+00 1.2430e+00 -5.6107e-01 -1.6788e-01\n", " 6.4394e-01]\n", " [-1.3621e+00 1.5820e+00 8.6106e-01 -5.9252e-01 -1.4356e-01\n", " 6.5254e-01]\n", " [-1.1157e+00 1.7275e+00 3.9126e-01 -6.2965e-01 -1.4410e-01\n", " 6.2080e-01]\n", " ...\n", " [ 2.7887e+00 -1.3365e+01 -2.9645e+00 -2.0780e+00 4.2581e-01\n", " -2.5164e+00]\n", " [ 2.3173e+00 -1.1248e+01 -2.6233e+00 -1.6051e+00 1.5487e-01\n", " -3.6662e+00]\n", " [ 3.2523e+00 -9.6261e+00 1.0537e+00 -8.0884e-01 6.5590e-02\n", " -8.1108e+00]]\n", "\n", " [[-4.0405e-01 -2.8000e+00 2.1178e-01 -1.5460e-01 -2.6517e-01\n", " -3.1268e-02]\n", " [-7.1249e-01 -1.8576e+00 -1.0162e-01 -2.4730e-01 -2.1622e-01\n", " 7.4453e-02]\n", " [-1.0638e+00 -1.6841e+00 -5.7405e-01 -3.0087e-01 -8.0685e-02\n", " 1.2186e-01]\n", " ...\n", " [-9.9416e+00 -4.3555e+00 -9.0631e+00 7.0102e-01 2.7498e+00\n", " -1.5001e+00]\n", " [-6.8988e+00 -6.8906e+00 -8.5498e+00 8.7395e-01 3.7620e+00\n", " -2.6726e+00]\n", " [-3.3552e+00 -1.0050e+01 -8.3921e+00 5.3061e-01 4.4602e+00\n", " -3.3041e+00]]]\n", "[[ 0 0 0 ... 3 3 3]\n", " [ 0 0 0 ... 3 3 3]\n", " [ 0 0 0 ... 3 3 3]\n", " ...\n", " [17 17 17 ... 14 14 14]\n", " [17 17 17 ... 14 14 14]\n", " [17 17 17 ... 14 14 14]]\n", "(62474, 300, 6) (62474, 300)\n" ] } ], "source": [ "new_signals = []\n", "new_labels = []\n", "\n", "for i in range(len(pairs)):\n", " print(\"Working on \", i, \"sample\")\n", "\n", " first = np.where(CLASS_LABELS == pairs[i][0])[0]\n", " second = np.where(CLASS_LABELS == pairs[i][1])[0]\n", " print(first)\n", " print(second, \"\\n\")\n", "\n", " first_indexes = np.unique(np.where(labels == first)[0])\n", " second_indexes = np.unique(np.where(labels == second)[0])\n", " print(first_indexes.shape)\n", " print(second_indexes.shape, \"\\n\")\n", "\n", " # minimum pre vytvorenie absolutne neduplicitnych prikladov - zabranenie overfit\n", " count = min(first_indexes.shape[0], second_indexes.shape[0])\n", "\n", " merged_signals = np.concatenate(\n", " (signals[first_indexes[:count]], signals[second_indexes[:count]]), axis=1\n", " )\n", " print(merged_signals.shape)\n", "\n", " merged_labels = np.concatenate(\n", " (labels[first_indexes[:count]], labels[second_indexes[:count]]), axis=1\n", " )\n", " print(merged_labels.shape, \"\\n\")\n", "\n", " downsample_signals = merged_signals[:, ::2, :]\n", " print(downsample_signals.shape)\n", " new_signals.append(downsample_signals)\n", "\n", " downsample_labels = merged_labels[:, ::2]\n", " print(downsample_labels.shape, \"\\n\")\n", " new_labels.append(downsample_labels)\n", "\n", "# merge all pairs into batch axis\n", "new_signals = np.concatenate(new_signals, axis=0)\n", "new_labels = np.concatenate(new_labels, axis=0)\n", "\n", "print(new_signals)\n", "print(new_labels)\n", "print(new_signals.shape, new_labels.shape)\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(20655, 300, 6) (20655, 300)\n", "(62474, 300, 6) (62474, 300)\n", "Mean: [ 0.10943159 -0.07794212 -0.0883355 0.0306053 0.00974582 0.00629569]\n", "Std: [5.192652 3.0467124 3.9461544 1.697749 1.36974 1.4093003]\n", "Max: [194.52 91.779 340.59 97.376 79.272 78.783]\n", "Min: [-172.74 -143.17 -315.89 -113.8 -85.757 -78.866] \n", "\n", "(83129, 300, 6) (83129, 300)\n" ] } ], "source": [ "print(signals.shape, labels.shape)\n", "print(new_signals.shape, new_labels.shape)\n", "\n", "# merge all pairs into batch axis\n", "final_signals = np.concatenate([signals, new_signals], axis=0)\n", "final_labels = np.concatenate([labels, new_labels], axis=0)\n", "\n", "print(\"Mean:\", np.mean(final_signals, axis=(0, 1)))\n", "print(\"Std:\", np.std(final_signals, axis=(0, 1)))\n", "print(\"Max:\", np.max(final_signals, axis=(0, 1)))\n", "print(\"Min:\", np.min(final_signals, axis=(0, 1)), \"\\n\")\n", "\n", "print(final_signals.shape, final_labels.shape)\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "image/png": "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IjfeeCM333wzGzduzLN93bp19OnThxYtWnDEEUfQt29ftmzZktvtDGFhkCpVquTmYp4xYwZt27ZN+zHkV5Ht/q593dSUl5Hp5aFEREQks4488kjatGnDyJEjuf7663O3X3311Zx44omMGzcOd6dPnz6MGjWKa665hs2bN7Ns2TLWrFlD3bp1efPNNwF4/fXXad++faYO5VcV2aBSMkcBvYiIFCU333wzLVq04NJLL83d9vzzz/Puu+9yzz33APDTTz/lTopp164db7zxBmvWrKF79+6MHTuWH374gTfeeIN77703E4eQLwoqRURERFKodu3aXHDBBdxyyy2529ydZ555JrerO1H79u15+eWXWbNmDaNGjWLhwoU899xzLFy4kGbNmqWz6ntEYypFREREUuyGG27g8ccf57///S8Ap59+OnfccQfZ2dkArFmzhkWLFgGhpfLNN99kyZIlNGzYkPbt2zN8+HBatmxZoFMmKagUERERSbFKlSpxxRVX8O233wIwcuRIypYtS9OmTTniiCNo164dS5YsAaBKlSpUqVKF4447DoBWrVrx3//+l3bt2mWq+vmi7m8REREpnPKZTzJVcoLEHEOGDGHIkCG5j8eMGbPL3507d27u/8uXL8+WLVuSXr9kU0uliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2pRQSERGRQunwSYen5HXn9ZiXr/22bNnCkCFDeOaZZyhZsiQlSpRg0KBB9OjRY6f7Dx06lEMPPZRu3brt9nVffPFF3nrrLUaOHLnHdc8xffp0rrrqKubMmfObX2N7CipFREREUqBnz55s3ryZjz/+mHLlyrFkyRI6depEdnY2F198cZ59s7Ozuemmm/L1ul26dKFLly6pqHIs6v4WERERSbKFCxfy/PPPM3bsWMqVKweENcDvvvtuhg8fzvTp02nSpAkXX3wxTZs25bnnnqNnz57ce++9AKxbt45zzz2Xww47jBNPPJFLLrmEnj17AjBx4kROP/10ILQ4ZmVl0a9fP4488kiaNGnChx9+CIRAtWPHjjRr1owmTZpwwQUXsGHDhpQds4JKERERkSSbPXs2DRo0oGLFinm2H3fccXz99desWrWK+fPnc+GFFzJnzhy6du2aZ7+bbrqJsmXLMn/+fF555RXeeeedXZa1YMECevTowccff8yAAQO4/vrrAShevDiTJ0/mww8/5JNPPqFChQrcd999yT/YiIJKERERkQyoW7curVq12ulzb775JhdddBFmxr777su55567y9epX78+xx57LBCC1i+//BIAd2fkyJEcddRRHHHEEUydOjWpYyi3p6BSREREJMmOOuooFi5cyOrVq/Nsf/fdd6lZsyaVK1emfPny+X49M9vlc2XKlMn9f/HixcnOzgZg8uTJTJs2jbfffpt58+YxaNAgNm3atIdHkn8KKkVERESSrEGDBpx22mn07duXjRs3ArBkyRKuvvpqhgwZ8qu/37ZtWyZNmoS7s379ep566qk9rsOaNWuoVKkS++23H+vWrWPixIl7/Bp7QkGliIiISAo89thj1K1bl8MPP5xGjRrRuXNnrrnmGvr06fOrvzt06FDWrVtHo0aNOPnkkznyyCPZf//996j8Cy+8kI0bN3LooYfSqVMnTjzxxN94JPlj7p7SAvKrRo0avnz58rSVV/u6qSkvY8ntp6a8jL2R3nsREUmmbdu28cUXX9CwYUOKFy+e6eokxdatW9m2bRtlypRhw4YNdOzYkQEDBux2bGWy7O79NLNv3L3Gzn5PeSpFRERECpg1a9bQqVMntm3bxqZNm/jDH/7AOeeck+lq7ZaCShEREZEC5qCDDmLWrFmZrsYe0ZhKEREREYlNQaWIiIjs1XaXbkd+uz19XxVUioiIyF7NzDAztm7dmumqFApbt27NfU/3hMZUioiIyF7NzNh///1ZuXIl1atXV8tlDO7OypUr2X///RVUioiISNFz0EEHsXTpUhYuXJjpquz1ypQpw0EHHbTHv6egUkRERPZ6xYoVo06dOvz8888UlBzceyMzo1ix3zY6UkGliIiIFBq/NSCS+PTOi4iIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkSS7o477qBhw4YUK1YMM2P69Om5z7344otkZWVRunRp6tSpw8MPP/yrr/fDDz9Qq1YtzIzf/e53udvHjx9P1apVOfDAA7n11ltzt8+YMYP69evz008/JfW4RERk1xRUikjSbdq0ic6dO1OrVq082xctWsRZZ53Fhg0bGDVqFJUrV+bSSy/ljTfe2O3r9e3blzVr1uxQRr9+/WjZsiVdu3blhhtu4KuvvmLz5s307duX+++/n7Jlyyb92EREZOcUVIpI0g0bNox77rmHqlWr5tn+8MMPk52dzcCBA7n00ku55ZZbALjvvvt2+VoTJkzg5Zdf5o477sizfdOmTWzdupVjjjmGli1bArBu3TpuueUWjjnmGDp27JjkoxIRkd0pkekKiEjRsXDhQoDcFsxDDjkEgC+++GKn+y9atIgrrriCu+++m0aNGuV5bv/99+fCCy9k8ODBALRr1w4zY9y4ccydOzdVhyAiIruglkoRyRh33+3zffr0ISsri9///vd88803AGzevJnFixcDMGnSJObNm8esWbN49dVXueSSS7j11lv58MMPycrKom7duju0cIqISGqopVJE0qZBgwYALF26FIBly5bl2Z6dnU12djYlSpSgRIkSLF68mKVLl+Y+DzBnzhyOOuoofvjhBwCysrIAGDNmDKVKlaJXr15Ur16dvn37ctJJJ9GuXTvOPPPMPK8hIiLJp6BSRJJuxowZfPHFF6xatQqAqVOnsmjRIvr27cvIkSMZOXIkpUuX5pFHHgFgwIABANxyyy0MHz6ca6+9lttvv50HH3yQDRs2APDpp59y44030qBBA+6666485S1fvpzhw4fzr3/9CzNj27ZtzJgxg++++w6Abdu2pevQRUSKLAWVIpJ0jz76KJMmTcp9nBMEujtPP/00119/PQMGDODggw/m/vvv5/e///1OX6dTp065/69UqRIABx54IF26dMmzX79+/ejfvz+HHXYYEFotr7rqKmbNmsVf/vKX3O0iIpI69mtjmtKlRo0avnz58rSVV/u6qSkvY8ntp6a8jL2R3nsREZG9k5l94+41dvacJuqIiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU2zv0UkLdIxQQs0SUtEJFPUUikiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiS1fQaWZlTGz583sCzP72MxeN7P6O9mvtpltM7M5CT/1kl9tERERESlISuzBvmOBf7i7m9nlwHig9U72W+fuTZNQNxERERHZS+SrpdLdN7n7K+7u0ab3gNopq5WIiIiI7FV+65jKK4EXdvFcOTP7j5l9ZGZDzaz4byxDRERERPYSexxUmtlgoD7wl508/S1Q3d2bA+2BE4Grd/E6A81sec7P+vXr97QqIiIiIlJA7FFQaWaDgDOBTu6+cfvn3X2zu38X/f974FFCYLkDd7/H3Wvk/JQvX37Pay8iIiIiBUK+g0ozGwicD/ze3X/YxT4HmVnJ6P+lCQHo7CTUU0REREQKsPymFKoB3A3sD7wVpQp6P3ruJjO7NNq1JTDbzD4GPgJWALcmvdYiIiIiUqDkK6WQuy8HbBfPDU34/7PAs8mpmoiIiIjsLbSijoiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhJbiUxXIFOWlLkgDaX8mIYy9j5670VERAoftVSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisZXIdAVEpGhYUuaCNJX0Y5rKERGRRGqpFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIikzYcIEmjRpQtmyZTnggANo3749c+fO3e3vDBgwADPDzFiwYAEACxcupEWLFpQrV4727duzevVqALZs2ULjxo157bXXUn4sIrJ7CipFRCQlvvrqK3r16sWyZcu45557OP3003nzzTe59NJLd/k7U6dO5aGHHqJMmTJ5tt98882sWLGCW2+9lffff5/Ro0cDMGLECJo2bUrHjh1Teiwi8usUVIqISEr8/PPPmBn77bcf7du357jjjgPgwAMP3On+K1eupFevXgwePJgqVarkeW7dunVUq1aNjh07sv/++7N27Vrmz5/PQw89xMiRI1N+LCLy6xRUiohIStSvX5+HH36YVatW0bBhQy655BIOP/xwJkyYsMO+7k7Pnj2pX78+Q4cO3eH5vn378vHHH9O4cWPWr19Pjx496NOnD7fccssOAaiIZIaCShERSYnvv/+e2267jX333ZcnnniCwYMHM2/evJ12fz/22GNMmzaNG2+8kcWLF5OdnQ3AsmXL2LBhA506dWLZsmXMnDmTxYsX8+6771KsWDG6dOnCaaedRs2aNTnttNNyx1qKSPopqBQRkZSYNm0aixcvpmXLlpx33nnccMMNALz44ou4O5s2bWLz5s0ALF68mC1bttChQwcaNGjAN998A0DHjh15/fXXATjooIM4/vjj2bhxI8OGDePhhx/m3nvv5fPPP2fBggXMnz9fXeEiGVQi0xUQEZHCqUGDBpgZb731FmPGjOHTTz8FICsri6VLl1KnTh2qVKnCihUrOOecc8jKysr93X79+rFq1SpGjRpFixYt8rxu//79ueyyy2jUqBHbtm1j5cqVjBs3jlWrVuW2cIpI+imoFBGRlDjyyCN55JFHuPvuu/nzn/9MmTJl6NSpE/fcc88O+zZu3JjGjRvnPh40aBAAHTp04OCDD87d/uyzz/LZZ58xZcoUAK688kpmzpzJ4MGDOeaYY7jyyitTfFQisivm7pmuAwA1atTw5cuXp6/AGyukoYwfU1/G3kjvfdGUjr876G8vIpJCZvaNu9fY2XMaUykiIiIisSmoFBEREZHYFFSKiIiISGyaqCMiIilV+7qpKS9jye2nprwMEdk9tVSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGLLV1BpZmXM7Hkz+8LMPjaz182s/i727WxmC8xsoZk9a2b7JbfKIiIiIlLQ7ElL5VjgUHc/EngBGL/9DmZWHngEON3dGwD/BYYko6IiIiIiUnDlK6h0903u/oq7e7TpPaD2TnbtBMx29wXR4weA82PXUkREREQKtN86pvJKQmvl9moBSxMeLwGqmVmJ31iOiIiIiOwF9jjYM7PBQH2gXZyCzWwgMDDncYUKFeK8nIiIiIhk0B61VJrZIOBMoJO7b9zJLsuAQxIe1wa+dffs7Xd093vcvUbOT/ny5fekKiIiIiJSgOQ7qIxaFs8Hfu/uP+xit1eBo83ssOhxP2BKrBqKiIiISIGXr+5vM6sB3A18BbxlZgCb3f1YM7sJ+K+7P+Tu68ysN/B8NI7yE6BHiuouIiIiIgVEvoJKd18O2C6eG7rd4xeBF+NXTURERET2FlpRR0RERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUikihNn36dMxsh5/atWvvdP/atWvvsO/zzz8PwMsvv0zt2rWpUKEC/fr1y/2dhQsXUq1aNVasWJGGIxIp+PS9K5pKZLoCIiKp1LhxY5544oncx88//zxPPvkkxx577C5/p1GjRgwdOjT3cfPmzQHo168f9erVo1u3bowYMYKuXbvSpk0b+vbty/Dhw6latWrqDkRkL6LvXdGkoFJECrWDDjqI8847DwB358YbbwTgmmuu2e3vnHrqqZQvXx4zy92+bt06GjduTPv27RkxYgRr167lkUceYevWrfTp0yelxyGyN9H3rmhS97eIFBkvv/wyn3/+Oa1ataJZs2a73G/GjBnst99+lC1bljPPPJNVq1YBcMUVV/DAAw/Qtm1bsrKyyMrK4vrrr2fs2LF5LoIi8gt974oOtVSKSJFx9913A7tvLenVqxcNGjSgXLly3H///Tz33HPss88+PP744wwfPpzu3bvz/fff07RpU7p3706fPn1Yv349zZs3Z9WqVZxxxhncc889utiJRPS9KzoUVIpIkTBr1izefvttGjduzCmnnAKEbrnNmzdjZpQuXRogz5iuqlWr8s9//pO5c+fmbqtfvz4QWl9mz57NpEmTaNu2LU2aNGHo0KHUq1ePU089lfbt26fx6EQKpkx876ZPn06bNm12qMshhxzCkiVLdlnXAQMGMGbMGADmz5/PYYcdxsKFC+nWrRuffvopxx13HE8++SQVK1Zky5YtNG3alJEjR9KxY8fY71NhoaBSRIqEu+66C4Crr746tzVj6dKl1KlThypVqrBixQrmzp3LoEGD6NSpExUqVOCRRx4BoGXLlnlea/369fTv358JEyZQpkwZtm3bxpw5c5gwYQIA2dnZaTwykYIrE9+73zJJaOrUqTz00EOUKVOGTZs25W6/+eabWbFiBbfeeitDhgxh9OjRDB8+nBEjRtC0aVMFlNvRmEoRKfSWLVvG008/TdWqVfnjH/+4y/0qV65MmTJluOOOO7jssstYvnw5V111Ve6FMcfgwYNp06YNbdu2BeDOO+9kw4YNjBw5kp49e9KhQ4eUHo/I3iBT37ucSULnnXce5557LnPmzAF23f2+cuVKevXqxeDBg6lSpUqe59atW0e1atXo2LEj+++/P2vXrmX+/Pk89NBDjBw58re+NYWWuXum6wBAjRo1fPny5ekr8MYKaSjjx9SXsTfSe180pePvDvrbF0C1r5ua8jKW3H5qysuQvc9LL71Ely5daNWqFdOnT9/heXfnlFNOYe3atcyYMYN69eqxdOnS3O7vf/zjH5xxxhls3ryZ/fffn7feeovLL7+cnj170rt37/QfUAFgZt+4e42dPaeWShERESmUfm2S0GOPPca0adO48cYbWbx4cW4X+rJly9iwYQOdOnVi2bJlzJw5k8WLF/Puu+9SrFgxunTpwmmnnUbNmjU57bTTWL16ddqOqSBTUCkiIiKFzq4mCW3atInNmzcDsHjxYrZs2UKHDh1o0KAB33zzDQAdO3bk9ddfB0J3+vHHH8/GjRsZNmwYDz/8MPfeey+ff/45CxYsYP78+eoKj2iijogUCeqCFUm/TH7v8jNJ6JxzziErKyv3d/r168eqVasYNWoULVq0yPN6/fv357LLLqNRo0Zs27aNlStXMm7cOFatWqXJeREFlSIiIlKo5HeSUOPGjWncuHHu40GDBgHQoUMHDj744Nztzz77LJ999hlTpkwB4Morr2TmzJkMHjyYY445hiuvvDJFR7J3UVApIiIihUqtWrXYunXrDttr167N7iYo7yqP5ZlnnsmZZ56Z+/jggw/m3//+d+x6FjYaUykiIiIisSmoFBEREZHY1P0tIiIihU46JgmBJuglUlApIiIptaTMBWkoRUnvRTJN3d8iIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEluJTFdARCQdlpS5IA2l/JiGMkRECia1VIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKU+liIiIpITywxYtaqkUERERkdgUVIqIiIhIbAoqRURERCQ2jakUERGRQic94zlBYzp/oZZKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhs+QoqzWy0mS0xMzezprvYp7WZ/WRmcxJ+yia1tiIiIiJSIJXI535PA3cC//6V/T5396axaiQiIiIie518BZXuPgPAzFJbGxERERHZKyV7TGU9M/vIzP5jZv2S/NoiIiIiUkDlt/s7Pz4Carj7j2ZWA3jFzP7n7k/tbGczGwgMzHlcoUKFJFZFRERERNIpaS2V7r7W3X+M/r8ceAI4cTf73+PuNXJ+ypcvn6yqiIiIiEiaJS2oNLNqZlYs+v++QGdgdrJeX0REREQKrvymFHrYzJYDNYDXzGxRtH28mXWJdjsLmGdmHwPvAa8DE1JQZxEREREpYPI7+/uSXWzvnfD/McCYJNVLRERERPYiWlFHRERERGJTUCkiIlII1a5dGzPL8/P888/vsN/EiRN32M/MaN26NQAvv/wytWvXpkKFCvTr90u2wIULF1KtWjVWrFiRpiOSgi6ZKYVERESkAGnUqBFDhw7Nfdy8efMd9mnVqhVPPPFE7uNx48Yxbdo0jj32WAD69etHvXr16NatGyNGjKBr1660adOGvn37Mnz4cKpWrZr6A5G9goJKERGRQuqggw7i1FNPpXz58rtcFa9OnTrUqVMHgA0bNtCvXz9KlSrFlVdeCcC6deto3Lgx7du3Z8SIEaxdu5ZHHnmErVu30qdPn7QdixR86v4WEREppGbMmMF+++1H2bJlOfPMM1m1atVu93/00UdZs2YN559/PgcffDAAV1xxBQ888ABt27YlKyuLrKwsrr/+esaOHavlmyUPtVSKiIgUQr169aJBgwaUK1eO+++/n+eee4599tmHxx9/fKf7//zzz9x7770ADBo0KHf78OHD6d69O99//z1Nmzale/fu9OnTh/Xr19O8eXNWrVrFGWecwT333KMgs4hTUCkiIlIIJY6lrFq1Kv/85z+ZO3cuP//8M1u2bKFYsWKUKlUqd59nn32Wr776ipNPPpmsrKw8r1W/fn0gTNqZPXs2kyZNom3btjRp0oShQ4dSr149Tj31VNq3b5+eg5MCSd3fIiIihczcuXPp0KEDI0eO5NFHH+VPf/oTAC1btmTGjBmULVuWk046Kc/v3H333QBcc801O33N9evX079/fx566CHKlCnDtm3bmDNnDhMmhHVOsrOzU3hEsjdQUCkiIlLIVK5cmTJlynDHHXdw2WWXsXz5cq666iruuuuune7/zjvv8N5773H00UfTtm3bne4zePBg2rRpk/v8nXfeyYYNGxg5ciQ9e/akQ4cOKTse2Tuo+1tERKSQqVatGi+++OJOn2vdujXunmfb8ccfv8O27Y0ePTrP41atWrFw4cJ4FZVCRS2VIiIiIhKbgkoRERERiU3d3yIiIoVU7eumpryMJbefmvIyZO+glkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisZXIdAVEREQkNZaUuSANpfyYhjJkb6CWShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiKTBgwADMDDNjwYIFO92ndevWufvk/Nx7770AvP/++zRu3Jjy5cvTtWtXNm/eDMDq1aupXr06n3zySboOJV9KZLoCIiIiIoXN1KlTeeihhyhTpgybNm3a7b6VKlXivvvuy3189NFHA3DNNddQsmRJhg0bxrXXXsspp5zCRRddxNVXX02PHj3IyspK6THsKQWVIiIiIkm0cuVKevXqxeDBg5k0aRJLly7d7f7lypWjc+fOlC1bluLFi+duX7duHXXq1KFDhw4MHTqUtWvX8sYbbzBz5kzmzp2b6sPYY+r+FhEREUkSd6dnz57Ur1+foUOH5ut3li1bxr777kuZMmVo164dixYtAqB///689NJLNG3alIoVK9K5c2cuvfRSHnzwQcqWLZvKw/hNFFSKiIiIJMljjz3GtGnTuPHGG1m8eDHZ2dlACBw3bNiww/5nnHEGEydO5KWXXuKcc85h2rRp9OzZE4DevXuzZMkS3n33XT7//HPGjh3LcccdR+3atWndujW1atWie/fuuWMtM03d3yIiIiJJsnjxYrZs2UKHDh3ybO/YsSPPPfccJ598MgBlypQB4Morr8zdp0WLFkyePDlP13bNmjWpWbMmc+bMYdKkScybN48rr7ySYsWKMW/ePKpXr06rVq3o3bt3Go5u99RSmSH5mRGW4+67787d99VXXwVg1apVtGvXjnLlynHsscfy5Zdf5u7fvn17Hn744ZTWX0RERHZ0zjnn8Pe//z33p3LlygCMGjWKFi1aULZsWcqWLcumTZv48ccfOf7447nzzjuZOHEivXr1AqBly5Z5XnPbtm306dOH2267jcqVK7Nt2zYWLVrE+PHj2bhxY25raKYpqMyAxBlhv2bOnDkMHjyYcuXK5dl+33338eGHHzJixAi++eYbbrrpJgAmTpzIpk2b6Nu3b0rqLiIiIrvWuHFjzj777NyfffbZB4AOHTpw8MEH59m3dOnS1KxZk9GjR3PJJZfw0UcfcdFFFzFp0qQ8+40aNYry5ctz0UUXATBkyBAOOOAAhg4dyimnnEL37t3Tc3C/Qt3fabYnM8I2btzI+eefz3nnncfSpUt5++23c59bt24dFSpUoEOHDjz++OOsXbuW7777jr/85S+88cYbmFk6DkdERER2Y8mSJXkeu3uex08++eSvvsbAgQMZOHBg7uOsrCw+/vjjpNQvmdRSmUZ7OiNs4MCBbN26lTFjxuzwXI8ePVi7di2NGzfmk08+4dJLL+Wqq67i4osvpkmTJqmovoiIiMguqaUyjXJmhL388ss7zAirWbNmni7u6dOnM3bsWB5//HFWrlzJTz/9BMC3337Ljz/+SNOmTVmyZAmfffYZ9evXZ9asWXz44Yfcf//9dOvWjX/961/Uq1ePRx55hLp162bkeEVERIqq2tdNTXkZS24/NeVl7Am1VKZR4oywBg0a8M033wBhRtjrr7/Opk2bcrPuL1myBHenW7duNGjQgA8++ACAXr16MWHCBAD2339/jj/+eMqVK8dll13Ggw8+yN///ndeeOGF3KWbdtUimp+JQt27d6dy5cqUKlWKKlWq0L17d3744Qdg71s6SkRERFJLQWUa7cmMsDZt2uTZt3HjxgBcf/31dO7cOc/r3nDDDbRq1Yp27dqxbds2Nm7cyLhx4/jyyy93OiMsvxOF6tWrx0033cTYsWOpW7cujz/+OLfeeiuQd+moZ555hsmTJwMU2KWjREREJLXU/Z1GjRs3zg0OAQYNGgTsfEbYIYccwiGHHJL7OGdcZcuWLalfv37u9v/85z9MnjyZTz/9FAitiy+//DJDhw6lQYMGO7RU7slEoRtvvJEff/yRtWvX8vbbb/Pee+/lTgDa25aOEhERkdRSUJlBvzYjLNH06dN3ur158+asXLky93H58uWZOnXn4zi2nyi0fcqCnWnXrh2zZs3K/f/1118PhKWjLrnkEl544QWqV69O586d6dixIw899FCBXDpKREREUkvd30XIni4dBfDAAw/w3HPP0aFDB958883c8Zx729JRIiIiklpqqcyAdMwIgx1nhe3p0lEQlowCOPjgg/nnP//JI488wlVXXQXsXUtHiYiISGopqCxCzjnnnDwTaPr168eqVavyTBQC+Omnn1i0aBFDhgyhffv2lClThkcffRSAI488Ms9r7i1LR4mIiEhqKagsQvZkotC+++7Lt99+y+DBg9m0aRNVq1alX79+3HbbbXn229nSUd26dStwS0eJiIhIaimoLMJ2N1HokEMO4b333vvV19hblo4SERGR1NJEHRERERGJTS2VRVBRXDpKREREUkstlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxJavoNLMRpvZEjNzM2u6m/0uNrOFZvalmY0zs5JJq6mIiIiIFFj5bal8GmgJLN3VDmZWB7gZOBGoD1QB+satoIiIiIgUfPkKKt19hrsv/5XdzgZedPcV7u7AQ8D5cSsoIiIiIgVfMsdU1iJvS+aSaNtOmdlAM1ue87N+/fokVkVERERE0qlEpgp293uAe3Ie16hRwzNVFxEREZFkWlLmgjSU8mMaysi/ZLZULgMOSXhcO9omIiIiIoVcMoPKZ4AuZlbVzAy4FJiSxNcXERERkQIqvymFHjaz5UAN4DUzWxRtH29mXQDc/StgGDATWASsAh5OSa1FREREpEDJ15hKd79kF9t7b/d4HDAuCfUSERERkb2IVtQRERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKZImbdq04YADDqBUqVLUqFGDAQMGsHnz5t3+TpcuXTAzzIxNmzYB8P7779O4cWPKly9P165dc19j9erVVK9enU8++STlxyIiIrI9BZUiadK0aVPuvPNOHnjgAfbdd1/GjBnD+PHjd7n/Aw88wFtvvbXD9muuuYaSJUsybNgwnnnmGSZPngzA1VdfTY8ePcjKykrZMYiIiOyKgkqRNBk5ciRnnXUWbdu25ZBDDgHAzHa672effcagQYMYPXr0Ds+tW7eOOnXq0KFDB0qXLs3atWt54403mDlzJkOGDEnpMYiIiOyKgkqRNGrYsCH16tXjtddeo1u3bvTu3XuHfTZv3swFF1zAaaedxkUXXbTD8/379+ell16iadOmVKxYkc6dO3PppZfy4IMPUrZs2XQchoiIyA4UVIqk0bPPPsuTTz5J8+bNmTJlCi+99NIO+9x+++0sW7aMa665hkWLFuVu/+qrr9iyZQu9e/dmyZIlvPvuu3z++eeMHTuW4447jtq1a9O6dWtq1apF9+7df3W8poiISDKVyHQFRIqSk046Kff/5557LhMnTuSMM85gy5YtFCtWjFKlSrF48WLWrFlD8+bN8/xukyZNmD17Nk2bNqVmzZrUrFmTOXPmMGnSJObNm8eVV15JsWLFmDdvHtWrV6dVq1Y7bQkVERFJBQWVImnw6quvMnnyZE444QTcnfvuuw+AI488khkzZtCmTRuOPfZY3nvvPS6//HI6d+6c+7tdu3YFYPLkydSpUyd3+7Zt2+jTpw+33XYblStXZtu2bSxatIjx48ezceNGsrOz03uQIiJSpCmoFEmDSpUqMW/ePJ577jmys7OpXr061113HcOGDWPmzJl59m3WrBnNmjXb4TXOOOMMypQpk/t41KhRlC9fPnfc5ZAhQ+jWrRtDhw7llFNOoXv37qk9KBERkQQKKkXSoFmzZsyePXunz7Vu3Rp33+Xv7uq5gQMHMnDgwNzHWVlZfPzxx/EqKiIi8htpoo6IiIiIxKaWSpE0qn3d1JSXseT2U1NehoiIyPbUUikiIiIisSmoFBEREZHYFFSKiIiISGwKKkVERFKgTZs2HHDAAZQqVYoaNWowYMCAXa509ac//YnatWtjZpgZS5YsyX3u5Zdfpnbt2lSoUIF+/frlbl+4cCHVqlVjxYoVqT4UkXxRUCkiIpICTZs25c477+SBBx5g3333ZcyYMYwfP36n+27dupXzzz+f/fbbb4fn+vXrR506dbj88st58MEHeeuttwDo27cvw4cPp2rVqik9DpH8UlApIiKSAiNHjuSss86ibdu2HHLIIQCY2U73HTNmDLfddhtly5bd4bl169bRuHFj2rdvD8DatWt55JFH2Lp1K3369EndAYjsIaUUEhERSZGGDRuyevVqALp160bv3r33+DWuuOIKbrrpJh544AGysrLIysrihBNOYNq0absMUkUyQS2VIiIiKfLss8/y5JNP0rx5c6ZMmcJLL720x68xfPhwFi5cyPvvv8+sWbMYPHgwffr0Yf369TRv3pzatWvzpz/9abcrc4mkg1oqRUREUuSkk07K/f+5557LxIkTOeOMM9iyZQvFihWjVKlS+Xqd+vXrA2HSzuzZs5k0aRJt27alSZMmDB06lHr16nHqqafmdpGLZIKCShERkSR79dVXmTx5MieccALuzn333QfAkUceyYwZM2jTpg3HHnss7733HgBTp07l22+/5aeffgLgySefpHbt2px77rm5r7l+/Xr69+/PhAkTKFOmDNu2bWPOnDlMmDABgOzs7DQfpUheCipFRESSrFKlSsybN4/nnnuO7OxsqlevznXXXcewYcOYOXPmDvv/3//9H2+//Xbu4+uuu45DDjkkT1A5ePBg2rRpQ9u2bQG488476d27NyNHjqRnz5506NAh9QcmshsKKkVERJKsWbNmzJ49e6fPtW7deofxj9OnT//V1xw9enSex61atWLhwoW/uY4iyaagUkREJEVqXzc1LeUsuf3UtJQjsjua/S0iIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEpqBSRERERGJTUCkiIiIisSmoFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpRQJa9as4Q9/+AM1a9akTJky1KpVi+uvv56ff/55p/u7O3fddRcNGjSgVKlSVKlSheuuuw6AhQsX0qJFC8qVK0f79u1ZvXo1AFu2bKFx48a89tpraTsuERGRgqJEpisgkg4//vgj8+fPp2/fvlSuXJnbbruNESNGULVqVQYMGLDD/jfccAMjRoygRYsWXHPNNWzYsIE1a9YAcPPNN7NixQpuvfVWhgwZwujRoxk+fDgjRoygadOmdOzYMd2HJyIF1JIyF6SppB/TVI7IrimolCKhRo0azJ8/n+LFiwOwefNmrrrqKubMmbPDvhs3bmTkyJGUL1+e1157jVKlSrHPPvvkPr9u3TqqVatGx44dufvuu1m7di3z58/noYce4uOPP07XIYmIiBQo6v6WIqFEiRK5AeXPP//M1KlTAWjfvv0O+3766af89NNPlC5dmqysLMqVK0fNmjV59tlnAejbty8ff/wxjRs3Zv369fTo0YM+ffpwyy23UKVKlfQdlIiISAGioFKKlM2bN3PBBRfw+uuvc8UVV3D++efvsE9O8Ll69Wp69+7NpEmTWLVqFRdccAGrV6+mU6dOLFu2jJkzZ7J48WLeffddihUrRpcuXTjttNOoWbMmp512Wu5YSxERkaJAQaUUGT/88AMdO3bkySefZNiwYYwaNQoIk3I2bdrE5s2bAahbty7FioWvxnXXXceFF17IYYcdxubNm1m2bBkABx10EMcffzwbN25k2LBhPPzww9x77718/vnnLFiwgPnz5zNy5MjMHKiIiEgGaEylFAnr16+nZcuWfPrpp5x88skcdthhTJkyhYMOOoi6detSp04dqlSpwooVK9h///3p1q0bf/3rX/nzn/9M7dq1+fTTTzn44INp1KhRntft378/l112GY0aNWLbtm2sXLmScePGsWrVKrKzszN0tCIiIumnoFKKhP/97398+umnALz66qu8+uqrALRq1YqJEyfusP99992HmfHYY4/h7rRp04a77rqLMmXK5O7z7LPP8tlnnzFlyhQArrzySmbOnMngwYM55phjuPLKK1N/YCIiIgWEgkopEmrXro277/L57Z+rUKECkyZN2u1rnnnmmZx55pm5jw8++GD+/e9/x6uoiIjIXkpjKkVEREQkNrVUSpFy+KTD01LOvB7z0lKOiIhIQaGWShGRQmpPlyfNMWDAAMwMM2PBggWAlicVkV+noFJEpJBKXJ703nvvxcwYMWIE999//y5/Z+rUqTz00EN5JqVB3uVJ33//fUaPHg2g5UlFJJe6v0VECqk9WZ4UYOXKlfTq1YvBgwczadIkli5dmvuclicVkV+jlkoRkUJqT5YndXd69uxJ/fr1GTp06A7Pa3lSEfk1CipFRAq5/CxP+thjjzFt2jRuvPFGFi9enJu8f9myZWzYsEHLk4rIr1JQKSJSiOV3edLFixezZcsWOnToQIMGDfjmm28A6NixI6+//jqg5UlFZPcUVIqIFFI5y5O+/fbbeZYnnTZtGkuXLqVs2bIccsghAJxzzjn8/e9/z/2pXLkyAKNGjaJFixZ5XndvWZ50T2e/t2nThgMOOIBSpUpRo0YNBgwYkBt0v/zyy9SuXZsKFSrQr1+/3N9ZuHAh1apVY8WKFWk5JpGCTBN1REQKqT1ZnrRx48Y0btw49/GgQYMA6NChAwcffHDu9r1pedLE2e+VK1fmtttuY8SIEVStWpUBAwbssH/Tpk254IILMDPuvvtuxowZw2GHHUb//v3p168f9erVo1u3bowYMYKuXbvSpk0b+vbty/Dhw6latWoGjlCkYFFQKSJSSO3p8qSJlixZstPte9PypHs6+33kyJF8//33/PDDDzz99NMsWLAAMwPC7PfGjRvTvn17RowYwdq1a3nkkUfYunUrffr0SdchiRRoCipFRAq52tdNTUs5S24/NS3l5FeJEr9c4n5t9nuOhg0b5k426tatG7179wbgiiuu4KabbuKBBx4gKyuLrKwsTjjhBKZNm5YbeIoUdRpTKSIihVp+Zr/nePbZZ3nyySdp3rw5U6ZM4aWXXgJg+PDhLFy4kPfff59Zs2YxePBg+vTpw/r162nevDm1a9fmT3/6025bf0UKO7VUiohIofXDDz9w+umn8/bbbzNs2DBuvPFGIHT9b968GTOjdOnSufufdNJJuf8/99xzmThxImeddRYA9evXB8KkndmzZzNp0iTatm1LkyZNGDp0KPXq1ePUU0/dbUuoSGGmoFJERAqlnNnvn376aZ7Z7wcddBB169alTp06VKlShRUrVvDqq68yefJkTjjhBNyd++67D4Ajjzxyh9fs378/EyZMoEyZMmzbto05c+YwYcIEgAI1+10k3RRUiohIobQns98rVarEvHnzeO6558jOzqZ69epcd911DBs2LM9+gwcPpk2bNrRt2xaAO++8k969ezNy5Eh69uxJhw4dUn9gIgWUxlSKFAF7mq/vjjvuoGHDhhQrVgwzY/r06bnPvf/++zRu3Jjy5cvTtWvX3Dx+q1evpnr16nzyySfpOCSRX5Uz+337n+nTp+c+l5NfslmzZsyePZt169bx008/sWjRIm677TZKliyZ5zVHjx6dJyBt1aoVCxcuZP369UyYMIFixXRZlaJLLZUiRcCe5uvbtGkTnTt35tlnn2Xp0qV5nrvmmmsoWbIkw4YN49prr+WUU07hoosu4uqrr6ZHjx5kZWWl67BE8iUds98L2sx3kUwoskHl4XVqpbyMeSkvQSR/9jRfX06X3zvvvLNDULlu3Trq1KlDhw4dGDp0KGvXruWNN95g5syZzJ07N6XHISIiBVeRDSozad9G16WppIJ556yAPv1+S76+Xenfvz+XXHIJL7zwAtWrV6dz58507NiRhx56iLJlyyatziIisnfR4A+RImRP8vXtSu/evVmyZAnvvvsun3/+OWPHjuW4446jdu3atG7dmlq1atG9e/fcsZYiIlI0qKVSpIjY03x9u1OzZk1q1qzJnDlzmDRpEvPmzePKK6+kWLFizJs3j+rVq9OqVavc1UhERKTwU1ApkkbpGfqw47CHPcnXBzBjxgy++OILVq1aBcDUqVNZtGhRniBx27Zt9OnTh9tuu43KlSuzbds2Fi1axPjx49m4caPy9YmIFDEKKougTAU2kjl7kq8P4NFHH2XSpEm5j++66y6APEHlqFGjKF++PBdddBEAQ4YMoVu3bgwdOpRTTjmF7t27p+pwRESkAFJQKVIE5OTk25Xtn5s4ceJOg81EAwcOZODAgbmPs7Ky+Pjjj2PVU0RE9l4KKkWKkMMnHZ7yMub10Nx7EZGiSLO/RURERCS2fAeVZtbAzN4xsy/M7D9m1mQn+7Q2s5/MbE7CjxLXiYiIiBRye9L9/TAw1t0nmtnZwESg+U72+9zdmyahbiIiIiKyl8hXS6WZHQQ0Ax6PNj0D1DSz+qmqmIiIiIjsPfLb/V0T+NbdswE8TBVdBuxsvb16ZvZR1EXeL0n1FBEREZECLNmzvz8Carj7j2ZWA3jFzP7n7k9tv6OZDQRy85FUqFAhyVURERERkXTJb0vl10A1MysBYGZGaKVclriTu6919x+j/y8HngBO3NkLuvs97l4j56d8+fK/9RhEREREJMPyFVS6+3eEVsg/RpvOApa7+6LE/cysmpkVi/6/L9AZmJ286oqIiIhIQbQneSovAS4xsy+A64CLAMxsvJl1ifY5C5hnZh8D7wGvAxOSWF8RERERKYDyPabS3T8HjtvJ9t4J/x8DjElO1URERERkb6FlGkVEpFBbUuaCNJTyYxrKECnYtEyjiIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbAoqRURERCQ2BZUiIiIiEpuCShERERGJTUGliIiIiMSmoFJEREREYlNQKSIiIiKxKagUERERkdgUVIqIiIhIbCUyXQERKRoOr1MrLeXMS0spIiKyPbVUioiIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEpqBQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISW4lMV0BERFJr30bXpamkU9NUjogURGqpFBEREZHYFFSKiIiISGwKKkVEREQkNgWVIiIiIhKbgkoRERERiU1BpYiIiIjEppRCIiKSUofXqZXyMualvAQR+TVqqRQRERGR2BRUioiIiEhsCipFREREJDYFlSIiIiISmybqiIiISEpoklbRoqBSRERECp10BLSgoDaRur9FREREJDYFlSIiIiISm4JKEREREYlNQaWIiIiIxKagUkRERERiU1ApIiIiIrEppZCIFAnKlyciklpqqRQRERGR2BRUioiIiEhsCipFRFJo/vz5tGvXjrJly1KpUiWuuOIKtmzZstN9t2zZwl/+8hdq1apFqVKlqFGjBqNHjwbg/fffp3HjxpQvX56uXbuyefNmAFavXk316tX55JNP0nZMIiI7o6BSRCRFsrOz6dKlCzNnzuTmm2+mY8eO3Hfffdx000073f+iiy7i9ttvp3Hjxjz44IP0798fdwfgmmuuoWTJkgwbNoxnnnmGyZMnA3D11VfTo0cPsrKy0nZcIiI7o4k6IiIp8tprr7Fo0SLOPPNMBg0axIYNG3jqqae47777uOWWW/Ls+9VXXzF58mTq1KnDiy++yLZt2yhbtmzu8+vWraNOnTp06NCBoUOHsnbtWt544w1mzpzJ3Llz031oIiI7UEuliEiKLFy4EIBatcLM83LlylGpUiXWrl3LypUr8+w7a9YsALZu3Uq1atXYZ599OOyww5gxYwYA/fv356WXXqJp06ZUrFiRzp07c+mll/Lggw/mCT5FRDJFQaWISBrldGdvr3jx4gB888033Hzzzdx77718/vnndO3aFXend+/eLFmyhHfffZfPP/+csWPHctxxx1G7dm1at25NrVq16N69e+5YSxGRdFP3t4hIijRo0ACApUuXArBhwwZWr17NfvvtR+XKldm0aRPFihWjVKlSufsedNBB9OvXD4Bhw4bx3Xff8cMPP3DAAQdQs2ZNatasyZw5c5g0aRLz5s3jyiuvpFixYsybN4/q1avTqlUrevfunZkDFpEiTUGliEiKdOzYkXr16vHKK69w1113MWfOHLKzs7n88suZMWMGbdq04dhjj+W9997j8MMP58QTT+Rf//oXN910E9nZ2fz4448cffTRHHDAAbmvuW3bNvr06cNtt91G5cqV2bZtG4sWLWL8+PFs3LiR7OzsDB6xiBRlCipFRFKkRIkSvPDCCwwYMIAbbriBcuXK0b9/f4YOHcq77767w/5PPPEE/fv3584776R06dKcccYZjBw5Ms8+o0aNonz58lx0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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 10), dpi=80)\n", "\n", "total_counts = final_labels.shape[0] * final_labels.shape[1]\n", "unique, final_counts = np.unique(final_labels, return_counts=True)\n", "chart = plt.bar(CLASS_LABELS[unique], final_counts)\n", "plt.xticks(rotation=70)\n", "\n", "unique, counts = np.unique(new_labels, return_counts=True)\n", "plt.bar(CLASS_LABELS[unique], counts)\n", "plt.xticks(rotation=70)\n", "\n", "unique, counts = np.unique(labels, return_counts=True)\n", "plt.bar(CLASS_LABELS[unique], counts)\n", "plt.xticks(rotation=70)\n", "\n", "for i, p in enumerate(chart):\n", " width = p.get_width()\n", " height = p.get_height()\n", " x, y = p.get_xy()\n", " plt.text(x+width/2,\n", " y+height*1.01,\n", " str(round((final_counts[i] * 100) / total_counts, 1))+'%',\n", " ha='center',\n", " weight='bold')\n", "\n", "plt.legend([\"Final\", \"New\", \"Original\"])\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Save new dataset" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "np.savez_compressed(\"new_dataset\", signals=final_signals, labels=final_labels)\n" ] } ], "metadata": { "interpreter": { "hash": "9185113d2128201d66faecd4f34fb34e89a635073a034991399523e584519355" }, "kernelspec": { "display_name": "Python 3.9.7 64-bit ('base': conda)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.10" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }