{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Labeling of Measurements and Label Propagation\n", "\n", "MVG comes with a labeling API that allows a user to store important information about a measurement.\n", "There are multiple reasons why you would want to label measurements and some of the benefits include:\n", "\n", "1. Additional information about modes. For example, a mode with multiple critical measurements is likely a failure mode.\n", "2. Improved mode detection.\n", "3. As personal notes for keeping track of interesting events in the data.\n", "\n", "In addition, the LabelPropagation feature enables to propagate those labels to the measurements that do not contain any labels.\n", "\n", "This example will go through what a label is in MVG, how the labeling API functions, and how to utilize the LabelPropagation feature.\n", "\n", "### Prerequisites\n", "\n", "To follow this example you need to have:\n", "\n", "1. Installed `mvg` package\n", "2. A token for API access from Viking Analytics\n", "3. The database needs to be populated with our example assets. This can be achieved by running the [\"Sources and Measurement\"](2-sources_and_measurements.ipynb) example.\n", "4. Use of the LabelPropagation feature requires the results from ModeId. We can use the results available after running the [\"Analysis and Results Visualization\"](6-analysis_visual.ipynb) example." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Import the required packages and functions" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "import os\n", "from mvg import MVG\n", "from mvg.analysis_classes import parse_results\n", "from mvg.plotting import plot_labels_over_time" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Create a session for API access\n", "\n", ".. note:: Each token is used for Authorization AND Authentication. Thus, each unique token represents a unique user, each user has it own, unique database on the VA-MVG' service.\n", "\n", "**You need to insert your token received from Viking Analytics here:**\n", "Just replace `\"os.environ['TEST_TOKEN']\"` by your token as a string." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [ "parameters" ] }, "outputs": [], "source": [ "TOKEN = os.environ[\"TEST_TOKEN\"]\n", "ENDPOINT = \"https://api.beta.multiviz.com\"" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'api_version': '0.4.0',\n", " 'mvg_highest_tested_version': '0.4.0',\n", " 'mvg_version': '0.13.0'}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "session = MVG(ENDPOINT, TOKEN)\n", "session.check_version()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Retrieve ModeId results\n", "\n", "Once the API session is live, we start by checking if the source `u0001` we will use is available in the database." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "{'source_id': 'u0001',\n", " 'meta': {'assetId': 'assetA',\n", " 'measPoint': 'mloc01',\n", " 'location': 'paris',\n", " 'updated': 'YES! I have been updated'},\n", " 'properties': {'data_class': 'waveform', 'channels': ['acc']}}" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SOURCE_ID = \"u0001\"\n", "session.get_source(SOURCE_ID)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we know that the source exists we need to check its measurements to know which ones to label.\n", "\n", "In this example, the ModeId results are used to select the measurements to label and to compare with the results from the LabelPropagation feature.\n", "The ModeId results are NOT needed to add a label to the measurements." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
datetimetimestampslabelsuncertainmode_probability
02019-10-05 13:01:00+02:0015702732600False0.966994
12019-10-06 13:01:00+02:0015703596600False0.931219
22019-10-07 13:01:00+02:0015704460600False0.999575
32019-10-08 13:01:00+02:0015705324600False0.979806
42019-10-09 13:01:00+02:0015706188600False0.885940
\n", "
" ], "text/plain": [ " datetime timestamps labels uncertain mode_probability\n", "0 2019-10-05 13:01:00+02:00 1570273260 0 False 0.966994\n", "1 2019-10-06 13:01:00+02:00 1570359660 0 False 0.931219\n", "2 2019-10-07 13:01:00+02:00 1570446060 0 False 0.999575\n", "3 2019-10-08 13:01:00+02:00 1570532460 0 False 0.979806\n", "4 2019-10-09 13:01:00+02:00 1570618860 0 False 0.885940" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ModeId_request_id = session.list_analyses(sid=SOURCE_ID, feature=\"ModeId\")[-1]\n", "raw_result = session.get_analysis_results(ModeId_request_id)\n", "result = parse_results(raw_result, \"Europe/Stockholm\", \"s\")\n", "u0001_df = result.to_df()\n", "u0001_df.head()" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "image/png": "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buu/d+/eWLJkyZFTpkzZ01o2e/bs45uamvYuX778yauuumrtrFmzTga4/PLLj58yZcruFStWPHHOOedsX7duXS+Axx577Ig77rhjwMKFC5cuXbr0yYaGhnTTTTcN7Iy4TZQlSZLUqSZNmvTcmjVret98880Dpk2btqO07JFHHul7ySWXbAGYMWPGru3bt/fYunVrw0MPPdT34osv3gIwc+bMHf369XsJ4J577um7ePHiI5uamk4ZM2bM2AceeKDfypUre3dG3B07TkWSJEkqMH369O1XXHHFiffee++yjRs3HnIOmlKK8847b8sNN9ywtiPjK2KPsiRJkjrdpZdeuvmyyy579vTTT3+udP6kSZN2zZ07dyDAggUL+vbv3795wIABLZMnT941b968gQC33357v507dzYCTJ8+feeCBQv6r127tgdkY5yXL1/eqzNiNlGWJEk6XAzk5Ve91Wh7I0eO3DdnzpyN5fOvu+66Zx9//PEjR48ePfbTn/70sHnz5j0FcO211z774IMPHj1q1KhT77zzzv5Dhw59EWDChAnPz5kzZ+1ZZ501evTo0WPPPPPM0atXr+5Zvt2rr776uCFDhvzxhg0bejU1NY09//zzh1d7eFF6BWHVK8fEBAsPeX3pD8mh/6XoFft+1DsCSapKXMijKaWJ9Y5j0aJFq5qamjbXO46ubNGiRYOamppGFJXZoyxJkiQVMFGWJEmSCpgoS5IkSQVMlCVJkqQCJsqSJElSARNlSZIkqYBP5pMkSTpc3DGoiRe3dFz+12tgM+/avOhgi0TEhBkzZmz90Y9+9BTAvn37OO6445rGjx+/57777ltR6a6GDRs2buHChUuGDh1a0b2bZ8yYcfLvfve7o3r27JnGjx+/53vf+97TvXv3rupur/YoS5IkHS46MkmucHt9+vRpWbZsWZ/du3cHwF133dVvyJAh+zo0jgIXXnjh1pUrVy5etmzZE88//3x89atfHVTtNkyUJUmS1KmmTZu2Y/78+ccC3HrrrQPOPffcra1lGzZsaJw2bdrI0aNHj21qahrz8MMP9wFYv35949SpU18zatSoU88///zhpQ/Ju/HGGweMGzfulDFjxoy94IILhjc3v7yT+fzzz9/R0NBAQ0MDEydO3LNmzZqqH3NtoixJkqROddFFF2297bbb+u/duzeWLFly5JQpU/a0ls2e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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "''" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result.plot()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Adding labels\n", "\n", "A label in MVG relates to a specific measurement, which are identifiable by the source ID and the timestamp.\n", "Each measurement can only have one label.\n", "The label itself has three components:\n", "\n", "1. A label identification string\n", "2. A severity level number\n", "3. Notes\n", "\n", ".. note:: The label identification string is unique for each label and is case and spelling sensitive, i.e. `\"failure\"` and `\"Failure\"` are not interpreted as the same label. The severity level is an integer where a larger number indicates a more severe problem. They do not need to be the same for different instances of the same label. The notes exist for the end user to add extra information to a certain label and is not used by MVG in any way." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For this example, let us say that there was a bearing failure of the machine in the first measurement of the source, so we will add a label to the afflicted measurements. To do so, we use the `MVG.create_label()` method." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "first_measurement = 1570273260\n", "session.create_label(\n", " sid=SOURCE_ID,\n", " timestamp=1570273260,\n", " label=\"bearing_failure\",\n", " severity=3,\n", " notes=\"Imaginary bearing failure\"\n", ")" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "We just added one label to one of the measurements of the source.\n", "However, just one label for the entire source might not be enough especially if the modeId results show more than one mode.\n", "Therefore, it might be a good idea to add more labels.\n", "Thus, we proceed to attach a label to the top 3 measurements with the largest mode probability of mode from the ModeId feature results.\n", "First, we create a dataframe to identify these measurements." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
datetimetimestampslabelsuncertainmode_probability
22019-10-07 13:01:00+02:0015704460600False0.999575
72019-10-12 13:01:00+02:0015708780600False0.996115
82019-10-13 13:01:00+02:0015709644600False0.980702
172019-10-22 13:01:00+02:0015717420601False0.996703
222019-10-27 13:01:00+01:0015721776601False0.996604
232019-10-28 13:01:00+01:0015722640601False0.996323
322019-11-06 13:01:00+01:0015730416602False0.999899
362019-11-10 13:01:00+01:0015733872602False0.999897
392019-11-13 13:01:00+01:0015736464602False0.999187
\n", "
" ], "text/plain": [ " datetime timestamps labels uncertain mode_probability\n", "2 2019-10-07 13:01:00+02:00 1570446060 0 False 0.999575\n", "7 2019-10-12 13:01:00+02:00 1570878060 0 False 0.996115\n", "8 2019-10-13 13:01:00+02:00 1570964460 0 False 0.980702\n", "17 2019-10-22 13:01:00+02:00 1571742060 1 False 0.996703\n", "22 2019-10-27 13:01:00+01:00 1572177660 1 False 0.996604\n", "23 2019-10-28 13:01:00+01:00 1572264060 1 False 0.996323\n", "32 2019-11-06 13:01:00+01:00 1573041660 2 False 0.999899\n", "36 2019-11-10 13:01:00+01:00 1573387260 2 False 0.999897\n", "39 2019-11-13 13:01:00+01:00 1573646460 2 False 0.999187" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Top3meas_df = u0001_df[u0001_df.groupby('labels')['mode_probability'].rank(method='dense', ascending=False) <= 3]\n", "Top3meas_df" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "There are three modes on the ModeId results.\n", "We will label measurements from mode 0 as \"Healthy\", measurements from mode 1 as \"Transition\", measurements from mode 2 as \"Faulty\"." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "modes = Top3meas_df['labels'].unique()\n", "mode_dfs = {mode: Top3meas_df[Top3meas_df['labels'] == mode] for mode in modes}\n", "\n", "for mode in mode_dfs:\n", " if mode == 0:\n", " label_to_add = \"Healthy\"\n", " elif mode == 1:\n", " label_to_add = \"Transition\"\n", " else:\n", " label_to_add = \"Faulty\"\n", " case_df = mode_dfs[mode]\n", "\n", " for index, row in case_df.iterrows():\n", " session.create_label(\n", " sid=SOURCE_ID,\n", " timestamp=row['timestamps'],\n", " label=label_to_add,\n", " severity=int(mode)+1,\n", " notes=\"This is a demo.\"\n", " )\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Reading Labels\n", "\n", "To get a list of all the labels for a source we use the `MVG.list_labels()` method." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'timestamp': [1570273260,\n", " 1570446060,\n", " 1570878060,\n", " 1570964460,\n", " 1571742060,\n", " 1572177660,\n", " 1572264060,\n", " 1573041660,\n", " 1573387260,\n", " 1573646460],\n", " 'label': ['bearing_failure',\n", " 'Healthy',\n", " 'Healthy',\n", " 'Healthy',\n", " 'Transition',\n", " 'Transition',\n", " 'Transition',\n", " 'Faulty',\n", " 'Faulty',\n", " 'Faulty'],\n", " 'severity': [3, 1, 1, 1, 2, 2, 2, 3, 3, 3],\n", " 'notes': ['Imaginary bearing failure',\n", " 'This is a demo.',\n", " 'This is a demo.',\n", " 'This is a demo.',\n", " 'This is a demo.',\n", " 'This is a demo.',\n", " 'This is a demo.',\n", " 'This is a demo.',\n", " 'This is a demo.',\n", " 'This is a demo.'],\n", " 'label_timestamp': ['2022-05-10 10:15:56',\n", " '2022-05-10 10:15:56',\n", " '2022-05-10 10:15:56',\n", " '2022-05-10 10:15:56',\n", " '2022-05-10 10:15:56',\n", " '2022-05-10 10:15:57',\n", " '2022-05-10 10:15:57',\n", " '2022-05-10 10:15:57',\n", " '2022-05-10 10:15:57',\n", " '2022-05-10 10:15:57']}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "session.list_labels(SOURCE_ID)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see, the measurements that we just added labels show up.\n", "To inspect the label of a specific measurement we use `MVG.get_label()`" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'label': 'bearing_failure',\n", " 'severity': 3,\n", " 'notes': 'Imaginary bearing failure',\n", " 'label_timestamp': '2022-05-10 10:15:56'}" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "session.get_label(SOURCE_ID, first_measurement)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Updating labels\n", "\n", "Now we realize that the label we had in the first measurement correspond to mode 0 and the label that we originally added is incorrect.\n", "Then we use the `session.update_label()` method to change the label." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'timestamp': [1570273260,\n", " 1570446060,\n", " 1570878060,\n", " 1570964460,\n", " 1571742060,\n", " 1572177660,\n", " 1572264060,\n", " 1573041660,\n", " 1573387260,\n", " 1573646460],\n", " 'label': ['healthy',\n", " 'Healthy',\n", " 'Healthy',\n", " 'Healthy',\n", " 'Transition',\n", " 'Transition',\n", " 'Transition',\n", " 'Faulty',\n", " 'Faulty',\n", " 'Faulty'],\n", " 'severity': [0, 1, 1, 1, 2, 2, 2, 3, 3, 3],\n", " 'notes': ['This was an OK measurement',\n", " 'This is a demo.',\n", " 'This is a demo.',\n", " 'This is a demo.',\n", " 'This is a demo.',\n", " 'This is a demo.',\n", " 'This is a demo.',\n", " 'This is a demo.',\n", " 'This is a demo.',\n", " 'This is a demo.'],\n", " 'label_timestamp': ['2022-05-10 10:15:56',\n", " '2022-05-10 10:15:56',\n", " '2022-05-10 10:15:56',\n", " '2022-05-10 10:15:56',\n", " '2022-05-10 10:15:56',\n", " '2022-05-10 10:15:57',\n", " '2022-05-10 10:15:57',\n", " '2022-05-10 10:15:57',\n", " '2022-05-10 10:15:57',\n", " '2022-05-10 10:15:57']}" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "session.update_label(\n", " sid=SOURCE_ID,\n", " timestamp=first_measurement,\n", " label=\"healthy\",\n", " severity=0,\n", " notes=\"This was an OK measurement\"\n", ")\n", "\n", "# List the labels again\n", "labels = session.list_labels(SOURCE_ID)\n", "labels" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting labels\n", "\n", "To get an overview of the data and labels it can be very good to plot the labels over time.\n", "The `plotting` module of `mvg` contains the function `plot_labels_over_time` that does just that.\n", "The plot is very similar to that of the ModeId plots, so it is easy to compare results.\n", "We can add the `include_unlabeled=True` keyword to plot the unlabeled measurements as well.\n", "Please note how \"healthy\" and \"Healthy\" was interpreted as two different labels." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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u4Hgw9I1ScteQ9AvNhAcQHh1uExDlp1K0L++Hz6HneF9IiJSD3Nvym81RURERETiTyPJIiIiIiIpVCSLiIiIiKRQkSwiIiIikkJFsoiIiIhIikadCqhTfo73zU/jwL/+IyA3jU2WFEF1VcPju/WFnNx6wyIp3eearji3TRaoLC1J6/XN69gdcuL7GTbd55uuuLdPnG1auovqyobv9zuNaEVOntUfeIBELf+o5SO1W7Ro0SZ3b+hFiCQLNOrsFse0M194XBoLPJfmtqZNqD/mU/F/Ti8+StJ9rmmvP8ZtkwU23H9rWvFdrv5JhjI5MNJ9vumKe/vE2a/s7bTiv+3DM5TJ/ola/lHLR2pnZovc/ZiDnYccOBqKERERERFJoSJZRERERCSFimQRERERkRSNOnBPRERERA6cRYsWdcnLy3sYGI4GOxujGni7srLyilGjRm2oKUBFsoiIiEhM5OXlPdytW7fCzp07f5KTk7P/Z19o5qqrq23jxo1DS0pKHgbOrilGn0BERERE4mN4586dt6pAbpycnBzv3LlzGcGIfM0xBzAfEREREWmcHBXITSNsx1prYRXJIiIiIiIpNCdZREREJK6+3mkEW0ubrp5r17GS/960tK6QlStXtjzzzDMHrlq1alljNjVjxoyOCxcubDN79uwPH3300UOHDh26a9SoUbsAvvCFLwy+++67P/riF7+4ozHbaAyNJIuIiIjEVVMWyJlYXwPNmzfv0DfffPOQg7Ht2qhIFhEREZG0VFVVce655/YZMGDAsLFjxw7ctm2bLVu2LP/4448fOGzYsMJRo0YNXrx4cSuAOXPmtD/qqKOGFBYWDh0zZsygjz766FOF+PPPP9/mb3/726FTp07tNWTIkKHLli3LB3j88ccPO/LIIwv79u07/K9//WtbgGOOOWbwq6++ureYHjVq1OB//vOfGSmuVSSLiIiISFo+/PDDVtddd92G1atXL2vfvn3V7NmzD7viiiv6/PrXv/5w2bJl79x1110fX3311YcDnHzyyduWLFmy4p133ln+9a9/ffP06dO7Ja/r5JNP3n7SSSdtuf322z9esWLF8mHDhlUAVFZW2ltvvfXOnXfe+dH06dN7AFx88cWbHn744U4Ab775Zn5FRUXO6NGjd2biOWpOsoiIiIikpWfPnhVjxozZCTBy5MgdRUVF+YsXL247adKk/omY3bt3G8D777/f8pxzzum1cePGFrt3787p3bt3RUO2MWnSpE8AxowZs/2mm25qCXDJJZd8ctddd3WvqKj4+IEHHuh03nnnbWr6ZxdQkSwiIiIiaWnZsuXe09Dl5ub6+vXr8woKCipXrFixPDX22muvPfw73/lOyfnnn1/29NNPFyRGhevTqlUrB8jLy6OqqsoACgoKqo8//vitc+bMOfQvf/lLh8WLF39me01F0y1EREREpFHatWtX3atXr92//e1vDwOorq4mMVe4vLw89/DDD98D8Mgjj3Ssafm2bdtWbd26tUF16VVXXbXplltu6T1ixIjtnTt3rmqq55BKRbKIiIhIXLXrWBmV9T3++ONrZs2a1Wnw4MFDBw4cOGzu3LmHAtx6663rvvnNb/YfNmxYYceONa///PPP3zxjxoxuhYWFew/cq83xxx+/o02bNlWXXnppxqZagKZbiIiIiMRXPec0zoTBgwfvTj5H8vTp09cnfn/55ZdXpcZfcMEFWy644IItqfdfd911pUApwCmnnLL9vffe27vOf/3rXysTv3fv3r1y7dq1byX+LioqauHuNmHChK1N8Xxqo5FkEREREYmF++67r+Nxxx1XeNttt63Nzc3N6LY0kiwiIiIisXDttdeWXnvttaUHYlsaSRYRERERSaEiWUREREQkhYpkEREREZEUKpJFRERERFLowD0RERGRuLrzohHsLG+6eu6QgkpumV3naeVat249cseOHYsTf8+YMaPjwoUL28yePfvDdDf39NNPF9xzzz1dFyxYsPrpp58uyM/Prz755JO3A0ycOLHvmWeeWXbppZd+kv4TaTyNJIuIiIjEVVMWyJlYXxr+/ve/F7z88sttD9b2U6lIFhEREZEmsW7durxTTz21//DhwwuHDx9e+Nxzz7UBWLBgQeujjz56SGFh4dCRI0cOWbp06aeuqrdy5cqWs2fP7vzAAw90HTJkyNC//vWvbQFefPHFtiNHjhzSq1evI2fNmnUYwIQJE/o++uijhyaWPfvss4947LHHDqWJabqFiIiIiDRYRUVFzpAhQ4Ym/i4rK8s9+eSTywC+9a1v9b7xxhvXn3rqqdtWrVrV8tRTTx24Zs2aZSNGjNj173//e0WLFi2YN29ewc0339zr2WeffS+xjsGDB+++6KKLNrZt27YqcQW/hx56qNP69etbLFy4cMWSJUtaTZgwYcCll176yRVXXLHp5z//edcLL7xwS2lpae6iRYvazp079/2mfp4qkkVERESkwfLz86tXrFixPPF3Yk4ywCuvvNJu1apVhyQe27ZtW25ZWVnO5s2bcydPnnxEUVFRKzPzPXv2WEO2dfbZZ2/Jzc1l1KhRu0pLS1sAnHHGGdu+853v9Fm3bl3eY489dtgZZ5zxSYsWLZr6aapIFhEREZGm4e688cYb77Ru3dqT77/ssssOHz9+fPnzzz//3sqVK1t+6UtfGtyQ9bVq1Wrvetz3rXLy5MmlDz30UIe5c+d2mDVrVlFT5Z9Mc5JFREREpEmMGzdu6x133NEl8ferr756CMDWrVtze/XqtRtg5syZnWpatqCgoKq8vDy3Idu56qqrNs2cObMrwKhRo3Y1PvPPUpEsIiIiEleHFFRGaX0PPvjgR2+88UabQYMGDe3fv/+w++67rzPALbfcUjJt2rRehYWFQysra97ExIkTtzzzzDOHJh+4V5vevXtX9u/ff9cFF1xQ2ph866LpFiIiIiJxVc85jTMh+RzJANddd10pUArQvXv3ymeeeWZN6jInnXTS9qKiorcTf8+YMWMdwJlnnll+5plnlgMcddRRFe++++7euc6nnXbattq2W15enlNUVJR/+eWXb26ip/UZGkkWERERkdiYN29eweDBg4dNmTJlQ8eOHasytR2NJIuIiIhIbJxzzjnl55xzzluZ3o5GkkVEREREUqhIFhERERFJoSJZRERERCSFimQRERERkRQ6cE9EREQkpjb+9icjvGJHk9Vzlt+6svNlt9Z6WrmSkpLcE044YTDApk2bWuTk5HiHDh0qAZYsWfJO8hXyGuv666/vccIJJ5Sfc8455dOnT+9yww03bCooKKgGGD9+/IC5c+e+36lTJ53dQkREREQ+rSkL5Iasr1u3blUrVqxYDnDjjTf2aNu2bdX06dPXJx7fs2cPLVq0aJJc7r333nWJ32fOnNl1ypQpmxNF8osvvri6STZSB023EBEREZH9NnHixL7nnXfe4UcdddSQq6++uteCBQtaH3300UMKCwuHjhw5csjSpUvzAWbMmNHxlFNO6X/88ccP7NOnz/CrrrqqF0BlZSUTJ07sO3DgwGGDBg0a+uMf/7hLYr2zZs067Pbbb++yYcOGFuPHjx907LHHDgLo2bPnkcXFxXkA06ZN6zpw4MBhAwcOHDZ9+vQuACtXrmzZr1+/Yeeee26fAQMGDBs7duzAbdu2WTrPSyPJIiIiItIoxcXFLd94440VeXl5bN68Oeff//73ihYtWjBv3ryCm2++udezzz77HsDy5ctbL126dPkhhxxSPWDAgOHf+9731hcXF7coLi5usWrVqmUAmzZtyk1e99SpUzfcf//9XV988cV3u3fv/qlrWr/88sut58yZ03HRokXvuDujRo0q/PKXv1zeqVOnqg8//LDVY489tmbMmDEfnH766f1mz5592DXXXNPgK/SpSBYRERGRRvna1772SV5eUFZu3rw5d/LkyUcUFRW1MjPfs2fP3hHccePGbU1cJW/AgAG73nvvvfzPfe5zOz/66KP8iy++uPdZZ51VNmHChK0N3e4LL7zQ9vTTT9/Srl27aoAzzjjjkwULFhRMmjRpS8+ePSvGjBmzE2DkyJE7ioqK8tN5TppuISIiIiKN0rZt2+rE77fcckvP8ePHl69atWrZU089tXr37t17682WLVvuPbAvNzfX9+zZY507d656++23l5944onlDzzwQOdzzz23b1PklLqtysrKtKZbqEgWERERkSazdevW3F69eu0GmDlzZqf64ouLi/Oqqqq45JJLttxxxx1r33rrrdapMW3atKkqKyv7TN164oknbps/f/6h5eXlOVu3bs2ZP3/+YSeeeGJ5UzwPFckiIiIiMWX5rSvrjzqw67vllltKpk2b1quwsHBoZWX9qysqKmoxbty4wUOGDBl64YUX9ps+ffrHqTEXX3zxptNOO23vgXsJ48aN23HeeeeVfu5znyscNWpU4YUXXrhx7NixOxv7HADMff9PZ3dMO/OFx6WxwHNpbmvahDTj/5xefJSk+1zTXn+M2yYLbLj/1rTiu1z9kwxlcmCk+3zTFff2ibNf2dtpxX/bh2cok/0Ttfyjlo/UzswWufsxBzuPpUuXFo0YMWLTwc4jWyxdurTTiBEj+tb0mEaSRURERERSqEgWEREREUmhIllEREREJIWKZBERERGRFCqSRURERERSqEgWEREREUmhy1KLiIiIxNRvOr0zYldpVZPVc6065lZevqlwaV0xubm5owYOHLj3XMT/8z//s3rw4MG709nOxIkT+5555plll1566SfTp0/vcsMNN2wqKCiorn/JA0dFsoiIiEhMNWWB3ND15efnV69YsWJ5U21z5syZXadMmbI5akWypluIiIiIyH4rKyvLGT169KChQ4cWDho0aOhjjz12KMDKlStbDhw4cFgi7rbbbut644039khe9vbbb++yYcOGFuPHjx907LHHDrr33ns7XnbZZb0Tj99zzz2dLr/88t4cBBpJFhEREZEGq6ioyBkyZMhQgN69e1fMnz//vWeeeWZ1hw4dqouLi/OOPfbYIeedd96Whqxr6tSpG+6///6uL7744rvdu3evLCsryxk+fHj3ioqKj/Pz8/2xxx7rNHPmzA8y+oRqoSJZRERERBosdbpFRUWFXX/99b1ee+21tjk5OWzYsKHlxx9/vF81Zvv27avHjh1b/sQTT7Q/8sgjd+3Zs8e+8IUv7Kx/yaanIllERERE9tvMmTM7lJaW5r311lvv5Ofne8+ePY/cuXNnTl5enldX75tmvGvXrgZN873yyis3/eQnP+k2aNCgXRdccMGmjCVeD81JFhEREZH9VlZWltupU6c9+fn5/tRTTxWsW7euJUCvXr0qN2/enFdSUpK7c+dOe/bZZ9vXtHybNm2qysrK9takX/rSl7YXFxe3/POf/9zx8ssv33ygnkcqjSSLiIiIxFSrjrmVTX0KuHSXueKKKzZ/5StfGTBo0KChRx111I4jjjhiF0B+fr5/97vfLf785z9f2LVr1z0DBgzYVdPyF1988abTTjttUNeuXXe//vrr7wKcc845n7z55putO3fuXNW4Z7T/VCSLiIiIxFR95zTOhB07dixO/rt79+6VS5YsWVFT7NSpUzdMnTp1Q+r9c+fOLUr8fuutt2649dZbPxXzz3/+s+3111+/volS3i+abiEiIiIikbBp06bcvn37Dm/VqlX1V7/61fKDmYtGkkVEREQkEjp16lRVVFT09sHOAzSSLCIiIiLyGSqSRURERERSqEgWEREREUmhIllEREREJIWKZBEREZGY6tGjxwgzG9VUty5duhxd3zbNbNSUKVN6Jf6+7bbbut5444099vc59OzZ88ji4uI6Tybx/e9/v9v+rn9/qUgWERERiani4uK8BQsW4O64O/fddx99+vRhzZo1uDtVVVVMmTKFcePGsXXrVtydrVu3Mm7cOKZMmUJVVRXuzpo1a+jTpw8bN27MrW+bLVu29Pnz5x9WX2HblGbMmNH9QG0rQUWyiIiISIydcMIJAPzqV7/irrvuYsGCBRxxxBFUV1dz1VVX8c477zB//nwKCgooLy/n9NNPp7CwkAceeICcnBzef/99TjzxRG666aYGbS83N9cvuuiijT/96U+7pj62cuXKlscdd9ygQYMGDR09evSgVatWtUyNKSkpyR07duzAAQMGDJs8eXIfd9/72EknndR/2LBhhQMGDBh29913dwK45pprelZUVOQMGTJk6Nlnn31EbXFNTUWyiIiISMw1RYH87W9/u8Hbu+mmmzb86U9/6lBaWvqpkeerr7768PPPP7/03XffXT558uTSq6++unfqst///vd7jB49etvq1auXTZgwYUtxcfHeQvr3v/990bJly95ZsmTJ8pkzZ3YtKSnJ/fWvf702Pz+/esWKFcv/8pe/vF9bXCOar0YqkkVERERi7EAXyAAdOnSonjRpUunPfvazLsn3L168uM2VV165GeDqq6/evGjRorapy7722msFl112WSnAueeeW9auXbuqxGN33nln18GDBw8dNWpUYUlJSYtly5a1qmn7DY1rDBXJIiIiIjHWVAXyCy+8kNZ2f/CDH6yfM2dOp+3btzdJPfn0008XvPjiiwULFy5csXLlyuWFhYU7d+7c+Zl1NzSusVQki4iIiMRYUxXIkyZNSmu7Xbt2rTrrrLM+mTNnzt45wSNHjtz+8MMPHwYwc+bMDsccc8y21OWOO+648kceeaQjwB//+Md2W7duzQXYsmVLbvv27asKCgqqFy9e3Grp0qVtEsvk5eV5RUWF1RfXlA7YUYkiIiIi0rR69OhR2a9fv8/Uc+3atfvU3//4xz946KGHPnXftddey7XXXvup+3r27FmZzvZvvfXWkt/97nedE38/8MADH1500UV9f/GLX3Tr2LFj5ezZs4tSl/nZz362buLEif0GDBgw7JhjjtnWvXv33QATJ04se/DBBzv369dvWL9+/XaNGDFie2KZ888/f2NhYeHQ4cOH73jiiSeKaotrSiqSRURERGJq7dq1Sw/0Nnfs2LE48Xvv3r0rd+7cuffvQYMG7X7ttdferWv5bt26Vb3yyiuranrspZdeqvH++++/fy2wtr64pqTpFiIiIiIiKVQki4iIiIikUJEsIiIiEh/V1dXVdrCTyAZhO1bX9riKZBEREZH4eHvjxo3tVSg3TnV1tW3cuLE98HZtMTpwT0RERCQmKisrrygpKXm4pKRkOBrsbIxq4O3KysoragtQkSwiIiISE6NGjdoAnH2w82gO9AlERERERCSFimQRERERkRQqkkVEREREUqhIFhERERFJoSJZRERERCSFimQRERERkRQqkkVEREREUqhIFhERERFJoSJZRERERCSFimQRERERkRQqkkVEREREUqhIFhERERFJoSJZRERERCSFimQRERERkRQqkkVEREREUqhIFhERERFJoSJZRERERCSFimQRERERkRQqkkVEREREUqhIFhERERFJoSJZRERERCSFimQRERERkRQqkkVEREREUqhIFhERERFJoSJZRERERCSFimQRERERkRQqkkVEREREUqhIFhERERFJYe6+/wublQMr01ikE7ApQvFRkunc49w22aA59WVQf85mce/LUcs/avlI7Qa7e8HBTkIOnLxGLr/S3Y9paLCZLYxSfJRkOvc4t002aE59GdSfs1nc+3LU8o9aPlI7M1t4sHOQA0vTLUREREREUqhIFhERERFJ0dgi+cGYx0dJpnOPc9tkg+bUl0H9OZvFvS9HLf+o5SO1U9s3M406cE9EREREJBtpuoWIiIiISAoVySIiIiIiKTJeJJuZpRmfsx/LWLrLREWcc5f6pfv6xrk/HIjc49o2cZcN++Qo5tPQnKKWe3Ok16B5ivScZDMzj3KCMaQ2FZGmYGY57l59sPNIh5m1APKB3e6+u464vQVRVPeXZpbr7lUHOw+RbJZWkWxmucAAd1+ZdF8vYLu7f1JDfD7wFWC+u+82szbAMKANsMjdt6bEtwZuAf4GvObuexqQU1/gHGCJu79gZgMB3H1Vg5/YQWJm7YGJQDnwurt/2MTr70rwbcFuYAfBxWPOcvc5TbkdqVm6r2/4en0DeBd4DjgcyHP39zKda2OF/9t3Ac8DL7l7aQa2UUDQnq2BXIJ2etvd1zb1tmQfMzsEmAz83t33mFkHYDTQkWA//W5KfMb7QrrMrDfB/1YO4AT/k++6+4I012NAL3f/qJH5DAzzWQE8DQwAOgOL3b0sJTYHGApUAxVAGWDAJe5+V2PykIYxs57AuUApQZ9fkfRYa3ffcdCSk4xKt0juA0x19ynhjvM0YBrQC3gZuCi58DWzAcDD7n5CWDDcAJwHFIXLXOLu/0qKHwy8AzwArCPYya5I3WkkxXcj2Bm3J9jpvQTcFD68E5iYugOPCjPrCNwK9ANaAR8Ad7n7ajM7HPiVu5/ViPUfAfwR+BPBDnUHQTtdBVxCMJKS1huENFy6r6+ZdQF+DHQjKACfBi4GehC8KZ7V2DfmTEr63/0NsBn4P2AxsKkpRuLMrDNwM9CWoE0+D6wl6NPz3P3mxm5Daha+tn9w95Fhv55G0P5LgGOB29z9qZT4jPWFdCW9T+QAa4A9wKHA0eHP8939naT41sDxwC5gC8H/3zZ33xTuV59szBXvzKw7cDdwCMGA0T8IBpN2Ad2Bc919aVJ8f4IPzU+GuVuY9zcI9hnl7j57f/ORuoX75juALkBLYDtwu7u/EdZED7r7qQczR8mcdC9LfTjBPzFAf+Aagn/od8zsh8BPgWtT4hOGA2PcfRCAmX0F+AEwISmmA/As8DDwfYIR4v8zsyfdvabLQQ4Gurn7yWY2EbjH3fuG6z8f+E+CEZAoGgqMcvfxAGb2I2CWmZ1C8M94SCPXXxneTgdeICiSCwlGIyYTFBgqkjMn3dd3CDDQ3U8ys8nAvQQjVlVmdilBX77kQCW/HzoA84AfAlOBe4ClwBPAU7Uv1mDDgJHufhKAmR0PnOLuPzKzO83sx+7+H02wHfms7gTFIsBAgm8TjwMwsxOA7/Lp1zjTfSFdRxH8bx2X+oCZTQJ+Bnw1Jf4XwF8IitEw1LYTfOht7NzUgUAndz81fB/8jbv3CDfyNYIP199Iit9O8IFkGMG+fDUwHthG8CFRB+Bn1hCgr7t/GSDcHz9oZl8l+DYl92AmJ5mVbpHcE+gRfjKfAGxM+gT+FkEhnGwjsCnckbYB1iTNY2tRw/p7A+vd/Q3gG+F2/h/wuJmVAdPc/emk+A4En74hGJlemfRYGcHXalHVi2C0PDG37z/NbCswh+ANZl1jVu7uH4XF1oXAh+7+qJmdCbR098vMrG3j0pd6pPv69iT4Kg+CguQPSfMNNxGMYETZ4cAOd98IfAfAzC4BfmBmDwI/cveHG7H+tkCFmbUj+J8vJCg2ABby6aJCmtZa4OOwoHRgnZkVuHs5cBiQOi82030hXVuBLWZ2OrCM4L2hKszf+Ox70REEgwlzCD7Mtibsf8DXafz7Sk+Cbz4hGBl+NOmx3QSDG3u5e4mZXQFcGW57PsF79xHu/tNw5FsypzvhvtnMWrr7LDPbRTCY9zwQ2W/4pPHSLZK3ACXAjcAXgH8mPZb4Wngvd3/LzOYAlxN8zdWHYDRtebj8kynrP4RgKgZmdoi7lxB8qr7VzC4EClLilwIrzew3BDu7jWZ2LkGxPCncZlRtBlaF/3S7wwPqfmFme4BZwM8buwF3/9DM7gFuM7M7gHYEH1wgGJ2QzCkleH1bERR39b2+mwmmC0HwgXN10mM9SfnfiqBqgv9HzKyVu+9y90eAR8xsHEGR0RiLCEbTbifou70JihjC38trXkway91XmdnvgEsJCubDgSfN7AOC6UG/SlkkuS+0BnY2cV9I1xKCUewLgFUEI7C7zWw0QQF0R0r8G8CPgOWpB/eZ2SCCKSaN8TH7RtRfJ5iKknA4QVGfvE0Lj/m508yuI/iWqYDgtYB9A0WSGeuAN8ysjbtvN7M8d3/czKqBx4FfH+T8JIPSnZPcjuCr4iqCeZZl7p4YLbuUYN5WauGbmPT+VYIdagHBjurp1AOZzKwfwcHE79ey/Tx3r0y5byDwRYJP11sJio8xBPPhfpN6cGBUhCO5PQlGzreEO0IPH/susNndZzVyG3uPfg6/5r8buN/d7zezFg05MFL2TzgHvxPwgbtX1vD6loaFQyK+AMip4aCdfILpMaXu/swBewJpMrMeQHX4wTZxX/JzbvSR+OE3S2cSjF4+4+7LzSyPYFS5MnleqTSdlNfxdIL9eFuCg85er6HP9gD2hCPJNa3voJwVI3yvOIHgPcwIiuFX3X1LLfGJg/xwdzfbe8aL1u6+34MMYZ9tCexKbgcLjvM5Cdji7i+nLJNL8P/lZnYUwfSrJ939sZreF6XphK9L2+T+nOjD4aDcLnefd9ASlIxqcJGc2FGGb9qfI/iKagvBV8EbwkJg7z9rUnwHYBDB10qbCUbYylMP4EjqdK0JjpzODdddQjCtY09KfGL9LQnmJncO1/2eu2/br9Y4SJLfhJp6veGvudqJHjhJffMQgvlsH3rKEf4phUcivh3BFIIP3H3Tgc98/yTlX0DwfN9z980ZWH9roLO7f9BU65a6JbV9f4K5utsI9snrgU/q2C/3AsYSTB0oJhiNK3b3igP7DLJLpt4rpGYp/bmQYN8W5W+opYmlO5J8InAWwWT1TgQjOpXAvwkOmluXEj8+jO9M8Ok9Ef868F+ecuomM/sScAbBXONO4c+qcP01xZ8AnB2u/7Awvhr4F3B3aj5xYWY/AP7X3Zc08XoT//A/DNe/uN6FZL+Y2RiCUwblE3w4/IOHR6yH37q84klnXgnjJxN8Q1NvfNSY2ViCecG15f+qJ506cj/WPxr4JsGxDaXAnMT/R1OsX2pnwQFKJxHsZ3sR7JvzCKZUTHP3t1LiJwBfInif6Bkul0cwjegz8ZkWjtzmEowKV4c/czw4nd0vgD+6+ytJ8S0IDoarIpi77IlvQsL4J939H43Ip6713xuuv9Z8CEbB8zyYpveZ/KVpWXBw5VcJpoNuJ9i3vRQ+djPwrCedjUSyS7pF8nMEp6aaSzAyYARfvV0CjAO+5UmnqWpA/JXu/vGBio8SM7ud4CvLtewbmdlM8MbzOnCNu78W1fVL3cxsHsGHtReBrxGc7eJWD04b9CzwAw8OUN2v+KjJdP5xb584M7N/EJyy8PGU+ycSnM3o8uTRtXTjM83Mfknw3lBC8O3nJwRz2FcQnMHiYnd/fX/jM5DPJcn75kznI3Uzs/8laOf5BINy3wB+7O5/C2uQH7j7ooOZo2ROugfu9QGeTxrRdYLi9KdmtpTPnhqnvvjUU9dkOj5KvkdwDuM2BPPkOhAcWJdDMH2ksRdIyPT6pW4D3f2c8PdXzOxKYIaZnUUw2po6nSLd+KjJdP5xb584a01QoH2Ku8+14NSGqVO50o3PtEuA3xG83w0jOG1au/CxQXz2TDPpxjd1Pqn75kznI3XrTXC9hz3AL81sJXCXBafry2ffwfCShdItku8CbrDg7BQr2PfJ9gsEBWpqZ4lafJT8nuDCLMWpD5jZxwSjvlFev9St3MxGufui8KvUB83MCUYkegMbGhkfNZnOP+7tE2c/Ac4zs88TXOVwLUGhezLB18+pbZ9ufKbdD/zSa7gYj5mt5bP7wnTj456P1O0jgtPbLg73Pc+Fh/v8meCba+17slha0y0AzOxygnnD7Qg+0XYkuGLQdHdfHfX4qLDgaoS72DdNxMMDF3OAG9z9niivX2pnwR70BIIzlyxPeexy4CF3z9nf+KjJdP5xb59sYGZnEFwSfAjBt1JbCK4C90uv4SwW6cZnkgVXuKsi+LYheV9owCR3/2Nj4uOej9TNzI4hOHPXipT7TwFmuvsRByczORDSLpIlM8IdXmsPzsPY5EcwZ3r9Urfww0lrd99mZvlez1H+6cZHTabzj3v7yMET9p223sDTg6YbH/d8pG5h+xe4e5mF1zk42DlJ5qQ9+mJmuRYcbYuZFZrZw+HvNV6qM2rxETYQ+C8IhgliuH5JEu5Ikw0guDwvNRV06cZHTabzj3v7xJ2Z5STtZ482s6cS9zdF/AE2lPAqdw18n0g3Pu75SJIa2ngoMBtABXL2258dVnKB1YfgdEB1rStq8ZGR/EYC9AO6hvc3ybXgM71+qV1iaktD2z/d+KjJdP5xb5+48+CiF4kD7jqy7ypvNRZp6cYfCEnFTleCyz9DHe8T6cbHPR+pWWJQqab2174n+6V74F5i55e4StAnfPrS1JGPj5JM5x7ntskGzakvg/pzM7Id+HsG4zMtavlHLR+pm9q/GUn3PMndCU4S34LgzBHvAh+7+844xEdJpnOPc9tkg+bUl0H9WUREsk86l6U+meDqeQUEV1DqGv7+AXCnu/89yvFRkunc49w22aA59WVQf85m4fSWXIIR/Mpw2ktLD672NhV4391/v7/xzS3/qOUjdVP7SzrTLa4E/unu/5V8p5l9Efixme1x95cjHB8lmc49zm2TDZpTXwb152z2H0Bf4H2Cc1VvDn8uA04DHmhkfKZFLf+o5SN1U/s3c+kUyW2Bz5xyxt1fMrNKgk9bUY6PkkznHue2yQbNqS+D+nM2+xqwmGAOeE+C8x4fSjCyNgb4QSPjMy1q+UctH6mb2r+ZS6dIvgP4ppkdQTgfkOD68aMJLgv7fsTjoyTTuce5bbJBc+rLoP6czX4PzHf3xakPmNmbfPZqb+nGZ1rU8o9aPlI3tX8zl+6Be6MJPlmNIJgbWAW8APyXu3/m+vFRi4+STOce57bJBs2pL4P6c7Yys44EI/Wb2XdmkcQp+c4Gnk0+T3W68c0t/6jlI3VT+0s6B+7luXtl/ZHRjI+STOce57bJBs2pL4P6c3Ng+y4C4t6AN4104zMtavlHLR+pm9q/+Wrwichre5MyszwzuyTq8VGS6dzj3DbZoDn1ZVB/bg7cvTq8JS6skFtX26cbn2lRyz9q+Ujd1P7NV4NGks2sM3ALUAaUAOuBDQRzAXsCj7r7sKjGR0mmc49z22SD5tSXQf05m8W9L0ct/6jlI3VT+ws0/MC9owlOw3Qv8EWCozvbE5zY/whgTcTjo+RoMpt7ptcvdTua5tOXQf05mx1NvPtyuvmkGx/3fKRuR6P2b/YaWiS3Ap4HpnlwaVhs3wm1vwWcEfH4KMl07nFum2zQnPoyqD9ns7j35ajlH7V8pG5qf2lwkfwKsBZoQ3AibXP33eFjxcBLEY+PkkznHue2yQbNqS+D+nM2i3tfjlr+UctH6qb2l/ROAfepBc0OIbhM4544xkdJpnOPc9tkg+bUl0H9OZvFvS9HLf+o5SN1U/s3Pw0+u0WC7TsVyrkEc3ZiFR8lmc49zm2TDZpTXwb152wW974ctfyjlo/UTe3ffKVdJLNvisY3gU4AZmYxio+STOce57bJBs2pL4P6czaLe1+OWv5Ry0fqpvZvphpUJCd3hqQ5OauBD+IQHyWZzj3ObZMNmlNfBvXnbBb3vhy1/KOWj9RN7S+Q5pxkMxsBOLAL2Ob1XA42avFRkunc49w22aA59WVQf85mce/LUcs/avlI3dT+zVtDLybyReBrBB3l88C7wIfAk+6+LOrxUZLp3OPcNtmgOfVlUH/OZnHvy1HLP2r5SN3U/gINmG5hZq2BHwH/Bp4iOC1KJcFVaOaY2YlRjo+STOce57bJBs2pL4P6czaLe1+OWv5Ry0fqpvaXvdy9zhvQH1ia9HcL4JXw96HA61GOj9It07nHuW2y4dac+vKByD/u7RPnW9z7ctTyj1o+ujXt66Vb9t4acjGRXcBqM/sRsBz4HLAifKxt+HiU46Mk07nHuW2yQXPqy6D+nM3i3pejln/U8pG6qf0FaMB0C3dfC9wDdAFOJbh2+bTw4W7AyijHR0mmc49z22SD5tSXQf05m8W9L0ct/6jlI3VT+0tCg89uYWaHAq09PLLTzHI8vJ55HOKjJNO5x7ltskFz6sug/pzN4t6Xo5Z/1PKRuqn9Zb8vSw1gZocBFe6+I47xUZLp3OPcNtmgOfVlUH/OZnHvy1HLP2r5SN3U/s1LvUWymRUChwPbgW1AObDb3T8ysznAYne/K6rxUZLp3OPcNtmgOfVlUH/OZnHvy1HLP2r5SN3U/pLQkAP3phJMVF8B5BOcBqXazNYDY4F5EY+PkkznHue2yQbNqS+D+nM2i3tfjlr+UctH6qb2F6BhRfIA4FmCcwUeBhQQTGLfEf6eevWZqMVHSaZzj3PbZIPm1JdB/Tmbxb0vRy3/qOUjdVP7S6C2c8MlbsAZwLBaHvsnMDjK8VG6ZTr3OLdNNtyaU18+EPnHvX3ifIt7X45a/lHLR7emfb10y95bQ+Yk13o0p5m1cfftUY6PkkznHue2yQbNqS+D+nM2i3tfjlr+UctH6qb2l4QGnd3CzCYBIwgmsX8MrAZWuPsncYiPkkznHue2yQbNqS+D+nM2i3tfjlr+UctH6qb2F6inSDaztsBPgVyCjtKD4OTarYB/AT9z901RjY+STOce57bJBs2pL4P6czaLe1+OWv5Ry0fqpvaXT6lrLgZwJLAIyEm5vwVwGzA3yvFRumU69zi3TTbcmlNfPhD5x7194nyLe1+OWv5Ry0e3pn29dMvuW32XpW5PcOqTTsl3uvse4FXg0IjHR0mmc49z22SD5tSXQf05m8W9L0ct/6jlI3VT+8te9Z0CbjEwC7jbzDYAG4EPgUOALwP/F/H4KMl07nFum2zQnPoyqD9ns7j35ajlH7V8pG5qf9mrIWe3yAMuAoYRnB/wCKAYmOXuC6IeHyWZzj3ObZMNmlNfBvXnbBb3vhy1/KOWj9RN7S8J9R241we4luDKMx8Cc9z9g/Cx0cB2d38zqvFRkunc49w22aA59WVQf85mce/LUcs/avlI3dT+kqy+OcnXhzHPAm2A+83sK+FjVwJHRzw+Sq4ns7lnev1St+tpPn0Z1J+z2fXEuy+nm0+68XHPR+p2PWp/SajrqD7geWBk0t9XAP8L9AbmACdHOT5Kt0znHue2yYZbc+rLByL/uLdPnG9x78tRyz9q+ejWtK+Xbtl9q28kOQ/oDmBmue7+cNhZfgKMJfgqIsrxUZLp3OPcNtmgOfVlUH/OZnHvy1HLP2r5SN3U/rJPXRU08EXgyKS/88Kf/w/YCXSLcnyUbpnOPc5tkw235tSXD0T+cW+fON/i3pejln/U8tGtaV8v3bL71pCzW5gnBSX+NrN+7r4m6vFRkunc49w22aA59WVQf85mce/LUcs/avlI3dT+klBvkSwiIiIi0tzUNydZRERERKTZUZEsIiIiIpJCRbKIiIiISAoVySIiIiIiKVQki4iIiIik+P//U01JHfSYVAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "labels = session.list_labels(SOURCE_ID, include_unlabeled=True)\n", "plot_labels_over_time(labels, SOURCE_ID, timeunit=\"s\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see we only labeled a small subset of the data.\n", "The idea is not to label all the measurements, but to label a part and then use that information to make inference about the unlabeled measurements." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Deleting labels\n", "\n", "Now, we check the total number of existing labels in our source." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Currently, there are 5 labels\n" ] } ], "source": [ "labels = session.list_labels(SOURCE_ID)\n", "print(f\"Currently, there are {len(labels)} labels\")" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "To delete labels we use the `MVG.delete_label()` method.\n", "Let's use that to remove the label from the first measurement and keep only three labels per mode." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "session.delete_label(SOURCE_ID, first_measurement)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Currently, there are 5 labels\n" ] } ], "source": [ "labels = session.list_labels(SOURCE_ID)\n", "print(f\"Currently, there are {len(labels)} labels\")" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "## Label Propagation\n", "\n", "Until this point, we had added labels to some of our measurements but we might be interested on adding the labels to the rest of the measurements.\n", "We use the [\"LabelPropagation\"](../features/label_propagation.md) feature to achieve this.\n", "\n", "The `LabelPropagation` feature uses the results from the ModeId feature to propagate the labels.\n", "However, the labels are attached to each measurement individually and not to the modes as a whole.\n", "\n", "To use the `LabelPropagation` feature, we need to know which source is to be used and the `request_id` that holds the results of the ModeId feature.\n", "Then, we can request the analysis.\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "{'request_id': 'e28ef3d9560bb88b5b70db685b8b8d8b', 'request_status': 'queued'}" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "params = {\"model_ref\": ModeId_request_id}\n", "labelProp_u0001 = session.request_analysis(SOURCE_ID, \"LabelPropagation\", params)\n", "labelProp_request_id = labelProp_u0001[\"request_id\"]\n", "labelProp_u0001" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "We check the status of the analysis to ensure the analysis is finished." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "'successful'" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "session.wait_for_analyses([labelProp_request_id])\n", "out_status = session.get_analysis_status(labelProp_request_id)\n", "out_status" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Before we are able to get the analysis results, we need to wait until those analyses are successfully completed.\n", "Once the analysis is complete, one gets the results by calling the corresponding “request_id” for the LabelPropagation analysis.\n", "The raw results can be retrieved by calling the `get_analysis_results` function." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/plain": [ "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "labelprop_output = session.get_analysis_results(request_id=labelProp_request_id)\n", "labelprop_output.keys()" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "The output is a dictionary that contains seven key elements.\n", "These elements are:\n", "\n", "* `\"status\"` indicates if the analysis was successful.\n", "\n", "* `\"request_id\"` is the identifier of the requested analysis.\n", "\n", "* `\"feature\"` is the name of the request feature.\n", "\n", "* `\"results\"` includes the numeric results.\n", "\n", "* `\"inputs\"` includes the input information for the request analysis.\n", "\n", "* `\"error_info\"` includes the error information in case the analysis fails and it is empty if the analysis is successful.\n", "\n", "* `\"debug_info\"` includes debugging (log) information related to the failed analysis." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To make the results more accessible, we’ll use the analysis_classes.\n", "The `parse_results` function will take the raw_results of (any) analysis and represent them in a python object with a number of convenience methods for plotting and exporting.\n", "The parse function will automatically determine the kind (feature) of analysis based on the raw_results and based on the defined timezone convert the epoch into actual dates." ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ "labelprop_results = parse_results(labelprop_output, \"Europe/Stockholm\", \"s\")\n" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "Once we had parsed the results, we can export them to a dataframe for ease of manipulation" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
labelseveritynoteslabel_timestampdatetimetimestampcertainty_level
0Healthy-1Added by label propagation2022-05-10 10:16:122019-10-05 13:01:00+02:0015702732601.0
1Healthy-1Added by label propagation2022-05-10 10:16:122019-10-06 13:01:00+02:0015703596601.0
2Healthy1This is a demo.2022-05-10 10:15:562019-10-07 13:01:00+02:0015704460601.0
3Healthy-1Added by label propagation2022-05-10 10:16:122019-10-08 13:01:00+02:0015705324601.0
4Healthy-1Added by label propagation2022-05-10 10:16:122019-10-09 13:01:00+02:0015706188601.0
5Healthy-1Added by label propagation2022-05-10 10:16:122019-10-10 13:01:00+02:0015707052601.0
6Healthy-1Added by label propagation2022-05-10 10:16:122019-10-11 13:01:00+02:0015707916601.0
7Healthy1This is a demo.2022-05-10 10:15:562019-10-12 13:01:00+02:0015708780601.0
8Healthy1This is a demo.2022-05-10 10:15:562019-10-13 13:01:00+02:0015709644601.0
9Healthy-1Added by label propagation2022-05-10 10:16:122019-10-14 13:01:00+02:0015710508601.0
10Healthy-1Added by label propagation2022-05-10 10:16:122019-10-15 13:01:00+02:0015711372601.0
11Healthy-1Added by label propagation2022-05-10 10:16:122019-10-16 13:01:00+02:0015712236601.0
12Healthy-1Added by label propagation2022-05-10 10:16:122019-10-17 13:01:00+02:0015713100601.0
13Healthy-1Added by label propagation2022-05-10 10:16:122019-10-18 13:01:00+02:0015713964601.0
14Healthy-1Added by label propagation2022-05-10 10:16:122019-10-19 13:01:00+02:0015714828601.0
15Healthy-1Added by label propagation2022-05-10 10:16:122019-10-20 13:01:00+02:0015715692601.0
16Transition-1Added by label propagation2022-05-10 10:16:122019-10-21 13:01:00+02:0015716556601.0
17Transition2This is a demo.2022-05-10 10:15:562019-10-22 13:01:00+02:0015717420601.0
18Transition-1Added by label propagation2022-05-10 10:16:122019-10-23 13:01:00+02:0015718284601.0
19Transition-1Added by label propagation2022-05-10 10:16:122019-10-24 13:01:00+02:0015719148601.0
20Transition-1Added by label propagation2022-05-10 10:16:122019-10-25 13:01:00+02:0015720012601.0
21Transition-1Added by label propagation2022-05-10 10:16:122019-10-26 13:01:00+02:0015720876601.0
22Transition2This is a demo.2022-05-10 10:15:572019-10-27 13:01:00+01:0015721776601.0
23Transition2This is a demo.2022-05-10 10:15:572019-10-28 13:01:00+01:0015722640601.0
24Faulty-1Added by label propagation2022-05-10 10:16:122019-10-29 13:01:00+01:0015723504601.0
25Faulty-1Added by label propagation2022-05-10 10:16:122019-10-30 13:01:00+01:0015724368601.0
26Faulty-1Added by label propagation2022-05-10 10:16:122019-10-31 13:01:00+01:0015725232601.0
27Faulty-1Added by label propagation2022-05-10 10:16:122019-11-01 13:01:00+01:0015726096601.0
28Faulty-1Added by label propagation2022-05-10 10:16:122019-11-02 13:01:00+01:0015726960601.0
29Faulty-1Added by label propagation2022-05-10 10:16:122019-11-03 13:01:00+01:0015727824601.0
30Faulty-1Added by label propagation2022-05-10 10:16:122019-11-04 13:01:00+01:0015728688601.0
31Faulty-1Added by label propagation2022-05-10 10:16:122019-11-05 13:01:00+01:0015729552601.0
32Faulty3This is a demo.2022-05-10 10:15:572019-11-06 13:01:00+01:0015730416601.0
33Faulty-1Added by label propagation2022-05-10 10:16:122019-11-07 13:01:00+01:0015731280601.0
34Faulty-1Added by label propagation2022-05-10 10:16:122019-11-08 13:01:00+01:0015732144601.0
35Faulty-1Added by label propagation2022-05-10 10:16:122019-11-09 13:01:00+01:0015733008601.0
36Faulty3This is a demo.2022-05-10 10:15:572019-11-10 13:01:00+01:0015733872601.0
37Faulty-1Added by label propagation2022-05-10 10:16:122019-11-11 13:01:00+01:0015734736601.0
38Faulty-1Added by label propagation2022-05-10 10:16:122019-11-12 13:01:00+01:0015735600601.0
39Faulty3This is a demo.2022-05-10 10:15:572019-11-13 13:01:00+01:0015736464601.0
40Faulty-1Added by label propagation2022-05-10 10:16:122019-11-14 13:01:00+01:0015737328601.0
41Faulty-1Added by label propagation2022-05-10 10:16:122019-11-15 13:01:00+01:0015738192601.0
42Faulty-1Added by label propagation2022-05-10 10:16:122019-11-16 13:01:00+01:0015739056601.0
43Faulty-1Added by label propagation2022-05-10 10:16:122019-11-17 13:01:00+01:0015739920601.0
44Faulty-1Added by label propagation2022-05-10 10:16:122019-11-18 13:01:00+01:0015740784601.0
45Faulty-1Added by label propagation2022-05-10 10:16:122019-11-19 13:01:00+01:0015741648601.0
46Faulty-1Added by label propagation2022-05-10 10:16:122019-11-20 13:01:00+01:0015742512601.0
47Faulty-1Added by label propagation2022-05-10 10:16:122019-11-21 13:01:00+01:0015743376601.0
48Faulty-1Added by label propagation2022-05-10 10:16:122019-11-22 13:01:00+01:0015744240601.0
\n", "
" ], "text/plain": [ " label severity notes label_timestamp \\\n", "0 Healthy -1 Added by label propagation 2022-05-10 10:16:12 \n", "1 Healthy -1 Added by label propagation 2022-05-10 10:16:12 \n", "2 Healthy 1 This is a demo. 2022-05-10 10:15:56 \n", "3 Healthy -1 Added by label propagation 2022-05-10 10:16:12 \n", "4 Healthy -1 Added by label propagation 2022-05-10 10:16:12 \n", "5 Healthy -1 Added by label propagation 2022-05-10 10:16:12 \n", "6 Healthy -1 Added by label propagation 2022-05-10 10:16:12 \n", "7 Healthy 1 This is a demo. 2022-05-10 10:15:56 \n", "8 Healthy 1 This is a demo. 2022-05-10 10:15:56 \n", "9 Healthy -1 Added by label propagation 2022-05-10 10:16:12 \n", "10 Healthy -1 Added by label propagation 2022-05-10 10:16:12 \n", "11 Healthy -1 Added by label propagation 2022-05-10 10:16:12 \n", "12 Healthy -1 Added by label propagation 2022-05-10 10:16:12 \n", "13 Healthy -1 Added by label propagation 2022-05-10 10:16:12 \n", "14 Healthy -1 Added by label propagation 2022-05-10 10:16:12 \n", "15 Healthy -1 Added by label propagation 2022-05-10 10:16:12 \n", "16 Transition -1 Added by label propagation 2022-05-10 10:16:12 \n", "17 Transition 2 This is a demo. 2022-05-10 10:15:56 \n", "18 Transition -1 Added by label propagation 2022-05-10 10:16:12 \n", "19 Transition -1 Added by label propagation 2022-05-10 10:16:12 \n", "20 Transition -1 Added by label propagation 2022-05-10 10:16:12 \n", "21 Transition -1 Added by label propagation 2022-05-10 10:16:12 \n", "22 Transition 2 This is a demo. 2022-05-10 10:15:57 \n", "23 Transition 2 This is a demo. 2022-05-10 10:15:57 \n", "24 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "25 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "26 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "27 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "28 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "29 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "30 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "31 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "32 Faulty 3 This is a demo. 2022-05-10 10:15:57 \n", "33 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "34 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "35 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "36 Faulty 3 This is a demo. 2022-05-10 10:15:57 \n", "37 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "38 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "39 Faulty 3 This is a demo. 2022-05-10 10:15:57 \n", "40 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "41 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "42 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "43 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "44 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "45 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "46 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "47 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "48 Faulty -1 Added by label propagation 2022-05-10 10:16:12 \n", "\n", " datetime timestamp certainty_level \n", "0 2019-10-05 13:01:00+02:00 1570273260 1.0 \n", "1 2019-10-06 13:01:00+02:00 1570359660 1.0 \n", "2 2019-10-07 13:01:00+02:00 1570446060 1.0 \n", "3 2019-10-08 13:01:00+02:00 1570532460 1.0 \n", "4 2019-10-09 13:01:00+02:00 1570618860 1.0 \n", "5 2019-10-10 13:01:00+02:00 1570705260 1.0 \n", "6 2019-10-11 13:01:00+02:00 1570791660 1.0 \n", "7 2019-10-12 13:01:00+02:00 1570878060 1.0 \n", "8 2019-10-13 13:01:00+02:00 1570964460 1.0 \n", "9 2019-10-14 13:01:00+02:00 1571050860 1.0 \n", "10 2019-10-15 13:01:00+02:00 1571137260 1.0 \n", "11 2019-10-16 13:01:00+02:00 1571223660 1.0 \n", "12 2019-10-17 13:01:00+02:00 1571310060 1.0 \n", "13 2019-10-18 13:01:00+02:00 1571396460 1.0 \n", "14 2019-10-19 13:01:00+02:00 1571482860 1.0 \n", "15 2019-10-20 13:01:00+02:00 1571569260 1.0 \n", "16 2019-10-21 13:01:00+02:00 1571655660 1.0 \n", "17 2019-10-22 13:01:00+02:00 1571742060 1.0 \n", "18 2019-10-23 13:01:00+02:00 1571828460 1.0 \n", "19 2019-10-24 13:01:00+02:00 1571914860 1.0 \n", "20 2019-10-25 13:01:00+02:00 1572001260 1.0 \n", "21 2019-10-26 13:01:00+02:00 1572087660 1.0 \n", "22 2019-10-27 13:01:00+01:00 1572177660 1.0 \n", "23 2019-10-28 13:01:00+01:00 1572264060 1.0 \n", "24 2019-10-29 13:01:00+01:00 1572350460 1.0 \n", "25 2019-10-30 13:01:00+01:00 1572436860 1.0 \n", "26 2019-10-31 13:01:00+01:00 1572523260 1.0 \n", "27 2019-11-01 13:01:00+01:00 1572609660 1.0 \n", "28 2019-11-02 13:01:00+01:00 1572696060 1.0 \n", "29 2019-11-03 13:01:00+01:00 1572782460 1.0 \n", "30 2019-11-04 13:01:00+01:00 1572868860 1.0 \n", "31 2019-11-05 13:01:00+01:00 1572955260 1.0 \n", "32 2019-11-06 13:01:00+01:00 1573041660 1.0 \n", "33 2019-11-07 13:01:00+01:00 1573128060 1.0 \n", "34 2019-11-08 13:01:00+01:00 1573214460 1.0 \n", "35 2019-11-09 13:01:00+01:00 1573300860 1.0 \n", "36 2019-11-10 13:01:00+01:00 1573387260 1.0 \n", "37 2019-11-11 13:01:00+01:00 1573473660 1.0 \n", "38 2019-11-12 13:01:00+01:00 1573560060 1.0 \n", "39 2019-11-13 13:01:00+01:00 1573646460 1.0 \n", "40 2019-11-14 13:01:00+01:00 1573732860 1.0 \n", "41 2019-11-15 13:01:00+01:00 1573819260 1.0 \n", "42 2019-11-16 13:01:00+01:00 1573905660 1.0 \n", "43 2019-11-17 13:01:00+01:00 1573992060 1.0 \n", "44 2019-11-18 13:01:00+01:00 1574078460 1.0 \n", "45 2019-11-19 13:01:00+01:00 1574164860 1.0 \n", "46 2019-11-20 13:01:00+01:00 1574251260 1.0 \n", "47 2019-11-21 13:01:00+01:00 1574337660 1.0 \n", "48 2019-11-22 13:01:00+01:00 1574424060 1.0 " ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "labelprop_results.to_df()\n" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "We can also display the results and visualize the labels given to the different measurements." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "pycharm": { "name": "#%%\n" } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "''" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "labelprop_results.plot()" ] }, { "cell_type": "markdown", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ "As you can see from the results, it is easier to appreciate now which measurements have a healthy behavior, which measurements have a faulty behavior and which measurements have a transition behavior from healthy to faulty.\n" ] } ], "metadata": { "celltoolbar": "Tags", "interpreter": { "hash": "a44fa91c5dfe8381243a89b49ad51245e1b4984ebdbff837585626a5fdba33e0" }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.5" } }, "nbformat": 4, "nbformat_minor": 2 }