From 5543ffdcbdd6add37a223612ddb9b63ceb754ced Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Mon, 28 Jun 2021 05:55:30 +0200 Subject: [PATCH 01/90] Improve handling of timestamps in modes_over_time #28 #29 #32 (#30) * Improve handling of timestamps in modes_over_time #28 #29 * fix highlighting of uncertain areas #32 --- mvg/plotting.py | 107 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 75 insertions(+), 32 deletions(-) diff --git a/mvg/plotting.py b/mvg/plotting.py index e6e83e9e..c67ea32f 100644 --- a/mvg/plotting.py +++ b/mvg/plotting.py @@ -145,6 +145,9 @@ def modes_over_time( timeticks_interval=None, timeunit="ms", axes=None, + show_uncertain=True, + only_start_end_timeticks=False, + timetick_angle=85, ): """Creates a rectangular timeline of modes. @@ -177,6 +180,15 @@ def modes_over_time( axes: object of class matplotlib.axes, optional the axes to be used by boxplot. + show_uncertain: bool, optional + highlight uncertain areas + + only_start_end_timeticks: bool, optional + If True, only print the time stamps for the first and last element of data. + + timetick_angle: float, optional + the angle of time tick texts. + Returns ---------- image: object of class matplotlib.axes @@ -199,32 +211,66 @@ def modes_over_time( image = axes.plot() # Create rectangular patch for timestamp - datalist = data["labels"].tolist() - uncertlist = data["uncertain"].tolist() - for i, val in enumerate(datalist): - # gray border around uncertains - if uncertlist[i]: - ecol = -2 - else: - ecol = val - rect = patches.Rectangle( - (i * width, 0), - width, - height, - edgecolor=colors[ecol], - facecolor=colors[val], - fill=True, + + ts_range = data["timestamps"].iloc[-1] - data["timestamps"].iloc[0] + scaling_factor = len(data) / ts_range + + def _plot_row(row_data, is_uncert_data, y_pos=0): + # Collect the indices of data where modes change plus start and end points + interval_list = ( + [0] + + [i for i in range(1, len(row_data)) if row_data[i] != row_data[i - 1]] + + [len(row_data) - 1] ) - axes.add_patch(rect) + + for idx in range(len(interval_list) - 1): + # gray border around uncertains + i = interval_list[idx] + if is_uncert_data: + col = -2 if row_data[i] else -1 + else: + col = row_data[i] + i_next = interval_list[idx + 1] + block_len = ( + data["timestamps"].iloc[i_next] - data["timestamps"].iloc[i] + ) * scaling_factor + start_pos = ( + data["timestamps"].iloc[i] - data["timestamps"].iloc[0] + ) * scaling_factor + rect = patches.Rectangle( + (width * start_pos, y_pos), + width * block_len, + height - y_pos, + edgecolor=colors[col], + facecolor=colors[col], + fill=True, + ) + axes.add_patch(rect) + + datalist = data["labels"].tolist() + _plot_row(datalist, is_uncert_data=False) + + if show_uncertain: + uncertlist = data["uncertain"].tolist() + _plot_row(uncertlist, is_uncert_data=True, y_pos=4 / 5 * height) # Create time ticks on x-axis and labels if timeticks_interval is None: - tick_index = [0] - ticks_x = [i for i in range(1, len(datalist)) if datalist[i] != datalist[i - 1]] - tick_index.extend(ticks_x) + tick_index = ( + [0] + + [i for i in range(1, len(datalist)) if datalist[i] != datalist[i - 1]] + + [len(datalist) - 1] + ) else: tick_index = list(range(0, len(datalist), timeticks_interval)) - tick_positions = [i * width for i in tick_index] + if only_start_end_timeticks: + tick_index = [0, len(datalist) - 1] + tick_positions = [ + (data["timestamps"].iloc[i] - data["timestamps"].iloc[0]) + * scaling_factor + * width + for i in tick_index + ] # Modify figure properties to leave wide rectangle only axes.set_ylim(0, height) @@ -240,18 +286,15 @@ def modes_over_time( # Modify ticks position and create legend df_changes = data.iloc[tick_index] - tick_x_labels = df_changes["Date"] - tick_x_labels = tick_x_labels.apply(lambda x: x.date()) - axes.set_xticklabels(tick_x_labels, rotation=85) - legend_labels = [] - for i in list(data["labels"].unique()): - if i == -1: - patch = patches.Patch( - facecolor=colors[i], edgecolor="black", label="No data" - ) - else: - patch = patches.Patch(color=colors[i], label="Mode {}".format(int(i))) - legend_labels.append(patch) + tick_x_labels = df_changes["Date"].apply(lambda x: x.date()) + axes.set_xticklabels(tick_x_labels, rotation=timetick_angle) + legend_labels = [ + patches.Patch(facecolor=colors[i], edgecolor="black", label="No data") + if i == -1 + else patches.Patch(color=colors[i], label="Mode {}".format(int(i))) + for i in list(data["labels"].unique()) + ] + axes.legend(handles=legend_labels, bbox_to_anchor=(1.05, 1), loc="upper left") axes.set_title("Modes over time for {}".format(request_id)) plt.tight_layout() From f546f16a3a0fdacb2c490bb63ccdd0c9155835ea Mon Sep 17 00:00:00 2001 From: Sergio Martin-del-Campo <61144290+SergioMDCB@users.noreply.github.com> Date: Mon, 28 Jun 2021 06:19:37 +0200 Subject: [PATCH 02/90] Examples update (#33) * Updated brief overview example * Update sources and measurements example * Update of the analysis visualization example * Update to the RMS and ModeId features description --- .../content/examples/analysis_visual.ipynb | 688 +- .../content/examples/brief_overview.ipynb | 997 +- .../examples/sources_and_measurements.ipynb | 8239 ++++++++++++----- docs/source/content/features/ModeId.md | 22 +- docs/source/content/features/RMS.md | 5 +- 5 files changed, 6496 insertions(+), 3455 deletions(-) diff --git a/docs/source/content/examples/analysis_visual.ipynb b/docs/source/content/examples/analysis_visual.ipynb index f444a144..0f574a1e 100644 --- a/docs/source/content/examples/analysis_visual.ipynb +++ b/docs/source/content/examples/analysis_visual.ipynb @@ -6,10 +6,13 @@ "source": [ "# Analysis and Results Visualization\n", "\n", - "This script describes the procedure to request an analysis to the Viking Analytics Vibration service.\n", + "This script describes the procedure to request an analysis to the Viking Analytics' MultiViz Analytics Engine (MVG) service.\n", "It shows how to query for results of single-asset or asset-population analysis.\n", "In addition, it presents some examples of how to visualize the results available for the mode identification feature.\n", "\n", + "In this example, we will describe how to access and manipulate the analysis results directly.\n", + "The [\"Analysis Classes\"](analysis_classes.ipynb) example provides a simplified and unified interface to access these results as a pandas dataframe, along with some basic visualization of the results.\n", + "\n", "## Preliminaries\n", "\n", "This procedure describes all the steps to request an analysis, get analysis results and plot those results using the functions in `plotting`.\n", @@ -23,13 +26,11 @@ "ExecuteTime": { "end_time": "2021-03-18T10:00:28.735704Z", "start_time": "2021-03-18T10:00:28.513699Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [], "source": [ + "import os\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from requests import HTTPError\n", @@ -54,28 +55,25 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:29.472021Z", "start_time": "2021-03-18T10:00:29.469799Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [], "source": [ "# Replace by your own Token\n", - "VALID_TOKEN = \"Add token here\"" + "VALID_TOKEN = os.environ['TEST_TOKEN']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Instantiate a session object with mvg library.\n", - "A session object basically caches the endpoint and the token, to simplify the the calls to the mvg library." + "Instantiate a session object with MVG library.\n", + "A session object basically caches the endpoint and the token, to simplify the calls to the MVG library." ] }, { @@ -85,9 +83,6 @@ "ExecuteTime": { "end_time": "2021-03-18T10:00:30.395676Z", "start_time": "2021-03-18T10:00:30.214070Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [], @@ -107,7 +102,7 @@ "## Asset Analysis\n", "\n", "In this example, we will use the sources uploaded by the [\"Sources and Measurement\"](sources_and_measurements.ipynb) example.\n", - "We start by seeing if the sources are available in the database.\n", + "We start by looking if the sources are available in the database.\n", "At least, sources, \"u0001\" and \"u0005\", should appear as available." ] }, @@ -116,7 +111,6 @@ "execution_count": 4, "metadata": { "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -126,18 +120,18 @@ "output_type": "stream", "text": [ "Retrieved sources\n", - "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}}\n", - "Source info retrieved for one source: {'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}}\n", - "{'source_id': 'u0002', 'meta': {'assetId': 'assetB', 'measPoint': 'mloc01', 'location': 'paris'}}\n", - "Source info retrieved for one source: {'source_id': 'u0002', 'meta': {'assetId': 'assetB', 'measPoint': 'mloc01', 'location': 'paris'}}\n", - "{'source_id': 'u0003', 'meta': {'assetId': 'assetC', 'measPoint': 'mloc01', 'location': 'milano'}}\n", - "Source info retrieved for one source: {'source_id': 'u0003', 'meta': {'assetId': 'assetC', 'measPoint': 'mloc01', 'location': 'milano'}}\n", - "{'source_id': 'u0004', 'meta': {'assetId': 'assetD', 'measPoint': 'mloc01', 'location': 'milano'}}\n", - "Source info retrieved for one source: {'source_id': 'u0004', 'meta': {'assetId': 'assetD', 'measPoint': 'mloc01', 'location': 'milano'}}\n", - "{'source_id': 'u0005', 'meta': {'assetId': 'assetE', 'measPoint': 'mloc01', 'location': 'london'}}\n", - "Source info retrieved for one source: {'source_id': 'u0005', 'meta': {'assetId': 'assetE', 'measPoint': 'mloc01', 'location': 'london'}}\n", - "{'source_id': 'u0006', 'meta': {'assetId': 'assetF', 'measPoint': 'mloc01', 'location': 'london'}}\n", - "Source info retrieved for one source: {'source_id': 'u0006', 'meta': {'assetId': 'assetF', 'measPoint': 'mloc01', 'location': 'london'}}\n" + "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform'}}\n", + "Source info retrieved for one source: {'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform'}}\n", + "{'source_id': 'u0002', 'meta': {'assetId': 'assetB', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform'}}\n", + "Source info retrieved for one source: {'source_id': 'u0002', 'meta': {'assetId': 'assetB', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform'}}\n", + "{'source_id': 'u0003', 'meta': {'assetId': 'assetC', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform'}}\n", + "Source info retrieved for one source: {'source_id': 'u0003', 'meta': {'assetId': 'assetC', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform'}}\n", + "{'source_id': 'u0004', 'meta': {'assetId': 'assetD', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform'}}\n", + "Source info retrieved for one source: {'source_id': 'u0004', 'meta': {'assetId': 'assetD', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform'}}\n", + "{'source_id': 'u0005', 'meta': {'assetId': 'assetE', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform'}}\n", + "Source info retrieved for one source: {'source_id': 'u0005', 'meta': {'assetId': 'assetE', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform'}}\n", + "{'source_id': 'u0006', 'meta': {'assetId': 'assetF', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform'}}\n", + "Source info retrieved for one source: {'source_id': 'u0006', 'meta': {'assetId': 'assetF', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform'}}\n" ] } ], @@ -155,7 +149,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "During our example, we will utilize sources, \"u0001\" and \"u0005\", previously uploaded to our database." + "During our example, we will utilize sources, \"u0001\" and \"u0005\", which were previously uploaded to our database." ] }, { @@ -167,16 +161,13 @@ "start_time": "2021-03-18T10:00:32.800567Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "['u0001', 'u0005']" - ] + "text/plain": "['u0001', 'u0005']" }, "execution_count": 5, "metadata": {}, @@ -209,16 +200,13 @@ "start_time": "2021-03-18T10:00:35.990849Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "{'RMS': '0.0.1', 'ModeId': '0.1.0', 'BlackSheep': '0.1.0'}" - ] + "text/plain": "{'RMS': '1.0.0', 'ModeId': '0.1.1', 'BlackSheep': '1.0.0'}" }, "execution_count": 6, "metadata": {}, @@ -239,7 +227,7 @@ }, "source": [ "Once the source and measurements had been uploaded in the database, we can request an analysis to the VA Vibration service.\n", - "When we request an analysis, we need to say the source to be used in the analysis and the feature to be applied.\n", + "When we request an analysis, we need to say which source is to be used in the analysis and the feature to be applied.\n", "\n", "The requested analysis will return a dictionary object with two elements.\n", "The first element is a `\"request_id\"` that can be used to retrieve the results after.\n", @@ -257,16 +245,13 @@ "start_time": "2021-03-18T10:00:37.457555Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "{'request_id': 'de9562802a3248a9723ce4a8950c9a00', 'request_status': 'ongoing'}" - ] + "text/plain": "{'request_id': '2f8ef4370ca6f16ee30a71cf55645b02', 'request_status': 'queued'}" }, "execution_count": 7, "metadata": {}, @@ -299,16 +284,13 @@ "start_time": "2021-03-18T10:00:38.499851Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "{'request_id': '9cced936d101c436eb32e7f8dc379796', 'request_status': 'ongoing'}" - ] + "text/plain": "{'request_id': 'e0ee3ad6935947f70a9d455f37da4c48', 'request_status': 'queued'}" }, "execution_count": 8, "metadata": {}, @@ -328,26 +310,25 @@ } }, "source": [ - "Before we are able to get the analysis results, we need to wait until those results are successfully completed.\n", + "Before we are able to get the analysis results, we need to wait until those analyses are successfully completed.\n", "\n", - "We can query for the status of our requested analysis.\n", + "We can query for the status of our requested analyses.\n", "The possible status are:\n", "- Queued: The analysis has not started in the remote server and it is in the queue to begin.\n", "- Ongoing: The analysis is been processed at this time.\n", "- Failed: The analysis is complete and failed to produce a result.\n", - "- Successful: The analysis is complete and it successfully produced a result." + "- Successful: The analysis is complete and it produced a successful result." ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:43.435603Z", "start_time": "2021-03-18T10:00:43.172181Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -382,25 +363,22 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:44.400481Z", "start_time": "2021-03-18T10:00:44.261231Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "{'request_id': '9b0673ec9ee86fd9069cd33b4f917a4a', 'request_status': 'ongoing'}" - ] + "text/plain": "{'request_id': '2a0a12ff777aaefe7401fdc8b93e288d', 'request_status': 'queued'}" }, - "execution_count": 11, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -413,25 +391,22 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:44.815607Z", "start_time": "2021-03-18T10:00:44.676422Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "{'request_id': '51d92e031290b7e28dd094faf01ea6ea', 'request_status': 'queued'}" - ] + "text/plain": "{'request_id': '4a76979f8d731606eb2cf03e9a6fd221', 'request_status': 'queued'}" }, - "execution_count": 12, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -455,14 +430,13 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:48.331542Z", "start_time": "2021-03-18T10:00:47.324848Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -497,14 +471,13 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:51.412234Z", "start_time": "2021-03-18T10:00:50.909661Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -513,10 +486,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "The RMS analysis of u0001 has request_id ['5cf800607f127ebbca7b90c3b51c506a', 'de9562802a3248a9723ce4a8950c9a00'].\n", - "The RMS analysis of u0005 has request_id ['9b0673ec9ee86fd9069cd33b4f917a4a'].\n", - "The ModeId analysis of u0001 has request_id ['e176f4928372a627e743222eb2de0690', '535be882dd271d03c26bef8257ae03ec', '57b816d91decda67355da0ad160f0016', '25bdf3a393c5c166ae230ef98911606c', '9cced936d101c436eb32e7f8dc379796'].\n", - "The ModeId analysis of u0005 has request_id ['ff5392230521bd4bdcc5c36491eeefe5', '99934e2c5fd0858a90836ae3ec02cd52', '51d92e031290b7e28dd094faf01ea6ea'].\n" + "The RMS analysis of u0001 has request_id ['5cf800607f127ebbca7b90c3b51c506a', 'de9562802a3248a9723ce4a8950c9a00', '2398c778dfe8625264fcfe952ead21b7', '78077ee974f2b5d17290c982d22b915a', '1a12f0e88c388eed298245bf122d7565', '2f8ef4370ca6f16ee30a71cf55645b02'].\n", + "The RMS analysis of u0005 has request_id ['9b0673ec9ee86fd9069cd33b4f917a4a', '2a0a12ff777aaefe7401fdc8b93e288d'].\n", + "The ModeId analysis of u0001 has request_id ['e176f4928372a627e743222eb2de0690', '535be882dd271d03c26bef8257ae03ec', '57b816d91decda67355da0ad160f0016', '25bdf3a393c5c166ae230ef98911606c', '9cced936d101c436eb32e7f8dc379796', 'd34f7e8f0a5b01a8471f1a5df23e1923', 'ba1202a3c210c9e388a980913cda3640', 'a089f212b2eda4eb79fc569b00c74659', 'e0ee3ad6935947f70a9d455f37da4c48'].\n", + "The ModeId analysis of u0005 has request_id ['ff5392230521bd4bdcc5c36491eeefe5', '99934e2c5fd0858a90836ae3ec02cd52', '51d92e031290b7e28dd094faf01ea6ea', '4a76979f8d731606eb2cf03e9a6fd221'].\n" ] } ], @@ -545,44 +518,45 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:53.012148Z", "start_time": "2021-03-18T10:00:52.486345Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [ { "data": { - "text/plain": [ - "dict_keys(['status', 'results'])" - ] + "text/plain": "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" }, - "execution_count": 15, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "rms_table1 = session.get_analysis_results(request_id=REQUEST_IDS_u0001[0])\n", - "mode_table1 = session.get_analysis_results(request_id=REQUEST_IDS_u0001[1])\n", - "rms_table5 = session.get_analysis_results(request_id=REQUEST_IDS_u0005[0])\n", - "mode_table5 = session.get_analysis_results(request_id=REQUEST_IDS_u0005[1])\n", + "rms_output1 = session.get_analysis_results(request_id=REQUEST_IDS_u0001[0])\n", + "mode_output1 = session.get_analysis_results(request_id=REQUEST_IDS_u0001[1])\n", + "rms_output5 = session.get_analysis_results(request_id=REQUEST_IDS_u0005[0])\n", + "mode_output5 = session.get_analysis_results(request_id=REQUEST_IDS_u0005[1])\n", "\n", - "rms_table1.keys()" + "rms_output1.keys()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Each dictionary contains two key elements.\n", - "The first key `\"status\"` indicates if the analysis was succesful.\n", - "The second key `\"results\"` includes the numeric results." + "Each dictionary contains seven key elements.\n", + "These elements are:\n", + "- `\"status\"` indicates if the analysis was successful.\n", + "- `\"request_id\"` is the identifier of the requested analysis.\n", + "- `\"feature\"` is the name of the request feature.\n", + "- `\"results\"` includes the numeric results.\n", + "- `\"inputs\"` includes the input information for the request analysis.\n", + "- `\"error_info\"` includes the error information in case the analysis fails and it is empty if the analysis is successful.\n", + "- `\"debug_info\"` includes debuging (log) information related to the failed analysis.\n" ] }, { @@ -593,104 +567,46 @@ } }, "source": [ - "The `\"results\"` of the \"RMS\" feature are two lists.\n", - "One list corresponds to the epoch (in seconds) of the measurement and the other list contains the rms value for the measurement.\n", + "The `\"results\"` of the \"RMS\" feature are five lists.\n", + "These lists are:\n", + "- timestamps: epoch (in seconds for this example) of the measurements.\n", + "- rms: rms value for each measurement.\n", + "- rms_dc: rms value without the dc component for each measurement.\n", + "- dc: dc component value for each measurement.\n", + "- utilization: boolean indicating whether the measurement was used for the rms calculation.\n", + "\n", "\n", "These lists can be converted into a dataframe for ease of manipulation.\n", + "In this example, we will show how to access the dictionary results information and convert it into a Pandas dataframe.\n", + "Please check the [\"Analysis Classes\"](analysis_classes.ipynb) example for directly getting a results Pandas dataframe.\n", "In addition, the \"timestamp\" column is converted to a timestamp object in a column called \"Date\"." ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:55.411186Z", "start_time": "2021-03-18T10:00:55.402365Z" }, "pycharm": { - "is_executing": false, "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", - "
timestampsrmsDate
015702732600.6621832019-10-05 11:01:00
115703596600.6616522019-10-06 11:01:00
215704460600.6619232019-10-07 11:01:00
315705324600.6617142019-10-08 11:01:00
415706188600.6617092019-10-09 11:01:00
\n", - "
" - ], - "text/plain": [ - " timestamps rms Date\n", - "0 1570273260 0.662183 2019-10-05 11:01:00\n", - "1 1570359660 0.661652 2019-10-06 11:01:00\n", - "2 1570446060 0.661923 2019-10-07 11:01:00\n", - "3 1570532460 0.661714 2019-10-08 11:01:00\n", - "4 1570618860 0.661709 2019-10-09 11:01:00" - ] + "text/plain": " timestamps rms rms_dc dc utilization Date\n0 1570186860 0.647086 0.662108 -0.140237 1 2019-10-04 11:01:00\n1 1570273260 0.647123 0.662183 -0.140420 1 2019-10-05 11:01:00\n2 1570359660 0.646619 0.661652 -0.140239 1 2019-10-06 11:01:00\n3 1570446060 0.646873 0.661923 -0.140347 1 2019-10-07 11:01:00\n4 1570532460 0.646643 0.661714 -0.140423 1 2019-10-08 11:01:00", + "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
timestampsrmsrms_dcdcutilizationDate
015701868600.6470860.662108-0.14023712019-10-04 11:01:00
115702732600.6471230.662183-0.14042012019-10-05 11:01:00
215703596600.6466190.661652-0.14023912019-10-06 11:01:00
315704460600.6468730.661923-0.14034712019-10-07 11:01:00
415705324600.6466430.661714-0.14042312019-10-08 11:01:00
\n
" }, - "execution_count": 16, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_rms1 = pd.DataFrame(rms_table1[\"results\"])\n", + "df_rms1 = pd.DataFrame(rms_output1[\"results\"])\n", "df_rms1['Date'] = pd.to_datetime(df_rms1['timestamps'], unit=\"s\")\n", "df_rms1.head()" ] @@ -703,116 +619,79 @@ } }, "source": [ - "The `\"results\"` of the \"ModeId\" feature are three lists:\n", + "The `\"results\"` of the \"ModeId\" feature are four lists and one dictionary:\n", "- The first list is the measurement epoch in the same unit as the measurement was uploaded, which was seconds for this example.\n", "- The second list corresponds to the mode label given to the timestamp.\n", "- The third list is a boolean to indicate the uncertainty of label.\n", + "- The fourth list corresponds to the mode probability of each mode label.\n", + "The dictionary, called 'model_info', contains the \"Emerging modes\" results.\n", + "\n", + "\"Emerging modes\" is an additional output of the analysis results that describes the first appearance of each one of the identified modes.\n", "\n", - "We pass all the lists to a dataframe for ease of manipulation. \n", - "Similarly to the \"RMS\" feature, the \"timestamp\" column is converted to a timestamp object in a column called \"Date\"." + "We pass all the lists to a dataframe for ease of manipulation.\n", + "Similarly to the RMS feature, we will show how to access the dictionary results information and convert it into a Pandas dataframe.\n", + "Please check the [\"Analysis Classes\"](analysis_classes.ipynb) example for directly getting a results Pandas dataframe.\n", + "In addition, the \"timestamp\" column is converted to a timestamp object in a column called \"Date\"." ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:57.673176Z", "start_time": "2021-03-18T10:00:57.664766Z" }, - "pycharm": { - "is_executing": false - }, "scrolled": true }, "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", - "
timestampslabelsuncertainDate
015702732600False2019-10-05 11:01:00
115703596600False2019-10-06 11:01:00
215704460600False2019-10-07 11:01:00
315705324600False2019-10-08 11:01:00
415706188600False2019-10-09 11:01:00
\n", - "
" - ], - "text/plain": [ - " timestamps labels uncertain Date\n", - "0 1570273260 0 False 2019-10-05 11:01:00\n", - "1 1570359660 0 False 2019-10-06 11:01:00\n", - "2 1570446060 0 False 2019-10-07 11:01:00\n", - "3 1570532460 0 False 2019-10-08 11:01:00\n", - "4 1570618860 0 False 2019-10-09 11:01:00" - ] + "text/plain": " timestamps labels uncertain mode_probability Date\n0 1570186860 0 False 0.000159 2019-10-04 11:01:00\n1 1570273260 0 False 0.000596 2019-10-05 11:01:00\n2 1570359660 0 False 0.000058 2019-10-06 11:01:00\n3 1570446060 0 False 0.000211 2019-10-07 11:01:00\n4 1570532460 0 False 0.000007 2019-10-08 11:01:00", + "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
timestampslabelsuncertainmode_probabilityDate
015701868600False0.0001592019-10-04 11:01:00
115702732600False0.0005962019-10-05 11:01:00
215703596600False0.0000582019-10-06 11:01:00
315704460600False0.0002112019-10-07 11:01:00
415705324600False0.0000072019-10-08 11:01:00
\n
" }, - "execution_count": 17, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_mode1 = pd.DataFrame(mode_table1[\"results\"])\n", + "mode_all1 = mode_output1[\"results\"].copy()\n", + "mode_emerging1 = mode_all1.pop(\"mode_info\")\n", + "\n", + "# Conversion to dataframe of the full mode labels table\n", + "df_mode1 = pd.DataFrame(mode_all1)\n", "df_mode1['Date'] = pd.to_datetime(df_mode1['timestamps'], unit=\"s\")\n", "df_mode1.head()" ] }, + { + "cell_type": "code", + "execution_count": 19, + "outputs": [ + { + "data": { + "text/plain": " modes emerging_time max_prob_time max_probability emerging_Date\n0 0 1570186860 1574424060 0.014102 2019-10-04 11:01:00\n1 1 1571655660 1571655660 0.023025 2019-10-21 11:01:00", + "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
modesemerging_timemax_prob_timemax_probabilityemerging_Date
00157018686015744240600.0141022019-10-04 11:01:00
11157165566015716556600.0230252019-10-21 11:01:00
\n
" + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Conversion to dataframe of the emerging modes table\n", + "df_emerging1 = pd.DataFrame(mode_emerging1)\n", + "df_emerging1['emerging_Date'] = pd.to_datetime(df_emerging1['emerging_time'], unit=\"s\")\n", + "df_emerging1.head()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, { "cell_type": "markdown", "metadata": { @@ -826,101 +705,23 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:58.990587Z", "start_time": "2021-03-18T10:00:58.980233Z" }, "pycharm": { - "is_executing": false, "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", - "
timestampsrmsDatelabelsuncertain
015702732600.6621832019-10-05 11:01:000False
115703596600.6616522019-10-06 11:01:000False
215704460600.6619232019-10-07 11:01:000False
315705324600.6617142019-10-08 11:01:000False
415706188600.6617092019-10-09 11:01:000False
\n", - "
" - ], - "text/plain": [ - " timestamps rms Date labels uncertain\n", - "0 1570273260 0.662183 2019-10-05 11:01:00 0 False\n", - "1 1570359660 0.661652 2019-10-06 11:01:00 0 False\n", - "2 1570446060 0.661923 2019-10-07 11:01:00 0 False\n", - "3 1570532460 0.661714 2019-10-08 11:01:00 0 False\n", - "4 1570618860 0.661709 2019-10-09 11:01:00 0 False" - ] + "text/plain": " timestamps rms rms_dc dc utilization Date \\\n0 1570186860 0.647086 0.662108 -0.140237 1 2019-10-04 11:01:00 \n1 1570273260 0.647123 0.662183 -0.140420 1 2019-10-05 11:01:00 \n2 1570359660 0.646619 0.661652 -0.140239 1 2019-10-06 11:01:00 \n3 1570446060 0.646873 0.661923 -0.140347 1 2019-10-07 11:01:00 \n4 1570532460 0.646643 0.661714 -0.140423 1 2019-10-08 11:01:00 \n\n labels uncertain mode_probability \n0 0 False 0.000159 \n1 0 False 0.000596 \n2 0 False 0.000058 \n3 0 False 0.000211 \n4 0 False 0.000007 ", + "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
timestampsrmsrms_dcdcutilizationDatelabelsuncertainmode_probability
015701868600.6470860.662108-0.14023712019-10-04 11:01:000False0.000159
115702732600.6471230.662183-0.14042012019-10-05 11:01:000False0.000596
215703596600.6466190.661652-0.14023912019-10-06 11:01:000False0.000058
315704460600.6468730.661923-0.14034712019-10-07 11:01:000False0.000211
415705324600.6466430.661714-0.14042312019-10-08 11:01:000False0.000007
\n
" }, - "execution_count": 18, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -943,111 +744,35 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 21, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:01.536419Z", "start_time": "2021-03-18T10:01:01.523935Z" }, "pycharm": { - "is_executing": false, "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", - "
timestampsrmsDatelabelsuncertain
015701868600.6619672019-10-04 11:01:000False
115702732600.6619502019-10-05 11:01:000False
215703596600.6619322019-10-06 11:01:000False
315704460600.6623852019-10-07 11:01:000False
415705324600.6620642019-10-08 11:01:000False
\n", - "
" - ], - "text/plain": [ - " timestamps rms Date labels uncertain\n", - "0 1570186860 0.661967 2019-10-04 11:01:00 0 False\n", - "1 1570273260 0.661950 2019-10-05 11:01:00 0 False\n", - "2 1570359660 0.661932 2019-10-06 11:01:00 0 False\n", - "3 1570446060 0.662385 2019-10-07 11:01:00 0 False\n", - "4 1570532460 0.662064 2019-10-08 11:01:00 0 False" - ] + "text/plain": " timestamps rms rms_dc dc utilization Date \\\n0 1570186860 0.646887 0.661967 -0.140491 1 2019-10-04 11:01:00 \n1 1570273260 0.646963 0.661950 -0.140056 1 2019-10-05 11:01:00 \n2 1570359660 0.646905 0.661932 -0.140244 1 2019-10-06 11:01:00 \n3 1570446060 0.647395 0.662385 -0.140124 1 2019-10-07 11:01:00 \n4 1570532460 0.647057 0.662064 -0.140165 1 2019-10-08 11:01:00 \n\n labels uncertain mode_probability \n0 0 False 1.339510e-05 \n1 0 False 3.450000e-07 \n2 0 False 4.187300e-06 \n3 0 False 3.173160e-05 \n4 0 False 6.430700e-06 ", + "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
timestampsrmsrms_dcdcutilizationDatelabelsuncertainmode_probability
015701868600.6468870.661967-0.14049112019-10-04 11:01:000False1.339510e-05
115702732600.6469630.661950-0.14005612019-10-05 11:01:000False3.450000e-07
215703596600.6469050.661932-0.14024412019-10-06 11:01:000False4.187300e-06
315704460600.6473950.662385-0.14012412019-10-07 11:01:000False3.173160e-05
415705324600.6470570.662064-0.14016512019-10-08 11:01:000False6.430700e-06
\n
" }, - "execution_count": 19, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#RMS\n", - "df_rms5 = pd.DataFrame(rms_table5[\"results\"])\n", + "df_rms5 = pd.DataFrame(rms_output5[\"results\"])\n", "df_rms5['Date'] = pd.to_datetime(df_rms5['timestamps'], unit=\"s\")\n", - "#MODE_ID\n", - "df_mode5 = pd.DataFrame(mode_table5[\"results\"])\n", + "#MODE_ID (full)\n", + "mode_all5 = mode_output5[\"results\"].copy()\n", + "mode_emerging5 = mode_all5.pop(\"mode_info\")\n", + "df_mode5 = pd.DataFrame(mode_all5)\n", "df_mode5['Date'] = pd.to_datetime(df_mode5['timestamps'], unit=\"s\")\n", "#Merging dataframes\n", "df_u0005 = pd.merge_asof(df_rms5, df_mode5, on=\"timestamps\", by=\"Date\")\n", @@ -1058,29 +783,24 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We call the individual boxplot for one source and display the boxplot of the \"RMS\" for each one of the operating modes.\n", + "We can call the individual boxplot for one source and display the boxplot of the \"RMS\" for each one of the operating modes.\n", "Here, we use results for source \"u0001\"." ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 22, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:07.727375Z", "start_time": "2021-03-18T10:01:07.628927Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [ { "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] + "text/plain": "
", + "image/png": "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\n" }, "metadata": { "needs_background": "light" @@ -1101,24 +821,19 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 23, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:11.059225Z", "start_time": "2021-03-18T10:01:10.915230Z" }, - "pycharm": { - "is_executing": false - }, "scrolled": true }, "outputs": [ { "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] + "text/plain": "
", + "image/png": "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\n" }, "metadata": { "needs_background": "light" @@ -1140,23 +855,18 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 24, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:16.615916Z", "start_time": "2021-03-18T10:01:16.510745Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [ { "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] + "text/plain": "
", + "image/png": "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\n" }, "metadata": { "needs_background": "light" @@ -1177,24 +887,21 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 25, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:17.917436Z", "start_time": "2021-03-18T10:01:17.618543Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] + "text/plain": "
", + "image/png": "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\n" }, "metadata": { "needs_background": "light" @@ -1223,21 +930,18 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 26, "metadata": { "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "['u0001', 'u0002', 'u0003', 'u0004', 'u0005', 'u0006']" - ] + "text/plain": "['u0001', 'u0002', 'u0003', 'u0004', 'u0005', 'u0006']" }, - "execution_count": 31, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -1257,27 +961,24 @@ "\n", "Here, we will request the \"BlackSheep\" feature for all our sources.\n", "In addition, we show how to pass additional parameters into the analysis request.\n", - "When we want to pass additional parameter request, this needs to be in the form of a dictionary.\n", - "In this particular analysis, we had relaxed the `\"atypical_threshold\"` parameter from the default value of 0.05 to 0.20 to discover a larger number of assets as atypical." + "When we want to pass an additional parameter request, this needs to be in the form of a dictionary.\n", + "In this particular analysis, we had relaxed the `\"atypical_threshold\"` parameter from the default value of 0.05 to 0.10 to discover a larger number of assets as atypical." ] }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 27, "metadata": { "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "{'request_id': '880ed4bfa182ab64f4b8d3d213a7800f', 'request_status': 'queued'}" - ] + "text/plain": "{'request_id': 'f91fcc72ffbf8f82f86400c33ca1624c', 'request_status': 'queued'}" }, - "execution_count": 32, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -1297,10 +998,9 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 28, "metadata": { "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -1325,27 +1025,31 @@ "source": [ "The next step is to retrieve the results by calling the \"request_id\".\n", "\n", - "The output of the `\"get_analysis_results\"` function is similar to single asset features,\n", - "which is a dictionary with two key elements, `\"status\"` and `\"results\"`." + "The output of the `\"get_analysis_results\"` function is similar to single asset features.\n", + "These seven elements are:\n", + "- `\"status\"` indicates if the analysis was successful.\n", + "- `\"request_id\"` is the identifier of the requested analysis.\n", + "- `\"feature\"` is the name of the request feature.\n", + "- `\"results\"` includes the numeric results.\n", + "- `\"inputs\"` includes the input information for the request analysis.\n", + "- `\"error_info\"` includes the error information in case the analysis fails and it is empty if the analysis is successful.\n", + "- `\"debug_info\"` includes debuging (log) information related to the failed analysis." ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 30, "metadata": { "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "dict_keys(['status', 'results'])" - ] + "text/plain": "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" }, - "execution_count": 34, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -1360,15 +1064,19 @@ "metadata": {}, "source": [ "The `\"results\"` of the \"BlackSheep\" indicates the atypical assets.\n", - "We can see the list of atypical assets as the results output." + "`\"results\"` is a dictionary with a key element labelled `\"atypical_assets\"`.\n", + "`\"atypical_assets\"` is a list and the length of the list indicates the number of atypical assets.\n", + "Each element on this list is a dictionary.\n", + "The dictionary includes the source_id of the atypical assets, a list with all the measurement timestamps and the corresponding list with a boolean indicating whether the measurement is atypical.\n", + "\n", + "Here, we show the number of atypical assets and the atypical order of these assets." ] }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 31, "metadata": { "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -1377,14 +1085,43 @@ "name": "stdout", "output_type": "stream", "text": [ - "{'atypical_assets': ['u0003', 'u0002']}\n" + "There is a total of 2 atypical assets in this analysis\n" ] } ], "source": [ - "atypical = blacksheep_table[\"results\"]\n", - "print(atypical)\n" + "atypical_output = blacksheep_table[\"results\"]\n", + "atypical = atypical_output[\"atypical_assets\"]\n", + "\n", + "print(f\"There is a total of {len(atypical)} atypical assets in this analysis.\")" ] + }, + { + "cell_type": "code", + "execution_count": 32, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The 1st blacksheep is u0003\n", + "The 2nd blacksheep is u0002\n" + ] + } + ], + "source": [ + "atypical1 = atypical[0]\n", + "atypical2 = atypical[1]\n", + "print(f\"The 1st blacksheep is {atypical1['uuid']}\")\n", + "print(f\"The 2nd blacksheep is {atypical2['uuid']}\")\n", + "\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } } ], "metadata": { @@ -1405,15 +1142,6 @@ "pygments_lexer": "ipython3", "version": "3.8.2" }, - "pycharm": { - "stem_cell": { - "cell_type": "raw", - "metadata": { - "collapsed": false - }, - "source": [] - } - }, "toc": { "base_numbering": 1, "nav_menu": {}, @@ -1459,4 +1187,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/docs/source/content/examples/brief_overview.ipynb b/docs/source/content/examples/brief_overview.ipynb index 0d677bde..100517af 100644 --- a/docs/source/content/examples/brief_overview.ipynb +++ b/docs/source/content/examples/brief_overview.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Brief Overview on How to Use the MultiViz Analytics Engine Library" + "# Brief Overview on How to Use the MultiViz Analytics Engine (MVG) Library" ] }, { @@ -13,18 +13,19 @@ "source": [ "## Introduction\n", "\n", - "The MultiViz Vibration Service is an analytics service based on the MultiViz Vibration Engine.\n", - "To access it Viking Analytics provides a REST API towards its analytics server.\n", - "To simplify the access of the Vibration service, Viking Analytics provides a Python Package\n", - "called MVG, which allows to interact with the vibration service via regular python calls.\n", + "The MultiViz Analytics Engine (MVG) Library is a Python library that enables the use of\n", + "Viking Analytics's MVG Analytics Service.\n", + "To access this service, Viking Analytics (VA) provides a REST API towards its analytics server.\n", + "The simplification of access to this service is enabled by the VA-MVG Python package,\n", + "which allows interaction with the service via regular python calls.\n", "\n", - "This interactive document shall show the whole flow working with the vibration service from\n", - "Python, from data upload to retrieval of analysis results.\n", + "This interactive document shall show the whole flow working with the service from\n", + "Python, from data upload to retrieval of analysis results for the analysis of vibration signals.\n", "\n", "### Signing up for the service\n", "\n", - "For commercial use of the services you will need to acquire a token from Viking Analytics.\n", - "For the example here, we use a built in token for demo.\n", + "For commercial use of the service, you will need to acquire a token from Viking Analytics.\n", + "For the example here, we use a built-in token for demo.\n", "Please contact us for a free trial and provide you with your token.\n", "\n", "\n", @@ -60,7 +61,6 @@ "start_time": "2021-03-18T10:20:48.257468Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -90,7 +90,6 @@ "start_time": "2021-03-18T10:20:48.443076Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -99,7 +98,35 @@ "name": "stdout", "output_type": "stream", "text": [ - "\u001b[31mERROR: Can not perform a '--user' install. User site-packages are not visible in this virtualenv.\u001b[0m\r\n" + "Looking in indexes: https://pypi.org/simple, https://vikinganalytics:****@pypi.vikinganalytics.se/simple/\n", + "Requirement already satisfied: va-mvg in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (0.6.1)\n", + "Requirement already satisfied: pandas in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (1.2.4)\n", + "Requirement already satisfied: typer in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (0.3.2)\n", + "Requirement already satisfied: tabulate in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (0.8.7)\n", + "Requirement already satisfied: requests in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (2.24.0)\n", + "Requirement already satisfied: semver in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (2.13.0)\n", + "Requirement already satisfied: numpy in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (1.18.1)\n", + "Requirement already satisfied: matplotlib in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (3.1.3)\n", + "Requirement already satisfied: python-dateutil>=2.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib->va-mvg) (2.8.1)\n", + "Requirement already satisfied: cycler>=0.10 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib->va-mvg) (0.10.0)\n", + "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib->va-mvg) (2.4.6)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib->va-mvg) (1.1.0)\n", + "Requirement already satisfied: six in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from cycler>=0.10->matplotlib->va-mvg) (1.14.0)\n", + "Requirement already satisfied: setuptools in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from kiwisolver>=1.0.1->matplotlib->va-mvg) (41.2.0)\n", + "Requirement already satisfied: pytz>=2017.3 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from pandas->va-mvg) (2019.3)\n", + "Requirement already satisfied: idna<3,>=2.5 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from requests->va-mvg) (2.9)\n", + "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from requests->va-mvg) (1.25.9)\n", + "Requirement already satisfied: chardet<4,>=3.0.2 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from requests->va-mvg) (3.0.4)\n", + "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from requests->va-mvg) (2020.4.5.2)\n", + "Requirement already satisfied: click<7.2.0,>=7.1.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from typer->va-mvg) (7.1.2)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING: You are using pip version 21.0.1; however, version 21.1.2 is available.\n", + "You should consider upgrading via the 'c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\python.exe -m pip install --upgrade pip' command.\n" ] } ], @@ -111,21 +138,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We follow by importing MVG library.\n", + "We follow by importing the MVG library.\n", "\n", "The library documentation is available at [https://vikinganalytics.github.io/mvg/index.html](https://vikinganalytics.github.io/mvg/index.html)." ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:49.162159Z", "start_time": "2021-03-18T10:20:49.157902Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -138,23 +164,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We begin by instantiating a \"session\" object with the mvg library.\n", - "A session object basically caches the endpoint and the token, to simplify the the calls to the mvg library.\n", + "We begin by instantiating a \"session\" object with the MVG library.\n", + "A session object basically caches the endpoint and the token, to simplify the calls to the MVG library.\n", "\n", "NOTE: Each TOKEN is used for Authorization AND Authentication.\n", - "Thus, each unique token represents a unique user, each user has it own, unique database on the VA vibration' service." + "Thus, each unique token represents a unique user, each user has it own, unique database on the VA-MVG' service." ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:49.166821Z", "start_time": "2021-03-18T10:20:49.163443Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -162,19 +187,18 @@ "source": [ "ENDPOINT = \"https://api.beta.multiviz.com\"\n", "# Replace by your own Token\n", - "VALID_TOKEN = \"Add token here\"" + "VALID_TOKEN = os.environ['TEST_TOKEN']" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:49.308364Z", "start_time": "2021-03-18T10:20:49.167982Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -193,32 +217,29 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:49.437898Z", "start_time": "2021-03-18T10:20:49.309506Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "'{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.1.1\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}'" - ] + "text/plain": "'{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.1.12\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}'" }, - "execution_count": 5, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hello_message = json.dumps(session.say_hello())\n", - "hello_message" + "hello_message\n" ] }, { @@ -227,7 +248,7 @@ "source": [ "## Sources and Measurements\n", "\n", - "Before we begin, we will ensure there are no previously existing sources and if there are, we will delete them." + "Before we begin, we will ensure there are no previously existing sources and if there are, we will delete them." ] }, { @@ -239,7 +260,6 @@ "start_time": "2021-03-18T10:20:49.439018Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -248,9 +268,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Retrieved sources\n", - "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}}\n", - "Deleting u0001\n" + "Retrieved sources\n" ] } ], @@ -288,16 +306,15 @@ "start_time": "2021-03-18T10:20:49.717137Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "fatal: destination path 'va-data-charlie' already exists and is not an empty directory.\r\n" + "fatal: destination path 'va-data-charlie' already exists and is not an empty directory.\n" ] } ], @@ -307,25 +324,22 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:49.830068Z", "start_time": "2021-03-18T10:20:49.826632Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "'u0001'" - ] + "text/plain": "'u0001'" }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -349,13 +363,13 @@ "Internally, in the analytics engine and data storage, all vibration data is stored under its source. \n", "In essence, a source is an identifier formed by\n", " - the source ID\n", - " - meta data with required fields\n", + " - metadata with required fields\n", " - optional arbitrary customer specific 'free form' data belonging to the source.\n", " \n", "The vibration service will only rely on the required fields.\n", - "The free form data is a possibility for the client side to keep together source information, measurements and meta data which may be interesting for the analytics built-in features in the service.\n", - "Examples of the free form data include location of sensor or the asset which it is mounted on.\n", - "As we will see later, timestamps are internally represented as millisconds since EPOCH (Jan 1st 1970), for that reason it is good practice to include the timezone where the measurement originated in the meta data.\n", + "The free form data is a possibility for the client side to keep together source information, measurements and metadata which may be interesting for the analytics built-in features in the service.\n", + "Examples of the free form data include location of sensor or the name of the asset which is mounted on.\n", + "As we will see later, timestamps are internally represented as milliseconds since EPOCH (Jan 1st 1970), for that reason it is good practice to include the timezone where the measurement originated in the metadata.\n", "\n", "There are two ways to create a source:" ] @@ -369,7 +383,6 @@ "start_time": "2021-03-18T10:20:49.831109Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -380,6 +393,7 @@ "meta_information = {'assetId': 'assetJ', 'measPoint': 'mloc01', 'location': 'cancun', 'timezone': 'Europe/Stockholm'}\n", "session.create_source(SOURCE_IDP, meta_information)\n", "session.get_source(SOURCE_IDP)\n", + "# We delete this first example source to show the second option\n", "session.delete_source(SOURCE_IDP)" ] }, @@ -392,17 +406,13 @@ "start_time": "2021-03-18T10:20:50.252679Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "{'source_id': 'u0001',\n", - " 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}}" - ] + "text/plain": "{'source_id': 'u0001',\n 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'},\n 'properties': {'data_class': 'waveform'}}" }, "execution_count": 11, "metadata": {}, @@ -410,7 +420,7 @@ } ], "source": [ - "# OPTION 2: Uploading the meta-data from a json file\n", + "# OPTION 2: Uploading the metadata from a json file\n", "src_path = REF_DB_PATH / SOURCE_ID\n", "meta_filename = src_path / \"meta.json\"\n", "with open(meta_filename, \"r\") as json_file:\n", @@ -425,7 +435,8 @@ "source": [ "List sources\n", "\n", - "We can now check if our source actually has been created, by listing all the sources in the database." + "We can now check if our source actually has been created, by listing all the sources in the database.\n", + "This function provides all the existing information about the source." ] }, { @@ -437,17 +448,13 @@ "start_time": "2021-03-18T10:20:50.538383Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "[{'source_id': 'u0001',\n", - " 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}}]" - ] + "text/plain": "[{'source_id': 'u0001',\n 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'},\n 'properties': {'data_class': 'waveform'}}]" }, "execution_count": 12, "metadata": {}, @@ -485,7 +492,6 @@ "start_time": "2021-03-18T10:20:50.667593Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -506,7 +512,6 @@ "start_time": "2021-03-18T10:20:50.671104Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -517,160 +522,154 @@ "text": [ "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570359660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574424060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571050860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573041660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573041660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574337660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570273260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573992060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571223660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570273260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570618860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570618860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573646460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571569260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571137260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572955260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573732860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572782460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572782460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570878060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570705260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573905660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573992060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572696060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571914860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570964460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572436860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571742060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571396460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571050860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570186860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571396460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572868860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571655660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573819260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573128060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570791660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574164860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572087660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571482860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573905660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572001260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572264060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570705260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573214460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573473660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570446060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572609660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571655660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571223660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573300860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572264060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571569260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571914860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572955260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573387260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574164860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574078460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571828460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572523260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574337660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570186860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572609660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571137260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570964460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570532460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571310060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570791660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573387260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570359660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572001260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571828460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574251260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572350460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570878060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573214460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574078460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573560060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571482860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572436860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573560060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572868860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572177660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573819260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572696060.csv\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570446060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570532460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571310060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573128060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572177660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572523260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573646460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573473660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573732860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571742060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574251260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574424060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573300860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572350460.csv\n" + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572087660.csv\n" ] } ], @@ -724,7 +723,6 @@ "start_time": "2021-03-18T10:21:50.349197Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -738,7 +736,7 @@ } ], "source": [ - "m = session.read_measurements(SOURCE_ID)\n", + "m = session.list_measurements(SOURCE_ID)\n", "print(f\"Read {len(m)} stored measurements\")" ] }, @@ -753,25 +751,22 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.319506Z", "start_time": "2021-03-18T10:22:16.188820Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "{'RMS': '0.0.1', 'ModeId': '0.1.0', 'BlackSheep': '0.1.0'}" - ] + "text/plain": "{'RMS': '1.0.0', 'ModeId': '0.1.1', 'BlackSheep': '1.0.0'}" }, - "execution_count": 7, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -785,33 +780,32 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In this example, we will request both features to be applied to the previously defined SOURCE_ID.\n", + "In this example, we will show how to request the RMS and ModeId features to be applied to the previously defined SOURCE_ID.\n", + "The BlackSheep feature is aimed to population analytics.\n", + "You can read about how to use it in the [\"Analysis and Results Visualization\"](analysis_visual.ipynb) example.\n", "\n", "We will begin with the 'RMS' feature, which provides the RMS for each signal.\n", - "Thus, we proceed to request the analysis to the VA Vibration service." + "We proceed to request the analysis to the MVG service." ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.439918Z", "start_time": "2021-03-18T10:22:16.320611Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "{'request_id': 'de9562802a3248a9723ce4a8950c9a00', 'request_status': 'queued'}" - ] + "text/plain": "{'request_id': '2f8ef4370ca6f16ee30a71cf55645b02', 'request_status': 'queued'}" }, - "execution_count": 9, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -845,14 +839,13 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.571418Z", "start_time": "2021-03-18T10:22:16.440996Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -886,25 +879,22 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.716298Z", "start_time": "2021-03-18T10:22:16.572585Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "{'request_id': '9cced936d101c436eb32e7f8dc379796', 'request_status': 'queued'}" - ] + "text/plain": "{'request_id': 'e0ee3ad6935947f70a9d455f37da4c48', 'request_status': 'queued'}" }, - "execution_count": 11, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -918,19 +908,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We also check the status for our second source." + "We also check the status for our second feature." ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.881788Z", "start_time": "2021-03-18T10:22:16.717429Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -960,323 +949,399 @@ "We can proceed to get the results by calling the corresponding requestIds for the feature of each source.\n", "\n", "The output of the get_analysis_results function is a dictionary and we show the keys of one those dictionaries.\n", - "The keys are the same for all features and contains two elements.\n", - "The first key `\"status\"` indicates if the analysis was succesful.\n", - "The second key `\"results\"` includes the numeric results." + "The keys are the same for all features and contains seven elements.\n", + "These elements are:\n", + "- `\"status\"` indicates if the analysis was successful.\n", + "- `\"request_id\"` is the identifier of the requested analysis.\n", + "- `\"feature\"` is the name of the request feature.\n", + "- `\"results\"` includes the numeric results.\n", + "- `\"inputs\"` includes the input information for the request analysis.\n", + "- `\"error_info\"` includes the error information in case the analysis fails and it is empty if the analysis is successful.\n", + "- `\"debug_info\"` includes debuging (log) information related to the failed analysis." ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 21, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:17.505749Z", "start_time": "2021-03-18T10:22:16.882964Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "dict_keys(['status', 'results'])" - ] + "text/plain": "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" }, - "execution_count": 13, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "rms_table = session.get_analysis_results(request_id=REQUEST_ID_RMS_u0001)\n", - "mode_table = session.get_analysis_results(request_id=REQUEST_ID_ModeId_u0001)\n", + "rms_results = session.get_analysis_results(request_id=REQUEST_ID_RMS_u0001)\n", + "mode_results = session.get_analysis_results(request_id=REQUEST_ID_ModeId_u0001)\n", "\n", - "rms_table.keys()" + "rms_results.keys()\n" ] }, { "cell_type": "markdown", - "metadata": {}, "source": [ - "The `\"results\"` of the \"RMS\" feature are two lists.\n", - "One list corresponds to the epoch (in seconds) of the measurement and the other list contains the rms value for the measurement.\n", + "### Visualization\n", "\n", - "These lists can be converted into a dataframe for ease of manipulation.\n", - "In addition, the \"timestamp\" column is converted to a timestamp object in a column called \"Date\"." - ] + "The MVG Library incorporates a module that facilitates the handling of the results and its visualization.\n", + "Using this module, it becomes easier to convert the results into a Pandas dataframe for ease of manipulation.\n", + "In addition, it enables to quickly evaluate the results by getting a summary of them or visualize them.\n", + "\n", + "The name of this module is `\"analysis_classes\"` and we begin by calling it." + ], + "metadata": { + "collapsed": false + } }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 22, + "outputs": [], + "source": [ + "from mvg import analysis_classes" + ], "metadata": { - "ExecuteTime": { - "end_time": "2021-03-18T10:22:17.516758Z", - "start_time": "2021-03-18T10:22:17.507109Z" - }, + "collapsed": false, "pycharm": { - "is_executing": false, "name": "#%%\n" } - }, + } + }, + { + "cell_type": "markdown", + "source": [ + "The first step requires parsing the results available from the analysis.\n", + "We begin by showing how to do this with the RMS feature." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 23, + "outputs": [], + "source": [ + "rms_results_parsed = analysis_classes.parse_results(rms_results)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "From here, we can call these results into a Pandas dataframe." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 24, "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", - "
timestampsrmsDate
015702732600.6621832019-10-05 11:01:00
115703596600.6616522019-10-06 11:01:00
215704460600.6619232019-10-07 11:01:00
315705324600.6617142019-10-08 11:01:00
415706188600.6617092019-10-09 11:01:00
\n", - "
" - ], - "text/plain": [ - " timestamps rms Date\n", - "0 1570273260 0.662183 2019-10-05 11:01:00\n", - "1 1570359660 0.661652 2019-10-06 11:01:00\n", - "2 1570446060 0.661923 2019-10-07 11:01:00\n", - "3 1570532460 0.661714 2019-10-08 11:01:00\n", - "4 1570618860 0.661709 2019-10-09 11:01:00" - ] + "text/plain": " timestamps rms rms_dc dc utilization\n0 1570186860 0.647086 0.662108 -0.140237 1\n1 1570273260 0.647123 0.662183 -0.140420 1\n2 1570359660 0.646619 0.661652 -0.140239 1\n3 1570446060 0.646873 0.661923 -0.140347 1\n4 1570532460 0.646643 0.661714 -0.140423 1", + "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
timestampsrmsrms_dcdcutilization
015701868600.6470860.662108-0.1402371
115702732600.6471230.662183-0.1404201
215703596600.6466190.661652-0.1402391
315704460600.6468730.661923-0.1403471
415705324600.6466430.661714-0.1404231
\n
" }, - "execution_count": 14, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_rms = pd.DataFrame(rms_table[\"results\"])\n", - "df_rms['Date'] = pd.to_datetime(df_rms['timestamps'], unit=\"s\")\n", - "df_rms.head()" - ] + "df_rms = rms_results_parsed.to_df()\n", + "df_rms.head()\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } }, { "cell_type": "markdown", - "metadata": {}, "source": [ - "The `\"results\"` of the \"ModeId\" feature are three lists:\n", - "- The first list is the measurement epoch in the same unit as the measurement was uploaded, which was seconds for this example.\n", - "- The second list corresponds to the mode label given to the timestamp.\n", - "- The third list is a boolean to indicate the uncertainty of label.\n", + "From the results, we can see that the RMS feature provides the rms value, the dc component and\n", + "the rms without the dc component.\n", + "All this is available for each timestamp.\n", "\n", - "We pass all the lists to a dataframe for ease of manipulation. \n", - "Similarly to the \"RMS\" feature, the \"timestamp\" column is converted to a timestamp object in a column called \"Date\"." - ] + "We can request to display a summary of the results." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } }, { "cell_type": "code", - "execution_count": 15, - "metadata": { - "ExecuteTime": { - "end_time": "2021-03-18T10:22:17.528586Z", - "start_time": "2021-03-18T10:22:17.519849Z" + "execution_count": 25, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=== RMS ===\n", + "request_id 2f8ef4370ca6f16ee30a71cf55645b02\n", + "from 1570186860 to 1574424060\n", + "\n", + "+-------+--------------+------------+------------+------------+---------------+\n", + "| | timestamps | rms | rms_dc | dc | utilization |\n", + "|-------+--------------+------------+------------+------------+---------------|\n", + "| count | 50 | 50 | 50 | 50 | 50 |\n", + "| mean | 1.57231e+09 | 0.611691 | 0.623692 | -0.120874 | 1 |\n", + "| std | 1.26105e+06 | 0.0565414 | 0.0563824 | 0.0141936 | 0 |\n", + "| min | 1.57019e+09 | 0.484564 | 0.497987 | -0.140524 | 1 |\n", + "| 25% | 1.57125e+09 | 0.627912 | 0.637381 | -0.140196 | 1 |\n", + "| 50% | 1.57231e+09 | 0.628307 | 0.6378 | -0.112316 | 1 |\n", + "| 75% | 1.57337e+09 | 0.64684 | 0.661892 | -0.10966 | 1 |\n", + "| max | 1.57442e+09 | 0.647694 | 0.662754 | -0.109065 | 1 |\n", + "+-------+--------------+------------+------------+------------+---------------+\n" + ] }, + { + "data": { + "text/plain": " timestamps rms rms_dc dc utilization\ncount 5.000000e+01 50.000000 50.000000 50.000000 50.0\nmean 1.572306e+09 0.611691 0.623692 -0.120874 1.0\nstd 1.261051e+06 0.056541 0.056382 0.014194 0.0\nmin 1.570187e+09 0.484564 0.497987 -0.140524 1.0\n25% 1.571245e+09 0.627912 0.637381 -0.140196 1.0\n50% 1.572307e+09 0.628307 0.637800 -0.112316 1.0\n75% 1.573366e+09 0.646840 0.661892 -0.109660 1.0\nmax 1.574424e+09 0.647694 0.662754 -0.109065 1.0", + "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
timestampsrmsrms_dcdcutilization
count5.000000e+0150.00000050.00000050.00000050.0
mean1.572306e+090.6116910.623692-0.1208741.0
std1.261051e+060.0565410.0563820.0141940.0
min1.570187e+090.4845640.497987-0.1405241.0
25%1.571245e+090.6279120.637381-0.1401961.0
50%1.572307e+090.6283070.637800-0.1123161.0
75%1.573366e+090.6468400.661892-0.1096601.0
max1.574424e+090.6476940.662754-0.1090651.0
\n
" + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rms_results_parsed.summary()\n" + ], + "metadata": { + "collapsed": false, "pycharm": { - "is_executing": false, "name": "#%%\n" } - }, + } + }, + { + "cell_type": "markdown", + "source": [ + "Finally, we can generate a plot that displays these results." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 26, "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", - "
timestampslabelsuncertainDate
015702732600False2019-10-05 11:01:00
115703596600False2019-10-06 11:01:00
215704460600False2019-10-07 11:01:00
315705324600False2019-10-08 11:01:00
415706188600False2019-10-09 11:01:00
\n", - "
" - ], - "text/plain": [ - " timestamps labels uncertain Date\n", - "0 1570273260 0 False 2019-10-05 11:01:00\n", - "1 1570359660 0 False 2019-10-06 11:01:00\n", - "2 1570446060 0 False 2019-10-07 11:01:00\n", - "3 1570532460 0 False 2019-10-08 11:01:00\n", - "4 1570618860 0 False 2019-10-09 11:01:00" - ] + "text/plain": "
", + "image/png": "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\n" }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" } ], "source": [ - "df_mode = pd.DataFrame(mode_table[\"results\"])\n", - "df_mode['Date'] = pd.to_datetime(df_mode['timestamps'], unit=\"s\")\n", - "df_mode.head()" - ] + "rms_results_parsed.plot()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } }, { "cell_type": "markdown", - "metadata": {}, "source": [ - "### Visualization\n", - "\n", - "We can use those results to generate some plots that may ease the visualization.\n", + "All these functions are available for the ModeId feature as well.\n", + "We proceed to repeat the same procedure for this other feature.\n", "\n", - "The MVG framework provides some visualization functions that can help towards this goal.\n", - "We begin by importing the visualization module" - ] + "We begin by parsing the results.\n", + "In this particular case, we need to define the unit of time to perform the epoch conversion to datetime.\n", + "The default unit is milliseconds.\n", + "The timezone can also be defined, to increase the precision of these results." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 31, + "outputs": [], + "source": [ + "mode_results_parsed = analysis_classes.parse_results(mode_results, t_unit=\"s\")\n" + ], "metadata": { - "ExecuteTime": { - "end_time": "2021-03-18T10:22:17.670019Z", - "start_time": "2021-03-18T10:22:17.530333Z" - }, + "collapsed": false, "pycharm": { - "is_executing": false, "name": "#%%\n" } - }, - "outputs": [], - "source": [ - "from mvg import plotting\n", - "%matplotlib inline" - ] + } }, { "cell_type": "markdown", - "metadata": {}, "source": [ - "One of the provided functions enable to display the different modes over time.\n", - "This way we can identify all its modes.\n", - "When we call the function, we define the parameter \"timeunit\" given that the default unit in the function is milliseconds and the epochs in our data is seconds." - ] + "First, we generate the pandas dataframe of ModeId results." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 32, + "outputs": [ + { + "data": { + "text/plain": " timestamps labels uncertain mode_probability\n0 1570186860 0 False 0.000159\n1 1570273260 0 False 0.000596\n2 1570359660 0 False 0.000058\n3 1570446060 0 False 0.000211\n4 1570532460 0 False 0.000007", + "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
timestampslabelsuncertainmode_probability
015701868600False0.000159
115702732600False0.000596
215703596600False0.000058
315704460600False0.000211
415705324600False0.000007
\n
" + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_mode = mode_results_parsed.to_df()\n", + "df_mode.head()" + ], "metadata": { - "ExecuteTime": { - "end_time": "2021-03-18T10:22:17.803520Z", - "start_time": "2021-03-18T10:22:17.671110Z" + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "From the results, we can see that the ModeId feature provides a mode label for each timestamp, together with a boolean\n", + "describing the certainty around this mode label and its probability.\n", + "\n", + "\n", + "We can also request to display a summary of the results." + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 33, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=== ModeId ===\n", + "request_id e0ee3ad6935947f70a9d455f37da4c48\n", + "from 1570186860 to 1574424060\n", + "\n", + "Labels\n", + "+----------+----------+-----------+--------------------+\n", + "| labels | counts | portion | mode_probability |\n", + "|----------+----------+-----------+--------------------|\n", + "| 0 | 42 | 84 | 42 |\n", + "| 1 | 8 | 16 | 8 |\n", + "+----------+----------+-----------+--------------------+\n", + "\n", + "Lables & uncertain labels\n", + "+------------+-----------+--------------------+----------+\n", + "| | portion | mode_probability | counts |\n", + "|------------+-----------+--------------------+----------|\n", + "| (0, False) | 84 | 42 | 42 |\n", + "| (1, False) | 16 | 8 | 8 |\n", + "+------------+-----------+--------------------+----------+\n", + "\n", + "Emerging Modes\n", + "+----+---------+-----------------+-----------------+-------------------+\n", + "| | modes | emerging_time | max_prob_time | max_probability |\n", + "|----+---------+-----------------+-----------------+-------------------|\n", + "| 0 | 0 | 1.57019e+09 | 1.57442e+09 | 0.0141024 |\n", + "| 1 | 1 | 1.57166e+09 | 1.57166e+09 | 0.0230245 |\n", + "+----+---------+-----------------+-----------------+-------------------+\n" + ] }, + { + "data": { + "text/plain": "[ counts portion mode_probability\n labels \n 0 42 84.0 42.0\n 1 8 16.0 8.0,\n portion mode_probability counts\n labels uncertain \n 0 False 84.0 42.0 42\n 1 False 16.0 8.0 8,\n modes emerging_time max_prob_time max_probability\n 0 0 1570186860 1574424060 0.014102\n 1 1 1571655660 1571655660 0.023025]" + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mode_results_parsed.summary()" + ], + "metadata": { + "collapsed": false, "pycharm": { - "is_executing": false, "name": "#%%\n" } - }, + } + }, + { + "cell_type": "markdown", + "source": [ + "The summary of the results describes the number of timestamps for each mode and how many of these timestamps are uncertain.\n", + "\n", + "In addition, it provides information on the emerging modes.\n", + "Emerging modes describes the time (timestamp) each one of the modes first appeared.\n", + "This information can be useful to identify if a new mode is affecting or appearing in teh asset.\n", + "\n", + "Finally, we can generate a plot that displays display the different modes over time." + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 34, "outputs": [ { "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] + "text/plain": "
", + "image/png": "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uO+++4Z89KMffQHgjDPOaLn99tv37GrcJsqSJEmqq1NOOeX5m266adimTZtiwYIFu02dOnVjpezcc88d29zcvOmxxx579KKLLlp62mmnvQngvPPOGzt16tQNCxYseHTmzJlrli1bNhBg7ty5u956663D58yZs3DhwoWPNjU1pSuvvHJE9fZWrFjRf8iQIa8OGDAAgAMOOOCVFStWDOxq3CbKkiRJqqsjjjjixSVLluxy1VVXDZ8+ffra6rIHH3xwyJlnntkCMHPmzPVr1qzp39LS0u/+++8fcsYZZ7QAnHTSSWuHDh36KsCdd945ZP78+bs1NzdPmjhx4uR77rln6JNPPrlL9Tqre58rIqLLd//wYj5JkiTV3YwZM9ZceOGF+919992LVq5c+VoO2l5S29T0xj7dlFIcf/zxLd/5zneWtrWtvfbaq3X9+vX9Nm/ezIABA3j66acHjh49usvjou1RliRJUt2dffbZq88555znDj/88Berpx955JHrr7nmmhEAs2fPHjJs2LDW4cOHbznyyCPXX3311SMAbr755qHr1q3rBzBjxox1s2fPHrZ06dL+kMc4P/bYY68bVtHU1FRZ7zCAq6++esQHPvCBNV2N2URZkiSprxgxolO3VqvH+saPH7/5ggsuWFk7/dJLL31u7ty5u02YMGHyF77whX2uvfbapwAuueSS5+69997BkydPnnTXXXftsffee78CMGXKlJfOP//8pdOmTZswYcKEye9+97snLF68eEDter/+9a8vufzyy/faf//9D37hhRf6f+pTn1rd1d2Lsu7uzjosIs3Z5qWlnVfgQ5B6WiIaHYIkvSbgoZTSYY2OY968eU83Nzd3OUHsS+bNmzeyubn5gLIye5QlSZKkEibKkiRJUgkTZUmSJKmEibIkSZJUwkRZkiRJKmGiLEmSJJUwUZYkSeojRo6kOYIp3fUaOZLmjrYZEVOOPfbYN1Xeb968mWHDhjX/6Z/+6YFdiX2fffY5ZNmyZZ1+qvTFF188av/99z84IqZ0ZblqJsqSJEl9REsL25Qwbs/6Bg0atGXRokWDNmzYEAC33Xbb0DFjxnT5cdJddfTRR2/46U9/+tjYsWNf2dZ1mChLkiSprqZNm7b2lltu2RPghhtuGH7cccc9XylbsWJFv+nTp4+fMGHC5Obm5okPPPDAIIDly5f3O+qoo94yadKkybNmzRpX/ZC8K664YvghhxwyaeLEiZNnzZo1rrX1jQ8IPOqoo1486KCDtjlJBhNlSZIk1dkpp5zy/E033TRs06ZNsWDBgt2mTp26sVJ27rnnjm1ubt702GOPPXrRRRctPe20094EcN55542dOnXqhgULFjw6c+bMNcuWLRsIMHfu3F1vvfXW4XPmzFm4cOHCR5uamtKVV145oh5xmyhLkiSpro444ogXlyxZsstVV101fPr06Wuryx588MEhZ555ZgvAzJkz169Zs6Z/S0tLv/vvv3/IGWec0QJw0kknrR06dOirAHfeeeeQ+fPn79bc3Dxp4sSJk++5556hTz755C71iLtbx6lIkiRJZWbMmLHmwgsv3O/uu+9etHLlytdy0OohFRURkQCamt7Yp5tSiuOPP77lO9/5ztJ6xgv2KEuSJKkHnH322avPOeec5w4//PAXq6cfeeSR66+55poRALNnzx4ybNiw1uHDh2858sgj11999dUjAG6++eah69at6wcwY8aMdbNnzx62dOnS/pDHOD/22GMD6xGzibIkSVIfMWIEb7zqrYfWN378+M0XXHDBytrpl1566XNz587dbcKECZO/8IUv7HPttdc+BXDJJZc8d++99w6ePHnypLvuumuPvffe+xWAKVOmvHT++ecvnTZt2oQJEyZMfve73z1h8eLFA2rX+5WvfGX0mDFjDl2xYsXA5ubmySeeeOK4ru5flHV3d9ZhEWnONi8t7byCbW9X2jaJaHQIkvSagIdSSoc1Oo558+Y93dzcvLrRcfRm8+bNG9nc3HxAWZk9ypIkSVIJE2VJkiSphImyJEnSzmvLli1bHJvWhqJutrRVbqIsSZK085q/atWqPUyW32jLli2xatWqPYD5bc3jfZQlSZJ2Uq2trWctX778u8uXLz8YO0hrbQHmt7a2ntXWDN71QqoD73rR87zrhaTepLfc9ULbxzMLSZIkqYSJsiRJklTCRFmSJEkqYaIsSZIklTBRliRJkkqYKEuSJEklTJQlSZKkEibKkiRJUgkTZUmSJKmEibIkSZJUwkRZkiRJKmGiLEmSJJUwUZYkSZJKmChLkiRJJUyUJUmSpBImypIkSVIJE2VJkiSphImyJEmSVMJEWZIkSSphoixJkiSVMFGWJEmSSpgoS5IkSSVMlCVJkqQSJsqSJElSCRNlSZIkqYSJsiRJklTCRFmSJEkqYaIsSZIklTBRliRJkkqYKEuSJEklTJQlSZKkEibKkiRJUgkTZUmSJKmEibIkSZJUwkRZkiRJKmGiLEmSJJUwUZYkSZJKmChLkiRJJUyUJUmSpBImypIkSVIJE2VJkiSphImyJEmSVMJEWZIkSSphoixJkiSVMFGWJEmSSpgoS5IkSSVMlCVJkqQSJsqSJElSCRNlSZIkqYSJsiRJklTCRFmSJEkqYaIsSZIklTBRliRJkkqYKEuSJEklTJQlSZKkEibKkiRJUgkTZUmSJKmEibIkSZJUwkRZkiRJKmGiLEmSJJUwUZYkSZJKmChLkiRJJUyUJUmSpBImypIkSVIJE2VJkiSphImyJEmSVMJEWZIkSSphoixJkiSVMFGWJEmSSpgoS5IkSSVMlCVJkqQSJsqSJElSCRNlSZIkqUSklLZ94Yj1wKLuC0faaYwEVjc6iD7GOpfUm4xLKY1qdBDaPv23c/lFKaXDuiUSaScSEXNsGz3LOpckdTeHXkiSJEklTJQlSZKkEtubKP9rt0Qh7XxsGz3POpckdavtuphPkiRJ2lk59EKSJEkqYaIsSZIklehyohwRUY9AJEmSpN6kW8YoR8SAlNLmbohH2mFFROXEMyUH//e4iBgBvAq0Ahs9BpKk7dWlB45ERH/gT4CXgZeAVUACPgt8qtujk3YgKaUtZdMjoh9weErpvh4OqU+IiInA+4FhwD7A48B84D8bGZckacfXpR7liBgPPAD8CFgDDAaGA9OBa4GWlNJXuz9MqXeLiCHAscBG8mOUW8ht5DngAOCHKaU/aliAO6mIGAt8HXiGXOfvB54Cdgf2Bo5NKbU0LkJJ0o6sq4+wXgPcAAwFFgAPAdOAQ4D7AMcvq69qBr4G3ASMAXYBBgKbgf3JQwLU/SYBI1NKJwNExE+Az6eUToiI08lJ9OmNC0+StCPrUqKcUmqJiM8AZwPjgdvJPWaLUkq3RMQudYhR2hGMBZaQk+UAdiX3ar5ITtSaGxbZzu0VYHNEvIs8FOwD5KFhAOuB3RoVmCRpx9fVMcpRXLT3rYg4AbgY2At4opjFC/rUVz0AfJF8Edna6oKI+AN5mJK631zgTuATxftE7kUGeAuwtmwhSZI6Y7vuehERw8gX8v02pfRfEdHU1gVNUl8WEYNSSi82Oo6dVUQcSD4Z+X1KaXNxB5KBwMCU0rrGRidJ2lF1OVGOiD8CDiP/5LkEWASsSCm90v3hSTuOiDic3Iv5aErp4UbH01cU/yftBzyWUlrQ6HgkSTuPrt714lTgKGAkMIg8/u/NwErgcymln9cjSKm3i4gTgfeS28UW8kV9s1NKWyLiMvJdL7w9XDcr6n0GeTz4q8CNwO3WuySpO3T1yXyfBm5JKR2XUnpfSumYlNL+wJnARcX9TKW+6OPksbJ/SU7WPg8cX5QdiuP36+XjwB3AScD1wN9hvUuSuklXbw+3DhgZEbunlDbCa0/lmxcRg8lX+Et90RjgjmKM/u0R8ThwS0Q8Qb4DxoqGRrfzst4lSXXT1UT5InLPzYSIeJo85KJfRLwfeBZY3r3hSTuMecCBwMPFRa0LijvD3Ex+Wtzqhka387LeJUl1s60X8x0LTAb2JCfLPwNuTClt6vYIpR1ARBwEvJpSerxm+qHAt1JKxzQksJ2c9S5Jqqftuj0cvDb0wnGAUpWI6AfskVJ6PiL6p5RaGx1TX2C9S5K6U1cv5iOyAcXfhwP3Fn93eV3SziIiovpf8pP4fgJgslY/1rskqZ62JbkN8tOvIN/g/8mq6VKflFJKxcliv2LSnsDT8Fovp+rAepck1VNXL+ajuLq88vS9xeRbYcHW5Fnqk2wbjWG9S5LqpasPHJkM/Bn5qXwtwB+AJ3xErPo620ZjWO+SpHrqdKIcER8mP3lsd/IT+XYlP5XvVeDvU0r/Xq8gpd7MttEY1rskqd66MvTiTOC2lNL3qidGxF7A9RGxKqV0d7dGJ+0YbBuNYb1LkuqqKxfzbSQ/lW9oZUJEDEwpLSePD/QWceqrbBuNYb1LkuqqK0Mv3gacAbxMvtPFKuAlYBowETgrpbS0TnFKvZZtozGsd0lSvXX1Yr4DgQ+S71U6CtgE/AK4LqW0vi4RSjsA20ZjWO+SpHrqSo/ywJTSK3WOR9rh2DYaw3qXJNVbp8cot/WFFBEDIuL87gtJ2rHYNhrDepck1VunepQjYixwGfA8sBRYUvz7ODAGuDal9NY6xin1SraNxrDeJUk9obO3hzsUOBG4GHg7MAMYCQwB9gXur0t0Uu9n22gM612SVHedTZRbgStSShfUFkTETOBj3RqVtOOwbTSG9S5JqrvOJsoPAssiYlhK6YWIGAC8mlLaAqwHfli3CKXezbbRGNa7JKnuunR7uNctGDEY2JxSerl7Q5J2bLaNxrDeJUndrStP5gMgIirLfAx4Z/eGI+24bBuNYb1LkuqlS4lyRARbh2vMAHatmi71WbaNxrDeJUn11KlEufKlk7LKvUsfBZ6qV2DSjsC20RjWuySpJ3TlyXzDgHcALwMbgEUppQ11jE3aIdg2GsN6lyTVW2cfOPIR4I+BAI4h39x/CXAj8Ou0rVcESjs420ZjWO+SpJ7Q4dCLiNgd+AzwE+Aq4BrgD8AdwCXA8fUMUOqtbBuNYb1LknpKhz3KETEeuC2ldGjxfhDwm5TSYRExrij7o/qHKvUuto3GsN4lSSLUtUkAAALfSURBVD2lMw8cWQvMjYhvA/OBicC9RdkYYF2dYpN6O9tGY1jvkqQe0eHQi5TSauAfgZeAKcArwP8piocCv6lbdFIvZttoDOtdktRTuvRkvojon1JqLf4OL5iRMttGY1jvkqR62uZHWANExAHkR8Yu7a6ApJ2BbaMxrHdJUnfqzMV8U4HJ5HGBa4AXgE0ppQURcQMwN6X0D3WPVOplbBuNYb1LknpKZy7mOwfoR37q1Z7F3/0jYg3wHuA/6hee1KvZNhrDepck9YjOJMqjyfcnvRHYHdgNGEK+svwkYHndopN6N9tGY1jvkqQe0ZlE+XPA8ymlp2oLIuIJYEW3RyXtGGwbjWG9S5J6xHZdzCdJkiTtrDrTo0xEnAAcCmwElgCPAwtTSi/UMTap17NtNIb1LknqCe32KEfEYOBi8sUyG4G9yU++2hV4ELikuPm/1KfYNhrDepck9aSOepTfBBwFvCOltKUyMSIGAH8H/CvwkfqFJ/Vato3GsN4lST2mo0dY7wG0AiOrJ6aUNgO/Lcqlvsi20RjWuySpx3TUo/wwcA1wWUSsBFYBzwKDgGnAz+sbntRr2TYaw3qXJPWYzjyZrz9wKvBW8r1K3wQsA65JKf2y7hFKvZRtozGsd0lST+noYr5xwCeBweRem+tTSs8UZVOBjSmlR3oiUKk3sW00hvUuSepJHY1R/nQxz13kJ2D9c0T8eVH2ceBtdYxN6s1sG41hvUuSekxHY5QPAf42pfQw8KOIOAv4m4iYD+xC/rlT6otsG41hvUuSekxHPcr9yPcpJSL6pZS+C9wBfJV8i6Zn6xue1GvZNhrDepck9ZiOEuULgcUAKaVXI6J/SulbwH8Do4G1dY5P6q1sG41hvUuSekxn7noRqWqmyvuIeHNK6cm6Ryj1UraNxrDeJUk9pcNEWZIkSeqLOhp6IUmSJPVJJsqSJElSCRNlSZIkqYSJsiRJklTCRFmSJEkq8f8BVsjeE2PB1aUAAAAASUVORK5CYII=\n" }, "metadata": { "needs_background": "light" @@ -1285,164 +1350,121 @@ } ], "source": [ - "image_modes = plotting.modes_over_time(df_mode, SOURCE_ID, timeunit=\"s\")" - ] + "mode_results_parsed.plot()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } }, { "cell_type": "markdown", - "metadata": {}, "source": [ - "We can call the individual boxplot for one source and display the boxplot of the \"RMS\" for each one of the operating modes.\n", - "However, we need to merge the \"RMS\" and \"ModeId\" dataframes first." - ] - }, - { - "cell_type": "code", - "execution_count": 18, + "Lastly, we can combine the information from the RMS and ModeId features to display a boxplot of the \"RMS\" for each one of the operating modes.\n", + "\n", + "First, we merge the \"RMS\" and \"ModeId\" dataframes." + ], "metadata": { - "ExecuteTime": { - "end_time": "2021-03-18T10:22:17.814161Z", - "start_time": "2021-03-18T10:22:17.804679Z" - }, + "collapsed": false, "pycharm": { - "is_executing": false, - "name": "#%%\n" + "name": "#%% md\n" } - }, + } + }, + { + "cell_type": "code", + "execution_count": 35, "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", - "
timestampsrmsDatelabelsuncertain
015702732600.6621832019-10-05 11:01:000False
115703596600.6616522019-10-06 11:01:000False
215704460600.6619232019-10-07 11:01:000False
315705324600.6617142019-10-08 11:01:000False
415706188600.6617092019-10-09 11:01:000False
\n", - "
" - ], - "text/plain": [ - " timestamps rms Date labels uncertain\n", - "0 1570273260 0.662183 2019-10-05 11:01:00 0 False\n", - "1 1570359660 0.661652 2019-10-06 11:01:00 0 False\n", - "2 1570446060 0.661923 2019-10-07 11:01:00 0 False\n", - "3 1570532460 0.661714 2019-10-08 11:01:00 0 False\n", - "4 1570618860 0.661709 2019-10-09 11:01:00 0 False" - ] + "text/plain": " timestamps rms rms_dc dc utilization labels uncertain \\\n0 1570186860 0.647086 0.662108 -0.140237 1 0 False \n1 1570273260 0.647123 0.662183 -0.140420 1 0 False \n2 1570359660 0.646619 0.661652 -0.140239 1 0 False \n3 1570446060 0.646873 0.661923 -0.140347 1 0 False \n4 1570532460 0.646643 0.661714 -0.140423 1 0 False \n\n mode_probability Date \n0 0.000159 2019-10-04 11:01:00 \n1 0.000596 2019-10-05 11:01:00 \n2 0.000058 2019-10-06 11:01:00 \n3 0.000211 2019-10-07 11:01:00 \n4 0.000007 2019-10-08 11:01:00 ", + "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
timestampsrmsrms_dcdcutilizationlabelsuncertainmode_probabilityDate
015701868600.6470860.662108-0.14023710False0.0001592019-10-04 11:01:00
115702732600.6471230.662183-0.14042010False0.0005962019-10-05 11:01:00
215703596600.6466190.661652-0.14023910False0.0000582019-10-06 11:01:00
315704460600.6468730.661923-0.14034710False0.0002112019-10-07 11:01:00
415705324600.6466430.661714-0.14042310False0.0000072019-10-08 11:01:00
\n
" }, - "execution_count": 18, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_u0001 = pd.merge_asof(df_rms, df_mode, on=\"timestamps\", by=\"Date\")\n", + "df_u0001 = pd.merge_asof(df_rms, df_mode, on=\"timestamps\")\n", "df_u0001.head()" - ] + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } }, { "cell_type": "markdown", + "source": [ + "The MVG library provides additional visualization functions that can help towards this goal.\n", + "Thus, we import the visualization module" + ], "metadata": { + "collapsed": false, "pycharm": { "name": "#%% md\n" } + } + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "ExecuteTime": { + "end_time": "2021-03-18T10:22:17.670019Z", + "start_time": "2021-03-18T10:22:17.530333Z" + }, + "pycharm": { + "name": "#%%\n" + } }, + "outputs": [], "source": [ - "Now, we can proceed to plot the boxplot." + "from mvg import plotting" ] }, + { + "cell_type": "markdown", + "source": [ + "Now, we can proceed to plot the boxplot." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 37, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:17.902871Z", "start_time": "2021-03-18T10:22:17.815292Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, "outputs": [ { "data": { - "text/plain": [ - "" - ] + "text/plain": "" }, - "execution_count": 19, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] + "text/plain": "
", + "image/png": "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\n" }, "metadata": { "needs_background": "light" @@ -1458,7 +1480,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Here we conclude our brief overview to begin using the MultiViz Vibration Service." + "Here we conclude our brief overview to begin using the MultiViz Analytics Engine (MVG) Library." ] } ], @@ -1480,15 +1502,6 @@ "pygments_lexer": "ipython3", "version": "3.8.2" }, - "pycharm": { - "stem_cell": { - "cell_type": "raw", - "source": [], - "metadata": { - "collapsed": false - } - } - }, "toc": { "base_numbering": 1, "nav_menu": {}, diff --git a/docs/source/content/examples/sources_and_measurements.ipynb b/docs/source/content/examples/sources_and_measurements.ipynb index ba40dc20..f201bbef 100644 --- a/docs/source/content/examples/sources_and_measurements.ipynb +++ b/docs/source/content/examples/sources_and_measurements.ipynb @@ -6,7 +6,7 @@ "source": [ "# Sources and Measurements Example\n", "\n", - "This example shows how to upload measurements from an external repository into the Viking Analytics Vibration service and how to read this data." + "This example shows how to upload measurements from an external repository into the MultiViz Analytics Engine (MVG) service and how to read this data." ] }, { @@ -16,9 +16,6 @@ "ExecuteTime": { "end_time": "2021-03-18T09:54:16.678492Z", "start_time": "2021-03-18T09:54:16.487989Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [], @@ -46,34 +43,33 @@ } }, "source": [ - "Note that the `TOKEN` is used both for authorization and authentication. Thus, each unique token represents a unique user and each user has their own unique database on the VA vibration service.\n", + "Note that the `TOKEN` is used both for authorization and authentication.\n", + "Thus, each unique token represents a unique user and each user has their own unique database on the VA service.\n", "\n", "**You need to insert your token received from Viking Analytics here:**" ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.681622Z", "start_time": "2021-03-18T09:54:16.679684Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [], "source": [ "# Replace by your own Token\n", - "VALID_TOKEN = \"Add token here\"" + "VALID_TOKEN = os.environ['TEST_TOKEN']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "This is Viking Analytics default logging setup which can be adapted to suit your needs. Log messages are printed from `mvg` library, see the source code for details." + "This is Viking Analytics default logging setup which can be adapted to suit your needs.\n", + "Log messages are printed from `mvg` library, see the source code for details." ] }, { @@ -83,9 +79,6 @@ "ExecuteTime": { "end_time": "2021-03-18T09:54:16.688245Z", "start_time": "2021-03-18T09:54:16.683121Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [], @@ -104,7 +97,8 @@ "source": [ "## Downloading the Data\n", "\n", - "We pick the data from one source from our public charlie repo https://github.com/vikinganalytics/va-data-charlie.git for convenience. Clone that repository to get access to the data." + "We pick the data from one source from our public charlie repo https://github.com/vikinganalytics/va-data-charlie.git for convenience.\n", + "Clone that repository to get access to the data." ] }, { @@ -114,9 +108,6 @@ "ExecuteTime": { "end_time": "2021-03-18T09:54:16.800754Z", "start_time": "2021-03-18T09:54:16.689464Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [ @@ -124,64 +115,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Cloning into 'va-data-charlie'...\n", - "Updating files: 46% (441/945)\n", - "Updating files: 47% (445/945)\n", - "Updating files: 48% (454/945)\n", - "Updating files: 49% (464/945)\n", - "Updating files: 50% (473/945)\n", - "Updating files: 51% (482/945)\n", - "Updating files: 52% (492/945)\n", - "Updating files: 53% (501/945)\n", - "Updating files: 54% (511/945)\n", - "Updating files: 55% (520/945)\n", - "Updating files: 56% (530/945)\n", - "Updating files: 57% (539/945)\n", - "Updating files: 58% (549/945)\n", - "Updating files: 59% (558/945)\n", - "Updating files: 60% (567/945)\n", - "Updating files: 61% (577/945)\n", - "Updating files: 62% (586/945)\n", - "Updating files: 63% (596/945)\n", - "Updating files: 64% (605/945)\n", - "Updating files: 65% (615/945)\n", - "Updating files: 66% (624/945)\n", - "Updating files: 67% (634/945)\n", - "Updating files: 68% (643/945)\n", - "Updating files: 69% (653/945)\n", - "Updating files: 70% (662/945)\n", - "Updating files: 71% (671/945)\n", - "Updating files: 72% (681/945)\n", - "Updating files: 73% (690/945)\n", - "Updating files: 74% (700/945)\n", - "Updating files: 75% (709/945)\n", - "Updating files: 76% (719/945)\n", - "Updating files: 77% (728/945)\n", - "Updating files: 78% (738/945)\n", - "Updating files: 78% (741/945)\n", - "Updating files: 79% (747/945)\n", - "Updating files: 80% (756/945)\n", - "Updating files: 81% (766/945)\n", - "Updating files: 82% (775/945)\n", - "Updating files: 83% (785/945)\n", - "Updating files: 84% (794/945)\n", - "Updating files: 85% (804/945)\n", - "Updating files: 86% (813/945)\n", - "Updating files: 87% (823/945)\n", - "Updating files: 88% (832/945)\n", - "Updating files: 89% (842/945)\n", - "Updating files: 90% (851/945)\n", - "Updating files: 91% (860/945)\n", - "Updating files: 92% (870/945)\n", - "Updating files: 93% (879/945)\n", - "Updating files: 94% (889/945)\n", - "Updating files: 95% (898/945)\n", - "Updating files: 96% (908/945)\n", - "Updating files: 97% (917/945)\n", - "Updating files: 98% (927/945)\n", - "Updating files: 99% (936/945)\n", - "Updating files: 100% (945/945)\n", - "Updating files: 100% (945/945), done.\n" + "fatal: destination path 'va-data-charlie' already exists and is not an empty directory.\n" ] } ], @@ -203,9 +137,6 @@ "ExecuteTime": { "end_time": "2021-03-18T09:54:16.804606Z", "start_time": "2021-03-18T09:54:16.802048Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [], @@ -220,7 +151,8 @@ "source": [ "## Connect to the API\n", "\n", - "Instantiate a session object with mvg library a session object basically caches the endpoint and the token, to simplify the the calls to the mvg library." + "Instantiate a session object with mvg library a session object basically caches the endpoint and the token,\n", + "to simplify the calls to the MVG library." ] }, { @@ -230,9 +162,6 @@ "ExecuteTime": { "end_time": "2021-03-18T09:54:16.957584Z", "start_time": "2021-03-18T09:54:16.805695Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [], @@ -250,7 +179,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.111625Z", @@ -260,22 +189,7 @@ "is_executing": false } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-03-30 10:18:19,732 - INFO - mvg.mvg - Getting API info for: https://api.beta.multiviz.com\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.1.0\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}\n" - ] - } - ], + "outputs": [], "source": [ "hello_message = json.dumps(session.say_hello())\n", "print(hello_message)" @@ -287,21 +201,21 @@ "source": [ "## Check Database\n", "\n", - "We start by seeing if there are any sources in the database. A source represents a measurement source e.g. one specific channel of a measurement sensor. Note that sources cannot be used to represent a sensor with several channels. If this is required, the client side needs to take care of it.\n", + "We start by seeing if there are any sources in the database.\n", + "A source represents a measurement source e.g. one specific channel of a measurement sensor.\n", + "Note that sources cannot be used to represent a sensor with several channels.\n", + "If this is required, the client side needs to take care of it.\n", "\n", "Because we want to start at a clean slate we will list all sources (potentially none) and delete all of them" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.247583Z", "start_time": "2021-03-18T09:54:17.113206Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [ @@ -309,10 +223,10 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-03-30 10:19:01,075 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:19:01,076 - INFO - mvg.mvg - listing sources\n", - "2021-03-30 10:19:01,834 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:19:01,834 - INFO - mvg.mvg - retrieving source with source id=u0001\n" + "2021-06-24 11:38:17,928 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:38:17,929 - INFO - mvg.mvg - listing sources\n", + "2021-06-24 11:38:18,147 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:38:18,148 - INFO - mvg.mvg - retrieving source with source id=u0001\n" ] }, { @@ -320,8 +234,8 @@ "output_type": "stream", "text": [ "Retrieved sources\n", - "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}}\n", - "Source info retrieved for one source: {'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}}\n" + "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform'}}\n", + "Source info retrieved for one source: {'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform'}}\n" ] } ], @@ -347,14 +261,11 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.250783Z", "start_time": "2021-03-18T09:54:17.248845Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [], @@ -366,19 +277,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "To make sure we start from a clean slate we delete our resource in case it exists. All information including measurements and analysis results will be removed" + "To make sure we start from a clean slate we delete our resource in case it exists.\n", + "All information including measurements and analysis results will be removed" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.408675Z", "start_time": "2021-03-18T09:54:17.252056Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [ @@ -386,10 +295,10 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-03-30 10:20:05,391 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:20:05,392 - INFO - mvg.mvg - retrieving source with source id=u0001\n", - "2021-03-30 10:20:05,618 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:20:05,619 - INFO - mvg.mvg - deleting source with source id=u0001\n" + "2021-06-24 11:39:00,051 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:39:00,053 - INFO - mvg.mvg - retrieving source with source id=u0001\n", + "2021-06-24 11:39:00,281 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:39:00,282 - INFO - mvg.mvg - deleting source with source id=u0001\n" ] }, { @@ -420,14 +329,11 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.413080Z", "start_time": "2021-03-18T09:54:17.409985Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [ @@ -458,14 +364,11 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.688070Z", "start_time": "2021-03-18T09:54:17.414133Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [ @@ -473,11 +376,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-03-30 10:20:30,600 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:20:30,601 - INFO - mvg.mvg - creating source with source id=u0001\n", - "2021-03-30 10:20:30,602 - INFO - mvg.mvg - metadata: {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}\n", - "2021-03-30 10:20:31,390 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:20:31,391 - INFO - mvg.mvg - retrieving source with source id=u0001\n" + "2021-06-24 11:39:28,004 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:39:28,006 - INFO - mvg.mvg - creating source with source id=u0001\n", + "2021-06-24 11:39:28,008 - INFO - mvg.mvg - metadata: {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}\n", + "2021-06-24 11:39:28,231 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:39:28,231 - INFO - mvg.mvg - retrieving source with source id=u0001\n" ] }, { @@ -485,7 +388,7 @@ "output_type": "stream", "text": [ "Retrieved\n", - "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}}\n" + "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform'}}\n" ] } ], @@ -505,14 +408,11 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.983670Z", "start_time": "2021-03-18T09:54:17.689219Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [ @@ -520,11 +420,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-03-30 10:20:42,675 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:20:42,675 - INFO - mvg.mvg - updating source with source id=u0001\n", - "2021-03-30 10:20:42,676 - INFO - mvg.mvg - metadata: {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}\n", - "2021-03-30 10:20:43,303 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:20:43,304 - INFO - mvg.mvg - retrieving source with source id=u0001\n" + "2021-06-24 11:40:00,900 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:40:00,901 - INFO - mvg.mvg - updating source with source id=u0001\n", + "2021-06-24 11:40:00,902 - INFO - mvg.mvg - metadata: {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}\n", + "2021-06-24 11:40:01,117 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:40:01,117 - INFO - mvg.mvg - retrieving source with source id=u0001\n" ] }, { @@ -532,7 +432,7 @@ "output_type": "stream", "text": [ "Retrieved\n", - "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}}\n" + "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}, 'properties': {'data_class': 'waveform'}}\n" ] } ], @@ -558,14 +458,11 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.986967Z", "start_time": "2021-03-18T09:54:17.984640Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [], @@ -583,14 +480,11 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:15.657580Z", "start_time": "2021-03-18T09:54:17.988134Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [ @@ -598,256 +492,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-03-30 10:21:10,737 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:21:10,738 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:21:10,740 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:21:10,742 - INFO - mvg.mvg - timestamp: 1570791660\n", - "2021-03-30 10:21:10,746 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:21:24,265 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:21:24,265 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:21:24,266 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:21:24,266 - INFO - mvg.mvg - timestamp: 1571655660\n", - "2021-03-30 10:21:24,266 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:21:36,561 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:21:36,562 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:21:36,562 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:21:36,563 - INFO - mvg.mvg - timestamp: 1570359660\n", - "2021-03-30 10:21:36,563 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:21:49,932 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:21:49,933 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:21:49,934 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:21:49,934 - INFO - mvg.mvg - timestamp: 1571914860\n", - "2021-03-30 10:21:49,934 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:22:07,997 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:22:07,997 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:22:07,998 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:22:07,999 - INFO - mvg.mvg - timestamp: 1572696060\n", - "2021-03-30 10:22:07,999 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:22:22,229 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:22:22,230 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:22:22,231 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:22:22,232 - INFO - mvg.mvg - timestamp: 1572868860\n", - "2021-03-30 10:22:22,232 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:22:34,548 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:22:34,549 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:22:34,549 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:22:34,550 - INFO - mvg.mvg - timestamp: 1573732860\n", - "2021-03-30 10:22:34,550 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:22:42,090 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:22:42,091 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:22:42,092 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:22:42,092 - INFO - mvg.mvg - timestamp: 1571396460\n", - "2021-03-30 10:22:42,092 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:22:49,402 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:22:49,402 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:22:49,403 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:22:49,403 - INFO - mvg.mvg - timestamp: 1570446060\n", - "2021-03-30 10:22:49,403 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:22:57,769 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:22:57,770 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:22:57,771 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:22:57,771 - INFO - mvg.mvg - timestamp: 1572177660\n", - "2021-03-30 10:22:57,772 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:23:04,586 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:23:04,587 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:23:04,587 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:23:04,588 - INFO - mvg.mvg - timestamp: 1574164860\n", - "2021-03-30 10:23:04,588 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:23:11,908 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:23:11,909 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:23:11,910 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:23:11,910 - INFO - mvg.mvg - timestamp: 1573992060\n", - "2021-03-30 10:23:11,911 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:23:19,163 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:23:19,163 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:23:19,164 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:23:19,164 - INFO - mvg.mvg - timestamp: 1574251260\n", - "2021-03-30 10:23:19,165 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:23:26,538 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:23:26,539 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:23:26,540 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:23:26,540 - INFO - mvg.mvg - timestamp: 1570878060\n", - "2021-03-30 10:23:26,540 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:23:34,328 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:23:34,329 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:23:34,329 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:23:34,330 - INFO - mvg.mvg - timestamp: 1573300860\n", - "2021-03-30 10:23:34,330 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:23:41,635 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:23:41,636 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:23:41,637 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:23:41,637 - INFO - mvg.mvg - timestamp: 1572782460\n", - "2021-03-30 10:23:41,638 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:23:48,939 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:23:48,939 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:23:48,940 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:23:48,940 - INFO - mvg.mvg - timestamp: 1570964460\n", - "2021-03-30 10:23:48,941 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:23:56,334 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:23:56,335 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:23:56,336 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:23:56,336 - INFO - mvg.mvg - timestamp: 1571050860\n", - "2021-03-30 10:23:56,337 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:24:03,760 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:24:03,761 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:24:03,762 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:24:03,762 - INFO - mvg.mvg - timestamp: 1574424060\n", - "2021-03-30 10:24:03,762 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:24:11,834 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:24:11,834 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:24:11,835 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:24:11,835 - INFO - mvg.mvg - timestamp: 1571828460\n", - "2021-03-30 10:24:11,835 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:24:19,064 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:24:19,064 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:24:19,065 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:24:19,065 - INFO - mvg.mvg - timestamp: 1571742060\n", - "2021-03-30 10:24:19,066 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:24:26,090 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:24:26,091 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:24:26,091 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:24:26,092 - INFO - mvg.mvg - timestamp: 1573905660\n", - "2021-03-30 10:24:26,092 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:24:32,784 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:24:32,785 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:24:32,786 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:24:32,786 - INFO - mvg.mvg - timestamp: 1572001260\n", - "2021-03-30 10:24:32,787 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:24:39,859 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:24:39,859 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:24:39,860 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:24:39,861 - INFO - mvg.mvg - timestamp: 1570186860\n", - "2021-03-30 10:24:39,862 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:24:47,231 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:24:47,231 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:24:47,232 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:24:47,232 - INFO - mvg.mvg - timestamp: 1572436860\n", - "2021-03-30 10:24:47,233 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:24:54,315 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:24:54,316 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:24:54,316 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:24:54,317 - INFO - mvg.mvg - timestamp: 1570618860\n", - "2021-03-30 10:24:54,318 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:25:01,448 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:25:01,449 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:25:01,449 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:25:01,450 - INFO - mvg.mvg - timestamp: 1573214460\n", - "2021-03-30 10:25:01,450 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:25:09,035 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:25:09,036 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:25:09,037 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:25:09,037 - INFO - mvg.mvg - timestamp: 1574078460\n", - "2021-03-30 10:25:09,037 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:25:16,072 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:25:16,073 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:25:16,073 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:25:16,074 - INFO - mvg.mvg - timestamp: 1573128060\n", - "2021-03-30 10:25:16,074 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:25:23,119 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:25:23,120 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:25:23,120 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:25:23,121 - INFO - mvg.mvg - timestamp: 1571569260\n", - "2021-03-30 10:25:23,122 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:25:30,034 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:25:30,034 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:25:30,035 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:25:30,035 - INFO - mvg.mvg - timestamp: 1574337660\n", - "2021-03-30 10:25:30,036 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:25:37,487 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:25:37,488 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:25:37,489 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:25:37,489 - INFO - mvg.mvg - timestamp: 1570532460\n", - "2021-03-30 10:25:37,489 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:25:44,793 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:25:44,793 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:25:44,794 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:25:44,794 - INFO - mvg.mvg - timestamp: 1572955260\n", - "2021-03-30 10:25:44,795 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:25:51,817 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:25:51,818 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:25:51,818 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:25:51,819 - INFO - mvg.mvg - timestamp: 1572609660\n", - "2021-03-30 10:25:51,819 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:25:59,002 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:25:59,003 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:25:59,003 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:25:59,004 - INFO - mvg.mvg - timestamp: 1572264060\n", - "2021-03-30 10:25:59,004 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:26:07,606 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:26:07,606 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:26:07,606 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:26:07,607 - INFO - mvg.mvg - timestamp: 1573819260\n", - "2021-03-30 10:26:07,607 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:26:17,143 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:26:17,144 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:26:17,144 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:26:17,145 - INFO - mvg.mvg - timestamp: 1573387260\n", - "2021-03-30 10:26:17,146 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:26:26,043 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:26:26,043 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:26:26,044 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:26:26,045 - INFO - mvg.mvg - timestamp: 1570705260\n", - "2021-03-30 10:26:26,045 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:26:33,081 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:26:33,082 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:26:33,082 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:26:33,083 - INFO - mvg.mvg - timestamp: 1573560060\n", - "2021-03-30 10:26:33,083 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:26:40,323 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:26:40,324 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:26:40,325 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:26:40,325 - INFO - mvg.mvg - timestamp: 1571223660\n", - "2021-03-30 10:26:40,326 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:26:47,625 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:26:47,626 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:26:47,626 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:26:47,627 - INFO - mvg.mvg - timestamp: 1571482860\n", - "2021-03-30 10:26:47,627 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:26:54,820 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:26:54,821 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:26:54,822 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:26:54,822 - INFO - mvg.mvg - timestamp: 1571137260\n", - "2021-03-30 10:26:54,822 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:27:02,486 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:27:02,487 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:27:02,487 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:27:02,488 - INFO - mvg.mvg - timestamp: 1573646460\n", - "2021-03-30 10:27:02,488 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:27:10,491 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:27:10,491 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:27:10,492 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:27:10,492 - INFO - mvg.mvg - timestamp: 1570273260\n", - "2021-03-30 10:27:10,492 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:27:18,392 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:27:18,393 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:27:18,394 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:27:18,394 - INFO - mvg.mvg - timestamp: 1572350460\n", - "2021-03-30 10:27:18,394 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:27:26,698 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:27:26,699 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:27:26,699 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:27:26,699 - INFO - mvg.mvg - timestamp: 1571310060\n", - "2021-03-30 10:27:26,700 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:27:33,651 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:27:33,652 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:27:33,652 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:27:33,653 - INFO - mvg.mvg - timestamp: 1573473660\n", - "2021-03-30 10:27:33,653 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:27:40,951 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:27:40,952 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:27:40,953 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:27:40,953 - INFO - mvg.mvg - timestamp: 1573041660\n", - "2021-03-30 10:27:40,954 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:27:48,256 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:27:48,257 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:27:48,258 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:27:48,258 - INFO - mvg.mvg - timestamp: 1572523260\n", - "2021-03-30 10:27:48,258 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:27:55,402 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:27:55,403 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-30 10:27:55,403 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:27:55,404 - INFO - mvg.mvg - timestamp: 1572087660\n", - "2021-03-30 10:27:55,404 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-06-24 11:40:21,485 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:40:21,485 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:40:21,486 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:40:21,486 - INFO - mvg.mvg - timestamp: 1573732860\n", + "2021-06-24 11:40:21,487 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -856,490 +505,1165 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570791660.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571655660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573732860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:40:30,068 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:40:30,068 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:40:30,069 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:40:30,069 - INFO - mvg.mvg - timestamp: 1571655660\n", + "2021-06-24 11:40:30,069 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570359660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571655660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:40:37,684 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:40:37,685 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:40:37,685 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:40:37,686 - INFO - mvg.mvg - timestamp: 1572523260\n", + "2021-06-24 11:40:37,686 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571914860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572523260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:40:44,673 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:40:44,673 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:40:44,674 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:40:44,674 - INFO - mvg.mvg - timestamp: 1571569260\n", + "2021-06-24 11:40:44,674 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572696060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571569260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:40:51,339 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:40:51,339 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:40:51,340 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:40:51,340 - INFO - mvg.mvg - timestamp: 1572177660\n", + "2021-06-24 11:40:51,341 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572868860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572177660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:40:58,270 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:40:58,271 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:40:58,272 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:40:58,273 - INFO - mvg.mvg - timestamp: 1570705260\n", + "2021-06-24 11:40:58,273 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573732860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570705260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:41:05,408 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:41:05,409 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:41:05,410 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:41:05,410 - INFO - mvg.mvg - timestamp: 1572868860\n", + "2021-06-24 11:41:05,411 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571396460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572868860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:41:14,509 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:41:14,509 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:41:14,510 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:41:14,512 - INFO - mvg.mvg - timestamp: 1570964460\n", + "2021-06-24 11:41:14,513 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570446060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570964460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:41:21,419 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:41:21,419 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:41:21,420 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:41:21,420 - INFO - mvg.mvg - timestamp: 1572955260\n", + "2021-06-24 11:41:21,421 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572177660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572955260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:41:28,289 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:41:28,290 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:41:28,290 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:41:28,291 - INFO - mvg.mvg - timestamp: 1571742060\n", + "2021-06-24 11:41:28,292 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574164860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571742060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:41:34,962 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:41:34,962 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:41:34,963 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:41:34,963 - INFO - mvg.mvg - timestamp: 1571482860\n", + "2021-06-24 11:41:34,964 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573992060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571482860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:41:46,427 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:41:46,428 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:41:46,429 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:41:46,429 - INFO - mvg.mvg - timestamp: 1574078460\n", + "2021-06-24 11:41:46,429 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574251260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574078460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:41:53,637 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:41:53,638 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:41:53,638 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:41:53,639 - INFO - mvg.mvg - timestamp: 1570618860\n", + "2021-06-24 11:41:53,639 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570878060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570618860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:42:00,511 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:42:00,511 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:42:00,512 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:42:00,512 - INFO - mvg.mvg - timestamp: 1572350460\n", + "2021-06-24 11:42:00,512 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573300860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572350460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:42:07,218 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:42:07,219 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:42:07,220 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:42:07,220 - INFO - mvg.mvg - timestamp: 1572264060\n", + "2021-06-24 11:42:07,221 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572782460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572264060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:42:14,329 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:42:14,330 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:42:14,330 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:42:14,330 - INFO - mvg.mvg - timestamp: 1573387260\n", + "2021-06-24 11:42:14,331 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570964460.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571050860.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574424060.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571828460.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571742060.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573905660.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572001260.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570186860.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572436860.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570618860.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573214460.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574078460.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573128060.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571569260.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574337660.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570532460.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572955260.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572609660.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572264060.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573819260.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573387260.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570705260.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573560060.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571223660.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571482860.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571137260.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573646460.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570273260.csv\n", - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572350460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573387260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:42:22,027 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:42:22,027 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:42:22,028 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:42:22,028 - INFO - mvg.mvg - timestamp: 1571914860\n", + "2021-06-24 11:42:22,028 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571310060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571914860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:42:29,935 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:42:29,935 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:42:29,936 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:42:29,937 - INFO - mvg.mvg - timestamp: 1570446060\n", + "2021-06-24 11:42:29,937 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573473660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570446060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:42:37,617 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:42:37,617 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:42:37,618 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:42:37,618 - INFO - mvg.mvg - timestamp: 1572087660\n", + "2021-06-24 11:42:37,619 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573041660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572087660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:42:44,402 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:42:44,402 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:42:44,403 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:42:44,403 - INFO - mvg.mvg - timestamp: 1573905660\n", + "2021-06-24 11:42:44,404 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572523260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573905660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:42:51,034 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:42:51,034 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:42:51,035 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:42:51,035 - INFO - mvg.mvg - timestamp: 1574164860\n", + "2021-06-24 11:42:51,035 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572087660.csv\n" + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574164860.csv\n" ] - } - ], - "source": [ - "for m in meas:\n", - "\n", - " # samples file for one measurement\n", - " TS_MEAS = str(m) + \".csv\" # filename\n", - " TS_MEAS = REF_DB_PATH / SOURCE_ID / TS_MEAS # path to file\n", - " ts_df = pd.read_csv(TS_MEAS, names=['acc']) # read csv into df\n", - " accs = ts_df.iloc[:, 0].tolist() # convert to list\n", - " print(f\"Read {len(accs)} samples\")\n", - "\n", - " # meta information file for one measurement\n", - " TS_META = str(m) + \".json\" # filename\n", - " TS_META = REF_DB_PATH / SOURCE_ID / TS_META # path\n", - " with open(TS_META, \"r\") as json_file: # read json\n", - " meas_info = json.load(json_file) # into dict\n", - " print(f\"Read meta: {meas_info}\")\n", - "\n", - " # get duration and other meta info\n", - " duration = meas_info['duration']\n", - " meta_info = meas_info['meta']\n", - " # add sampling rate, not required by vibration API\n", - " # but may be used on client side\n", - " # in general any information can be stored\n", - " # along the actual samples\n", - " meta_info['sampling_rate'] = len(accs)/duration\n", - " # <<< end of code specific for repo\n", - "\n", - " # Upload measurements\n", - " print(f\"Uploading {TS_MEAS}\")\n", - " try:\n", - " # see mvg for details on this call\n", - " session.create_measurement(sid=SOURCE_ID,\n", - " duration=duration,\n", - " timestamp=m,\n", - " data=accs,\n", - " meta=meta_info)\n", - " except HTTPError as exc:\n", - " print(\"OUCH\")\n", - " print(exc)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Read the Measurements" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Check if we actually created the measurements by reading them" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "ExecuteTime": { - "end_time": "2021-03-18T09:55:41.728688Z", - "start_time": "2021-03-18T09:55:15.658652Z" }, - "pycharm": { - "is_executing": false - } - }, - "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "2021-03-30 10:32:23,999 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:24,000 - INFO - mvg.mvg - retrieving all measurements from source id=u0001\n", - "2021-03-30 10:32:24,233 - INFO - mvg.mvg - 50 measurements in database\n", - "2021-03-30 10:32:24,233 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:24,234 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:24,235 - INFO - mvg.mvg - timestamp=1570186860\n", - "2021-03-30 10:32:25,141 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:25,141 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:25,142 - INFO - mvg.mvg - timestamp=1570273260\n", - "2021-03-30 10:32:26,025 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:26,026 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:26,026 - INFO - mvg.mvg - timestamp=1570359660\n", - "2021-03-30 10:32:26,924 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:26,925 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:26,925 - INFO - mvg.mvg - timestamp=1570446060\n", - "2021-03-30 10:32:27,820 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:27,821 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:27,821 - INFO - mvg.mvg - timestamp=1570532460\n", - "2021-03-30 10:32:28,899 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:28,899 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:28,900 - INFO - mvg.mvg - timestamp=1570618860\n", - "2021-03-30 10:32:31,580 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:31,580 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:31,581 - INFO - mvg.mvg - timestamp=1570705260\n", - "2021-03-30 10:32:33,412 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:33,413 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:33,413 - INFO - mvg.mvg - timestamp=1570791660\n", - "2021-03-30 10:32:34,676 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:34,676 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:34,677 - INFO - mvg.mvg - timestamp=1570878060\n", - "2021-03-30 10:32:35,561 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:35,562 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:35,562 - INFO - mvg.mvg - timestamp=1570964460\n", - "2021-03-30 10:32:36,444 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:36,445 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:36,445 - INFO - mvg.mvg - timestamp=1571050860\n", - "2021-03-30 10:32:37,374 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:37,374 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:37,375 - INFO - mvg.mvg - timestamp=1571137260\n", - "2021-03-30 10:32:38,493 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:38,493 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:38,494 - INFO - mvg.mvg - timestamp=1571223660\n", - "2021-03-30 10:32:39,398 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:39,399 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:39,399 - INFO - mvg.mvg - timestamp=1571310060\n", - "2021-03-30 10:32:40,300 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:40,301 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:40,301 - INFO - mvg.mvg - timestamp=1571396460\n", - "2021-03-30 10:32:41,207 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:41,208 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:41,208 - INFO - mvg.mvg - timestamp=1571482860\n", - "2021-03-30 10:32:42,114 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:42,115 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:42,115 - INFO - mvg.mvg - timestamp=1571569260\n", - "2021-03-30 10:32:43,453 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:43,454 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:43,455 - INFO - mvg.mvg - timestamp=1571655660\n", - "2021-03-30 10:32:44,619 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:44,620 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:44,620 - INFO - mvg.mvg - timestamp=1571742060\n", - "2021-03-30 10:32:45,509 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:45,510 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:45,511 - INFO - mvg.mvg - timestamp=1571828460\n", - "2021-03-30 10:32:46,404 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:46,404 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:46,405 - INFO - mvg.mvg - timestamp=1571914860\n", - "2021-03-30 10:32:47,478 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:47,479 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:47,479 - INFO - mvg.mvg - timestamp=1572001260\n", - "2021-03-30 10:32:48,373 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:48,374 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:48,375 - INFO - mvg.mvg - timestamp=1572087660\n", - "2021-03-30 10:32:49,274 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:49,274 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:49,275 - INFO - mvg.mvg - timestamp=1572177660\n", - "2021-03-30 10:32:50,188 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:50,189 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:50,189 - INFO - mvg.mvg - timestamp=1572264060\n", - "2021-03-30 10:32:51,088 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:51,089 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:51,089 - INFO - mvg.mvg - timestamp=1572350460\n", - "2021-03-30 10:32:52,213 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:52,214 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:52,214 - INFO - mvg.mvg - timestamp=1572436860\n", - "2021-03-30 10:32:53,421 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:53,421 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:53,422 - INFO - mvg.mvg - timestamp=1572523260\n", - "2021-03-30 10:32:54,310 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:54,311 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:54,311 - INFO - mvg.mvg - timestamp=1572609660\n", - "2021-03-30 10:32:55,494 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:55,494 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:55,495 - INFO - mvg.mvg - timestamp=1572696060\n", - "2021-03-30 10:32:56,584 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:56,585 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:56,586 - INFO - mvg.mvg - timestamp=1572782460\n", - "2021-03-30 10:32:57,492 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:57,493 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:57,493 - INFO - mvg.mvg - timestamp=1572868860\n", - "2021-03-30 10:32:58,465 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:58,465 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:58,466 - INFO - mvg.mvg - timestamp=1572955260\n", - "2021-03-30 10:32:59,421 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:32:59,422 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:32:59,422 - INFO - mvg.mvg - timestamp=1573041660\n", - "2021-03-30 10:33:00,334 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:00,335 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:00,336 - INFO - mvg.mvg - timestamp=1573128060\n", - "2021-03-30 10:33:01,229 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:01,230 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:01,230 - INFO - mvg.mvg - timestamp=1573214460\n", - "2021-03-30 10:33:02,347 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:02,348 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:02,349 - INFO - mvg.mvg - timestamp=1573300860\n", - "2021-03-30 10:33:03,259 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:03,260 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:03,260 - INFO - mvg.mvg - timestamp=1573387260\n", - "2021-03-30 10:33:04,248 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:04,249 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:04,249 - INFO - mvg.mvg - timestamp=1573473660\n", - "2021-03-30 10:33:05,215 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:05,216 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:05,216 - INFO - mvg.mvg - timestamp=1573560060\n", - "2021-03-30 10:33:06,107 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:06,107 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:06,107 - INFO - mvg.mvg - timestamp=1573646460\n", - "2021-03-30 10:33:07,070 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:07,071 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:07,072 - INFO - mvg.mvg - timestamp=1573732860\n", - "2021-03-30 10:33:07,970 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:07,971 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:07,971 - INFO - mvg.mvg - timestamp=1573819260\n", - "2021-03-30 10:33:09,521 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:09,522 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:09,522 - INFO - mvg.mvg - timestamp=1573905660\n", - "2021-03-30 10:33:10,452 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:10,453 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:10,453 - INFO - mvg.mvg - timestamp=1573992060\n", - "2021-03-30 10:33:11,355 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:11,357 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:11,357 - INFO - mvg.mvg - timestamp=1574078460\n", - "2021-03-30 10:33:12,348 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:12,349 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:12,350 - INFO - mvg.mvg - timestamp=1574164860\n", - "2021-03-30 10:33:13,278 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:13,278 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:13,279 - INFO - mvg.mvg - timestamp=1574251260\n", - "2021-03-30 10:33:14,306 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:14,306 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:14,307 - INFO - mvg.mvg - timestamp=1574337660\n", - "2021-03-30 10:33:15,421 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:15,421 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:15,422 - INFO - mvg.mvg - timestamp=1574424060\n" + "2021-06-24 11:42:57,718 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:42:57,719 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:42:57,719 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:42:57,720 - INFO - mvg.mvg - timestamp: 1573473660\n", + "2021-06-24 11:42:57,720 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Read 50 stored measurements\n" + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573473660.csv\n" ] - } - ], - "source": [ - "m = session.read_measurements(SOURCE_ID)\n", - "print(f\"Read {len(m)} stored measurements\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "It is also possible to read a specific measurement at a single timestamp let's get the timestamp of the first measurement" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "ExecuteTime": { - "end_time": "2021-03-18T09:55:42.225546Z", - "start_time": "2021-03-18T09:55:41.729876Z" }, - "pycharm": { - "is_executing": false - } - }, - "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "2021-03-30 10:33:37,878 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:37,879 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:37,880 - INFO - mvg.mvg - timestamp=1570186860\n" + "2021-06-24 11:43:04,363 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:43:04,363 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:43:04,363 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:43:04,364 - INFO - mvg.mvg - timestamp: 1573560060\n", + "2021-06-24 11:43:04,364 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "source_id: u0001\n", - "timestamp: 1570186860\n", - "duration: 2.8672073400507907\n", - "meta: {'sampling_rate': 13950.857142857141}\n", - "data: [0.63897705078125, -0.55078125]...\n" + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573560060.csv\n" ] - } - ], - "source": [ - "ts_0 = m[0]['timestamp']\n", - "meas_0 = session.read_single_measurement(SOURCE_ID, ts_0)\n", - "# we'll printout the returned measurement\n", - "print(f\"source_id: {meas_0['source_id']}\")\n", - "print(f\"timestamp: {meas_0['timestamp']}\")\n", - "print(f\"duration: {meas_0['duration']}\")\n", - "print(f\"meta: {meas_0['meta']}\")\n", - "print(f\"data: {meas_0['data'][1:3]}...\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can update the meta information for a measurement at a single timestamp let's get the timestamp of the first measurement" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "ExecuteTime": { - "end_time": "2021-03-18T09:55:42.870908Z", - "start_time": "2021-03-18T09:55:42.226689Z" }, - "pycharm": { - "is_executing": false - } - }, - "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "2021-03-30 10:33:53,495 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:53,496 - INFO - mvg.mvg - deleting measurement for source id=u0001\n", - "2021-03-30 10:33:53,497 - INFO - mvg.mvg - timestamp: 1570186860\n", - "2021-03-30 10:33:54,170 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:33:54,170 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:33:54,170 - INFO - mvg.mvg - timestamp=1570186860\n" + "2021-06-24 11:43:11,654 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:43:11,654 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:43:11,654 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:43:11,655 - INFO - mvg.mvg - timestamp: 1570186860\n", + "2021-06-24 11:43:11,656 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "source_id: u0001\n", - "timestamp: 1570186860\n", - "duration: 2.8672073400507907\n", - "meta: {'sampling_rate': 13950.857142857141, 'updated': 'YES!'}\n", - "data: [0.63897705078125, -0.55078125]...\n" + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570186860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:43:18,770 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:43:18,770 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:43:18,771 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:43:18,771 - INFO - mvg.mvg - timestamp: 1571223660\n", + "2021-06-24 11:43:18,771 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571223660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:43:25,797 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:43:25,797 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:43:25,798 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:43:25,798 - INFO - mvg.mvg - timestamp: 1572609660\n", + "2021-06-24 11:43:25,798 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572609660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:43:32,909 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:43:32,910 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:43:32,910 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:43:32,911 - INFO - mvg.mvg - timestamp: 1573992060\n", + "2021-06-24 11:43:32,912 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573992060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:43:41,382 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:43:41,383 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:43:41,384 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:43:41,384 - INFO - mvg.mvg - timestamp: 1574251260\n", + "2021-06-24 11:43:41,384 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574251260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:43:48,526 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:43:48,527 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:43:48,527 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:43:48,528 - INFO - mvg.mvg - timestamp: 1572436860\n", + "2021-06-24 11:43:48,529 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572436860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:43:55,431 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:43:55,432 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:43:55,432 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:43:55,433 - INFO - mvg.mvg - timestamp: 1573128060\n", + "2021-06-24 11:43:55,434 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573128060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:44:02,167 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:44:02,168 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:44:02,168 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:44:02,169 - INFO - mvg.mvg - timestamp: 1573041660\n", + "2021-06-24 11:44:02,169 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573041660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:44:08,878 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:44:08,879 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:44:08,880 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:44:08,880 - INFO - mvg.mvg - timestamp: 1573214460\n", + "2021-06-24 11:44:08,880 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573214460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:44:15,720 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:44:15,721 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:44:15,722 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:44:15,722 - INFO - mvg.mvg - timestamp: 1571396460\n", + "2021-06-24 11:44:15,723 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571396460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:44:22,277 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:44:22,277 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:44:22,278 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:44:22,278 - INFO - mvg.mvg - timestamp: 1573819260\n", + "2021-06-24 11:44:22,279 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573819260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:44:29,886 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:44:29,886 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:44:29,887 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:44:29,887 - INFO - mvg.mvg - timestamp: 1570359660\n", + "2021-06-24 11:44:29,888 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570359660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:44:36,749 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:44:36,749 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:44:36,750 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:44:36,750 - INFO - mvg.mvg - timestamp: 1572001260\n", + "2021-06-24 11:44:36,751 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572001260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:44:45,569 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:44:45,570 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:44:45,571 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:44:45,571 - INFO - mvg.mvg - timestamp: 1570532460\n", + "2021-06-24 11:44:45,572 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570532460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:44:53,245 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:44:53,245 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:44:53,245 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:44:53,246 - INFO - mvg.mvg - timestamp: 1572782460\n", + "2021-06-24 11:44:53,246 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572782460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:44:59,769 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:44:59,769 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:44:59,769 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:44:59,770 - INFO - mvg.mvg - timestamp: 1574424060\n", + "2021-06-24 11:44:59,771 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574424060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:45:12,006 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:45:12,007 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:45:12,007 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:45:12,008 - INFO - mvg.mvg - timestamp: 1571137260\n", + "2021-06-24 11:45:12,008 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571137260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:45:21,792 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:45:21,792 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:45:21,793 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:45:21,793 - INFO - mvg.mvg - timestamp: 1571828460\n", + "2021-06-24 11:45:21,794 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571828460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:45:30,858 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:45:30,859 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:45:30,859 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:45:30,859 - INFO - mvg.mvg - timestamp: 1574337660\n", + "2021-06-24 11:45:30,860 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574337660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:45:38,974 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:45:38,975 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:45:38,976 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:45:38,976 - INFO - mvg.mvg - timestamp: 1572696060\n", + "2021-06-24 11:45:38,977 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572696060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:45:48,035 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:45:48,036 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:45:48,037 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:45:48,037 - INFO - mvg.mvg - timestamp: 1573646460\n", + "2021-06-24 11:45:48,037 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573646460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:45:57,660 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:45:57,660 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:45:57,661 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:45:57,661 - INFO - mvg.mvg - timestamp: 1571050860\n", + "2021-06-24 11:45:57,662 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571050860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:46:10,735 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:46:10,735 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:46:10,736 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:46:10,737 - INFO - mvg.mvg - timestamp: 1570791660\n", + "2021-06-24 11:46:10,737 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570791660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:46:20,178 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:46:20,179 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:46:20,180 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:46:20,180 - INFO - mvg.mvg - timestamp: 1570273260\n", + "2021-06-24 11:46:20,180 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570273260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:46:26,829 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:46:26,830 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:46:26,830 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:46:26,830 - INFO - mvg.mvg - timestamp: 1573300860\n", + "2021-06-24 11:46:26,831 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573300860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:46:33,894 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:46:33,894 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:46:33,895 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:46:33,896 - INFO - mvg.mvg - timestamp: 1571310060\n", + "2021-06-24 11:46:33,896 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571310060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:46:41,245 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:46:41,246 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-06-24 11:46:41,247 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 11:46:41,247 - INFO - mvg.mvg - timestamp: 1570878060\n", + "2021-06-24 11:46:41,247 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples\n", + "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570878060.csv\n" + ] + } + ], + "source": [ + "for m in meas:\n", + "\n", + " # samples file for one measurement\n", + " TS_MEAS = str(m) + \".csv\" # filename\n", + " TS_MEAS = REF_DB_PATH / SOURCE_ID / TS_MEAS # path to file\n", + " ts_df = pd.read_csv(TS_MEAS, names=['acc']) # read csv into df\n", + " accs = ts_df.iloc[:, 0].tolist() # convert to list\n", + " print(f\"Read {len(accs)} samples\")\n", + "\n", + " # meta information file for one measurement\n", + " TS_META = str(m) + \".json\" # filename\n", + " TS_META = REF_DB_PATH / SOURCE_ID / TS_META # path\n", + " with open(TS_META, \"r\") as json_file: # read json\n", + " meas_info = json.load(json_file) # into dict\n", + " print(f\"Read meta: {meas_info}\")\n", + "\n", + " # get duration and other meta info\n", + " duration = meas_info['duration']\n", + " meta_info = meas_info['meta']\n", + " # add sampling rate, not required by vibration API\n", + " # but may be used on client side\n", + " # in general any information can be stored\n", + " # along the actual samples\n", + " meta_info['sampling_rate'] = len(accs)/duration\n", + " # <<< end of code specific for repo\n", + "\n", + " # Upload measurements\n", + " print(f\"Uploading {TS_MEAS}\")\n", + " try:\n", + " # see mvg for details on this call\n", + " session.create_measurement(sid=SOURCE_ID,\n", + " duration=duration,\n", + " timestamp=m,\n", + " data=accs,\n", + " meta=meta_info)\n", + " except HTTPError as exc:\n", + " print(\"OUCH\")\n", + " print(exc)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Read the Measurements" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Check if we actually created the measurements by reading them" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "ExecuteTime": { + "end_time": "2021-03-18T09:55:41.728688Z", + "start_time": "2021-03-18T09:55:15.658652Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:50:19,947 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:50:19,948 - INFO - mvg.mvg - retrieving all measurements from source id=u0001\n", + "2021-06-24 11:50:20,172 - INFO - mvg.mvg - 50 measurements in database\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 50 stored measurements\n" + ] + } + ], + "source": [ + "m = session.list_measurements(SOURCE_ID)\n", + "print(f\"Read {len(m)} stored measurements\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It is also possible to read a specific measurement at a single timestamp.\n", + "Let's get the timestamp of the first measurement." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "ExecuteTime": { + "end_time": "2021-03-18T09:55:42.225546Z", + "start_time": "2021-03-18T09:55:41.729876Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:55:07,892 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:55:07,895 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", + "2021-06-24 11:55:07,896 - INFO - mvg.mvg - timestamp=1570186860\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "source_id: u0001\n", + "timestamp: 1570186860\n", + "duration: 2.8672073400507907\n", + "meta: {'sampling_rate': 13950.857142857141}\n", + "data: [0.63897705078125, -0.55078125]...\n" + ] + } + ], + "source": [ + "ts_0 = m[0]['timestamp']\n", + "meas_0 = session.read_single_measurement(SOURCE_ID, ts_0)\n", + "# we'll printout the returned measurement\n", + "print(f\"source_id: {SOURCE_ID}\")\n", + "print(f\"timestamp: {ts_0}\")\n", + "print(f\"duration: {meas_0['duration']}\")\n", + "print(f\"meta: {meas_0['meta']}\")\n", + "print(f\"data: {meas_0['data'][1:3]}...\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can update the meta information for a measurement at a single timestamp let's get the timestamp of the first measurement" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "ExecuteTime": { + "end_time": "2021-03-18T09:55:42.870908Z", + "start_time": "2021-03-18T09:55:42.226689Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:55:59,850 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:55:59,852 - INFO - mvg.mvg - deleting measurement for source id=u0001\n", + "2021-06-24 11:55:59,854 - INFO - mvg.mvg - timestamp: 1570186860\n", + "2021-06-24 11:56:00,073 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:56:00,073 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", + "2021-06-24 11:56:00,074 - INFO - mvg.mvg - timestamp=1570186860\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "source_id: u0001\n", + "timestamp: 1570186860\n", + "duration: 2.8672073400507907\n", + "meta: {'sampling_rate': 13950.857142857141, 'updated': 'YES!'}\n", + "data: [0.63897705078125, -0.55078125]...\n" ] } ], @@ -1351,8 +1675,8 @@ "meas_0_u = session.read_single_measurement(SOURCE_ID, ts_0)\n", "\n", "# we'll printout the returned measurement\n", - "print(f\"source_id: {meas_0_u['source_id']}\")\n", - "print(f\"timestamp: {meas_0_u['timestamp']}\")\n", + "print(f\"source_id: {SOURCE_ID}\")\n", + "print(f\"timestamp: {ts_0}\")\n", "print(f\"duration: {meas_0_u['duration']}\")\n", "print(f\"meta: {meas_0_u['meta']}\")\n", "print(f\"data: {meas_0_u['data'][1:3]}...\")" @@ -1367,2086 +1691,5043 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:43.023114Z", "start_time": "2021-03-18T09:55:42.872176Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:56:24,041 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:56:24,041 - INFO - mvg.mvg - deleting measurement for source id=u0001\n", + "2021-06-24 11:56:24,043 - INFO - mvg.mvg - timestamp: 1570186860\n" + ] + } + ], + "source": [ + "session.delete_measurement(SOURCE_ID, ts_0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We check if it's actually deleted" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "ExecuteTime": { + "end_time": "2021-03-18T09:55:43.153589Z", + "start_time": "2021-03-18T09:55:43.024498Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 11:56:26,689 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 11:56:26,691 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", + "2021-06-24 11:56:26,692 - INFO - mvg.mvg - timestamp=1570186860\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Previously deleted measurement does not exist\n" + ] + } + ], + "source": [ + "try:\n", + " meas_0 = session.read_single_measurement(SOURCE_ID, ts_0)\n", + "except HTTPError:\n", + " print(\"Previously deleted measurement does not exist\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If all went well we end up here now the source u0001 is in the database along with a number of its measurements." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Uploading additional sources\n", + "\n", + "Here we show how to upload additional sources in a more compact way." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "ExecuteTime": { + "end_time": "2021-03-18T09:56:43.305948Z", + "start_time": "2021-03-18T09:55:43.154900Z" + }, + "pycharm": { + "name": "#%%\n" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:15:28,045 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:15:28,046 - INFO - mvg.mvg - deleting source with source id=u0002\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Deleting u0002\n", + "Source u0002 does not exist\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:15:28,257 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:15:28,258 - INFO - mvg.mvg - creating source with source id=u0002\n", + "2021-06-24 12:15:28,259 - INFO - mvg.mvg - metadata: {'assetId': 'assetB', 'measPoint': 'mloc01', 'location': 'paris'}\n", + "2021-06-24 12:15:28,486 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:15:28,487 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:15:28,487 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:15:28,488 - INFO - mvg.mvg - timestamp: 1573732860\n", + "2021-06-24 12:15:28,488 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573732860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:15:35,605 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:15:35,605 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:15:35,605 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:15:35,606 - INFO - mvg.mvg - timestamp: 1571655660\n", + "2021-06-24 12:15:35,606 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571655660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:15:43,154 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:15:43,155 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:15:43,156 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:15:43,156 - INFO - mvg.mvg - timestamp: 1572523260\n", + "2021-06-24 12:15:43,157 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572523260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:15:49,813 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:15:49,813 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:15:49,813 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:15:49,814 - INFO - mvg.mvg - timestamp: 1571569260\n", + "2021-06-24 12:15:49,814 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571569260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:15:57,148 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:15:57,148 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:15:57,148 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:15:57,148 - INFO - mvg.mvg - timestamp: 1572177660\n", + "2021-06-24 12:15:57,149 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572177660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:16:03,624 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:16:03,624 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:16:03,624 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:16:03,625 - INFO - mvg.mvg - timestamp: 1570705260\n", + "2021-06-24 12:16:03,625 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570705260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:16:10,012 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:16:10,013 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:16:10,014 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:16:10,014 - INFO - mvg.mvg - timestamp: 1572868860\n", + "2021-06-24 12:16:10,014 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572868860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:16:16,413 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:16:16,413 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:16:16,414 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:16:16,415 - INFO - mvg.mvg - timestamp: 1570964460\n", + "2021-06-24 12:16:16,415 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570964460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:16:22,943 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:16:22,943 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:16:22,944 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:16:22,944 - INFO - mvg.mvg - timestamp: 1572955260\n", + "2021-06-24 12:16:22,945 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572955260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:16:29,638 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:16:29,639 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:16:29,639 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:16:29,640 - INFO - mvg.mvg - timestamp: 1571742060\n", + "2021-06-24 12:16:29,640 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571742060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:16:36,498 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:16:36,499 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:16:36,499 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:16:36,499 - INFO - mvg.mvg - timestamp: 1571482860\n", + "2021-06-24 12:16:36,500 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571482860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:16:44,205 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:16:44,206 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:16:44,207 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:16:44,207 - INFO - mvg.mvg - timestamp: 1574078460\n", + "2021-06-24 12:16:44,208 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1574078460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:16:51,149 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:16:51,149 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:16:51,149 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:16:51,150 - INFO - mvg.mvg - timestamp: 1570618860\n", + "2021-06-24 12:16:51,150 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570618860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:16:59,483 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:16:59,483 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:16:59,484 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:16:59,485 - INFO - mvg.mvg - timestamp: 1572350460\n", + "2021-06-24 12:16:59,485 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572350460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:17:06,267 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:17:06,267 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:17:06,268 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:17:06,269 - INFO - mvg.mvg - timestamp: 1572264060\n", + "2021-06-24 12:17:06,269 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572264060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:17:12,826 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:17:12,827 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:17:12,828 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:17:12,828 - INFO - mvg.mvg - timestamp: 1573387260\n", + "2021-06-24 12:17:12,829 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573387260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:17:20,335 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:17:20,336 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:17:20,337 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:17:20,337 - INFO - mvg.mvg - timestamp: 1571914860\n", + "2021-06-24 12:17:20,338 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571914860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:17:26,991 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:17:26,992 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:17:26,992 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:17:26,993 - INFO - mvg.mvg - timestamp: 1570446060\n", + "2021-06-24 12:17:26,993 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570446060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:17:33,758 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:17:33,759 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:17:33,759 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:17:33,760 - INFO - mvg.mvg - timestamp: 1572087660\n", + "2021-06-24 12:17:33,761 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572087660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:17:41,284 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:17:41,284 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:17:41,284 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:17:41,285 - INFO - mvg.mvg - timestamp: 1573905660\n", + "2021-06-24 12:17:41,285 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573905660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:17:47,840 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:17:47,840 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:17:47,841 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:17:47,841 - INFO - mvg.mvg - timestamp: 1574164860\n", + "2021-06-24 12:17:47,842 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1574164860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:17:54,511 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:17:54,511 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:17:54,511 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:17:54,512 - INFO - mvg.mvg - timestamp: 1573473660\n", + "2021-06-24 12:17:54,513 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573473660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:18:01,973 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:18:01,974 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:18:01,974 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:18:01,975 - INFO - mvg.mvg - timestamp: 1573560060\n", + "2021-06-24 12:18:01,976 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573560060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:18:08,601 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:18:08,601 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:18:08,602 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:18:08,602 - INFO - mvg.mvg - timestamp: 1570186860\n", + "2021-06-24 12:18:08,602 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570186860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:18:15,215 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:18:15,216 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:18:15,217 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:18:15,217 - INFO - mvg.mvg - timestamp: 1571223660\n", + "2021-06-24 12:18:15,218 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571223660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:18:22,851 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:18:22,851 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:18:22,851 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:18:22,852 - INFO - mvg.mvg - timestamp: 1572609660\n", + "2021-06-24 12:18:22,852 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572609660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:18:29,462 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:18:29,462 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:18:29,463 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:18:29,463 - INFO - mvg.mvg - timestamp: 1573992060\n", + "2021-06-24 12:18:29,464 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573992060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:18:38,052 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:18:38,052 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:18:38,052 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:18:38,053 - INFO - mvg.mvg - timestamp: 1574251260\n", + "2021-06-24 12:18:38,053 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1574251260.csv\n" + ] }, - "pycharm": { - "is_executing": false - } - }, - "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "2021-03-30 10:34:05,205 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:34:05,206 - INFO - mvg.mvg - deleting measurement for source id=u0001\n", - "2021-03-30 10:34:05,207 - INFO - mvg.mvg - timestamp: 1570186860\n" + "2021-06-24 12:18:45,083 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:18:45,084 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:18:45,084 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:18:45,085 - INFO - mvg.mvg - timestamp: 1572436860\n", + "2021-06-24 12:18:45,085 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572436860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:18:53,322 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:18:53,323 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:18:53,323 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:18:53,324 - INFO - mvg.mvg - timestamp: 1573128060\n", + "2021-06-24 12:18:53,324 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573128060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:19:01,406 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:19:01,406 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:19:01,406 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:19:01,407 - INFO - mvg.mvg - timestamp: 1573041660\n", + "2021-06-24 12:19:01,408 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573041660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:19:08,105 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:19:08,106 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:19:08,106 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:19:08,107 - INFO - mvg.mvg - timestamp: 1573214460\n", + "2021-06-24 12:19:08,108 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573214460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:19:14,729 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:19:14,730 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:19:14,730 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:19:14,731 - INFO - mvg.mvg - timestamp: 1571396460\n", + "2021-06-24 12:19:14,731 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571396460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:19:21,234 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:19:21,235 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:19:21,235 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:19:21,236 - INFO - mvg.mvg - timestamp: 1573819260\n", + "2021-06-24 12:19:21,236 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573819260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:19:28,059 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:19:28,059 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:19:28,060 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:19:28,060 - INFO - mvg.mvg - timestamp: 1570359660\n", + "2021-06-24 12:19:28,061 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570359660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:19:35,067 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:19:35,068 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:19:35,068 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:19:35,068 - INFO - mvg.mvg - timestamp: 1572001260\n", + "2021-06-24 12:19:35,069 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572001260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:19:42,369 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:19:42,370 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:19:42,370 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:19:42,370 - INFO - mvg.mvg - timestamp: 1570532460\n", + "2021-06-24 12:19:42,371 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570532460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:19:49,370 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:19:49,371 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:19:49,371 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:19:49,372 - INFO - mvg.mvg - timestamp: 1572782460\n", + "2021-06-24 12:19:49,372 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572782460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:19:56,329 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:19:56,329 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:19:56,330 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:19:56,330 - INFO - mvg.mvg - timestamp: 1574424060\n", + "2021-06-24 12:19:56,331 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1574424060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:20:04,057 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:20:04,057 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:20:04,057 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:20:04,058 - INFO - mvg.mvg - timestamp: 1571137260\n", + "2021-06-24 12:20:04,058 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571137260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:20:10,640 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:20:10,641 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:20:10,641 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:20:10,642 - INFO - mvg.mvg - timestamp: 1571828460\n", + "2021-06-24 12:20:10,642 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571828460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:20:17,134 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:20:17,134 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:20:17,135 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:20:17,135 - INFO - mvg.mvg - timestamp: 1574337660\n", + "2021-06-24 12:20:17,136 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1574337660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:20:24,091 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:20:24,091 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:20:24,092 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:20:24,092 - INFO - mvg.mvg - timestamp: 1572696060\n", + "2021-06-24 12:20:24,093 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572696060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:20:30,838 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:20:30,838 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:20:30,839 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:20:30,839 - INFO - mvg.mvg - timestamp: 1573646460\n", + "2021-06-24 12:20:30,840 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573646460.csv\n" ] - } - ], - "source": [ - "session.delete_measurement(SOURCE_ID, ts_0)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We check if it's actually deleted" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "ExecuteTime": { - "end_time": "2021-03-18T09:55:43.153589Z", - "start_time": "2021-03-18T09:55:43.024498Z" }, - "pycharm": { - "is_executing": false - } - }, - "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "2021-03-30 10:34:13,532 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:34:13,533 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-03-30 10:34:13,534 - INFO - mvg.mvg - timestamp=1570186860\n" + "2021-06-24 12:20:37,622 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:20:37,623 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:20:37,624 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:20:37,624 - INFO - mvg.mvg - timestamp: 1571050860\n", + "2021-06-24 12:20:37,624 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Previously deleted measurement does not exist\n" + "Read 40000 samples for u0002.\n", + "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571050860.csv\n" ] - } - ], - "source": [ - "try:\n", - " meas_0 = session.read_single_measurement(SOURCE_ID, ts_0)\n", - "except HTTPError:\n", - " print(\"Previously deleted measurement does not exist\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If all went well we end up here now the source u0001 is in the database along with a number measurements" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Uploading additional sources\n", - "\n", - "Here we show how to upload additional sources in a more compact way." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "ExecuteTime": { - "end_time": "2021-03-18T09:56:43.305948Z", - "start_time": "2021-03-18T09:55:43.154900Z" }, - "pycharm": { - "is_executing": false, - "name": "#%%\n" - } - }, - "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "2021-03-30 10:41:34,217 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:41:34,217 - INFO - mvg.mvg - deleting source with source id=u0002\n", - "2021-03-30 10:41:35,065 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:41:35,065 - INFO - mvg.mvg - creating source with source id=u0002\n", - "2021-03-30 10:41:35,066 - INFO - mvg.mvg - metadata: {'assetId': 'assetB', 'measPoint': 'mloc01', 'location': 'paris'}\n", - "2021-03-30 10:41:35,531 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:41:35,532 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:41:35,532 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:41:35,533 - INFO - mvg.mvg - timestamp: 1570791660\n", - "2021-03-30 10:41:35,533 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:41:53,661 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:41:53,661 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:41:53,662 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:41:53,663 - INFO - mvg.mvg - timestamp: 1571655660\n", - "2021-03-30 10:41:53,663 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:42:04,963 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:42:04,963 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:42:04,964 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:42:04,965 - INFO - mvg.mvg - timestamp: 1570359660\n", - "2021-03-30 10:42:04,965 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:42:18,496 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:42:18,497 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:42:18,497 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:42:18,498 - INFO - mvg.mvg - timestamp: 1571914860\n", - "2021-03-30 10:42:18,498 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:42:27,310 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:42:27,310 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:42:27,310 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:42:27,311 - INFO - mvg.mvg - timestamp: 1572696060\n", - "2021-03-30 10:42:27,311 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:42:39,575 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:42:39,576 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:42:39,577 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:42:39,577 - INFO - mvg.mvg - timestamp: 1572868860\n", - "2021-03-30 10:42:39,578 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:42:49,674 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:42:49,675 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:42:49,675 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:42:49,676 - INFO - mvg.mvg - timestamp: 1573732860\n", - "2021-03-30 10:42:49,677 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:43:00,760 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:43:00,761 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:43:00,762 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:43:00,762 - INFO - mvg.mvg - timestamp: 1571396460\n", - "2021-03-30 10:43:00,763 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:43:12,194 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:43:12,195 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:43:12,195 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:43:12,195 - INFO - mvg.mvg - timestamp: 1570446060\n", - "2021-03-30 10:43:12,196 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:43:30,513 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:43:30,514 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:43:30,515 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:43:30,515 - INFO - mvg.mvg - timestamp: 1572177660\n", - "2021-03-30 10:43:30,516 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:43:45,215 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:43:45,215 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:43:45,216 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:43:45,216 - INFO - mvg.mvg - timestamp: 1574164860\n", - "2021-03-30 10:43:45,217 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:44:04,531 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:44:04,531 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:44:04,531 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:44:04,532 - INFO - mvg.mvg - timestamp: 1573992060\n", - "2021-03-30 10:44:04,532 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:44:16,666 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:44:16,667 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:44:16,668 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:44:16,668 - INFO - mvg.mvg - timestamp: 1574251260\n", - "2021-03-30 10:44:16,669 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:44:30,599 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:44:30,600 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:44:30,600 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:44:30,601 - INFO - mvg.mvg - timestamp: 1570878060\n", - "2021-03-30 10:44:30,601 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:44:57,101 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:44:57,101 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:44:57,102 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:44:57,102 - INFO - mvg.mvg - timestamp: 1573300860\n", - "2021-03-30 10:44:57,103 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:45:15,607 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:45:15,608 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:45:15,609 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:45:15,609 - INFO - mvg.mvg - timestamp: 1572782460\n", - "2021-03-30 10:45:15,609 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:45:23,859 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:45:23,859 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:45:23,859 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:45:23,860 - INFO - mvg.mvg - timestamp: 1570964460\n", - "2021-03-30 10:45:23,861 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:45:30,866 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:45:30,866 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:45:30,866 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:45:30,867 - INFO - mvg.mvg - timestamp: 1571050860\n", - "2021-03-30 10:45:30,867 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:45:38,647 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:45:38,648 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:45:38,649 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:45:38,649 - INFO - mvg.mvg - timestamp: 1574424060\n", - "2021-03-30 10:45:38,650 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:45:45,619 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:45:45,619 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:45:45,620 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:45:45,620 - INFO - mvg.mvg - timestamp: 1571828460\n", - "2021-03-30 10:45:45,621 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:45:53,000 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:45:53,000 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:45:53,001 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:45:53,001 - INFO - mvg.mvg - timestamp: 1571742060\n", - "2021-03-30 10:45:53,002 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:46:00,996 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:46:00,997 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:46:00,997 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:46:00,998 - INFO - mvg.mvg - timestamp: 1573905660\n", - "2021-03-30 10:46:00,999 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:46:12,277 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:46:12,279 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:46:12,279 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:46:12,279 - INFO - mvg.mvg - timestamp: 1572001260\n", - "2021-03-30 10:46:12,279 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:46:20,298 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:46:20,298 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:46:20,299 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:46:20,299 - INFO - mvg.mvg - timestamp: 1570186860\n", - "2021-03-30 10:46:20,299 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:46:27,505 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:46:27,506 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:46:27,506 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:46:27,507 - INFO - mvg.mvg - timestamp: 1572436860\n", - "2021-03-30 10:46:27,507 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:46:34,565 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:46:34,565 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:46:34,566 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:46:34,567 - INFO - mvg.mvg - timestamp: 1570618860\n", - "2021-03-30 10:46:34,568 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:46:41,630 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:46:41,631 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:46:41,631 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:46:41,632 - INFO - mvg.mvg - timestamp: 1573214460\n", - "2021-03-30 10:46:41,632 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:46:48,714 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:46:48,715 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:46:48,715 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:46:48,716 - INFO - mvg.mvg - timestamp: 1574078460\n", - "2021-03-30 10:46:48,717 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:46:55,489 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:46:55,489 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:46:55,490 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:46:55,490 - INFO - mvg.mvg - timestamp: 1573128060\n", - "2021-03-30 10:46:55,491 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:47:02,786 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:47:02,787 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:47:02,787 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:47:02,788 - INFO - mvg.mvg - timestamp: 1571569260\n", - "2021-03-30 10:47:02,789 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:47:09,728 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:47:09,728 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:47:09,729 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:47:09,729 - INFO - mvg.mvg - timestamp: 1574337660\n", - "2021-03-30 10:47:09,730 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:47:16,571 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:47:16,571 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:47:16,572 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:47:16,572 - INFO - mvg.mvg - timestamp: 1570532460\n", - "2021-03-30 10:47:16,573 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:47:23,807 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:47:23,808 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:47:23,809 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:47:23,809 - INFO - mvg.mvg - timestamp: 1572955260\n", - "2021-03-30 10:47:23,809 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:47:30,581 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:47:30,582 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:47:30,582 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:47:30,582 - INFO - mvg.mvg - timestamp: 1572609660\n", - "2021-03-30 10:47:30,583 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:47:37,596 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:47:37,596 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:47:37,596 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:47:37,597 - INFO - mvg.mvg - timestamp: 1572264060\n", - "2021-03-30 10:47:37,598 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:47:44,448 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:47:44,449 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:47:44,449 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:47:44,450 - INFO - mvg.mvg - timestamp: 1573819260\n", - "2021-03-30 10:47:44,450 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:47:51,637 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:47:51,638 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:47:51,638 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:47:51,639 - INFO - mvg.mvg - timestamp: 1573387260\n", - "2021-03-30 10:47:51,639 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:47:58,797 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:47:58,797 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:47:58,798 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:47:58,798 - INFO - mvg.mvg - timestamp: 1570705260\n", - "2021-03-30 10:47:58,799 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:48:06,382 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:48:06,383 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:48:06,384 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:48:06,384 - INFO - mvg.mvg - timestamp: 1573560060\n", - "2021-03-30 10:48:06,385 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:48:13,227 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:48:13,228 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:48:13,229 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:48:13,229 - INFO - mvg.mvg - timestamp: 1571223660\n", - "2021-03-30 10:48:13,229 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:48:20,321 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:48:20,321 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:48:20,322 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:48:20,322 - INFO - mvg.mvg - timestamp: 1571482860\n", - "2021-03-30 10:48:20,322 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:48:27,566 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:48:27,566 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:48:27,567 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:48:27,567 - INFO - mvg.mvg - timestamp: 1571137260\n", - "2021-03-30 10:48:27,568 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:48:34,421 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:48:34,422 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:48:34,422 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:48:34,423 - INFO - mvg.mvg - timestamp: 1573646460\n", - "2021-03-30 10:48:34,424 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:48:42,310 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:48:42,311 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:48:42,312 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:48:42,312 - INFO - mvg.mvg - timestamp: 1570273260\n", - "2021-03-30 10:48:42,313 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:48:49,138 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:48:49,139 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:48:49,140 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:48:49,140 - INFO - mvg.mvg - timestamp: 1572350460\n", - "2021-03-30 10:48:49,141 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:48:55,788 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:48:55,789 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:48:55,790 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:48:55,790 - INFO - mvg.mvg - timestamp: 1571310060\n", - "2021-03-30 10:48:55,790 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:49:03,034 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:49:03,035 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:49:03,035 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:49:03,036 - INFO - mvg.mvg - timestamp: 1573473660\n", - "2021-03-30 10:49:03,037 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:49:09,869 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:49:09,869 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:49:09,870 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:49:09,870 - INFO - mvg.mvg - timestamp: 1573041660\n", - "2021-03-30 10:49:09,871 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:49:16,767 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:49:16,767 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:49:16,768 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:49:16,768 - INFO - mvg.mvg - timestamp: 1572523260\n", - "2021-03-30 10:49:16,769 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:49:23,713 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:49:23,713 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-03-30 10:49:23,713 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:49:23,714 - INFO - mvg.mvg - timestamp: 1572087660\n", - "2021-03-30 10:49:23,715 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:49:31,020 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:49:31,020 - INFO - mvg.mvg - deleting source with source id=u0003\n", - "2021-03-30 10:49:31,231 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:49:31,231 - INFO - mvg.mvg - creating source with source id=u0003\n", - "2021-03-30 10:49:31,232 - INFO - mvg.mvg - metadata: {'assetId': 'assetC', 'measPoint': 'mloc01', 'location': 'milano'}\n", - "2021-03-30 10:49:31,497 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:49:31,497 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:49:31,498 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:49:31,498 - INFO - mvg.mvg - timestamp: 1570791660\n", - "2021-03-30 10:49:31,498 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:49:38,413 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:49:38,413 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:49:38,414 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:49:38,415 - INFO - mvg.mvg - timestamp: 1571655660\n", - "2021-03-30 10:49:38,415 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:49:45,302 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:49:45,302 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:49:45,303 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:49:45,304 - INFO - mvg.mvg - timestamp: 1570359660\n", - "2021-03-30 10:49:45,304 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:49:52,654 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:49:52,655 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:49:52,655 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:49:52,656 - INFO - mvg.mvg - timestamp: 1571914860\n", - "2021-03-30 10:49:52,657 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:49:59,728 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:49:59,728 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:49:59,729 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:49:59,729 - INFO - mvg.mvg - timestamp: 1572696060\n", - "2021-03-30 10:49:59,730 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:50:07,359 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:50:07,359 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:50:07,360 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:50:07,360 - INFO - mvg.mvg - timestamp: 1572868860\n", - "2021-03-30 10:50:07,360 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:50:14,979 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:50:14,979 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:50:14,980 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:50:14,981 - INFO - mvg.mvg - timestamp: 1573732860\n", - "2021-03-30 10:50:14,981 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:50:22,541 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:50:22,541 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:50:22,542 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:50:22,542 - INFO - mvg.mvg - timestamp: 1571396460\n", - "2021-03-30 10:50:22,543 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:50:29,969 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:50:29,969 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:50:29,970 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:50:29,970 - INFO - mvg.mvg - timestamp: 1570446060\n", - "2021-03-30 10:50:29,970 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:50:36,700 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:50:36,700 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:50:36,701 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:50:36,701 - INFO - mvg.mvg - timestamp: 1572177660\n", - "2021-03-30 10:50:36,702 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:50:43,186 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:50:43,187 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:50:43,188 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:50:43,188 - INFO - mvg.mvg - timestamp: 1574164860\n", - "2021-03-30 10:50:43,189 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:50:49,869 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:50:49,869 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:50:49,870 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:50:49,871 - INFO - mvg.mvg - timestamp: 1573992060\n", - "2021-03-30 10:50:49,871 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:50:56,764 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:50:56,765 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:50:56,766 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:50:56,766 - INFO - mvg.mvg - timestamp: 1574251260\n", - "2021-03-30 10:50:56,767 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:51:03,685 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:51:03,685 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:51:03,686 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:51:03,686 - INFO - mvg.mvg - timestamp: 1570878060\n", - "2021-03-30 10:51:03,687 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:51:10,393 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:51:10,394 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:51:10,395 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:51:10,395 - INFO - mvg.mvg - timestamp: 1573300860\n", - "2021-03-30 10:51:10,396 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:51:18,522 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:51:18,523 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:51:18,523 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:51:18,523 - INFO - mvg.mvg - timestamp: 1572782460\n", - "2021-03-30 10:51:18,524 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:51:27,505 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:51:27,505 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:51:27,506 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:51:27,507 - INFO - mvg.mvg - timestamp: 1570964460\n", - "2021-03-30 10:51:27,507 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:51:34,392 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:51:34,393 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:51:34,394 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:51:34,394 - INFO - mvg.mvg - timestamp: 1571050860\n", - "2021-03-30 10:51:34,394 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:51:40,824 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:51:40,825 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:51:40,826 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:51:40,826 - INFO - mvg.mvg - timestamp: 1574424060\n", - "2021-03-30 10:51:40,826 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:51:47,719 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:51:47,720 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:51:47,721 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:51:47,721 - INFO - mvg.mvg - timestamp: 1571828460\n", - "2021-03-30 10:51:47,722 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:51:54,923 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:51:54,924 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:51:54,924 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:51:54,925 - INFO - mvg.mvg - timestamp: 1571742060\n", - "2021-03-30 10:51:54,925 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:52:01,686 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:52:01,687 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:52:01,687 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:52:01,688 - INFO - mvg.mvg - timestamp: 1573905660\n", - "2021-03-30 10:52:01,688 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:52:09,741 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:52:09,741 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:52:09,742 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:52:09,742 - INFO - mvg.mvg - timestamp: 1572001260\n", - "2021-03-30 10:52:09,743 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:52:16,807 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:52:16,807 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:52:16,808 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:52:16,808 - INFO - mvg.mvg - timestamp: 1570186860\n", - "2021-03-30 10:52:16,809 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:52:24,047 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:52:24,047 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:52:24,048 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:52:24,049 - INFO - mvg.mvg - timestamp: 1572436860\n", - "2021-03-30 10:52:24,049 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:52:31,767 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:52:31,767 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:52:31,768 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:52:31,768 - INFO - mvg.mvg - timestamp: 1570618860\n", - "2021-03-30 10:52:31,769 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:52:41,628 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:52:41,628 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:52:41,629 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:52:41,629 - INFO - mvg.mvg - timestamp: 1573214460\n", - "2021-03-30 10:52:41,629 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:52:48,323 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:52:48,324 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:52:48,324 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:52:48,325 - INFO - mvg.mvg - timestamp: 1574078460\n", - "2021-03-30 10:52:48,325 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:52:55,361 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:52:55,362 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:52:55,363 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:52:55,363 - INFO - mvg.mvg - timestamp: 1573128060\n", - "2021-03-30 10:52:55,363 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:53:02,647 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:53:02,647 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:53:02,647 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:53:02,648 - INFO - mvg.mvg - timestamp: 1571569260\n", - "2021-03-30 10:53:02,649 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:53:10,697 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:53:10,698 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:53:10,698 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:53:10,699 - INFO - mvg.mvg - timestamp: 1574337660\n", - "2021-03-30 10:53:10,701 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:53:17,226 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:53:17,227 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:53:17,227 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:53:17,228 - INFO - mvg.mvg - timestamp: 1570532460\n", - "2021-03-30 10:53:17,228 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:53:24,088 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:53:24,089 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:53:24,089 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:53:24,090 - INFO - mvg.mvg - timestamp: 1572955260\n", - "2021-03-30 10:53:24,091 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:53:31,587 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:53:31,588 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:53:31,588 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:53:31,589 - INFO - mvg.mvg - timestamp: 1572609660\n", - "2021-03-30 10:53:31,589 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:53:38,231 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:53:38,232 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:53:38,232 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:53:38,233 - INFO - mvg.mvg - timestamp: 1572264060\n", - "2021-03-30 10:53:38,233 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:53:45,910 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:53:45,910 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:53:45,910 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:53:45,911 - INFO - mvg.mvg - timestamp: 1573819260\n", - "2021-03-30 10:53:45,911 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:53:52,855 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:53:52,856 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:53:52,856 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:53:52,857 - INFO - mvg.mvg - timestamp: 1573387260\n", - "2021-03-30 10:53:52,857 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:54:01,028 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:54:01,028 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:54:01,028 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:54:01,029 - INFO - mvg.mvg - timestamp: 1570705260\n", - "2021-03-30 10:54:01,029 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:54:08,962 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:54:08,962 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:54:08,962 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:54:08,963 - INFO - mvg.mvg - timestamp: 1573560060\n", - "2021-03-30 10:54:08,963 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:54:18,354 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:54:18,354 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:54:18,355 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:54:18,355 - INFO - mvg.mvg - timestamp: 1571223660\n", - "2021-03-30 10:54:18,356 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:54:27,595 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:54:27,596 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:54:27,597 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:54:27,597 - INFO - mvg.mvg - timestamp: 1571482860\n", - "2021-03-30 10:54:27,598 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:54:39,283 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:54:39,284 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:54:39,285 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:54:39,285 - INFO - mvg.mvg - timestamp: 1571137260\n", - "2021-03-30 10:54:39,286 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:54:49,054 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:54:49,054 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:54:49,055 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:54:49,055 - INFO - mvg.mvg - timestamp: 1573646460\n", - "2021-03-30 10:54:49,055 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:54:58,157 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:54:58,157 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:54:58,158 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:54:58,158 - INFO - mvg.mvg - timestamp: 1570273260\n", - "2021-03-30 10:54:58,159 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:55:04,922 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:55:04,923 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:55:04,923 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:55:04,924 - INFO - mvg.mvg - timestamp: 1572350460\n", - "2021-03-30 10:55:04,924 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:55:12,872 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:55:12,873 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:55:12,873 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:55:12,874 - INFO - mvg.mvg - timestamp: 1571310060\n", - "2021-03-30 10:55:12,875 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:55:20,241 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:55:20,242 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:55:20,242 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:55:20,243 - INFO - mvg.mvg - timestamp: 1573473660\n", - "2021-03-30 10:55:20,243 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:55:28,904 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:55:28,904 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:55:28,905 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:55:28,905 - INFO - mvg.mvg - timestamp: 1573041660\n", - "2021-03-30 10:55:28,906 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:55:35,528 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:55:35,529 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:55:35,529 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:55:35,530 - INFO - mvg.mvg - timestamp: 1572523260\n", - "2021-03-30 10:55:35,530 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:55:43,810 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:55:43,810 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-03-30 10:55:43,810 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:55:43,811 - INFO - mvg.mvg - timestamp: 1572087660\n", - "2021-03-30 10:55:43,814 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:55:53,165 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:55:53,165 - INFO - mvg.mvg - deleting source with source id=u0004\n", - "2021-03-30 10:55:53,386 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:55:53,386 - INFO - mvg.mvg - creating source with source id=u0004\n", - "2021-03-30 10:55:53,389 - INFO - mvg.mvg - metadata: {'assetId': 'assetD', 'measPoint': 'mloc01', 'location': 'milano'}\n", - "2021-03-30 10:55:53,626 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:55:53,627 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:55:53,628 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:55:53,629 - INFO - mvg.mvg - timestamp: 1570791660\n", - "2021-03-30 10:55:53,629 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:56:00,880 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:56:00,881 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:56:00,881 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:56:00,882 - INFO - mvg.mvg - timestamp: 1571655660\n", - "2021-03-30 10:56:00,882 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:56:09,488 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:56:09,489 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:56:09,489 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:56:09,489 - INFO - mvg.mvg - timestamp: 1570359660\n", - "2021-03-30 10:56:09,489 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:56:20,299 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:56:20,300 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:56:20,300 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:56:20,301 - INFO - mvg.mvg - timestamp: 1571914860\n", - "2021-03-30 10:56:20,301 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:56:28,752 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:56:28,752 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:56:28,753 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:56:28,753 - INFO - mvg.mvg - timestamp: 1572696060\n", - "2021-03-30 10:56:28,754 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:56:36,772 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:56:36,773 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:56:36,773 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:56:36,774 - INFO - mvg.mvg - timestamp: 1572868860\n", - "2021-03-30 10:56:36,774 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:56:46,254 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:56:46,255 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:56:46,257 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:56:46,261 - INFO - mvg.mvg - timestamp: 1573732860\n", - "2021-03-30 10:56:46,264 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:56:55,614 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:56:55,614 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:56:55,615 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:56:55,615 - INFO - mvg.mvg - timestamp: 1571396460\n", - "2021-03-30 10:56:55,615 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:57:04,500 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:57:04,501 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:57:04,502 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:57:04,502 - INFO - mvg.mvg - timestamp: 1570446060\n", - "2021-03-30 10:57:04,503 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:57:12,797 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:57:12,798 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:57:12,799 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:57:12,799 - INFO - mvg.mvg - timestamp: 1572177660\n", - "2021-03-30 10:57:12,800 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:57:20,315 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:57:20,315 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:57:20,316 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:57:20,316 - INFO - mvg.mvg - timestamp: 1574164860\n", - "2021-03-30 10:57:20,317 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:57:28,005 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:57:28,006 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:57:28,007 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:57:28,007 - INFO - mvg.mvg - timestamp: 1573992060\n", - "2021-03-30 10:57:28,008 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:58:03,344 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:58:03,344 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:58:03,345 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:58:03,345 - INFO - mvg.mvg - timestamp: 1574251260\n", - "2021-03-30 10:58:03,346 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:58:15,502 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:58:15,503 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:58:15,503 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:58:15,504 - INFO - mvg.mvg - timestamp: 1570878060\n", - "2021-03-30 10:58:15,504 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:58:27,051 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:58:27,051 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:58:27,052 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:58:27,052 - INFO - mvg.mvg - timestamp: 1573300860\n", - "2021-03-30 10:58:27,053 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:58:34,165 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:58:34,166 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:58:34,167 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:58:34,167 - INFO - mvg.mvg - timestamp: 1572782460\n", - "2021-03-30 10:58:34,168 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:58:41,819 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:58:41,819 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:58:41,820 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:58:41,821 - INFO - mvg.mvg - timestamp: 1570964460\n", - "2021-03-30 10:58:41,821 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:58:52,162 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:58:52,162 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:58:52,163 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:58:52,163 - INFO - mvg.mvg - timestamp: 1571050860\n", - "2021-03-30 10:58:52,164 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:59:00,727 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:59:00,727 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:59:00,727 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:59:00,728 - INFO - mvg.mvg - timestamp: 1574424060\n", - "2021-03-30 10:59:00,729 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:59:11,591 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:59:11,591 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:59:11,592 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:59:11,593 - INFO - mvg.mvg - timestamp: 1571828460\n", - "2021-03-30 10:59:11,593 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:59:19,622 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:59:19,623 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:59:19,623 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:59:19,624 - INFO - mvg.mvg - timestamp: 1571742060\n", - "2021-03-30 10:59:19,624 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:59:27,715 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:59:27,715 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:59:27,715 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:59:27,716 - INFO - mvg.mvg - timestamp: 1573905660\n", - "2021-03-30 10:59:27,716 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:59:37,502 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:59:37,503 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:59:37,503 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:59:37,504 - INFO - mvg.mvg - timestamp: 1572001260\n", - "2021-03-30 10:59:37,504 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:59:47,478 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:59:47,478 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:59:47,478 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:59:47,479 - INFO - mvg.mvg - timestamp: 1570186860\n", - "2021-03-30 10:59:47,480 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 10:59:57,143 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 10:59:57,144 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 10:59:57,145 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 10:59:57,145 - INFO - mvg.mvg - timestamp: 1572436860\n", - "2021-03-30 10:59:57,145 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:00:05,617 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:00:05,617 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:00:05,617 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:00:05,618 - INFO - mvg.mvg - timestamp: 1570618860\n", - "2021-03-30 11:00:05,618 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:00:14,173 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:00:14,174 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:00:14,174 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:00:14,175 - INFO - mvg.mvg - timestamp: 1573214460\n", - "2021-03-30 11:00:14,176 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:00:22,649 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:00:22,649 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:00:22,650 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:00:22,650 - INFO - mvg.mvg - timestamp: 1574078460\n", - "2021-03-30 11:00:22,651 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:00:35,953 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:00:35,953 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:00:35,954 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:00:35,954 - INFO - mvg.mvg - timestamp: 1573128060\n", - "2021-03-30 11:00:35,955 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:00:46,675 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:00:46,676 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:00:46,677 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:00:46,677 - INFO - mvg.mvg - timestamp: 1571569260\n", - "2021-03-30 11:00:46,677 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:00:55,240 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:00:55,241 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:00:55,242 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:00:55,242 - INFO - mvg.mvg - timestamp: 1574337660\n", - "2021-03-30 11:00:55,242 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:01:04,631 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:01:04,631 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:01:04,632 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:01:04,633 - INFO - mvg.mvg - timestamp: 1570532460\n", - "2021-03-30 11:01:04,633 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:01:23,455 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:01:23,455 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:01:23,456 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:01:23,456 - INFO - mvg.mvg - timestamp: 1572955260\n", - "2021-03-30 11:01:23,456 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:01:32,176 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:01:32,177 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:01:32,178 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:01:32,178 - INFO - mvg.mvg - timestamp: 1572609660\n", - "2021-03-30 11:01:32,179 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:01:39,676 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:01:39,677 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:01:39,677 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:01:39,678 - INFO - mvg.mvg - timestamp: 1572264060\n", - "2021-03-30 11:01:39,678 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:01:49,050 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:01:49,051 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:01:49,051 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:01:49,051 - INFO - mvg.mvg - timestamp: 1573819260\n", - "2021-03-30 11:01:49,052 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:01:59,271 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:01:59,272 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:01:59,273 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:01:59,273 - INFO - mvg.mvg - timestamp: 1573387260\n", - "2021-03-30 11:01:59,273 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:02:06,672 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:02:06,672 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:02:06,673 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:02:06,673 - INFO - mvg.mvg - timestamp: 1570705260\n", - "2021-03-30 11:02:06,674 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:02:13,786 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:02:13,786 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:02:13,787 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:02:13,787 - INFO - mvg.mvg - timestamp: 1573560060\n", - "2021-03-30 11:02:13,788 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:02:21,583 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:02:21,583 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:02:21,584 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:02:21,585 - INFO - mvg.mvg - timestamp: 1571223660\n", - "2021-03-30 11:02:21,585 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:02:28,446 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:02:28,446 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:02:28,447 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:02:28,448 - INFO - mvg.mvg - timestamp: 1571482860\n", - "2021-03-30 11:02:28,448 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:02:38,062 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:02:38,062 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:02:38,063 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:02:38,064 - INFO - mvg.mvg - timestamp: 1571137260\n", - "2021-03-30 11:02:38,064 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:02:47,902 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:02:47,902 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:02:47,903 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:02:47,903 - INFO - mvg.mvg - timestamp: 1573646460\n", - "2021-03-30 11:02:47,904 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:02:54,557 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:02:54,557 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:02:54,558 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:02:54,559 - INFO - mvg.mvg - timestamp: 1570273260\n", - "2021-03-30 11:02:54,559 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:03:02,831 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:03:02,832 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:03:02,832 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:03:02,833 - INFO - mvg.mvg - timestamp: 1572350460\n", - "2021-03-30 11:03:02,833 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:03:10,905 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:03:10,905 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:03:10,905 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:03:10,905 - INFO - mvg.mvg - timestamp: 1571310060\n", - "2021-03-30 11:03:10,906 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:03:20,082 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:03:20,083 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:03:20,083 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:03:20,084 - INFO - mvg.mvg - timestamp: 1573473660\n", - "2021-03-30 11:03:20,084 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:03:27,633 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:03:27,633 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:03:27,633 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:03:27,634 - INFO - mvg.mvg - timestamp: 1573041660\n", - "2021-03-30 11:03:27,635 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:03:34,713 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:03:34,713 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:03:34,714 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:03:34,714 - INFO - mvg.mvg - timestamp: 1572523260\n", - "2021-03-30 11:03:34,715 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:03:41,733 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:03:41,734 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-03-30 11:03:41,734 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:03:41,735 - INFO - mvg.mvg - timestamp: 1572087660\n", - "2021-03-30 11:03:41,735 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:03:49,132 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:03:49,133 - INFO - mvg.mvg - deleting source with source id=u0005\n", - "2021-03-30 11:03:50,043 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:03:50,043 - INFO - mvg.mvg - creating source with source id=u0005\n", - "2021-03-30 11:03:50,043 - INFO - mvg.mvg - metadata: {'assetId': 'assetE', 'measPoint': 'mloc01', 'location': 'london'}\n", - "2021-03-30 11:03:51,599 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:03:51,599 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:03:51,600 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:03:51,600 - INFO - mvg.mvg - timestamp: 1570791660\n", - "2021-03-30 11:03:51,601 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:03:59,281 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:03:59,281 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:03:59,282 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:03:59,283 - INFO - mvg.mvg - timestamp: 1571655660\n", - "2021-03-30 11:03:59,283 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:04:06,467 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:04:06,468 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:04:06,468 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:04:06,469 - INFO - mvg.mvg - timestamp: 1570359660\n", - "2021-03-30 11:04:06,469 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:04:13,740 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:04:13,740 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:04:13,741 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:04:13,742 - INFO - mvg.mvg - timestamp: 1571914860\n", - "2021-03-30 11:04:13,742 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:04:20,504 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:04:20,505 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:04:20,506 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:04:20,506 - INFO - mvg.mvg - timestamp: 1572696060\n", - "2021-03-30 11:04:20,506 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:04:27,231 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:04:27,231 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:04:27,232 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:04:27,232 - INFO - mvg.mvg - timestamp: 1572868860\n", - "2021-03-30 11:04:27,233 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:04:34,664 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:04:34,664 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:04:34,665 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:04:34,666 - INFO - mvg.mvg - timestamp: 1573732860\n", - "2021-03-30 11:04:34,666 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:04:42,061 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:04:42,061 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:04:42,062 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:04:42,063 - INFO - mvg.mvg - timestamp: 1571396460\n", - "2021-03-30 11:04:42,063 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:04:49,032 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:04:49,032 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:04:49,033 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:04:49,033 - INFO - mvg.mvg - timestamp: 1570446060\n", - "2021-03-30 11:04:49,034 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:04:56,687 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:04:56,687 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:04:56,688 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:04:56,688 - INFO - mvg.mvg - timestamp: 1572177660\n", - "2021-03-30 11:04:56,689 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:05:04,367 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:05:04,368 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:05:04,368 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:05:04,369 - INFO - mvg.mvg - timestamp: 1574164860\n", - "2021-03-30 11:05:04,370 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:05:12,576 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:05:12,577 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:05:12,577 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:05:12,578 - INFO - mvg.mvg - timestamp: 1573992060\n", - "2021-03-30 11:05:12,579 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:05:20,278 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:05:20,278 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:05:20,279 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:05:20,280 - INFO - mvg.mvg - timestamp: 1574251260\n", - "2021-03-30 11:05:20,280 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:05:29,335 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:05:29,336 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:05:29,336 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:05:29,337 - INFO - mvg.mvg - timestamp: 1570878060\n", - "2021-03-30 11:05:29,337 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:05:36,365 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:05:36,365 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:05:36,366 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:05:36,367 - INFO - mvg.mvg - timestamp: 1573300860\n", - "2021-03-30 11:05:36,367 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:05:44,046 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:05:44,047 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:05:44,048 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:05:44,048 - INFO - mvg.mvg - timestamp: 1572782460\n", - "2021-03-30 11:05:44,049 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:05:50,767 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:05:50,768 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:05:50,768 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:05:50,769 - INFO - mvg.mvg - timestamp: 1570964460\n", - "2021-03-30 11:05:50,769 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:05:57,494 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:05:57,495 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:05:57,495 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:05:57,496 - INFO - mvg.mvg - timestamp: 1571050860\n", - "2021-03-30 11:05:57,496 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:06:07,411 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:06:07,412 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:06:07,413 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:06:07,413 - INFO - mvg.mvg - timestamp: 1574424060\n", - "2021-03-30 11:06:07,413 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:06:15,051 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:06:15,051 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:06:15,052 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:06:15,052 - INFO - mvg.mvg - timestamp: 1571828460\n", - "2021-03-30 11:06:15,053 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:06:21,486 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:06:21,486 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:06:21,487 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:06:21,488 - INFO - mvg.mvg - timestamp: 1571742060\n", - "2021-03-30 11:06:21,488 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:06:29,465 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:06:29,466 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:06:29,466 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:06:29,466 - INFO - mvg.mvg - timestamp: 1573905660\n", - "2021-03-30 11:06:29,467 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:06:36,071 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:06:36,071 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:06:36,072 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:06:36,073 - INFO - mvg.mvg - timestamp: 1572001260\n", - "2021-03-30 11:06:36,073 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:06:43,568 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:06:43,568 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:06:43,569 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:06:43,570 - INFO - mvg.mvg - timestamp: 1570186860\n", - "2021-03-30 11:06:43,570 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:06:50,799 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:06:50,799 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:06:50,800 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:06:50,800 - INFO - mvg.mvg - timestamp: 1572436860\n", - "2021-03-30 11:06:50,800 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:06:57,358 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:06:57,358 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:06:57,359 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:06:57,359 - INFO - mvg.mvg - timestamp: 1570618860\n", - "2021-03-30 11:06:57,360 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:07:04,584 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:07:04,585 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:07:04,585 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:07:04,586 - INFO - mvg.mvg - timestamp: 1573214460\n", - "2021-03-30 11:07:04,587 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:07:13,744 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:07:13,745 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:07:13,746 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:07:13,746 - INFO - mvg.mvg - timestamp: 1574078460\n", - "2021-03-30 11:07:13,746 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:07:20,439 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:07:20,440 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:07:20,441 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:07:20,441 - INFO - mvg.mvg - timestamp: 1573128060\n", - "2021-03-30 11:07:20,441 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:07:27,351 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:07:27,352 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:07:27,352 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:07:27,353 - INFO - mvg.mvg - timestamp: 1571569260\n", - "2021-03-30 11:07:27,354 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:07:34,721 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:07:34,722 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:07:34,722 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:07:34,723 - INFO - mvg.mvg - timestamp: 1574337660\n", - "2021-03-30 11:07:34,723 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:07:45,041 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:07:45,042 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:07:45,042 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:07:45,043 - INFO - mvg.mvg - timestamp: 1570532460\n", - "2021-03-30 11:07:45,043 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:07:53,098 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:07:53,099 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:07:53,099 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:07:53,100 - INFO - mvg.mvg - timestamp: 1572955260\n", - "2021-03-30 11:07:53,100 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:08:01,451 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:08:01,452 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:08:01,453 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:08:01,453 - INFO - mvg.mvg - timestamp: 1572609660\n", - "2021-03-30 11:08:01,454 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:08:08,811 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:08:08,812 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:08:08,812 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:08:08,812 - INFO - mvg.mvg - timestamp: 1572264060\n", - "2021-03-30 11:08:08,813 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:08:15,883 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:08:15,883 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:08:15,884 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:08:15,884 - INFO - mvg.mvg - timestamp: 1573819260\n", - "2021-03-30 11:08:15,884 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:08:23,975 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:08:23,976 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:08:23,976 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:08:23,977 - INFO - mvg.mvg - timestamp: 1573387260\n", - "2021-03-30 11:08:23,977 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:08:30,795 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:08:30,796 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:08:30,796 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:08:30,797 - INFO - mvg.mvg - timestamp: 1570705260\n", - "2021-03-30 11:08:30,797 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:08:38,728 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:08:38,729 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:08:38,730 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:08:38,730 - INFO - mvg.mvg - timestamp: 1573560060\n", - "2021-03-30 11:08:38,730 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:08:49,078 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:08:49,079 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:08:49,079 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:08:49,080 - INFO - mvg.mvg - timestamp: 1571223660\n", - "2021-03-30 11:08:49,080 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:08:56,316 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:08:56,317 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:08:56,317 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:08:56,317 - INFO - mvg.mvg - timestamp: 1571482860\n", - "2021-03-30 11:08:56,318 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:09:03,986 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:09:03,987 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:09:03,988 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:09:03,988 - INFO - mvg.mvg - timestamp: 1571137260\n", - "2021-03-30 11:09:03,989 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:09:11,607 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:09:11,608 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:09:11,608 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:09:11,609 - INFO - mvg.mvg - timestamp: 1573646460\n", - "2021-03-30 11:09:11,609 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:09:26,725 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:09:26,726 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:09:26,726 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:09:26,726 - INFO - mvg.mvg - timestamp: 1570273260\n", - "2021-03-30 11:09:26,726 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:09:35,301 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:09:35,301 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:09:35,301 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:09:35,303 - INFO - mvg.mvg - timestamp: 1572350460\n", - "2021-03-30 11:09:35,303 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:09:42,155 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:09:42,156 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:09:42,157 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:09:42,157 - INFO - mvg.mvg - timestamp: 1571310060\n", - "2021-03-30 11:09:42,157 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:09:48,872 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:09:48,872 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:09:48,873 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:09:48,874 - INFO - mvg.mvg - timestamp: 1573473660\n", - "2021-03-30 11:09:48,874 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:09:56,284 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:09:56,284 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:09:56,285 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:09:56,285 - INFO - mvg.mvg - timestamp: 1573041660\n", - "2021-03-30 11:09:56,286 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:10:03,531 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:10:03,531 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:10:03,532 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:10:03,532 - INFO - mvg.mvg - timestamp: 1572523260\n", - "2021-03-30 11:10:03,533 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:10:10,551 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:10:10,551 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-03-30 11:10:10,552 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:10:10,552 - INFO - mvg.mvg - timestamp: 1572087660\n", - "2021-03-30 11:10:10,553 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:10:17,495 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:10:17,496 - INFO - mvg.mvg - deleting source with source id=u0006\n", - "2021-03-30 11:10:17,707 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:10:17,707 - INFO - mvg.mvg - creating source with source id=u0006\n", - "2021-03-30 11:10:17,708 - INFO - mvg.mvg - metadata: {'assetId': 'assetF', 'measPoint': 'mloc01', 'location': 'london'}\n", - "2021-03-30 11:10:17,942 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:10:17,942 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:10:17,943 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:10:17,943 - INFO - mvg.mvg - timestamp: 1571655660\n", - "2021-03-30 11:10:17,943 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:10:26,327 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:10:26,328 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:10:26,328 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:10:26,329 - INFO - mvg.mvg - timestamp: 1570359660\n", - "2021-03-30 11:10:26,329 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:10:33,476 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:10:33,477 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:10:33,477 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:10:33,478 - INFO - mvg.mvg - timestamp: 1571914860\n", - "2021-03-30 11:10:33,478 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:10:40,398 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:10:40,398 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:10:40,399 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:10:40,399 - INFO - mvg.mvg - timestamp: 1572696060\n", - "2021-03-30 11:10:40,400 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:10:47,371 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:10:47,372 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:10:47,373 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:10:47,373 - INFO - mvg.mvg - timestamp: 1572868860\n", - "2021-03-30 11:10:47,374 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:10:54,059 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:10:54,059 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:10:54,060 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:10:54,061 - INFO - mvg.mvg - timestamp: 1573732860\n", - "2021-03-30 11:10:54,061 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:11:01,256 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:11:01,256 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:11:01,257 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:11:01,258 - INFO - mvg.mvg - timestamp: 1571396460\n", - "2021-03-30 11:11:01,258 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:11:07,967 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:11:07,967 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:11:07,968 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:11:07,968 - INFO - mvg.mvg - timestamp: 1572177660\n", - "2021-03-30 11:11:07,969 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:11:22,307 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:11:22,307 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:11:22,308 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:11:22,308 - INFO - mvg.mvg - timestamp: 1574164860\n", - "2021-03-30 11:11:22,309 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:11:29,675 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:11:29,676 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:11:29,676 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:11:29,677 - INFO - mvg.mvg - timestamp: 1573992060\n", - "2021-03-30 11:11:29,677 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:11:36,183 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:11:36,184 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:11:36,185 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:11:36,185 - INFO - mvg.mvg - timestamp: 1574251260\n", - "2021-03-30 11:11:36,186 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:11:43,300 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:11:43,300 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:11:43,300 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:11:43,301 - INFO - mvg.mvg - timestamp: 1573300860\n", - "2021-03-30 11:11:43,302 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:11:50,125 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:11:50,126 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:11:50,126 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:11:50,127 - INFO - mvg.mvg - timestamp: 1572782460\n", - "2021-03-30 11:11:50,128 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:11:56,793 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:11:56,794 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:11:56,795 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:11:56,795 - INFO - mvg.mvg - timestamp: 1574424060\n", - "2021-03-30 11:11:56,796 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:12:03,455 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:12:03,456 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:12:03,457 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:12:03,457 - INFO - mvg.mvg - timestamp: 1571828460\n", - "2021-03-30 11:12:03,458 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:12:10,455 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:12:10,456 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:12:10,456 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:12:10,457 - INFO - mvg.mvg - timestamp: 1571742060\n", - "2021-03-30 11:12:10,458 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:12:17,497 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:12:17,497 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:12:17,497 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:12:17,497 - INFO - mvg.mvg - timestamp: 1573905660\n", - "2021-03-30 11:12:17,498 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:12:25,357 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:12:25,358 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:12:25,358 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:12:25,359 - INFO - mvg.mvg - timestamp: 1572001260\n", - "2021-03-30 11:12:25,359 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:12:31,985 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:12:31,985 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:12:31,986 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:12:31,986 - INFO - mvg.mvg - timestamp: 1570186860\n", - "2021-03-30 11:12:31,987 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:12:38,806 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:12:38,806 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:12:38,807 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:12:38,808 - INFO - mvg.mvg - timestamp: 1572436860\n", - "2021-03-30 11:12:38,808 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:12:45,456 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:12:45,456 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:12:45,456 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:12:45,457 - INFO - mvg.mvg - timestamp: 1573214460\n", - "2021-03-30 11:12:45,457 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:12:52,739 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:12:52,739 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:12:52,740 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:12:52,740 - INFO - mvg.mvg - timestamp: 1574078460\n", - "2021-03-30 11:12:52,741 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:12:59,680 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:12:59,680 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:12:59,681 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:12:59,681 - INFO - mvg.mvg - timestamp: 1573128060\n", - "2021-03-30 11:12:59,681 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:13:06,270 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:13:06,270 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:13:06,271 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:13:06,271 - INFO - mvg.mvg - timestamp: 1571569260\n", - "2021-03-30 11:13:06,271 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:13:14,569 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:13:14,569 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:13:14,570 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:13:14,570 - INFO - mvg.mvg - timestamp: 1574337660\n", - "2021-03-30 11:13:14,571 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:13:22,249 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:13:22,249 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:13:22,250 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:13:22,251 - INFO - mvg.mvg - timestamp: 1572955260\n", - "2021-03-30 11:13:22,251 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:13:29,234 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:13:29,234 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:13:29,234 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:13:29,235 - INFO - mvg.mvg - timestamp: 1572609660\n", - "2021-03-30 11:13:29,235 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:13:35,717 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:13:35,717 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:13:35,717 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:13:35,718 - INFO - mvg.mvg - timestamp: 1572264060\n", - "2021-03-30 11:13:35,718 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:13:43,343 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:13:43,344 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:13:43,344 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:13:43,345 - INFO - mvg.mvg - timestamp: 1573819260\n", - "2021-03-30 11:13:43,345 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:13:49,831 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:13:49,832 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:13:49,832 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:13:49,833 - INFO - mvg.mvg - timestamp: 1573387260\n", - "2021-03-30 11:13:49,834 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:13:56,322 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:13:56,322 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:13:56,322 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:13:56,323 - INFO - mvg.mvg - timestamp: 1573560060\n", - "2021-03-30 11:13:56,324 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:14:03,836 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:14:03,836 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:14:03,836 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:14:03,837 - INFO - mvg.mvg - timestamp: 1571223660\n", - "2021-03-30 11:14:03,837 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:14:11,172 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:14:11,173 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:14:11,174 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:14:11,175 - INFO - mvg.mvg - timestamp: 1571482860\n", - "2021-03-30 11:14:11,175 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:14:19,398 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:14:19,398 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:14:19,398 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:14:19,398 - INFO - mvg.mvg - timestamp: 1571137260\n", - "2021-03-30 11:14:19,399 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:14:28,531 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:14:28,532 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:14:28,532 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:14:28,533 - INFO - mvg.mvg - timestamp: 1573646460\n", - "2021-03-30 11:14:28,534 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:14:36,071 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:14:36,071 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:14:36,072 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:14:36,072 - INFO - mvg.mvg - timestamp: 1570273260\n", - "2021-03-30 11:14:36,072 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:14:43,800 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:14:43,801 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:14:43,801 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:14:43,802 - INFO - mvg.mvg - timestamp: 1572350460\n", - "2021-03-30 11:14:43,802 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:14:50,667 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:14:50,668 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:14:50,668 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:14:50,668 - INFO - mvg.mvg - timestamp: 1571310060\n", - "2021-03-30 11:14:50,669 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:15:02,220 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:15:02,221 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:15:02,221 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:15:02,222 - INFO - mvg.mvg - timestamp: 1573473660\n", - "2021-03-30 11:15:02,223 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:15:09,205 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:15:09,206 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:15:09,207 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:15:09,207 - INFO - mvg.mvg - timestamp: 1573041660\n", - "2021-03-30 11:15:09,208 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:15:15,837 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:15:15,838 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:15:15,838 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:15:15,839 - INFO - mvg.mvg - timestamp: 1572523260\n", - "2021-03-30 11:15:15,839 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n", - "2021-03-30 11:15:22,531 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-30 11:15:22,531 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-03-30 11:15:22,532 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-03-30 11:15:22,533 - INFO - mvg.mvg - timestamp: 1572087660\n", - "2021-03-30 11:15:22,533 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-06-24 12:20:44,164 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:20:44,164 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:20:44,165 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:20:44,165 - INFO - mvg.mvg - timestamp: 1570791660\n", + "2021-06-24 12:20:44,166 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Deleting u0002\n", - "Source u0002 does not exist\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570791660.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571655660.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570359660.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571914860.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572696060.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572868860.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573732860.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571396460.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570446060.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572177660.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1574164860.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573992060.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1574251260.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570878060.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573300860.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572782460.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570964460.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571050860.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1574424060.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571828460.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571742060.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573905660.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572001260.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570186860.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572436860.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570618860.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573214460.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1574078460.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573128060.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571569260.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1574337660.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570532460.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572955260.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572609660.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572264060.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573819260.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573387260.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570705260.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573560060.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571223660.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571482860.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571137260.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573646460.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570273260.csv\n", - "Read 40000 samples for u0002.\n", - "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572350460.csv\n", "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571310060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570791660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:20:50,840 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:20:50,840 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:20:50,841 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:20:50,841 - INFO - mvg.mvg - timestamp: 1570273260\n", + "2021-06-24 12:20:50,841 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573473660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570273260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:20:57,055 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:20:57,056 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:20:57,057 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:20:57,057 - INFO - mvg.mvg - timestamp: 1573300860\n", + "2021-06-24 12:20:57,058 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573041660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573300860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:21:03,636 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:21:03,637 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:21:03,638 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:21:03,638 - INFO - mvg.mvg - timestamp: 1571310060\n", + "2021-06-24 12:21:03,638 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572523260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571310060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:21:10,074 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:21:10,074 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-06-24 12:21:10,075 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:21:10,075 - INFO - mvg.mvg - timestamp: 1570878060\n", + "2021-06-24 12:21:10,076 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572087660.csv\n", - "Deleting u0003\n", - "Source u0003 does not exist\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570878060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:21:16,935 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:21:16,936 - INFO - mvg.mvg - deleting source with source id=u0003\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Deleting u0003\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:21:17,151 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:21:17,151 - INFO - mvg.mvg - creating source with source id=u0003\n", + "2021-06-24 12:21:17,152 - INFO - mvg.mvg - metadata: {'assetId': 'assetC', 'measPoint': 'mloc01', 'location': 'milano'}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Source u0003 does not exist\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:21:17,959 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:21:17,959 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:21:17,960 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:21:17,961 - INFO - mvg.mvg - timestamp: 1573732860\n", + "2021-06-24 12:21:17,961 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570791660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573732860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:21:24,570 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:21:24,570 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:21:24,571 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:21:24,571 - INFO - mvg.mvg - timestamp: 1571655660\n", + "2021-06-24 12:21:24,571 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571655660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571655660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:21:31,236 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:21:31,237 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:21:31,238 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:21:31,239 - INFO - mvg.mvg - timestamp: 1572523260\n", + "2021-06-24 12:21:31,239 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570359660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572523260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:21:38,011 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:21:38,011 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:21:38,012 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:21:38,013 - INFO - mvg.mvg - timestamp: 1571569260\n", + "2021-06-24 12:21:38,013 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571914860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571569260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:21:44,847 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:21:44,848 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:21:44,848 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:21:44,848 - INFO - mvg.mvg - timestamp: 1572177660\n", + "2021-06-24 12:21:44,849 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572696060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572177660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:21:51,797 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:21:51,798 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:21:51,798 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:21:51,799 - INFO - mvg.mvg - timestamp: 1570705260\n", + "2021-06-24 12:21:51,799 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572868860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570705260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:21:59,352 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:21:59,352 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:21:59,353 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:21:59,353 - INFO - mvg.mvg - timestamp: 1572868860\n", + "2021-06-24 12:21:59,354 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573732860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572868860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:22:06,155 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:22:06,156 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:22:06,156 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:22:06,156 - INFO - mvg.mvg - timestamp: 1570964460\n", + "2021-06-24 12:22:06,157 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571396460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570964460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:22:13,031 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:22:13,032 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:22:13,033 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:22:13,033 - INFO - mvg.mvg - timestamp: 1572955260\n", + "2021-06-24 12:22:13,033 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570446060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572955260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:22:19,768 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:22:19,768 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:22:19,769 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:22:19,769 - INFO - mvg.mvg - timestamp: 1571742060\n", + "2021-06-24 12:22:19,770 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572177660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571742060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:22:26,207 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:22:26,207 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:22:26,208 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:22:26,208 - INFO - mvg.mvg - timestamp: 1571482860\n", + "2021-06-24 12:22:26,208 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1574164860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571482860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:22:33,750 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:22:33,750 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:22:33,751 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:22:33,751 - INFO - mvg.mvg - timestamp: 1574078460\n", + "2021-06-24 12:22:33,752 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573992060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1574078460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:22:40,523 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:22:40,524 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:22:40,525 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:22:40,525 - INFO - mvg.mvg - timestamp: 1570618860\n", + "2021-06-24 12:22:40,525 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1574251260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570618860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:22:47,257 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:22:47,257 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:22:47,258 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:22:47,258 - INFO - mvg.mvg - timestamp: 1572350460\n", + "2021-06-24 12:22:47,259 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570878060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572350460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:22:55,664 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:22:55,665 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:22:55,665 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:22:55,666 - INFO - mvg.mvg - timestamp: 1572264060\n", + "2021-06-24 12:22:55,666 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573300860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572264060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:23:02,251 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:23:02,251 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:23:02,252 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:23:02,252 - INFO - mvg.mvg - timestamp: 1573387260\n", + "2021-06-24 12:23:02,253 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572782460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573387260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:23:08,637 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:23:08,637 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:23:08,638 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:23:08,638 - INFO - mvg.mvg - timestamp: 1571914860\n", + "2021-06-24 12:23:08,639 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570964460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571914860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:23:15,124 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:23:15,125 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:23:15,126 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:23:15,127 - INFO - mvg.mvg - timestamp: 1570446060\n", + "2021-06-24 12:23:15,127 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571050860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570446060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:23:22,088 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:23:22,089 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:23:22,090 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:23:22,090 - INFO - mvg.mvg - timestamp: 1572087660\n", + "2021-06-24 12:23:22,090 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1574424060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572087660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:23:28,667 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:23:28,668 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:23:28,668 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:23:28,669 - INFO - mvg.mvg - timestamp: 1573905660\n", + "2021-06-24 12:23:28,669 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571828460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573905660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:23:36,276 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:23:36,276 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:23:36,277 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:23:36,277 - INFO - mvg.mvg - timestamp: 1574164860\n", + "2021-06-24 12:23:36,278 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571742060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1574164860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:23:42,700 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:23:42,701 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:23:42,701 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:23:42,702 - INFO - mvg.mvg - timestamp: 1573473660\n", + "2021-06-24 12:23:42,702 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573905660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573473660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:23:49,515 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:23:49,516 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:23:49,517 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:23:49,517 - INFO - mvg.mvg - timestamp: 1573560060\n", + "2021-06-24 12:23:49,518 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572001260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573560060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:23:56,198 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:23:56,199 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:23:56,199 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:23:56,200 - INFO - mvg.mvg - timestamp: 1570186860\n", + "2021-06-24 12:23:56,200 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570186860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570186860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:24:02,605 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:24:02,606 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:24:02,606 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:24:02,606 - INFO - mvg.mvg - timestamp: 1571223660\n", + "2021-06-24 12:24:02,607 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572436860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571223660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:24:09,669 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:24:09,669 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:24:09,669 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:24:09,670 - INFO - mvg.mvg - timestamp: 1572609660\n", + "2021-06-24 12:24:09,671 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570618860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572609660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:24:16,383 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:24:16,384 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:24:16,385 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:24:16,385 - INFO - mvg.mvg - timestamp: 1573992060\n", + "2021-06-24 12:24:16,386 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573214460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573992060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:24:23,487 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:24:23,488 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:24:23,488 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:24:23,489 - INFO - mvg.mvg - timestamp: 1574251260\n", + "2021-06-24 12:24:23,489 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1574078460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1574251260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:24:30,005 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:24:30,005 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:24:30,006 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:24:30,006 - INFO - mvg.mvg - timestamp: 1572436860\n", + "2021-06-24 12:24:30,007 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573128060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572436860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:24:36,719 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:24:36,720 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:24:36,720 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:24:36,720 - INFO - mvg.mvg - timestamp: 1573128060\n", + "2021-06-24 12:24:36,721 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571569260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573128060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:24:43,680 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:24:43,681 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:24:43,682 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:24:43,682 - INFO - mvg.mvg - timestamp: 1573041660\n", + "2021-06-24 12:24:43,682 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1574337660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573041660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:24:50,354 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:24:50,354 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:24:50,355 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:24:50,356 - INFO - mvg.mvg - timestamp: 1573214460\n", + "2021-06-24 12:24:50,356 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570532460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573214460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:24:57,134 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:24:57,135 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:24:57,136 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:24:57,136 - INFO - mvg.mvg - timestamp: 1571396460\n", + "2021-06-24 12:24:57,137 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572955260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571396460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:25:05,131 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:25:05,131 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:25:05,132 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:25:05,132 - INFO - mvg.mvg - timestamp: 1573819260\n", + "2021-06-24 12:25:05,133 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572609660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573819260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:25:12,036 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:25:12,037 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:25:12,037 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:25:12,038 - INFO - mvg.mvg - timestamp: 1570359660\n", + "2021-06-24 12:25:12,038 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572264060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570359660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:25:19,387 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:25:19,387 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:25:19,388 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:25:19,389 - INFO - mvg.mvg - timestamp: 1572001260\n", + "2021-06-24 12:25:19,389 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573819260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572001260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:25:26,125 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:25:26,125 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:25:26,126 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:25:26,126 - INFO - mvg.mvg - timestamp: 1570532460\n", + "2021-06-24 12:25:26,127 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573387260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570532460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:25:32,837 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:25:32,838 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:25:32,838 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:25:32,839 - INFO - mvg.mvg - timestamp: 1572782460\n", + "2021-06-24 12:25:32,839 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570705260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572782460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:25:39,993 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:25:39,993 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:25:39,994 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:25:39,994 - INFO - mvg.mvg - timestamp: 1574424060\n", + "2021-06-24 12:25:39,995 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573560060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1574424060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:25:46,690 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:25:46,691 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:25:46,691 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:25:46,691 - INFO - mvg.mvg - timestamp: 1571137260\n", + "2021-06-24 12:25:46,692 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571223660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571137260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:25:53,429 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:25:53,430 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:25:53,430 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:25:53,431 - INFO - mvg.mvg - timestamp: 1571828460\n", + "2021-06-24 12:25:53,431 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571482860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571828460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:26:00,173 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:26:00,174 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:26:00,175 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:26:00,175 - INFO - mvg.mvg - timestamp: 1574337660\n", + "2021-06-24 12:26:00,175 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571137260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1574337660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:26:06,743 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:26:06,743 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:26:06,743 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:26:06,744 - INFO - mvg.mvg - timestamp: 1572696060\n", + "2021-06-24 12:26:06,744 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573646460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572696060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:26:13,265 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:26:13,265 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:26:13,266 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:26:13,267 - INFO - mvg.mvg - timestamp: 1573646460\n", + "2021-06-24 12:26:13,267 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570273260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573646460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:26:21,646 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:26:21,647 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:26:21,648 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:26:21,648 - INFO - mvg.mvg - timestamp: 1571050860\n", + "2021-06-24 12:26:21,648 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572350460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571050860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:26:28,098 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:26:28,099 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:26:28,100 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:26:28,100 - INFO - mvg.mvg - timestamp: 1570791660\n", + "2021-06-24 12:26:28,100 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571310060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570791660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:26:36,551 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:26:36,552 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:26:36,552 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:26:36,552 - INFO - mvg.mvg - timestamp: 1570273260\n", + "2021-06-24 12:26:36,553 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573473660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570273260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:26:43,116 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:26:43,116 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:26:43,117 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:26:43,117 - INFO - mvg.mvg - timestamp: 1573300860\n", + "2021-06-24 12:26:43,117 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573041660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573300860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:26:50,887 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:26:50,887 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:26:50,887 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:26:50,888 - INFO - mvg.mvg - timestamp: 1571310060\n", + "2021-06-24 12:26:50,888 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572523260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571310060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:26:57,368 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:26:57,369 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-06-24 12:26:57,369 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:26:57,370 - INFO - mvg.mvg - timestamp: 1570878060\n", + "2021-06-24 12:26:57,370 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572087660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570878060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:27:04,941 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:27:04,942 - INFO - mvg.mvg - deleting source with source id=u0004\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Deleting u0004\n", - "Source u0004 does not exist\n", + "Source u0004 does not exist\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:27:05,153 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:27:05,154 - INFO - mvg.mvg - creating source with source id=u0004\n", + "2021-06-24 12:27:05,154 - INFO - mvg.mvg - metadata: {'assetId': 'assetD', 'measPoint': 'mloc01', 'location': 'milano'}\n", + "2021-06-24 12:27:05,385 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:27:05,386 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:27:05,387 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:27:05,387 - INFO - mvg.mvg - timestamp: 1573732860\n", + "2021-06-24 12:27:05,388 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570791660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573732860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:27:12,025 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:27:12,026 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:27:12,026 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:27:12,027 - INFO - mvg.mvg - timestamp: 1571655660\n", + "2021-06-24 12:27:12,027 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571655660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571655660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:27:18,764 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:27:18,764 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:27:18,765 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:27:18,765 - INFO - mvg.mvg - timestamp: 1572523260\n", + "2021-06-24 12:27:18,765 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570359660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572523260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:27:26,610 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:27:26,611 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:27:26,612 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:27:26,612 - INFO - mvg.mvg - timestamp: 1571569260\n", + "2021-06-24 12:27:26,612 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571914860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571569260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:27:33,909 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:27:33,910 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:27:33,910 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:27:33,911 - INFO - mvg.mvg - timestamp: 1572177660\n", + "2021-06-24 12:27:33,911 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572696060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572177660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:27:40,370 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:27:40,372 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:27:40,372 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:27:40,372 - INFO - mvg.mvg - timestamp: 1570705260\n", + "2021-06-24 12:27:40,372 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572868860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570705260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:27:46,681 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:27:46,682 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:27:46,682 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:27:46,683 - INFO - mvg.mvg - timestamp: 1572868860\n", + "2021-06-24 12:27:46,683 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573732860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572868860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:27:54,324 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:27:54,324 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:27:54,325 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:27:54,325 - INFO - mvg.mvg - timestamp: 1570964460\n", + "2021-06-24 12:27:54,326 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571396460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570964460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:28:01,311 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:28:01,312 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:28:01,312 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:28:01,313 - INFO - mvg.mvg - timestamp: 1572955260\n", + "2021-06-24 12:28:01,313 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570446060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572955260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:28:07,916 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:28:07,917 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:28:07,918 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:28:07,918 - INFO - mvg.mvg - timestamp: 1571742060\n", + "2021-06-24 12:28:07,918 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572177660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571742060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:28:14,726 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:28:14,727 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:28:14,727 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:28:14,728 - INFO - mvg.mvg - timestamp: 1571482860\n", + "2021-06-24 12:28:14,728 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1574164860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571482860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:28:22,180 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:28:22,181 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:28:22,181 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:28:22,182 - INFO - mvg.mvg - timestamp: 1574078460\n", + "2021-06-24 12:28:22,183 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573992060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1574078460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:28:28,591 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:28:28,592 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:28:28,593 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:28:28,593 - INFO - mvg.mvg - timestamp: 1570618860\n", + "2021-06-24 12:28:28,594 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1574251260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570618860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:28:35,121 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:28:35,122 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:28:35,122 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:28:35,123 - INFO - mvg.mvg - timestamp: 1572350460\n", + "2021-06-24 12:28:35,123 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570878060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572350460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:28:41,800 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:28:41,800 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:28:41,801 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:28:41,801 - INFO - mvg.mvg - timestamp: 1572264060\n", + "2021-06-24 12:28:41,802 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573300860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572264060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:28:48,335 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:28:48,336 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:28:48,336 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:28:48,337 - INFO - mvg.mvg - timestamp: 1573387260\n", + "2021-06-24 12:28:48,337 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572782460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573387260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:28:55,103 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:28:55,104 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:28:55,105 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:28:55,105 - INFO - mvg.mvg - timestamp: 1571914860\n", + "2021-06-24 12:28:55,105 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570964460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571914860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:29:01,898 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:29:01,899 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:29:01,899 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:29:01,900 - INFO - mvg.mvg - timestamp: 1570446060\n", + "2021-06-24 12:29:01,900 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571050860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570446060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:29:08,324 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:29:08,325 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:29:08,325 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:29:08,326 - INFO - mvg.mvg - timestamp: 1572087660\n", + "2021-06-24 12:29:08,326 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1574424060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572087660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:29:15,505 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:29:15,505 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:29:15,506 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:29:15,506 - INFO - mvg.mvg - timestamp: 1573905660\n", + "2021-06-24 12:29:15,507 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571828460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573905660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:29:22,221 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:29:22,221 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:29:22,222 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:29:22,222 - INFO - mvg.mvg - timestamp: 1574164860\n", + "2021-06-24 12:29:22,223 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571742060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1574164860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:29:29,681 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:29:29,681 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:29:29,681 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:29:29,681 - INFO - mvg.mvg - timestamp: 1573473660\n", + "2021-06-24 12:29:29,682 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573905660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573473660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:29:36,575 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:29:36,575 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:29:36,575 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:29:36,576 - INFO - mvg.mvg - timestamp: 1573560060\n", + "2021-06-24 12:29:36,576 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572001260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573560060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:29:43,999 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:29:44,000 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:29:44,000 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:29:44,001 - INFO - mvg.mvg - timestamp: 1570186860\n", + "2021-06-24 12:29:44,002 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570186860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570186860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:29:50,648 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:29:50,648 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:29:50,649 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:29:50,650 - INFO - mvg.mvg - timestamp: 1571223660\n", + "2021-06-24 12:29:50,650 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572436860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571223660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:29:57,389 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:29:57,390 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:29:57,390 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:29:57,390 - INFO - mvg.mvg - timestamp: 1572609660\n", + "2021-06-24 12:29:57,391 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570618860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572609660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:30:05,117 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:30:05,118 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:30:05,118 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:30:05,119 - INFO - mvg.mvg - timestamp: 1573992060\n", + "2021-06-24 12:30:05,120 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573214460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573992060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:30:12,147 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:30:12,147 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:30:12,148 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:30:12,148 - INFO - mvg.mvg - timestamp: 1574251260\n", + "2021-06-24 12:30:12,148 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1574078460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1574251260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:30:19,347 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:30:19,347 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:30:19,348 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:30:19,348 - INFO - mvg.mvg - timestamp: 1572436860\n", + "2021-06-24 12:30:19,349 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573128060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572436860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:30:26,111 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:30:26,111 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:30:26,111 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:30:26,112 - INFO - mvg.mvg - timestamp: 1573128060\n", + "2021-06-24 12:30:26,112 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571569260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573128060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:30:33,721 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:30:33,721 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:30:33,722 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:30:33,722 - INFO - mvg.mvg - timestamp: 1573041660\n", + "2021-06-24 12:30:33,722 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1574337660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573041660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:30:40,347 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:30:40,348 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:30:40,348 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:30:40,349 - INFO - mvg.mvg - timestamp: 1573214460\n", + "2021-06-24 12:30:40,349 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570532460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573214460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:30:47,158 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:30:47,159 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:30:47,159 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:30:47,160 - INFO - mvg.mvg - timestamp: 1571396460\n", + "2021-06-24 12:30:47,160 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572955260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571396460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:30:54,242 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:30:54,243 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:30:54,243 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:30:54,244 - INFO - mvg.mvg - timestamp: 1573819260\n", + "2021-06-24 12:30:54,244 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572609660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573819260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:31:01,049 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:31:01,050 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:31:01,050 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:31:01,051 - INFO - mvg.mvg - timestamp: 1570359660\n", + "2021-06-24 12:31:01,051 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572264060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570359660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:31:09,467 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:31:09,468 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:31:09,468 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:31:09,468 - INFO - mvg.mvg - timestamp: 1572001260\n", + "2021-06-24 12:31:09,469 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573819260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572001260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:31:16,963 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:31:16,963 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:31:16,964 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:31:16,964 - INFO - mvg.mvg - timestamp: 1570532460\n", + "2021-06-24 12:31:16,965 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573387260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570532460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:31:23,728 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:31:23,729 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:31:23,729 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:31:23,730 - INFO - mvg.mvg - timestamp: 1572782460\n", + "2021-06-24 12:31:23,730 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570705260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572782460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:31:30,871 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:31:30,872 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:31:30,873 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:31:30,873 - INFO - mvg.mvg - timestamp: 1574424060\n", + "2021-06-24 12:31:30,874 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573560060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1574424060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:31:37,674 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:31:37,675 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:31:37,675 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:31:37,676 - INFO - mvg.mvg - timestamp: 1571137260\n", + "2021-06-24 12:31:37,676 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571223660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571137260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:31:44,356 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:31:44,356 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:31:44,357 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:31:44,358 - INFO - mvg.mvg - timestamp: 1571828460\n", + "2021-06-24 12:31:44,358 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571482860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571828460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:31:51,802 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:31:51,803 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:31:51,803 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:31:51,804 - INFO - mvg.mvg - timestamp: 1574337660\n", + "2021-06-24 12:31:51,804 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571137260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1574337660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:31:58,464 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:31:58,464 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:31:58,465 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:31:58,466 - INFO - mvg.mvg - timestamp: 1572696060\n", + "2021-06-24 12:31:58,466 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573646460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572696060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:32:05,096 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:32:05,096 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:32:05,097 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:32:05,097 - INFO - mvg.mvg - timestamp: 1573646460\n", + "2021-06-24 12:32:05,098 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570273260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573646460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:32:11,512 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:32:11,512 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:32:11,513 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:32:11,513 - INFO - mvg.mvg - timestamp: 1571050860\n", + "2021-06-24 12:32:11,514 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572350460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571050860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:32:18,842 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:32:18,842 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:32:18,843 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:32:18,843 - INFO - mvg.mvg - timestamp: 1570791660\n", + "2021-06-24 12:32:18,844 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571310060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570791660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:32:25,611 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:32:25,612 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:32:25,613 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:32:25,613 - INFO - mvg.mvg - timestamp: 1570273260\n", + "2021-06-24 12:32:25,613 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573473660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570273260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:32:32,215 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:32:32,215 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:32:32,216 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:32:32,216 - INFO - mvg.mvg - timestamp: 1573300860\n", + "2021-06-24 12:32:32,217 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573041660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573300860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:32:39,051 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:32:39,051 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:32:39,052 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:32:39,052 - INFO - mvg.mvg - timestamp: 1571310060\n", + "2021-06-24 12:32:39,053 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572523260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571310060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:32:46,440 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:32:46,441 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-06-24 12:32:46,441 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:32:46,442 - INFO - mvg.mvg - timestamp: 1570878060\n", + "2021-06-24 12:32:46,442 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572087660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570878060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:32:52,880 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:32:52,881 - INFO - mvg.mvg - deleting source with source id=u0005\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Deleting u0005\n", - "Source u0005 does not exist\n", + "Source u0005 does not exist\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:32:53,090 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:32:53,091 - INFO - mvg.mvg - creating source with source id=u0005\n", + "2021-06-24 12:32:53,091 - INFO - mvg.mvg - metadata: {'assetId': 'assetE', 'measPoint': 'mloc01', 'location': 'london'}\n", + "2021-06-24 12:32:53,318 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:32:53,319 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:32:53,319 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:32:53,320 - INFO - mvg.mvg - timestamp: 1573732860\n", + "2021-06-24 12:32:53,320 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570791660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573732860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:33:00,067 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:33:00,067 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:33:00,068 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:33:00,068 - INFO - mvg.mvg - timestamp: 1571655660\n", + "2021-06-24 12:33:00,069 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571655660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571655660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:33:06,763 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:33:06,764 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:33:06,765 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:33:06,765 - INFO - mvg.mvg - timestamp: 1572523260\n", + "2021-06-24 12:33:06,765 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570359660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572523260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:33:15,005 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:33:15,005 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:33:15,006 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:33:15,007 - INFO - mvg.mvg - timestamp: 1571569260\n", + "2021-06-24 12:33:15,007 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571914860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571569260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:33:21,450 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:33:21,451 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:33:21,452 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:33:21,452 - INFO - mvg.mvg - timestamp: 1572177660\n", + "2021-06-24 12:33:21,453 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572696060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572177660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:33:28,169 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:33:28,170 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:33:28,170 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:33:28,171 - INFO - mvg.mvg - timestamp: 1570705260\n", + "2021-06-24 12:33:28,171 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572868860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570705260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:33:35,045 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:33:35,045 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:33:35,046 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:33:35,046 - INFO - mvg.mvg - timestamp: 1572868860\n", + "2021-06-24 12:33:35,047 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573732860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572868860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:33:41,782 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:33:41,782 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:33:41,783 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:33:41,783 - INFO - mvg.mvg - timestamp: 1570964460\n", + "2021-06-24 12:33:41,784 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571396460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570964460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:33:49,492 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:33:49,493 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:33:49,494 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:33:49,494 - INFO - mvg.mvg - timestamp: 1572955260\n", + "2021-06-24 12:33:49,495 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570446060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572955260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:33:56,866 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:33:56,867 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:33:56,867 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:33:56,867 - INFO - mvg.mvg - timestamp: 1571742060\n", + "2021-06-24 12:33:56,868 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572177660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571742060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:34:03,530 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:34:03,531 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:34:03,531 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:34:03,532 - INFO - mvg.mvg - timestamp: 1571482860\n", + "2021-06-24 12:34:03,532 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1574164860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571482860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:34:10,179 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:34:10,180 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:34:10,180 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:34:10,181 - INFO - mvg.mvg - timestamp: 1574078460\n", + "2021-06-24 12:34:10,182 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573992060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1574078460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:34:18,593 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:34:18,593 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:34:18,594 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:34:18,594 - INFO - mvg.mvg - timestamp: 1570618860\n", + "2021-06-24 12:34:18,595 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1574251260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570618860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:34:25,260 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:34:25,260 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:34:25,261 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:34:25,262 - INFO - mvg.mvg - timestamp: 1572350460\n", + "2021-06-24 12:34:25,262 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570878060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572350460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:34:31,906 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:34:31,906 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:34:31,906 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:34:31,907 - INFO - mvg.mvg - timestamp: 1572264060\n", + "2021-06-24 12:34:31,907 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573300860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572264060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:34:39,615 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:34:39,615 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:34:39,615 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:34:39,616 - INFO - mvg.mvg - timestamp: 1573387260\n", + "2021-06-24 12:34:39,617 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572782460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573387260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:34:46,360 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:34:46,361 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:34:46,362 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:34:46,362 - INFO - mvg.mvg - timestamp: 1571914860\n", + "2021-06-24 12:34:46,362 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570964460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571914860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:34:53,317 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:34:53,317 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:34:53,318 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:34:53,318 - INFO - mvg.mvg - timestamp: 1570446060\n", + "2021-06-24 12:34:53,319 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571050860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570446060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:34:59,736 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:34:59,736 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:34:59,737 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:34:59,737 - INFO - mvg.mvg - timestamp: 1572087660\n", + "2021-06-24 12:34:59,737 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1574424060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572087660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:35:07,394 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:35:07,395 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:35:07,396 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:35:07,396 - INFO - mvg.mvg - timestamp: 1573905660\n", + "2021-06-24 12:35:07,397 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571828460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573905660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:35:14,314 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:35:14,315 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:35:14,315 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:35:14,316 - INFO - mvg.mvg - timestamp: 1574164860\n", + "2021-06-24 12:35:14,317 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571742060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1574164860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:35:21,181 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:35:21,182 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:35:21,182 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:35:21,183 - INFO - mvg.mvg - timestamp: 1573473660\n", + "2021-06-24 12:35:21,183 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573905660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573473660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:35:29,311 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:35:29,312 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:35:29,313 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:35:29,313 - INFO - mvg.mvg - timestamp: 1573560060\n", + "2021-06-24 12:35:29,313 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572001260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573560060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:35:36,001 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:35:36,001 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:35:36,003 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:35:36,003 - INFO - mvg.mvg - timestamp: 1570186860\n", + "2021-06-24 12:35:36,003 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570186860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570186860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:35:42,721 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:35:42,721 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:35:42,721 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:35:42,721 - INFO - mvg.mvg - timestamp: 1571223660\n", + "2021-06-24 12:35:42,722 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572436860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571223660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:35:49,562 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:35:49,563 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:35:49,564 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:35:49,564 - INFO - mvg.mvg - timestamp: 1572609660\n", + "2021-06-24 12:35:49,565 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570618860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572609660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:35:56,971 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:35:56,971 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:35:56,972 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:35:56,972 - INFO - mvg.mvg - timestamp: 1573992060\n", + "2021-06-24 12:35:56,973 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573214460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573992060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:36:03,644 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:36:03,645 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:36:03,645 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:36:03,645 - INFO - mvg.mvg - timestamp: 1574251260\n", + "2021-06-24 12:36:03,646 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1574078460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1574251260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:36:10,920 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:36:10,921 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:36:10,921 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:36:10,922 - INFO - mvg.mvg - timestamp: 1572436860\n", + "2021-06-24 12:36:10,922 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573128060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572436860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:36:17,503 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:36:17,504 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:36:17,505 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:36:17,505 - INFO - mvg.mvg - timestamp: 1573128060\n", + "2021-06-24 12:36:17,505 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571569260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573128060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:36:24,355 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:36:24,355 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:36:24,356 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:36:24,356 - INFO - mvg.mvg - timestamp: 1573041660\n", + "2021-06-24 12:36:24,356 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1574337660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573041660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:36:30,712 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:36:30,712 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:36:30,713 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:36:30,713 - INFO - mvg.mvg - timestamp: 1573214460\n", + "2021-06-24 12:36:30,714 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570532460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573214460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:36:37,526 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:36:37,527 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:36:37,528 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:36:37,528 - INFO - mvg.mvg - timestamp: 1571396460\n", + "2021-06-24 12:36:37,529 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572955260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571396460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:36:44,328 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:36:44,329 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:36:44,329 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:36:44,330 - INFO - mvg.mvg - timestamp: 1573819260\n", + "2021-06-24 12:36:44,330 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572609660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573819260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:36:51,188 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:36:51,189 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:36:51,189 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:36:51,190 - INFO - mvg.mvg - timestamp: 1570359660\n", + "2021-06-24 12:36:51,190 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572264060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570359660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:36:57,859 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:36:57,860 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:36:57,860 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:36:57,861 - INFO - mvg.mvg - timestamp: 1572001260\n", + "2021-06-24 12:36:57,861 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573819260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572001260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:37:05,371 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:37:05,371 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:37:05,372 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:37:05,372 - INFO - mvg.mvg - timestamp: 1570532460\n", + "2021-06-24 12:37:05,372 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573387260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570532460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:37:11,874 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:37:11,874 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:37:11,875 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:37:11,876 - INFO - mvg.mvg - timestamp: 1572782460\n", + "2021-06-24 12:37:11,876 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570705260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572782460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:37:18,718 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:37:18,719 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:37:18,719 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:37:18,719 - INFO - mvg.mvg - timestamp: 1574424060\n", + "2021-06-24 12:37:18,720 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573560060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1574424060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:37:25,229 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:37:25,229 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:37:25,230 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:37:25,230 - INFO - mvg.mvg - timestamp: 1571137260\n", + "2021-06-24 12:37:25,230 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571223660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571137260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:37:33,125 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:37:33,126 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:37:33,127 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:37:33,127 - INFO - mvg.mvg - timestamp: 1571828460\n", + "2021-06-24 12:37:33,127 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571482860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571828460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:37:40,051 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:37:40,052 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:37:40,053 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:37:40,053 - INFO - mvg.mvg - timestamp: 1574337660\n", + "2021-06-24 12:37:40,054 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571137260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1574337660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:37:47,883 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:37:47,883 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:37:47,884 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:37:47,884 - INFO - mvg.mvg - timestamp: 1572696060\n", + "2021-06-24 12:37:47,885 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573646460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572696060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:37:54,413 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:37:54,413 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:37:54,413 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:37:54,414 - INFO - mvg.mvg - timestamp: 1573646460\n", + "2021-06-24 12:37:54,414 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570273260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573646460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:38:02,025 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:38:02,025 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:38:02,026 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:38:02,026 - INFO - mvg.mvg - timestamp: 1571050860\n", + "2021-06-24 12:38:02,026 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572350460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571050860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:38:08,483 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:38:08,483 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:38:08,484 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:38:08,484 - INFO - mvg.mvg - timestamp: 1570791660\n", + "2021-06-24 12:38:08,485 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571310060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570791660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:38:15,066 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:38:15,066 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:38:15,067 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:38:15,068 - INFO - mvg.mvg - timestamp: 1570273260\n", + "2021-06-24 12:38:15,068 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573473660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570273260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:38:21,816 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:38:21,816 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:38:21,817 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:38:21,817 - INFO - mvg.mvg - timestamp: 1573300860\n", + "2021-06-24 12:38:21,817 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573041660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573300860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:38:28,190 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:38:28,191 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:38:28,191 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:38:28,192 - INFO - mvg.mvg - timestamp: 1571310060\n", + "2021-06-24 12:38:28,193 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572523260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571310060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:38:35,973 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:38:35,974 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-06-24 12:38:35,974 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:38:35,975 - INFO - mvg.mvg - timestamp: 1570878060\n", + "2021-06-24 12:38:35,975 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572087660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570878060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:38:42,567 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:38:42,567 - INFO - mvg.mvg - deleting source with source id=u0006\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Deleting u0006\n", - "Source u0006 does not exist\n", + "Source u0006 does not exist\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:38:42,782 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:38:42,782 - INFO - mvg.mvg - creating source with source id=u0006\n", + "2021-06-24 12:38:42,783 - INFO - mvg.mvg - metadata: {'assetId': 'assetF', 'measPoint': 'mloc01', 'location': 'london'}\n", + "2021-06-24 12:38:43,014 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:38:43,014 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:38:43,015 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:38:43,015 - INFO - mvg.mvg - timestamp: 1573732860\n", + "2021-06-24 12:38:43,016 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571655660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573732860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:38:49,589 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:38:49,590 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:38:49,591 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:38:49,591 - INFO - mvg.mvg - timestamp: 1571655660\n", + "2021-06-24 12:38:49,592 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1570359660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571655660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:38:57,635 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:38:57,636 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:38:57,637 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:38:57,637 - INFO - mvg.mvg - timestamp: 1572523260\n", + "2021-06-24 12:38:57,638 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571914860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572523260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:39:04,276 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:39:04,277 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:39:04,278 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:39:04,278 - INFO - mvg.mvg - timestamp: 1571569260\n", + "2021-06-24 12:39:04,278 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572696060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571569260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:39:11,274 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:39:11,274 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:39:11,274 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:39:11,275 - INFO - mvg.mvg - timestamp: 1572177660\n", + "2021-06-24 12:39:11,275 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572868860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572177660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:39:18,119 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:39:18,119 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:39:18,119 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:39:18,120 - INFO - mvg.mvg - timestamp: 1572868860\n", + "2021-06-24 12:39:18,120 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573732860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572868860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:39:25,566 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:39:25,567 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:39:25,567 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:39:25,568 - INFO - mvg.mvg - timestamp: 1572955260\n", + "2021-06-24 12:39:25,569 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571396460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572955260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:39:32,980 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:39:32,981 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:39:32,982 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:39:32,983 - INFO - mvg.mvg - timestamp: 1574078460\n", + "2021-06-24 12:39:32,983 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572177660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1574078460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:39:39,700 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:39:39,701 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:39:39,702 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:39:39,702 - INFO - mvg.mvg - timestamp: 1571742060\n", + "2021-06-24 12:39:39,703 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1574164860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571742060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:39:46,859 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:39:46,859 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:39:46,860 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:39:46,860 - INFO - mvg.mvg - timestamp: 1571482860\n", + "2021-06-24 12:39:46,861 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573992060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571482860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:39:53,516 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:39:53,517 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:39:53,517 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:39:53,518 - INFO - mvg.mvg - timestamp: 1572350460\n", + "2021-06-24 12:39:53,518 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1574251260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572350460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:40:01,179 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:40:01,179 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:40:01,179 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:40:01,180 - INFO - mvg.mvg - timestamp: 1572264060\n", + "2021-06-24 12:40:01,180 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573300860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572264060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:40:08,073 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:40:08,073 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:40:08,073 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:40:08,074 - INFO - mvg.mvg - timestamp: 1573387260\n", + "2021-06-24 12:40:08,074 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572782460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573387260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:40:15,443 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:40:15,444 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:40:15,445 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:40:15,445 - INFO - mvg.mvg - timestamp: 1571914860\n", + "2021-06-24 12:40:15,446 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1574424060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571914860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:40:23,134 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:40:23,135 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:40:23,135 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:40:23,136 - INFO - mvg.mvg - timestamp: 1572087660\n", + "2021-06-24 12:40:23,136 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571828460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572087660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:40:30,000 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:40:30,001 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:40:30,001 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:40:30,002 - INFO - mvg.mvg - timestamp: 1573905660\n", + "2021-06-24 12:40:30,002 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571742060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573905660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:40:37,166 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:40:37,167 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:40:37,167 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:40:37,168 - INFO - mvg.mvg - timestamp: 1574164860\n", + "2021-06-24 12:40:37,168 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573905660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1574164860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:40:47,341 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:40:47,342 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:40:47,342 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:40:47,343 - INFO - mvg.mvg - timestamp: 1573473660\n", + "2021-06-24 12:40:47,343 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572001260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573473660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:40:54,497 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:40:54,497 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:40:54,497 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:40:54,498 - INFO - mvg.mvg - timestamp: 1573560060\n", + "2021-06-24 12:40:54,498 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1570186860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573560060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:41:01,085 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:41:01,085 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:41:01,085 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:41:01,086 - INFO - mvg.mvg - timestamp: 1570186860\n", + "2021-06-24 12:41:01,086 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572436860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1570186860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:41:08,242 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:41:08,243 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:41:08,244 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:41:08,244 - INFO - mvg.mvg - timestamp: 1571223660\n", + "2021-06-24 12:41:08,244 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573214460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571223660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:41:15,138 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:41:15,139 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:41:15,140 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:41:15,140 - INFO - mvg.mvg - timestamp: 1572609660\n", + "2021-06-24 12:41:15,141 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1574078460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572609660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:41:22,009 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:41:22,010 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:41:22,010 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:41:22,011 - INFO - mvg.mvg - timestamp: 1573992060\n", + "2021-06-24 12:41:22,011 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573128060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573992060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:41:28,540 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:41:28,540 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:41:28,541 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:41:28,541 - INFO - mvg.mvg - timestamp: 1574251260\n", + "2021-06-24 12:41:28,542 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571569260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1574251260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:41:35,217 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:41:35,217 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:41:35,218 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:41:35,218 - INFO - mvg.mvg - timestamp: 1572436860\n", + "2021-06-24 12:41:35,218 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1574337660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572436860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:41:42,222 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:41:42,223 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:41:42,223 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:41:42,224 - INFO - mvg.mvg - timestamp: 1573128060\n", + "2021-06-24 12:41:42,224 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572955260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573128060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:41:48,821 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:41:48,821 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:41:48,821 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:41:48,822 - INFO - mvg.mvg - timestamp: 1573041660\n", + "2021-06-24 12:41:48,823 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572609660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573041660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:41:55,642 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:41:55,643 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:41:55,644 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:41:55,644 - INFO - mvg.mvg - timestamp: 1573214460\n", + "2021-06-24 12:41:55,644 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572264060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573214460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:42:02,190 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:42:02,190 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:42:02,191 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:42:02,191 - INFO - mvg.mvg - timestamp: 1571396460\n", + "2021-06-24 12:42:02,192 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573819260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571396460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:42:09,935 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:42:09,936 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:42:09,936 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:42:09,937 - INFO - mvg.mvg - timestamp: 1573819260\n", + "2021-06-24 12:42:09,938 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573387260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573819260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:42:16,652 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:42:16,653 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:42:16,653 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:42:16,654 - INFO - mvg.mvg - timestamp: 1570359660\n", + "2021-06-24 12:42:16,654 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573560060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1570359660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:42:23,320 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:42:23,320 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:42:23,320 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:42:23,320 - INFO - mvg.mvg - timestamp: 1572001260\n", + "2021-06-24 12:42:23,321 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571223660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572001260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:42:30,811 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:42:30,812 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:42:30,813 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:42:30,813 - INFO - mvg.mvg - timestamp: 1572782460\n", + "2021-06-24 12:42:30,813 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571482860.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572782460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:42:37,514 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:42:37,515 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:42:37,516 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:42:37,516 - INFO - mvg.mvg - timestamp: 1574424060\n", + "2021-06-24 12:42:37,517 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571137260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1574424060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:42:45,832 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:42:45,833 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:42:45,833 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:42:45,834 - INFO - mvg.mvg - timestamp: 1571137260\n", + "2021-06-24 12:42:45,834 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573646460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571137260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:42:54,711 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:42:54,712 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:42:54,713 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:42:54,713 - INFO - mvg.mvg - timestamp: 1571828460\n", + "2021-06-24 12:42:54,713 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1570273260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571828460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:43:02,697 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:43:02,698 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:43:02,698 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:43:02,699 - INFO - mvg.mvg - timestamp: 1574337660\n", + "2021-06-24 12:43:02,699 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572350460.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1574337660.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:43:09,937 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:43:09,937 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:43:09,937 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:43:09,938 - INFO - mvg.mvg - timestamp: 1572696060\n", + "2021-06-24 12:43:09,938 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571310060.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572696060.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:43:16,958 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:43:16,958 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:43:16,959 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:43:16,959 - INFO - mvg.mvg - timestamp: 1573646460\n", + "2021-06-24 12:43:16,959 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573473660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573646460.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:43:23,573 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:43:23,573 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:43:23,574 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:43:23,574 - INFO - mvg.mvg - timestamp: 1570273260\n", + "2021-06-24 12:43:23,575 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573041660.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1570273260.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:43:31,407 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:43:31,407 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:43:31,408 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:43:31,408 - INFO - mvg.mvg - timestamp: 1573300860\n", + "2021-06-24 12:43:31,409 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572523260.csv\n", + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573300860.csv\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-06-24 12:43:39,010 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-06-24 12:43:39,010 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-06-24 12:43:39,011 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-06-24 12:43:39,011 - INFO - mvg.mvg - timestamp: 1571310060\n", + "2021-06-24 12:43:39,012 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572087660.csv\n" + "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571310060.csv\n" ] } ], @@ -3501,11 +6782,20 @@ " except HTTPError as exc:\n", " print(exc)\n", "\n", - "\n", - "\n", - "\n", "\n" ] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } } ], "metadata": { @@ -3526,15 +6816,6 @@ "pygments_lexer": "ipython3", "version": "3.8.2" }, - "pycharm": { - "stem_cell": { - "cell_type": "raw", - "metadata": { - "collapsed": false - }, - "source": [] - } - }, "toc": { "base_numbering": 1, "nav_menu": {}, @@ -3585,4 +6866,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/docs/source/content/features/ModeId.md b/docs/source/content/features/ModeId.md index d37abb43..7b6f2aa3 100644 --- a/docs/source/content/features/ModeId.md +++ b/docs/source/content/features/ModeId.md @@ -91,14 +91,30 @@ result, the optimizer can be disabled and a specific number of modes ## Structure of the Results The result returned by the analysis call will be a dictionary -containing three lists: the _timestamps_, the _label_ (aka operational -modes) and _uncertain_ where a logical value of `True` indicates an +containing four lists: the _timestamps_, the _label_ (aka operational +modes), the _mode_probability_ and _uncertain_ where a logical value of `True` indicates an uncertain assignment to the mode, which could be an indication of an anomaly. ``` { 'timestamps': [... list of timestamps ...], 'label': [... list labels (=mode numbers)...], - 'uncertain': [... list of booleans indicating uncertain modes] + 'uncertain': [... list of booleans indicating uncertain modes...] + 'mode_probability': [... list mode probabilities for each timestamps...] +} +``` + +In addition, the results returned by the analysis include an additional dictionary with the "Emerging Modes". +"Emerging Modes" is an additional result output that describes the first appearance of each mode. +The dictionary contains four lists: the _modes_, the _emerging_time_ corresponding to the epoch of first appearance of +each mode , the _max_prob_time_ corresponding to the epoch with the largest mode probability and +_max_probability_ for each mode. + +``` +{ + 'modes': [... list of modes ...], + 'emerging_time': [... list timestamps for first appearance of each mode...], + 'max_prob_time': [... list timestamps with the maximum mode probability...] + 'max_probability': [... list with the maximum mode probabilities...] } ``` diff --git a/docs/source/content/features/RMS.md b/docs/source/content/features/RMS.md index f20adb12..441403b8 100644 --- a/docs/source/content/features/RMS.md +++ b/docs/source/content/features/RMS.md @@ -45,11 +45,14 @@ feature ("RMS"). ## Structure of the Results The result returned by the analysis call will be a dictionary -containing three lists +containing five lists: ``` { 'timestamps': [... list of timestamps ...], 'rms': [... list of RMS values ...] + 'rms_dc': [... list of RMS values without DC component ...], + 'dc': [... list of DC component values ...] + 'utilization': [... list with timestamp utilization ...], } ``` From 46a2ff6e721835ed509cec240ca7823b7fd61508 Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Tue, 29 Jun 2021 19:16:40 +0200 Subject: [PATCH 03/90] bump version to 0.6.2 (#35) --- mvg/mvg.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 8e367b6e..279d64ba 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -50,10 +50,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.6.1") - # worked on 0.1.6 - # worked on 0.1.10 - # failed on 0.1.11 + self.mvg_version = self.parse_version("v0.6.2") self.tested_api_version = self.parse_version("v0.1.12") # Errors to ignore From 98bb1f7b255fa96670f34c56dcc33570231632e6 Mon Sep 17 00:00:00 2001 From: Fredrik Wartenberg Date: Fri, 9 Jul 2021 08:02:50 +0200 Subject: [PATCH 04/90] =?UTF-8?q?Consistent=20usage=20of=20accessor=20func?= =?UTF-8?q?tion,=20more=20TC=20for=20analysis=20classes,=20=E2=80=A6=20(#3?= =?UTF-8?q?4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Consistent usage of accessor function, more TC for analysis classes, option to save plots * Linting * Improved docstrings * Stepped mvg version to 0.6.3 * Oskar's review comments * Updated example notebooks * Stepped version to 0.7.0 due to bw incompatible changes * Fixed pylint version to 2.8.3 Co-authored-by: Mohsen Nosratinia --- analysis_classes_examples/black_sheep.py | 1 - analysis_classes_examples/modeid.py | 1 - analysis_classes_examples/rms.py | 1 - analysis_classes_examples/tabular.py | 1 - .../content/examples/analysis_classes.ipynb | 181 +++++++----- mvg/analysis_classes.py | 269 +++++++++++++----- mvg/mvg.py | 2 +- requirements_dev.txt | 4 +- tests/conftest.py | 2 + tests/test_analysis_classes.py | 16 +- 10 files changed, 320 insertions(+), 158 deletions(-) diff --git a/analysis_classes_examples/black_sheep.py b/analysis_classes_examples/black_sheep.py index be32a361..bf4da338 100644 --- a/analysis_classes_examples/black_sheep.py +++ b/analysis_classes_examples/black_sheep.py @@ -49,5 +49,4 @@ res.summary() res.plot() print(res.to_df().head()) -res.save() print("Bye") diff --git a/analysis_classes_examples/modeid.py b/analysis_classes_examples/modeid.py index 7714d7c6..26299465 100644 --- a/analysis_classes_examples/modeid.py +++ b/analysis_classes_examples/modeid.py @@ -34,5 +34,4 @@ res.summary() res.plot() res.to_df().head() -res.save() print("Bye") diff --git a/analysis_classes_examples/rms.py b/analysis_classes_examples/rms.py index 0efb81c1..76bd41cd 100644 --- a/analysis_classes_examples/rms.py +++ b/analysis_classes_examples/rms.py @@ -33,5 +33,4 @@ rms = analysis_classes.RMS(rms_res, t_zone="Europe/Stockholm", t_unit="s") rms.plot() rms.summary() -rms.save() print("Bye") diff --git a/analysis_classes_examples/tabular.py b/analysis_classes_examples/tabular.py index ff62c768..6d12d6dc 100644 --- a/analysis_classes_examples/tabular.py +++ b/analysis_classes_examples/tabular.py @@ -48,5 +48,4 @@ ana = parse_results(ana_res, t_zone="Europe/Stockholm", t_unit="s") ana.plot() ana.summary() -ana.save() print("Bye") diff --git a/docs/source/content/examples/analysis_classes.ipynb b/docs/source/content/examples/analysis_classes.ipynb index 787ed6f3..fb67934f 100644 --- a/docs/source/content/examples/analysis_classes.ipynb +++ b/docs/source/content/examples/analysis_classes.ipynb @@ -21,7 +21,7 @@ "result.plot() # plot results\n", "result.summary() # print summary table\n", "df = result.to_df() # convert to DataFrame\n", - "result.save() # save to pickle file\n", + "result.save_pkl() # save to pickle file\n", "```\n", "\n", "### Prerequisites\n", @@ -42,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:28.735704Z", @@ -82,7 +82,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:29.472021Z", @@ -106,8 +106,8 @@ "text": [ "{\n", " \"api_version\": \"0.0.0-dev0\",\n", - " \"mvg_highest_tested_version\": \"0.1.6\",\n", - " \"mvg_version\": \"0.6.0\"\n", + " \"mvg_highest_tested_version\": \"0.1.12\",\n", + " \"mvg_version\": \"0.6.3\"\n", "}\n" ] } @@ -135,7 +135,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:32.804304Z", @@ -188,7 +188,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:37.584243Z", @@ -580,7 +580,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:38.637859Z", @@ -724,7 +724,7 @@ "max 1.574424e+09 0.647694 0.662754 -0.109065 1.0" ] }, - "execution_count": 10, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -747,7 +747,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:43.435603Z", @@ -771,6 +771,16 @@ "needs_background": "light" }, "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "''" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -791,7 +801,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:44.400481Z", @@ -1393,7 +1403,7 @@ "49 2019-11-22 13:01:00+01:00 " ] }, - "execution_count": 12, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -1416,7 +1426,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:48.331542Z", @@ -1712,7 +1722,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:51.412234Z", @@ -1790,11 +1800,11 @@ " 1574424060\n", " ],\n", " \"labels\": [\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", " 2,\n", " 2,\n", " 2,\n", @@ -1805,23 +1815,6 @@ " 2,\n", " 2,\n", " 2,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 1,\n", - " 1,\n", " 1,\n", " 1,\n", " 1,\n", @@ -1837,9 +1830,26 @@ " 1,\n", " 1,\n", " 1,\n", - " 1,\n", - " 1,\n", - " 1\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0\n", " ],\n", " \"atypical\": [\n", " false,\n", @@ -1949,38 +1959,38 @@ " 1574424060\n", " ],\n", " \"labels\": [\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", " 2,\n", " 2,\n", " 2,\n", @@ -2809,7 +2819,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:53.012148Z", @@ -2853,6 +2863,18 @@ "+------------+-----+\n" ] }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\viking\\repos\\mvg\\mvg\\analysis_classes.py:131: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " dframe[\"datetime\"] = dt_col\n" + ] + }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb0AAAEoCAYAAADMhS+0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dd7wU1fnH8c9DR+lSIk2sGDCIQQUTo0ZULKhooj+7JBp7rySxoFFDrLEEBRMr9t5bUGOM3WjsXRQEURQEVBDk+f1xzsKw7t66d3bvne/79drXvXtmduacZ8oz5eysuTsiIiJZ0KzcFRAREUmLkp6IiGSGkp6IiGSGkp6IiGSGkp6IiGSGkp6IiGRGppKeme1pZg+XYDpuZmuUok5NSTniUup5mlm/OM35ZnZAiab5czN7N05zlJn1MLMnzGyemZ1Xinmkwcw2M7Np5a6HpKeSl7mZHWxmM+N2tZKZvW9m35nZpKo+VzFJz8weN7PZZtY6r3yKmW1Rinm4+3XuvlUpplUdM7vKzBabWc8Gns9oM3uyIedRCnH5upmtm1d+ZyzfrExVK6aTu08EMLMBZvZCXD9nm9k/zWxAbkQzG2tmi+LGl3utlpjW6cAl7t7O3e8EDgBmAR3c/djqKmJmPzOz52KSfMXMNk4M+0PefL81syVm1jUOP9vMpprZXDP7yMz+mDftwWb2opl9E/8Ork2QzGw3M3vTzL6OO51fxPI98+r1TVzOQ+LwX5rZY2b2lZlNyZtm37zPzo+fPTbx2VfNbI6ZfWFmd5hZr7xpbGFm/431mmpmu9awPV3M7CYzmxVf15lZhzisq5n9J85zjpk9bWY/T3y2tZldYGbT43oy3sxaJoZPMrMZcVm8Y2b71yLOu5rZUzGOjxcYvr2ZvRZj9VRy/cwb79EYyxZ55QWXY32Y2VpmdpeZfW5mX5rZQ2bWPzH8srxlvNDM5iWGP25mCxLD304MawmcD2wVt6sv3H114KxqK+buZX8B/YDvgS+BXfKGTQG2KHcd8+rkwBpVDF8RmAd8ARzfwHUZDTxZ7phUFxfgceBt4LxE2UrAp8BnwGYNsSzqML1+cZotEmWdYrkBzYEjgFcSw8cCk6qY5nvJdRj4O3BGDevThZAgd4nz3guYDXQuMv5Y4NHE+/7AivH/XsDrwM7xfSvgI+BooHVs10dAqyLT3gyYlni/ZRx/GOEAuhfQq4r19H3A4vsNgb0JBwBTqonBqnH/0C++7wH0jP+3Bs4G7k6MPyCuU9sALeJ6tnoN4z0eeBjoAHQE/gmcH4e1ifFsFteFUYR9Vos4/FTg33GZdQOeAU5LTHsg0Dr+v3Zc94fUsF5bALsCpwCP5w1bE5gLbBzb+/u4zrXIG29P4Al+uH4XXY75y7yW29KGwH4xHi2BPwFvVTH+VcAVifePA/sXGbd3fjtqsi26e8UkvVOA/xAy972J8muBJcC3wHzgBOA+4PC8z78CjIr/O2Hj/YCwszgHaJbY8J5MfG4g8EhccWcCf0gsrKeBOcAM4BISOwKqT3r7AFOBI4HXCqwIL8SVdGbeBjWJkCjnAM8DPeKwjsA/Yl0+Ac4g7AB/DCwg7BDmA3Pi+NsCbxAS7yfAcUXquTrwaJznLOA6whlObvgU4LgY36+Am4A2ieHHxzpNB35bVVziCnwKMA1oHssOAy6NZZvFstbAX+M0p8f/W9dknvGz5wIfx9heBrSNw7oC98bYfknYOTUrUM9+FNiYEsNbAIcC39RkQyPs6JPr8A3AIuC7+H4LqljfgJHA63nTfAfYr8C8LM5v3yJ16QW8CpwQ328V1w9LjPMxsHX8vy1hRzQ7rk/Hs3zSe6pQPYrM+zHg1ALlW1B90jsVeKzIsNbAn4E3EmXXA3+qYnrDYt3nAP8jccAFPAAcknh/KPBQgWk0A7aP60r3WPYCiYN2YA9gapE69I/Letf4vnNcPz+P8b4X6F3gc/vzw6R3GHBfXt2+BYYnyjrG9WZY/vpd1XIkJj3gD4R9xBRgz8Tw7YCXCPuzqcDYKuLeJc57pQLDcicKm+btM36Q9IC1gK/jtOaz/EHeWBpJ0nsPOAQYQtgh9EgMm8LyR8m7As8m3q9L2GnndhIeN7AuQN+4oPePw0YTkx7QPq50xxISTntgaBw2JK4cLQg7wTeBoxLzrC7pTSYcffYAFgM/TQx7Gtg7/t8OGBb/PxC4B1iBkNCGEC5/AdwJTIgrRnfgOeDA/DYl5jED+EViY/ppkXquQTjKa004Mn0C+Gte7J8DesZ4vgkcFIdtTUgs68R6XV9VXHIrMOEoeptY9hywEcsnvdMJR8jdY52eIu7AqpsnIUHeHevaPsbzz3HYnwlJsGV8/YLEzj5Rz34USXqEneRiQhI7KW9D+4qQTF8HDs773BSWX4evInGmRxXrG2HH+kbe9N4FLihQv00IO4F2eeVjYrkTDgZ7x/KjgQfyxr0XODb+P45lZy59gNeISY+wjn4Xp/1eXIaXEA8y8qa5CuHAbNUCw2qS9N4HRueV9Y3LYwlhnzE6MewDwlnFq4RtYRLQJQ7rRdhfbEtIDlvG993i8JHA/YTtpjPhoPCovHm/EtvuwOWJ8heJSSy+3zOO0zFRNh74Jpb/N7esCGejvyJs/+2BW4A7C8SiUNI7HLg/8b454WD4yETZ3+Ly7kdi/a5uORKS3mLCCUlrYFNCwumfGP6TGMtBhO1zVJHlOAqYUWTYPnG5JQ/AHiccBMwinBRtVt12SmNIeoRT8kVA1/j+LeDoKnYYrQk7lzXj+3OB8YnhTjxSje8PASbH/0ezLOntDrxUwzoeBdyRN49iO/e+hA1xcHz/EHBhYvgTwGm59ibKf0vYwQ/KK+8BLCSxM4l1fyy/TYnhHxOSaIdaLotRyZjE2O+VeH82cFn8/wpgXGLYWtXE5XHCBrsX4WynP/BOHJZMeu8D2yY+N4K4U6xqnoSznK9JXMYiJNQP4/+nA3cVq191G1Ni+IpxndouUTaAcGDQHPgZYUe7exXr8FVUcXkzub4RdoZz4jJvCewb168JBT73D+CqItM0YL247rWPZScDN+aNdx3xaJ2wE0puSwewLOn1jHF6AViZcCb9H+DMAvM+mbwddWJYlUmPcHDyg0SeGN4FOJF48BjLvosxX4twYHkbcF0cdiJwbd40HiKeHcd2/TPGeAnhStAPLvcSDpR3J3FWTbgC8x/CwdqPgGdjjFbO+2xzwn7vJKBlkXYNBmYXKC+U9NYmrPubES5Znxzr/vs4fH3gZZYdVCWTXpXLkWVJb8XE/G4GTi5S779S+ICsN+Gqwu5FPjeZvLNEYCjhAKA1Yb2fR9y+89uR+MxYqkl6ldCRZV/gYXefFd9fH8sKcveFhKDvZWbNCCvetXmjTU38/xFhwebrQ9jB/kC8AXuvmX1qZnMJN0e71qQxhPsUb7r7y/H9dcAeiRva+xE2xrfM7HkzGxnLryVsfDfGG+Fnx8+sQtjZzYg3z+cQzvq6V1GHXxGOZD8ys3+Z2UZF2tndzG40s09iOycVaOenif+/IexEIMQ0P841cTuwOeHoNH+55aabnFZy+VU1z26Eo+QXE3F6MJZDuMz9HvCwmX1gZmNqWN/luPvXhDPGa8yseyx7w92nu/v37v4UcCHw65pOs6r1zd2/AHYEjiEcRW9N2ClPy5tGW8J9v6uL1Nvd/SXCZa/TYvF8wr2rpA6EnQtUHe9v49+L3X1G3H7PJ6x3+fYpVq8a2Be4zd3nFxro7l/Gad+V6JzxLXClu78TP3dWol6rALvk1pG4nmxM2OFDOMN6h7Cz7UDYR/ygN6C7L3D3G4Axtqxz1pmES30vEw5g7yQc0H+W99nv3f1JQiI4GMDMVjCzCRY6G80lHBx3MrPm1QXI3d+KcbqEcMDVlXA5elrcR44nnPUtLvDxmizH2XG9z1m6TZrZ0Ngh6XMz+wo4iLx9iJl1I1zhGR9jRt7wPoQzyGvy2vWsu89z94XufjUhGRdav2qlrEkvbqi7ApvGDf5Twin4uokVyQt89GrCpYPhhHsrT+cN75P4vy/h/k++qYR7WoVcSjjjXNPdOxCuZ1sNmgRhA18t0Z7zCSvBNgDu/q67705IWn8BbjWzFd19kbuf5u4DCGcLI1l2b3Ah4cywU3x1cPeBcX4/iI+7P+/uO8Z53Ek4SCjkz/Hzg2I796pFO2fwwzhXy92/Idw3OZjCSW86YceUnG5u+VU1z1mEDXhgIk4d3b1dnO88dz/W3VcjXDI8xsyG16TOBTQjJNheRYY7NY8jVLO+ufu/3H0Dd+9COKjqT7g0nLQz4QrI49XMqwXL1vvXgUFmlqzroFgOVcTb3WcTEm+h7XOp2LuxJ3BrNfUq9NkqE3lCC8K6nkvgr1RRr6mEM71OideK7j4uDl+XcBb9dUyYl1H1jrYlsBqAu3/r7oe5e6+4nn0BvOju31dR79yyOJawXIfGdWCTWF6j9cjdb3X3ddx9JcI90FUI/QI6EM70bor7o+fjR6aZ2S9quBw7m9mKiffJbfJ6wi2FPu7ekRCvpXU2s86EhHe3u59ZZPr7AE+5+wfVNZPabVcFlftMbxThWv8Awun8YELnjH8TAgHh6DbZ/ZuY5JYA51F4x3m8mXWORxBHEjpg5LsX+JGZHRW7Grc3s6FxWHvCjdn5ZrY28WisOvGManVCx4Rce9YhcfZqZnuZWTd3X0K4bAXwvYVu2D+JR3ZzCUeI37v7DMJKc56ZdTCzZma2upltmohPbzNrFaffykJ38Y7uvihOq9hG157YAcZCl+/ja9LO6GZgtIXu/CsQNrSa+gPhhvWUAsNuAE4ys24Wut2fwrIj7aLzjPG8HLggdwZmZr3MbET8f6SZrRF38LmYFIvLcsxsSzNbz8yaW+i+fj6hs8GbcfiOcX0zM9uQ0JHqrlrEo8r1Lc67ZZz3uYRLjA/lTWNf4BqP13ji55qZ2YF5dTuUcCkJQoL8HjgibgOHxfJH49+bgd/Hz/cmnJ0nXQkcHq8YdCZclr23QL1uc/d5ycJYtzaEpGFm1ia3DifsRNhGHsv77M5m1j9OoxthebwUz/py9fqNma0W15MTE/WaBGxvZiPi8mxj4btovePw54H9zaxtTLoHEDq7YGbDzGzjuI21NbMTCbcfno3De5lZzxjrYYTLjKfGYd0tfC2gXZzvCMJVqlys2xMO2uaYWRfytqdcXQmJslmsd/LrEEPiON0IV4LuiWeAXxEOOnL7o1wCH5KrNzVbjqfFdv+CcEB+S6LeX7r7grh+7ZGoUwfC1av/uHtVV1b2IVzyT7a3U1xGbcyshZntSTgQyF/va6+qa58N/SJcfjqvQPmuhMtqLQiXdj4mrPzHJcY5iZD5V8v7rLOs9+YXhMSY6y04muV7b65D2AHMjvMbE8s3IRx5zyck4NPzPlfw3hXhKOe2AuUbEs7WuhA2us/itF9nWa/T3Qld+r8mJLKLWHbdvSPLejl+RbiEslsc1orQo/VLwtlOqxjX2YQd6fPAxkXiP5Bw830+4ZLMsSzfO28Ky9+LGkviejnh5ven1Lz3ZrHux8l7em1i22fE10Us32O06DzjZ8+Ky34uISkdEYcdHdvzdZxfsXsS/fhh77ZdEuvD54SODoMSw28grGvz43hH5E0zP45XsXxHlurWtxvics/1oO2eN/1ehPsua+SVN4vrwpdx2u8QzyIT46wX14FvCR0r1ksMW4FwyWkOhXtvtiRcOpsTl0n+smoThw0vEOfNYpyTr8fzxnmIAr0wCcn3w7gsPwVuBFbJG+e0uKw+JxwYd04MGwr8K8blc8L20zcOW5XQAeqLOPxBlvUf2JSQAOfFYf8CNslbjlMItwHeZvlejt3i+HMI6+arwO8Sw3sStpHccjqQ5e+9jS4Qr6sSn38yUa8JJO7B1WD9LrocWdZ784+E/cvHxI54cfivCZc75xES5SXEfQThgMfjcpqfePVNfH6jOLx9Xj27EfZd82K9ngG2rKodhfZRhV6578w0Oma2D3CAu2+cV+6ElfS98tRMGjMzW4Www1pA+I7l5WWukojUgIUvr/cCbnb33xYbr0WxAZUsXrI4hHB0IlIy7v4R4QxFRBoRd+9f/Vjlv6dXa/Fa+OeES4DXl7k6IiLSiDTay5siIiK11ejO9EREROqqUd7Ta0itrLW3YcXqR5SSWmvQN6nN651XVkhtXhJo+TZtC/ia73xhvb9DlwZd3szTwbr40Dp/Z1nq6qHpL1c/UomM6FmrX8+REtDybdqe9cnM9S8bRdLT5U0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REcmMikt6ZtbFzB4xs3fj386JYb83s/fM7G0zG5EoH2Jmr8ZhF5mZxfJjzOwNM3vFzCab2SrlaJOIiFSGikt6wBhgsruvCUyO7zGzAcBuwEBga2C8mTWPn7kUOABYM762juUvAeu7+yDgVuDstBohIiKVp2xJz8z6mdlriffHmdlYYEfg6lh8NTAq/r8jcKO7L3T3D4H3gA3NbGWgg7s/7e4OXJP7jLs/5u7fxM8/A/Ru6HaJiEjlqsQzvR7uPgMg/u0ey3sBUxPjTYtlveL/+eX59gMeKDRDMzvAzF4wsxcWsbCe1RcRkUrVotwVqAUrUOZVlC/7oNlewPrApoUm7O4TgYkAHayLFxpHREQav3Ke6S3Om3+b+HdmvGRJ/PtZLJ8G9EmM3xuYHst7FygnTmML4I/ADu6u0zgRkQwrZ9KbCXQ3s5XMrDUwMpbfDewb/98XuCtRvpuZtTazVQkdVp6Ll0Dnmdmw2Gtzn9xnzGw9YAIh4eWSp4iIZFTZLm+6+yIzOx14FvgQeCsOGgfcbGb7AR8Du8TxXzezm4E3CGeJh7r79/EzBwNXAW0J9+1y9+7OAdoBt8RvMXzs7js0cNNERKRClfWenrtfBFxUYNDwIuOfCZxZoPwFYJ0C5VvUt44iItJ0VGLvTRERkQahpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpnRotwVkB96aPrL5a5CxRjRc3C5qyAloOUolUJneiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhkVl/TMrIuZPWJm78a/nRPDfm9m75nZ22Y2IlE+xMxejcMuMjOL5QfF8pfN7EkzG1CONomISGWouKQHjAEmu/uawOT4npiwdgMGAlsD482sefzMpcABwJrxtXUsv97df+Lug4GzgfNTa4WIiFScsiU9M+tnZq8l3h9nZmOBHYGrY/HVwKj4/47Aje6+0N0/BN4DNjSzlYEO7v60uztwTe4z7j43McsVAW/INomISGVrUe4KFNDD3WcAuPsMM+sey3sBzyTGmxbLFsX/88sBMLNDgWOAVsDmhWZoZgcQzhRpwwqlaYWIiFScSry8WYwVKPMqysM/7n9z99WBE4GTCk3Y3Se6+/ruvn5LWpeksiIiUnnKmfQW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\n", @@ -2864,6 +2886,16 @@ "needs_background": "light" }, "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "''" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -2884,7 +2916,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -2900,14 +2932,21 @@ "'35ffa9730d671736e8393a1946ba275f.pkl'" ] }, - "execution_count": 18, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "pretty_result.save()" + "pretty_result.save_pkl()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/mvg/analysis_classes.py b/mvg/analysis_classes.py index 16d7c6a3..a3524292 100644 --- a/mvg/analysis_classes.py +++ b/mvg/analysis_classes.py @@ -8,7 +8,7 @@ >>> result.plot() # plot results >>> result.summary() # print summary table >>> df = result.to_df() # convert to dataframe ->>> result.save() # save to pickle file +>>> result.save_pkl() # save to pickle file The parse function will detect the kind of request and return an object of the correct feature class. @@ -48,13 +48,47 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): time unit for conversion from epoch time [ms]. """ - self.raw_results = results - self.t_zone = t_zone - self.t_unit = t_unit - self.dframe = None - self.inputs = results.get("inputs", "Inputs not available") + # raw_results as returned from server + self._raw_results = results + + # timezone and unit set in constructor + self._t_zone = t_zone + self._t_unit = t_unit + + # Dataframe representation + self._results_df = None + + self._inputs = results.get("inputs", "Inputs not available") + self.time_column = None + def _render_plot(self, interactive): + """Render plot to screen (interactive) or file. + + Parameters + --------- + interactive: bool + Wheter to display plot on screen (True) or to store to file (False). + + Returns + ------- + plot file name: str + name of plot file (or emtpy string in case of interactive plot) + """ + if interactive: + plot_file = "" + plt.show() + else: + if len(self.sources()) > 1: + srcstr = self.sources()[0] + "_to_" + self.sources()[-1] + "_" + else: + srcstr = self.sources()[0] + "_" + plot_file = srcstr + self.request_id() + ".png" + plt.savefig(plot_file, dpi=600, bbox_inches="tight") + print(f"saved plot to {plot_file}") + + return plot_file + def _add_datetime(self): """ Convert EPOCH time to datetime with the @@ -65,20 +99,7 @@ def _add_datetime(self): datetime. """ - # Check if there is info for conversion - if self.t_zone is not None: - # EPOCH to datetime - self.dframe = self.dframe.assign( - datetime=pd.to_datetime( - self.dframe["timestamps"], unit=self.t_unit, utc=True - ) - ) - # Set timezone - self.dframe = self.dframe.assign( - datetime=(self.dframe["datetime"].dt.tz_convert(self.t_zone)) - ) - # Mark datetime as availbke - self.time_column = "datetime" + self._results_df = self._add_datetime_df(self._results_df, "datetime") def _add_datetime_df(self, dframe, timecolumn): """ @@ -100,21 +121,30 @@ def _add_datetime_df(self, dframe, timecolumn): """ # Check if there is info for conversion - if self.t_zone is not None: - # EPOCH to datetime - dframe = dframe.assign( - datetime=pd.to_datetime(dframe[timecolumn], unit=self.t_unit, utc=True) - ) - # Set timezone - dframe = dframe.assign( - datetime=(dframe["datetime"].dt.tz_convert(self.t_zone)) - ) - # Mark datetime as availble - self.time_column = "datetime" + if self._t_zone is not None: + + # EPOCH to datetime considering time zone + dt_col = pd.to_datetime( + dframe["timestamps"], unit=self._t_unit, utc=True + ).dt.tz_convert(self._t_zone) + + dframe["datetime"] = dt_col + + # Mark timecolumn as available + self.time_column = timecolumn return dframe # Accessor functions + def raw_results(self): + """Raw results as returned by server + Returns + ------- + raw_results: dict + """ + + return self._raw_results + def request_id(self): """request_id from request @@ -123,7 +153,7 @@ def request_id(self): request_id: str """ - return self.raw_results["request_id"] + return self._raw_results["request_id"] def feature(self): """feature from request @@ -133,37 +163,51 @@ def feature(self): feature: str """ - return self.raw_results["feature"] + return self._raw_results["feature"] - def request_params(self): - """inputs to the analysis run + def results(self): + """results dict as returned from request Returns ------- results: dict """ - return self.inputs + return self._raw_results["results"] - def results(self): - """results dict as returned from request + def status(self): + """status from request Returns ------- - results: dict + status: str """ - return self.raw_results["results"] + return self._raw_results["status"] - def status(self): - """status from request + def inputs(self): + """inputs to the request algortihm Returns ------- - status: str + inputs: dict + """ + + return self._inputs + + def sources(self): + """sources to the request algortihm + + Returns + ------- + sources: list """ - return self.raw_results["status"] + sources = self.inputs()["UUID"] + if not isinstance(self.inputs()["UUID"], list): + sources = [self.inputs()["UUID"]] + + return sources # For avoiding problems when no results are available def check_status(self): @@ -188,21 +232,35 @@ def summary(self): self.check_status() # print time info if applicable if self.time_column is not None: - from_t = self.dframe[self.time_column].min() - to_t = self.dframe[self.time_column].max() + from_t = self._results_df[self.time_column].min() + to_t = self._results_df[self.time_column].max() if self.time_column == "datetime": from_t = from_t.strftime("%Y%m%d-%H:%M.%S") to_t = to_t.strftime("%Y%m%d-%H:%M.%S") print(f"from {from_t} to {to_t}") # Default method - def plot(self): - """ Pro forma ancestor function""" + def plot(self, interactive=True): # pylint: disable=unused-argument + """Pro forma ancestor function. + + Parameters + ---------- + interactive : bool + True: show plot, False: save plot + + + Returns + ------- + plot file name: str + name of plot file (or emtpy string in case of interactive plot) + """ + self.check_status() print(f"Plot function not implemented for {type(self).__name__}") + return "" # Save self as pickel - def save(self, file_name=None): + def save_pkl(self, file_name=None): """Serializes the analysis object as pickle file. In case of filname is not given, filename will be .pkl @@ -224,32 +282,49 @@ def save(self, file_name=None): pickle.dump(self, pkl_file) return file_name - # Save results to dataframe - def to_df(self, file_name=None): + # Return results as dataframe + def to_df(self): """Return a dataframe with the analysis results. - Save as csv if file_name given. + Returns + ------- + Dataframe with analysis results: dataFrame + + """ + + self.check_status() + return self._results_df + + # Save results to dataframe + def save_df(self, file_name=None): + """Save a dataframe with the analysis results. + In case of filname is not given, filename will be + .csv Format of the dataframe depends on specific analysis. Will raise an exception in case no results are available. Parameters ---------- file_name: str - filename to save object under. If not given no file is saved. + filename to save dataframe under. Returns ------- - Dataframe with analysis results: dataFrame + Actually used file path: str """ self.check_status() - if file_name is not None: - print(f"Saving {self.feature()} data frame results to", file_name) - self.dframe.copy().to_csv(file_name, index=False) - return self.dframe + + if file_name is None: + file_name = f"{self.request_id()}.csv" + + print(f"Saving {self.feature()} data frame results to", file_name) + self._results_df.copy().to_csv(file_name, index=False) + + return file_name # Save self as pickel - def to_json(self, file_name=None, raw=False): + def save_json(self, file_name=None, raw=False): """Saves the request result from the API JSON In case of filname is not given, filename will be .json @@ -272,7 +347,7 @@ def to_json(self, file_name=None, raw=False): print(f"Saving {self.feature()} API results to", file_name) if raw: - s_dict = self.raw_results + s_dict = self._raw_results else: s_dict = self.results() @@ -300,7 +375,7 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): """ Analysis.__init__(self, results, t_zone, t_unit) - self.dframe = pd.DataFrame.from_dict(self.results()) + self._results_df = pd.DataFrame.from_dict(self.results()) self.time_column = "timestamps" self._add_datetime() @@ -314,17 +389,29 @@ def summary(self): super().summary() print() - tab = self.dframe.describe() + tab = self._results_df.describe() print(tabulate(tab, headers="keys", tablefmt="psql")) return tab - def plot(self): - """Generate a basic plot on RMS.""" + def plot(self, interactive=True): + """ + Generate a basic plot on RMS. + + Parameters + ---------- + interactive : bool + True: show plot, False: save plot + + Returns + ------- + plot file name : str + name of plot file (or emtpy string in case of interactive plot) + """ self.check_status() - self.dframe.plot(x=self.time_column, y=["rms", "dc", "utilization"]) + self._results_df.plot(x=self.time_column, y=["rms", "dc", "utilization"]) plt.title(f"RMS Summary plot for request {self.request_id()}") - plt.show() + return self._render_plot(interactive) class ModeId(Analysis): @@ -350,7 +437,7 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): dict_for_df = self.results().copy() dict_for_emerging = dict_for_df.pop("mode_info") self.emerging_df = pd.DataFrame.from_dict(dict_for_emerging) - self.dframe = pd.DataFrame.from_dict(dict_for_df) + self._results_df = pd.DataFrame.from_dict(dict_for_df) self.time_column = "timestamps" self._add_datetime() self.emerging_df = self._add_datetime_df(self.emerging_df, "emerging_time") @@ -368,7 +455,7 @@ def summary(self): super().summary() # labels - tbl = self.dframe.groupby(["labels"]).agg(np.size) + tbl = self._results_df.groupby(["labels"]).agg(np.size) tbl["uncertain"] = tbl["uncertain"] / sum(tbl["uncertain"]) * 100 tbl = tbl.rename(columns={"timestamps": "counts", "uncertain": "portion"}) print() @@ -376,7 +463,7 @@ def summary(self): print(tabulate(tbl, headers="keys", tablefmt="psql")) # Uncertain - tbl2 = self.dframe.groupby( + tbl2 = self._results_df.groupby( ["labels", "uncertain"], ).agg(np.size) tbl2["counts"] = tbl2["timestamps"] @@ -393,11 +480,24 @@ def summary(self): return [tbl, tbl2, self.emerging_df] - def plot(self): - """Generate a basic plot on ModeId.""" + def plot(self, interactive=True): + """ + Generate a basic plot on ModeId. + + Parameters + ---------- + interactive : bool + True: show plot, False: save plot + + Returns + ------- + plot file name : str + name of plot file (or emtpy string in case of interactive plot) + """ + self.check_status() - plotting.modes_over_time(self.to_df(), self.request_id(), timeunit=self.t_unit) - plt.show() + plotting.modes_over_time(self.to_df(), self.request_id(), timeunit=self._t_unit) + return self._render_plot(interactive) class BlackSheep(Analysis): @@ -423,7 +523,7 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): if "success" not in self.status(): print("Analysis was not successful") else: - self.dframe = self._bsd_df() + self._results_df = self._bsd_df() # List of which assests are what self.typicality = pd.DataFrame( {"source": results["inputs"]["UUID"], "atypical": False} @@ -479,10 +579,21 @@ def summary(self): print(tabulate(tbl, headers=["atypical", "N"], tablefmt="psql")) return [self.typicality, tbl] - def plot(self): + def plot(self, interactive=True): """Generate a (not so) basic plot for BlackSheep Will show per atypical asset changes to and from - atypical modes (experimental)""" + atypical modes + + Parameters + ---------- + interactive : bool + True: show plot, False: save plot + + Returns + ------- + plot file name : str + name of plot file (or emtpy string in case of interactive plot) + """ # Check if run was successful self.check_status() @@ -495,13 +606,13 @@ def plot(self): # x axis ticks timestamps of changes in atypicality # Find changes in atypticality and store rows in - pdfd.insert(3, "hash", 0) + pdfd.insert(len(pdfd.columns), "hash", 0) for row in pdfd.itertuples(): pdfd.at[row.Index, "hash"] = hash(row[2:]) ticktimes = pdfd.loc[pdfd["hash"].shift(1) != pdfd["hash"]] # Convert EPOCH if t_zone given - if self.t_zone is not None: + if self._t_zone is not None: ticktimes = self._add_datetime_df(ticktimes, "timestamps") # select reasonable number of ticks @@ -551,7 +662,7 @@ def plot(self): bsd_plt.imshow(plotmx, aspect="auto", cmap=mcm) # Display plot - plt.show() + return self._render_plot(interactive) # Parser/Factory function diff --git a/mvg/mvg.py b/mvg/mvg.py index 279d64ba..b6f1f202 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -50,7 +50,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.6.2") + self.mvg_version = self.parse_version("v0.7.0") self.tested_api_version = self.parse_version("v0.1.12") # Errors to ignore diff --git a/requirements_dev.txt b/requirements_dev.txt index 977f607b..b06cc188 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -5,7 +5,7 @@ twine black==20.8b1 flake8 darglint -pylint +pylint==2.8.3 pytest pytest-docker notebook @@ -13,4 +13,4 @@ sphinx sphinx-rtd-theme nbsphinx sphinx-copybutton -m2r2 \ No newline at end of file +m2r2 diff --git a/tests/conftest.py b/tests/conftest.py index d242257b..2ff85777 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -58,6 +58,8 @@ def docker_compose_file(pytestconfig): # for docker-run (--host not set) # or for run towards a running server # e.g. --host http://127.0.0.1:8000 +# the token shall be stored in an environemnt variable +# TEST_TOKEN if args.host == "": @pytest.fixture(scope="session") diff --git a/tests/test_analysis_classes.py b/tests/test_analysis_classes.py index 39daa508..f5da3429 100644 --- a/tests/test_analysis_classes.py +++ b/tests/test_analysis_classes.py @@ -30,7 +30,7 @@ def test_RMS(): assert str(feat.to_df()["datetime"][0]) == "2019-10-04 13:01:00+02:00" # test save as pickle file - pkl_file = feat.save() + pkl_file = feat.save_pkl() assert pkl_file == "2f6dc5ae055f9e82f6f5311c23250f07.pkl" assert os.path.exists(pkl_file) @@ -49,6 +49,20 @@ def test_RMS(): } # Plot (not tested at all) + plt_file = feat.plot(False) + assert plt_file is not None + assert os.path.exists(plt_file) + os.remove(plt_file) # Cleanup + + # Accessor functions (tested only in RMS) + ts_sum = 78615280200 + assert sum(feat.raw_results()["results"]["timestamps"]) == ts_sum + assert feat.request_id() == "2f6dc5ae055f9e82f6f5311c23250f07" + assert feat.feature() == "RMS" + assert sum(feat.inputs()["timestamps"]) == ts_sum + assert sum(feat.results()["timestamps"]) == ts_sum + assert feat.status() == "successful" + assert feat.sources() == ["u0001"] def test_BlackSheep(): From 3e22349272be527af17eae43192bc27924c84249 Mon Sep 17 00:00:00 2001 From: Fredrik Wartenberg Date: Tue, 13 Jul 2021 09:07:35 +0200 Subject: [PATCH 05/90] Full timestamps (#37) * added function, untested yet * Fixed a bug in rendering of emerging modes table relateated to timestamps. Added an argument time_format to plotting of modes to allow to show hours and minutes --- .gitignore | 3 ++ mvg/analysis_classes.py | 42 ++++++++++++++---- mvg/mvg.py | 2 +- mvg/plotting.py | 11 ++++- tools/analysis.py | 98 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 146 insertions(+), 10 deletions(-) create mode 100644 tools/analysis.py diff --git a/.gitignore b/.gitignore index ee096f98..f49c4f5a 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ ENV/ env.bak/ venv.bak/ + # Distribution / packaging build/ develop-eggs/ @@ -26,6 +27,8 @@ Lib/ Scripts/ doc/ fwdevelop/ +tools/ + # Test otuput mca/test_output diff --git a/mvg/analysis_classes.py b/mvg/analysis_classes.py index a3524292..6234addf 100644 --- a/mvg/analysis_classes.py +++ b/mvg/analysis_classes.py @@ -99,7 +99,7 @@ def _add_datetime(self): datetime. """ - self._results_df = self._add_datetime_df(self._results_df, "datetime") + self._results_df = self._add_datetime_df(self._results_df, "timestamps") def _add_datetime_df(self, dframe, timecolumn): """ @@ -125,13 +125,13 @@ def _add_datetime_df(self, dframe, timecolumn): # EPOCH to datetime considering time zone dt_col = pd.to_datetime( - dframe["timestamps"], unit=self._t_unit, utc=True + dframe[timecolumn], unit=self._t_unit, utc=True ).dt.tz_convert(self._t_zone) dframe["datetime"] = dt_col # Mark timecolumn as available - self.time_column = timecolumn + # self.time_column = timecolumn return dframe @@ -240,7 +240,9 @@ def summary(self): print(f"from {from_t} to {to_t}") # Default method - def plot(self, interactive=True): # pylint: disable=unused-argument + def plot( + self, interactive=True, time_format=None + ): # pylint: disable=unused-argument """Pro forma ancestor function. Parameters @@ -248,6 +250,9 @@ def plot(self, interactive=True): # pylint: disable=unused-argument interactive : bool True: show plot, False: save plot + time_format: str, optional + strftime format specifier for tick_x_lables. If not given + only dates are shown. To show dates and time use %y%m%d-%H:%M:%S Returns ------- @@ -393,7 +398,7 @@ def summary(self): print(tabulate(tab, headers="keys", tablefmt="psql")) return tab - def plot(self, interactive=True): + def plot(self, interactive=True, time_format=None): """ Generate a basic plot on RMS. @@ -402,6 +407,11 @@ def plot(self, interactive=True): interactive : bool True: show plot, False: save plot + time_format: str, optional + strftime format specifier for tick_x_lables. If not given + only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + + Returns ------- plot file name : str @@ -480,7 +490,7 @@ def summary(self): return [tbl, tbl2, self.emerging_df] - def plot(self, interactive=True): + def plot(self, interactive=True, time_format=None): """ Generate a basic plot on ModeId. @@ -489,6 +499,10 @@ def plot(self, interactive=True): interactive : bool True: show plot, False: save plot + time_format: str, optional + strftime format specifier for tick_x_lables. If not given + only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + Returns ------- plot file name : str @@ -496,7 +510,13 @@ def plot(self, interactive=True): """ self.check_status() - plotting.modes_over_time(self.to_df(), self.request_id(), timeunit=self._t_unit) + plotting.modes_over_time( + data=self.to_df(), + request_id=self.request_id(), + timeunit=self._t_unit, + time_format=time_format, + ) + return self._render_plot(interactive) @@ -579,7 +599,8 @@ def summary(self): print(tabulate(tbl, headers=["atypical", "N"], tablefmt="psql")) return [self.typicality, tbl] - def plot(self, interactive=True): + # pylint: disable=too-many-locals + def plot(self, interactive=True, time_format=None): """Generate a (not so) basic plot for BlackSheep Will show per atypical asset changes to and from atypical modes @@ -589,6 +610,11 @@ def plot(self, interactive=True): interactive : bool True: show plot, False: save plot + time_format: str, optional + strftime format specifier for tick_x_lables. If not given + only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + + Returns ------- plot file name : str diff --git a/mvg/mvg.py b/mvg/mvg.py index b6f1f202..55575074 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -50,7 +50,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.7.0") + self.mvg_version = self.parse_version("v0.7.1") self.tested_api_version = self.parse_version("v0.1.12") # Errors to ignore diff --git a/mvg/plotting.py b/mvg/plotting.py index c67ea32f..f6e679bd 100644 --- a/mvg/plotting.py +++ b/mvg/plotting.py @@ -148,6 +148,7 @@ def modes_over_time( show_uncertain=True, only_start_end_timeticks=False, timetick_angle=85, + time_format=None, ): """Creates a rectangular timeline of modes. @@ -189,6 +190,10 @@ def modes_over_time( timetick_angle: float, optional the angle of time tick texts. + time_format: str, optional + strftime format specifier for tick_x_lables. If not given + only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + Returns ---------- image: object of class matplotlib.axes @@ -286,7 +291,11 @@ def _plot_row(row_data, is_uncert_data, y_pos=0): # Modify ticks position and create legend df_changes = data.iloc[tick_index] - tick_x_labels = df_changes["Date"].apply(lambda x: x.date()) + if time_format is None: + tick_x_labels = df_changes["Date"].apply(lambda x: x.date()) + else: + tick_x_labels = df_changes["Date"].apply(lambda x: x.strftime(time_format)) + axes.set_xticklabels(tick_x_labels, rotation=timetick_angle) legend_labels = [ patches.Patch(facecolor=colors[i], edgecolor="black", label="No data") diff --git a/tools/analysis.py b/tools/analysis.py new file mode 100644 index 00000000..cbdf21bb --- /dev/null +++ b/tools/analysis.py @@ -0,0 +1,98 @@ +# This example requires sources to be uploaded to +# the server side + +import os +import json +import typer +from typing import Optional +from mvg import MVG +from mvg.analysis_classes import parse_results +import logging +import sys + +root_logger = logging.getLogger() +root_logger.setLevel("INFO") +formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(name)s - %(message)s") +stream_handler = logging.StreamHandler(stream=sys.stderr) +stream_handler.setFormatter(formatter) +root_logger.addHandler(stream_handler) + +# Instantiate a session object with mvg library +# replace token and server with your url/token +ENDPOINT = os.environ["TEST_URL"] +TOKEN = os.environ["TEST_TOKEN"] + +app = typer.Typer() # Create typer app + +@app.command() +def run( + source_id: str = typer.Argument( + ..., + help='Source ID'), + feature: Optional[str] = typer.Argument("ModeId", + help='Feature'), + start: Optional[int] = typer.Argument(None, + help='Start timestamp [epoch]'), + end: Optional[int] = typer.Argument(None, + help='End timestamp [epoch]'), + show: bool = typer.Option(True, help='Show plot rather than saving it'), + pdb: bool = typer.Option(False, help='Enter pdb debugger'), + params: bool = typer.Option(False, help='Use ./params.json file') +): + """Run an analyis on Source ID""" + + + ses = MVG(ENDPOINT, TOKEN) + + # Fetch parameters if given + if params: + with open("params.json", "r", encoding="utf-8") as json_data: + params = json.load(json_data) + print(f"Params loaded from ./params.json") + print(json.dumps(params, indent=4)) + else: + params = {} + + req = ses.request_analysis(sid=source_id, + feature=feature, + parameters=params, + start_timestamp=start, + end_timestamp=end) + request_id = req["request_id"] + print(f"Waiting for {request_id}") + ses.wait_for_analyses([request_id]) + get_and_display_results(ses, request_id, show, pdb) + +@app.command() +def retrieve( + request_id: str = typer.Argument( + ..., + help='Request ID'), + show: bool = typer.Option(True, help='Show plot rather than saving it'), + pdb: bool = typer.Option(False, help='Enter pdb debugger') +): + """Retrieve a previous analyis with request ID""" + + ses = MVG(ENDPOINT, TOKEN) + get_and_display_results(ses, request_id, show, pdb) + + + +def get_and_display_results(ses, request_id, show, pdb): + + # Get results + res_dict = ses.get_analysis_results(request_id) + + # Parse results + res = parse_results(res_dict, "Europe/Stockholm", "s") + if pdb: + breakpoint() + + res.summary() + res.plot(show,time_format="%y%m%d-%H:%M:%S") + res.to_df().head() + print("Bye") + + +if __name__ == '__main__': + app() From 59afc480722e79c5f523f24f157f384b7a570586 Mon Sep 17 00:00:00 2001 From: Sergio Martin-del-Campo <61144290+SergioMDCB@users.noreply.github.com> Date: Thu, 15 Jul 2021 13:40:02 +0200 Subject: [PATCH 06/90] Issue39 documentation (#40) * Update to brief overview documentation * Update to sources and measurements documentation * Update to check version documentation * Update of mvg version * Update of the analysis and visualization results example * Update sources and measurements example to remove references to lose of analysis results * Updatinf analysis_classes to replace uuid by source_id on blacksheep * Update to the analysis classes documentation example * Adding the analysis classes example to index * Adding black formatting changes to analysis_classes * update test results to reflect change from uuid to source_id --- .../content/examples/analysis_classes.ipynb | 930 ++---------------- .../content/examples/analysis_visual.ipynb | 115 ++- .../content/examples/brief_overview.ipynb | 100 +- .../content/examples/check_version.ipynb | 13 +- .../examples/sources_and_measurements.ipynb | 28 +- docs/source/index.rst | 1 + mvg/analysis_classes.py | 10 +- mvg/mvg.py | 2 +- tests/test_data/BlackSheep_results_dict.json | 4 +- 9 files changed, 264 insertions(+), 939 deletions(-) diff --git a/docs/source/content/examples/analysis_classes.ipynb b/docs/source/content/examples/analysis_classes.ipynb index fb67934f..3a2bb4ea 100644 --- a/docs/source/content/examples/analysis_classes.ipynb +++ b/docs/source/content/examples/analysis_classes.ipynb @@ -8,10 +8,10 @@ "\n", "MVG comes with a set of analysis classes which provide a unified interface to analysis results *irrespective of the specific feature*. Note that the analysis classes are helper classes, as such the mvg class does *not* depend on them.\n", "\n", - "Except for step (1) requesting the specific feature analysis, the following generic workflow holds\n", - "(1) Request a specific analysis\n", - "(2) Retrieve results and parse them into an analysis_class object\n", - "(3) Use generic methods like plot(), summary() or to_df()\n", + "Except for step (1) requesting the specific feature analysis, the following generic workflow holds:\n", + "- (1) Request a specific analysis\n", + "- (2) Retrieve results and parse them into an analysis_class object\n", + "- (3) Use generic methods like plot(), summary() or to_df()\n", "\n", "One application is to use the analysis classes interactively from a Python REPL session.\n", "\n", @@ -47,9 +47,6 @@ "ExecuteTime": { "end_time": "2021-03-18T10:00:28.735704Z", "start_time": "2021-03-18T10:00:28.513699Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [], @@ -87,27 +84,17 @@ "ExecuteTime": { "end_time": "2021-03-18T10:00:29.472021Z", "start_time": "2021-03-18T10:00:29.469799Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Using developer API: 0.0.0-dev0. You must confirm compatibility yourself.\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ "{\n", - " \"api_version\": \"0.0.0-dev0\",\n", + " \"api_version\": \"0.1.14\",\n", " \"mvg_highest_tested_version\": \"0.1.12\",\n", - " \"mvg_version\": \"0.6.3\"\n", + " \"mvg_version\": \"0.7.2\"\n", "}\n" ] } @@ -115,7 +102,7 @@ "source": [ "# Replace by your own Token\n", "TOKEN = os.environ[\"TEST_TOKEN\"] # use our own token\n", - "ENDPOINT = os.environ[\"TEST_URL\"] # use API URL \"https://api.beta.multiviz.com\"\n", + "ENDPOINT = \"https://api.beta.multiviz.com\"\n", "session = MVG(ENDPOINT, TOKEN)\n", "print(json.dumps(session.check_version(), indent=4)) # Check if API is accessible" ] @@ -142,7 +129,6 @@ "start_time": "2021-03-18T10:00:32.800567Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -195,7 +181,6 @@ "start_time": "2021-03-18T10:00:37.457555Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -204,10 +189,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "Waiting for {'request_id': '1643d1ddbf3af3fcbb831fc71ca56df5', 'request_status': 'queued'}\n", + "Waiting for {'request_id': 'bd831c060faf3d6ca5332be3f17c5c10', 'request_status': 'queued'}\n", "{\n", " \"status\": \"successful\",\n", - " \"request_id\": \"1643d1ddbf3af3fcbb831fc71ca56df5\",\n", + " \"request_id\": \"bd831c060faf3d6ca5332be3f17c5c10\",\n", " \"feature\": \"RMS\",\n", " \"results\": {\n", " \"timestamps\": [\n", @@ -472,15 +457,15 @@ " ]\n", " },\n", " \"inputs\": {\n", - " \"request_id\": \"1643d1ddbf3af3fcbb831fc71ca56df5\",\n", + " \"request_id\": \"bd831c060faf3d6ca5332be3f17c5c10\",\n", " \"feature\": \"RMS\",\n", " \"experiment\": \"RMS\",\n", " \"sw-commit\": {\n", - " \"api\": \"0.0.0-dev0\",\n", + " \"api\": \"v0.1.14\",\n", " \"feature\": \"1.0.0\"\n", " },\n", " \"dataType\": \"waveform\",\n", - " \"db_def\": \"vibium_app\\\\pipeline\\\\wartenberg\\\\feature\\\\data\\\\featureDb\\\\database.json\",\n", + " \"db_def\": \"/pipeline/apfel/strudel/data/strudelDb/database.json\",\n", " \"UUID\": \"u0001\",\n", " \"timestamps\": [\n", " 1570186860,\n", @@ -587,7 +572,6 @@ "start_time": "2021-03-18T10:00:38.499851Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" }, "scrolled": true @@ -598,8 +582,8 @@ "output_type": "stream", "text": [ "=== RMS ===\n", - "request_id 1643d1ddbf3af3fcbb831fc71ca56df5\n", - "from 20191004-13:01.00 to 20191122-13:01.00\n", + "request_id bd831c060faf3d6ca5332be3f17c5c10\n", + "from 1570186860 to 1574424060\n", "\n", "+-------+--------------+------------+------------+------------+---------------+\n", "| | timestamps | rms | rms_dc | dc | utilization |\n", @@ -617,112 +601,8 @@ }, { "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", - "
timestampsrmsrms_dcdcutilization
count5.000000e+0150.00000050.00000050.00000050.0
mean1.572306e+090.6116910.623692-0.1208741.0
std1.261051e+060.0565410.0563820.0141940.0
min1.570187e+090.4845640.497987-0.1405241.0
25%1.571245e+090.6279120.637381-0.1401961.0
50%1.572307e+090.6283070.637800-0.1123161.0
75%1.573366e+090.6468400.661892-0.1096601.0
max1.574424e+090.6476940.662754-0.1090651.0
\n", - "
" - ], - "text/plain": [ - " timestamps rms rms_dc dc utilization\n", - "count 5.000000e+01 50.000000 50.000000 50.000000 50.0\n", - "mean 1.572306e+09 0.611691 0.623692 -0.120874 1.0\n", - "std 1.261051e+06 0.056541 0.056382 0.014194 0.0\n", - "min 1.570187e+09 0.484564 0.497987 -0.140524 1.0\n", - "25% 1.571245e+09 0.627912 0.637381 -0.140196 1.0\n", - "50% 1.572307e+09 0.628307 0.637800 -0.112316 1.0\n", - "75% 1.573366e+09 0.646840 0.661892 -0.109660 1.0\n", - "max 1.574424e+09 0.647694 0.662754 -0.109065 1.0" - ] + "text/plain": " timestamps rms rms_dc dc utilization\ncount 5.000000e+01 50.000000 50.000000 50.000000 50.0\nmean 1.572306e+09 0.611691 0.623692 -0.120874 1.0\nstd 1.261051e+06 0.056541 0.056382 0.014194 0.0\nmin 1.570187e+09 0.484564 0.497987 -0.140524 1.0\n25% 1.571245e+09 0.627912 0.637381 -0.140196 1.0\n50% 1.572307e+09 0.628307 0.637800 -0.112316 1.0\n75% 1.573366e+09 0.646840 0.661892 -0.109660 1.0\nmax 1.574424e+09 0.647694 0.662754 -0.109065 1.0", + "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
timestampsrmsrms_dcdcutilization
count5.000000e+0150.00000050.00000050.00000050.0
mean1.572306e+090.6116910.623692-0.1208741.0
std1.261051e+060.0565410.0563820.0141940.0
min1.570187e+090.4845640.497987-0.1405241.0
25%1.571245e+090.6279120.637381-0.1401961.0
50%1.572307e+090.6283070.637800-0.1123161.0
75%1.573366e+090.6468400.661892-0.1096601.0
max1.574424e+090.6476940.662754-0.1090651.0
\n
" }, "execution_count": 5, "metadata": {}, @@ -754,7 +634,6 @@ "start_time": "2021-03-18T10:00:43.172181Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" }, "scrolled": true @@ -762,10 +641,8 @@ "outputs": [ { "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] + "text/plain": "
", + "image/png": "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85o2qoGJiBQYOnQoL7/8Mps2beLNN9/k9ttvB6BPnz5s3bq11encfvvt3HXXXVx11VX107Zs2cKAAQPo1asXK1asYMmSJfXzqqur2bVr127pzJw5k5tuuom6ujo2bNjAvffey7Rp097CHnYOqoGJiBSorq7m4osvZvr06YwZM4Zx48YBcOaZZ3LuuefSs2dPHnjggRbT+fa3v8369evrg82cOXO48MILWbBgARMnTuSggw5ixowZ9cufc845TJw4kSlTpnDDDTfUT587dy4PPPAAkyZNwsz45je/yT777MOKFe37fDBtrDP0WJk6daoX6wkkIunz9NNPc/DBB5c7G51OsXI1s4fdvXU9UiqQmhBFRCSVFMBERCSVFMBEpOJ0hkcblaSzlqcCmIhUlB49erBp06ZOe9EtNXdn06ZN9OjRo9xZaXfqhSgiFWXEiBHU1NSwYcOGcmel0+jRowcjRowodzbanQKYiFSU6upqxowZ0/KC0uWpCVFERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFKppAHMzI43s5VmtsrM5heZP8/MHo+fv5nZpFLmT0RE0qNkAczMssA1wAnAeOA0MxtfsNhzwLHuPhH4KnBdqfInIiLpUsoa2DRglbuvdvedwI3ASckF3P1v7v5qHF0CdL73/4uISLsoZQAbDqxNjNfEaU35GPCHpmaa2TlmttTMlup3g0REup5SBjArMq3oT66a2b8QAtj5TSXm7te5+1R3nzpkyJB2yqKIiKRFKX/QsgYYmRgfAawvXMjMJgLXAye4+6YS5U1ERFKmlDWwh4CxZjbGzLoBpwK3Jhcws/2Am4EPu/s/Spg3ERFJmZLVwNy91szOA+4EssBCd19uZufG+QuAi4FBwLVmBlDr7lNLlUcREUkPcy/6GCpVpk6d6kuXLi13NkREUsXMHk5zJUFv4hARkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVQqaQAzs+PN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\n" }, "metadata": { "needs_background": "light" @@ -774,9 +651,7 @@ }, { "data": { - "text/plain": [ - "''" - ] + "text/plain": "''" }, "execution_count": 6, "metadata": {}, @@ -808,600 +683,14 @@ "start_time": "2021-03-18T10:00:44.261231Z" }, "pycharm": { - "is_executing": false, "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", - "
timestampsrmsrms_dcdcutilizationdatetime
015701868600.6470860.662108-0.14023712019-10-04 13:01:00+02:00
115702732600.6471230.662183-0.14042012019-10-05 13:01:00+02:00
215703596600.6466190.661652-0.14023912019-10-06 13:01:00+02:00
315704460600.6468730.661923-0.14034712019-10-07 13:01:00+02:00
415705324600.6466430.661714-0.14042312019-10-08 13:01:00+02:00
515706188600.6467170.661709-0.14005512019-10-09 13:01:00+02:00
615707052600.6470930.662171-0.14050512019-10-10 13:01:00+02:00
715707916600.6474220.662463-0.14036312019-10-11 13:01:00+02:00
815708780600.6468900.661977-0.14052412019-10-12 13:01:00+02:00
915709644600.6476940.662754-0.14048612019-10-13 13:01:00+02:00
1015710508600.6470810.662021-0.13985012019-10-14 13:01:00+02:00
1115711372600.6472050.662241-0.14031712019-10-15 13:01:00+02:00
1215712236600.6467430.661800-0.14036512019-10-16 13:01:00+02:00
1315713100600.6473220.662354-0.14031212019-10-17 13:01:00+02:00
1415713964600.6474340.662412-0.14006912019-10-18 13:01:00+02:00
1515714828600.6476210.662666-0.14040312019-10-19 13:01:00+02:00
1615715692600.6471110.662097-0.14007112019-10-20 13:01:00+02:00
1715716556600.4848920.498214-0.11444212019-10-21 13:01:00+02:00
1815717420600.4848410.498232-0.11473612019-10-22 13:01:00+02:00
1915718284600.4847520.498188-0.11492412019-10-23 13:01:00+02:00
2015719148600.4845640.497987-0.11484612019-10-24 13:01:00+02:00
2115720012600.4850010.498362-0.11462412019-10-25 13:01:00+02:00
2215720876600.4850130.498365-0.11458612019-10-26 13:01:00+02:00
2315721776600.4852540.498663-0.11486212019-10-27 13:01:00+01:00
2415722640600.4851570.498494-0.11454012019-10-28 13:01:00+01:00
2515723504600.6278950.637444-0.10992112019-10-29 13:01:00+01:00
2615724368600.6281390.637711-0.11007412019-10-30 13:01:00+01:00
2715725232600.6283080.637796-0.10960412019-10-31 13:01:00+01:00
2815726096600.6280200.637559-0.10987812019-11-01 13:01:00+01:00
2915726960600.6280190.637434-0.10914912019-11-02 13:01:00+01:00
3015727824600.6282830.637805-0.10979412019-11-03 13:01:00+01:00
3115728688600.6281520.637652-0.10965912019-11-04 13:01:00+01:00
3215729552600.6279660.637442-0.10950812019-11-05 13:01:00+01:00
3315730416600.6277350.637333-0.11019112019-11-06 13:01:00+01:00
3415731280600.6278700.637364-0.10959712019-11-07 13:01:00+01:00
3515732144600.6286810.638195-0.10978612019-11-08 13:01:00+01:00
3615733008600.6281270.637629-0.10967012019-11-09 13:01:00+01:00
3715733872600.6281220.637690-0.11005212019-11-10 13:01:00+01:00
3815734736600.6277800.637286-0.10966312019-11-11 13:01:00+01:00
3915735600600.6278460.637342-0.10961112019-11-12 13:01:00+01:00
4015736464600.6285360.638064-0.10985112019-11-13 13:01:00+01:00
4115737328600.6283970.637839-0.10934112019-11-14 13:01:00+01:00
4215738192600.6283070.637736-0.10926312019-11-15 13:01:00+01:00
4315739056600.6281420.637700-0.10999212019-11-16 13:01:00+01:00
4415739920600.6285400.638109-0.11009212019-11-17 13:01:00+01:00
4515740784600.6281180.637618-0.10965812019-11-18 13:01:00+01:00
4615741648600.6284290.637875-0.10937412019-11-19 13:01:00+01:00
4715742512600.6284410.637870-0.10926912019-11-20 13:01:00+01:00
4815743376600.6286010.637995-0.10908112019-11-21 13:01:00+01:00
4915744240600.6279630.637364-0.10906512019-11-22 13:01:00+01:00
\n", - "
" - ], - "text/plain": [ - " timestamps rms rms_dc dc utilization \\\n", - "0 1570186860 0.647086 0.662108 -0.140237 1 \n", - "1 1570273260 0.647123 0.662183 -0.140420 1 \n", - "2 1570359660 0.646619 0.661652 -0.140239 1 \n", - "3 1570446060 0.646873 0.661923 -0.140347 1 \n", - "4 1570532460 0.646643 0.661714 -0.140423 1 \n", - "5 1570618860 0.646717 0.661709 -0.140055 1 \n", - "6 1570705260 0.647093 0.662171 -0.140505 1 \n", - "7 1570791660 0.647422 0.662463 -0.140363 1 \n", - "8 1570878060 0.646890 0.661977 -0.140524 1 \n", - "9 1570964460 0.647694 0.662754 -0.140486 1 \n", - "10 1571050860 0.647081 0.662021 -0.139850 1 \n", - "11 1571137260 0.647205 0.662241 -0.140317 1 \n", - "12 1571223660 0.646743 0.661800 -0.140365 1 \n", - "13 1571310060 0.647322 0.662354 -0.140312 1 \n", - "14 1571396460 0.647434 0.662412 -0.140069 1 \n", - "15 1571482860 0.647621 0.662666 -0.140403 1 \n", - "16 1571569260 0.647111 0.662097 -0.140071 1 \n", - "17 1571655660 0.484892 0.498214 -0.114442 1 \n", - "18 1571742060 0.484841 0.498232 -0.114736 1 \n", - "19 1571828460 0.484752 0.498188 -0.114924 1 \n", - "20 1571914860 0.484564 0.497987 -0.114846 1 \n", - "21 1572001260 0.485001 0.498362 -0.114624 1 \n", - "22 1572087660 0.485013 0.498365 -0.114586 1 \n", - "23 1572177660 0.485254 0.498663 -0.114862 1 \n", - "24 1572264060 0.485157 0.498494 -0.114540 1 \n", - "25 1572350460 0.627895 0.637444 -0.109921 1 \n", - "26 1572436860 0.628139 0.637711 -0.110074 1 \n", - "27 1572523260 0.628308 0.637796 -0.109604 1 \n", - "28 1572609660 0.628020 0.637559 -0.109878 1 \n", - "29 1572696060 0.628019 0.637434 -0.109149 1 \n", - "30 1572782460 0.628283 0.637805 -0.109794 1 \n", - "31 1572868860 0.628152 0.637652 -0.109659 1 \n", - "32 1572955260 0.627966 0.637442 -0.109508 1 \n", - "33 1573041660 0.627735 0.637333 -0.110191 1 \n", - "34 1573128060 0.627870 0.637364 -0.109597 1 \n", - "35 1573214460 0.628681 0.638195 -0.109786 1 \n", - "36 1573300860 0.628127 0.637629 -0.109670 1 \n", - "37 1573387260 0.628122 0.637690 -0.110052 1 \n", - "38 1573473660 0.627780 0.637286 -0.109663 1 \n", - "39 1573560060 0.627846 0.637342 -0.109611 1 \n", - "40 1573646460 0.628536 0.638064 -0.109851 1 \n", - "41 1573732860 0.628397 0.637839 -0.109341 1 \n", - "42 1573819260 0.628307 0.637736 -0.109263 1 \n", - "43 1573905660 0.628142 0.637700 -0.109992 1 \n", - "44 1573992060 0.628540 0.638109 -0.110092 1 \n", - "45 1574078460 0.628118 0.637618 -0.109658 1 \n", - "46 1574164860 0.628429 0.637875 -0.109374 1 \n", - "47 1574251260 0.628441 0.637870 -0.109269 1 \n", - "48 1574337660 0.628601 0.637995 -0.109081 1 \n", - "49 1574424060 0.627963 0.637364 -0.109065 1 \n", - "\n", - " datetime \n", - "0 2019-10-04 13:01:00+02:00 \n", - "1 2019-10-05 13:01:00+02:00 \n", - "2 2019-10-06 13:01:00+02:00 \n", - "3 2019-10-07 13:01:00+02:00 \n", - "4 2019-10-08 13:01:00+02:00 \n", - "5 2019-10-09 13:01:00+02:00 \n", - "6 2019-10-10 13:01:00+02:00 \n", - "7 2019-10-11 13:01:00+02:00 \n", - "8 2019-10-12 13:01:00+02:00 \n", - "9 2019-10-13 13:01:00+02:00 \n", - "10 2019-10-14 13:01:00+02:00 \n", - "11 2019-10-15 13:01:00+02:00 \n", - "12 2019-10-16 13:01:00+02:00 \n", - "13 2019-10-17 13:01:00+02:00 \n", - "14 2019-10-18 13:01:00+02:00 \n", - "15 2019-10-19 13:01:00+02:00 \n", - "16 2019-10-20 13:01:00+02:00 \n", - "17 2019-10-21 13:01:00+02:00 \n", - "18 2019-10-22 13:01:00+02:00 \n", - "19 2019-10-23 13:01:00+02:00 \n", - "20 2019-10-24 13:01:00+02:00 \n", - "21 2019-10-25 13:01:00+02:00 \n", - "22 2019-10-26 13:01:00+02:00 \n", - "23 2019-10-27 13:01:00+01:00 \n", - "24 2019-10-28 13:01:00+01:00 \n", - "25 2019-10-29 13:01:00+01:00 \n", - "26 2019-10-30 13:01:00+01:00 \n", - "27 2019-10-31 13:01:00+01:00 \n", - "28 2019-11-01 13:01:00+01:00 \n", - "29 2019-11-02 13:01:00+01:00 \n", - "30 2019-11-03 13:01:00+01:00 \n", - "31 2019-11-04 13:01:00+01:00 \n", - "32 2019-11-05 13:01:00+01:00 \n", - "33 2019-11-06 13:01:00+01:00 \n", - "34 2019-11-07 13:01:00+01:00 \n", - "35 2019-11-08 13:01:00+01:00 \n", - "36 2019-11-09 13:01:00+01:00 \n", - "37 2019-11-10 13:01:00+01:00 \n", - "38 2019-11-11 13:01:00+01:00 \n", - "39 2019-11-12 13:01:00+01:00 \n", - "40 2019-11-13 13:01:00+01:00 \n", - "41 2019-11-14 13:01:00+01:00 \n", - "42 2019-11-15 13:01:00+01:00 \n", - "43 2019-11-16 13:01:00+01:00 \n", - "44 2019-11-17 13:01:00+01:00 \n", - "45 2019-11-18 13:01:00+01:00 \n", - "46 2019-11-19 13:01:00+01:00 \n", - "47 2019-11-20 13:01:00+01:00 \n", - "48 2019-11-21 13:01:00+01:00 \n", - "49 2019-11-22 13:01:00+01:00 " - ] + "text/plain": " timestamps rms rms_dc dc utilization \\\n0 1570186860 0.647086 0.662108 -0.140237 1 \n1 1570273260 0.647123 0.662183 -0.140420 1 \n2 1570359660 0.646619 0.661652 -0.140239 1 \n3 1570446060 0.646873 0.661923 -0.140347 1 \n4 1570532460 0.646643 0.661714 -0.140423 1 \n5 1570618860 0.646717 0.661709 -0.140055 1 \n6 1570705260 0.647093 0.662171 -0.140505 1 \n7 1570791660 0.647422 0.662463 -0.140363 1 \n8 1570878060 0.646890 0.661977 -0.140524 1 \n9 1570964460 0.647694 0.662754 -0.140486 1 \n10 1571050860 0.647081 0.662021 -0.139850 1 \n11 1571137260 0.647205 0.662241 -0.140317 1 \n12 1571223660 0.646743 0.661800 -0.140365 1 \n13 1571310060 0.647322 0.662354 -0.140312 1 \n14 1571396460 0.647434 0.662412 -0.140069 1 \n15 1571482860 0.647621 0.662666 -0.140403 1 \n16 1571569260 0.647111 0.662097 -0.140071 1 \n17 1571655660 0.484892 0.498214 -0.114442 1 \n18 1571742060 0.484841 0.498232 -0.114736 1 \n19 1571828460 0.484752 0.498188 -0.114924 1 \n20 1571914860 0.484564 0.497987 -0.114846 1 \n21 1572001260 0.485001 0.498362 -0.114624 1 \n22 1572087660 0.485013 0.498365 -0.114586 1 \n23 1572177660 0.485254 0.498663 -0.114862 1 \n24 1572264060 0.485157 0.498494 -0.114540 1 \n25 1572350460 0.627895 0.637444 -0.109921 1 \n26 1572436860 0.628139 0.637711 -0.110074 1 \n27 1572523260 0.628308 0.637796 -0.109604 1 \n28 1572609660 0.628020 0.637559 -0.109878 1 \n29 1572696060 0.628019 0.637434 -0.109149 1 \n30 1572782460 0.628283 0.637805 -0.109794 1 \n31 1572868860 0.628152 0.637652 -0.109659 1 \n32 1572955260 0.627966 0.637442 -0.109508 1 \n33 1573041660 0.627735 0.637333 -0.110191 1 \n34 1573128060 0.627870 0.637364 -0.109597 1 \n35 1573214460 0.628681 0.638195 -0.109786 1 \n36 1573300860 0.628127 0.637629 -0.109670 1 \n37 1573387260 0.628122 0.637690 -0.110052 1 \n38 1573473660 0.627780 0.637286 -0.109663 1 \n39 1573560060 0.627846 0.637342 -0.109611 1 \n40 1573646460 0.628536 0.638064 -0.109851 1 \n41 1573732860 0.628397 0.637839 -0.109341 1 \n42 1573819260 0.628307 0.637736 -0.109263 1 \n43 1573905660 0.628142 0.637700 -0.109992 1 \n44 1573992060 0.628540 0.638109 -0.110092 1 \n45 1574078460 0.628118 0.637618 -0.109658 1 \n46 1574164860 0.628429 0.637875 -0.109374 1 \n47 1574251260 0.628441 0.637870 -0.109269 1 \n48 1574337660 0.628601 0.637995 -0.109081 1 \n49 1574424060 0.627963 0.637364 -0.109065 1 \n\n datetime \n0 2019-10-04 13:01:00+02:00 \n1 2019-10-05 13:01:00+02:00 \n2 2019-10-06 13:01:00+02:00 \n3 2019-10-07 13:01:00+02:00 \n4 2019-10-08 13:01:00+02:00 \n5 2019-10-09 13:01:00+02:00 \n6 2019-10-10 13:01:00+02:00 \n7 2019-10-11 13:01:00+02:00 \n8 2019-10-12 13:01:00+02:00 \n9 2019-10-13 13:01:00+02:00 \n10 2019-10-14 13:01:00+02:00 \n11 2019-10-15 13:01:00+02:00 \n12 2019-10-16 13:01:00+02:00 \n13 2019-10-17 13:01:00+02:00 \n14 2019-10-18 13:01:00+02:00 \n15 2019-10-19 13:01:00+02:00 \n16 2019-10-20 13:01:00+02:00 \n17 2019-10-21 13:01:00+02:00 \n18 2019-10-22 13:01:00+02:00 \n19 2019-10-23 13:01:00+02:00 \n20 2019-10-24 13:01:00+02:00 \n21 2019-10-25 13:01:00+02:00 \n22 2019-10-26 13:01:00+02:00 \n23 2019-10-27 13:01:00+01:00 \n24 2019-10-28 13:01:00+01:00 \n25 2019-10-29 13:01:00+01:00 \n26 2019-10-30 13:01:00+01:00 \n27 2019-10-31 13:01:00+01:00 \n28 2019-11-01 13:01:00+01:00 \n29 2019-11-02 13:01:00+01:00 \n30 2019-11-03 13:01:00+01:00 \n31 2019-11-04 13:01:00+01:00 \n32 2019-11-05 13:01:00+01:00 \n33 2019-11-06 13:01:00+01:00 \n34 2019-11-07 13:01:00+01:00 \n35 2019-11-08 13:01:00+01:00 \n36 2019-11-09 13:01:00+01:00 \n37 2019-11-10 13:01:00+01:00 \n38 2019-11-11 13:01:00+01:00 \n39 2019-11-12 13:01:00+01:00 \n40 2019-11-13 13:01:00+01:00 \n41 2019-11-14 13:01:00+01:00 \n42 2019-11-15 13:01:00+01:00 \n43 2019-11-16 13:01:00+01:00 \n44 2019-11-17 13:01:00+01:00 \n45 2019-11-18 13:01:00+01:00 \n46 2019-11-19 13:01:00+01:00 \n47 2019-11-20 13:01:00+01:00 \n48 2019-11-21 13:01:00+01:00 \n49 2019-11-22 13:01:00+01:00 ", + "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
timestampsrmsrms_dcdcutilizationdatetime
015701868600.6470860.662108-0.14023712019-10-04 13:01:00+02:00
115702732600.6471230.662183-0.14042012019-10-05 13:01:00+02:00
215703596600.6466190.661652-0.14023912019-10-06 13:01:00+02:00
315704460600.6468730.661923-0.14034712019-10-07 13:01:00+02:00
415705324600.6466430.661714-0.14042312019-10-08 13:01:00+02:00
515706188600.6467170.661709-0.14005512019-10-09 13:01:00+02:00
615707052600.6470930.662171-0.14050512019-10-10 13:01:00+02:00
715707916600.6474220.662463-0.14036312019-10-11 13:01:00+02:00
815708780600.6468900.661977-0.14052412019-10-12 13:01:00+02:00
915709644600.6476940.662754-0.14048612019-10-13 13:01:00+02:00
1015710508600.6470810.662021-0.13985012019-10-14 13:01:00+02:00
1115711372600.6472050.662241-0.14031712019-10-15 13:01:00+02:00
1215712236600.6467430.661800-0.14036512019-10-16 13:01:00+02:00
1315713100600.6473220.662354-0.14031212019-10-17 13:01:00+02:00
1415713964600.6474340.662412-0.14006912019-10-18 13:01:00+02:00
1515714828600.6476210.662666-0.14040312019-10-19 13:01:00+02:00
1615715692600.6471110.662097-0.14007112019-10-20 13:01:00+02:00
1715716556600.4848920.498214-0.11444212019-10-21 13:01:00+02:00
1815717420600.4848410.498232-0.11473612019-10-22 13:01:00+02:00
1915718284600.4847520.498188-0.11492412019-10-23 13:01:00+02:00
2015719148600.4845640.497987-0.11484612019-10-24 13:01:00+02:00
2115720012600.4850010.498362-0.11462412019-10-25 13:01:00+02:00
2215720876600.4850130.498365-0.11458612019-10-26 13:01:00+02:00
2315721776600.4852540.498663-0.11486212019-10-27 13:01:00+01:00
2415722640600.4851570.498494-0.11454012019-10-28 13:01:00+01:00
2515723504600.6278950.637444-0.10992112019-10-29 13:01:00+01:00
2615724368600.6281390.637711-0.11007412019-10-30 13:01:00+01:00
2715725232600.6283080.637796-0.10960412019-10-31 13:01:00+01:00
2815726096600.6280200.637559-0.10987812019-11-01 13:01:00+01:00
2915726960600.6280190.637434-0.10914912019-11-02 13:01:00+01:00
3015727824600.6282830.637805-0.10979412019-11-03 13:01:00+01:00
3115728688600.6281520.637652-0.10965912019-11-04 13:01:00+01:00
3215729552600.6279660.637442-0.10950812019-11-05 13:01:00+01:00
3315730416600.6277350.637333-0.11019112019-11-06 13:01:00+01:00
3415731280600.6278700.637364-0.10959712019-11-07 13:01:00+01:00
3515732144600.6286810.638195-0.10978612019-11-08 13:01:00+01:00
3615733008600.6281270.637629-0.10967012019-11-09 13:01:00+01:00
3715733872600.6281220.637690-0.11005212019-11-10 13:01:00+01:00
3815734736600.6277800.637286-0.10966312019-11-11 13:01:00+01:00
3915735600600.6278460.637342-0.10961112019-11-12 13:01:00+01:00
4015736464600.6285360.638064-0.10985112019-11-13 13:01:00+01:00
4115737328600.6283970.637839-0.10934112019-11-14 13:01:00+01:00
4215738192600.6283070.637736-0.10926312019-11-15 13:01:00+01:00
4315739056600.6281420.637700-0.10999212019-11-16 13:01:00+01:00
4415739920600.6285400.638109-0.11009212019-11-17 13:01:00+01:00
4515740784600.6281180.637618-0.10965812019-11-18 13:01:00+01:00
4615741648600.6284290.637875-0.10937412019-11-19 13:01:00+01:00
4715742512600.6284410.637870-0.10926912019-11-20 13:01:00+01:00
4815743376600.6286010.637995-0.10908112019-11-21 13:01:00+01:00
4915744240600.6279630.637364-0.10906512019-11-22 13:01:00+01:00
\n
" }, "execution_count": 7, "metadata": {}, @@ -1433,7 +722,6 @@ "start_time": "2021-03-18T10:00:47.324848Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -1708,7 +996,7 @@ } ], "source": [ - "print(json.dumps(pretty_result.results(), sort_keys=False, indent=4)) # Pretty but pretty long" + "print(json.dumps(pretty_result.results(), sort_keys=False, indent=4)) # Pretty but long" ] }, { @@ -1729,7 +1017,6 @@ "start_time": "2021-03-18T10:00:50.909661Z" }, "pycharm": { - "is_executing": false, "name": "#%%\n" } }, @@ -1738,15 +1025,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "Waiting for {'request_id': '35ffa9730d671736e8393a1946ba275f', 'request_status': 'queued'}\n", + "Waiting for {'request_id': '8f45d56950eea95e8382b57d1aec5746', 'request_status': 'queued'}\n", "{\n", " \"status\": \"successful\",\n", - " \"request_id\": \"35ffa9730d671736e8393a1946ba275f\",\n", + " \"request_id\": \"8f45d56950eea95e8382b57d1aec5746\",\n", " \"feature\": \"BlackSheep\",\n", " \"results\": {\n", " \"atypical_assets\": [\n", " {\n", - " \"uuid\": \"u0003\",\n", " \"timestamps\": [\n", " 1570186860,\n", " 1570273260,\n", @@ -1800,11 +1086,11 @@ " 1574424060\n", " ],\n", " \"labels\": [\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", " 2,\n", " 2,\n", " 2,\n", @@ -1815,25 +1101,6 @@ " 2,\n", " 2,\n", " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", " 0,\n", " 0,\n", " 0,\n", @@ -1849,7 +1116,26 @@ " 0,\n", " 0,\n", " 0,\n", - " 0\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1\n", " ],\n", " \"atypical\": [\n", " false,\n", @@ -1902,10 +1188,10 @@ " false,\n", " false,\n", " false\n", - " ]\n", + " ],\n", + " \"source_id\": \"u0003\"\n", " },\n", " {\n", - " \"uuid\": \"u0002\",\n", " \"timestamps\": [\n", " 1570186860,\n", " 1570273260,\n", @@ -1959,38 +1245,38 @@ " 1574424060\n", " ],\n", " \"labels\": [\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", " 2,\n", " 2,\n", " 2,\n", " 2,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", + " 0,\n", " 2,\n", " 2,\n", " 2,\n", @@ -2061,7 +1347,8 @@ " false,\n", " false,\n", " false\n", - " ]\n", + " ],\n", + " \"source_id\": \"u0002\"\n", " }\n", " ]\n", " },\n", @@ -2801,7 +2088,7 @@ "print(f\"Waiting for {analysis_request}\")\n", "session.wait_for_analyses([analysis_request[\"request_id\"]])\n", "raw_result = session.get_analysis_results(analysis_request[\"request_id\"])\n", - "print(json.dumps(raw_result, sort_keys=False, indent=4)) # Pretty but pretty long\n", + "print(json.dumps(raw_result, sort_keys=False, indent=4)) # Pretty but long\n", " " ] }, @@ -2824,9 +2111,6 @@ "ExecuteTime": { "end_time": "2021-03-18T10:00:53.012148Z", "start_time": "2021-03-18T10:00:52.486345Z" - }, - "pycharm": { - "is_executing": false } }, "outputs": [ @@ -2835,7 +2119,7 @@ "output_type": "stream", "text": [ "=== BlackSheep ===\n", - "request_id 35ffa9730d671736e8393a1946ba275f\n", + "request_id 8f45d56950eea95e8382b57d1aec5746\n", "\n", "+----+----------+------------+\n", "| | source | atypical |\n", @@ -2867,7 +2151,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "c:\\users\\viking\\repos\\mvg\\mvg\\analysis_classes.py:131: SettingWithCopyWarning: \n", + "C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\mvg\\analysis_classes.py:131: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", @@ -2877,10 +2161,8 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb0AAAEoCAYAAADMhS+0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3dd7wU1fnH8c9DR+lSIk2sGDCIQQUTo0ZULKhooj+7JBp7rySxoFFDrLEEBRMr9t5bUGOM3WjsXRQEURQEVBDk+f1xzsKw7t66d3bvne/79drXvXtmduacZ8oz5eysuTsiIiJZ0KzcFRAREUmLkp6IiGSGkp6IiGSGkp6IiGSGkp6IiGSGkp6IiGRGppKeme1pZg+XYDpuZmuUok5NSTniUup5mlm/OM35ZnZAiab5czN7N05zlJn1MLMnzGyemZ1Xinmkwcw2M7Np5a6HpKeSl7mZHWxmM+N2tZKZvW9m35nZpKo+VzFJz8weN7PZZtY6r3yKmW1Rinm4+3XuvlUpplUdM7vKzBabWc8Gns9oM3uyIedRCnH5upmtm1d+ZyzfrExVK6aTu08EMLMBZvZCXD9nm9k/zWxAbkQzG2tmi+LGl3utlpjW6cAl7t7O3e8EDgBmAR3c/djqKmJmPzOz52KSfMXMNk4M+0PefL81syVm1jUOP9vMpprZXDP7yMz+mDftwWb2opl9E/8Ork2QzGw3M3vTzL6OO51fxPI98+r1TVzOQ+LwX5rZY2b2lZlNyZtm37zPzo+fPTbx2VfNbI6ZfWFmd5hZr7xpbGFm/431mmpmu9awPV3M7CYzmxVf15lZhzisq5n9J85zjpk9bWY/T3y2tZldYGbT43oy3sxaJoZPMrMZcVm8Y2b71yLOu5rZUzGOjxcYvr2ZvRZj9VRy/cwb79EYyxZ55QWXY32Y2VpmdpeZfW5mX5rZQ2bWPzH8srxlvNDM5iWGP25mCxLD304MawmcD2wVt6sv3H114KxqK+buZX8B/YDvgS+BXfKGTQG2KHcd8+rkwBpVDF8RmAd8ARzfwHUZDTxZ7phUFxfgceBt4LxE2UrAp8BnwGYNsSzqML1+cZotEmWdYrkBzYEjgFcSw8cCk6qY5nvJdRj4O3BGDevThZAgd4nz3guYDXQuMv5Y4NHE+/7AivH/XsDrwM7xfSvgI+BooHVs10dAqyLT3gyYlni/ZRx/GOEAuhfQq4r19H3A4vsNgb0JBwBTqonBqnH/0C++7wH0jP+3Bs4G7k6MPyCuU9sALeJ6tnoN4z0eeBjoAHQE/gmcH4e1ifFsFteFUYR9Vos4/FTg33GZdQOeAU5LTHsg0Dr+v3Zc94fUsF5bALsCpwCP5w1bE5gLbBzb+/u4zrXIG29P4Al+uH4XXY75y7yW29KGwH4xHi2BPwFvVTH+VcAVifePA/sXGbd3fjtqsi26e8UkvVOA/xAy972J8muBJcC3wHzgBOA+4PC8z78CjIr/O2Hj/YCwszgHaJbY8J5MfG4g8EhccWcCf0gsrKeBOcAM4BISOwKqT3r7AFOBI4HXCqwIL8SVdGbeBjWJkCjnAM8DPeKwjsA/Yl0+Ac4g7AB/DCwg7BDmA3Pi+NsCbxAS7yfAcUXquTrwaJznLOA6whlObvgU4LgY36+Am4A2ieHHxzpNB35bVVziCnwKMA1oHssOAy6NZZvFstbAX+M0p8f/W9dknvGz5wIfx9heBrSNw7oC98bYfknYOTUrUM9+FNiYEsNbAIcC39RkQyPs6JPr8A3AIuC7+H4LqljfgJHA63nTfAfYr8C8LM5v3yJ16QW8CpwQ328V1w9LjPMxsHX8vy1hRzQ7rk/Hs3zSe6pQPYrM+zHg1ALlW1B90jsVeKzIsNbAn4E3EmXXA3+qYnrDYt3nAP8jccAFPAAcknh/KPBQgWk0A7aP60r3WPYCiYN2YA9gapE69I/Letf4vnNcPz+P8b4X6F3gc/vzw6R3GHBfXt2+BYYnyjrG9WZY/vpd1XIkJj3gD4R9xBRgz8Tw7YCXCPuzqcDYKuLeJc57pQLDcicKm+btM36Q9IC1gK/jtOaz/EHeWBpJ0nsPOAQYQtgh9EgMm8LyR8m7As8m3q9L2GnndhIeN7AuQN+4oPePw0YTkx7QPq50xxISTntgaBw2JK4cLQg7wTeBoxLzrC7pTSYcffYAFgM/TQx7Gtg7/t8OGBb/PxC4B1iBkNCGEC5/AdwJTIgrRnfgOeDA/DYl5jED+EViY/ppkXquQTjKa004Mn0C+Gte7J8DesZ4vgkcFIdtTUgs68R6XV9VXHIrMOEoeptY9hywEcsnvdMJR8jdY52eIu7AqpsnIUHeHevaPsbzz3HYnwlJsGV8/YLEzj5Rz34USXqEneRiQhI7KW9D+4qQTF8HDs773BSWX4evInGmRxXrG2HH+kbe9N4FLihQv00IO4F2eeVjYrkTDgZ7x/KjgQfyxr0XODb+P45lZy59gNeISY+wjn4Xp/1eXIaXEA8y8qa5CuHAbNUCw2qS9N4HRueV9Y3LYwlhnzE6MewDwlnFq4RtYRLQJQ7rRdhfbEtIDlvG993i8JHA/YTtpjPhoPCovHm/EtvuwOWJ8heJSSy+3zOO0zFRNh74Jpb/N7esCGejvyJs/+2BW4A7C8SiUNI7HLg/8b454WD4yETZ3+Ly7kdi/a5uORKS3mLCCUlrYFNCwumfGP6TGMtBhO1zVJHlOAqYUWTYPnG5JQ/AHiccBMwinBRtVt12SmNIeoRT8kVA1/j+LeDoKnYYrQk7lzXj+3OB8YnhTjxSje8PASbH/0ezLOntDrxUwzoeBdyRN49iO/e+hA1xcHz/EHBhYvgTwGm59ibKf0vYwQ/KK+8BLCSxM4l1fyy/TYnhHxOSaIdaLotRyZjE2O+VeH82cFn8/wpgXGLYWtXE5XHCBrsX4WynP/BOHJZMeu8D2yY+N4K4U6xqnoSznK9JXMYiJNQP4/+nA3cVq191G1Ni+IpxndouUTaAcGDQHPgZYUe7exXr8FVUcXkzub4RdoZz4jJvCewb168JBT73D+CqItM0YL247rWPZScDN+aNdx3xaJ2wE0puSwewLOn1jHF6AViZcCb9H+DMAvM+mbwddWJYlUmPcHDyg0SeGN4FOJF48BjLvosxX4twYHkbcF0cdiJwbd40HiKeHcd2/TPGeAnhStAPLvcSDpR3J3FWTbgC8x/CwdqPgGdjjFbO+2xzwn7vJKBlkXYNBmYXKC+U9NYmrPubES5Znxzr/vs4fH3gZZYdVCWTXpXLkWVJb8XE/G4GTi5S779S+ICsN+Gqwu5FPjeZvLNEYCjhAKA1Yb2fR9y+89uR+MxYqkl6ldCRZV/gYXefFd9fH8sKcveFhKDvZWbNCCvetXmjTU38/xFhwebrQ9jB/kC8AXuvmX1qZnMJN0e71qQxhPsUb7r7y/H9dcAeiRva+xE2xrfM7HkzGxnLryVsfDfGG+Fnx8+sQtjZzYg3z+cQzvq6V1GHXxGOZD8ys3+Z2UZF2tndzG40s09iOycVaOenif+/IexEIMQ0P841cTuwOeHoNH+55aabnFZy+VU1z26Eo+QXE3F6MJZDuMz9HvCwmX1gZmNqWN/luPvXhDPGa8yseyx7w92nu/v37v4UcCHw65pOs6r1zd2/AHYEjiEcRW9N2ClPy5tGW8J9v6uL1Nvd/SXCZa/TYvF8wr2rpA6EnQtUHe9v49+L3X1G3H7PJ6x3+fYpVq8a2Be4zd3nFxro7l/Gad+V6JzxLXClu78TP3dWol6rALvk1pG4nmxM2OFDOMN6h7Cz7UDYR/ygN6C7L3D3G4Axtqxz1pmES30vEw5g7yQc0H+W99nv3f1JQiI4GMDMVjCzCRY6G80lHBx3MrPm1QXI3d+KcbqEcMDVlXA5elrcR44nnPUtLvDxmizH2XG9z1m6TZrZ0Ngh6XMz+wo4iLx9iJl1I1zhGR9jRt7wPoQzyGvy2vWsu89z94XufjUhGRdav2qlrEkvbqi7ApvGDf5Twin4uokVyQt89GrCpYPhhHsrT+cN75P4vy/h/k++qYR7WoVcSjjjXNPdOxCuZ1sNmgRhA18t0Z7zCSvBNgDu/q67705IWn8BbjWzFd19kbuf5u4DCGcLI1l2b3Ah4cywU3x1cPeBcX4/iI+7P+/uO8Z53Ek4SCjkz/Hzg2I796pFO2fwwzhXy92/Idw3OZjCSW86YceUnG5u+VU1z1mEDXhgIk4d3b1dnO88dz/W3VcjXDI8xsyG16TOBTQjJNheRYY7NY8jVLO+ufu/3H0Dd+9COKjqT7g0nLQz4QrI49XMqwXL1vvXgUFmlqzroFgOVcTb3WcTEm+h7XOp2LuxJ3BrNfUq9NkqE3lCC8K6nkvgr1RRr6mEM71OideK7j4uDl+XcBb9dUyYl1H1jrYlsBqAu3/r7oe5e6+4nn0BvOju31dR79yyOJawXIfGdWCTWF6j9cjdb3X3ddx9JcI90FUI/QI6EM70bor7o+fjR6aZ2S9quBw7m9mKiffJbfJ6wi2FPu7ekRCvpXU2s86EhHe3u59ZZPr7AE+5+wfVNZPabVcFlftMbxThWv8Awun8YELnjH8TAgHh6DbZ/ZuY5JYA51F4x3m8mXWORxBHEjpg5LsX+JGZHRW7Grc3s6FxWHvCjdn5ZrY28WisOvGManVCx4Rce9YhcfZqZnuZWTd3X0K4bAXwvYVu2D+JR3ZzCUeI37v7DMJKc56ZdTCzZma2upltmohPbzNrFaffykJ38Y7uvihOq9hG157YAcZCl+/ja9LO6GZgtIXu/CsQNrSa+gPhhvWUAsNuAE4ys24Wut2fwrIj7aLzjPG8HLggdwZmZr3MbET8f6SZrRF38LmYFIvLcsxsSzNbz8yaW+i+fj6hs8GbcfiOcX0zM9uQ0JHqrlrEo8r1Lc67ZZz3uYRLjA/lTWNf4BqP13ji55qZ2YF5dTuUcCkJQoL8HjgibgOHxfJH49+bgd/Hz/cmnJ0nXQkcHq8YdCZclr23QL1uc/d5ycJYtzaEpGFm1ia3DifsRNhGHsv77M5m1j9OoxthebwUz/py9fqNma0W15MTE/WaBGxvZiPi8mxj4btovePw54H9zaxtTLoHEDq7YGbDzGzjuI21NbMTCbcfno3De5lZzxjrYYTLjKfGYd0tfC2gXZzvCMJVqlys2xMO2uaYWRfytqdcXQmJslmsd/LrEEPiON0IV4LuiWeAXxEOOnL7o1wCH5KrNzVbjqfFdv+CcEB+S6LeX7r7grh+7ZGoUwfC1av/uHtVV1b2IVzyT7a3U1xGbcyshZntSTgQyF/va6+qa58N/SJcfjqvQPmuhMtqLQiXdj4mrPzHJcY5iZD5V8v7rLOs9+YXhMSY6y04muV7b65D2AHMjvMbE8s3IRx5zyck4NPzPlfw3hXhKOe2AuUbEs7WuhA2us/itF9nWa/T3Qld+r8mJLKLWHbdvSPLejl+RbiEslsc1orQo/VLwtlOqxjX2YQd6fPAxkXiP5Bw830+4ZLMsSzfO28Ky9+LGkviejnh5ven1Lz3ZrHux8l7em1i22fE10Us32O06DzjZ8+Ky34uISkdEYcdHdvzdZxfsXsS/fhh77ZdEuvD54SODoMSw28grGvz43hH5E0zP45XsXxHlurWtxvics/1oO2eN/1ehPsua+SVN4vrwpdx2u8QzyIT46wX14FvCR0r1ksMW4FwyWkOhXtvtiRcOpsTl0n+smoThw0vEOfNYpyTr8fzxnmIAr0wCcn3w7gsPwVuBFbJG+e0uKw+JxwYd04MGwr8K8blc8L20zcOW5XQAeqLOPxBlvUf2JSQAOfFYf8CNslbjlMItwHeZvlejt3i+HMI6+arwO8Sw3sStpHccjqQ5e+9jS4Qr6sSn38yUa8JJO7B1WD9LrocWdZ784+E/cvHxI54cfivCZc75xES5SXEfQThgMfjcpqfePVNfH6jOLx9Xj27EfZd82K9ngG2rKodhfZRhV6578w0Oma2D3CAu2+cV+6ElfS98tRMGjMzW4Www1pA+I7l5WWukojUgIUvr/cCbnb33xYbr0WxAZUsXrI4hHB0IlIy7v4R4QxFRBoRd+9f/Vjlv6dXa/Fa+OeES4DXl7k6IiLSiDTay5siIiK11ejO9EREROqqUd7Ta0itrLW3YcXqR5SSWmvQN6nN651XVkhtXhJo+TZtC/ia73xhvb9DlwZd3szTwbr40Dp/Z1nq6qHpL1c/UomM6FmrX8+REtDybdqe9cnM9S8bRdLT5U0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REckMJT0REcmMikt6ZtbFzB4xs3fj386JYb83s/fM7G0zG5EoH2Jmr8ZhF5mZxfJjzOwNM3vFzCab2SrlaJOIiFSGikt6wBhgsruvCUyO7zGzAcBuwEBga2C8mTWPn7kUOABYM762juUvAeu7+yDgVuDstBohIiKVp2xJz8z6mdlriffHmdlYYEfg6lh8NTAq/r8jcKO7L3T3D4H3gA3NbGWgg7s/7e4OXJP7jLs/5u7fxM8/A/Ru6HaJiEjlqsQzvR7uPgMg/u0ey3sBUxPjTYtlveL/+eX59gMeKDRDMzvAzF4wsxcWsbCe1RcRkUrVotwVqAUrUOZVlC/7oNlewPrApoUm7O4TgYkAHayLFxpHREQav3Ke6S3Om3+b+HdmvGRJ/PtZLJ8G9EmM3xuYHst7FygnTmML4I/ADu6u0zgRkQwrZ9KbCXQ3s5XMrDUwMpbfDewb/98XuCtRvpuZtTazVQkdVp6Ll0Dnmdmw2Gtzn9xnzGw9YAIh4eWSp4iIZFTZLm+6+yIzOx14FvgQeCsOGgfcbGb7AR8Du8TxXzezm4E3CGeJh7r79/EzBwNXAW0J9+1y9+7OAdoBt8RvMXzs7js0cNNERKRClfWenrtfBFxUYNDwIuOfCZxZoPwFYJ0C5VvUt44iItJ0VGLvTRERkQahpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpmhpCciIpnRotwVkB96aPrL5a5CxRjRc3C5qyAloOUolUJneiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhlKeiIikhkVl/TMrIuZPWJm78a/nRPDfm9m75nZ22Y2IlE+xMxejcMuMjOL5QfF8pfN7EkzG1CONomISGWouKQHjAEmu/uawOT4npiwdgMGAlsD482sefzMpcABwJrxtXUsv97df+Lug4GzgfNTa4WIiFScsiU9M+tnZq8l3h9nZmOBHYGrY/HVwKj4/47Aje6+0N0/BN4DNjSzlYEO7v60uztwTe4z7j43McsVAW/INomISGVrUe4KFNDD3WcAuPsMM+sey3sBzyTGmxbLFsX/88sBMLNDgWOAVsDmhWZoZgcQzhRpwwqlaYWIiFScSry8WYwVKPMqysM/7n9z99WBE4GTCk3Y3Se6+/ruvn5LWpeksiIiUnnKmfQW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\n", - "text/plain": [ - "
" - ] + "text/plain": "
", + "image/png": "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ckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREcqNdpRPQGjz88SuVTkKzMaLvsEonQUpA+1GaKz2piYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbjR5UDOz3mb2iJm9m/72yow71szeM7O3zWxEZvjqZvZaGneemVkaflAa/oqZ/dvMBjd1+kVEpOUox5PaMcCj7r488Gj6TgpIuwBDgJHARWbWNs1zMXAAsHz6jEzDb3T3ld19GHA68NcypF9ERFqIkgU1MxtoZq9nvv/GzE4ERgHXpsHXAtum/0cBN7v7LHf/AHgPWMvMlgC6u/sz7u7AdYV53H1aZpVdAC9V+kVEpOVrV4Z1LObukwHcfbKZLZqG9wOezUw3MQ2bnf4vHg6Amf0KOBLoAGzShOkWEZEWppINRayKYV7D8PjH/UJ3Xxb4HfDHKhdsdoCZvWhmL85mVkkSKyIizV8pg9qcouV1Sn8/TUWKpL+fpeETgQGZ6fsDH6fh/asYXuxm5hdlLsDdL3P3Ndx9jfZ0rO92iIhIC1XKoPYpsKiZLWxmHYGt0vB7gNHp/9HA3Znhu5hZRzNbmmgQ8nwqqpxuZuukVo97FeYxs+Uz69sS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\n" }, "metadata": { "needs_background": "light" @@ -2889,9 +2171,7 @@ }, { "data": { - "text/plain": [ - "''" - ] + "text/plain": "''" }, "execution_count": 10, "metadata": {}, @@ -2900,7 +2180,7 @@ ], "source": [ "# Parse\n", - "pretty_result = parse_results(raw_result, \"Europe/Stockholm\", \"s\")\n", + "pretty_result = analysis_classes.parse_results(raw_result, \"Europe/Stockholm\", \"s\")\n", "# Show summary\n", "pretty_result.summary()\n", "pretty_result.plot()" @@ -2917,20 +2197,22 @@ { "cell_type": "code", "execution_count": 11, - "metadata": {}, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Saving BlackSheep object to 35ffa9730d671736e8393a1946ba275f.pkl\n" + "Saving BlackSheep object to 8f45d56950eea95e8382b57d1aec5746.pkl\n" ] }, { "data": { - "text/plain": [ - "'35ffa9730d671736e8393a1946ba275f.pkl'" - ] + "text/plain": "'8f45d56950eea95e8382b57d1aec5746.pkl'" }, "execution_count": 11, "metadata": {}, @@ -2938,15 +2220,10 @@ } ], "source": [ - "pretty_result.save_pkl()" + "pretty_result.save_pkl()\n", + "\n", + "\n" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { @@ -2967,15 +2244,6 @@ "pygments_lexer": "ipython3", "version": "3.8.6" }, - "pycharm": { - "stem_cell": { - "cell_type": "raw", - "metadata": { - "collapsed": false - }, - "source": [] - } - }, "toc": { "base_numbering": 1, "nav_menu": {}, @@ -3021,4 +2289,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/docs/source/content/examples/analysis_visual.ipynb b/docs/source/content/examples/analysis_visual.ipynb index 0f574a1e..363675c2 100644 --- a/docs/source/content/examples/analysis_visual.ipynb +++ b/docs/source/content/examples/analysis_visual.ipynb @@ -251,7 +251,7 @@ "outputs": [ { "data": { - "text/plain": "{'request_id': '2f8ef4370ca6f16ee30a71cf55645b02', 'request_status': 'queued'}" + "text/plain": "{'request_id': 'bd831c060faf3d6ca5332be3f17c5c10', 'request_status': 'queued'}" }, "execution_count": 7, "metadata": {}, @@ -290,7 +290,7 @@ "outputs": [ { "data": { - "text/plain": "{'request_id': 'e0ee3ad6935947f70a9d455f37da4c48', 'request_status': 'queued'}" + "text/plain": "{'request_id': 'c1a1dc59c94e9a6a7f810cf802cb9d78', 'request_status': 'queued'}" }, "execution_count": 8, "metadata": {}, @@ -376,7 +376,7 @@ "outputs": [ { "data": { - "text/plain": "{'request_id': '2a0a12ff777aaefe7401fdc8b93e288d', 'request_status': 'queued'}" + "text/plain": "{'request_id': 'e069ffd9e9178443af405f0c2f27894f', 'request_status': 'queued'}" }, "execution_count": 10, "metadata": {}, @@ -404,7 +404,7 @@ "outputs": [ { "data": { - "text/plain": "{'request_id': '4a76979f8d731606eb2cf03e9a6fd221', 'request_status': 'queued'}" + "text/plain": "{'request_id': '849bfc8a74289625b331f3ea0f882ef3', 'request_status': 'queued'}" }, "execution_count": 11, "metadata": {}, @@ -486,10 +486,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "The RMS analysis of u0001 has request_id ['5cf800607f127ebbca7b90c3b51c506a', 'de9562802a3248a9723ce4a8950c9a00', '2398c778dfe8625264fcfe952ead21b7', '78077ee974f2b5d17290c982d22b915a', '1a12f0e88c388eed298245bf122d7565', '2f8ef4370ca6f16ee30a71cf55645b02'].\n", - "The RMS analysis of u0005 has request_id ['9b0673ec9ee86fd9069cd33b4f917a4a', '2a0a12ff777aaefe7401fdc8b93e288d'].\n", - "The ModeId analysis of u0001 has request_id ['e176f4928372a627e743222eb2de0690', '535be882dd271d03c26bef8257ae03ec', '57b816d91decda67355da0ad160f0016', '25bdf3a393c5c166ae230ef98911606c', '9cced936d101c436eb32e7f8dc379796', 'd34f7e8f0a5b01a8471f1a5df23e1923', 'ba1202a3c210c9e388a980913cda3640', 'a089f212b2eda4eb79fc569b00c74659', 'e0ee3ad6935947f70a9d455f37da4c48'].\n", - "The ModeId analysis of u0005 has request_id ['ff5392230521bd4bdcc5c36491eeefe5', '99934e2c5fd0858a90836ae3ec02cd52', '51d92e031290b7e28dd094faf01ea6ea', '4a76979f8d731606eb2cf03e9a6fd221'].\n" + "The RMS analysis of u0001 has request_id ['5cf800607f127ebbca7b90c3b51c506a', 'de9562802a3248a9723ce4a8950c9a00', '2398c778dfe8625264fcfe952ead21b7', '78077ee974f2b5d17290c982d22b915a', '1a12f0e88c388eed298245bf122d7565', '2f8ef4370ca6f16ee30a71cf55645b02', 'bd831c060faf3d6ca5332be3f17c5c10'].\n", + "The RMS analysis of u0005 has request_id ['9b0673ec9ee86fd9069cd33b4f917a4a', '2a0a12ff777aaefe7401fdc8b93e288d', 'e069ffd9e9178443af405f0c2f27894f'].\n", + "The ModeId analysis of u0001 has request_id ['e176f4928372a627e743222eb2de0690', '535be882dd271d03c26bef8257ae03ec', '57b816d91decda67355da0ad160f0016', '25bdf3a393c5c166ae230ef98911606c', '9cced936d101c436eb32e7f8dc379796', 'd34f7e8f0a5b01a8471f1a5df23e1923', 'ba1202a3c210c9e388a980913cda3640', 'a089f212b2eda4eb79fc569b00c74659', 'e0ee3ad6935947f70a9d455f37da4c48', '7b3aae14f266697da1d140410627a6b6', '2c2bfebdbda7f75000f3c6e5128d3efc', 'd132fb68a652104c678acdd6fe514de5', '7b688623d9e6cf5ea63aaf2ce0318962', 'c1a1dc59c94e9a6a7f810cf802cb9d78'].\n", + "The ModeId analysis of u0005 has request_id ['ff5392230521bd4bdcc5c36491eeefe5', '99934e2c5fd0858a90836ae3ec02cd52', '51d92e031290b7e28dd094faf01ea6ea', '4a76979f8d731606eb2cf03e9a6fd221', '849bfc8a74289625b331f3ea0f882ef3'].\n" ] } ], @@ -512,7 +512,8 @@ "source": [ "The following step is to retrieve the results by calling each one of the \"request_id\".\n", "\n", - "The output of the `\"get_analysis_results\"` function is a dictionary and we show the keys of one those dictionaries.\n", + "The output of the `\"get_analysis_results\"` function is a dictionary.\n", + "We show the keys of one those dictionaries.\n", "The keys are the same for all features." ] }, @@ -556,7 +557,7 @@ "- `\"results\"` includes the numeric results.\n", "- `\"inputs\"` includes the input information for the request analysis.\n", "- `\"error_info\"` includes the error information in case the analysis fails and it is empty if the analysis is successful.\n", - "- `\"debug_info\"` includes debuging (log) information related to the failed analysis.\n" + "- `\"debug_info\"` includes debugging (log) information related to the failed analysis.\n" ] }, { @@ -620,7 +621,7 @@ }, "source": [ "The `\"results\"` of the \"ModeId\" feature are four lists and one dictionary:\n", - "- The first list is the measurement epoch in the same unit as the measurement was uploaded, which was seconds for this example.\n", + "- The first list is the measurement epoch in the same unit as the measurement was uploaded, which is seconds for this example.\n", "- The second list corresponds to the mode label given to the timestamp.\n", "- The third list is a boolean to indicate the uncertainty of label.\n", "- The fourth list corresponds to the mode probability of each mode label.\n", @@ -636,7 +637,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:57.673176Z", @@ -647,10 +648,10 @@ "outputs": [ { "data": { - "text/plain": " timestamps labels uncertain mode_probability Date\n0 1570186860 0 False 0.000159 2019-10-04 11:01:00\n1 1570273260 0 False 0.000596 2019-10-05 11:01:00\n2 1570359660 0 False 0.000058 2019-10-06 11:01:00\n3 1570446060 0 False 0.000211 2019-10-07 11:01:00\n4 1570532460 0 False 0.000007 2019-10-08 11:01:00", - "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
timestampslabelsuncertainmode_probabilityDate
015701868600False0.0001592019-10-04 11:01:00
115702732600False0.0005962019-10-05 11:01:00
215703596600False0.0000582019-10-06 11:01:00
315704460600False0.0002112019-10-07 11:01:00
415705324600False0.0000072019-10-08 11:01:00
\n
" + "text/plain": " timestamps labels uncertain mode_probability Date\n0 1570186860 0 False 0.001262 2019-10-04 11:01:00\n1 1570273260 0 False 0.001833 2019-10-05 11:01:00\n2 1570359660 0 False 0.000154 2019-10-06 11:01:00\n3 1570446060 0 False 0.000546 2019-10-07 11:01:00\n4 1570532460 0 False 0.000025 2019-10-08 11:01:00", + "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
timestampslabelsuncertainmode_probabilityDate
015701868600False0.0012622019-10-04 11:01:00
115702732600False0.0018332019-10-05 11:01:00
215703596600False0.0001542019-10-06 11:01:00
315704460600False0.0005462019-10-07 11:01:00
415705324600False0.0000252019-10-08 11:01:00
\n
" }, - "execution_count": 18, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -667,14 +668,14 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 17, "outputs": [ { "data": { - "text/plain": " modes emerging_time max_prob_time max_probability emerging_Date\n0 0 1570186860 1574424060 0.014102 2019-10-04 11:01:00\n1 1 1571655660 1571655660 0.023025 2019-10-21 11:01:00", - "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
modesemerging_timemax_prob_timemax_probabilityemerging_Date
00157018686015744240600.0141022019-10-04 11:01:00
11157165566015716556600.0230252019-10-21 11:01:00
\n
" + "text/plain": " modes emerging_time max_prob_time max_probability emerging_Date\n0 0 1570186860 1571137260 0.007276 2019-10-04 11:01:00\n1 1 1571655660 1571655660 0.023025 2019-10-21 11:01:00\n2 2 1572350460 1574424060 0.010912 2019-10-29 12:01:00", + "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
modesemerging_timemax_prob_timemax_probabilityemerging_Date
00157018686015711372600.0072762019-10-04 11:01:00
11157165566015716556600.0230252019-10-21 11:01:00
22157235046015744240600.0109122019-10-29 12:01:00
\n
" }, - "execution_count": 19, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -705,7 +706,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:58.990587Z", @@ -718,10 +719,10 @@ "outputs": [ { "data": { - "text/plain": " timestamps rms rms_dc dc utilization Date \\\n0 1570186860 0.647086 0.662108 -0.140237 1 2019-10-04 11:01:00 \n1 1570273260 0.647123 0.662183 -0.140420 1 2019-10-05 11:01:00 \n2 1570359660 0.646619 0.661652 -0.140239 1 2019-10-06 11:01:00 \n3 1570446060 0.646873 0.661923 -0.140347 1 2019-10-07 11:01:00 \n4 1570532460 0.646643 0.661714 -0.140423 1 2019-10-08 11:01:00 \n\n labels uncertain mode_probability \n0 0 False 0.000159 \n1 0 False 0.000596 \n2 0 False 0.000058 \n3 0 False 0.000211 \n4 0 False 0.000007 ", - "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
timestampsrmsrms_dcdcutilizationDatelabelsuncertainmode_probability
015701868600.6470860.662108-0.14023712019-10-04 11:01:000False0.000159
115702732600.6471230.662183-0.14042012019-10-05 11:01:000False0.000596
215703596600.6466190.661652-0.14023912019-10-06 11:01:000False0.000058
315704460600.6468730.661923-0.14034712019-10-07 11:01:000False0.000211
415705324600.6466430.661714-0.14042312019-10-08 11:01:000False0.000007
\n
" + "text/plain": " timestamps rms rms_dc dc utilization Date \\\n0 1570186860 0.647086 0.662108 -0.140237 1 2019-10-04 11:01:00 \n1 1570273260 0.647123 0.662183 -0.140420 1 2019-10-05 11:01:00 \n2 1570359660 0.646619 0.661652 -0.140239 1 2019-10-06 11:01:00 \n3 1570446060 0.646873 0.661923 -0.140347 1 2019-10-07 11:01:00 \n4 1570532460 0.646643 0.661714 -0.140423 1 2019-10-08 11:01:00 \n\n labels uncertain mode_probability \n0 0 False 0.001262 \n1 0 False 0.001833 \n2 0 False 0.000154 \n3 0 False 0.000546 \n4 0 False 0.000025 ", + "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
timestampsrmsrms_dcdcutilizationDatelabelsuncertainmode_probability
015701868600.6470860.662108-0.14023712019-10-04 11:01:000False0.001262
115702732600.6471230.662183-0.14042012019-10-05 11:01:000False0.001833
215703596600.6466190.661652-0.14023912019-10-06 11:01:000False0.000154
315704460600.6468730.661923-0.14034712019-10-07 11:01:000False0.000546
415705324600.6466430.661714-0.14042312019-10-08 11:01:000False0.000025
\n
" }, - "execution_count": 20, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -744,7 +745,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:01.536419Z", @@ -757,10 +758,10 @@ "outputs": [ { "data": { - "text/plain": " timestamps rms rms_dc dc utilization Date \\\n0 1570186860 0.646887 0.661967 -0.140491 1 2019-10-04 11:01:00 \n1 1570273260 0.646963 0.661950 -0.140056 1 2019-10-05 11:01:00 \n2 1570359660 0.646905 0.661932 -0.140244 1 2019-10-06 11:01:00 \n3 1570446060 0.647395 0.662385 -0.140124 1 2019-10-07 11:01:00 \n4 1570532460 0.647057 0.662064 -0.140165 1 2019-10-08 11:01:00 \n\n labels uncertain mode_probability \n0 0 False 1.339510e-05 \n1 0 False 3.450000e-07 \n2 0 False 4.187300e-06 \n3 0 False 3.173160e-05 \n4 0 False 6.430700e-06 ", - "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
timestampsrmsrms_dcdcutilizationDatelabelsuncertainmode_probability
015701868600.6468870.661967-0.14049112019-10-04 11:01:000False1.339510e-05
115702732600.6469630.661950-0.14005612019-10-05 11:01:000False3.450000e-07
215703596600.6469050.661932-0.14024412019-10-06 11:01:000False4.187300e-06
315704460600.6473950.662385-0.14012412019-10-07 11:01:000False3.173160e-05
415705324600.6470570.662064-0.14016512019-10-08 11:01:000False6.430700e-06
\n
" + "text/plain": " timestamps rms rms_dc dc utilization Date \\\n0 1570186860 0.646887 0.661967 -0.140491 1 2019-10-04 11:01:00 \n1 1570273260 0.646963 0.661950 -0.140056 1 2019-10-05 11:01:00 \n2 1570359660 0.646905 0.661932 -0.140244 1 2019-10-06 11:01:00 \n3 1570446060 0.647395 0.662385 -0.140124 1 2019-10-07 11:01:00 \n4 1570532460 0.647057 0.662064 -0.140165 1 2019-10-08 11:01:00 \n\n labels uncertain mode_probability \n0 0 False 0.000008 \n1 0 False 0.000001 \n2 0 False 0.000002 \n3 0 False 0.000046 \n4 0 False 0.000004 ", + "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
timestampsrmsrms_dcdcutilizationDatelabelsuncertainmode_probability
015701868600.6468870.661967-0.14049112019-10-04 11:01:000False0.000008
115702732600.6469630.661950-0.14005612019-10-05 11:01:000False0.000001
215703596600.6469050.661932-0.14024412019-10-06 11:01:000False0.000002
315704460600.6473950.662385-0.14012412019-10-07 11:01:000False0.000046
415705324600.6470570.662064-0.14016512019-10-08 11:01:000False0.000004
\n
" }, - "execution_count": 21, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -789,7 +790,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:07.727375Z", @@ -800,7 +801,7 @@ { "data": { "text/plain": "
", - "image/png": "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\n" + "image/png": "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\n" }, "metadata": { "needs_background": "light" @@ -821,7 +822,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 21, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:11.059225Z", @@ -833,7 +834,7 @@ { "data": { "text/plain": "
", - "image/png": "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\n" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAGTCAYAAAB9D4auAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3de5RlZX3n//fHbtoLoqJoK9ABVIzKzSQdXI63QsLF22CMK9JegkrSqzXgmGRiQDQxRkZdZPxpEOj0SI8QFcaJKE3sCMRwIFnRpIEo0BCcTgtS6TiIolAtAzZ8f3+cXeb0oYDqqjp1dtV5v9bqxdnP3s8+310b+PTz7F17p6qQJKltHjXsAiRJmooBJUlqJQNKktRKBpQkqZUMKElSKxlQkqRWMqCkOZLkM0k+PIf7+3CSO5J8b672KS0kBpQWnSS3JLknyUSSO5N8JcmKYdfVK0klefbDrF8B/B7w/Kp6+jzV9KYktybZnuTLSZ7cs+7RSdYnuSvJ95L8bl/fFyS5JslPmn++oGfdwUkubcLWX7zUtBlQWqxeW1WPB54B/F/gzCHXs6v2A35QVbfvasckS2fQ5yDgz4G3AsuBnwBn92zyQeDApq4jgPcmObbpuwy4GPgssCdwHnBx0w7wU+ALwIm7WpdGmwGlRa2q/h/wl8DzJ9uSPDHJ+Um+34wY3p/kUc26c5L8Zc+2H0vytXSNJRlP8r5mNHBLkjc/1Hcn+a0kW5L8MMmGJHs37Vc1m3yrGeW9sa/frwCXA3s36z/TtP/nJJuT/ChJJ8nzevrckuQPklwHbO8PqST7N6O2pT1tnSS/2Sy+Gbikqq6qqgngA8Drk+zRrP8N4E+q6s6qugn4H8DbmnVjwFLgE1V1b1X9GRDgFc05uLmqzgU2P9TPSpqKAaVFLcnjgDcC3+hpPhN4IvBM4OV0/+f79mbd7wGHJnlbkpfS/Vv/CfUfzwR7OrAXsA9wArAuyc9P8b2vAD4C/DrdUdytwIUAVfWyZrPDqurxVfW/evtW1d8ArwS2NevfluQ5wAXAe4CnAhuBS3pGKQCrgFcDT6qqHbvwYwI4CPhWTw3/CtwHPCfJnsDeveubzwf19L2udn5u2nU966UZMaC0WH05yY+Au4CjgDMAkiyhG1inVtXdVXUL8N/pTm1RVT8B3gJ8nO6U1clVNd637w80I4Urga/QDaF+bwbWV9W1VXUvcCrwoiT7z/B43gh8paour6qfAn8KPBb4Tz3b/FlV3VZV98xg/48HftzX9mNgj2Ydfesn1z1SX2nGDCgtVq+rqicBjwZOAq5MMjn6WUZ3RDPpVrojIgCq6p+ArXSnqb7Qt987q2p7X9+9p/j+vXu/o5k2+0Hv9+yi/v09ANzWt7/bZrhvgAngCX1tTwDubtbRt35y3SP1lWbMgNKiVlX3V9VFwP3AS4A76F60369ns58D/m1yIclv0w22bcB7+3a5Z5Ld+/pum+Krt/V+R9PnKb3fs4v69xdgRd/+Hu4OuclQfVxPW+/dgZuBw3r2/0y6P4NvV9WdwL/3rm8+b+7pe2hT06RD8ZqTZsmA0qLW3NxwHN27y26qqvvpjopOT7JHkv2A36U7nUdzrefDdKf53kr3brUX9O32j5Msa65RvQb431N89eeBtze3Xz8a+G/APzZTitC9s/CZu3AoXwBeneTIJLvRvVZ2L/AP0+lcVd+nG2ZvSbIkyTuAZ/Vs8jngtUle2oTph4CLqmpyFHQ+8P4keyZ5LvBbwGeadR26fwF4d3M7+klN+9/Cz87BY+iOXEnymOZnIj0sA0qL1SVJJuhegzqd7o0Ok3+jP5nuiGIr8Pd0w2R9c4fbZ4GPVdW3qur/AO8D/qLnf6jfA+6kO6L5HLCmqv6l/8ur6mt074T7It3Rx7OA43s2+SBwXnNH3lTXsPr3dzPd0DyT7ijwtXRvpb9vmj8P6IbK79OdajyInnBrfjZrmmO6ne71o3f19P0j4F/pTjNeCZxRVV9t+t4HvI7uzSY/At5Bd4p1srb9gHv4jxHVPcDNu1C3RlR8YaE0PUnGgM9W1b7DrkUaBY6gJEmtZEBJklrJKT5JUis5gpIktZIBJUlqpV1+6nGb7bXXXrX//vsPu4x5tX37dnbfffdH3lALmud5NIzqeb7mmmvuqKqn9rcPNKCax/F/ElgCfLqqPjrFNmPAJ4DdgDuq6uVN+y10H5VyP7CjqlY+0vftv//+XH311XNW/0LQ6XQYGxsbdhkaMM/zaBjV85zk1qnaBxZQzUM5z6L7oM5xYFOSDVV1Y882T6L7zpljq+q7SZ7Wt5sjquqOQdUoSWqvQV6DOhzYUlVbm98ovxA4rm+bN9F9nMp3AWbycjZJ0uI0yIDah52frjzOg5/k/By6D9/sNK+J/o2edQVc1rSvHmCdkqQWGuQ1qEzR1v9LV0uBXwKOpPtum68n+UZVfRt4cVVta6b9Lk/yL1V1VV9/mvBaDbB8+XI6nc5cHkPrTUxMjNwxjyLP82jwPO9skAE1Tvd1AJP25cGvJRine2PEdrqvqb6K7mP8v11V26A77ZfkS3SnDB8UUFW1DlgHsHLlyhq1C4yjelF11HieR4PneWeDDKhNwIFJDqD7mP/j6V5z6nUx8KnmKdLLgBcC/1/zuP9HVdXdzeej6T7+f1E45LxD5naH583Nbq4/4fq52ZEkzYGBBVRV7WjeC3Mp3dvM11fV5iRrmvVrq+qmJF8FrgMeoHsr+g3Ny9K+1Lz/bCnw+clH+y8G0w2Cnd//Njs+0krSQjPQ34Oqqo3Axr62tX3LZwBn9LVtZee3d46k6YSKUwKSFisfdSRJaiUDSpLUSgaUJKmVDChJUisZUJKkVjKgJEmtZEBJklrJgJIktZIBJUlqJQNKktRKBpQkqZUMKElSKxlQkqRWGujTzCVpFMzpO97m6P1usPDf8WZASdIszVUQ+PqcnTnFJ0lqJQNKktRKBpQkqZUMKElSKxlQkqRWMqAkSa1kQEmSWsmAkiS1kgElSWolA0qS1EoGlCSplQwoSVIrGVCSpFYyoCRJrWRASZJayYCSJLWSASVJaiUDSpLUSgMNqCTHJrk5yZYkpzzENmNJvplkc5Ird6WvJGnxWjqoHSdZApwFHAWMA5uSbKiqG3u2eRJwNnBsVX03ydOm21eStLgNcgR1OLClqrZW1X3AhcBxfdu8Cbioqr4LUFW370JfSdIiNrARFLAPcFvP8jjwwr5tngPslqQD7AF8sqrOn2ZfAJKsBlYDLF++nE6nMxe1LxgTExMjd8yjyPM8GjzPOxtkQGWKtpri+38JOBJ4LPD1JN+YZt9uY9U6YB3AypUra2xsbKb1LkidTodRO+ZR5HkeDZ7nnQ0yoMaBFT3L+wLbptjmjqraDmxPchVw2DT7SpIWsUFeg9oEHJjkgCTLgOOBDX3bXAy8NMnSJI+jO4130zT7SpIWsYGNoKpqR5KTgEuBJcD6qtqcZE2zfm1V3ZTkq8B1wAPAp6vqBoCp+g6qVklS+wxyio+q2ghs7Gtb27d8BnDGdPpKkkaHT5KQJLWSASVJaiUDSpLUSgaUJKmVDChJUisZUJKkVjKgJEmtZEBJklrJgJIktZIBJUlqJQNKktRKBpQkqZUMKElSKxlQkqRWMqAkSa00rYBK8qwkj24+jyV5d5InDbY0SdIom+4I6ovA/UmeDZwLHAB8fmBVSZJG3nQD6oGq2gH8KvCJqvod4BmDK0uSNOqmG1A/TbIKOAH4q6Ztt8GUJEnS9APq7cCLgNOr6jtJDgA+O7iyJEmjbul0NqqqG4F39yx/B/jooIqSJGm6d/G9Jsk/J/lhkruS3J3krkEXJ0kaXdMaQQGfAF4PXF9VNcB6JEkCpn8N6jbgBsNJkjRfpjuCei+wMcmVwL2TjVX18YFUJUkaedMNqNOBCeAxwLLBlSNJUtd0A+rJVXX0QCuRJKnHdK9B/U0SA0qSNG8eMaCShO41qK8mucfbzCVJ8+ERp/iqqpJ8s6p+cT4KkiQJpj/F9/UkvzzQSiRJ6jHdmySOANYkuQXYDoTu4OrQQRUmSRpt0w2oV85k50mOBT4JLAE+XVUf7Vs/BlwMfKdpuqiqPtSsuwW4G7gf2FFVK2dSgyRpYZruw2Jv3dUdJ1kCnAUcBYwDm5JsaB482+vvquo1D7GbI6rqjl39bknSwjfda1AzcTiwpaq2VtV9wIXAcQP8PknSIjLIgNqH7jP8Jo03bf1elORbSf46yUE97QVcluSaJKsHWKckqYWmew1qJjJFW//DZq8F9quqiSSvAr4MHNise3FVbUvyNODyJP9SVVc96Eu64bUaYPny5XQ6nTk7gIVgYmJi5I55FHmeR4PneWeDDKhxYEXP8r7Att4Nququns8bk5ydZK+quqOqtjXttyf5Et0pwwcFVFWtA9YBrFy5ssbGxub8QNqs0+kwasc8ijzPo8HzvLNBTvFtAg5MckCSZcDxwIbeDZI8vXlSBUkOb+r5QZLdk+zRtO8OHA3cMMBaJUktM7ARVFXtSHIScCnd28zXV9XmJGua9WuBNwDvTLIDuAc4vnlyxXLgS012LQU+X1VfHVStkqT2GeQUH1W1EdjY17a25/OngE9N0W8rcNgga5Mktdsgp/gkSZoxA0qS1EoGlCSplQwoSVIrGVCSpFYyoCRJrWRASZJayYCSJLWSASVJaiUDSpLUSgaUJKmVDChJUisZUJKkVjKgJEmtZEBJklrJgJIktZIBJUlqJQNKktRKBpQkqZUMKElSKxlQkqRWMqAkSa1kQEmSWsmAkiS1kgElSWolA0qS1EoGlCSplQwoSVIrGVCSpFYyoCRJrWRASZJayYCSJLWSASVJaqWBBlSSY5PcnGRLklOmWD+W5MdJvtn8+cPp9pUkLW5LB7XjJEuAs4CjgHFgU5INVXVj36Z/V1WvmWFfSdIiNcgR1OHAlqraWlX3ARcCx81DX0nSIjCwERSwD3Bbz/I48MIptntRkm8B24D/WlWbd6EvSVYDqwGWL19Op9OZfeULyMTExMgd8yjyPI8Gz/POBhlQmaKt+pavBfarqokkrwK+DBw4zb7dxqp1wDqAlStX1tjY2IwLXog6nQ6jdsyjyPM8GjzPOxvkFN84sKJneV+6o6Sfqaq7qmqi+bwR2C3JXtPpK0la3AYZUJuAA5MckGQZcDywoXeDJE9Pkubz4U09P5hOX0nS4jawKb6q2pHkJOBSYAmwvqo2J1nTrF8LvAF4Z5IdwD3A8VVVwJR9B1WrJKl9BnkNanLabmNf29qez58CPjXdvpKk0eGTJCRJrWRASZJayYCSJLWSASVJaiUDSpLUSgaUJKmVDChJUisN9PegpFF3yHmHzN3Ozpub3Vx/wvVzsyNpwAwoaYDmKgx8iKhGkVN8kqRWMqAkSa1kQEmSWsmAkiS1kgElSWqldF+/tDgk+T5w67DrmGd7AXcMuwgNnOd5NIzqed6vqp7a37ioAmoUJbm6qlYOuw4Nlud5NHied+YUnySplQwoSVIrGVAL37phF6B54XkeDZ7nHl6DkiS1kiMoSVIrGVALVJJjk9ycZEuSU4ZdjwYjyfoktye5Ydi1aHCSrEhyRZKbkmxO8l+GXVMbOMW3ACVZAnwbOAoYBzYBq6rqxqEWpjmX5GXABHB+VR087Ho0GEmeATyjqq5NsgdwDfC6Uf9v2hHUwnQ4sKWqtlbVfcCFwHFDrkkDUFVXAT8cdh0arKr696q6tvl8N3ATsM9wqxo+A2ph2ge4rWd5HP9llhaFJPsDvwD843ArGT4DamHKFG3O1UoLXJLHA18E3lNVdw27nmEzoBamcWBFz/K+wLYh1SJpDiTZjW44fa6qLhp2PW1gQC1Mm4ADkxyQZBlwPLBhyDVJmqEkAc4Fbqqqjw+7nrYwoBagqtoBnARcSvdi6heqavNwq9IgJLkA+Drw80nGk5w47Jo0EC8G3gq8Isk3mz+vGnZRw+Zt5pKkVnIEJUlqJQNKktRKBpQkqZUMKElSKxlQkqRWMqAkSa1kQEmSWsmAkiS1kgElSWolA0qS1EoGlCSplQwoSVIrGVDSHEnymSQfnsP9fTjJHUm+N1f7lBYSA0qLTpJbktyTZCLJnUm+kmTFI/ecP0kqybMfZv0K4PeA51fV0+eppjcluTXJ9iRfTvLknnWPTrI+yV1Jvpfkd/v6viDJNUl+0vzzBT3r3pbk/uZ8TP4Zm49j0sJmQGmxem1VPR54BvB/gTOHXM+u2g/4QVXdvqsdkyydQZ+DgD+n+06i5cBPgLN7NvkgcGBT1xHAe5Mc2/RdBlwMfBbYEzgPuLhpn/T1qnp8z5/Ortao0WNAaVGrqv8H/CXw/Mm2JE9Mcn6S7zcjhvcneVSz7pwkf9mz7ceSfC1dY81LA9/XTL3dkuTND/XdSX4ryZYkP0yyIcneTftVzSbfakYTb+zr9yvA5cDezfrPNO3/OcnmJD9K0knyvJ4+tyT5gyTXAdv7QyrJ/s2obWlPWyfJbzaLbwYuqaqrqmoC+ADw+iR7NOt/A/iTqrqzqm4C/gfwtmbdGLAU+ERV3VtVfwYEeMVD/Wyk6TCgtKgleRzwRuAbPc1nAk8Engm8nO7/fN/erPs94NBmWuqlwInACfUfb/Z8OrAXsA9wArAuyc9P8b2vAD4C/DrdUdytwIUAVfWyZrPDmtHE/+rtW1V/A7wS2Nasf1uS5wAXAO8BngpsBC7pG6WsAl4NPKl56/KuOAj4Vk8N/wrcBzwnyZ7A3r3rm88H9fS9rnZ+++l1PesBfqEJ9W8n+cBMRnkaPQaUFqsvJ/kRcBdwFHAGQJIldAPr1Kq6u6puAf473aktquonwFuAj9Odsjq5qsb79v2BZqRwJfAVuiHU783A+qq6tqruBU4FXpRk/xkezxuBr1TV5VX1U+BPgccC/6lnmz+rqtuq6p4Z7P/xwI/72n4M7NGso2/95LpH6gtwFXAw8DTg1+gG6e/PoEaNGANKi9XrqupJwKOBk4Ark0yOfpbRHdFMupXuiAiAqvonYCvdaaov9O33zqra3td37ym+f+/e72imzX7Q+z27qH9/DwC39e3vthnuG2ACeEJf2xOAu5t19K2fXPdIfamqrVX1nap6oKquBz4EvGEWtWpEGFBa1Krq/qq6CLgfeAlwB/BTuhf7J/0c8G+TC0l+m26wbQPe27fLPZPs3td32xRfva33O5o+T+n9nl3Uv78AK/r2V/2dekyG6uN62nrvDtwMHNaz/2fS/Rl8u6ruBP69d33zeXNP30ObmiYd2rO+X9ENf+lhGVBa1JqbG46je3fZTVV1P91R0elJ9kiyH/C7dKfzaK71fJjuNN9b6d6t9oK+3f5xkmXNNarXAP97iq/+PPD25vbrRwP/DfjHZkoRuncWPnMXDuULwKuTHJlkN7rXyu4F/mE6navq+3TD7C1JliR5B/Csnk0+B7w2yUubMP0QcFFVTY6Szgfen2TPJM8Ffgv4TLOuQ/cvAO9ubkc/qWn/W4Akr0yyvPn8XLo3YFy8C8euEWVAabG6JMkE3WtQp9O90WHyb/Qn0x1RbAX+nm6YrG8u3H8W+FhVfauq/g/wPuAvmpAB+B5wJ90RzeeANVX1L/1fXlVfo/s/4i/SHX08Czi+Z5MPAuc1d+RNdQ2rf3830w3NM+mOAl9L91b6+6b584BuqPw+3anGg+gJt+Zns6Y5ptvpXj96V0/fPwL+le4045XAGVX11abvfcDr6N5s8iPgHXSnWCdrOxK4Lsl2ujd3XEQ3sKWHlZ1vvJH0UJpfLv1sVe077FqkUeAISpLUSgaUJKmVnOKTJLWSIyhJUisZUJKkVlpUz8Paa6+9av/99x92GfNq+/bt7L777o+8oRY0z/NoGNXzfM0119xRVU/tb19UAbX//vtz9dVXD7uMedXpdBgbGxt2GRowz/NoGNXznOTWqdqd4pMktZIBJUlqJQNKktRKBpQkqZUMKElSKy2qu/gWikPOO2Rud3je3Ozm+hOun5sdSdIcMKCGYC6C4JhjjuHyyy+nqkjCUUcdxaWXXjoH1UlSOzjFtwAdc8wxXHbZZaxZs4ZLLrmENWvWcNlll3HMMccMuzRJmjOOoBagyy+/nHe+852cffbZdDodzj77bADWrl075Mokae44glqAqoqPfOQjO7V95CMfwSfTS1pMDKgFKAmnnnrqTm2nnnoqSYZUkSTNPaf4FqCjjjqKc845B4BXvepVvOtd7+Kcc87h6KOPHnJlkjR3hhJQSY4FPgksAT5dVR+dYpsx4BPAbsAdVfXyeS2yxS699FKOOeYY1q5dyznnnEMSjj76aO/ik7SozHtAJVkCnAUcBYwDm5JsqKobe7Z5EnA2cGxVfTfJ0+a7zrabDKNRffqxpMVvGNegDge2VNXWqroPuBA4rm+bNwEXVdV3Aarq9nmuUZI0ZMOY4tsHuK1neRx4Yd82zwF2S9IB9gA+WVXnT7WzJKuB1QDLly+n0+nMdb2tNjExMXLHPIo8z6PB87yzYQTUVLea9d8fvRT4JeBI4LHA15N8o6q+/aCOVeuAdQArV66sUZvucopvNHieR4PneWfDCKhxYEXP8r7Atim2uaOqtgPbk1wFHAY8KKAkSYvTMK5BbQIOTHJAkmXA8cCGvm0uBl6aZGmSx9GdArxpnuuUJA3RvI+gqmpHkpOAS+neZr6+qjYnWdOsX1tVNyX5KnAd8ADdW9FvmO9aJUnDM5Tfg6qqjcDGvra1fctnAGfMZ12SpPbwUUeSpFYyoCRJrWRASZJayYCSJLWSASVJaiUDSpLUSgaUJKmVDChJUisZUJKkVjKgJEmtZEBJklrJgJIktZIBJUlqpaEEVJJjk9ycZEuSU6ZYP5bkx0m+2fz5w2HUKUkannl/3UaSJcBZwFF035y7KcmGqrqxb9O/q6rXzHd9kqR2GMYI6nBgS1Vtrar7gAuB44ZQhySpxYYRUPsAt/Usjzdt/V6U5FtJ/jrJQfNTmiSpLYbxRt1M0VZ9y9cC+1XVRJJXAV8GDpxyZ8lqYDXA8uXL6XQ6c1hq+01MTIzcMY8iz/No8DzvbBgBNQ6s6FneF9jWu0FV3dXzeWOSs5PsVVV39O+sqtYB6wBWrlxZY2NjAym6rTqdDqN2zKPI8zwaPM87G8YU3ybgwCQHJFkGHA9s6N0gydOTpPl8ON06fzDvlUqShmbeR1BVtSPJScClwBJgfVVtTrKmWb8WeAPwziQ7gHuA46uqfxpQar1Dzjtk7nZ23tzs5voTrp+bHUkDNowpPqpqI7Cxr21tz+dPAZ+a77qkuTZXYeDUj0aRT5KQJLWSASVJaiUDSpLUSgaUJKmVDChJUisZUJKkVjKgJEmtZEBJklrJgJIktZIBJUlqJQNKktRKBpQkqZUMKElSKxlQkqRWGkpAJTk2yc1JtiQ55WG2++Uk9yd5w3zWJ0kavnkPqCRLgLOAVwLPB1Ylef5DbPcxui82lCSNmGGMoA4HtlTV1qq6D7gQOG6K7U4GvgjcPp/FSZLaYRgBtQ9wW8/yeNP2M0n2AX4VWIskaSQN45XvmaKt+pY/AfxBVd2fTLV5z86S1cBqgOXLl9PpdOaixgVjYmJi5I55FHmeR4PneWfDCKhxYEXP8r7Atr5tVgIXNuG0F/CqJDuq6sv9O6uqdcA6gJUrV9bY2Nggam6tTqfDqB3zKPI8jwbP886GEVCbgAOTHAD8G3A88KbeDarqgMnPST4D/NVU4SRJWrzmPaCqakeSk+jenbcEWF9Vm5OsadZ73UmSNLuASvIsYLyq7k0yBhwKnF9VP3q4flW1EdjY1zZlMFXV22ZToyRpYZrtXXxfBO5P8mzgXOAA4POzrkqSNPJmG1APVNUOureEf6Kqfgd4xuzLkiSNutkG1E+TrAJOAP6qadttlvuUJGnWAfV24EXA6VX1nebOvM/OvixJ0qib1U0SVXUj8O6e5e8AH51tUZIkzWoEleQ1Sf45yQ+T3JXk7iR3zVVxkqTRNdvfg/oE8Hrg+qrqf1yRJEkzNttrULcBNxhOkqS5NtsR1HuBjUmuBO6dbKyqj89yv5KkETfbgDodmAAeAyybfTmSJHXNNqCeXFVHz0klkiT1mO01qL9JYkBJkubcjAMq3Zc1vRf4apJ7vM1ckjSXZjzFV1WV5JtV9YtzWZAkSTD7Kb6vJ/nlXe2U5NgkNyfZkuSUKdYfl+S6JN9McnWSl8yyTknSAjPbmySOANYkuQXYDoTu4OrQh+qQZAlwFnAU3de/b0qyoXls0qSvARuaUdqhwBeA586yVknSAjLbgHrlDPocDmypqq0ASS4EjgN+FlBVNdGz/e6AvwgsSSNmtg+LvXUG3fah+wSKSePAC/s3SvKrwEeApwGvfqidJVkNrAZYvnw5nU5nBiUtXBMTEyN3zKPI8zwaPM87m+0IaiYyRduDRkhV9SXgS0leBvwJ8CtT7ayq1gHrAFauXFljY2NzV+kC0Ol0GLVjHkWe59Hged7ZbG+SmIlxYEXP8r7AtofauKquAp6VZK9BFyZJao9hBNQm4MAkByRZBhwPbOjdIMmzm9+zIskv0n2M0g/mvVJJ0tDM+xRfVe1IchJwKbAEWF9Vm5OsadavBX4N+I0kPwXuAd7oE9MlabQM4xoUVbUR2NjXtrbn88eAj813XZKk9hjGFJ8kSY/IgJIktZIBJUlqJQNKktRKBpQkqZUMKElSKxlQkqRWMqAkSa1kQEmSWsmAkiS1kgElSWolA0qS1EoGlCSplYYSUEmOTXJzki1JTpli/ZuTXNf8+Yckhw2jTknS8Mx7QCVZApwFvBJ4PrAqyfP7NvsO8PKqOpTu697XzW+VkqRhG8YI6nBgS1Vtrar7gAuB43o3qKp/qKo7m8Vv0H0tvCRphAwjoPYBbutZHm/aHsqJwF8PtCJJUusM4426maJtyte5JzmCbkC95CF3lqwGVgMsX76cTqczByUuHBMTEyN3zKPI8zwaPM87G0ZAjQMrepb3Bbb1b5TkUODTwCur6gcPtbOqWkdzjWrlypU1NjY2p8W2XafTYdSOeRR5nkeD53lnw5ji2wQcmOSAJMuA44ENvRsk+TngIuCtVfXtIdQoSRqyeR9BVeIVtdsAAAZRSURBVNWOJCcBlwJLgPVVtTnJmmb9WuAPgacAZycB2FFVK+e7VknS8Axjio+q2ghs7Gtb2/P5N4HfnO+6JEnt4ZMkJEmtZEBJklrJgJIktZIBJUlqJQNKktRKBpQkqZUMKElSKxlQkqRWMqAkSa1kQEmSWsmAkiS1kgElSWolA0qS1EoGlCSplYYSUEmOTXJzki1JTpli/XOTfD3JvUn+6zBqlCQN17y/DyrJEuAs4Ci6r3/flGRDVd3Ys9kPgXcDr5vv+iRJ7TCMEdThwJaq2lpV9wEXAsf1blBVt1fVJuCnQ6hPktQCwwiofYDbepbHmzZJkn5mGK98zxRtNeOdJauB1QDLly+n0+nMdFcL0sTExMgd8yjyPI8Gz/POhhFQ48CKnuV9gW0z3VlVrQPWAaxcubLGxsZmVdxC0+l0GLVjHkWe59Hged7ZMKb4NgEHJjkgyTLgeGDDEOqQJLXYvI+gqmpHkpOAS4ElwPqq2pxkTbN+bZKnA1cDTwAeSPIe4PlVddd81ytJGo5hTPFRVRuBjX1ta3s+f4/u1J8kaUT5JAlJUisZUJKkVjKgJEmtZEBJ0pBdcMEFHHzwwRx55JEcfPDBXHDBBcMuqRWGcpOEJKnrggsu4LTTTuPcc8/l/vvvZ8mSJZx44okArFq1asjVDZcjKEkaotNPP51zzz2XI444gqVLl3LEEUdw7rnncvrppw+7tKFzBCVJs3TIeYfMuG9+P7z7u++G85qG8/6jfTb7Bbj+hOtn1X/YDChJmqXZBMHBBx/MmWeeyRFHHPGzRx1dccUVnHzyydxwww1zWOXC4xSfJA3RaaedxoknnsgVV1zBjh07uOKKKzjxxBM57bTThl3a0DmCkqQhmrwR4uSTT+amm27iec97HqeffvrI3yABBpQkDd2qVatYtWqVTzPv4xSfJKmVDChJUiulasYvs22dJN8Hbh12HfNsL+COYRehgfM8j4ZRPc/7VdVT+xsXVUCNoiRXV9XKYdehwfI8jwbP886c4pMktZIBJUlqJQNq4Vs37AI0LzzPo8Hz3MNrUJKkVnIEJUlqJQNqgUpybJKbk2xJcsqw69FgJFmf5PYko/3U0EUuyYokVyS5KcnmJP9l2DW1gVN8C1CSJcC3gaOAcWATsKqqbhxqYZpzSV4GTADnV9XBw65Hg5HkGcAzquraJHsA1wCvG/X/ph1BLUyHA1uqamtV3QdcCBw35Jo0AFV1FfDDYdehwaqqf6+qa5vPdwM3AfsMt6rhM6AWpn2A23qWx/FfZmlRSLI/8AvAPw63kuEzoBamTNHmXK20wCV5PPBF4D1Vddew6xk2A2phGgdW9CzvC2wbUi2S5kCS3eiG0+eq6qJh19MGBtTCtAk4MMkBSZYBxwMbhlyTpBlKEuBc4Kaq+viw62kLA2oBqqodwEnApXQvpn6hqjYPtyoNQpILgK8DP59kPMmJw65JA/Fi4K3AK5J8s/nzqmEXNWzeZi5JaiVHUJKkVjKgJEmtZEBJklrJgJIktZIBJUlqJQNKmidJKslf9CwvTfL9JH+1i/u5Jclec1+h1C4GlDR/tgMHJ3lss3wU8G9DrEdqNQNKml9/Dby6+bwKuGByRZInJ/lykuuSfCPJoU37U5JcluSfk/w5Pc9iTPKWJP/U/GLnnydZ0vz5TJIbklyf5Hfm8wCluWJASfPrQuD4JI8BDmXnJ1b/MfDPVXUo8D7g/Kb9j4C/r6pfoPtIq58DSPI84I3Ai6vqBcD9wJuBFwD7VNXBVXUI8D8Hf1jS3Fs67AKkUVJV1zWvU1gFbOxb/RLg15rt/rYZOT0ReBnw+qb9K0nubLY/EvglYFP3UW48FrgduAR4ZpIzga8Alw3ymKRBMaCk+bcB+FNgDHhKT/vDvUZlqmeSBTivqk590IrkMOAY4LeBXwfeMYt6paFwik+af+uBD1XV9X3tV9GdoiPJGHBH806g3vZXAns2238NeEOSpzXrnpxkv+YOv0dV1ReBDwC/OODjkQbCEZQ0z6pqHPjkFKs+CPzPJNcBPwFOaNr/GLggybXAlcB3m/3cmOT9wGVJHgX8lO6I6Z5mP5N/AX3QCEtaCHyauSSplZzikyS1kgElSWolA0qS1EoGlCSplQwoSVIrGVCSpFYyoCRJrWRASZJa6f8Hig0PHwErUjwAAAAASUVORK5CYII=\n" }, "metadata": { "needs_background": "light" @@ -855,7 +856,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 22, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:16.615916Z", @@ -866,7 +867,7 @@ { "data": { "text/plain": "
", - "image/png": "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\n" + "image/png": "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3Tt27Oje1NTU7cknn+wza9asJoDp06fvrK+vPwDw4IMP9lmxYsWJhUJh9KhRoxofe+yx+rVr1/YqvWfp6HOriGj36h++zCdJkqSymzp16o7rr7/+vQ8//PDqzZs3v5WDvltSW1d36JhuSikuu+yypttvv3394Z512mmnNe/evbvb/v376dGjBy+99FLPQYMGtXtetCPKkiRJKrurrrpq65w5c149//zzXys9PmHChN3z588fALB48eI+/fr1a+7fv3/LhAkTds+bN28AwMKFC+t37drVDWDq1Km7Fi9e3G/9+vXdIZvjvGbNmndMq6irq2u9bz+AefPmDbj44ot3tDdmE2VJkqSuYsCANi2tVo77jRw5cv911123+eDjN99886vLli07saGhofFLX/rSsLvvvvtFgJtuuunVxx9//OTGxsbRDz30UN8hQ4a8CTBu3LjXr7322vWTJ09uaGhoaLzwwgsbXnnllR4H3/fWW29d961vfeu0008//dzt27d3//znP7+1vT9e5A13t9X48ePTkiVLjvp6SZKkWhQRS1NK46sdx/Lly18qFArtThC7kuXLlw8sFAoj8socUZYkSZJymChLkiRJOUyUJUmSpBwmypIkSVKOY0uU95d9m25JkiSpKo5tw5FnnoGIDgpFql3B0a8uow6Q7KckSe3n1AtJkqQuYuBAChGM66j/Bg6kcKRnRsS4Sy655IzW7/fv30+/fv0KH/7wh89qT+zDhg0bs2HDhjYP8t54442nnn766edGxLj2XFfKRFmSJKmLaGo6xtkER3G/3r17t6xevbr3nj17AuC+++6rHzx4cNnn737wgx/c89Of/nTN0KFD3zzae5goS5IkqawmT568c9GiRacA3HPPPf0vvfTSba1lmzZt6jZlypSRDQ0NjYVCYdRTTz3VG2Djxo3dJk2a9L7Ro0c3zpgxY3jpJnl33HFH/zFjxoweNWpU44wZM4Y3Nx+6QeCkSZNeO/vss486SQYTZUmSJJXZlVdeuW3BggX99u3bFytXrjxx4sSJe1vL5s6dO7RQKOxbs2bNczfccMP6mTNnngFwzTXXDJ04ceKelStXPjdt2rQdGzZs6AmwbNmyE+69997+S5YsWbVq1arn6urq0p133jmgHHGbKEuSJKmsLrjggtfWrVvX66677uo/ZcqUnaVlTz/9dJ/Zs2c3AUyb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\n" }, "metadata": { "needs_background": "light" @@ -882,12 +883,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "Uncertain areas appear as a gray rectangle above the corresponding periods in the modes plot.\n", + "If there are not uncertain areas, the space is white.\n", + "\n", "We create a list with all the sources dataframes and display the modes over time for all." ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 23, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:17.917436Z", @@ -901,7 +905,7 @@ { "data": { "text/plain": "
", - "image/png": "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\n" + "image/png": "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\n" }, "metadata": { "needs_background": "light" @@ -930,7 +934,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 24, "metadata": { "pycharm": { "name": "#%%\n" @@ -941,7 +945,7 @@ "data": { "text/plain": "['u0001', 'u0002', 'u0003', 'u0004', 'u0005', 'u0006']" }, - "execution_count": 26, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -967,7 +971,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 25, "metadata": { "pycharm": { "name": "#%%\n" @@ -976,9 +980,9 @@ "outputs": [ { "data": { - "text/plain": "{'request_id': 'f91fcc72ffbf8f82f86400c33ca1624c', 'request_status': 'queued'}" + "text/plain": "{'request_id': 'f50aac753e019955cdeddda5be29012b', 'request_status': 'queued'}" }, - "execution_count": 27, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -998,7 +1002,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 26, "metadata": { "pycharm": { "name": "#%%\n" @@ -1033,12 +1037,12 @@ "- `\"results\"` includes the numeric results.\n", "- `\"inputs\"` includes the input information for the request analysis.\n", "- `\"error_info\"` includes the error information in case the analysis fails and it is empty if the analysis is successful.\n", - "- `\"debug_info\"` includes debuging (log) information related to the failed analysis." + "- `\"debug_info\"` includes debugging (log) information related to the failed analysis." ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 27, "metadata": { "pycharm": { "name": "#%%\n" @@ -1049,7 +1053,7 @@ "data": { "text/plain": "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" }, - "execution_count": 30, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -1074,7 +1078,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 28, "metadata": { "pycharm": { "name": "#%%\n" @@ -1085,7 +1089,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "There is a total of 2 atypical assets in this analysis\n" + "There is a total of 2 atypical assets in this analysis.\n" ] } ], @@ -1098,7 +1102,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 29, "outputs": [ { "name": "stdout", @@ -1112,9 +1116,8 @@ "source": [ "atypical1 = atypical[0]\n", "atypical2 = atypical[1]\n", - "print(f\"The 1st blacksheep is {atypical1['uuid']}\")\n", - "print(f\"The 2nd blacksheep is {atypical2['uuid']}\")\n", - "\n" + "print(f\"The 1st blacksheep is {atypical1['source_id']}\")\n", + "print(f\"The 2nd blacksheep is {atypical2['source_id']}\")" ], "metadata": { "collapsed": false, @@ -1122,6 +1125,18 @@ "name": "#%%\n" } } + }, + { + "cell_type": "markdown", + "source": [ + "Please check the [\"Analysis Classes\"](analysis_classes.ipynb) example for some of the visualization options of the blacksheep results.\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } } ], "metadata": { diff --git a/docs/source/content/examples/brief_overview.ipynb b/docs/source/content/examples/brief_overview.ipynb index 100517af..f307b3b7 100644 --- a/docs/source/content/examples/brief_overview.ipynb +++ b/docs/source/content/examples/brief_overview.ipynb @@ -99,25 +99,25 @@ "output_type": "stream", "text": [ "Looking in indexes: https://pypi.org/simple, https://vikinganalytics:****@pypi.vikinganalytics.se/simple/\n", - "Requirement already satisfied: va-mvg in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (0.6.1)\n", - "Requirement already satisfied: pandas in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (1.2.4)\n", + "Requirement already satisfied: va-mvg in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (0.7.1)\n", "Requirement already satisfied: typer in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (0.3.2)\n", - "Requirement already satisfied: tabulate in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (0.8.7)\n", + "Requirement already satisfied: matplotlib in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (3.1.3)\n", "Requirement already satisfied: requests in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (2.24.0)\n", "Requirement already satisfied: semver in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (2.13.0)\n", + "Requirement already satisfied: tabulate in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (0.8.7)\n", "Requirement already satisfied: numpy in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (1.18.1)\n", - "Requirement already satisfied: matplotlib in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (3.1.3)\n", + "Requirement already satisfied: pandas in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (1.2.4)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib->va-mvg) (1.1.0)\n", "Requirement already satisfied: python-dateutil>=2.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib->va-mvg) (2.8.1)\n", "Requirement already satisfied: cycler>=0.10 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib->va-mvg) (0.10.0)\n", "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib->va-mvg) (2.4.6)\n", - "Requirement already satisfied: kiwisolver>=1.0.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib->va-mvg) (1.1.0)\n", "Requirement already satisfied: six in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from cycler>=0.10->matplotlib->va-mvg) (1.14.0)\n", "Requirement already satisfied: setuptools in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from kiwisolver>=1.0.1->matplotlib->va-mvg) (41.2.0)\n", "Requirement already satisfied: pytz>=2017.3 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from pandas->va-mvg) (2019.3)\n", - "Requirement already satisfied: idna<3,>=2.5 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from requests->va-mvg) (2.9)\n", - "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from requests->va-mvg) (1.25.9)\n", "Requirement already satisfied: chardet<4,>=3.0.2 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from requests->va-mvg) (3.0.4)\n", + "Requirement already satisfied: idna<3,>=2.5 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from requests->va-mvg) (2.9)\n", "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from requests->va-mvg) (2020.4.5.2)\n", + "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from requests->va-mvg) (1.25.9)\n", "Requirement already satisfied: click<7.2.0,>=7.1.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from typer->va-mvg) (7.1.2)\n" ] }, @@ -125,7 +125,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "WARNING: You are using pip version 21.0.1; however, version 21.1.2 is available.\n", + "WARNING: You are using pip version 21.0.1; however, version 21.1.3 is available.\n", "You should consider upgrading via the 'c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\python.exe -m pip install --upgrade pip' command.\n" ] } @@ -230,7 +230,7 @@ "outputs": [ { "data": { - "text/plain": "'{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.1.12\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}'" + "text/plain": "'{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.1.14\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}'" }, "execution_count": 6, "metadata": {}, @@ -737,7 +737,7 @@ ], "source": [ "m = session.list_measurements(SOURCE_ID)\n", - "print(f\"Read {len(m)} stored measurements\")" + "print(f\"Read {len(m)} stored measurements\")\n" ] }, { @@ -803,7 +803,7 @@ "outputs": [ { "data": { - "text/plain": "{'request_id': '2f8ef4370ca6f16ee30a71cf55645b02', 'request_status': 'queued'}" + "text/plain": "{'request_id': 'bd831c060faf3d6ca5332be3f17c5c10', 'request_status': 'queued'}" }, "execution_count": 17, "metadata": {}, @@ -892,7 +892,7 @@ "outputs": [ { "data": { - "text/plain": "{'request_id': 'e0ee3ad6935947f70a9d455f37da4c48', 'request_status': 'queued'}" + "text/plain": "{'request_id': 'c1a1dc59c94e9a6a7f810cf802cb9d78', 'request_status': 'queued'}" }, "execution_count": 19, "metadata": {}, @@ -1107,7 +1107,7 @@ "output_type": "stream", "text": [ "=== RMS ===\n", - "request_id 2f8ef4370ca6f16ee30a71cf55645b02\n", + "request_id bd831c060faf3d6ca5332be3f17c5c10\n", "from 1570186860 to 1574424060\n", "\n", "+-------+--------------+------------+------------+------------+---------------+\n", @@ -1163,12 +1163,20 @@ { "data": { "text/plain": "
", - "image/png": "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\n" + "image/png": "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85o2qoGJiBQYOnQoL7/8Mps2beLNN9/k9ttvB6BPnz5s3bq11encfvvt3HXXXVx11VX107Zs2cKAAQPo1asXK1asYMmSJfXzqqur2bVr127pzJw5k5tuuom6ujo2bNjAvffey7Rp097CHnYOqoGJiBSorq7m4osvZvr06YwZM4Zx48YBcOaZZ3LuuefSs2dPHnjggRbT+fa3v8369evrg82cOXO48MILWbBgARMnTuSggw5ixowZ9cufc845TJw4kSlTpnDDDTfUT587dy4PPPAAkyZNwsz45je/yT777MOKFe37fDBtrDP0WJk6daoX6wkkIunz9NNPc/DBB5c7G51OsXI1s4fdvXU9UiqQmhBFRCSVFMBERCSVFMBEpOJ0hkcblaSzlqcCmIhUlB49erBp06ZOe9EtNXdn06ZN9OjRo9xZaXfqhSgiFWXEiBHU1NSwYcOGcmel0+jRowcjRowodzbanQKYiFSU6upqxowZ0/KC0uWpCVFERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFKppAHMzI43s5VmtsrM5heZP8/MHo+fv5nZpFLmT0RE0qNkAczMssA1wAnAeOA0MxtfsNhzwLHuPhH4KnBdqfInIiLpUsoa2DRglbuvdvedwI3ASckF3P1v7v5qHF0CdL73/4uISLsoZQAbDqxNjNfEaU35GPCHpmaa2TlmttTMlup3g0REup5SBjArMq3oT66a2b8QAtj5TSXm7te5+1R3nzpkyJB2yqKIiKRFKX/QsgYYmRgfAawvXMjMJgLXAye4+6YS5U1ERFKmlDWwh4CxZjbGzLoBpwK3Jhcws/2Am4EPu/s/Spg3ERFJmZLVwNy91szOA+4EssBCd19uZufG+QuAi4FBwLVmBlDr7lNLlUcREUkPcy/6GCpVpk6d6kuXLi13NkREUsXMHk5zJUFv4hARkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVQqaQAzs+PN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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" + }, + { + "data": { + "text/plain": "''" + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -1189,7 +1197,7 @@ "\n", "We begin by parsing the results.\n", "In this particular case, we need to define the unit of time to perform the epoch conversion to datetime.\n", - "The default unit is milliseconds.\n", + "The default unit is milliseconds, but we need seconds now.\n", "The timezone can also be defined, to increase the precision of these results." ], "metadata": { @@ -1201,7 +1209,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 27, "outputs": [], "source": [ "mode_results_parsed = analysis_classes.parse_results(mode_results, t_unit=\"s\")\n" @@ -1227,14 +1235,14 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 28, "outputs": [ { "data": { - "text/plain": " timestamps labels uncertain mode_probability\n0 1570186860 0 False 0.000159\n1 1570273260 0 False 0.000596\n2 1570359660 0 False 0.000058\n3 1570446060 0 False 0.000211\n4 1570532460 0 False 0.000007", - "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
timestampslabelsuncertainmode_probability
015701868600False0.000159
115702732600False0.000596
215703596600False0.000058
315704460600False0.000211
415705324600False0.000007
\n
" + "text/plain": " timestamps labels uncertain mode_probability\n0 1570186860 0 False 0.001262\n1 1570273260 0 False 0.001833\n2 1570359660 0 False 0.000154\n3 1570446060 0 False 0.000546\n4 1570532460 0 False 0.000025", + "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
timestampslabelsuncertainmode_probability
015701868600False0.001262
115702732600False0.001833
215703596600False0.000154
315704460600False0.000546
415705324600False0.000025
\n
" }, - "execution_count": 32, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -1265,46 +1273,49 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 29, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "=== ModeId ===\n", - "request_id e0ee3ad6935947f70a9d455f37da4c48\n", + "request_id c1a1dc59c94e9a6a7f810cf802cb9d78\n", "from 1570186860 to 1574424060\n", "\n", "Labels\n", "+----------+----------+-----------+--------------------+\n", "| labels | counts | portion | mode_probability |\n", "|----------+----------+-----------+--------------------|\n", - "| 0 | 42 | 84 | 42 |\n", + "| 0 | 17 | 34 | 17 |\n", "| 1 | 8 | 16 | 8 |\n", + "| 2 | 25 | 50 | 25 |\n", "+----------+----------+-----------+--------------------+\n", "\n", "Lables & uncertain labels\n", "+------------+-----------+--------------------+----------+\n", "| | portion | mode_probability | counts |\n", "|------------+-----------+--------------------+----------|\n", - "| (0, False) | 84 | 42 | 42 |\n", + "| (0, False) | 34 | 17 | 17 |\n", "| (1, False) | 16 | 8 | 8 |\n", + "| (2, False) | 50 | 25 | 25 |\n", "+------------+-----------+--------------------+----------+\n", "\n", "Emerging Modes\n", "+----+---------+-----------------+-----------------+-------------------+\n", "| | modes | emerging_time | max_prob_time | max_probability |\n", "|----+---------+-----------------+-----------------+-------------------|\n", - "| 0 | 0 | 1.57019e+09 | 1.57442e+09 | 0.0141024 |\n", - "| 1 | 1 | 1.57166e+09 | 1.57166e+09 | 0.0230245 |\n", + "| 0 | 0 | 1.57019e+09 | 1.57114e+09 | 0.00727616 |\n", + "| 1 | 1 | 1.57166e+09 | 1.57166e+09 | 0.0230245 |\n", + "| 2 | 2 | 1.57235e+09 | 1.57442e+09 | 0.0109123 |\n", "+----+---------+-----------------+-----------------+-------------------+\n" ] }, { "data": { - "text/plain": "[ counts portion mode_probability\n labels \n 0 42 84.0 42.0\n 1 8 16.0 8.0,\n portion mode_probability counts\n labels uncertain \n 0 False 84.0 42.0 42\n 1 False 16.0 8.0 8,\n modes emerging_time max_prob_time max_probability\n 0 0 1570186860 1574424060 0.014102\n 1 1 1571655660 1571655660 0.023025]" + "text/plain": "[ counts portion mode_probability\n labels \n 0 17 34.0 17.0\n 1 8 16.0 8.0\n 2 25 50.0 25.0,\n portion mode_probability counts\n labels uncertain \n 0 False 34.0 17.0 17\n 1 False 16.0 8.0 8\n 2 False 50.0 25.0 25,\n modes emerging_time max_prob_time max_probability\n 0 0 1570186860 1571137260 0.007276\n 1 1 1571655660 1571655660 0.023025\n 2 2 1572350460 1574424060 0.010912]" }, - "execution_count": 33, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -1323,10 +1334,11 @@ "cell_type": "markdown", "source": [ "The summary of the results describes the number of timestamps for each mode and how many of these timestamps are uncertain.\n", + "Uncertain areas appear as a gray rectangle above the corresponding periods in the modes plot.\n", "\n", "In addition, it provides information on the emerging modes.\n", "Emerging modes describes the time (timestamp) each one of the modes first appeared.\n", - "This information can be useful to identify if a new mode is affecting or appearing in teh asset.\n", + "This information can be useful to identify if a new mode is affecting or appearing in the asset.\n", "\n", "Finally, we can generate a plot that displays display the different modes over time." ], @@ -1336,17 +1348,25 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 30, "outputs": [ { "data": { "text/plain": "
", - "image/png": "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uO+++4Z89KMffQHgjDPOaLn99tv37GrcJsqSJEmqq1NOOeX5m266adimTZtiwYIFu02dOnVjpezcc88d29zcvOmxxx579KKLLlp62mmnvQngvPPOGzt16tQNCxYseHTmzJlrli1bNhBg7ty5u956663D58yZs3DhwoWPNjU1pSuvvHJE9fZWrFjRf8iQIa8OGDAAgAMOOOCVFStWDOxq3CbKkiRJqqsjjjjixSVLluxy1VVXDZ8+ffra6rIHH3xwyJlnntkCMHPmzPVr1qzp39LS0u/+++8fcsYZZ7QAnHTSSWuHDh36KsCdd945ZP78+bs1NzdPmjhx4uR77rln6JNPPrlL9Tqre58rIqLLd//wYj5JkiTV3YwZM9ZceOGF+919992LVq5c+VoO2l5S29T0xj7dlFIcf/zxLd/5zneWtrWtvfbaq3X9+vX9Nm/ezIABA3j66acHjh49usvjou1RliRJUt2dffbZq88555znDj/88Berpx955JHrr7nmmhEAs2fPHjJs2LDW4cOHbznyyCPXX3311SMAbr755qHr1q3rBzBjxox1s2fPHrZ06dL+kMc4P/bYY68bVtHU1FRZ7zCAq6++esQHPvCBNV2N2URZkiSprxgxolO3VqvH+saPH7/5ggsuWFk7/dJLL31u7ty5u02YMGHyF77whX2uvfbapwAuueSS5+69997BkydPnnTXXXftsffee78CMGXKlJfOP//8pdOmTZswYcKEye9+97snLF68eEDter/+9a8vufzyy/faf//9D37hhRf6f+pTn1rd1d2Lsu7uzjosIs3Z5qWlnVfgQ5B6WiIaHYIkvSbgoZTSYY2OY968eU83Nzd3OUHsS+bNmzeyubn5gLIye5QlSZKkEibKkiRJUgkTZUmSJKmEibIkSZJUwkRZkiRJKmGiLEmSJJUwUZYkSeojRo6kOYIp3fUaOZLmjrYZEVOOPfbYN1Xeb968mWHDhjX/6Z/+6YFdiX2fffY5ZNmyZZ1+qvTFF188av/99z84IqZ0ZblqJsqSJEl9REsL25Qwbs/6Bg0atGXRokWDNmzYEAC33Xbb0DFjxnT5cdJddfTRR2/46U9/+tjYsWNf2dZ1mChLkiSprqZNm7b2lltu2RPghhtuGH7cccc9XylbsWJFv+nTp4+fMGHC5Obm5okPPPDAIIDly5f3O+qoo94yadKkybNmzRpX/ZC8K664YvghhxwyaeLEiZNnzZo1rrX1jQ8IPOqoo1486KCDtjlJBhNlSZIk1dkpp5zy/E033TRs06ZNsWDBgt2mTp26sVJ27rnnjm1ubt702GOPPXrRRRctPe20094EcN55542dOnXqhgULFjw6c+bMNcuWLRsIMHfu3F1vvfXW4XPmzFm4cOHCR5uamtKVV145oh5xmyhLkiSpro444ogXlyxZsstVV101fPr06Wuryx588MEhZ555ZgvAzJkz169Zs6Z/S0tLv/vvv3/IGWec0QJw0kknrR06dOirAHfeeeeQ+fPn79bc3Dxp4sSJk++5556hTz755C71iLtbx6lIkiRJZWbMmLHmwgsv3O/uu+9etHLlytdy0OohFRURkQCamt7Yp5tSiuOPP77lO9/5ztJ6xgv2KEuSJKkHnH322avPOeec5w4//PAXq6cfeeSR66+55poRALNnzx4ybNiw1uHDh2858sgj11999dUjAG6++eah69at6wcwY8aMdbNnzx62dOnS/pDHOD/22GMD6xGzibIkSVIfMWIEb7zqrYfWN378+M0XXHDBytrpl1566XNz587dbcKECZO/8IUv7HPttdc+BXDJJZc8d++99w6ePHnypLvuumuPvffe+xWAKVOmvHT++ecvnTZt2oQJEyZMfve73z1h8eLFA2rX+5WvfGX0mDFjDl2xYsXA5ubmySeeeOK4ru5flHV3d9ZhEWnONi8t7byCbW9X2jaJaHQIkvSagIdSSoc1Oo558+Y93dzcvLrRcfRm8+bNG9nc3HxAWZk9ypIkSVIJE2VJkiSphImyJEnSzmvLli1bHJvWhqJutrRVbqIsSZK085q/atWqPUyW32jLli2xatWqPYD5bc3jfZQlSZJ2Uq2trWctX778u8uXLz8YO0hrbQHmt7a2ntXWDN71QqoD73rR87zrhaTepLfc9ULbxzMLSZIkqYSJsiRJklTCRFmSJEkqYaIsSZIklTBRliRJkkqYKEuSJEklTJQlSZKkEibKkiRJUgkTZUmSJKmEibIkSZJUwkRZkiRJKmGiLEmSJJUwUZYkSZJKmChLkiRJJUyUJUmSpBImypIkSVIJE2VJkiSphImyJEmSVMJEWZIkSSphoixJkiSVMFGWJEmSSpgoS5IkSSVMlCVJkqQSJsqSJElSCRNlSZIkqYSJ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\n" + "image/png": "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Pn362Nra2rr6+vpxjz32WH+AtWvX9jr11FOPHz9+fN2sWbOOTunNyuAbb7xxyIQJE8aPGzeubtasWUfv2vXWSubGxkYeeeSRAR//+MdfBrj44osbfvSjHx3W3rhNlCVJktSpzj///JfmzZs3eMeOHbFkyZKDp06dur1p3Jw5c0bV19fvWL58+dNXX331qgsvvPAYgMsvv3zU1KlTty1ZsuTpmTNnblqzZk1fgIULFx501113DVmwYMHSpUuXPl1TU5NuuummoZXrW7duXe8BAwbs7tOnDwBjxox5fd26dX3bG7eJsiRJkjrVKaec8srKlSv73XzzzUOmT5++uXLc448/PuCSSy5pAJg5c+bWTZs29W5oaOj16KOPDrj44osbAM4777zNAwcO3A1w7733Dli8ePHB9fX148eNG1f30EMPDVyxYkW/ymVW1j43iYh29/7hzXySJEnqdDNmzNh01VVXHXn//fcvW79+/Rs56J6S2pqat9fpppTi7LPPbrjhhhtWtbSuI444YtfWrVt77dy5kz59+vD888/3HT58eLvbRVujLEmSpE532WWXbZw9e/bqyZMnv1I5fMqUKVtvvfXWoQDz588fMHjw4F1DhgxpnDJlytZbbrllKMAdd9wxcMuWLb0AZsyYsWX+/PmDV61a1RtyG+fly5e/pVlFTU1N03IHA9xyyy1DzzjjjE3tjdlEWZIk6UAxdGibulbrjOWNHTt255VXXrm++fDrrrtu9cKFCw+ura2t+/znPz967ty5zwFce+21qx9++OFD6+rqxt93332DRo4c+TrAxIkTX73iiitWTZs2rba2trbutNNOq33xxRf7NF/uV77ylZXf+ta3jjjqqKNOfPnll3t/5jOf2djezYuy6u62mjRpUlqwYMFezy9JktQTRcQTKaVJ1Y5j0aJFz9fX17c7QTyQLFq0aFh9ff2YsnHWKEuSJEklTJQlSZKkEibKkiRJUgkTZUmSJKnEviXKOzv9Md2SJElSVezbA0eeegoiOigUqecK9r53GXWA5HlKktR+Nr2QJEk6QAwbRn0EEzvqNWwY9a2tMyImfuhDHzqm6f+dO3cyePDg+j/8wz88rj2xjx49esKaNWvaXMn7pS996fCjjjrqxIiY2J75KpkoS5IkHSAaGvaxNcFeLK9///6Ny5Yt679t27YAuPvuuweOGDGi09vvvu9979v205/+dPmoUaNe39tlmChLkiSpU02bNm3znXfeeRjA7bffPuSss856qWncunXrek2fPn1sbW1tXX19/bjHHnusP8DatWt7nXrqqcePHz++btasWUdXPiTvxhtvHDJhwoTx48aNq5s1a9bRu3a9/QGBp5566ivvfOc79zpJBhNlSZIkdbLzzz//pXnz5g3esWNHLFmy5OCpU6dubxo3Z86cUfX19TuWL1/+9NVXX73qwgsvPAbg8ssvHzV16tRtS5YseXrmzJmb1qxZ0xdg4cKFB911111DFixYsHTp0qVP19TUpJtuumloZ8RtoixJkqROdcopp7yycuXKfjfffPOQ6dOnb64c9/jjjw+45JJLGgBmzpy5ddOmTb0bGhp6PfroowMuvvjiBoDzzjtv88CBA3cD3HvvvQMWL158cH19/fhx48bVPfTQQwNXrFjRrzPi7tB2KpIkSVKZGTNmbLrqqquOvP/++5etX7/+jRy0sklFk4hIADU1b6/TTSnF2Wef3XDDDTes6sx4wRplSZIkdYHLLrts4+zZs1dPnjz5lcrhU6ZM2XrrrbcOBZg/f/6AwYMH7xoyZEjjlClTtt5yyy1DAe64446BW7Zs6QUwY8aMLfPnzx+8atWq3pDbOC9fvrxvZ8RsoixJknSAGDqUt9/11kXLGzt27M4rr7xyffPh11133eqFCxceXFtbW/f5z39+9Ny5c58DuPbaa1c//PDDh9bV1Y2/7777Bo0cOfJ1gIkTJ756xRVXrJo2bVptbW1t3WmnnVb74osv9mm+3GuuuWb4iBEjTlq3bl3f+vr6unPPPffo9m5flFV3t9WkiLRgr+eWDhw+cKTKfOCIpK4WPJFSmlTtMBYtWvR8fX39xmrHsT9btGjRsPr6+jFl46xRliRJkkqYKEuSJEklTJQlSZKkEibKkiRJUgkTZUmSJKmEibIkSZJUwifzSZIkHSCGMay+gYYOy/+GMnTXRjYu2tM0ETHxzDPPfOmee+55DmDnzp0MHz68/uSTT97+4IMPPtPWdY0ePXrCggULlowcObJNfTfPnDnzmKeeeuqQPn36pJNPPnn7bbfd9kK/fv3a1V+rNcqSJEkHiI5Mktu6vP79+zcuW7as/7Zt2wLg7rvvHjhixIidHRlHmY997GMvrVixYvGyZct+8+qrr8bXv/71Ye1dhomyJEmSOtW0adM233nnnYcB3H777UPOOuusl5rGrVu3rtf06dPH1tbW1tXX14977LHH+gOsXbu216mnnnr8+PHj62bNmnV05UPybrzxxiETJkwYP27cuLpZs2YdvWvX2yuZzz333M01NTXU1NQwadKk7StXrmz3Y65NlCVJktSpzj///JfmzZs3eMeOHbFkyZKDp06dur1p3Jw5c0bV19fvWL58+dNXX331qgsvvPAYgMsvv3zU1KlTty1ZsuTpmTNnblqzZk1fgIULFx501113DVmwYMHSpUuXPl1TU5NuuummoS2t+7XXXot58+YNPf300ze3N24TZUmSJHWqU0455ZWVK1f2u/nmm4dMnz79LQnr448/PuCSSy5pAJg5c+bWTZs29W5oaOj16KOPDrj44osbAM4777zNAwcO3A1w7733Dli8ePHB9fX148eNG1f30EMPDVyxYkW/ltZ94YUXHjVlypRtM2bM2NbeuL2ZT5IkSZ1uxowZm6666qoj77///mXr169/IwetbFLRJCISQE3N2+t0U0px9tlnN9xwww2rWlvn7NmzR27cuLH3fffd9+zexGyNsiRJkjrdZZddtnH27NmrJ0+e/Erl8ClTpmy99dZbhwLMnz9/wODBg3cNGTKkccqUKVtvueWWoQB33HHHwC1btvQCmDFjxpb58+cPXrVqVW/IbZyXL1/+tvbHX/3qV4c98MADg+65554VvXr12quYrVGWJEk6QAxl6K6O7h6urdOOHTt255VXXrm++fDrrrtu9axZs8bU1tbW9e/fv3Hu3LnPAVx77bWrzzrrrGPr6urGT506ddvIkSNfB5g4ceKrV1xxxapp06bVNjY20qdPn/TNb37zd7W1ta9XLnfOnDlHjxw58rVJkyaNBzjjjDNevv7669e0Z/uirLq7rSZFpAV7Pbd04Aj2/jhTB0hR7QgkHWiCJ1JKk6odxqJFi56vr6/fWO049meLFi0aVl9fP6ZsnE0vJEmSpBImypIkSVIJE2VJkqSeq7GxsdH2Zy0oyqaxpfEmypIkST3X4g0bNgwyWX67xsbG2LBhwyBgcUvT2OuFJElSD7Vr165L165d+521a9eeiBWkzTUCi3ft2nVpSxPY64XUBez1osrs9UJSV9tPer3QvvGXhSRJklTCRFmSJEkqYaIsSZIklTBRliRJkkqYKEuSJEklTJQlSZKk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\n" }, "metadata": { "needs_background": "light" }, "output_type": "display_data" + }, + { + "data": { + "text/plain": "''" + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -1375,14 +1395,14 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 31, "outputs": [ { "data": { - "text/plain": " timestamps rms rms_dc dc utilization labels uncertain \\\n0 1570186860 0.647086 0.662108 -0.140237 1 0 False \n1 1570273260 0.647123 0.662183 -0.140420 1 0 False \n2 1570359660 0.646619 0.661652 -0.140239 1 0 False \n3 1570446060 0.646873 0.661923 -0.140347 1 0 False \n4 1570532460 0.646643 0.661714 -0.140423 1 0 False \n\n mode_probability Date \n0 0.000159 2019-10-04 11:01:00 \n1 0.000596 2019-10-05 11:01:00 \n2 0.000058 2019-10-06 11:01:00 \n3 0.000211 2019-10-07 11:01:00 \n4 0.000007 2019-10-08 11:01:00 ", - "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
timestampsrmsrms_dcdcutilizationlabelsuncertainmode_probabilityDate
015701868600.6470860.662108-0.14023710False0.0001592019-10-04 11:01:00
115702732600.6471230.662183-0.14042010False0.0005962019-10-05 11:01:00
215703596600.6466190.661652-0.14023910False0.0000582019-10-06 11:01:00
315704460600.6468730.661923-0.14034710False0.0002112019-10-07 11:01:00
415705324600.6466430.661714-0.14042310False0.0000072019-10-08 11:01:00
\n
" + "text/plain": " timestamps rms rms_dc dc utilization labels uncertain \\\n0 1570186860 0.647086 0.662108 -0.140237 1 0 False \n1 1570273260 0.647123 0.662183 -0.140420 1 0 False \n2 1570359660 0.646619 0.661652 -0.140239 1 0 False \n3 1570446060 0.646873 0.661923 -0.140347 1 0 False \n4 1570532460 0.646643 0.661714 -0.140423 1 0 False \n\n mode_probability Date \n0 0.001262 2019-10-04 11:01:00 \n1 0.001833 2019-10-05 11:01:00 \n2 0.000154 2019-10-06 11:01:00 \n3 0.000546 2019-10-07 11:01:00 \n4 0.000025 2019-10-08 11:01:00 ", + "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
timestampsrmsrms_dcdcutilizationlabelsuncertainmode_probabilityDate
015701868600.6470860.662108-0.14023710False0.0012622019-10-04 11:01:00
115702732600.6471230.662183-0.14042010False0.0018332019-10-05 11:01:00
215703596600.6466190.661652-0.14023910False0.0001542019-10-06 11:01:00
315704460600.6468730.661923-0.14034710False0.0005462019-10-07 11:01:00
415705324600.6466430.661714-0.14042310False0.0000252019-10-08 11:01:00
\n
" }, - "execution_count": 35, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -1413,7 +1433,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 32, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:17.670019Z", @@ -1442,7 +1462,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 33, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:17.902871Z", @@ -1455,16 +1475,16 @@ "outputs": [ { "data": { - "text/plain": "" + "text/plain": "" }, - "execution_count": 37, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": "
", - "image/png": "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\n" + "image/png": "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\n" }, "metadata": { "needs_background": "light" diff --git a/docs/source/content/examples/check_version.ipynb b/docs/source/content/examples/check_version.ipynb index d95fc557..6e82d92d 100644 --- a/docs/source/content/examples/check_version.ipynb +++ b/docs/source/content/examples/check_version.ipynb @@ -81,6 +81,9 @@ "ExecuteTime": { "end_time": "2021-03-18T10:13:06.387884Z", "start_time": "2021-03-18T10:13:06.384074Z" + }, + "pycharm": { + "name": "#%%\n" } }, "outputs": [ @@ -89,13 +92,15 @@ "output_type": "stream", "text": [ "Checking versions for:https://api.beta.multiviz.com\n", - "mvg version: 0.0.9\n", - "Highest tested API version: 0.0.9\n" + "mvg version: 0.7.1\n", + "Highest tested API version: 0.1.12\n" ] } ], "source": [ - "version = json.dumps(session.check_version())" + "version = json.dumps(session.check_version())\n", + "\n", + "\n" ] } ], @@ -162,4 +167,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/docs/source/content/examples/sources_and_measurements.ipynb b/docs/source/content/examples/sources_and_measurements.ipynb index f201bbef..44fbbc36 100644 --- a/docs/source/content/examples/sources_and_measurements.ipynb +++ b/docs/source/content/examples/sources_and_measurements.ipynb @@ -179,17 +179,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.111625Z", "start_time": "2021-03-18T09:54:16.958633Z" - }, - "pycharm": { - "is_executing": false } }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2021-07-13 19:29:54,775 - INFO - mvg.mvg - Getting API info for: https://api.beta.multiviz.com\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.1.14\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}\n" + ] + } + ], "source": [ "hello_message = json.dumps(session.say_hello())\n", "print(hello_message)" @@ -277,8 +289,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "To make sure we start from a clean slate we delete our resource in case it exists.\n", - "All information including measurements and analysis results will be removed" + "To make sure we start from a clean slate we delete our resource in case it exists." ] }, { @@ -1758,7 +1769,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "If all went well we end up here now the source u0001 is in the database along with a number of its measurements." + "If all went well we end up here now.\n", + "The source u0001 is in the database along with a number of its measurements." ] }, { diff --git a/docs/source/index.rst b/docs/source/index.rst index 5228cefe..92bf81b8 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -16,6 +16,7 @@ content/examples/error_handling content/examples/sources_and_measurements content/examples/analysis_visual + content/examples/analysis_classes content/examples/tabular_example .. toctree:: diff --git a/mvg/analysis_classes.py b/mvg/analysis_classes.py index 6234addf..f3cd51c6 100644 --- a/mvg/analysis_classes.py +++ b/mvg/analysis_classes.py @@ -549,7 +549,7 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): {"source": results["inputs"]["UUID"], "atypical": False} ) self.typicality = self.typicality.set_index("source") - aty = [a["uuid"] for a in self.results()["atypical_assets"]] + aty = [a["source_id"] for a in self.results()["atypical_assets"]] self.typicality.loc[aty] = True self.typicality = self.typicality.reset_index() self.time_column = None @@ -557,9 +557,13 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): def _bsd_df(self): # Wide def aty_df(ass): - uuid = ass.pop("uuid") + source_id = ass.pop("source_id") bsd_df = pd.DataFrame.from_dict(ass) - bsd_df.columns = ["timestamps", uuid + "_label", uuid + "_atypical"] + bsd_df.columns = [ + "timestamps", + source_id + "_label", + source_id + "_atypical", + ] return bsd_df wide_df = None diff --git a/mvg/mvg.py b/mvg/mvg.py index 55575074..514fd3f1 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -50,7 +50,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.7.1") + self.mvg_version = self.parse_version("v0.7.2") self.tested_api_version = self.parse_version("v0.1.12") # Errors to ignore diff --git a/tests/test_data/BlackSheep_results_dict.json b/tests/test_data/BlackSheep_results_dict.json index 5e11fa9d..50ddb6cb 100644 --- a/tests/test_data/BlackSheep_results_dict.json +++ b/tests/test_data/BlackSheep_results_dict.json @@ -5,7 +5,7 @@ "results": { "atypical_assets": [ { - "uuid": "u0003", + "source_id": "u0003", "timestamps": [ 1570186860, 1570273260, @@ -164,7 +164,7 @@ ] }, { - "uuid": "u0002", + "source_id": "u0002", "timestamps": [ 1570186860, 1570273260, From af0b523c485b348cbe9f20e756d438acc6aade4b Mon Sep 17 00:00:00 2001 From: Oskar Liew <43787643+OskarLiew@users.noreply.github.com> Date: Thu, 5 Aug 2021 13:46:17 +0200 Subject: [PATCH 07/90] Added label api to mvg (#41) * Added label api to mvg * Added docstrings * changing get_labels to list_labels * Connection error * Fixing linter * Flake8 * Fixing tests --- mvg/mvg.py | 119 +++++++++++++++++++++++++++++++++++--- tests/test_api_general.py | 3 +- tests/test_api_sources.py | 117 ++++++++++++++++++++++++++++++++----- tests/test_mvg.py | 4 +- 4 files changed, 220 insertions(+), 23 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 514fd3f1..2f3b7493 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -11,9 +11,10 @@ import re import time import logging -from typing import Dict, List +from typing import Dict, List, Optional import requests from requests.exceptions import HTTPError, RequestException + import semver logger = logging.getLogger(__name__) @@ -42,7 +43,7 @@ def __init__(self, endpoint: str, token: str): Raises ------ - HTTPError + ConnectionError If a connection to the API cannot be established. """ @@ -50,8 +51,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.7.2") - self.tested_api_version = self.parse_version("v0.1.12") + self.mvg_version = self.parse_version("v0.7.3") + self.tested_api_version = self.parse_version("v0.1.15") # Errors to ignore self.do_not_raise = [] @@ -59,9 +60,8 @@ def __init__(self, endpoint: str, token: str): # Get API version try: response = self._request("get", "") - except RequestException as exc: - logger.exception(exc) - raise HTTPError("Could not connect to the API.") + except RequestException: + raise requests.ConnectionError("Could not connect to the API.") api_vstr = response.json()["message"]["api"]["version"] self.api_version = self.parse_version(api_vstr) @@ -765,6 +765,111 @@ def get_analysis_results(self, request_id: str) -> dict: return response.json() + # Labels + def create_label( + self, + sid: str, + timestamp: int, + label: str, + severity: int, + notes: Optional[str] = "", + ): + """Create a label for a measurement + + Parameters + ---------- + sid : str + Id of the source for the measurement + timestamp : int + Timestamp of the measurement to label + label : str + A string label to attach to the measurement + severity : int + Severity of the label as a positive integer + notes : Optional[str], optional + Optional notes for the label, by default "" + """ + logger.info("endpoint %s", self.endpoint) + logger.info(f"Creating label for {sid} - {timestamp}") + + label_data = {"label": label, "severity": severity, "notes": notes} + + self._request("post", f"/sources/{sid}/labels/{timestamp}", json=label_data) + + def get_label(self, sid: str, timestamp: int) -> dict: + """Get a single label from a measurement + + Parameters + ---------- + sid : str + Id of the source for the measurement + timestamp : int + Timestamp of the measurement + + Returns + ------- + dict + label information + """ + + logger.info("endpoint %s", self.endpoint) + logger.info("Getting label") + + response = self._request("get", f"/sources/{sid}/labels/{timestamp}") + return response.json() + + def list_labels(self, source_id: str) -> List[dict]: + logger.info("endpoint %s", self.endpoint) + logger.info("Getting labels") + + response = self._request("get", f"/sources/{source_id}/labels") + return response.json() + + def update_label( + self, + sid: str, + timestamp: int, + label: str, + severity: int, + notes: Optional[str] = "", + ): + """Update a label for a measurement + + Parameters + ---------- + sid : str + Id of the source for the measurement + timestamp : int + Timestamp of the measurement + label : str + The new label to attach to the measurement + severity : int + The new severity of the label as a positive integer + notes : Optional[str], optional + New optional notes for the label, by default "" + """ + logger.info("endpoint %s", self.endpoint) + logger.info(f"Updating label of {sid} - {timestamp}") + + label_data = {"label": label, "severity": severity, "notes": notes} + + self._request("put", f"/sources/{sid}/labels/{timestamp}", json=label_data) + + def delete_label(self, sid: str, timestamp: int): + """Delete all label information from a measurement + + Parameters + ---------- + sid : str + Id of the source for the measurement + timestamp : int + Timestamp of the measurement + """ + logger.info("endpoint %s", self.endpoint) + logger.info(f"Deleting label for {sid} - {timestamp}") + + self._request("delete", f"/sources/{sid}/labels/{timestamp}") + class MVG(MVGAPI): """Class for a session providing an API to the vibium server. diff --git a/tests/test_api_general.py b/tests/test_api_general.py index 7097792c..65ffa1c7 100644 --- a/tests/test_api_general.py +++ b/tests/test_api_general.py @@ -8,6 +8,7 @@ import pytest import semver from requests import HTTPError +import requests from mvg import MVG VALID_TOKEN = os.environ["TEST_TOKEN"] @@ -73,5 +74,5 @@ def test_failure_authorization(vibium): def test_create_session_invalid_url(): - with pytest.raises(HTTPError): + with pytest.raises(requests.ConnectionError): MVG("invalidurl", "NO TOKEN") diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index 4967d185..b05619a3 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -59,6 +59,23 @@ def session(vibium): return session +@pytest.fixture() +def tabular_source(session): + try: + columns = tabular_df.columns.tolist() + meta = {"extra": "information"} + session.create_tabular_source(SOURCE_ID_TABULAR, meta, columns) + yield SOURCE_ID_TABULAR + finally: + session.delete_source(SOURCE_ID_TABULAR) + + +@pytest.fixture() +def tabular_source_with_measurements(session, tabular_source): + session.create_tabular_measurement(SOURCE_ID_TABULAR, tabular_dict) + yield tabular_source + + # Just to check if API is live def test_say_hello(session): hello = session.say_hello() @@ -265,44 +282,118 @@ def test_sources_cru_existing(session): session.create_source(SOURCE_ID_WAVEFORM, meta) -def test_tabular_sources(session): +def test_tabular_sources(session, tabular_source): columns = tabular_df.columns.tolist() columns.remove("timestamp") meta = {"extra": "information"} - session.create_tabular_source(SOURCE_ID_TABULAR, meta, columns) - src = session.get_source(SOURCE_ID_TABULAR) - assert src["source_id"] == SOURCE_ID_TABULAR + src = session.get_source(tabular_source) + assert src["source_id"] == tabular_source assert src["meta"] == meta assert src["properties"]["columns"] == columns -def test_tabular_measurements_float_timestamps(session): +def test_tabular_measurements_float_timestamps(session, tabular_source): with pytest.raises(HTTPError) as exc: tabular_dict_float = tabular_dict.copy() tabular_dict_float["timestamp"] = [ts + 0.1 for ts in tabular_dict["timestamp"]] - session.create_tabular_measurement(SOURCE_ID_TABULAR, tabular_dict_float) + session.create_tabular_measurement(tabular_source, tabular_dict_float) assert exc.value.response.status_code == 422 -def test_tabular_measurements(session): +def test_tabular_measurements(session, tabular_source): columns = tabular_df.columns.tolist() columns.remove("timestamp") - session.create_tabular_measurement(SOURCE_ID_TABULAR, tabular_dict) + session.create_tabular_measurement(tabular_source, tabular_dict) ts0 = tabular_dict["timestamp"][0] - meas = session.read_single_measurement(SOURCE_ID_TABULAR, ts0) + meas = session.read_single_measurement(tabular_source, ts0) assert meas["meta"] == {} assert all(np.array(meas["data"]) == tabular_df.drop("timestamp", axis=1).iloc[0]) assert meas["columns"] == columns - session.update_measurement(SOURCE_ID_TABULAR, ts0, {"new": "meta"}) - meas = session.read_single_measurement(SOURCE_ID_TABULAR, ts0) + session.update_measurement(tabular_source, ts0, {"new": "meta"}) + meas = session.read_single_measurement(tabular_source, ts0) assert meas["meta"] == {"new": "meta"} - session.delete_measurement(SOURCE_ID_TABULAR, ts0) + session.delete_measurement(tabular_source, ts0) with pytest.raises(HTTPError) as exc: - session.read_single_measurement(SOURCE_ID_TABULAR, ts0) + session.read_single_measurement(tabular_source, ts0) assert exc.value.response.status_code == 404 +def test_create_label(session, tabular_source_with_measurements): + timestamps = tabular_dict["timestamp"] + label1 = {"label": "normal", "severity": 0, "notes": ""} + label2 = {"label": "failure", "severity": 100, "notes": "This is really bad!"} + + session.create_label(tabular_source_with_measurements, timestamps[0], **label1) + session.create_label(tabular_source_with_measurements, timestamps[1], **label2) + + label1_ = session.get_label(tabular_source_with_measurements, timestamps[0]) + label2_ = session.get_label(tabular_source_with_measurements, timestamps[1]) + + labels = session.list_labels(tabular_source_with_measurements) + + assert labels == [ + dict(timestamp=timestamps[0], **label1), + dict(timestamp=timestamps[1], **label2), + ] + assert label1_ == label1 + assert label2_ == label2 + + +def test_update_label(session, tabular_source_with_measurements): + timestamps = tabular_dict["timestamp"] + session.create_label( + tabular_source_with_measurements, + timestamps[0], + "failure", + 100, + "This is really bad!", + ) + + session.update_label( + tabular_source_with_measurements, timestamps[0], "normal", 0, "It wasn't so bad" + ) + + label1 = session.get_label(tabular_source_with_measurements, timestamps[0]) + + assert label1 == {"label": "normal", "severity": 0, "notes": "It wasn't so bad"} + + +def test_update_label(session, tabular_source_with_measurements): + timestamps = tabular_dict["timestamp"] + session.create_label( + tabular_source_with_measurements, + timestamps[0], + "failure", + 100, + "This is really bad!", + ) + + session.update_label( + tabular_source_with_measurements, timestamps[0], "normal", 0, "It wasn't so bad" + ) + + label1 = session.get_label(tabular_source_with_measurements, timestamps[0]) + + assert label1 == {"label": "normal", "severity": 0, "notes": "It wasn't so bad"} + + +def test_delete_label(session, tabular_source_with_measurements): + timestamps = tabular_dict["timestamp"] + session.create_label( + tabular_source_with_measurements, + timestamps[0], + "failure", + 100, + "This is really bad!", + ) + + session.delete_label(tabular_source_with_measurements, timestamps[0]) + with pytest.raises(HTTPError) as exc: + session.get_label(tabular_source_with_measurements, timestamps[0]) + assert exc.value.response.status_code == 404 + + # End of code diff --git a/tests/test_mvg.py b/tests/test_mvg.py index 22ed842c..be8e8d62 100644 --- a/tests/test_mvg.py +++ b/tests/test_mvg.py @@ -3,12 +3,12 @@ not relying on access to vibium-cloud API """ -from requests import HTTPError import pytest +import requests from mvg import MVG def test_create_session_without_server(): """We should get an HTTPError because we cannot connect to localhost:8000""" - with pytest.raises(HTTPError): + with pytest.raises(requests.ConnectionError): MVG("localhost:8000", "NO TOKEN") From c6a2069a20735e036a184a15c1ff65055557227c Mon Sep 17 00:00:00 2001 From: Fredrik Wartenberg Date: Wed, 11 Aug 2021 09:05:18 +0200 Subject: [PATCH 08/90] Analysis class reorg (#47) * mode table disply in ModeId analysis class * Python 3.6 compatible pickle version for test data * Python 3.6 & 3.8 compatible pickle version for test data * Skeleton for feature modularization * Shaping up code * Updated Documentation * Changed mode table layout after feebdack from Vishnu * Added label api to mvg (#41) * Added label api to mvg * Added docstrings * changing get_labels to list_labels * Connection error * Fixing linter * Flake8 * Fixing tests * mode table disply in ModeId analysis class & class reorg rebased to mvg with labelling support * Stepped version to 0.7.4 * Changes layout of modetable as to use endTimes from current mode rather than next mode * Fixes a bug in Blacksheep plot showing up for matplot lib 3.4.2 Co-authored-by: Oskar Liew <43787643+OskarLiew@users.noreply.github.com> --- analysis_classes_examples/black_sheep.py | 4 +- .../utilities_reference/analysis_classes.rst | 20 + docs/source/index.rst | 1 + mvg/analysis_classes.py | 686 +----------------- mvg/features/analysis.py | 341 +++++++++ mvg/features/blacksheep.py | 183 +++++ mvg/features/modeid.py | 182 +++++ mvg/features/rms.py | 68 ++ mvg/mode_table.py | 58 ++ mvg/mvg.py | 2 +- tests/test_analysis_classes.py | 13 + tests/test_data/mode_table_datetime.pkl | Bin 0 -> 1486 bytes tests/test_data/mode_table_no_datetime.csv | 4 + tests/test_data/mode_table_nowc.csv | 4 + tests/test_data/mode_table_wc.pkl | Bin 0 -> 1707 bytes tools/analysis.py | 92 +-- tools/params.json | 3 + 17 files changed, 939 insertions(+), 722 deletions(-) create mode 100644 mvg/features/analysis.py create mode 100644 mvg/features/blacksheep.py create mode 100644 mvg/features/modeid.py create mode 100644 mvg/features/rms.py create mode 100644 mvg/mode_table.py create mode 100644 tests/test_data/mode_table_datetime.pkl create mode 100644 tests/test_data/mode_table_no_datetime.csv create mode 100644 tests/test_data/mode_table_nowc.csv create mode 100644 tests/test_data/mode_table_wc.pkl create mode 100644 tools/params.json diff --git a/analysis_classes_examples/black_sheep.py b/analysis_classes_examples/black_sheep.py index bf4da338..106a83a5 100644 --- a/analysis_classes_examples/black_sheep.py +++ b/analysis_classes_examples/black_sheep.py @@ -10,8 +10,8 @@ RERUN = True # replace token and server with your url/token -ENDPOINT = os.environ["SERVER_URL"] -TOKEN = os.environ["SERVER_TOKEN"] +ENDPOINT = os.environ["TEST_URL"] +TOKEN = os.environ["TEST_TOKEN"] ses = MVG(ENDPOINT, TOKEN) SOURCE_ID_ALL = ["u0001", "u0002", "u0003", "u0004", "u0005", "u0006"] diff --git a/docs/source/content/utilities_reference/analysis_classes.rst b/docs/source/content/utilities_reference/analysis_classes.rst index c6ff713c..1e0dd5d0 100644 --- a/docs/source/content/utilities_reference/analysis_classes.rst +++ b/docs/source/content/utilities_reference/analysis_classes.rst @@ -7,3 +7,23 @@ MutliViz Analysis Classes :members: :undoc-members: :show-inheritance: + +.. automodule:: mvg.features.analysis + :members: + :undoc-members: + :show-inheritance: + +.. automodule:: mvg.features.modeid + :members: + :undoc-members: + :show-inheritance: + +.. automodule:: mvg.features.blacksheep + :members: + :undoc-members: + :show-inheritance: + +.. automodule:: mvg.features.rms + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/index.rst b/docs/source/index.rst index 92bf81b8..d645f57b 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -34,6 +34,7 @@ content/api_reference/mvg content/utilities_reference/analysis_classes + Indices and tables diff --git a/mvg/analysis_classes.py b/mvg/analysis_classes.py index f3cd51c6..328c2ec8 100644 --- a/mvg/analysis_classes.py +++ b/mvg/analysis_classes.py @@ -14,685 +14,17 @@ of the correct feature class. """ -import pickle -import json -import numpy as np -import pandas as pd -import matplotlib.pyplot as plt -from matplotlib import cm -import matplotlib.patches as mpatches -from tabulate import tabulate -from mvg import plotting +# Import feature classes +from mvg.features.analysis import Analysis # Base Class +from mvg.features.rms import RMS +from mvg.features.modeid import ModeId +from mvg.features.blacksheep import BlackSheep +# from mvg.features.envelope import Envelope -# Base class for analyses -class Analysis: - """Root class for analysis system classes.""" - - # Init class with results - def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): - """ - Constructor - Called as super() from specific analysis class. Stores the results - form the request, preforms basic (result independent parsing) and - sets timezone/time unit. - - Parameters - ---------- - results: dict - analysis results - t_zone: t_zone - timezone, if None, times will remain in epoch time [Europe/Stockholm]. - - t_unit: t_unit - time unit for conversion from epoch time [ms]. - """ - - # raw_results as returned from server - self._raw_results = results - - # timezone and unit set in constructor - self._t_zone = t_zone - self._t_unit = t_unit - - # Dataframe representation - self._results_df = None - - self._inputs = results.get("inputs", "Inputs not available") - - self.time_column = None - - def _render_plot(self, interactive): - """Render plot to screen (interactive) or file. - - Parameters - --------- - interactive: bool - Wheter to display plot on screen (True) or to store to file (False). - - Returns - ------- - plot file name: str - name of plot file (or emtpy string in case of interactive plot) - """ - if interactive: - plot_file = "" - plt.show() - else: - if len(self.sources()) > 1: - srcstr = self.sources()[0] + "_to_" + self.sources()[-1] + "_" - else: - srcstr = self.sources()[0] + "_" - plot_file = srcstr + self.request_id() + ".png" - plt.savefig(plot_file, dpi=600, bbox_inches="tight") - print(f"saved plot to {plot_file}") - - return plot_file - - def _add_datetime(self): - """ - Convert EPOCH time to datetime with the - timezone and time unit given in constructor. Will add - an additional column "datetime" to the dataframe - and set time_column to "datetime" - Works on class object dframe and sets time column to - datetime. - """ - - self._results_df = self._add_datetime_df(self._results_df, "timestamps") - - def _add_datetime_df(self, dframe, timecolumn): - """ - Convert EPOCH time to datetime with the - timezone and time unit given in constructor. Will add - an additional column "datetime" to the dataframe - Operates on given df and given time column - - Parameters - ---------- - dframe: DataFrame - DataFrame to operate on - timecolumn: str - columns containing time - - Returns - ------- - DataFrame with added datetime colums - """ - - # Check if there is info for conversion - if self._t_zone is not None: - - # EPOCH to datetime considering time zone - dt_col = pd.to_datetime( - dframe[timecolumn], unit=self._t_unit, utc=True - ).dt.tz_convert(self._t_zone) - - dframe["datetime"] = dt_col - - # Mark timecolumn as available - # self.time_column = timecolumn - - return dframe - - # Accessor functions - def raw_results(self): - """Raw results as returned by server - Returns - ------- - raw_results: dict - """ - - return self._raw_results - - def request_id(self): - """request_id from request - - Returns - ------- - request_id: str - """ - - return self._raw_results["request_id"] - - def feature(self): - """feature from request - - Returns - ------- - feature: str - """ - - return self._raw_results["feature"] - - def results(self): - """results dict as returned from request - - Returns - ------- - results: dict - """ - - return self._raw_results["results"] - - def status(self): - """status from request - - Returns - ------- - status: str - """ - - return self._raw_results["status"] - - def inputs(self): - """inputs to the request algortihm - - Returns - ------- - inputs: dict - """ - - return self._inputs - - def sources(self): - """sources to the request algortihm - - Returns - ------- - sources: list - """ - - sources = self.inputs()["UUID"] - if not isinstance(self.inputs()["UUID"], list): - sources = [self.inputs()["UUID"]] - - return sources - - # For avoiding problems when no results are available - def check_status(self): - if "success" not in self.status(): - err_str = f"Analysis {self.request_id} failed on server side" - print(err_str) - raise ValueError(err_str) - return self.status() - - # Prints header for summary functions - def summary(self): - """ - Print header for summary function. Called as super() from specific - analysis class. Will raise an exception in case request was not - successful - """ - - # Anounce - print(f"=== {self.feature()} ===") - print(f"request_id {self.request_id()}") - # Check success - self.check_status() - # print time info if applicable - if self.time_column is not None: - from_t = self._results_df[self.time_column].min() - to_t = self._results_df[self.time_column].max() - if self.time_column == "datetime": - from_t = from_t.strftime("%Y%m%d-%H:%M.%S") - to_t = to_t.strftime("%Y%m%d-%H:%M.%S") - print(f"from {from_t} to {to_t}") - - # Default method - def plot( - self, interactive=True, time_format=None - ): # pylint: disable=unused-argument - """Pro forma ancestor function. - - Parameters - ---------- - interactive : bool - True: show plot, False: save plot - - time_format: str, optional - strftime format specifier for tick_x_lables. If not given - only dates are shown. To show dates and time use %y%m%d-%H:%M:%S - - Returns - ------- - plot file name: str - name of plot file (or emtpy string in case of interactive plot) - """ - - self.check_status() - print(f"Plot function not implemented for {type(self).__name__}") - return "" - - # Save self as pickel - def save_pkl(self, file_name=None): - """Serializes the analysis object as pickle file. - In case of filname is not given, filename will be - .pkl - - Parameters - ---------- - file_name: str - filename to save object under. - - Returns - ------- - Actually used file path: str - """ - - if file_name is None: - file_name = f"{self.request_id()}.pkl" - print(f"Saving {self.feature()} object to", file_name) - with open(file_name, "wb") as pkl_file: - pickle.dump(self, pkl_file) - return file_name - - # Return results as dataframe - def to_df(self): - """Return a dataframe with the analysis results. - Returns - ------- - Dataframe with analysis results: dataFrame - - """ - - self.check_status() - return self._results_df - - # Save results to dataframe - def save_df(self, file_name=None): - """Save a dataframe with the analysis results. - In case of filname is not given, filename will be - .csv - Format of the dataframe depends on specific analysis. - Will raise an exception in case no results are available. - - Parameters - ---------- - file_name: str - filename to save dataframe under. - - Returns - ------- - Actually used file path: str - - """ - - self.check_status() - - if file_name is None: - file_name = f"{self.request_id()}.csv" - - print(f"Saving {self.feature()} data frame results to", file_name) - self._results_df.copy().to_csv(file_name, index=False) - - return file_name - - # Save self as pickel - def save_json(self, file_name=None, raw=False): - """Saves the request result from the API JSON - In case of filname is not given, filename will be - .json - - Parameters - ---------- - file_name: str - filename to save object under. - raw: boolean - return only alogrithm results [false, default] - return full request response [true] - - Returns - ------- - Actually used file path: str - """ - - if file_name is None: - file_name = f"{self.request_id()}.json" - print(f"Saving {self.feature()} API results to", file_name) - - if raw: - s_dict = self._raw_results - else: - s_dict = self.results() - - with open(file_name, "w") as json_file: - json.dump(s_dict, json_file, indent=4) - return file_name - - -class RMS(Analysis): - """ Analysis class for RMS feature.""" - - def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): - """Constructor - - Parameters - ---------- - results: dict - Dictionary with the server response form a get_analysis_results call. - - t_zone: str - timezone, if None, times will remain in epoch time [Europe/Stockholm]. - - t_unit: str - time unit for conversion from epoch time [ms]. - """ - - Analysis.__init__(self, results, t_zone, t_unit) - self._results_df = pd.DataFrame.from_dict(self.results()) - self.time_column = "timestamps" - self._add_datetime() - - def summary(self): - """Print summary information on RMS. - - Returns - ------- - summary table: dataFrame - """ - - super().summary() - print() - tab = self._results_df.describe() - print(tabulate(tab, headers="keys", tablefmt="psql")) - return tab - - def plot(self, interactive=True, time_format=None): - """ - Generate a basic plot on RMS. - - Parameters - ---------- - interactive : bool - True: show plot, False: save plot - - time_format: str, optional - strftime format specifier for tick_x_lables. If not given - only dates are shown. To show dates and time use %y%m%d-%H:%M:%S - - - Returns - ------- - plot file name : str - name of plot file (or emtpy string in case of interactive plot) - """ - - self.check_status() - self._results_df.plot(x=self.time_column, y=["rms", "dc", "utilization"]) - plt.title(f"RMS Summary plot for request {self.request_id()}") - return self._render_plot(interactive) - - -class ModeId(Analysis): - def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): - """Constructor - - Parameters - ---------- - results: dict - Dictionary with the server response form a get_analysis_results call. - - t_zone: str - timezone, if None, times will remain in epoch time [Europe/Stockholm]. - - t_unit: str - time unit for conversion from epoch time [ms]. - """ - - Analysis.__init__(self, results, t_zone, t_unit) - if "success" not in self.status(): - print(f"Analysis {self.request_id} failed on server side") - else: - dict_for_df = self.results().copy() - dict_for_emerging = dict_for_df.pop("mode_info") - self.emerging_df = pd.DataFrame.from_dict(dict_for_emerging) - self._results_df = pd.DataFrame.from_dict(dict_for_df) - self.time_column = "timestamps" - self._add_datetime() - self.emerging_df = self._add_datetime_df(self.emerging_df, "emerging_time") - - def summary(self): - """ - Print summary on ModeId. - - Returns - ------- - Summary table: dataFrame - """ - - # Header - super().summary() - - # labels - tbl = self._results_df.groupby(["labels"]).agg(np.size) - tbl["uncertain"] = tbl["uncertain"] / sum(tbl["uncertain"]) * 100 - tbl = tbl.rename(columns={"timestamps": "counts", "uncertain": "portion"}) - print() - print("Labels") - print(tabulate(tbl, headers="keys", tablefmt="psql")) - - # Uncertain - tbl2 = self._results_df.groupby( - ["labels", "uncertain"], - ).agg(np.size) - tbl2["counts"] = tbl2["timestamps"] - tbl2 = tbl2.rename(columns={"timestamps": "portion"}) - tbl2["portion"] = tbl2["portion"] / sum(tbl2["portion"]) * 100 - print() - print("Lables & uncertain labels") - print(tabulate(tbl2, headers="keys", tablefmt="psql")) - - # Emerging - print() - print("Emerging Modes") - print(tabulate(self.emerging_df, headers="keys", tablefmt="psql")) - - return [tbl, tbl2, self.emerging_df] - - def plot(self, interactive=True, time_format=None): - """ - Generate a basic plot on ModeId. - - Parameters - ---------- - interactive : bool - True: show plot, False: save plot - - time_format: str, optional - strftime format specifier for tick_x_lables. If not given - only dates are shown. To show dates and time use %y%m%d-%H:%M:%S - - Returns - ------- - plot file name : str - name of plot file (or emtpy string in case of interactive plot) - """ - - self.check_status() - plotting.modes_over_time( - data=self.to_df(), - request_id=self.request_id(), - timeunit=self._t_unit, - time_format=time_format, - ) - - return self._render_plot(interactive) - - -class BlackSheep(Analysis): - def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): - """Constructor - - Parameters - ---------- - results: dict - Dictionary with the server response form a get_analysis_results call. - - t_zone: str - timezone, if None, times will remain in epoch time [Europe/Stockholm]. - - t_unit: str - time unit for conversion from epoch time [ms]. - """ - - # Super - Analysis.__init__(self, results, t_zone, t_unit) - - # Dataframe conversion - if "success" not in self.status(): - print("Analysis was not successful") - else: - self._results_df = self._bsd_df() - # List of which assests are what - self.typicality = pd.DataFrame( - {"source": results["inputs"]["UUID"], "atypical": False} - ) - self.typicality = self.typicality.set_index("source") - aty = [a["source_id"] for a in self.results()["atypical_assets"]] - self.typicality.loc[aty] = True - self.typicality = self.typicality.reset_index() - self.time_column = None - - def _bsd_df(self): - # Wide - def aty_df(ass): - source_id = ass.pop("source_id") - bsd_df = pd.DataFrame.from_dict(ass) - bsd_df.columns = [ - "timestamps", - source_id + "_label", - source_id + "_atypical", - ] - return bsd_df - - wide_df = None - for ass in self.results()["atypical_assets"]: - if wide_df is None: - wide_df = aty_df(ass.copy()) - else: - wide_df = pd.merge(aty_df(ass.copy()), wide_df, how="outer") - - # Add timestamps - wide_df = self._add_datetime_df(wide_df, "timestamps") - return wide_df.sort_values(by="timestamps") - - def summary(self): - """Print summary on BlackSheep - - Returns - ------- - Summary tables: atypical assets and stats - """ - - # Header - super().summary() - - # Table - print() - print( - tabulate( - self.typicality.reset_index(drop=True, inplace=False), - headers=["source", "atypical"], - tablefmt="psql", - ) - ) - - print() - tbl = self.typicality.groupby(["atypical"]).agg(np.size) - print(tabulate(tbl, headers=["atypical", "N"], tablefmt="psql")) - return [self.typicality, tbl] - - # pylint: disable=too-many-locals - def plot(self, interactive=True, time_format=None): - """Generate a (not so) basic plot for BlackSheep - Will show per atypical asset changes to and from - atypical modes - - Parameters - ---------- - interactive : bool - True: show plot, False: save plot - - time_format: str, optional - strftime format specifier for tick_x_lables. If not given - only dates are shown. To show dates and time use %y%m%d-%H:%M:%S - - - Returns - ------- - plot file name : str - name of plot file (or emtpy string in case of interactive plot) - """ - - # Check if run was successful - self.check_status() - - # For Matrix & xTicks, remove label columns and potentiall datetime - # store in pdfd df - pdf = self.to_df() - pdfd = pdf.loc[:, ~pdf.columns.str.endswith("label")] - pdfd = pdfd.loc[:, ~pdfd.columns.str.endswith("datetime")] - - # x axis ticks timestamps of changes in atypicality - # Find changes in atypticality and store rows in - pdfd.insert(len(pdfd.columns), "hash", 0) - for row in pdfd.itertuples(): - pdfd.at[row.Index, "hash"] = hash(row[2:]) - ticktimes = pdfd.loc[pdfd["hash"].shift(1) != pdfd["hash"]] - - # Convert EPOCH if t_zone given - if self._t_zone is not None: - ticktimes = self._add_datetime_df(ticktimes, "timestamps") - - # select reasonable number of ticks - # this could be improved to yield equidistant ticks - if len(ticktimes) > 10: - ticktimes = ticktimes.iloc[:: int(len(ticktimes) / 10), :] - - # Setup plot - fig, bsd_plt = plt.subplots(1, 1) - - # Title - bsd_plt.set_title("Atypical Assets and Modes [" + self.request_id() + "]") - - # y-axis Asset labels - # extract names from df - coli = pdfd.columns.to_list() - assets = [c.replace("_atypical", "") for c in coli if c.endswith("atypical")] - bsd_plt.set_yticks(np.arange(0, len(assets) + 1, 1)) - bsd_plt.set_yticklabels(assets) - - # x axis ticks - bsd_plt.set_xticks(ticktimes.index) - if self.time_column is not None: - bsd_plt.set_xticklabels( - ticktimes["datetime"].apply(lambda x: x.strftime("%y%m%d-%H%M%S")) - ) - else: - bsd_plt.set_xticklabels(ticktimes["timestamps"]) - fig.autofmt_xdate(rotation=45) - - # Color map - mcm = cm.get_cmap("viridis", 2) - - # Colors for plot and legend - cmap = {0: mcm(0), 1: mcm(1)} - labels = {0: "normal", 1: "atypical"} - patches = [mpatches.Patch(color=cmap[i], label=labels[i]) for i in cmap] - plt.legend(handles=patches, loc=4, borderaxespad=0.0) - - # The plot (need to remove na) - # For matrix - pdfd = pdfd.drop(["timestamps", "hash"], axis=1) - pdfd = pdfd.fillna(method="ffill") - pdfd = pdfd.dropna() - plotmx = np.asmatrix(pdfd).transpose() - plotmx = plotmx.astype(int) - bsd_plt.imshow(plotmx, aspect="auto", cmap=mcm) - - # Display plot - return self._render_plot(interactive) +_ = RMS # avoid F401 linting error +_ = ModeId # avoid F401 linting error +_ = BlackSheep # avoid F401 linting error # Parser/Factory function diff --git a/mvg/features/analysis.py b/mvg/features/analysis.py new file mode 100644 index 00000000..5cb6d34d --- /dev/null +++ b/mvg/features/analysis.py @@ -0,0 +1,341 @@ +"""Analysis Classes Base Class""" +import pickle +import json +import pandas as pd +import matplotlib.pyplot as plt + + +# Base class for analyses +class Analysis: + """Root class for analysis system classes.""" + + # Init class with results + def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): + """ + Constructor + Called as super() from specific analysis class. Stores the results + form the request, preforms basic (result independent parsing) and + sets timezone/time unit. + + Parameters + ---------- + results: dict + analysis results + t_zone: t_zone + timezone, if None, times will remain in epoch time [Europe/Stockholm]. + + t_unit: t_unit + time unit for conversion from epoch time [ms]. + """ + + # raw_results as returned from server + self._raw_results = results + + # timezone and unit set in constructor + self._t_zone = t_zone + self._t_unit = t_unit + + # Dataframe representation + self._results_df = None + + self._inputs = results.get("inputs", "Inputs not available") + + self.time_column = None + + def _render_plot(self, interactive): + """Render plot to screen (interactive) or file. + + Parameters + --------- + interactive: bool + Wheter to display plot on screen (True) or to store to file (False). + + Returns + ------- + plot file name: str + name of plot file (or emtpy string in case of interactive plot) + """ + if interactive: + plot_file = "" + plt.show() + else: + if len(self.sources()) > 1: + srcstr = self.sources()[0] + "_to_" + self.sources()[-1] + "_" + else: + srcstr = self.sources()[0] + "_" + plot_file = srcstr + self.request_id() + ".png" + plt.savefig(plot_file, dpi=600, bbox_inches="tight") + print(f"saved plot to {plot_file}") + + return plot_file + + def _add_datetime(self): + """ + Convert EPOCH time to datetime with the + timezone and time unit given in constructor. Will add + an additional column "datetime" to the dataframe + and set time_column to "datetime" + Works on class object dframe and sets time column to + datetime. + """ + + self._results_df = self._add_datetime_df(self._results_df, "timestamps") + + def _add_datetime_df(self, dframe, timecolumn): + """ + Convert EPOCH time to datetime with the + timezone and time unit given in constructor. Will add + an additional column "datetime" to the dataframe + Operates on given df and given time column + + Parameters + ---------- + dframe: DataFrame + DataFrame to operate on + timecolumn: str + columns containing time + + Returns + ------- + DataFrame with added datetime colums + """ + + # Check if there is info for conversion + if self._t_zone is not None: + + # EPOCH to datetime considering time zone + dt_col = pd.to_datetime( + dframe[timecolumn], unit=self._t_unit, utc=True + ).dt.tz_convert(self._t_zone) + + dframe["datetime"] = dt_col + + # Mark timecolumn as available + self.time_column = "datetime" + + return dframe + + # Accessor functions + def raw_results(self): + """Raw results as returned by server + Returns + ------- + raw_results: dict + """ + + return self._raw_results + + def request_id(self): + """request_id from request + + Returns + ------- + request_id: str + """ + + return self._raw_results["request_id"] + + def feature(self): + """feature from request + + Returns + ------- + feature: str + """ + + return self._raw_results["feature"] + + def results(self): + """results dict as returned from request + + Returns + ------- + results: dict + """ + + return self._raw_results["results"] + + def status(self): + """status from request + + Returns + ------- + status: str + """ + + return self._raw_results["status"] + + def inputs(self): + """inputs to the request algortihm + + Returns + ------- + inputs: dict + """ + + return self._inputs + + def sources(self): + """sources to the request algortihm + + Returns + ------- + sources: list + """ + + sources = self.inputs()["UUID"] + if not isinstance(self.inputs()["UUID"], list): + sources = [self.inputs()["UUID"]] + + return sources + + # For avoiding problems when no results are available + def check_status(self): + if "success" not in self.status(): + err_str = f"Analysis {self.request_id} failed on server side" + print(err_str) + raise ValueError(err_str) + return self.status() + + # Prints header for summary functions + def summary(self): + """ + Print header for summary function. Called as super() from specific + analysis class. Will raise an exception in case request was not + successful + """ + + # Anounce + print(f"=== {self.feature()} ===") + print(f"request_id {self.request_id()}") + # Check success + self.check_status() + # print time info if applicable + if self.time_column is not None: + from_t = self._results_df[self.time_column].min() + to_t = self._results_df[self.time_column].max() + if self.time_column == "datetime": + from_t = from_t.strftime("%Y%m%d-%H:%M.%S") + to_t = to_t.strftime("%Y%m%d-%H:%M.%S") + print(f"from {from_t} to {to_t}") + + # Default method + def plot( + self, interactive=True, time_format=None + ): # pylint: disable=unused-argument + """Pro forma ancestor function. + + Parameters + ---------- + interactive : bool + True: show plot, False: save plot + + time_format: str, optional + strftime format specifier for tick_x_lables. If not given + only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + + Returns + ------- + plot file name: str + name of plot file (or emtpy string in case of interactive plot) + """ + + self.check_status() + print(f"Plot function not implemented for {type(self).__name__}") + return "" + + # Save self as pickel + def save_pkl(self, file_name=None): + """Serializes the analysis object as pickle file. + In case of filname is not given, filename will be + .pkl + + Parameters + ---------- + file_name: str + filename to save object under. + + Returns + ------- + Actually used file path: str + """ + + if file_name is None: + file_name = f"{self.request_id()}.pkl" + print(f"Saving {self.feature()} object to", file_name) + with open(file_name, "wb") as pkl_file: + pickle.dump(self, pkl_file) + return file_name + + # Return results as dataframe + def to_df(self): + """Return a dataframe with the analysis results. + Returns + ------- + Dataframe with analysis results: dataFrame + + """ + + self.check_status() + return self._results_df + + # Save results to dataframe + def save_df(self, file_name=None): + """Save a dataframe with the analysis results. + In case of filname is not given, filename will be + .csv + Format of the dataframe depends on specific analysis. + Will raise an exception in case no results are available. + + Parameters + ---------- + file_name: str + filename to save dataframe under. + + Returns + ------- + Actually used file path: str + + """ + + self.check_status() + + if file_name is None: + file_name = f"{self.request_id()}.csv" + + print(f"Saving {self.feature()} data frame results to", file_name) + self._results_df.copy().to_csv(file_name, index=False) + + return file_name + + # Save self as pickel + def save_json(self, file_name=None, raw=False): + """Saves the request result from the API JSON + In case of filname is not given, filename will be + .json + + Parameters + ---------- + file_name: str + filename to save object under. + raw: boolean + return only alogrithm results [false, default] + return full request response [true] + + Returns + ------- + Actually used file path: str + """ + + if file_name is None: + file_name = f"{self.request_id()}.json" + print(f"Saving {self.feature()} API results to", file_name) + + if raw: + s_dict = self._raw_results + else: + s_dict = self.results() + + with open(file_name, "w") as json_file: + json.dump(s_dict, json_file, indent=4) + return file_name diff --git a/mvg/features/blacksheep.py b/mvg/features/blacksheep.py new file mode 100644 index 00000000..f1a271d0 --- /dev/null +++ b/mvg/features/blacksheep.py @@ -0,0 +1,183 @@ +"""Analysis Class for BlackSheep Feature""" +import numpy as np +import pandas as pd +import matplotlib.pyplot as plt +from matplotlib import cm +import matplotlib.patches as mpatches +from tabulate import tabulate +from mvg.features.analysis import Analysis + + +class BlackSheep(Analysis): + def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): + """Constructor + + Parameters + ---------- + results: dict + Dictionary with the server response form a get_analysis_results call. + + t_zone: str + timezone, if None, times will remain in epoch time [Europe/Stockholm]. + + t_unit: str + time unit for conversion from epoch time [ms]. + """ + + # Super + Analysis.__init__(self, results, t_zone, t_unit) + + # Dataframe conversion + if "success" not in self.status(): + print("Analysis was not successful") + else: + self._results_df = self._bsd_df() + # List of which assests are what + self.typicality = pd.DataFrame( + {"source": results["inputs"]["UUID"], "atypical": False} + ) + self.typicality = self.typicality.set_index("source") + aty = [a["source_id"] for a in self.results()["atypical_assets"]] + self.typicality.loc[aty] = True + self.typicality = self.typicality.reset_index() + self.time_column = None + + def _bsd_df(self): + # Wide + def aty_df(ass): + source_id = ass.pop("source_id") + bsd_df = pd.DataFrame.from_dict(ass) + bsd_df.columns = [ + "timestamps", + source_id + "_label", + source_id + "_atypical", + ] + return bsd_df + + wide_df = None + for ass in self.results()["atypical_assets"]: + if wide_df is None: + wide_df = aty_df(ass.copy()) + else: + wide_df = pd.merge(aty_df(ass.copy()), wide_df, how="outer") + + # Add timestamps + wide_df = self._add_datetime_df(wide_df, "timestamps") + return wide_df.sort_values(by="timestamps") + + def summary(self): + """Print summary on BlackSheep + + Returns + ------- + Summary tables: atypical assets and stats + """ + + # Header + super().summary() + + # Table + print() + print( + tabulate( + self.typicality.reset_index(drop=True, inplace=False), + headers=["source", "atypical"], + tablefmt="psql", + ) + ) + + print() + tbl = self.typicality.groupby(["atypical"]).agg(np.size) + print(tabulate(tbl, headers=["atypical", "N"], tablefmt="psql")) + return [self.typicality, tbl] + + # pylint: disable=too-many-locals + def plot(self, interactive=True, time_format=None): + """Generate a (not so) basic plot for BlackSheep + Will show per atypical asset changes to and from + atypical modes + + Parameters + ---------- + interactive : bool + True: show plot, False: save plot + + time_format: str, optional + strftime format specifier for tick_x_lables. If not given + only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + + + Returns + ------- + plot file name : str + name of plot file (or emtpy string in case of interactive plot) + """ + + # Check if run was successful + self.check_status() + + # For Matrix & xTicks, remove label columns and potentiall datetime + # store in pdfd df + pdf = self.to_df() + pdfd = pdf.loc[:, ~pdf.columns.str.endswith("label")] + pdfd = pdfd.loc[:, ~pdfd.columns.str.endswith("datetime")] + + # x axis ticks timestamps of changes in atypicality + # Find changes in atypticality and store rows in + pdfd.insert(len(pdfd.columns), "hash", 0) + for row in pdfd.itertuples(): + pdfd.at[row.Index, "hash"] = hash(row[2:]) + ticktimes = pdfd.loc[pdfd["hash"].shift(1) != pdfd["hash"]] + + # Convert EPOCH if t_zone given + if self._t_zone is not None: + ticktimes = self._add_datetime_df(ticktimes, "timestamps") + + # select reasonable number of ticks + # this could be improved to yield equidistant ticks + if len(ticktimes) > 10: + ticktimes = ticktimes.iloc[:: int(len(ticktimes) / 10), :] + + # Setup plot + fig, bsd_plt = plt.subplots(1, 1) + + # Title + bsd_plt.set_title("Atypical Assets and Modes [" + self.request_id() + "]") + + # y-axis Asset labels + # extract names from df + coli = pdfd.columns.to_list() + assets = [c.replace("_atypical", "") for c in coli if c.endswith("atypical")] + bsd_plt.set_yticks(np.arange(0, len(assets), 1)) + bsd_plt.set_yticklabels(assets) + + # x axis ticks + bsd_plt.set_xticks(ticktimes.index) + if self.time_column is not None: + bsd_plt.set_xticklabels( + ticktimes["datetime"].apply(lambda x: x.strftime("%y%m%d-%H%M%S")) + ) + else: + bsd_plt.set_xticklabels(ticktimes["timestamps"]) + fig.autofmt_xdate(rotation=45) + + # Color map + mcm = cm.get_cmap("viridis", 2) + + # Colors for plot and legend + cmap = {0: mcm(0), 1: mcm(1)} + labels = {0: "normal", 1: "atypical"} + patches = [mpatches.Patch(color=cmap[i], label=labels[i]) for i in cmap] + plt.legend(handles=patches, loc=4, borderaxespad=0.0) + + # The plot (need to remove na) + # For matrix + pdfd = pdfd.drop(["timestamps", "hash"], axis=1) + pdfd = pdfd.fillna(method="ffill") + pdfd = pdfd.dropna() + plotmx = np.asmatrix(pdfd).transpose() + plotmx = plotmx.astype(int) + bsd_plt.imshow(plotmx, aspect="auto", cmap=mcm) + + # Display plot + return self._render_plot(interactive) diff --git a/mvg/features/modeid.py b/mvg/features/modeid.py new file mode 100644 index 00000000..139df04d --- /dev/null +++ b/mvg/features/modeid.py @@ -0,0 +1,182 @@ +"""Analysis Class for ModeId Feature""" +import numpy as np +import pandas as pd +from tabulate import tabulate +from mvg import plotting +from mvg.features.analysis import Analysis + + +class ModeId(Analysis): + def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): + """Constructor + + Parameters + ---------- + results: dict + Dictionary with the server response form a get_analysis_results call. + + t_zone: str + timezone, if None, times will remain in epoch time [Europe/Stockholm]. + + t_unit: str + time unit for conversion from epoch time [ms]. + """ + + Analysis.__init__(self, results, t_zone, t_unit) + if "success" not in self.status(): + print(f"Analysis {self.request_id} failed on server side") + else: + dict_for_df = self.results().copy() + dict_for_emerging = dict_for_df.pop("mode_info") + self.emerging_df = pd.DataFrame.from_dict(dict_for_emerging) + self._results_df = pd.DataFrame.from_dict(dict_for_df) + self.time_column = "timestamps" + self._add_datetime() + self.emerging_df = self._add_datetime_df(self.emerging_df, "emerging_time") + + def summary(self): + """ + Print summary on ModeId. + + Returns + ------- + Summary table: dataFrame + """ + + # Header + super().summary() + + # labels + tbl = self._results_df.groupby(["labels"]).agg(np.size) + tbl["uncertain"] = tbl["uncertain"] / sum(tbl["uncertain"]) * 100 + tbl = tbl.rename(columns={"timestamps": "counts", "uncertain": "portion"}) + print() + print("Labels") + print(tabulate(tbl, headers="keys", tablefmt="psql")) + + # Uncertain + tbl2 = self._results_df.groupby( + ["labels", "uncertain"], + ).agg(np.size) + tbl2["counts"] = tbl2["timestamps"] + tbl2 = tbl2.rename(columns={"timestamps": "portion"}) + tbl2["portion"] = tbl2["portion"] / sum(tbl2["portion"]) * 100 + print() + print("Lables & uncertain labels") + print(tabulate(tbl2, headers="keys", tablefmt="psql")) + + # Emerging + print() + print("Emerging Modes") + print(tabulate(self.emerging_df, headers="keys", tablefmt="psql")) + + return [tbl, tbl2, self.emerging_df] + + def plot(self, interactive=True, time_format=None): + """ + Generate a basic plot on ModeId. + + Parameters + ---------- + interactive : bool + True: show plot, False: save plot + + time_format: str, optional + strftime format specifier for tick_x_lables. If not given + only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + + Returns + ------- + plot file name : str + name of plot file (or emtpy string in case of interactive plot) + """ + + self.check_status() + plotting.modes_over_time( + data=self.to_df(), + request_id=self.request_id(), + timeunit=self._t_unit, + time_format=time_format, + ) + + return self._render_plot(interactive) + + def mode_table(self, show_uncertain=False): + """ + Show mode table which gives start time for each consecutive period of + equal labels, including number of rows and time difference. + Will also show datetimes if timezone is given when instatiating + class. + + Parameters + ---------- + show_uncertain: bool + wheter to consider uncertain labels in the table (False) + + Returns + ------- + mode_table: df + Dataframe showing times when modes change. + """ + label_df = self.to_df() + mode_table = self.to_df() + if show_uncertain: + mode_table.loc[mode_table["uncertain"], ["labels"]] = -1 + + # prepare + mode_table["nextLabel"] = mode_table["labels"].shift(1) + mode_table["prevLabel"] = mode_table["labels"].shift(-1) + mode_table["startRow"] = mode_table.index + mode_table["endRow"] = mode_table.index + + mt_next = mode_table[mode_table["labels"] != mode_table["nextLabel"]].copy() + mt_next = mt_next.rename(columns={"timestamps": "start", "datetime": "wcStart"}) + mt_next = mt_next.drop( + ["mode_probability", "nextLabel", "prevLabel", "endRow"], axis=1 + ) + + mt_prev = mode_table[mode_table["labels"] != mode_table["prevLabel"]].copy() + mt_prev = mt_prev.rename(columns={"timestamps": "end", "datetime": "wcEnd"}) + mt_prev = mt_prev.drop( + [ + "mode_probability", + "nextLabel", + "prevLabel", + "startRow", + "labels", + "uncertain", + ], + axis=1, + ) + + # merge + mt_both = pd.concat([mt_next, mt_prev.set_index(mt_next.index)], axis=1) + + # Durations + mt_both["duration"] = mt_both["end"] - mt_both["start"] + if self._t_unit is not None: + mt_both["wcDuration"] = pd.to_datetime( + mt_both["end"], unit=self._t_unit + ) - pd.to_datetime(mt_both["start"], unit=self._t_unit) + + # Number of Rows + mt_both["nRows"] = mt_both["endRow"] - mt_both["startRow"] + + common_fields = [ + "labels", + "start", + "end", + "duration", + "startRow", + "endRow", + "nRows", + ] + wallclock_fields = ["wcStart", "wcEnd", "wcDuration"] + + # Return table + if "datetime" in label_df.columns.values: + mt_both = mt_both[common_fields + wallclock_fields] + else: + mt_both = mt_both[common_fields] + + return mt_both diff --git a/mvg/features/rms.py b/mvg/features/rms.py new file mode 100644 index 00000000..c13f9360 --- /dev/null +++ b/mvg/features/rms.py @@ -0,0 +1,68 @@ +"""Analysis Class for RMS Feature""" +import pandas as pd +import matplotlib.pyplot as plt +from tabulate import tabulate +from mvg.features.analysis import Analysis + + +class RMS(Analysis): + """ Analysis class for RMS feature.""" + + def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): + """Constructor + + Parameters + ---------- + results: dict + Dictionary with the server response form a get_analysis_results call. + + t_zone: str + timezone, if None, times will remain in epoch time [Europe/Stockholm]. + + t_unit: str + time unit for conversion from epoch time [ms]. + """ + + Analysis.__init__(self, results, t_zone, t_unit) + self._results_df = pd.DataFrame.from_dict(self.results()) + self.time_column = "timestamps" + self._add_datetime() + + def summary(self): + """Print summary information on RMS. + + Returns + ------- + summary table: dataFrame + """ + + super().summary() + print() + tab = self._results_df.describe() + print(tabulate(tab, headers="keys", tablefmt="psql")) + return tab + + def plot(self, interactive=True, time_format=None): + """ + Generate a basic plot on RMS. + + Parameters + ---------- + interactive : bool + True: show plot, False: save plot + + time_format: str, optional + strftime format specifier for tick_x_lables. If not given + only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + + + Returns + ------- + plot file name : str + name of plot file (or emtpy string in case of interactive plot) + """ + + self.check_status() + self._results_df.plot(x=self.time_column, y=["rms", "dc", "utilization"]) + plt.title(f"RMS Summary plot for request {self.request_id()}") + return self._render_plot(interactive) diff --git a/mvg/mode_table.py b/mvg/mode_table.py new file mode 100644 index 00000000..5bc3982d --- /dev/null +++ b/mvg/mode_table.py @@ -0,0 +1,58 @@ +import pandas as pd + + +# Used by ModeId analysis class +def create_mode_table(label_df, time_unit, show_uncertain): + """Create mode table of the given label_df dataframe + + Parameters + ---------- + label_df + Given label_df dataframe + time_unit + time unit for datetime conversion + show_uncertain + Boolean uncertain mode table indicator + + Returns + ------- + Mode table + """ + + mode_table = label_df.copy() # [["timestamps", "labels", "uncertain"]].copy() + if show_uncertain: + mode_table.loc[mode_table["uncertain"], ["labels"]] = -1 + # mode_table = mode_table[["datetime", "timestamps", "labels"]] + + # prepare + mode_table["nextLabel"] = mode_table["labels"].shift(1) + mode_table["startRow"] = mode_table.index + mode_table = mode_table[mode_table["labels"] != mode_table["nextLabel"]] + + # Calculate duration + mode_table["ts"] = mode_table["timestamps"] + labels_timestamps = label_df["timestamps"] + mode_table["endTime"] = mode_table["timestamps"].shift( + -1, fill_value=labels_timestamps.iloc[-1] + ) + if time_unit is None: + mode_table["duration"] = mode_table["endTime"] - mode_table["timestamps"] + else: + mode_table["duration"] = pd.to_datetime( + mode_table["endTime"], unit="s" + ) - pd.to_datetime(mode_table["timestamps"], unit=time_unit) + mode_table["nRows"] = ( + mode_table["startRow"].shift(-1, fill_value=len(label_df)) + - mode_table["startRow"] + ) + + # Return table + if "datetime" in label_df.columns.values: + mode_table = mode_table[ + ["timestamps", "datetime", "labels", "startRow", "nRows", "duration"] + ] + else: + mode_table = mode_table[ + ["timestamps", "labels", "startRow", "nRows", "duration"] + ] + return mode_table diff --git a/mvg/mvg.py b/mvg/mvg.py index 2f3b7493..2cc5e147 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -51,7 +51,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.7.3") + self.mvg_version = self.parse_version("v0.7.4") self.tested_api_version = self.parse_version("v0.1.15") # Errors to ignore diff --git a/tests/test_analysis_classes.py b/tests/test_analysis_classes.py index f5da3429..1b2699b0 100644 --- a/tests/test_analysis_classes.py +++ b/tests/test_analysis_classes.py @@ -5,6 +5,7 @@ import json import os +import tempfile import pandas as pd import pytest from mvg import analysis_classes @@ -101,6 +102,18 @@ def test_ModeId(): assert (res[1]["counts"][1] == 8).any() assert (res[1]["portion"][0] == 84).any() + # Mode table (only EPOCH times) + mt_df = feat.mode_table().reset_index(drop=True) + mt_correct_df = pd.read_csv("./tests/test_data/mode_table_nowc.csv") + assert mt_correct_df.equals(mt_df.reset_index(drop=True)) + + # Mode table (+wallclock times) + feat = parse_results(api_results, t_zone="Europe/Stockholm", t_unit="s") + mt_df = feat.mode_table().reset_index(drop=True) + mt_correct_df = pd.read_pickle("./tests/test_data/mode_table_wc.pkl") + mt_correct_df = mt_correct_df.reset_index(drop=True) + assert mt_correct_df.equals(mt_df.reset_index(drop=True)) + def test_none_existing_feature(): # read dict diff --git a/tests/test_data/mode_table_datetime.pkl b/tests/test_data/mode_table_datetime.pkl new file mode 100644 index 0000000000000000000000000000000000000000..8c5cbda34849bac59231b92968e75ae09e6fb75f GIT binary patch literal 1486 zcmbVMOKTKC5T4ncSz}^IA}$&Tq6gzfWKBRYpb&KvA&yxg<|Kr%XVXa!&SRbFF-DB& z!I(gU2g`U-R8Vi;10KD35j=SjJp1?uf>zDW;3n!pXJM=QQQcpC^>y7cAG|TO^izFJ z7R<4@+6W_FosXE$L2VyrlATHY`!IAHmZ72y+h2%4?QP%g29ies^Wv({0=B@T7}So_ zUf8%i)fz(@UYW)CJ(~mP_%$9^9Twwtop!(%?a2V=FhF!EGxyVr=MW62a*+7Vr4~#- z@ubV5h%MoLcElTD5X&fONDNnIx)IbiOe@`TA1v(-)N}{#!ZcJY-74JyQC8-hTxxO( zDV!gLwbj;YQRz3JUaz11fnWM(jY)9UD2Gnz`aG7*Z(^byh>Oz%sFKGV?$I1BMshk_ zBp7JYZArwW8wSAf7-a;+a6MT;D56{S|B01|1q(#WG}$&P#NoO!(;F}&WyCUUf>k7k zqob#1a>BW@jVp9{wF0q@cF8cGD7jb|%rheft#L3Nd)=+M>LJ%XD^pmiHP@J{e9&L1T;+glh ztc|XIx%vEES^Kc@(j9nTre$R!ulx$sRmpA%YI9N3IfPDHL)<+%?wO0@nf&qxmISUu zE#m#EAg_ZmnoDE~c9Y7bdMA=7Z1N))B)%^ZdOl2j>O~zC&rQvwlqF8${GPW?tWxIw ze`T(Xz5I9#d&Se?*Pj;)SXuGp+w3-tGAF5tZqb9RiN4=2HjwcB^lZcdaZpsm5a}N! zoJs$$ae5Xf2H8Ib9BL2X%lIybt0PCNBdz|$u;GB{R3(QRR1Am=k*m^G<|VW;p*pa` z*|>;<(fXk7s+}5;l0s`~lUUPnSBbws2-CZ>H#tLRX16nU zx{V~IKA0M~V8JUsRzbuEeN)NbAc!c4`qn{lFIenTAG_gm_%p@@dza_A!P4_<-xFuMTcu zGJ;q9$m=Y`X?l^%91;X%0nf7nYPbE61(D4V&UN*m;6!k0>YfOkFHvnX?F!L;F@xD9}R+vUHf;rjO2CjV=597^ITiLvB9jThIfOHO=iZ+(?mLIc%Cnd4D>VT0HP%Ktji zQPK*!r6jq&3`w!;?~0v=gZ*04P|_1wKNKiK{4udCGm*s~pPstr-mhrm7he5x{b5CW zwtB4qrIuC7^W`ujCpTP^FDEAGLd-N#F6iyY~}ep%gzd( z?<`1@wK~`bRX#Ko1?>*~^f<#FhPLa8`kzCl#&bvNCoqv25jCSG)Z^XY*v1t&t=N2i z=H*Gr!l^uY@Cfb4hfbe;uGoOpfbYRhHkpHY0BEa?*Qqz7bcOo${#Qx0f3{4&$ZOiw zziOvySyTZ0@p`tX$&xA^55i`A9UHYx5!+^m?0MJ;yI?m|p$2=%2aK_JW)mE;0?NG5ltVcbNC*k@!cWAFZN|sP<##`dwUaJ5A literal 0 HcmV?d00001 diff --git a/tools/analysis.py b/tools/analysis.py index cbdf21bb..63a70c6d 100644 --- a/tools/analysis.py +++ b/tools/analysis.py @@ -1,14 +1,14 @@ -# This example requires sources to be uploaded to -# the server side +"""Simple tool to run analyses""" +# flake8: noqa import os import json -import typer +import logging +import sys from typing import Optional +import typer from mvg import MVG from mvg.analysis_classes import parse_results -import logging -import sys root_logger = logging.getLogger() root_logger.setLevel("INFO") @@ -22,77 +22,85 @@ ENDPOINT = os.environ["TEST_URL"] TOKEN = os.environ["TEST_TOKEN"] -app = typer.Typer() # Create typer app +app = typer.Typer() # Create typer app + @app.command() def run( - source_id: str = typer.Argument( - ..., - help='Source ID'), - feature: Optional[str] = typer.Argument("ModeId", - help='Feature'), - start: Optional[int] = typer.Argument(None, - help='Start timestamp [epoch]'), - end: Optional[int] = typer.Argument(None, - help='End timestamp [epoch]'), - show: bool = typer.Option(True, help='Show plot rather than saving it'), - pdb: bool = typer.Option(False, help='Enter pdb debugger'), - params: bool = typer.Option(False, help='Use ./params.json file') + source_id: str = typer.Argument(..., help="Source ID"), + feature: Optional[str] = typer.Argument("ModeId", help="Feature"), + start: Optional[int] = typer.Argument(None, help="Start timestamp [epoch]"), + end: Optional[int] = typer.Argument(None, help="End timestamp [epoch]"), + show: bool = typer.Option(True, help="Show plot rather than saving it"), + pdb: bool = typer.Option(False, help="Enter pdb debugger"), + params: bool = typer.Option(False, help="Use ./params.json file"), + gbg: bool = typer.Option(True, help="Set timezone to Gothenburg"), + sec: bool = typer.Option(False, help="use seconds rather than ms as time unit"), ): """Run an analyis on Source ID""" - - + ses = MVG(ENDPOINT, TOKEN) # Fetch parameters if given if params: with open("params.json", "r", encoding="utf-8") as json_data: params = json.load(json_data) - print(f"Params loaded from ./params.json") + print("Params loaded from ./params.json") print(json.dumps(params, indent=4)) else: params = {} - req = ses.request_analysis(sid=source_id, - feature=feature, - parameters=params, - start_timestamp=start, - end_timestamp=end) + req = ses.request_analysis( + sid=source_id, + feature=feature, + parameters=params, + start_timestamp=start, + end_timestamp=end, + ) request_id = req["request_id"] print(f"Waiting for {request_id}") ses.wait_for_analyses([request_id]) - get_and_display_results(ses, request_id, show, pdb) + get_and_display_results(ses, request_id, show, pdb, gbg, sec) + @app.command() def retrieve( - request_id: str = typer.Argument( - ..., - help='Request ID'), - show: bool = typer.Option(True, help='Show plot rather than saving it'), - pdb: bool = typer.Option(False, help='Enter pdb debugger') + request_id: str = typer.Argument(..., help="Request ID"), + show: bool = typer.Option(True, help="Show plot rather than saving it"), + pdb: bool = typer.Option(False, help="Enter pdb debugger"), + gbg: bool = typer.Option(True, help="Set timezone to Gothenburg"), + sec: bool = typer.Option(False, help="use seconds rather than ms as time unit"), ): """Retrieve a previous analyis with request ID""" - + ses = MVG(ENDPOINT, TOKEN) - get_and_display_results(ses, request_id, show, pdb) + get_and_display_results(ses, request_id, show, pdb, gbg, sec) + - - -def get_and_display_results(ses, request_id, show, pdb): +def get_and_display_results(ses, request_id, show, pdb, gbg, sec): # Get results res_dict = ses.get_analysis_results(request_id) + # Time Unit + t_unit = "ms" + if sec: + t_unit = "s" + # Parse results - res = parse_results(res_dict, "Europe/Stockholm", "s") + if gbg: + res = parse_results(res_dict, "Europe/Stockholm", t_unit) + else: + res = parse_results(res_dict, None, None) if pdb: breakpoint() - + res.summary() - res.plot(show,time_format="%y%m%d-%H:%M:%S") + res.plot(show, time_format="%y%m%d-%H:%M:%S") res.to_df().head() + print(res.mode_table()) print("Bye") -if __name__ == '__main__': - app() +if __name__ == "__main__": + app() diff --git a/tools/params.json b/tools/params.json new file mode 100644 index 00000000..39217bae --- /dev/null +++ b/tools/params.json @@ -0,0 +1,3 @@ +{ + "number_of_clusters": 2 +} From ab389d03031437b0cba25c768bebc16da1a88627 Mon Sep 17 00:00:00 2001 From: Fredrik Wartenberg Date: Wed, 11 Aug 2021 12:30:40 +0200 Subject: [PATCH 09/90] Fixes analysis class import problem issue #49 (#50) --- mvg/features/__init__.py | 0 mvg/mvg.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 mvg/features/__init__.py diff --git a/mvg/features/__init__.py b/mvg/features/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/mvg/mvg.py b/mvg/mvg.py index 2cc5e147..44df698e 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -51,7 +51,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.7.4") + self.mvg_version = self.parse_version("v0.7.5") self.tested_api_version = self.parse_version("v0.1.15") # Errors to ignore From b210e012bd82dcc005f8a31f447e6446b02a0f12 Mon Sep 17 00:00:00 2001 From: Sergio Martin-del-Campo <61144290+SergioMDCB@users.noreply.github.com> Date: Wed, 11 Aug 2021 13:51:50 +0200 Subject: [PATCH 10/90] Adding features submodule (#51) * Adding features submodule * Updating the release version on mvg --- mvg/mvg.py | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 44df698e..825ec8e6 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -51,7 +51,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.7.5") + self.mvg_version = self.parse_version("v0.7.6") self.tested_api_version = self.parse_version("v0.1.15") # Errors to ignore diff --git a/setup.py b/setup.py index fb0aa30f..039e947c 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ long_description=long_description, long_description_content_type="text/markdown", url="https://github.com/vikinganalytics/mvg", - packages=["mvg"], + packages=["mvg", "mvg/features"], license="LICENSE", classifiers=[ "Programming Language :: Python :: 3", From 0f80576ec2df4108ad408d5de8d9da7020c2c228 Mon Sep 17 00:00:00 2001 From: Fredrik Wartenberg Date: Fri, 13 Aug 2021 11:16:39 +0200 Subject: [PATCH 11/90] Remove obsolete file mode_table.py (#53) --- mvg/mode_table.py | 58 ----------------------------------------------- 1 file changed, 58 deletions(-) delete mode 100644 mvg/mode_table.py diff --git a/mvg/mode_table.py b/mvg/mode_table.py deleted file mode 100644 index 5bc3982d..00000000 --- a/mvg/mode_table.py +++ /dev/null @@ -1,58 +0,0 @@ -import pandas as pd - - -# Used by ModeId analysis class -def create_mode_table(label_df, time_unit, show_uncertain): - """Create mode table of the given label_df dataframe - - Parameters - ---------- - label_df - Given label_df dataframe - time_unit - time unit for datetime conversion - show_uncertain - Boolean uncertain mode table indicator - - Returns - ------- - Mode table - """ - - mode_table = label_df.copy() # [["timestamps", "labels", "uncertain"]].copy() - if show_uncertain: - mode_table.loc[mode_table["uncertain"], ["labels"]] = -1 - # mode_table = mode_table[["datetime", "timestamps", "labels"]] - - # prepare - mode_table["nextLabel"] = mode_table["labels"].shift(1) - mode_table["startRow"] = mode_table.index - mode_table = mode_table[mode_table["labels"] != mode_table["nextLabel"]] - - # Calculate duration - mode_table["ts"] = mode_table["timestamps"] - labels_timestamps = label_df["timestamps"] - mode_table["endTime"] = mode_table["timestamps"].shift( - -1, fill_value=labels_timestamps.iloc[-1] - ) - if time_unit is None: - mode_table["duration"] = mode_table["endTime"] - mode_table["timestamps"] - else: - mode_table["duration"] = pd.to_datetime( - mode_table["endTime"], unit="s" - ) - pd.to_datetime(mode_table["timestamps"], unit=time_unit) - mode_table["nRows"] = ( - mode_table["startRow"].shift(-1, fill_value=len(label_df)) - - mode_table["startRow"] - ) - - # Return table - if "datetime" in label_df.columns.values: - mode_table = mode_table[ - ["timestamps", "datetime", "labels", "startRow", "nRows", "duration"] - ] - else: - mode_table = mode_table[ - ["timestamps", "labels", "startRow", "nRows", "duration"] - ] - return mode_table From e76e7cce782e49cd3e7a80ecf5231f67b1359187 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Thu, 19 Aug 2021 09:04:03 +0200 Subject: [PATCH 12/90] Fix for #54: The backend does not expect "source_id" in the payload (#56) --- mvg/mvg.py | 1 - 1 file changed, 1 deletion(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 825ec8e6..3720b021 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -412,7 +412,6 @@ def create_measurement( # Package info for db to be submitted meas_struct = [ { - "source_id": sid, # should be source_id "timestamp": timestamp, "duration": duration, "data": data, From 06868c4318730828a1d5142c6af7ba56561d198d Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Fri, 20 Aug 2021 09:18:28 +0200 Subject: [PATCH 13/90] bump version to 0.7.7 (#57) --- mvg/mvg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 3720b021..a5800f52 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -51,7 +51,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.7.6") + self.mvg_version = self.parse_version("v0.7.7") self.tested_api_version = self.parse_version("v0.1.15") # Errors to ignore From edc61d552fa344e37deba01fbc4cb689b77fdc05 Mon Sep 17 00:00:00 2001 From: Oskar Liew <43787643+OskarLiew@users.noreply.github.com> Date: Tue, 24 Aug 2021 11:32:27 +0200 Subject: [PATCH 14/90] Moved ignore error to kwarg (#55) * Moved ignore error to kwarg * automatically collect modules and limit module search to "mvg" folder --- mvg/mvg.py | 138 +++++++++++++++++++++----------------- setup.py | 2 +- tests/test_api_general.py | 2 +- tests/test_api_sources.py | 25 +------ 4 files changed, 80 insertions(+), 87 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index a5800f52..a383634d 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -13,7 +13,7 @@ import logging from typing import Dict, List, Optional import requests -from requests.exceptions import HTTPError, RequestException +from requests.exceptions import RequestException import semver @@ -54,9 +54,6 @@ def __init__(self, endpoint: str, token: str): self.mvg_version = self.parse_version("v0.7.7") self.tested_api_version = self.parse_version("v0.1.15") - # Errors to ignore - self.do_not_raise = [] - # Get API version try: response = self._request("get", "") @@ -66,7 +63,7 @@ def __init__(self, endpoint: str, token: str): api_vstr = response.json()["message"]["api"]["version"] self.api_version = self.parse_version(api_vstr) - def _request(self, method, path, **kwargs) -> requests.Response: + def _request(self, method, path, do_not_raise=None, **kwargs) -> requests.Response: """Helper function for removing duplicate code on API requests. Makes requests on self.endpoint with authorization header and validates the response by status code. Writes DEBUG logs on @@ -80,14 +77,12 @@ def _request(self, method, path, **kwargs) -> requests.Response: path : str Path to the url to call relative the self.endpoint + do_not_raise : list + List of error status codes to ignore. Defaults to [] if None + **kwargs : Any Keyword arguments to pass to requests.request - Raises - ------ - HTTPError - the original HTTPError from raise_for_status - Returns ------- Response from the API call @@ -100,22 +95,13 @@ def _request(self, method, path, **kwargs) -> requests.Response: **kwargs, ) - try: + if do_not_raise is None: + do_not_raise = [] + + if response.status_code in do_not_raise: + logger.info(f"Ignoring error {response.status_code} - {response.text}") + else: response.raise_for_status() - except HTTPError as exc: - logger.debug(str(exc)) - - # Error ignorer - ignore = False - for err_no in self.do_not_raise: - if re.search(err_no, str(exc)): - ignore = True - if ignore: - logstr = "Ignoring" + str(exc) - logger.info(logstr) - elif response.text: - logger.debug(str(response.text)) - raise exc return response @@ -246,7 +232,7 @@ def say_hello(self) -> dict: # return list of IDs return response.json()["message"] - def create_source(self, sid: str, meta: dict): + def create_source(self, sid: str, meta: dict, exist_ok: bool = False): """ Creates a source on the server side. @@ -257,17 +243,27 @@ def create_source(self, sid: str, meta: dict): meta : dict meta information + + exist_ok : bool + Set to true to prevent exceptions for 409 Conflict errors + caused by trying to create an existing source. Defaults to False """ logger.info("endpoint %s", self.endpoint) logger.info("creating source with source id=%s", sid) logger.info("metadata: %s", meta) + do_not_raise = [] + if exist_ok: + do_not_raise.append(requests.codes["conflict"]) # 409 + # Package info to be submitted to db source_info = {"source_id": sid, "meta": meta} - self._request("post", "/sources/", json=source_info) + self._request("post", "/sources/", do_not_raise, json=source_info) - def create_tabular_source(self, sid: str, meta: dict, columns: List[str]): + def create_tabular_source( + self, sid: str, meta: dict, columns: List[str], exist_ok: bool = False + ): """ Creates a tabular source on the server side. @@ -282,6 +278,10 @@ def create_tabular_source(self, sid: str, meta: dict, columns: List[str]): columns : List[str] Data variables. Currently supports numerical data. Cannot be updated after creating source. + + exist_ok : bool + Set to true to prevent exceptions for 409 Conflict errors + caused by trying to create an existing source. Defaults to False """ logger.info("endpoint %s", self.endpoint) @@ -289,10 +289,13 @@ def create_tabular_source(self, sid: str, meta: dict, columns: List[str]): logger.info("metadata: %s", meta) logger.info("columns: %s", columns) - # Package info to be submitted to db + do_not_raise = [] + if exist_ok: + do_not_raise.append(requests.codes["conflict"]) # 409 + # Package info to be submitted to db source_info = {"source_id": sid, "meta": meta, "columns": columns} - self._request("post", "/sources/tabular", json=source_info) + self._request("post", "/sources/tabular", do_not_raise, json=source_info) def list_sources(self) -> list: """Lists all sources (sensors) on the server side @@ -374,7 +377,13 @@ def delete_source(self, sid: str): # Measurements # in example def create_measurement( - self, sid: str, duration: float, timestamp: int, data: list, meta: dict + self, + sid: str, + duration: float, + timestamp: int, + data: list, + meta: dict, + exist_ok: bool = False, ): """Stores a measurement on the server side. @@ -401,6 +410,9 @@ def create_measurement( meta: dict Meta information to attach to data. + exist_ok: bool + Set to true to prevent exceptions for 409 Conflict errors + caused by trying to create an existing measurement. Defaults to False """ logger.info("endpoint %s", self.endpoint) @@ -409,6 +421,10 @@ def create_measurement( logger.info(" timestamp: %s", timestamp) logger.info(" meta data: %s", meta) + do_not_raise = [] + if exist_ok: + do_not_raise.append(requests.codes["conflict"]) # 409 + # Package info for db to be submitted meas_struct = [ { @@ -419,10 +435,16 @@ def create_measurement( } ] - self._request("post", f"/sources/{sid}/measurements", json=meas_struct) + self._request( + "post", f"/sources/{sid}/measurements", do_not_raise, json=meas_struct + ) def create_tabular_measurement( - self, sid: str, data: Dict[str, List[float]], meta: Dict[float, dict] = None + self, + sid: str, + data: Dict[str, List[float]], + meta: Dict[float, dict] = None, + exist_ok: bool = False, ): """Stores a measurement on the server side. @@ -444,11 +466,19 @@ def create_tabular_measurement( meta: dict Meta information to attach to data. Should have the format {timestamp: meta_dict}. Timestamps must match data timestamps + + exist_ok: bool + Set to true to prevent exceptions for 409 Conflict errors + caused by trying to create an existing measurement. Defaults to False """ logger.info("endpoint %s", self.endpoint) logger.info("creating tabular measurement from source id=%s", sid) + do_not_raise = [] + if exist_ok: + do_not_raise.append(requests.codes["conflict"]) # 409 + body = {"data": data} if meta is not None: body["meta"] = meta @@ -772,6 +802,7 @@ def create_label( label: str, severity: int, notes: Optional[str] = "", + exist_ok: bool = False, ): """Create a label for a measurement @@ -787,13 +818,22 @@ def create_label( Severity of the label as a positive integer notes : Optional[str], optional Optional notes for the label, by default "" + exist_ok : bool + Set to true to prevent exceptions for 409 Conflict errors + caused by trying to create an existing label. Defaults to False """ logger.info("endpoint %s", self.endpoint) logger.info(f"Creating label for {sid} - {timestamp}") label_data = {"label": label, "severity": severity, "notes": notes} - self._request("post", f"/sources/{sid}/labels/{timestamp}", json=label_data) + do_not_raise = [] + if exist_ok: + do_not_raise.append(requests.codes["conflict"]) # 409 + + self._request( + "post", f"/sources/{sid}/labels/{timestamp}", do_not_raise, json=label_data + ) def get_label(self, sid: str, timestamp: int) -> dict: """Get a single label from a measurement @@ -872,35 +912,7 @@ def delete_label(self, sid: str, timestamp: int): class MVG(MVGAPI): """Class for a session providing an API to the vibium server. - Note that this class ignores specific http errors - (per default 409, existing resource). If this is not wanted use - MVGAPI class instead. - """ - - def __init__(self, endpoint: str, token: str): - """ - Constructor. - As compared to super class configures session to ignore - 409 errors (occuring when an existing resource is overwritten. - More errors can be ignored by setting class - attribute do_not_raise with a dictionary of http error codes. - On instantiation of a MVG object the session parameters - are stored for future calls and the version of the API - is requested. - In case token is "NO TOKEN", will insert the harcoded - valid token from testcases. - HTTPError is raised if a connection to the API cannot - be established. - - Parameters - ---------- - endpoint: str - the server address (URL). - token: str - the token used for authentication and authorization. - """ - super().__init__(endpoint=endpoint, token=token) - self.do_not_raise = ["409"] + Contains additional functionality over API methods""" def wait_for_analyses(self, request_id_list: list, timeout=None): """Wait for the analyses specified by list of request_ids to finish. diff --git a/setup.py b/setup.py index 039e947c..02e94a53 100644 --- a/setup.py +++ b/setup.py @@ -28,7 +28,7 @@ long_description=long_description, long_description_content_type="text/markdown", url="https://github.com/vikinganalytics/mvg", - packages=["mvg", "mvg/features"], + packages=setuptools.find_packages(where="mvg"), license="LICENSE", classifiers=[ "Programming Language :: Python :: 3", diff --git a/tests/test_api_general.py b/tests/test_api_general.py index 65ffa1c7..3080fb00 100644 --- a/tests/test_api_general.py +++ b/tests/test_api_general.py @@ -33,7 +33,7 @@ def test_check_version(vibium): session.tested_api_version = session.api_version assert session.check_version()["api_version"] == session.api_version - # Check Incompatible Major version + # Check Incompatible Major version. Note: This test does not work locally session.tested_api_version = semver.VersionInfo(major=100) with pytest.raises(ValueError): session.check_version() diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index b05619a3..d4745b9b 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -148,7 +148,7 @@ def test_measurements_crud(session): ts_meta = REF_DB_PATH / "u0001" / ts_meta # path with open(ts_meta, "r") as json_file: # read json meas_info = json.load(json_file) # into dict - print("Read meta:{meas_info}") + print(f"Read meta:{meas_info}") # get duration and other meta info duration = meas_info["duration"] @@ -173,6 +173,7 @@ def test_measurements_crud(session): timestamp=ts_m, data=accs, meta=meta_info, + exist_ok=True, ) # read back and check @@ -274,10 +275,9 @@ def test_sources_cru_existing(session): assert src["meta"] == meta # create_source again (409 ignored) - session.create_source(SOURCE_ID_WAVEFORM, meta) + session.create_source(SOURCE_ID_WAVEFORM, meta, exist_ok=True) # create_source again (409 not ignored) - session.do_not_raise = [] with pytest.raises(HTTPError): session.create_source(SOURCE_ID_WAVEFORM, meta) @@ -361,25 +361,6 @@ def test_update_label(session, tabular_source_with_measurements): assert label1 == {"label": "normal", "severity": 0, "notes": "It wasn't so bad"} -def test_update_label(session, tabular_source_with_measurements): - timestamps = tabular_dict["timestamp"] - session.create_label( - tabular_source_with_measurements, - timestamps[0], - "failure", - 100, - "This is really bad!", - ) - - session.update_label( - tabular_source_with_measurements, timestamps[0], "normal", 0, "It wasn't so bad" - ) - - label1 = session.get_label(tabular_source_with_measurements, timestamps[0]) - - assert label1 == {"label": "normal", "severity": 0, "notes": "It wasn't so bad"} - - def test_delete_label(session, tabular_source_with_measurements): timestamps = tabular_dict["timestamp"] session.create_label( From 1d6dc39776c67bde1d9d9e386a0788735c52abbc Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Wed, 25 Aug 2021 09:08:36 +0200 Subject: [PATCH 15/90] bump version to 0.7.8 (#60) --- mvg/mvg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index a383634d..c984975d 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -51,7 +51,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.7.7") + self.mvg_version = self.parse_version("v0.7.8") self.tested_api_version = self.parse_version("v0.1.15") # Get API version From 5167a4e4417a00ca00760c96aef72308c0dcce48 Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Mon, 30 Aug 2021 10:32:28 +0200 Subject: [PATCH 16/90] Specify package_dir in setup.py (#64) --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 02e94a53..73361660 100644 --- a/setup.py +++ b/setup.py @@ -28,6 +28,7 @@ long_description=long_description, long_description_content_type="text/markdown", url="https://github.com/vikinganalytics/mvg", + package_dir={"": "mvg"}, packages=setuptools.find_packages(where="mvg"), license="LICENSE", classifiers=[ From 166e4998d236001bbd3576ac8a08ce7d27c07f35 Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Mon, 30 Aug 2021 12:15:43 +0200 Subject: [PATCH 17/90] fix included modules in the installation (#66) --- mvg/mvg.py | 2 +- setup.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index c984975d..2432c3bb 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -51,7 +51,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.7.8") + self.mvg_version = self.parse_version("v0.7.9") self.tested_api_version = self.parse_version("v0.1.15") # Get API version diff --git a/setup.py b/setup.py index 73361660..12aca6d6 100644 --- a/setup.py +++ b/setup.py @@ -28,8 +28,8 @@ long_description=long_description, long_description_content_type="text/markdown", url="https://github.com/vikinganalytics/mvg", - package_dir={"": "mvg"}, - packages=setuptools.find_packages(where="mvg"), + package_dir={"": "."}, + packages=setuptools.find_packages(where=".", include=["mvg", "mvg.*"]), license="LICENSE", classifiers=[ "Programming Language :: Python :: 3", From 6ddb6a0a6ecbc5b08677262a750812ed2659ff04 Mon Sep 17 00:00:00 2001 From: Sergio Martin-del-Campo <61144290+SergioMDCB@users.noreply.github.com> Date: Fri, 3 Sep 2021 09:59:43 +0200 Subject: [PATCH 18/90] Changing colors of modes plot (#67) * Changing colors of plotting function * Update to color scheme for mode plot * Removing yellow/red/green color from plotting color scheme --- mvg/mvg.py | 2 +- mvg/plotting.py | 23 +++++++++++++---------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 2432c3bb..ee859721 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -51,7 +51,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.7.9") + self.mvg_version = self.parse_version("v0.7.10") self.tested_api_version = self.parse_version("v0.1.15") # Get API version diff --git a/mvg/plotting.py b/mvg/plotting.py index f6e679bd..f3c69e27 100644 --- a/mvg/plotting.py +++ b/mvg/plotting.py @@ -19,16 +19,19 @@ ( [-2, "gray"], [-1, "white"], - [0, "red"], - [1, "blue"], - [2, "lime"], - [3, "yellow"], - [4, "fuchsia"], - [5, "green"], - [6, "aqua"], - [7, "silver"], - [8, "fuchsia"], - [9, "black"], + [0, "blue"], + [1, "fuchsia"], + [2, "orange"], + [3, "aqua"], + [4, "pink"], + [5, "steelblue"], + [6, "olive"], + [7, "lavender"], + [8, "beige"], + [9, "mediumseagreen"], + [10, "indigo"], + [11, "lightcoral"], + [12, "black"], ) ) From 7454351e4214c13495d90c114c75a2b4e05773f3 Mon Sep 17 00:00:00 2001 From: Sergio Martin-del-Campo <61144290+SergioMDCB@users.noreply.github.com> Date: Mon, 13 Sep 2021 10:18:48 +0200 Subject: [PATCH 19/90] Adding the KPIDemo feature into MVG (#70) * Adding the KPIDemo feature into MVG * Solving pylint issue * Solving pylint error * Fixing issue with plot testing * Solving testing of plot function * Fixing the add value given the minicharlie is 3 measurements short than regular charlie * Update mvg/features/kpidemo.py change pylint disable message Co-authored-by: Mohsen Nosratinia * Adding testing of request analyses * Fix test formatting issue * Put all kpidemo tests on single function * fixing bug with source_id * Deleting markup code * Fixing black issues * Fixing issues with sourceid * Debug error for request analysis * Fixing issue with create measurements * Adding source with measurements test parameter * Replacing sourceId * Replacing sourceId for uuid * Adding fix to error 404 * Adding fixtures to conftest * Removing unnecesary comments * update tested API version to v0.1.17 * Revert "Adding fix to error 404" This reverts commit a06cb077a577406ff6e28cad8bb575251dfdf61c. * argument of wait_for_analyses() is a list * Update tests/test_api_analyses.py Removing an unused variable Co-authored-by: Mohsen Nosratinia * Moving a text fixture to config file * Removing unnecesary commits Co-authored-by: Mohsen Nosratinia --- .gitignore | 1 + mvg/analysis_classes.py | 2 + mvg/features/kpidemo.py | 74 ++++++++++++++++ mvg/mvg.py | 4 +- tests/conftest.py | 103 +++++++++++++++++++++- tests/test_analysis_classes.py | 54 ++++++++++++ tests/test_api_analyses.py | 28 ++++++ tests/test_api_sources.py | 34 +------ tests/test_data/KPIDemo_results_dict.json | 1 + 9 files changed, 266 insertions(+), 35 deletions(-) create mode 100644 mvg/features/kpidemo.py create mode 100644 tests/test_api_analyses.py create mode 100644 tests/test_data/KPIDemo_results_dict.json diff --git a/.gitignore b/.gitignore index f49c4f5a..ee3644e4 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ __pycache__/ .venv env/ venv/ +venv2/ ENV/ env.bak/ venv.bak/ diff --git a/mvg/analysis_classes.py b/mvg/analysis_classes.py index 328c2ec8..9811f086 100644 --- a/mvg/analysis_classes.py +++ b/mvg/analysis_classes.py @@ -19,12 +19,14 @@ from mvg.features.rms import RMS from mvg.features.modeid import ModeId from mvg.features.blacksheep import BlackSheep +from mvg.features.kpidemo import KPIDemo # from mvg.features.envelope import Envelope _ = RMS # avoid F401 linting error _ = ModeId # avoid F401 linting error _ = BlackSheep # avoid F401 linting error +_ = KPIDemo # avoid F401 linting error # Parser/Factory function diff --git a/mvg/features/kpidemo.py b/mvg/features/kpidemo.py new file mode 100644 index 00000000..b2a5388a --- /dev/null +++ b/mvg/features/kpidemo.py @@ -0,0 +1,74 @@ +"""Analysis Class for KPIDemo Feature""" +import pandas as pd +import matplotlib.pyplot as plt +from tabulate import tabulate +from mvg.features.analysis import Analysis + + +class KPIDemo(Analysis): + """ Analysis class for KPIDemo feature.""" + + def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): + """Constructor + + Parameters + ---------- + results: dict + Dictionary with the server response form a get_analysis_results call. + + t_zone: str + timezone, if None, times will remain in epoch time [Europe/Stockholm]. + + t_unit: str + time unit for conversion from epoch time [ms]. + """ + + Analysis.__init__(self, results, t_zone, t_unit) + self._results_df = pd.DataFrame.from_dict(self.results()) + self.time_column = "timestamps" + self._add_datetime() + + def summary(self): + """Print summary information on RMS. + + Returns + ------- + summary table: dataFrame + """ + + super().summary() + print() + tab = self._results_df.describe() + print(tabulate(tab, headers="keys", tablefmt="psql")) + return tab + + def plot( + self, kpi="rms", interactive=True, time_format=None + ): # pylint: disable=arguments-differ + """ + Generate a basic plot on KPIs. + + Parameters + ---------- + kpi: str + sting that describes the KPI to be displayed. + Default kpi is RMS + + interactive : bool + True: show plot, False: save plot + + time_format: str, optional + strftime format specifier for tick_x_lables. If not given + only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + + + Returns + ------- + plot file name : str + name of plot file (or emtpy string in case of interactive plot) + """ + + self.check_status() + self._results_df.plot(x=self.time_column, y=kpi) + plt.title(f"{kpi} Summary plot for request {self.request_id()}") + return self._render_plot(interactive) diff --git a/mvg/mvg.py b/mvg/mvg.py index ee859721..8125fccf 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -51,8 +51,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.7.10") - self.tested_api_version = self.parse_version("v0.1.15") + self.mvg_version = self.parse_version("v0.8.0") + self.tested_api_version = self.parse_version("v0.1.17") # Get API version try: diff --git a/tests/conftest.py b/tests/conftest.py index 2ff85777..aaf9753a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,12 +1,16 @@ import os +from pathlib import Path import pytest import requests +import uuid +import json +import pandas as pd from mvg import MVG - import argparse import sys +from requests import HTTPError # This version of conftest.py adds some really ugly code to # run the tests as integration tests by running like @@ -37,6 +41,12 @@ def pytest_addoption(parser): version_session = MVG("https://api.beta.multiviz.com", "NO TOKEN") VIBIUM_VERSION = "v" + str(version_session.tested_api_version) +VALID_TOKEN = os.environ["TEST_TOKEN"] + +# Test data and session setup +REF_DB_PATH = Path.cwd() / "tests" / "test_data" / "mini_charlie" +SOURCE_ID_WAVEFORM = uuid.uuid1().hex # generate a unique source per testrun + def is_responsive(url): try: @@ -81,3 +91,94 @@ def vibium(docker_ip, docker_services): def vibium(): """Ensure that HTTP service is up and responsive.""" return args.host + + +@pytest.fixture(scope="session") +def session(vibium): + + url = vibium + print("Overriding vibium function with url %s", url) + session = MVG(url, VALID_TOKEN) + # To make sure we start from a clean slate + # we delete our resource in case it exists + # All information including measurements + # will be removed + # TO DO delete all so, currently we only + # handle resource SOURCE_ID + try: + session.get_source(SOURCE_ID_WAVEFORM) + print(f"Deleting {SOURCE_ID_WAVEFORM}") + session.delete_source(SOURCE_ID_WAVEFORM) + except HTTPError: + print(f"Source {SOURCE_ID_WAVEFORM} does not exist") + + return session + + +@pytest.fixture() +def waveform_source(session): + try: + m_file_name = REF_DB_PATH / "u0001" / "meta.json" + with open(m_file_name, "r") as json_file: + meta = json.load(json_file) + # create_source happy case + session.create_source(SOURCE_ID_WAVEFORM, meta) + yield SOURCE_ID_WAVEFORM + finally: + session.delete_source(SOURCE_ID_WAVEFORM) + + +@pytest.fixture() +def waveform_source_with_measurements(session, waveform_source): + # get list of measurements + src_path = REF_DB_PATH / "u0001" + meas = {f.split(".")[0] for f in os.listdir(src_path)} + meas.remove("meta") + meas = [int(m) for m in meas] + meas = list(meas)[0:40] + + # iterate over 40 meas (m is timestamp) + for ts_m in meas: + # samples file for one measurement + ts_meas = str(ts_m) + ".csv" # filename + ts_meas = REF_DB_PATH / "u0001" / ts_meas # path to file + ts_df = pd.read_csv( + ts_meas, names=["acc"], float_precision="round_trip" + ) # read csv into df + accs = ts_df.iloc[:, 0].tolist() # convert to list + print(f"Read {len(accs)} samples") + + # meta information file for one measurement + ts_meta = str(ts_m) + ".json" # filename + ts_meta = REF_DB_PATH / "u0001" / ts_meta # path + with open(ts_meta, "r") as json_file: # read json + meas_info = json.load(json_file) # into dict + print(f"Read meta:{meas_info}") + + # get duration and other meta info + duration = meas_info["duration"] + meta_info = meas_info["meta"] + + # add sampling rate + meta_info["sampling_rate"] = len(accs) / duration + + # create + session.create_measurement( + sid=waveform_source, + duration=duration, + timestamp=ts_m, + data=accs, + meta=meta_info, + ) + + # create again (ignore error) + session.create_measurement( + sid=waveform_source, + duration=duration, + timestamp=ts_m, + data=accs, + meta=meta_info, + exist_ok=True, + ) + + yield waveform_source diff --git a/tests/test_analysis_classes.py b/tests/test_analysis_classes.py index 1b2699b0..99dde64a 100644 --- a/tests/test_analysis_classes.py +++ b/tests/test_analysis_classes.py @@ -66,6 +66,60 @@ def test_RMS(): assert feat.sources() == ["u0001"] +def test_KPIDemo(): + # read dict + with open("./tests/test_data/KPIDemo_results_dict.json") as json_file: + api_results = json.load(json_file) + + # get object + feat = parse_results(api_results, t_zone=None, t_unit=None) + + # Check dataframe conversion - columns + assert set(feat.to_df().columns.values) == set(api_results["results"].keys()) + + # Check dataframe conversion - length + assert len(feat.to_df()["timestamps"]) == len(api_results["results"]["timestamps"]) + + # Test datetime conversion + feat = analysis_classes.KPIDemo(api_results, t_zone="Europe/Stockholm", t_unit="s") + assert str(feat.to_df()["datetime"][0]) == "2019-10-04 13:01:00+02:00" + + # test save as pickle file + pkl_file = feat.save_pkl() + assert pkl_file == "45f202227d51402eb7e71efd58370415.pkl" + + assert os.path.exists(pkl_file) + os.remove(pkl_file) # Cleanup + + # Summary + assert set(feat.summary().index) == { + "mean", + "min", + "std", + "count", + "50%", + "75%", + "25%", + "max", + } + + # Plot (not tested at all) + plt_file = feat.plot("rms", False) + assert plt_file is not None + assert os.path.exists(plt_file) + os.remove(plt_file) # Cleanup + + # Accessor functions (tested only in KPIDemo) + ts_sum = 73900313220 + assert sum(feat.raw_results()["results"]["timestamps"]) == ts_sum + assert feat.request_id() == "45f202227d51402eb7e71efd58370415" + assert feat.feature() == "KPIDemo" + assert sum(feat.inputs()["timestamps"]) == ts_sum + assert sum(feat.results()["timestamps"]) == ts_sum + assert feat.status() == "successful" + assert feat.sources() == ["u0001"] + + def test_BlackSheep(): # read dict with open("./tests/test_data/BlackSheep_results_dict.json") as json_file: diff --git a/tests/test_api_analyses.py b/tests/test_api_analyses.py new file mode 100644 index 00000000..84a310a6 --- /dev/null +++ b/tests/test_api_analyses.py @@ -0,0 +1,28 @@ +# pylint: disable=redefined-outer-name + +""" +Tests in this file shall test analyses +relying on access to vibium-cloud API +Tests need to be run in order +-p no:randomly +""" +from pathlib import Path + +import pytest +from mvg import MVG + +# Test data setup +REF_DB_PATH = Path.cwd() / "tests" / "test_data" / "mini_charlie" + + +def test_kpidemo_analysis(session, waveform_source_with_measurements): + kpi = session.request_analysis(waveform_source_with_measurements, "KPIDemo") + session.wait_for_analyses([kpi["request_id"]]) + status = session.get_analysis_status(kpi["request_id"]) + assert status == "successful" + results = session.get_analysis_results(kpi["request_id"]) + assert len(results.keys()) == 7 + assert results["status"] == "successful" + assert results["feature"] == "KPIDemo" + kpi_results = results["results"] + assert len(kpi_results.keys()) == 8 diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index d4745b9b..a613fc00 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -17,11 +17,10 @@ from mvg import MVG import numpy as np -VALID_TOKEN = os.environ["TEST_TOKEN"] - # Test data and session setup REF_DB_PATH = Path.cwd() / "tests" / "test_data" / "mini_charlie" -SOURCE_ID_WAVEFORM = uuid.uuid1().hex # generate a unique source per testrun +SOURCE_ID_WAVEFORM = uuid.uuid1().hex # generate a unique source per test + SOURCE_ID_TABULAR = uuid.uuid1().hex tabular_df = pd.read_csv( @@ -30,35 +29,6 @@ tabular_dict = tabular_df.to_dict("list") -@pytest.fixture(scope="session") -def session(vibium): - - url = vibium - print("Overriding vibium function with url %s", url) - session = MVG(url, VALID_TOKEN) - # To make sure we start from a clean slate - # we delete our resource in case it exists - # All information including measurements - # will be removed - # TO DO delete all so, currently we only - # handle resource SOURCE_ID - try: - session.get_source(SOURCE_ID_WAVEFORM) - print(f"Deleting {SOURCE_ID_WAVEFORM}") - session.delete_source(SOURCE_ID_WAVEFORM) - except HTTPError: - print(f"Source {SOURCE_ID_WAVEFORM} does not exist") - - try: - session.get_source(SOURCE_ID_TABULAR) - print(f"Deleting {SOURCE_ID_TABULAR}") - session.delete_source(SOURCE_ID_TABULAR) - except HTTPError: - print(f"Source {SOURCE_ID_TABULAR} does not exist") - - return session - - @pytest.fixture() def tabular_source(session): try: diff --git a/tests/test_data/KPIDemo_results_dict.json b/tests/test_data/KPIDemo_results_dict.json new file mode 100644 index 00000000..918b3405 --- /dev/null +++ b/tests/test_data/KPIDemo_results_dict.json @@ -0,0 +1 @@ +{"status": "successful", "request_id": "45f202227d51402eb7e71efd58370415", "feature": "KPIDemo", "results": {"rms": [0.48497628407602994, 0.485104194438231, 0.48523894309367505, 0.4852252991579007, 0.48508787202553527, 0.48516542579592475, 0.4846815166936295, 0.4849799968600429, 0.48498939544867825, 0.4849830115060323, 0.4849698030681608, 0.48483912669202184, 0.4848983240955706, 0.48505745431818587, 0.4849531064694613, 0.48450364796927325, 0.050380802685913585, 0.04995202862635084, 0.05008869586109123, 0.05004784024112636, 0.050035401663772495, 0.05007491426963441, 0.04983319737828671, 0.049916237749382114, 0.05014989647976351, 0.48454239584204783, 0.4846380742894278, 0.4851853213878597, 0.48572209495564217, 0.48527659116388505, 0.4851068489665009, 0.04990625600189168, 0.05002217898529818, 0.049841553845600205, 0.049921963219141934, 0.05008674638150191, 0.04974405242748695, 0.04973891498117285, 0.050157243554214574, 0.049947107962129894, 0.049850649911875426, 0.050114682604494594, 0.05021006939342469, 0.04981638392946701, 0.049787509774207324, 0.04962678305463757, 0.049989217544320994], "peak": [2.2600884735107423, 2.2876570281982422, 2.2433771072387696, 2.3320462219238283, 2.2858623611450195, 2.2854966049194334, 2.2489236541748046, 2.324025619506836, 2.2081935821533203, 2.280819128417969, 2.2443455993652344, 2.291765802001953, 2.2896646392822264, 2.338721389770508, 2.3394623260498046, 2.3949231719970703, 0.2010076141357422, 0.21032674713134766, 0.2039621627807617, 0.21377698669433592, 0.2360000549316406, 0.2182101119995117, 0.19662920837402345, 0.19484251098632813, 0.21842276306152345, 2.2504552261352537, 2.2689621261596677, 2.2985033889770508, 2.2847549743652342, 2.259278927612305, 2.252838851928711, 0.19189574279785157, 0.19086965637207032, 0.20983294982910156, 0.21430001373291016, 0.20134898681640626, 0.21388350830078126, 0.22838197784423828, 0.2046974838256836, 0.19288236694335936, 0.1881550231933594, 0.21139839782714845, 0.20220737609863282, 0.23049488830566406, 0.20258720245361328, 0.21609667358398438, 0.22204466705322265], "peak2peak": [4.586669921875, 4.59375, 4.52752685546875, 4.65423583984375, 4.6038818359375, 4.58233642578125, 4.53228759765625, 4.59423828125, 4.50537109375, 4.60797119140625, 4.61572265625, 4.54852294921875, 4.57501220703125, 4.64892578125, 4.60137939453125, 4.62646484375, 0.40155029296875, 0.410888671875, 0.41986083984375, 0.427001953125, 0.4420166015625, 0.429443359375, 0.39947509765625, 0.39959716796875, 0.42486572265625, 4.563720703125, 4.6824951171875, 4.518798828125, 4.62603759765625, 4.58734130859375, 4.57427978515625, 0.38385009765625, 0.38555908203125, 0.427490234375, 0.4193115234375, 0.41156005859375, 0.453125, 0.4244384765625, 0.41107177734375, 0.40087890625, 0.4078369140625, 0.40228271484375, 0.4046630859375, 0.4515380859375, 0.4215087890625, 0.423095703125, 0.43121337890625], "variance": [0.2352019961161941, 0.235326079461565, 0.23545683189466682, 0.2354435909428742, 0.2353102435862621, 0.23538549038774095, 0.23491617262443706, 0.2352055973543672, 0.2352147136976744, 0.23520852144946025, 0.23519570988797067, 0.2350689787714824, 0.235126384710693, 0.23528073398963897, 0.2351795154743807, 0.23474378489553346, 0.0025382252792769578, 0.002495205163887774, 0.0025088774530648977, 0.002504786312801307, 0.0025035414196550474, 0.0025074970391112355, 0.0024833475609432817, 0.0024916307910528403, 0.002515012116930997, 0.23478133336835177, 0.23487406305096492, 0.23540479609024068, 0.23592595352809786, 0.23549336993164044, 0.2353286549142075, 0.002490634388126349, 0.0025022183904372065, 0.0024841804897438643, 0.00249220241165336, 0.0025086821630848945, 0.0024744707519085704, 0.0024739596635043413, 0.0025157490809567997, 0.0024947135937806587, 0.002485087296636365, 0.002511481412549233, 0.0025210510684925227, 0.0024816721078080592, 0.0024787961295167898, 0.002462817596352063, 0.00249892187069345], "crest_factor": [4.797309734014784, 4.753809590272252, 4.707267998044887, 4.806110122392733, 4.778555821470752, 4.734137468872188, 4.711060489902641, 4.792003040441915, 4.736552042486396, 4.798419754460483, 4.8897416743934405, 4.726858200653682, 4.721947933214443, 4.821534787168457, 4.824100093061526, 4.94304466444173, 3.9897660104558774, 4.2105746836555, 4.310327377293483, 4.27145278726067, 4.716661545309698, 4.35767320188574, 4.0704971776627445, 4.101964935948251, 4.355398084414021, 4.774123991709137, 4.980073005131786, 4.737372067238644, 4.820210255217708, 4.797392710408371, 4.785421888339174, 3.846298445051107, 3.8920620734334683, 4.366984328381092, 4.292700044511462, 4.196940048295473, 4.809449170792158, 4.591615597780637, 4.1145461531393375, 4.1643359904710495, 4.4068009395562155, 4.218292660765828, 4.032173472068134, 4.62688919035176, 4.397118626774544, 4.354436461175985, 4.441851222343206], "utilization": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "dc_component": [-0.11482480163574219, -0.11450028991699218, -0.11520327911376953, -0.11476106567382813, -0.11459771270751953, -0.1146592025756836, -0.11458527526855469, -0.11455296325683594, -0.11468772277832032, -0.11486453857421874, -0.11458485717773438, -0.11500798950195312, -0.11492098693847656, -0.11508857727050781, -0.11491398620605468, -0.11434455871582032, -0.0002019500732421875, 0.00030557708740234374, 0.00020043487548828125, 0.0001512359619140625, 0.000205999755859375, -0.00013149871826171876, 0.0002702056884765625, 0.000103778076171875, -0.0002220794677734375, -0.11465200347900391, -0.11466525115966797, -0.11484860382080078, -0.11489413452148438, -0.11462560729980469, -0.11471629333496093, 0.0001818939208984375, 4.83123779296875e-05, -5.51177978515625e-05, -0.00043282623291015626, -0.00023814697265625, -0.00062667236328125, 1.157684326171875e-05, 1.443023681640625e-05, 0.000354937744140625, 0.000382574462890625, -9.46868896484375e-05, 2.0965576171875e-06, -0.0002702789306640625, 0.00047676239013671876, -3.2220458984375e-05, 0.00030640716552734375], "timestamps": [1570186860, 1570273260, 1570359660, 1570446060, 1570532460, 1570618860, 1570705260, 1570791660, 1570878060, 1570964460, 1571050860, 1571137260, 1571223660, 1571310060, 1571396460, 1571482860, 1571828460, 1571914860, 1572001260, 1572087660, 1572177660, 1572264060, 1572350460, 1572436860, 1572523260, 1572609660, 1572696060, 1572782460, 1572868860, 1572955260, 1573041660, 1573128060, 1573214460, 1573300860, 1573387260, 1573473660, 1573560060, 1573646460, 1573732860, 1573819260, 1573905660, 1573992060, 1574078460, 1574164860, 1574251260, 1574337660, 1574424060]}, "inputs": {"request_id": "45f202227d51402eb7e71efd58370415", "feature": "KPIDemo", "experiment": "KPIDemo", "sw-commit": {"api": "0.0.0-dev0", "feature": "1.0.0"}, "dataType": "waveform", "db_def": "vibium_app\\pipeline\\apfel\\strudel\\data\\strudelDb\\database.json", "UUID": "u0001", "timestamps": [1570186860, 1570273260, 1570359660, 1570446060, 1570532460, 1570618860, 1570705260, 1570791660, 1570878060, 1570964460, 1571050860, 1571137260, 1571223660, 1571310060, 1571396460, 1571482860, 1571828460, 1571914860, 1572001260, 1572087660, 1572177660, 1572264060, 1572350460, 1572436860, 1572523260, 1572609660, 1572696060, 1572782460, 1572868860, 1572955260, 1573041660, 1573128060, 1573214460, 1573300860, 1573387260, 1573473660, 1573560060, 1573646460, 1573732860, 1573819260, 1573905660, 1573992060, 1574078460, 1574164860, 1574251260, 1574337660, 1574424060], "params": {}}, "error_info": "", "debug_info": ""} \ No newline at end of file From c4d8e29880c29f08f0cae1a92e8d7122cafa6b59 Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Wed, 22 Sep 2021 10:43:33 +0200 Subject: [PATCH 20/90] add support for multi-channel waveform data (#75) --- mvg/mvg.py | 23 ++++++++++++++++------- tests/conftest.py | 6 +++--- tests/test_api_analyses.py | 3 ++- tests/test_api_sources.py | 20 +++++++++++--------- 4 files changed, 32 insertions(+), 20 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 8125fccf..391dff39 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -51,8 +51,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.8.0") - self.tested_api_version = self.parse_version("v0.1.17") + self.mvg_version = self.parse_version("v0.9.0") + self.tested_api_version = self.parse_version("v0.2.0") # Get API version try: @@ -232,7 +232,9 @@ def say_hello(self) -> dict: # return list of IDs return response.json()["message"] - def create_source(self, sid: str, meta: dict, exist_ok: bool = False): + def create_source( + self, sid: str, meta: dict, channels: List[str], exist_ok: bool = False + ): """ Creates a source on the server side. @@ -244,6 +246,11 @@ def create_source(self, sid: str, meta: dict, exist_ok: bool = False): meta : dict meta information + channels : List[str] + Channels of waveform Data. For instance axial, vertical and horizontal + measurments for the source. + Cannot be updated after creating source. + exist_ok : bool Set to true to prevent exceptions for 409 Conflict errors caused by trying to create an existing source. Defaults to False @@ -258,7 +265,7 @@ def create_source(self, sid: str, meta: dict, exist_ok: bool = False): do_not_raise.append(requests.codes["conflict"]) # 409 # Package info to be submitted to db - source_info = {"source_id": sid, "meta": meta} + source_info = {"source_id": sid, "meta": meta, "channels": channels} self._request("post", "/sources/", do_not_raise, json=source_info) def create_tabular_source( @@ -381,7 +388,7 @@ def create_measurement( sid: str, duration: float, timestamp: int, - data: list, + data: Dict[str, List[float]], meta: dict, exist_ok: bool = False, ): @@ -404,8 +411,10 @@ def create_measurement( timestamp: int in milliseconds since EPOCH. - data: list - list of float values. + data: Dict[str, List[float]] + Data on the format {channel: values}. Each value is a timeseries + of measurements. + This format can be generated by pandas.DataFrame.to_dict("list") meta: dict Meta information to attach to data. diff --git a/tests/conftest.py b/tests/conftest.py index aaf9753a..0f5033e6 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -122,7 +122,7 @@ def waveform_source(session): with open(m_file_name, "r") as json_file: meta = json.load(json_file) # create_source happy case - session.create_source(SOURCE_ID_WAVEFORM, meta) + session.create_source(SOURCE_ID_WAVEFORM, meta=meta, channels=["acc"]) yield SOURCE_ID_WAVEFORM finally: session.delete_source(SOURCE_ID_WAVEFORM) @@ -167,7 +167,7 @@ def waveform_source_with_measurements(session, waveform_source): sid=waveform_source, duration=duration, timestamp=ts_m, - data=accs, + data={"acc": accs}, meta=meta_info, ) @@ -176,7 +176,7 @@ def waveform_source_with_measurements(session, waveform_source): sid=waveform_source, duration=duration, timestamp=ts_m, - data=accs, + data={"acc": accs}, meta=meta_info, exist_ok=True, ) diff --git a/tests/test_api_analyses.py b/tests/test_api_analyses.py index 84a310a6..7242be33 100644 --- a/tests/test_api_analyses.py +++ b/tests/test_api_analyses.py @@ -25,4 +25,5 @@ def test_kpidemo_analysis(session, waveform_source_with_measurements): assert results["status"] == "successful" assert results["feature"] == "KPIDemo" kpi_results = results["results"] - assert len(kpi_results.keys()) == 8 + assert len(kpi_results.keys()) == 2 + assert len(kpi_results["acc"].keys()) == 7 diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index a613fc00..e7df43c7 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -66,7 +66,7 @@ def test_sources_cru(session): with open(m_file_name, "r") as json_file: meta = json.load(json_file) # create_source happy case - session.create_source(SOURCE_ID_WAVEFORM, meta) + session.create_source(SOURCE_ID_WAVEFORM, meta=meta, channels=["acc"]) # list_source happy case src = session.get_source(SOURCE_ID_WAVEFORM) assert src["source_id"] == SOURCE_ID_WAVEFORM @@ -132,7 +132,7 @@ def test_measurements_crud(session): sid=SOURCE_ID_WAVEFORM, duration=duration, timestamp=ts_m, - data=accs, + data={"acc": accs}, meta=meta_info, ) @@ -141,14 +141,14 @@ def test_measurements_crud(session): sid=SOURCE_ID_WAVEFORM, duration=duration, timestamp=ts_m, - data=accs, + data={"acc": accs}, meta=meta_info, exist_ok=True, ) # read back and check m_back = session.read_single_measurement(SOURCE_ID_WAVEFORM, ts_m) - assert m_back["data"] == accs + assert m_back["data"] == {"acc": accs} assert m_back["meta"] == meta_info assert m_back["duration"] == duration @@ -158,7 +158,7 @@ def test_measurements_crud(session): # read back and check m_back = session.read_single_measurement(SOURCE_ID_WAVEFORM, ts_m) - assert m_back["data"] == accs + assert m_back["data"] == {"acc": accs} assert m_back["meta"] == meta_info assert m_back["duration"] == duration @@ -211,7 +211,7 @@ def test_failure_delete_source(session): # API POST /sources/ [incorrect source name] def test_failure_create_source(session): with pytest.raises(HTTPError) as exc: - session.create_source("unacceptable&name", {}) + session.create_source("unacceptable&name", meta={}, channels=["acc"]) assert exc.value.response.status_code == 422 @@ -238,18 +238,20 @@ def test_sources_cru_existing(session): with open(m_file_name, "r") as json_file: meta = json.load(json_file) # create_source happy case - session.create_source(SOURCE_ID_WAVEFORM, meta) + session.create_source(SOURCE_ID_WAVEFORM, meta=meta, channels=["acc"]) # list_source happy case src = session.get_source(SOURCE_ID_WAVEFORM) assert src["source_id"] == SOURCE_ID_WAVEFORM assert src["meta"] == meta # create_source again (409 ignored) - session.create_source(SOURCE_ID_WAVEFORM, meta, exist_ok=True) + session.create_source( + SOURCE_ID_WAVEFORM, meta=meta, channels=["acc"], exist_ok=True + ) # create_source again (409 not ignored) with pytest.raises(HTTPError): - session.create_source(SOURCE_ID_WAVEFORM, meta) + session.create_source(SOURCE_ID_WAVEFORM, meta=meta, channels=["acc"]) def test_tabular_sources(session, tabular_source): From 4dd75bc2648a3284a26645fca69e5eff53ac2e9f Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Thu, 23 Sep 2021 22:28:14 +0200 Subject: [PATCH 21/90] rerun brief_overview, fix rms init for multi-channel (#78) --- .../content/examples/analysis_classes.ipynb | 3265 ++++++++++++-- .../content/examples/analysis_visual.ipynb | 727 +++- .../content/examples/brief_overview.ipynb | 892 ++-- .../content/examples/check_version.ipynb | 8 +- .../content/examples/error_handling.ipynb | 113 +- .../examples/sources_and_measurements.ipynb | 3767 +++++++++-------- mvg/features/rms.py | 17 +- mvg/mvg.py | 2 +- tests/test_analysis_classes.py | 5 +- tests/test_data/RMS_results_dict.json | 339 +- 10 files changed, 6399 insertions(+), 2736 deletions(-) diff --git a/docs/source/content/examples/analysis_classes.ipynb b/docs/source/content/examples/analysis_classes.ipynb index 3a2bb4ea..97a999b5 100644 --- a/docs/source/content/examples/analysis_classes.ipynb +++ b/docs/source/content/examples/analysis_classes.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "critical-introduction", "metadata": {}, "source": [ "# Analysis Classes - a Unified Interface to Analysis Results\n", @@ -33,6 +34,7 @@ }, { "cell_type": "markdown", + "id": "running-impossible", "metadata": {}, "source": [ "## Example flow\n", @@ -43,6 +45,7 @@ { "cell_type": "code", "execution_count": 1, + "id": "framed-reality", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:28.735704Z", @@ -63,6 +66,7 @@ }, { "cell_type": "markdown", + "id": "bound-average", "metadata": { "ExecuteTime": { "end_time": "2021-03-04T10:59:02.619313Z", @@ -80,6 +84,7 @@ { "cell_type": "code", "execution_count": 2, + "id": "virgin-projector", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:29.472021Z", @@ -92,9 +97,9 @@ "output_type": "stream", "text": [ "{\n", - " \"api_version\": \"0.1.14\",\n", - " \"mvg_highest_tested_version\": \"0.1.12\",\n", - " \"mvg_version\": \"0.7.2\"\n", + " \"api_version\": \"0.2.0\",\n", + " \"mvg_highest_tested_version\": \"0.2.0\",\n", + " \"mvg_version\": \"0.9.0\"\n", "}\n" ] } @@ -109,6 +114,7 @@ }, { "cell_type": "markdown", + "id": "assigned-license", "metadata": { "pycharm": { "name": "#%% md\n" @@ -123,6 +129,7 @@ { "cell_type": "code", "execution_count": 3, + "id": "wireless-station", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:32.804304Z", @@ -142,10 +149,14 @@ " \"meta\": {\n", " \"assetId\": \"assetA\",\n", " \"measPoint\": \"mloc01\",\n", - " \"location\": \"paris\"\n", + " \"location\": \"paris\",\n", + " \"updated\": \"YES! I have been updated\"\n", " },\n", " \"properties\": {\n", - " \"data_class\": \"waveform\"\n", + " \"data_class\": \"waveform\",\n", + " \"channels\": [\n", + " \"acc\"\n", + " ]\n", " }\n", "}\n" ] @@ -159,6 +170,7 @@ }, { "cell_type": "markdown", + "id": "invalid-expense", "metadata": { "pycharm": { "name": "#%% md\n" @@ -175,6 +187,7 @@ { "cell_type": "code", "execution_count": 4, + "id": "unusual-ceremony", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:37.584243Z", @@ -189,14 +202,219 @@ "name": "stdout", "output_type": "stream", "text": [ - "Waiting for {'request_id': 'bd831c060faf3d6ca5332be3f17c5c10', 'request_status': 'queued'}\n", + "Waiting for {'request_id': '99c500893a6184b4f3dcd4a7a3b1565b', 'request_status': 'queued'}\n", "{\n", " \"status\": \"successful\",\n", - " \"request_id\": \"bd831c060faf3d6ca5332be3f17c5c10\",\n", + " \"request_id\": \"99c500893a6184b4f3dcd4a7a3b1565b\",\n", " \"feature\": \"RMS\",\n", " \"results\": {\n", + " \"acc\": {\n", + " \"rms\": [\n", + " 0.6471233090087871,\n", + " 0.6466190328578604,\n", + " 0.6468729279266724,\n", + " 0.646642518814507,\n", + " 0.646717205894838,\n", + " 0.6470927806487413,\n", + " 0.6474220671843843,\n", + " 0.6468903895762858,\n", + " 0.6476938342498252,\n", + " 0.6470808565115466,\n", + " 0.6472050737356406,\n", + " 0.6467427853732756,\n", + " 0.6473221821058875,\n", + " 0.6474336931665048,\n", + " 0.6476212217700588,\n", + " 0.6471112840086102,\n", + " 0.4848921153840481,\n", + " 0.48484094333329586,\n", + " 0.4847516723441296,\n", + " 0.4845635972925438,\n", + " 0.4850011098332846,\n", + " 0.48501271794981815,\n", + " 0.48525436544651607,\n", + " 0.4851567285533576,\n", + " 0.6278945984238412,\n", + " 0.6281390462008642,\n", + " 0.6283081249535385,\n", + " 0.6280197922186243,\n", + " 0.6280192424935491,\n", + " 0.6282832071296321,\n", + " 0.6281522276066059,\n", + " 0.627965516388511,\n", + " 0.6277353544965071,\n", + " 0.6278700835347193,\n", + " 0.6286806371261001,\n", + " 0.6281269536708333,\n", + " 0.6281217503270786,\n", + " 0.6277798778644176,\n", + " 0.6278461900382379,\n", + " 0.6285363191287605,\n", + " 0.6283971912344217,\n", + " 0.6283066377247811,\n", + " 0.628142404218728,\n", + " 0.6285404729543963,\n", + " 0.628117681739836,\n", + " 0.6284285531715674,\n", + " 0.628440782618211,\n", + " 0.6286006002142941,\n", + " 0.6279629684369982\n", + " ],\n", + " \"rms_dc\": [\n", + " 0.6621829958188445,\n", + " 0.6616518915968526,\n", + " 0.6619229399260815,\n", + " 0.6617138187667061,\n", + " 0.6617088713545417,\n", + " 0.6621712182715772,\n", + " 0.6624628340232414,\n", + " 0.661977447702136,\n", + " 0.6627544903873464,\n", + " 0.6620207993082551,\n", + " 0.662241081744421,\n", + " 0.661799506359354,\n", + " 0.6623544164712631,\n", + " 0.6624120892580125,\n", + " 0.6626660580828794,\n", + " 0.6620974380917977,\n", + " 0.498214159978348,\n", + " 0.49823204245121355,\n", + " 0.4981883248148897,\n", + " 0.49798748569938905,\n", + " 0.4983621583589863,\n", + " 0.4983645131550537,\n", + " 0.49866331698402155,\n", + " 0.49849425732991726,\n", + " 0.6374436148716767,\n", + " 0.6377106362522227,\n", + " 0.6377963245451337,\n", + " 0.6375594045830764,\n", + " 0.6374337096669657,\n", + " 0.6378045217930529,\n", + " 0.6376521190146351,\n", + " 0.637442235802496,\n", + " 0.6373332350391726,\n", + " 0.6373635157843435,\n", + " 0.6381945643264252,\n", + " 0.6376292497131597,\n", + " 0.6376899092541004,\n", + " 0.6372860080258722,\n", + " 0.6373424476924897,\n", + " 0.6380636089021572,\n", + " 0.637839000655549,\n", + " 0.6377363375921016,\n", + " 0.6376999348751861,\n", + " 0.6381092936591727,\n", + " 0.6376180440233918,\n", + " 0.6378754730392424,\n", + " 0.6378695336896755,\n", + " 0.6379947683984636,\n", + " 0.6373637582315667\n", + " ],\n", + " \"dc\": [\n", + " -0.14041988067626954,\n", + " -0.14023926696777345,\n", + " -0.14034740295410156,\n", + " -0.14042304229736327,\n", + " -0.1400552963256836,\n", + " -0.1405050018310547,\n", + " -0.1403626495361328,\n", + " -0.14052389526367187,\n", + " -0.14048562774658202,\n", + " -0.13984957580566407,\n", + " -0.14031693725585936,\n", + " -0.14036508178710938,\n", + " -0.1403116729736328,\n", + " -0.14006922912597655,\n", + " -0.1404031967163086,\n", + " -0.14007142333984374,\n", + " -0.11444206237792968,\n", + " -0.11473634033203126,\n", + " -0.11492355346679688,\n", + " -0.11484622802734375,\n", + " -0.11462444915771484,\n", + " -0.11458556365966797,\n", + " -0.1148621109008789,\n", + " -0.11454026947021484,\n", + " -0.10992149658203125,\n", + " -0.11007358551025391,\n", + " -0.10960406799316406,\n", + " -0.10987781829833984,\n", + " -0.10914927978515625,\n", + " -0.10979444274902343,\n", + " -0.10965857849121094,\n", + " -0.10950759887695312,\n", + " -0.11019064025878907,\n", + " -0.10959657592773438,\n", + " -0.10978596649169922,\n", + " -0.10967037048339844,\n", + " -0.11005220184326171,\n", + " -0.10966257781982422,\n", + " -0.1096109359741211,\n", + " -0.10985110168457031,\n", + " -0.10934148712158204,\n", + " -0.10926300964355469,\n", + " -0.10999239501953124,\n", + " -0.11009243621826172,\n", + " -0.1096583236694336,\n", + " -0.10937400360107422,\n", + " -0.10926904754638672,\n", + " -0.10908074951171876,\n", + " -0.10906452484130859\n", + " ],\n", + " \"utilization\": [\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1\n", + " ]\n", + " },\n", " \"timestamps\": [\n", - " 1570186860,\n", " 1570273260,\n", " 1570359660,\n", " 1570446060,\n", @@ -246,229 +464,20 @@ " 1574251260,\n", " 1574337660,\n", " 1574424060\n", - " ],\n", - " \"rms\": [\n", - " 0.6470859724128016,\n", - " 0.6471233090087879,\n", - " 0.646619032857862,\n", - " 0.6468729279266723,\n", - " 0.6466425188145082,\n", - " 0.6467172058948399,\n", - " 0.647092780648743,\n", - " 0.6474220671843836,\n", - " 0.6468903895762841,\n", - " 0.647693834249824,\n", - " 0.6470808565115449,\n", - " 0.6472050737356421,\n", - " 0.6467427853732736,\n", - " 0.6473221821058892,\n", - " 0.6474336931665059,\n", - " 0.6476212217700601,\n", - " 0.6471112840086092,\n", - " 0.4848921153840439,\n", - " 0.4848409433332954,\n", - " 0.48475167234412847,\n", - " 0.4845635972925419,\n", - " 0.48500110983328193,\n", - " 0.4850127179498178,\n", - " 0.4852543654465155,\n", - " 0.48515672855335834,\n", - " 0.6278945984238401,\n", - " 0.6281390462008573,\n", - " 0.6283081249535378,\n", - " 0.6280197922186224,\n", - " 0.6280192424935522,\n", - " 0.628283207129633,\n", - " 0.6281522276066049,\n", - " 0.6279655163885232,\n", - " 0.6277353544965057,\n", - " 0.6278700835347184,\n", - " 0.6286806371261024,\n", - " 0.6281269536708373,\n", - " 0.6281217503270783,\n", - " 0.6277798778644154,\n", - " 0.6278461900382366,\n", - " 0.6285363191287583,\n", - " 0.6283971912344205,\n", - " 0.628306637724784,\n", - " 0.6281424042187251,\n", - " 0.6285404729543972,\n", - " 0.628117681739837,\n", - " 0.6284285531715674,\n", - " 0.6284407826182109,\n", - " 0.6286006002142908,\n", - " 0.6279629684369986\n", - " ],\n", - " \"rms_dc\": [\n", - " 0.6621077357581335,\n", - " 0.6621829958188445,\n", - " 0.6616518915968526,\n", - " 0.6619229399260815,\n", - " 0.6617138187667061,\n", - " 0.6617088713545417,\n", - " 0.6621712182715772,\n", - " 0.6624628340232414,\n", - " 0.661977447702136,\n", - " 0.6627544903873464,\n", - " 0.6620207993082551,\n", - " 0.662241081744421,\n", - " 0.661799506359354,\n", - " 0.6623544164712631,\n", - " 0.6624120892580125,\n", - " 0.6626660580828794,\n", - " 0.6620974380917977,\n", - " 0.498214159978348,\n", - " 0.49823204245121355,\n", - " 0.4981883248148897,\n", - " 0.49798748569938905,\n", - " 0.4983621583589863,\n", - " 0.4983645131550537,\n", - " 0.49866331698402155,\n", - " 0.49849425732991726,\n", - " 0.6374436148716767,\n", - " 0.6377106362522227,\n", - " 0.6377963245451337,\n", - " 0.6375594045830764,\n", - " 0.6374337096669657,\n", - " 0.6378045217930529,\n", - " 0.6376521190146351,\n", - " 0.637442235802496,\n", - " 0.6373332350391726,\n", - " 0.6373635157843435,\n", - " 0.6381945643264252,\n", - " 0.6376292497131597,\n", - " 0.6376899092541004,\n", - " 0.6372860080258722,\n", - " 0.6373424476924897,\n", - " 0.6380636089021572,\n", - " 0.637839000655549,\n", - " 0.6377363375921016,\n", - " 0.6376999348751861,\n", - " 0.6381092936591727,\n", - " 0.6376180440233918,\n", - " 0.6378754730392424,\n", - " 0.6378695336896755,\n", - " 0.6379947683984636,\n", - " 0.6373637582315667\n", - " ],\n", - " \"dc\": [\n", - " -0.1402369354248047,\n", - " -0.14041988067626954,\n", - " -0.14023926696777345,\n", - " -0.14034740295410156,\n", - " -0.14042304229736327,\n", - " -0.1400552963256836,\n", - " -0.1405050018310547,\n", - " -0.1403626495361328,\n", - " -0.14052389526367187,\n", - " -0.14048562774658202,\n", - " -0.13984957580566407,\n", - " -0.14031693725585936,\n", - " -0.14036508178710938,\n", - " -0.1403116729736328,\n", - " -0.14006922912597655,\n", - " -0.1404031967163086,\n", - " -0.14007142333984374,\n", - " -0.11444206237792968,\n", - " -0.11473634033203126,\n", - " -0.11492355346679688,\n", - " -0.11484622802734375,\n", - " -0.11462444915771484,\n", - " -0.11458556365966797,\n", - " -0.1148621109008789,\n", - " -0.11454026947021484,\n", - " -0.10992149658203125,\n", - " -0.11007358551025391,\n", - " -0.10960406799316406,\n", - " -0.10987781829833984,\n", - " -0.10914927978515625,\n", - " -0.10979444274902343,\n", - " -0.10965857849121094,\n", - " -0.10950759887695312,\n", - " -0.11019064025878907,\n", - " -0.10959657592773438,\n", - " -0.10978596649169922,\n", - " -0.10967037048339844,\n", - " -0.11005220184326171,\n", - " -0.10966257781982422,\n", - " -0.1096109359741211,\n", - " -0.10985110168457031,\n", - " -0.10934148712158204,\n", - " -0.10926300964355469,\n", - " -0.10999239501953124,\n", - " -0.11009243621826172,\n", - " -0.1096583236694336,\n", - " -0.10937400360107422,\n", - " -0.10926904754638672,\n", - " -0.10908074951171876,\n", - " -0.10906452484130859\n", - " ],\n", - " \"utilization\": [\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1\n", " ]\n", " },\n", " \"inputs\": {\n", - " \"request_id\": \"bd831c060faf3d6ca5332be3f17c5c10\",\n", + " \"request_id\": \"99c500893a6184b4f3dcd4a7a3b1565b\",\n", " \"feature\": \"RMS\",\n", " \"experiment\": \"RMS\",\n", " \"sw-commit\": {\n", - " \"api\": \"v0.1.14\",\n", + " \"api\": \"v0.2.0\",\n", " \"feature\": \"1.0.0\"\n", " },\n", " \"dataType\": \"waveform\",\n", - " \"db_def\": \"/pipeline/apfel/strudel/data/strudelDb/database.json\",\n", + " \"db_def\": \"/pipeline/dev_client_1/dev_site_1/data/dev_site_1Db/database.json\",\n", " \"UUID\": \"u0001\",\n", " \"timestamps\": [\n", - " 1570186860,\n", " 1570273260,\n", " 1570359660,\n", " 1570446060,\n", @@ -546,6 +555,7 @@ }, { "cell_type": "markdown", + "id": "advised-thursday", "metadata": { "pycharm": { "name": "#%% md\n" @@ -566,6 +576,7 @@ { "cell_type": "code", "execution_count": 5, + "id": "hollow-impact", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:38.637859Z", @@ -582,27 +593,131 @@ "output_type": "stream", "text": [ "=== RMS ===\n", - "request_id bd831c060faf3d6ca5332be3f17c5c10\n", - "from 1570186860 to 1574424060\n", + "request_id 99c500893a6184b4f3dcd4a7a3b1565b\n", + "from 20191005-13:01.00 to 20191122-13:01.00\n", "\n", "+-------+--------------+------------+------------+------------+---------------+\n", "| | timestamps | rms | rms_dc | dc | utilization |\n", "|-------+--------------+------------+------------+------------+---------------|\n", - "| count | 50 | 50 | 50 | 50 | 50 |\n", - "| mean | 1.57231e+09 | 0.611691 | 0.623692 | -0.120874 | 1 |\n", - "| std | 1.26105e+06 | 0.0565414 | 0.0563824 | 0.0141936 | 0 |\n", - "| min | 1.57019e+09 | 0.484564 | 0.497987 | -0.140524 | 1 |\n", - "| 25% | 1.57125e+09 | 0.627912 | 0.637381 | -0.140196 | 1 |\n", - "| 50% | 1.57231e+09 | 0.628307 | 0.6378 | -0.112316 | 1 |\n", - "| 75% | 1.57337e+09 | 0.64684 | 0.661892 | -0.10966 | 1 |\n", + "| count | 49 | 49 | 49 | 49 | 49 |\n", + "| mean | 1.57235e+09 | 0.610969 | 0.622908 | -0.120479 | 1 |\n", + "| std | 1.2361e+06 | 0.0568938 | 0.0566906 | 0.0140601 | 0 |\n", + "| min | 1.57027e+09 | 0.484564 | 0.497987 | -0.140524 | 1 |\n", + "| 25% | 1.57131e+09 | 0.627895 | 0.637364 | -0.140071 | 1 |\n", + "| 50% | 1.57235e+09 | 0.628307 | 0.637796 | -0.110191 | 1 |\n", + "| 75% | 1.57339e+09 | 0.646743 | 0.6618 | -0.109659 | 1 |\n", "| max | 1.57442e+09 | 0.647694 | 0.662754 | -0.109065 | 1 |\n", "+-------+--------------+------------+------------+------------+---------------+\n" ] }, { "data": { - "text/plain": " timestamps rms rms_dc dc utilization\ncount 5.000000e+01 50.000000 50.000000 50.000000 50.0\nmean 1.572306e+09 0.611691 0.623692 -0.120874 1.0\nstd 1.261051e+06 0.056541 0.056382 0.014194 0.0\nmin 1.570187e+09 0.484564 0.497987 -0.140524 1.0\n25% 1.571245e+09 0.627912 0.637381 -0.140196 1.0\n50% 1.572307e+09 0.628307 0.637800 -0.112316 1.0\n75% 1.573366e+09 0.646840 0.661892 -0.109660 1.0\nmax 1.574424e+09 0.647694 0.662754 -0.109065 1.0", - "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
timestampsrmsrms_dcdcutilization
count5.000000e+0150.00000050.00000050.00000050.0
mean1.572306e+090.6116910.623692-0.1208741.0
std1.261051e+060.0565410.0563820.0141940.0
min1.570187e+090.4845640.497987-0.1405241.0
25%1.571245e+090.6279120.637381-0.1401961.0
50%1.572307e+090.6283070.637800-0.1123161.0
75%1.573366e+090.6468400.661892-0.1096601.0
max1.574424e+090.6476940.662754-0.1090651.0
\n
" + "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", + "
timestampsrmsrms_dcdcutilization
count4.900000e+0149.00000049.00000049.00000049.0
mean1.572349e+090.6109690.622908-0.1204791.0
std1.236102e+060.0568940.0566910.0140600.0
min1.570273e+090.4845640.497987-0.1405241.0
25%1.571310e+090.6278950.637364-0.1400711.0
50%1.572350e+090.6283070.637796-0.1101911.0
75%1.573387e+090.6467430.661800-0.1096591.0
max1.574424e+090.6476940.662754-0.1090651.0
\n", + "
" + ], + "text/plain": [ + " timestamps rms rms_dc dc utilization\n", + "count 4.900000e+01 49.000000 49.000000 49.000000 49.0\n", + "mean 1.572349e+09 0.610969 0.622908 -0.120479 1.0\n", + "std 1.236102e+06 0.056894 0.056691 0.014060 0.0\n", + "min 1.570273e+09 0.484564 0.497987 -0.140524 1.0\n", + "25% 1.571310e+09 0.627895 0.637364 -0.140071 1.0\n", + "50% 1.572350e+09 0.628307 0.637796 -0.110191 1.0\n", + "75% 1.573387e+09 0.646743 0.661800 -0.109659 1.0\n", + "max 1.574424e+09 0.647694 0.662754 -0.109065 1.0" + ] }, "execution_count": 5, "metadata": {}, @@ -619,6 +734,7 @@ }, { "cell_type": "markdown", + "id": "athletic-reward", "metadata": {}, "source": [ "### Plotting\n", @@ -628,6 +744,7 @@ { "cell_type": "code", "execution_count": 6, + "id": "historical-peripheral", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:43.435603Z", @@ -641,8 +758,10 @@ "outputs": [ { "data": { - "text/plain": "
", - "image/png": "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85o2qoGJiBQYOnQoL7/8Mps2beLNN9/k9ttvB6BPnz5s3bq11encfvvt3HXXXVx11VX107Zs2cKAAQPo1asXK1asYMmSJfXzqqur2bVr127pzJw5k5tuuom6ujo2bNjAvffey7Rp097CHnYOqoGJiBSorq7m4osvZvr06YwZM4Zx48YBcOaZZ3LuuefSs2dPHnjggRbT+fa3v8369evrg82cOXO48MILWbBgARMnTuSggw5ixowZ9cufc845TJw4kSlTpnDDDTfUT587dy4PPPAAkyZNwsz45je/yT777MOKFe37fDBtrDP0WJk6daoX6wkkIunz9NNPc/DBB5c7G51OsXI1s4fdvXU9UiqQmhBFRCSVFMBERCSVFMBEpOJ0hkcblaSzlqcCmIhUlB49erBp06ZOe9EtNXdn06ZN9OjRo9xZaXfqhSgiFWXEiBHU1NSwYcOGcmel0+jRowcjRowodzbanQKYiFSU6upqxowZ0/KC0uWpCVFERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFKppAHMzI43s5VmtsrM5heZP8/MHo+fv5nZpFLmT0RE0qNkAczMssA1wAnAeOA0MxtfsNhzwLHuPhH4KnBdqfInIiLpUsoa2DRglbuvdvedwI3ASckF3P1v7v5qHF0CdL73/4uISLsoZQAbDqxNjNfEaU35GPCHpmaa2TlmttTMlup3g0REup5SBjArMq3oT66a2b8QAtj5TSXm7te5+1R3nzpkyJB2yqKIiKRFKX/QsgYYmRgfAawvXMjMJgLXAye4+6YS5U1ERFKmlDWwh4CxZjbGzLoBpwK3Jhcws/2Am4EPu/s/Spg3ERFJmZLVwNy91szOA+4EssBCd19uZufG+QuAi4FBwLVmBlDr7lNLlUcREUkPcy/6GCpVpk6d6kuXLi13NkREUsXMHk5zJUFv4hARkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVQqaQAzs+PNbKWZrTKz+UXmm5ldFec/bmZTSpk/ERFJj5IFMDPLAtcAJwDjgdPMbHzBYicAY+PnHOCHpcqfiIikSylrYNOAVe6+2t13AjcCJxUscxLwUw+WAP3NbN8S5lFERFKilAFsOLA2MV4Tp+3pMiIiIiUNYFZkmrdhmbCg2TlmttTMlm7YsOEtZ05ERNKllAGsBhiZGB8BrG/DMgC4+3XuPtXdpw4ZMqRdMyoiIpWvlAHsIWCsmY0xs27AqcCtBcvcCnwk9kacAWxx93+WMI8iIpISVaXakLvXmtl5wJ1AFljo7svN7Nw4fwFwB3AisAp4AzirVPkTEZF0KVkAA3D3OwhBKjltQWLYgU+VMk8iIpJOehOHiIikkgKYiIikkgKYiIikkgKYiIikkgKYiIikkgKYiIikkgKYiIikkgKYiIikkgKYiIikkgKYiIikkgKYiIikkgKYiIikUklf5ivSZdW+CVtfBK8DDMzAMg3DubowL5eDXG0crgvrWqZh+fzHHXK7oG4n1NXG4V1hvUxV/FRDtqphHMJ6eCv+EraZrY7pVIc0stVh+3W7Qj5zdWHb+WGzuE+ZxvuY/13aRtuJ27AsZLIN+5bJhnm5OvBcomzieL0iv4ebLKP89nN1iTKtTYx7Qb7yyWQa72/9/mcbjlf99iyR13j88tvxXMMnl2s8nizrRtv3uIwXLNeMkdOgR7/ml+mkFMCksuXq4Jm74M2t4WKRvNDVB4CCi2X9BcYTfxIXivoLQ67gYtGEwuCR3yY0vih5vMDufAM2Pw+vPt/wd+s/G/Ig0p7O+QsMm1zuXJSFAphUri3r4LefgDV/LXdO2sCg73AYMAr2nxX+9h0ea0LJmk4MoJlsrIlUQSbTUCvBCu7acw135PkaQrZb49pRfa2oLlFTqo3ZyteQWvHXc3H9XQW1vFxDzSRTFfKZ3zYUqUHkoGjNxRKB3xvXtOpvGhK1s/xf8unQkGayZteopkPDuvU101jW+fwm8wUhD8n9rd//WnarSeaH649ftnH6jW64snG/EjdAheWSz2+TN2VFDB7b9LxOTgFMKtNTv4NbPxMuIO+9CkYdWVDbiU1L9RetZECIF0wo3tyTrFEla3A0dZHw3bedr9U1arKKF6yq7tB3BFR167DiEREFMKk0O1+HP86HR34Kww6Dk38Mgw4od65EpAIpgEnlWP8o/OZs2PQsHP15mPVl1WJEpEldO4Dd9rnQQSDZ7t/oGUCyHZ/GD/qTTU4GFG3LTrTPF7bz1z/7SLTJJ599FD4jSXYASLaLFz4TSC6Xz3+x5yGe273Nvr7tvn5Djfcjn2ZyO/mmtORzj/ynUeeH/DOBmN98edT3MsvBG5ug91A441YYM7OVB1FEuqquHcCGHtLwUDr5ADg/nHw20ug5iTe+kDfVHTY/nnw+kuw2DPGBe7KbcMFD7N0erBcJbMlnPtA44OQ7BmQTXaszVSHt/LbquxjHB+pN7kcTAbowoNaXFYkAlQ/i+eCWTZRHXKfnQDjy09Br4J4fSxHpcrp2AJv28XLnQERE2khv4hARkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVQyb+nH0lLAzDYAzwODgY1lzk6lUtk0T+XTPJVP89JaPqPcfUi5M9FWnSKA5ZnZUnefWu58VCKVTfNUPs1T+TRP5VMeakIUEZFUUgATEZFU6mwB7LpyZ6CCqWyap/JpnsqneSqfMuhUz8BERKTr6Gw1MBER6SIUwEREJJUqMoCZ2UIze9nMnmxi/iwz22Jmy+Ln4jj9oMS0ZWb2mpl9Ls4baGZ3mdkz8e+AUu5Te+qg8vmAmS03s5yZpbo7cAeVz7fMbIWZPW5mvzWz/qXcp/bUQeXz1Vg2y8zs/8xsWCn3qT11RPkk1v1PM3MzG1yKfen03L3iPsBMYArwZBPzZwG3t5BGFniR8I96AN8E5sfh+cAV5d7PCiufg4GDgMXA1HLvYwWWz7uBqjh8hc6f3cqnb2LeZ4AF5d7PSiqfOG0kcCfxpQvl3s/O8KnIGpi73wu88haTeSfwrLs/H8dPAv43Dv8v8L63mH7ZdET5uPvT7r7yLWeuAnRQ+fyfu9fGeUuAEW8x/bLpoPJ5LTFvLyC1vcM66PoD8F3gS6S4bCpNRQawVnq7mT1mZn8ws0OKzD8V+GVifKi7/xMg/t27FJksoz0tn67mrZTPR4E/dFzWKsIel4+ZXWZma4F5wMWlyGQZ7VH5mNkcYJ27P1ayHHYF5a4CNvUBRtN0Fb4v0DsOnwg8UzC/G+G9ZEMT0zYXLPNqufexksonMW8xKW9C7ODyuRD4LfFfUNL66ajyifMvAP673PtYKeUD9AL+DvSL42tQE2K7fFJZA3P319x9Wxy+A6gueCh6AvCIu7+UmPaSme0LEP++XLIMl1gby6fLaGv5mNkZwL8C8zxeiTqjdjh/fgGc3MHZLJs2lM8BwBjgMTNbQ2h+fsTM9ilhtjulVAYwM9vHzCwOTyPsx6bEIqexe/PPrcAZcfgM4Hcdnc9yaWP5dBltKR8zOx44H5jj7m+UKq/l0MbyGZsYnQOs6Oh8lsuelo+7P+Hue7v7aHcfDdQAU9z9xRJmu1OqyDdxmNkvCT19BgMvAV8BqgHcfYGZnQf8O1ALbAe+4O5/i+v2AtYC+7v7lkSag4BfAfsBLwAfcPe3+qC2LDqofOYCPwCGAJuBZe5+XKn2qT11UPmsArrTcKFa4u7nlmSH2lkHlc9vCL1Yc4Redue6+7pS7VN76ojyKUh/DaGZPo0/v1JRKjKAiYiItCSVTYgiIiIKYCIikkoKYCIikkoKYCIikkoKYCIiKdPSC4cLlh1lZnfHly0vNrPUvgatkAKYdBlm1t/MPhmHh5nZrztwW5PN7MSOSl+6vEXA8a1c9krgp+4+EbgU+EZHZarUFMCkK+kPfBLA3de7+ykduK3JhNcMibQ7L/LCYTM7wMz+aGYPm9lfzWxcnDUeuDsO/5nwYvNOoarcGRApocuBA8xsGfAMcLC7TzCzMwm/TpAFJgDfJrzP7sPAm8CJ7v6KmR0AXEP4Z+83gI+7+woz+wDhn13rgC3AbMKdbk8zO5pwx/sc8D2gJ+GfX89y95V7sO3FwDJgGuFdfB919wfN7Fjg+3H/HJjp7lvbveQkDa4j/AP5M2Y2HbgWeAfwGOHVXt8H5gJ9zGyQu29qOqmUKPfLGPXRp1QfEi9oLRg+E1gF9CEEpy2ECwGEn8D4XBy+Gxgbh6cD98ThJ4Dhcbh/Is2rE9vuS8Pvic0GfrOH214M/CgOz0zk/TbgqDjcO78NfTr/p+Ac7k24MVqW+Dwd5w0DbgYeJQSxGuKLhdP+UQ1MJPizh5rLVjPbQggMEILTRDPrDRwJ/L/4GjwIr5YCuB9YZGa/IlwoiukH/G98Z6ATX03Umm0nlvslhOYjM+tr4Veh7we+Y2Y3ADe7e01bdl5SL0P4xY3JhTPcfT3wfoB4Hp/sTbzmKm30DEwkeDMxnEuM5whN7fUXiMTnYAAP70S8iPCLu8viezcLfZUQqCYA7wV67MG28wrf++bufjlwNqFpckniuYd0IR5+UPS52JyNBZPi8GAzy1/rLwAWlimb7U4BTLqSrYSmuj3WwgXiAHf/u7tfTPgdqJFFttUPyL/c9sy2ZZ8Pxu0dDWxx9y1x20+4+xXAUkABrAuILxx+ADjIzGrM7GOEHxL9mJk9BiynobPGLGClmf0DGApcVoYsdwg1IUqX4e6bzOz++L8zT7chiXnAD83sIkIT4I2EB+Tfik2DRnhO9hjhFw/mxw4j3wC+SWhC/AJwTxt34VUz+xuxE0ec9jkz+xdCB5Kn6Py/FC2Au5/WxKzduta7+6+BDvuXkXLS2+hFUiD2QvxPd19a7ryIVAo1IYqISCqpBiYiIqmkGpiIiKSSApiIiKSSApiIiKSSApiIiKSSApiIiKTS/wep3eFsYGP5cAAAAABJRU5ErkJggg==\n" + "image/png": "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aQPgfcDV1ZkR8WJEbBER4yJiHHAHcFhEzCknXDMzaxSlJriIWAWcAFwP/Bm4MiIeknSWpMPKjM3MzBpb2b0oiYjrgOtqpp3RxbIz+iMmMzNrfGVXUZqZNaxZs2bx1FNPtY9/5CMf4eGH06ecxo0bx3PPPQfAvvvuu1bbP/vsszuNr+121ldOcGZma6k2wX3/+99n111X+64KbrvttrXafm2CW9vtrK+c4MzMejB//nwmTJjQPn7eeecxYcIE5syZw8yZM5k8eTLLly9nxowZzJmzeh+4YcOGAXDGGWcwefJkJk+ezJgxY/jQhz4EwBFHHMFee+3FbrvtxiWXXALAqaeeyvLly5k8eTIzZ87stJ2I4OSTT2bChAlMnDiRK664AoDZs2czY8YMjjrqKHbeeWdmzpxJRKy7AzPAld4GZ2bWW+fceQ6PPP9In25z5xE7c8q0U9Z4vaOOOorZs2dz3nnnMWVK7z65dNZZZ3HWWWexZMkS9t9/f0444QQALr30UkaMGMHy5cuZOnUq7373u/nKV77ChRdeyH333bfadn71q19x3333cf/99/Pcc88xdepUDjjgAADuvfdeHnroIUaPHs306dO59dZb2W+//dZ4/5qBS3BmZv0oIjjmmGM48cQT2WuvvQC44IIL2H333dlnn3148sknefTRR7vdxi233MLRRx9NS0sLW265JQceeCB33XUXANOmTWPs2LFUKhUmT57M/Pnz1/UuDVguwZlZw1ibklZfGDRoUKcfM12xYsVab+vMM89k7Nix7dWTs2fP5oYbbuD2229no402YsaMGa9r+0OGDGkfbmlpYdWqVWu9rUbnEpyZWQ+23HJLnn32WRYvXsyrr77KtddeC8Dw4cNZunRpr7dzzTXXcMMNN3DBBRe0T3vxxRfZfPPN2WijjXjkkUe444472ucNHjyYlStXrrad/fffnyuuuILW1lYWLVrEzTffzLRp017HHjYnl+DMzHowePBgzjjjDKZNm8aYMWPYeeedATjuuOP4+Mc/zoYbbsjtt9/e43a+/vWvs3DhwvZkdNhhh3Haaadx8cUXs8suu7DTTjuxzz77tC9//PHHM2nSJPbcc09+9rOftU8/8sgjuf3229l9992RxLnnnstWW23FI4/0bftko1Mz9rCZMmVK1OvJZGaN589//jO77LJL2WE0nXrHVdLdEdE0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\n", + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" @@ -651,7 +770,9 @@ }, { "data": { - "text/plain": "''" + "text/plain": [ + "''" + ] }, "execution_count": 6, "metadata": {}, @@ -664,6 +785,7 @@ }, { "cell_type": "markdown", + "id": "atomic-marketing", "metadata": { "pycharm": { "name": "#%% md\n" @@ -677,6 +799,7 @@ { "cell_type": "code", "execution_count": 7, + "id": "painted-precipitation", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:44.400481Z", @@ -689,8 +812,582 @@ "outputs": [ { "data": { - "text/plain": " timestamps rms rms_dc dc utilization \\\n0 1570186860 0.647086 0.662108 -0.140237 1 \n1 1570273260 0.647123 0.662183 -0.140420 1 \n2 1570359660 0.646619 0.661652 -0.140239 1 \n3 1570446060 0.646873 0.661923 -0.140347 1 \n4 1570532460 0.646643 0.661714 -0.140423 1 \n5 1570618860 0.646717 0.661709 -0.140055 1 \n6 1570705260 0.647093 0.662171 -0.140505 1 \n7 1570791660 0.647422 0.662463 -0.140363 1 \n8 1570878060 0.646890 0.661977 -0.140524 1 \n9 1570964460 0.647694 0.662754 -0.140486 1 \n10 1571050860 0.647081 0.662021 -0.139850 1 \n11 1571137260 0.647205 0.662241 -0.140317 1 \n12 1571223660 0.646743 0.661800 -0.140365 1 \n13 1571310060 0.647322 0.662354 -0.140312 1 \n14 1571396460 0.647434 0.662412 -0.140069 1 \n15 1571482860 0.647621 0.662666 -0.140403 1 \n16 1571569260 0.647111 0.662097 -0.140071 1 \n17 1571655660 0.484892 0.498214 -0.114442 1 \n18 1571742060 0.484841 0.498232 -0.114736 1 \n19 1571828460 0.484752 0.498188 -0.114924 1 \n20 1571914860 0.484564 0.497987 -0.114846 1 \n21 1572001260 0.485001 0.498362 -0.114624 1 \n22 1572087660 0.485013 0.498365 -0.114586 1 \n23 1572177660 0.485254 0.498663 -0.114862 1 \n24 1572264060 0.485157 0.498494 -0.114540 1 \n25 1572350460 0.627895 0.637444 -0.109921 1 \n26 1572436860 0.628139 0.637711 -0.110074 1 \n27 1572523260 0.628308 0.637796 -0.109604 1 \n28 1572609660 0.628020 0.637559 -0.109878 1 \n29 1572696060 0.628019 0.637434 -0.109149 1 \n30 1572782460 0.628283 0.637805 -0.109794 1 \n31 1572868860 0.628152 0.637652 -0.109659 1 \n32 1572955260 0.627966 0.637442 -0.109508 1 \n33 1573041660 0.627735 0.637333 -0.110191 1 \n34 1573128060 0.627870 0.637364 -0.109597 1 \n35 1573214460 0.628681 0.638195 -0.109786 1 \n36 1573300860 0.628127 0.637629 -0.109670 1 \n37 1573387260 0.628122 0.637690 -0.110052 1 \n38 1573473660 0.627780 0.637286 -0.109663 1 \n39 1573560060 0.627846 0.637342 -0.109611 1 \n40 1573646460 0.628536 0.638064 -0.109851 1 \n41 1573732860 0.628397 0.637839 -0.109341 1 \n42 1573819260 0.628307 0.637736 -0.109263 1 \n43 1573905660 0.628142 0.637700 -0.109992 1 \n44 1573992060 0.628540 0.638109 -0.110092 1 \n45 1574078460 0.628118 0.637618 -0.109658 1 \n46 1574164860 0.628429 0.637875 -0.109374 1 \n47 1574251260 0.628441 0.637870 -0.109269 1 \n48 1574337660 0.628601 0.637995 -0.109081 1 \n49 1574424060 0.627963 0.637364 -0.109065 1 \n\n datetime \n0 2019-10-04 13:01:00+02:00 \n1 2019-10-05 13:01:00+02:00 \n2 2019-10-06 13:01:00+02:00 \n3 2019-10-07 13:01:00+02:00 \n4 2019-10-08 13:01:00+02:00 \n5 2019-10-09 13:01:00+02:00 \n6 2019-10-10 13:01:00+02:00 \n7 2019-10-11 13:01:00+02:00 \n8 2019-10-12 13:01:00+02:00 \n9 2019-10-13 13:01:00+02:00 \n10 2019-10-14 13:01:00+02:00 \n11 2019-10-15 13:01:00+02:00 \n12 2019-10-16 13:01:00+02:00 \n13 2019-10-17 13:01:00+02:00 \n14 2019-10-18 13:01:00+02:00 \n15 2019-10-19 13:01:00+02:00 \n16 2019-10-20 13:01:00+02:00 \n17 2019-10-21 13:01:00+02:00 \n18 2019-10-22 13:01:00+02:00 \n19 2019-10-23 13:01:00+02:00 \n20 2019-10-24 13:01:00+02:00 \n21 2019-10-25 13:01:00+02:00 \n22 2019-10-26 13:01:00+02:00 \n23 2019-10-27 13:01:00+01:00 \n24 2019-10-28 13:01:00+01:00 \n25 2019-10-29 13:01:00+01:00 \n26 2019-10-30 13:01:00+01:00 \n27 2019-10-31 13:01:00+01:00 \n28 2019-11-01 13:01:00+01:00 \n29 2019-11-02 13:01:00+01:00 \n30 2019-11-03 13:01:00+01:00 \n31 2019-11-04 13:01:00+01:00 \n32 2019-11-05 13:01:00+01:00 \n33 2019-11-06 13:01:00+01:00 \n34 2019-11-07 13:01:00+01:00 \n35 2019-11-08 13:01:00+01:00 \n36 2019-11-09 13:01:00+01:00 \n37 2019-11-10 13:01:00+01:00 \n38 2019-11-11 13:01:00+01:00 \n39 2019-11-12 13:01:00+01:00 \n40 2019-11-13 13:01:00+01:00 \n41 2019-11-14 13:01:00+01:00 \n42 2019-11-15 13:01:00+01:00 \n43 2019-11-16 13:01:00+01:00 \n44 2019-11-17 13:01:00+01:00 \n45 2019-11-18 13:01:00+01:00 \n46 2019-11-19 13:01:00+01:00 \n47 2019-11-20 13:01:00+01:00 \n48 2019-11-21 13:01:00+01:00 \n49 2019-11-22 13:01:00+01:00 ", - "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
timestampsrmsrms_dcdcutilizationdatetime
015701868600.6470860.662108-0.14023712019-10-04 13:01:00+02:00
115702732600.6471230.662183-0.14042012019-10-05 13:01:00+02:00
215703596600.6466190.661652-0.14023912019-10-06 13:01:00+02:00
315704460600.6468730.661923-0.14034712019-10-07 13:01:00+02:00
415705324600.6466430.661714-0.14042312019-10-08 13:01:00+02:00
515706188600.6467170.661709-0.14005512019-10-09 13:01:00+02:00
615707052600.6470930.662171-0.14050512019-10-10 13:01:00+02:00
715707916600.6474220.662463-0.14036312019-10-11 13:01:00+02:00
815708780600.6468900.661977-0.14052412019-10-12 13:01:00+02:00
915709644600.6476940.662754-0.14048612019-10-13 13:01:00+02:00
1015710508600.6470810.662021-0.13985012019-10-14 13:01:00+02:00
1115711372600.6472050.662241-0.14031712019-10-15 13:01:00+02:00
1215712236600.6467430.661800-0.14036512019-10-16 13:01:00+02:00
1315713100600.6473220.662354-0.14031212019-10-17 13:01:00+02:00
1415713964600.6474340.662412-0.14006912019-10-18 13:01:00+02:00
1515714828600.6476210.662666-0.14040312019-10-19 13:01:00+02:00
1615715692600.6471110.662097-0.14007112019-10-20 13:01:00+02:00
1715716556600.4848920.498214-0.11444212019-10-21 13:01:00+02:00
1815717420600.4848410.498232-0.11473612019-10-22 13:01:00+02:00
1915718284600.4847520.498188-0.11492412019-10-23 13:01:00+02:00
2015719148600.4845640.497987-0.11484612019-10-24 13:01:00+02:00
2115720012600.4850010.498362-0.11462412019-10-25 13:01:00+02:00
2215720876600.4850130.498365-0.11458612019-10-26 13:01:00+02:00
2315721776600.4852540.498663-0.11486212019-10-27 13:01:00+01:00
2415722640600.4851570.498494-0.11454012019-10-28 13:01:00+01:00
2515723504600.6278950.637444-0.10992112019-10-29 13:01:00+01:00
2615724368600.6281390.637711-0.11007412019-10-30 13:01:00+01:00
2715725232600.6283080.637796-0.10960412019-10-31 13:01:00+01:00
2815726096600.6280200.637559-0.10987812019-11-01 13:01:00+01:00
2915726960600.6280190.637434-0.10914912019-11-02 13:01:00+01:00
3015727824600.6282830.637805-0.10979412019-11-03 13:01:00+01:00
3115728688600.6281520.637652-0.10965912019-11-04 13:01:00+01:00
3215729552600.6279660.637442-0.10950812019-11-05 13:01:00+01:00
3315730416600.6277350.637333-0.11019112019-11-06 13:01:00+01:00
3415731280600.6278700.637364-0.10959712019-11-07 13:01:00+01:00
3515732144600.6286810.638195-0.10978612019-11-08 13:01:00+01:00
3615733008600.6281270.637629-0.10967012019-11-09 13:01:00+01:00
3715733872600.6281220.637690-0.11005212019-11-10 13:01:00+01:00
3815734736600.6277800.637286-0.10966312019-11-11 13:01:00+01:00
3915735600600.6278460.637342-0.10961112019-11-12 13:01:00+01:00
4015736464600.6285360.638064-0.10985112019-11-13 13:01:00+01:00
4115737328600.6283970.637839-0.10934112019-11-14 13:01:00+01:00
4215738192600.6283070.637736-0.10926312019-11-15 13:01:00+01:00
4315739056600.6281420.637700-0.10999212019-11-16 13:01:00+01:00
4415739920600.6285400.638109-0.11009212019-11-17 13:01:00+01:00
4515740784600.6281180.637618-0.10965812019-11-18 13:01:00+01:00
4615741648600.6284290.637875-0.10937412019-11-19 13:01:00+01:00
4715742512600.6284410.637870-0.10926912019-11-20 13:01:00+01:00
4815743376600.6286010.637995-0.10908112019-11-21 13:01:00+01:00
4915744240600.6279630.637364-0.10906512019-11-22 13:01:00+01:00
\n
" + "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", + "
timestampsrmsrms_dcdcutilizationdatetime
015702732600.6471230.662183-0.14042012019-10-05 13:01:00+02:00
115703596600.6466190.661652-0.14023912019-10-06 13:01:00+02:00
215704460600.6468730.661923-0.14034712019-10-07 13:01:00+02:00
315705324600.6466430.661714-0.14042312019-10-08 13:01:00+02:00
415706188600.6467170.661709-0.14005512019-10-09 13:01:00+02:00
515707052600.6470930.662171-0.14050512019-10-10 13:01:00+02:00
615707916600.6474220.662463-0.14036312019-10-11 13:01:00+02:00
715708780600.6468900.661977-0.14052412019-10-12 13:01:00+02:00
815709644600.6476940.662754-0.14048612019-10-13 13:01:00+02:00
915710508600.6470810.662021-0.13985012019-10-14 13:01:00+02:00
1015711372600.6472050.662241-0.14031712019-10-15 13:01:00+02:00
1115712236600.6467430.661800-0.14036512019-10-16 13:01:00+02:00
1215713100600.6473220.662354-0.14031212019-10-17 13:01:00+02:00
1315713964600.6474340.662412-0.14006912019-10-18 13:01:00+02:00
1415714828600.6476210.662666-0.14040312019-10-19 13:01:00+02:00
1515715692600.6471110.662097-0.14007112019-10-20 13:01:00+02:00
1615716556600.4848920.498214-0.11444212019-10-21 13:01:00+02:00
1715717420600.4848410.498232-0.11473612019-10-22 13:01:00+02:00
1815718284600.4847520.498188-0.11492412019-10-23 13:01:00+02:00
1915719148600.4845640.497987-0.11484612019-10-24 13:01:00+02:00
2015720012600.4850010.498362-0.11462412019-10-25 13:01:00+02:00
2115720876600.4850130.498365-0.11458612019-10-26 13:01:00+02:00
2215721776600.4852540.498663-0.11486212019-10-27 13:01:00+01:00
2315722640600.4851570.498494-0.11454012019-10-28 13:01:00+01:00
2415723504600.6278950.637444-0.10992112019-10-29 13:01:00+01:00
2515724368600.6281390.637711-0.11007412019-10-30 13:01:00+01:00
2615725232600.6283080.637796-0.10960412019-10-31 13:01:00+01:00
2715726096600.6280200.637559-0.10987812019-11-01 13:01:00+01:00
2815726960600.6280190.637434-0.10914912019-11-02 13:01:00+01:00
2915727824600.6282830.637805-0.10979412019-11-03 13:01:00+01:00
3015728688600.6281520.637652-0.10965912019-11-04 13:01:00+01:00
3115729552600.6279660.637442-0.10950812019-11-05 13:01:00+01:00
3215730416600.6277350.637333-0.11019112019-11-06 13:01:00+01:00
3315731280600.6278700.637364-0.10959712019-11-07 13:01:00+01:00
3415732144600.6286810.638195-0.10978612019-11-08 13:01:00+01:00
3515733008600.6281270.637629-0.10967012019-11-09 13:01:00+01:00
3615733872600.6281220.637690-0.11005212019-11-10 13:01:00+01:00
3715734736600.6277800.637286-0.10966312019-11-11 13:01:00+01:00
3815735600600.6278460.637342-0.10961112019-11-12 13:01:00+01:00
3915736464600.6285360.638064-0.10985112019-11-13 13:01:00+01:00
4015737328600.6283970.637839-0.10934112019-11-14 13:01:00+01:00
4115738192600.6283070.637736-0.10926312019-11-15 13:01:00+01:00
4215739056600.6281420.637700-0.10999212019-11-16 13:01:00+01:00
4315739920600.6285400.638109-0.11009212019-11-17 13:01:00+01:00
4415740784600.6281180.637618-0.10965812019-11-18 13:01:00+01:00
4515741648600.6284290.637875-0.10937412019-11-19 13:01:00+01:00
4615742512600.6284410.637870-0.10926912019-11-20 13:01:00+01:00
4715743376600.6286010.637995-0.10908112019-11-21 13:01:00+01:00
4815744240600.6279630.637364-0.10906512019-11-22 13:01:00+01:00
\n", + "
" + ], + "text/plain": [ + " timestamps rms rms_dc dc utilization \\\n", + "0 1570273260 0.647123 0.662183 -0.140420 1 \n", + "1 1570359660 0.646619 0.661652 -0.140239 1 \n", + "2 1570446060 0.646873 0.661923 -0.140347 1 \n", + "3 1570532460 0.646643 0.661714 -0.140423 1 \n", + "4 1570618860 0.646717 0.661709 -0.140055 1 \n", + "5 1570705260 0.647093 0.662171 -0.140505 1 \n", + "6 1570791660 0.647422 0.662463 -0.140363 1 \n", + "7 1570878060 0.646890 0.661977 -0.140524 1 \n", + "8 1570964460 0.647694 0.662754 -0.140486 1 \n", + "9 1571050860 0.647081 0.662021 -0.139850 1 \n", + "10 1571137260 0.647205 0.662241 -0.140317 1 \n", + "11 1571223660 0.646743 0.661800 -0.140365 1 \n", + "12 1571310060 0.647322 0.662354 -0.140312 1 \n", + "13 1571396460 0.647434 0.662412 -0.140069 1 \n", + "14 1571482860 0.647621 0.662666 -0.140403 1 \n", + "15 1571569260 0.647111 0.662097 -0.140071 1 \n", + "16 1571655660 0.484892 0.498214 -0.114442 1 \n", + "17 1571742060 0.484841 0.498232 -0.114736 1 \n", + "18 1571828460 0.484752 0.498188 -0.114924 1 \n", + "19 1571914860 0.484564 0.497987 -0.114846 1 \n", + "20 1572001260 0.485001 0.498362 -0.114624 1 \n", + "21 1572087660 0.485013 0.498365 -0.114586 1 \n", + "22 1572177660 0.485254 0.498663 -0.114862 1 \n", + "23 1572264060 0.485157 0.498494 -0.114540 1 \n", + "24 1572350460 0.627895 0.637444 -0.109921 1 \n", + "25 1572436860 0.628139 0.637711 -0.110074 1 \n", + "26 1572523260 0.628308 0.637796 -0.109604 1 \n", + "27 1572609660 0.628020 0.637559 -0.109878 1 \n", + "28 1572696060 0.628019 0.637434 -0.109149 1 \n", + "29 1572782460 0.628283 0.637805 -0.109794 1 \n", + "30 1572868860 0.628152 0.637652 -0.109659 1 \n", + "31 1572955260 0.627966 0.637442 -0.109508 1 \n", + "32 1573041660 0.627735 0.637333 -0.110191 1 \n", + "33 1573128060 0.627870 0.637364 -0.109597 1 \n", + "34 1573214460 0.628681 0.638195 -0.109786 1 \n", + "35 1573300860 0.628127 0.637629 -0.109670 1 \n", + "36 1573387260 0.628122 0.637690 -0.110052 1 \n", + "37 1573473660 0.627780 0.637286 -0.109663 1 \n", + "38 1573560060 0.627846 0.637342 -0.109611 1 \n", + "39 1573646460 0.628536 0.638064 -0.109851 1 \n", + "40 1573732860 0.628397 0.637839 -0.109341 1 \n", + "41 1573819260 0.628307 0.637736 -0.109263 1 \n", + "42 1573905660 0.628142 0.637700 -0.109992 1 \n", + "43 1573992060 0.628540 0.638109 -0.110092 1 \n", + "44 1574078460 0.628118 0.637618 -0.109658 1 \n", + "45 1574164860 0.628429 0.637875 -0.109374 1 \n", + "46 1574251260 0.628441 0.637870 -0.109269 1 \n", + "47 1574337660 0.628601 0.637995 -0.109081 1 \n", + "48 1574424060 0.627963 0.637364 -0.109065 1 \n", + "\n", + " datetime \n", + "0 2019-10-05 13:01:00+02:00 \n", + "1 2019-10-06 13:01:00+02:00 \n", + "2 2019-10-07 13:01:00+02:00 \n", + "3 2019-10-08 13:01:00+02:00 \n", + "4 2019-10-09 13:01:00+02:00 \n", + "5 2019-10-10 13:01:00+02:00 \n", + "6 2019-10-11 13:01:00+02:00 \n", + "7 2019-10-12 13:01:00+02:00 \n", + "8 2019-10-13 13:01:00+02:00 \n", + "9 2019-10-14 13:01:00+02:00 \n", + "10 2019-10-15 13:01:00+02:00 \n", + "11 2019-10-16 13:01:00+02:00 \n", + "12 2019-10-17 13:01:00+02:00 \n", + "13 2019-10-18 13:01:00+02:00 \n", + "14 2019-10-19 13:01:00+02:00 \n", + "15 2019-10-20 13:01:00+02:00 \n", + "16 2019-10-21 13:01:00+02:00 \n", + "17 2019-10-22 13:01:00+02:00 \n", + "18 2019-10-23 13:01:00+02:00 \n", + "19 2019-10-24 13:01:00+02:00 \n", + "20 2019-10-25 13:01:00+02:00 \n", + "21 2019-10-26 13:01:00+02:00 \n", + "22 2019-10-27 13:01:00+01:00 \n", + "23 2019-10-28 13:01:00+01:00 \n", + "24 2019-10-29 13:01:00+01:00 \n", + "25 2019-10-30 13:01:00+01:00 \n", + "26 2019-10-31 13:01:00+01:00 \n", + "27 2019-11-01 13:01:00+01:00 \n", + "28 2019-11-02 13:01:00+01:00 \n", + "29 2019-11-03 13:01:00+01:00 \n", + "30 2019-11-04 13:01:00+01:00 \n", + "31 2019-11-05 13:01:00+01:00 \n", + "32 2019-11-06 13:01:00+01:00 \n", + "33 2019-11-07 13:01:00+01:00 \n", + "34 2019-11-08 13:01:00+01:00 \n", + "35 2019-11-09 13:01:00+01:00 \n", + "36 2019-11-10 13:01:00+01:00 \n", + "37 2019-11-11 13:01:00+01:00 \n", + "38 2019-11-12 13:01:00+01:00 \n", + "39 2019-11-13 13:01:00+01:00 \n", + "40 2019-11-14 13:01:00+01:00 \n", + "41 2019-11-15 13:01:00+01:00 \n", + "42 2019-11-16 13:01:00+01:00 \n", + "43 2019-11-17 13:01:00+01:00 \n", + "44 2019-11-18 13:01:00+01:00 \n", + "45 2019-11-19 13:01:00+01:00 \n", + "46 2019-11-20 13:01:00+01:00 \n", + "47 2019-11-21 13:01:00+01:00 \n", + "48 2019-11-22 13:01:00+01:00 " + ] }, "execution_count": 7, "metadata": {}, @@ -703,6 +1400,7 @@ }, { "cell_type": "markdown", + "id": "suited-circumstances", "metadata": { "pycharm": { "name": "#%% md\n" @@ -716,6 +1414,7 @@ { "cell_type": "code", "execution_count": 8, + "id": "compliant-viking", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:48.331542Z", @@ -732,7 +1431,6 @@ "text": [ "{\n", " \"timestamps\": [\n", - " 1570186860,\n", " 1570273260,\n", " 1570359660,\n", " 1570446060,\n", @@ -784,59 +1482,57 @@ " 1574424060\n", " ],\n", " \"rms\": [\n", - " 0.6470859724128016,\n", - " 0.6471233090087879,\n", - " 0.646619032857862,\n", - " 0.6468729279266723,\n", - " 0.6466425188145082,\n", - " 0.6467172058948399,\n", - " 0.647092780648743,\n", - " 0.6474220671843836,\n", - " 0.6468903895762841,\n", - " 0.647693834249824,\n", - " 0.6470808565115449,\n", - " 0.6472050737356421,\n", - " 0.6467427853732736,\n", - " 0.6473221821058892,\n", - " 0.6474336931665059,\n", - " 0.6476212217700601,\n", - " 0.6471112840086092,\n", - " 0.4848921153840439,\n", - " 0.4848409433332954,\n", - " 0.48475167234412847,\n", - " 0.4845635972925419,\n", - " 0.48500110983328193,\n", - " 0.4850127179498178,\n", - " 0.4852543654465155,\n", - " 0.48515672855335834,\n", - " 0.6278945984238401,\n", - " 0.6281390462008573,\n", - " 0.6283081249535378,\n", - " 0.6280197922186224,\n", - " 0.6280192424935522,\n", - " 0.628283207129633,\n", - " 0.6281522276066049,\n", - " 0.6279655163885232,\n", - " 0.6277353544965057,\n", - " 0.6278700835347184,\n", - " 0.6286806371261024,\n", - " 0.6281269536708373,\n", - " 0.6281217503270783,\n", - " 0.6277798778644154,\n", - " 0.6278461900382366,\n", - " 0.6285363191287583,\n", - " 0.6283971912344205,\n", - " 0.628306637724784,\n", - " 0.6281424042187251,\n", - " 0.6285404729543972,\n", - " 0.628117681739837,\n", + " 0.6471233090087871,\n", + " 0.6466190328578604,\n", + " 0.6468729279266724,\n", + " 0.646642518814507,\n", + " 0.646717205894838,\n", + " 0.6470927806487413,\n", + " 0.6474220671843843,\n", + " 0.6468903895762858,\n", + " 0.6476938342498252,\n", + " 0.6470808565115466,\n", + " 0.6472050737356406,\n", + " 0.6467427853732756,\n", + " 0.6473221821058875,\n", + " 0.6474336931665048,\n", + " 0.6476212217700588,\n", + " 0.6471112840086102,\n", + " 0.4848921153840481,\n", + " 0.48484094333329586,\n", + " 0.4847516723441296,\n", + " 0.4845635972925438,\n", + " 0.4850011098332846,\n", + " 0.48501271794981815,\n", + " 0.48525436544651607,\n", + " 0.4851567285533576,\n", + " 0.6278945984238412,\n", + " 0.6281390462008642,\n", + " 0.6283081249535385,\n", + " 0.6280197922186243,\n", + " 0.6280192424935491,\n", + " 0.6282832071296321,\n", + " 0.6281522276066059,\n", + " 0.627965516388511,\n", + " 0.6277353544965071,\n", + " 0.6278700835347193,\n", + " 0.6286806371261001,\n", + " 0.6281269536708333,\n", + " 0.6281217503270786,\n", + " 0.6277798778644176,\n", + " 0.6278461900382379,\n", + " 0.6285363191287605,\n", + " 0.6283971912344217,\n", + " 0.6283066377247811,\n", + " 0.628142404218728,\n", + " 0.6285404729543963,\n", + " 0.628117681739836,\n", " 0.6284285531715674,\n", - " 0.6284407826182109,\n", - " 0.6286006002142908,\n", - " 0.6279629684369986\n", + " 0.628440782618211,\n", + " 0.6286006002142941,\n", + " 0.6279629684369982\n", " ],\n", " \"rms_dc\": [\n", - " 0.6621077357581335,\n", " 0.6621829958188445,\n", " 0.6616518915968526,\n", " 0.6619229399260815,\n", @@ -888,7 +1584,6 @@ " 0.6373637582315667\n", " ],\n", " \"dc\": [\n", - " -0.1402369354248047,\n", " -0.14041988067626954,\n", " -0.14023926696777345,\n", " -0.14034740295410156,\n", @@ -988,7 +1683,6 @@ " 1,\n", " 1,\n", " 1,\n", - " 1,\n", " 1\n", " ]\n", "}\n" @@ -1001,6 +1695,7 @@ }, { "cell_type": "markdown", + "id": "exotic-conspiracy", "metadata": {}, "source": [ "## Black Sheep Analysis example\n", @@ -1011,6 +1706,7 @@ { "cell_type": "code", "execution_count": 9, + "id": "supposed-robinson", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:51.412234Z", @@ -1025,16 +1721,1584 @@ "name": "stdout", "output_type": "stream", "text": [ - "Waiting for {'request_id': '8f45d56950eea95e8382b57d1aec5746', 'request_status': 'queued'}\n", + "Waiting for {'request_id': 'e0b73e97cf46102ea692af98ccb011a0', 'request_status': 'queued'}\n", "{\n", " \"status\": \"successful\",\n", - " \"request_id\": \"8f45d56950eea95e8382b57d1aec5746\",\n", + " \"request_id\": \"e0b73e97cf46102ea692af98ccb011a0\",\n", " \"feature\": \"BlackSheep\",\n", " \"results\": {\n", " \"atypical_assets\": [\n", " {\n", " \"timestamps\": [\n", - " 1570186860,\n", + " 1570186860,\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060\n", + " ],\n", + " \"labels\": [\n", + " 0,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 7,\n", + " 7,\n", + " 7,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 7,\n", + " 0,\n", + " 4,\n", + " 4,\n", + " 4,\n", + " 4,\n", + " 4,\n", + " 4,\n", + " 4,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 10,\n", + " 8,\n", + " 10,\n", + " 10,\n", + " 3,\n", + " 3,\n", + " 8,\n", + " 6,\n", + " 3,\n", + " 3,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8\n", + " ],\n", + " \"atypical\": [\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false\n", + " ],\n", + " \"source_id\": \"u0004\"\n", + " },\n", + " {\n", + " \"timestamps\": [\n", + " 1570186860,\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060\n", + " ],\n", + " \"labels\": [\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 3,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 7,\n", + " 9,\n", + " 7,\n", + " 9,\n", + " 0,\n", + " 7,\n", + " 7,\n", + " 7,\n", + " 7,\n", + " 0,\n", + " 0,\n", + " 7,\n", + " 0,\n", + " 9\n", + " ],\n", + " \"atypical\": [\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " true,\n", + " false,\n", + " true,\n", + " false\n", + " ],\n", + " \"source_id\": \"u0002\"\n", + " },\n", + " {\n", + " \"timestamps\": [\n", + " 1570186860,\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060\n", + " ],\n", + " \"labels\": [\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 8,\n", + " 10,\n", + " 10,\n", + " 8,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 3,\n", + " 10,\n", + " 8,\n", + " 8,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 1,\n", + " 11,\n", + " 11,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 11,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 11,\n", + " 11,\n", + " 11,\n", + " 1\n", + " ],\n", + " \"atypical\": [\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false\n", + " ],\n", + " \"source_id\": \"u0003\"\n", + " },\n", + " {\n", + " \"timestamps\": [\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060\n", + " ],\n", + " \"labels\": [\n", + " 9,\n", + " 0,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 0,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 9,\n", + " 7,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 0,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 10,\n", + " 3,\n", + " 6,\n", + " 10,\n", + " 10,\n", + " 3,\n", + " 8,\n", + " 3,\n", + " 6,\n", + " 3,\n", + " 3,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6\n", + " ],\n", + " \"atypical\": [\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false\n", + " ],\n", + " \"source_id\": \"u0001\"\n", + " },\n", + " {\n", + " \"timestamps\": [\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060\n", + " ],\n", + " \"labels\": [\n", + " 9,\n", + " 0,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 0,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 9,\n", + " 7,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 0,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 10,\n", + " 3,\n", + " 6,\n", + " 10,\n", + " 10,\n", + " 3,\n", + " 8,\n", + " 3,\n", + " 6,\n", + " 3,\n", + " 3,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6\n", + " ],\n", + " \"atypical\": [\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false\n", + " ],\n", + " \"source_id\": \"u0001\"\n", + " },\n", + " {\n", + " \"timestamps\": [\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060\n", + " ],\n", + " \"labels\": [\n", + " 9,\n", + " 0,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 0,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 9,\n", + " 7,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 0,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 10,\n", + " 3,\n", + " 6,\n", + " 10,\n", + " 10,\n", + " 3,\n", + " 8,\n", + " 3,\n", + " 6,\n", + " 3,\n", + " 3,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6\n", + " ],\n", + " \"atypical\": [\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false\n", + " ],\n", + " \"source_id\": \"u0001\"\n", + " },\n", + " {\n", + " \"timestamps\": [\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060\n", + " ],\n", + " \"labels\": [\n", + " 9,\n", + " 0,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 0,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 9,\n", + " 7,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 0,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 10,\n", + " 3,\n", + " 6,\n", + " 10,\n", + " 10,\n", + " 3,\n", + " 8,\n", + " 3,\n", + " 6,\n", + " 3,\n", + " 3,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6\n", + " ],\n", + " \"atypical\": [\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false\n", + " ],\n", + " \"source_id\": \"u0001\"\n", + " },\n", + " {\n", + " \"timestamps\": [\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060\n", + " ],\n", + " \"labels\": [\n", + " 9,\n", + " 0,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 0,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 9,\n", + " 7,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 0,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 10,\n", + " 3,\n", + " 6,\n", + " 10,\n", + " 10,\n", + " 3,\n", + " 8,\n", + " 3,\n", + " 6,\n", + " 3,\n", + " 3,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6\n", + " ],\n", + " \"atypical\": [\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false\n", + " ],\n", + " \"source_id\": \"u0001\"\n", + " },\n", + " {\n", + " \"timestamps\": [\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060\n", + " ],\n", + " \"labels\": [\n", + " 9,\n", + " 0,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 0,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 9,\n", + " 7,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 0,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 10,\n", + " 3,\n", + " 6,\n", + " 10,\n", + " 10,\n", + " 3,\n", + " 8,\n", + " 3,\n", + " 6,\n", + " 3,\n", + " 3,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6\n", + " ],\n", + " \"atypical\": [\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false\n", + " ],\n", + " \"source_id\": \"u0001\"\n", + " },\n", + " {\n", + " \"timestamps\": [\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060\n", + " ],\n", + " \"labels\": [\n", + " 9,\n", + " 0,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 0,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 9,\n", + " 7,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 0,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 10,\n", + " 3,\n", + " 6,\n", + " 10,\n", + " 10,\n", + " 3,\n", + " 8,\n", + " 3,\n", + " 6,\n", + " 3,\n", + " 3,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6\n", + " ],\n", + " \"atypical\": [\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false\n", + " ],\n", + " \"source_id\": \"u0001\"\n", + " },\n", + " {\n", + " \"timestamps\": [\n", " 1570273260,\n", " 1570359660,\n", " 1570446060,\n", @@ -1086,72 +3350,62 @@ " 1574424060\n", " ],\n", " \"labels\": [\n", + " 9,\n", " 0,\n", + " 7,\n", + " 7,\n", + " 9,\n", " 0,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 9,\n", + " 7,\n", + " 9,\n", + " 7,\n", + " 7,\n", " 0,\n", - " 0,\n", - " 0,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", + " 11,\n", " 1,\n", + " 11,\n", " 1,\n", + " 11,\n", " 1,\n", " 1,\n", " 1,\n", - " 1\n", + " 10,\n", + " 3,\n", + " 6,\n", + " 10,\n", + " 10,\n", + " 3,\n", + " 8,\n", + " 3,\n", + " 6,\n", + " 3,\n", + " 3,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6\n", " ],\n", " \"atypical\": [\n", " false,\n", + " true,\n", " false,\n", " false,\n", " false,\n", - " false,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", " true,\n", " false,\n", " false,\n", @@ -1162,6 +3416,14 @@ " false,\n", " false,\n", " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", " false,\n", " false,\n", " false,\n", @@ -1189,11 +3451,10 @@ " false,\n", " false\n", " ],\n", - " \"source_id\": \"u0003\"\n", + " \"source_id\": \"u0001\"\n", " },\n", " {\n", " \"timestamps\": [\n", - " 1570186860,\n", " 1570273260,\n", " 1570359660,\n", " 1570446060,\n", @@ -1245,63 +3506,219 @@ " 1574424060\n", " ],\n", " \"labels\": [\n", + " 9,\n", " 0,\n", + " 7,\n", + " 7,\n", + " 9,\n", " 0,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 9,\n", + " 7,\n", + " 9,\n", + " 7,\n", + " 7,\n", " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 0,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 3,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 10,\n", " 3,\n", + " 6,\n", + " 10,\n", + " 10,\n", " 3,\n", + " 8,\n", " 3,\n", + " 6,\n", " 3,\n", " 3,\n", + " 8,\n", + " 8,\n", " 3,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6\n", + " ],\n", + " \"atypical\": [\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false\n", + " ],\n", + " \"source_id\": \"u0001\"\n", + " },\n", + " {\n", + " \"timestamps\": [\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060\n", + " ],\n", + " \"labels\": [\n", + " 9,\n", + " 0,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 0,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 9,\n", + " 9,\n", + " 7,\n", + " 9,\n", + " 7,\n", + " 7,\n", + " 0,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 11,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 10,\n", " 3,\n", + " 6,\n", + " 10,\n", + " 10,\n", " 3,\n", + " 8,\n", " 3,\n", + " 6,\n", " 3,\n", " 3,\n", + " 8,\n", + " 8,\n", " 3,\n", - " 3\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 10,\n", + " 8,\n", + " 6\n", " ],\n", " \"atypical\": [\n", " false,\n", + " true,\n", " false,\n", " false,\n", " false,\n", - " false,\n", + " true,\n", " false,\n", " false,\n", " false,\n", @@ -1312,9 +3729,6 @@ " false,\n", " false,\n", " true,\n", - " true,\n", - " true,\n", - " true,\n", " false,\n", " false,\n", " false,\n", @@ -1329,10 +3743,11 @@ " false,\n", " false,\n", " false,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", + " false,\n", " false,\n", " false,\n", " false,\n", @@ -1348,7 +3763,7 @@ " false,\n", " false\n", " ],\n", - " \"source_id\": \"u0002\"\n", + " \"source_id\": \"u0001\"\n", " }\n", " ]\n", " },\n", @@ -1373,7 +3788,7 @@ " ],\n", " \"black_sheep\": true,\n", " \"data-commit\": \"\",\n", - " \"n_trials\": 10,\n", + " \"n_trials\": 12,\n", " \"force_create_model\": true,\n", " \"load_model\": \"\",\n", " \"save\": false,\n", @@ -1388,7 +3803,6 @@ " },\n", " \"timestamps\": [\n", " [\n", - " 1570186860,\n", " 1570273260,\n", " 1570359660,\n", " 1570446060,\n", @@ -1440,7 +3854,6 @@ " 1574424060\n", " ],\n", " [\n", - " 1570186860,\n", " 1570273260,\n", " 1570359660,\n", " 1570446060,\n", @@ -1492,7 +3905,6 @@ " 1574424060\n", " ],\n", " [\n", - " 1570186860,\n", " 1570273260,\n", " 1570359660,\n", " 1570446060,\n", @@ -1544,7 +3956,6 @@ " 1574424060\n", " ],\n", " [\n", - " 1570186860,\n", " 1570273260,\n", " 1570359660,\n", " 1570446060,\n", @@ -1596,7 +4007,6 @@ " 1574424060\n", " ],\n", " [\n", - " 1570186860,\n", " 1570273260,\n", " 1570359660,\n", " 1570446060,\n", @@ -1648,7 +4058,6 @@ " 1574424060\n", " ],\n", " [\n", - " 1570186860,\n", " 1570273260,\n", " 1570359660,\n", " 1570446060,\n", @@ -1700,7 +4109,6 @@ " 1574424060\n", " ],\n", " [\n", - " 1570186860,\n", " 1570273260,\n", " 1570359660,\n", " 1570446060,\n", @@ -1752,7 +4160,6 @@ " 1574424060\n", " ],\n", " [\n", - " 1570186860,\n", " 1570273260,\n", " 1570359660,\n", " 1570446060,\n", @@ -1804,7 +4211,6 @@ " 1574424060\n", " ],\n", " [\n", - " 1570186860,\n", " 1570273260,\n", " 1570359660,\n", " 1570446060,\n", @@ -2012,7 +4418,6 @@ " 1574424060\n", " ],\n", " [\n", - " 1570186860,\n", " 1570273260,\n", " 1570359660,\n", " 1570446060,\n", @@ -2066,7 +4471,10 @@ " ],\n", " \"algo_params\": {\n", " \"look_back\": 1,\n", - " \"number_of_modes\": 4,\n", + " \"number_of_modes\": [\n", + " 2,\n", + " 12\n", + " ],\n", " \"model_sparsity_factor\": 0.11,\n", " \"smoothening_factor\": 1,\n", " \"max_iterations\": 20,\n", @@ -2094,6 +4502,7 @@ }, { "cell_type": "markdown", + "id": "cooked-aaron", "metadata": { "pycharm": { "name": "#%% md\n" @@ -2107,6 +4516,7 @@ { "cell_type": "code", "execution_count": 10, + "id": "alpha-louis", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:53.012148Z", @@ -2119,31 +4529,30 @@ "output_type": "stream", "text": [ "=== BlackSheep ===\n", - "request_id 8f45d56950eea95e8382b57d1aec5746\n", + "request_id e0b73e97cf46102ea692af98ccb011a0\n", "\n", "+----+----------+------------+\n", "| | source | atypical |\n", "|----+----------+------------|\n", - "| 0 | u0001 | False |\n", - "| 1 | u0001 | False |\n", - "| 2 | u0001 | False |\n", - "| 3 | u0001 | False |\n", - "| 4 | u0001 | False |\n", - "| 5 | u0001 | False |\n", - "| 6 | u0001 | False |\n", - "| 7 | u0001 | False |\n", - "| 8 | u0001 | False |\n", - "| 9 | u0004 | False |\n", + "| 0 | u0001 | True |\n", + "| 1 | u0001 | True |\n", + "| 2 | u0001 | True |\n", + "| 3 | u0001 | True |\n", + "| 4 | u0001 | True |\n", + "| 5 | u0001 | True |\n", + "| 6 | u0001 | True |\n", + "| 7 | u0001 | True |\n", + "| 8 | u0001 | True |\n", + "| 9 | u0004 | True |\n", "| 10 | u0002 | True |\n", "| 11 | u0003 | True |\n", - "| 12 | u0001 | False |\n", + "| 12 | u0001 | True |\n", "+----+----------+------------+\n", "\n", "+------------+-----+\n", "| atypical | N |\n", "|------------+-----|\n", - "| False | 11 |\n", - "| True | 2 |\n", + "| True | 13 |\n", "+------------+-----+\n" ] }, @@ -2151,7 +4560,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\mvg\\analysis_classes.py:131: SettingWithCopyWarning: \n", + "/home/tuix/.local/lib/python3.8/site-packages/mvg/features/analysis.py:111: SettingWithCopyWarning: \n", "A value is trying to be set on a copy of a slice from a DataFrame.\n", "Try using .loc[row_indexer,col_indexer] = value instead\n", "\n", @@ -2161,8 +4570,10 @@ }, { "data": { - "text/plain": "
", - "image/png": "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ckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREckNBTUREcqNdpRPQGjz88SuVTkKzMaLvsEonQUpA+1GaKz2piYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbiioiYhIbjR5UDOz3mb2iJm9m/72yow71szeM7O3zWxEZvjqZvZaGneemVkaflAa/oqZ/dvMBjd1+kVEpOUox5PaMcCj7r488Gj6TgpIuwBDgJHARWbWNs1zMXAAsHz6jEzDb3T3ld19GHA68NcypF9ERFqIkgU1MxtoZq9nvv/GzE4ERgHXpsHXAtum/0cBN7v7LHf/AHgPWMvMlgC6u/sz7u7AdYV53H1aZpVdAC9V+kVEpOVrV4Z1LObukwHcfbKZLZqG9wOezUw3MQ2bnf4vHg6Amf0KOBLoAGzShOkWEZEWppINRayKYV7D8PjH/UJ3Xxb4HfDHKhdsdoCZvWhmL85mVkkSKyIizV8pg9qcouV1Sn8/TUWKpL+fpeETgQGZ6fsDH6fh/asYXuxm5hdlLsDdL3P3Ndx9jfZ0rO92iIhIC1XKoPYpsKiZLWxmHYGt0vB7gNHp/9HA3Znhu5hZRzNbmmgQ8nwqqpxuZuukVo97FeYxs+Uz69sS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\n" + "image/png": "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\n", + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" @@ -2171,7 +4582,9 @@ }, { "data": { - "text/plain": "''" + "text/plain": [ + "''" + ] }, "execution_count": 10, "metadata": {}, @@ -2188,6 +4601,7 @@ }, { "cell_type": "markdown", + "id": "filled-aberdeen", "metadata": {}, "source": [ "### Serializing\n", @@ -2197,6 +4611,7 @@ { "cell_type": "code", "execution_count": 11, + "id": "banner-mistress", "metadata": { "pycharm": { "name": "#%%\n" @@ -2207,12 +4622,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "Saving BlackSheep object to 8f45d56950eea95e8382b57d1aec5746.pkl\n" + "Saving BlackSheep object to e0b73e97cf46102ea692af98ccb011a0.pkl\n" ] }, { "data": { - "text/plain": "'8f45d56950eea95e8382b57d1aec5746.pkl'" + "text/plain": [ + "'e0b73e97cf46102ea692af98ccb011a0.pkl'" + ] }, "execution_count": 11, "metadata": {}, @@ -2242,7 +4659,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.6" + "version": "3.8.10" }, "toc": { "base_numbering": 1, @@ -2289,4 +4706,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/docs/source/content/examples/analysis_visual.ipynb b/docs/source/content/examples/analysis_visual.ipynb index 363675c2..91224b33 100644 --- a/docs/source/content/examples/analysis_visual.ipynb +++ b/docs/source/content/examples/analysis_visual.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "voluntary-maria", "metadata": {}, "source": [ "# Analysis and Results Visualization\n", @@ -22,6 +23,7 @@ { "cell_type": "code", "execution_count": 1, + "id": "pharmaceutical-raising", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:28.735704Z", @@ -41,6 +43,7 @@ }, { "cell_type": "markdown", + "id": "impossible-chemical", "metadata": { "ExecuteTime": { "end_time": "2021-03-04T10:59:02.619313Z", @@ -56,6 +59,7 @@ { "cell_type": "code", "execution_count": 2, + "id": "voluntary-asbestos", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:29.472021Z", @@ -70,6 +74,7 @@ }, { "cell_type": "markdown", + "id": "skilled-macedonia", "metadata": {}, "source": [ "Instantiate a session object with MVG library.\n", @@ -79,6 +84,7 @@ { "cell_type": "code", "execution_count": 3, + "id": "early-citizen", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:30.395676Z", @@ -93,6 +99,7 @@ }, { "cell_type": "markdown", + "id": "informative-plain", "metadata": { "pycharm": { "name": "#%% md\n" @@ -108,7 +115,8 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 14, + "id": "incorrect-emphasis", "metadata": { "pycharm": { "name": "#%%\n" @@ -120,18 +128,18 @@ "output_type": "stream", "text": [ "Retrieved sources\n", - "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform'}}\n", - "Source info retrieved for one source: {'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform'}}\n", - "{'source_id': 'u0002', 'meta': {'assetId': 'assetB', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform'}}\n", - "Source info retrieved for one source: {'source_id': 'u0002', 'meta': {'assetId': 'assetB', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform'}}\n", - "{'source_id': 'u0003', 'meta': {'assetId': 'assetC', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform'}}\n", - "Source info retrieved for one source: {'source_id': 'u0003', 'meta': {'assetId': 'assetC', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform'}}\n", - "{'source_id': 'u0004', 'meta': {'assetId': 'assetD', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform'}}\n", - "Source info retrieved for one source: {'source_id': 'u0004', 'meta': {'assetId': 'assetD', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform'}}\n", - "{'source_id': 'u0005', 'meta': {'assetId': 'assetE', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform'}}\n", - "Source info retrieved for one source: {'source_id': 'u0005', 'meta': {'assetId': 'assetE', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform'}}\n", - "{'source_id': 'u0006', 'meta': {'assetId': 'assetF', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform'}}\n", - "Source info retrieved for one source: {'source_id': 'u0006', 'meta': {'assetId': 'assetF', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform'}}\n" + "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "Source info retrieved for one source: {'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "{'source_id': 'u0002', 'meta': {'assetId': 'assetB', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "Source info retrieved for one source: {'source_id': 'u0002', 'meta': {'assetId': 'assetB', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "{'source_id': 'u0003', 'meta': {'assetId': 'assetC', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "Source info retrieved for one source: {'source_id': 'u0003', 'meta': {'assetId': 'assetC', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "{'source_id': 'u0004', 'meta': {'assetId': 'assetD', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "Source info retrieved for one source: {'source_id': 'u0004', 'meta': {'assetId': 'assetD', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "{'source_id': 'u0005', 'meta': {'assetId': 'assetE', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "Source info retrieved for one source: {'source_id': 'u0005', 'meta': {'assetId': 'assetE', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "{'source_id': 'u0006', 'meta': {'assetId': 'assetF', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "Source info retrieved for one source: {'source_id': 'u0006', 'meta': {'assetId': 'assetF', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n" ] } ], @@ -147,6 +155,7 @@ }, { "cell_type": "markdown", + "id": "asian-poland", "metadata": {}, "source": [ "During our example, we will utilize sources, \"u0001\" and \"u0005\", which were previously uploaded to our database." @@ -154,7 +163,8 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 15, + "id": "plain-patio", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:32.804304Z", @@ -167,9 +177,11 @@ "outputs": [ { "data": { - "text/plain": "['u0001', 'u0005']" + "text/plain": [ + "['u0001', 'u0005']" + ] }, - "execution_count": 5, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -181,6 +193,7 @@ }, { "cell_type": "markdown", + "id": "accompanied-saturday", "metadata": { "pycharm": { "name": "#%% md\n" @@ -193,7 +206,8 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 16, + "id": "spatial-afghanistan", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:36.152571Z", @@ -206,9 +220,11 @@ "outputs": [ { "data": { - "text/plain": "{'RMS': '1.0.0', 'ModeId': '0.1.1', 'BlackSheep': '1.0.0'}" + "text/plain": [ + "{'RMS': '1.0.0', 'ModeId': '0.1.1', 'BlackSheep': '1.0.0', 'KPIDemo': '1.0.0'}" + ] }, - "execution_count": 6, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -220,6 +236,7 @@ }, { "cell_type": "markdown", + "id": "collaborative-fruit", "metadata": { "pycharm": { "name": "#%% md\n" @@ -239,6 +256,7 @@ { "cell_type": "code", "execution_count": 7, + "id": "current-blind", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:37.584243Z", @@ -251,7 +269,9 @@ "outputs": [ { "data": { - "text/plain": "{'request_id': 'bd831c060faf3d6ca5332be3f17c5c10', 'request_status': 'queued'}" + "text/plain": [ + "{'request_id': '99c500893a6184b4f3dcd4a7a3b1565b', 'request_status': 'queued'}" + ] }, "execution_count": 7, "metadata": {}, @@ -266,6 +286,7 @@ }, { "cell_type": "markdown", + "id": "endless-grounds", "metadata": { "pycharm": { "name": "#%% md\n" @@ -278,6 +299,7 @@ { "cell_type": "code", "execution_count": 8, + "id": "comparative-conversation", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:38.637859Z", @@ -290,7 +312,9 @@ "outputs": [ { "data": { - "text/plain": "{'request_id': 'c1a1dc59c94e9a6a7f810cf802cb9d78', 'request_status': 'queued'}" + "text/plain": [ + "{'request_id': 'adb33a07b97ac7c1b2ab59ae3af16e5d', 'request_status': 'queued'}" + ] }, "execution_count": 8, "metadata": {}, @@ -304,6 +328,7 @@ }, { "cell_type": "markdown", + "id": "trying-north", "metadata": { "pycharm": { "name": "#%% md\n" @@ -323,6 +348,7 @@ { "cell_type": "code", "execution_count": 9, + "id": "regular-buyer", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:43.435603Z", @@ -352,6 +378,7 @@ }, { "cell_type": "markdown", + "id": "circular-active", "metadata": { "pycharm": { "name": "#%% md\n" @@ -363,7 +390,8 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 17, + "id": "charged-retreat", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:44.400481Z", @@ -376,9 +404,11 @@ "outputs": [ { "data": { - "text/plain": "{'request_id': 'e069ffd9e9178443af405f0c2f27894f', 'request_status': 'queued'}" + "text/plain": [ + "{'request_id': 'caebeacdee1874386c48da874896ba1e', 'request_status': 'queued'}" + ] }, - "execution_count": 10, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -391,7 +421,8 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 18, + "id": "cultural-bunch", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:44.815607Z", @@ -404,9 +435,11 @@ "outputs": [ { "data": { - "text/plain": "{'request_id': '849bfc8a74289625b331f3ea0f882ef3', 'request_status': 'queued'}" + "text/plain": [ + "{'request_id': '938331c0426f024997a353e85e039a25', 'request_status': 'queued'}" + ] }, - "execution_count": 11, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -419,6 +452,7 @@ }, { "cell_type": "markdown", + "id": "little-camera", "metadata": { "pycharm": { "name": "#%% md\n" @@ -430,7 +464,8 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 19, + "id": "built-daily", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:48.331542Z", @@ -460,6 +495,7 @@ }, { "cell_type": "markdown", + "id": "numerous-grade", "metadata": {}, "source": [ "## Visualization\n", @@ -471,7 +507,8 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 20, + "id": "separate-failure", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:51.412234Z", @@ -486,10 +523,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "The RMS analysis of u0001 has request_id ['5cf800607f127ebbca7b90c3b51c506a', 'de9562802a3248a9723ce4a8950c9a00', '2398c778dfe8625264fcfe952ead21b7', '78077ee974f2b5d17290c982d22b915a', '1a12f0e88c388eed298245bf122d7565', '2f8ef4370ca6f16ee30a71cf55645b02', 'bd831c060faf3d6ca5332be3f17c5c10'].\n", - "The RMS analysis of u0005 has request_id ['9b0673ec9ee86fd9069cd33b4f917a4a', '2a0a12ff777aaefe7401fdc8b93e288d', 'e069ffd9e9178443af405f0c2f27894f'].\n", - "The ModeId analysis of u0001 has request_id ['e176f4928372a627e743222eb2de0690', '535be882dd271d03c26bef8257ae03ec', '57b816d91decda67355da0ad160f0016', '25bdf3a393c5c166ae230ef98911606c', '9cced936d101c436eb32e7f8dc379796', 'd34f7e8f0a5b01a8471f1a5df23e1923', 'ba1202a3c210c9e388a980913cda3640', 'a089f212b2eda4eb79fc569b00c74659', 'e0ee3ad6935947f70a9d455f37da4c48', '7b3aae14f266697da1d140410627a6b6', '2c2bfebdbda7f75000f3c6e5128d3efc', 'd132fb68a652104c678acdd6fe514de5', '7b688623d9e6cf5ea63aaf2ce0318962', 'c1a1dc59c94e9a6a7f810cf802cb9d78'].\n", - "The ModeId analysis of u0005 has request_id ['ff5392230521bd4bdcc5c36491eeefe5', '99934e2c5fd0858a90836ae3ec02cd52', '51d92e031290b7e28dd094faf01ea6ea', '4a76979f8d731606eb2cf03e9a6fd221', '849bfc8a74289625b331f3ea0f882ef3'].\n" + "The RMS analysis of u0001 has request_id ['bc4ea1194b4929764a08e97c60360cb6', '99c500893a6184b4f3dcd4a7a3b1565b'].\n", + "The RMS analysis of u0005 has request_id ['caebeacdee1874386c48da874896ba1e'].\n", + "The ModeId analysis of u0001 has request_id ['fae66b2396b7dde3039a2f58e287686a', 'adb33a07b97ac7c1b2ab59ae3af16e5d'].\n", + "The ModeId analysis of u0005 has request_id ['938331c0426f024997a353e85e039a25'].\n" ] } ], @@ -504,6 +541,7 @@ }, { "cell_type": "markdown", + "id": "secure-amendment", "metadata": { "pycharm": { "name": "#%% md\n" @@ -519,7 +557,8 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 21, + "id": "distributed-poland", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:53.012148Z", @@ -529,9 +568,11 @@ "outputs": [ { "data": { - "text/plain": "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" + "text/plain": [ + "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" + ] }, - "execution_count": 14, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -547,6 +588,7 @@ }, { "cell_type": "markdown", + "id": "other-imperial", "metadata": {}, "source": [ "Each dictionary contains seven key elements.\n", @@ -562,6 +604,7 @@ }, { "cell_type": "markdown", + "id": "mobile-settlement", "metadata": { "pycharm": { "name": "#%% md\n" @@ -585,7 +628,8 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 28, + "id": "eight-infection", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:55.411186Z", @@ -598,22 +642,107 @@ "outputs": [ { "data": { - "text/plain": " timestamps rms rms_dc dc utilization Date\n0 1570186860 0.647086 0.662108 -0.140237 1 2019-10-04 11:01:00\n1 1570273260 0.647123 0.662183 -0.140420 1 2019-10-05 11:01:00\n2 1570359660 0.646619 0.661652 -0.140239 1 2019-10-06 11:01:00\n3 1570446060 0.646873 0.661923 -0.140347 1 2019-10-07 11:01:00\n4 1570532460 0.646643 0.661714 -0.140423 1 2019-10-08 11:01:00", - "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
timestampsrmsrms_dcdcutilizationDate
015701868600.6470860.662108-0.14023712019-10-04 11:01:00
115702732600.6471230.662183-0.14042012019-10-05 11:01:00
215703596600.6466190.661652-0.14023912019-10-06 11:01:00
315704460600.6468730.661923-0.14034712019-10-07 11:01:00
415705324600.6466430.661714-0.14042312019-10-08 11:01:00
\n
" + "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", + "
rmsrms_dcdcutilizationtimestampsDate
00.6471230.662183-0.140420115702732602019-10-05 11:01:00
10.6466190.661652-0.140239115703596602019-10-06 11:01:00
20.6468730.661923-0.140347115704460602019-10-07 11:01:00
30.6466430.661714-0.140423115705324602019-10-08 11:01:00
40.6467170.661709-0.140055115706188602019-10-09 11:01:00
\n", + "
" + ], + "text/plain": [ + " rms rms_dc dc utilization timestamps Date\n", + "0 0.647123 0.662183 -0.140420 1 1570273260 2019-10-05 11:01:00\n", + "1 0.646619 0.661652 -0.140239 1 1570359660 2019-10-06 11:01:00\n", + "2 0.646873 0.661923 -0.140347 1 1570446060 2019-10-07 11:01:00\n", + "3 0.646643 0.661714 -0.140423 1 1570532460 2019-10-08 11:01:00\n", + "4 0.646717 0.661709 -0.140055 1 1570618860 2019-10-09 11:01:00" + ] }, - "execution_count": 15, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_rms1 = pd.DataFrame(rms_output1[\"results\"])\n", + "df_rms1 = pd.DataFrame(rms_output1[\"results\"][\"acc\"])\n", + "df_rms1[\"timestamps\"] = rms_output1[\"results\"]['timestamps']\n", "df_rms1['Date'] = pd.to_datetime(df_rms1['timestamps'], unit=\"s\")\n", "df_rms1.head()" ] }, { "cell_type": "markdown", + "id": "assumed-directory", "metadata": { "pycharm": { "name": "#%% md\n" @@ -637,7 +766,8 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 30, + "id": "champion-america", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:57.673176Z", @@ -648,10 +778,87 @@ "outputs": [ { "data": { - "text/plain": " timestamps labels uncertain mode_probability Date\n0 1570186860 0 False 0.001262 2019-10-04 11:01:00\n1 1570273260 0 False 0.001833 2019-10-05 11:01:00\n2 1570359660 0 False 0.000154 2019-10-06 11:01:00\n3 1570446060 0 False 0.000546 2019-10-07 11:01:00\n4 1570532460 0 False 0.000025 2019-10-08 11:01:00", - "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
timestampslabelsuncertainmode_probabilityDate
015701868600False0.0012622019-10-04 11:01:00
115702732600False0.0018332019-10-05 11:01:00
215703596600False0.0001542019-10-06 11:01:00
315704460600False0.0005462019-10-07 11:01:00
415705324600False0.0000252019-10-08 11:01:00
\n
" + "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", + "
timestampslabelsuncertainmode_probabilityDate
015702732600False0.0025282019-10-05 11:01:00
115703596600False0.0001942019-10-06 11:01:00
215704460600False0.0008252019-10-07 11:01:00
315705324600False0.0000252019-10-08 11:01:00
415706188600False0.0007042019-10-09 11:01:00
\n", + "
" + ], + "text/plain": [ + " timestamps labels uncertain mode_probability Date\n", + "0 1570273260 0 False 0.002528 2019-10-05 11:01:00\n", + "1 1570359660 0 False 0.000194 2019-10-06 11:01:00\n", + "2 1570446060 0 False 0.000825 2019-10-07 11:01:00\n", + "3 1570532460 0 False 0.000025 2019-10-08 11:01:00\n", + "4 1570618860 0 False 0.000704 2019-10-09 11:01:00" + ] }, - "execution_count": 16, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -668,14 +875,79 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 31, + "id": "standing-butter", + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { - "text/plain": " modes emerging_time max_prob_time max_probability emerging_Date\n0 0 1570186860 1571137260 0.007276 2019-10-04 11:01:00\n1 1 1571655660 1571655660 0.023025 2019-10-21 11:01:00\n2 2 1572350460 1574424060 0.010912 2019-10-29 12:01:00", - "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
modesemerging_timemax_prob_timemax_probabilityemerging_Date
00157018686015711372600.0072762019-10-04 11:01:00
11157165566015716556600.0230252019-10-21 11:01:00
22157235046015744240600.0109122019-10-29 12:01:00
\n
" + "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", + "
modesemerging_timemax_prob_timemax_probabilityemerging_Date
00157027326015711372600.0099542019-10-05 11:01:00
11157165566015716556600.0230252019-10-21 11:01:00
22157235046015744240600.0109122019-10-29 12:01:00
\n", + "
" + ], + "text/plain": [ + " modes emerging_time max_prob_time max_probability emerging_Date\n", + "0 0 1570273260 1571137260 0.009954 2019-10-05 11:01:00\n", + "1 1 1571655660 1571655660 0.023025 2019-10-21 11:01:00\n", + "2 2 1572350460 1574424060 0.010912 2019-10-29 12:01:00" + ] }, - "execution_count": 17, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -685,16 +957,11 @@ "df_emerging1 = pd.DataFrame(mode_emerging1)\n", "df_emerging1['emerging_Date'] = pd.to_datetime(df_emerging1['emerging_time'], unit=\"s\")\n", "df_emerging1.head()" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", + "id": "controlled-moral", "metadata": { "pycharm": { "name": "#%% md\n" @@ -706,7 +973,8 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 32, + "id": "pointed-parliament", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:58.990587Z", @@ -719,10 +987,118 @@ "outputs": [ { "data": { - "text/plain": " timestamps rms rms_dc dc utilization Date \\\n0 1570186860 0.647086 0.662108 -0.140237 1 2019-10-04 11:01:00 \n1 1570273260 0.647123 0.662183 -0.140420 1 2019-10-05 11:01:00 \n2 1570359660 0.646619 0.661652 -0.140239 1 2019-10-06 11:01:00 \n3 1570446060 0.646873 0.661923 -0.140347 1 2019-10-07 11:01:00 \n4 1570532460 0.646643 0.661714 -0.140423 1 2019-10-08 11:01:00 \n\n labels uncertain mode_probability \n0 0 False 0.001262 \n1 0 False 0.001833 \n2 0 False 0.000154 \n3 0 False 0.000546 \n4 0 False 0.000025 ", - "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
timestampsrmsrms_dcdcutilizationDatelabelsuncertainmode_probability
015701868600.6470860.662108-0.14023712019-10-04 11:01:000False0.001262
115702732600.6471230.662183-0.14042012019-10-05 11:01:000False0.001833
215703596600.6466190.661652-0.14023912019-10-06 11:01:000False0.000154
315704460600.6468730.661923-0.14034712019-10-07 11:01:000False0.000546
415705324600.6466430.661714-0.14042312019-10-08 11:01:000False0.000025
\n
" + "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", + "
rmsrms_dcdcutilizationtimestampsDatelabelsuncertainmode_probability
00.6471230.662183-0.140420115702732602019-10-05 11:01:000False0.002528
10.6466190.661652-0.140239115703596602019-10-06 11:01:000False0.000194
20.6468730.661923-0.140347115704460602019-10-07 11:01:000False0.000825
30.6466430.661714-0.140423115705324602019-10-08 11:01:000False0.000025
40.6467170.661709-0.140055115706188602019-10-09 11:01:000False0.000704
\n", + "
" + ], + "text/plain": [ + " rms rms_dc dc utilization timestamps Date \\\n", + "0 0.647123 0.662183 -0.140420 1 1570273260 2019-10-05 11:01:00 \n", + "1 0.646619 0.661652 -0.140239 1 1570359660 2019-10-06 11:01:00 \n", + "2 0.646873 0.661923 -0.140347 1 1570446060 2019-10-07 11:01:00 \n", + "3 0.646643 0.661714 -0.140423 1 1570532460 2019-10-08 11:01:00 \n", + "4 0.646717 0.661709 -0.140055 1 1570618860 2019-10-09 11:01:00 \n", + "\n", + " labels uncertain mode_probability \n", + "0 0 False 0.002528 \n", + "1 0 False 0.000194 \n", + "2 0 False 0.000825 \n", + "3 0 False 0.000025 \n", + "4 0 False 0.000704 " + ] }, - "execution_count": 18, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -734,6 +1110,7 @@ }, { "cell_type": "markdown", + "id": "cathedral-myanmar", "metadata": { "pycharm": { "name": "#%% md\n" @@ -745,7 +1122,8 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 35, + "id": "compliant-morgan", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:01.536419Z", @@ -758,17 +1136,126 @@ "outputs": [ { "data": { - "text/plain": " timestamps rms rms_dc dc utilization Date \\\n0 1570186860 0.646887 0.661967 -0.140491 1 2019-10-04 11:01:00 \n1 1570273260 0.646963 0.661950 -0.140056 1 2019-10-05 11:01:00 \n2 1570359660 0.646905 0.661932 -0.140244 1 2019-10-06 11:01:00 \n3 1570446060 0.647395 0.662385 -0.140124 1 2019-10-07 11:01:00 \n4 1570532460 0.647057 0.662064 -0.140165 1 2019-10-08 11:01:00 \n\n labels uncertain mode_probability \n0 0 False 0.000008 \n1 0 False 0.000001 \n2 0 False 0.000002 \n3 0 False 0.000046 \n4 0 False 0.000004 ", - "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
timestampsrmsrms_dcdcutilizationDatelabelsuncertainmode_probability
015701868600.6468870.661967-0.14049112019-10-04 11:01:000False0.000008
115702732600.6469630.661950-0.14005612019-10-05 11:01:000False0.000001
215703596600.6469050.661932-0.14024412019-10-06 11:01:000False0.000002
315704460600.6473950.662385-0.14012412019-10-07 11:01:000False0.000046
415705324600.6470570.662064-0.14016512019-10-08 11:01:000False0.000004
\n
" + "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", + "
rmsrms_dcdcutilizationtimestampsDatelabelsuncertainmode_probability
00.6468870.661967-0.140491115701868602019-10-04 11:01:000False0.000008
10.6469630.661950-0.140056115702732602019-10-05 11:01:000False0.000001
20.6469050.661932-0.140244115703596602019-10-06 11:01:000False0.000002
30.6473950.662385-0.140124115704460602019-10-07 11:01:000False0.000046
40.6470570.662064-0.140165115705324602019-10-08 11:01:000False0.000004
\n", + "
" + ], + "text/plain": [ + " rms rms_dc dc utilization timestamps Date \\\n", + "0 0.646887 0.661967 -0.140491 1 1570186860 2019-10-04 11:01:00 \n", + "1 0.646963 0.661950 -0.140056 1 1570273260 2019-10-05 11:01:00 \n", + "2 0.646905 0.661932 -0.140244 1 1570359660 2019-10-06 11:01:00 \n", + "3 0.647395 0.662385 -0.140124 1 1570446060 2019-10-07 11:01:00 \n", + "4 0.647057 0.662064 -0.140165 1 1570532460 2019-10-08 11:01:00 \n", + "\n", + " labels uncertain mode_probability \n", + "0 0 False 0.000008 \n", + "1 0 False 0.000001 \n", + "2 0 False 0.000002 \n", + "3 0 False 0.000046 \n", + "4 0 False 0.000004 " + ] }, - "execution_count": 19, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#RMS\n", - "df_rms5 = pd.DataFrame(rms_output5[\"results\"])\n", + "df_rms5 = pd.DataFrame(rms_output5[\"results\"][\"acc\"])\n", + "df_rms5[\"timestamps\"] = rms_output5[\"results\"]['timestamps']\n", "df_rms5['Date'] = pd.to_datetime(df_rms5['timestamps'], unit=\"s\")\n", "#MODE_ID (full)\n", "mode_all5 = mode_output5[\"results\"].copy()\n", @@ -782,6 +1269,7 @@ }, { "cell_type": "markdown", + "id": "needed-machine", "metadata": {}, "source": [ "We can call the individual boxplot for one source and display the boxplot of the \"RMS\" for each one of the operating modes.\n", @@ -790,7 +1278,8 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 36, + "id": "drawn-aerospace", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:07.727375Z", @@ -800,8 +1289,10 @@ "outputs": [ { "data": { - "text/plain": "
", - "image/png": "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\n" + "image/png": "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\n", + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" @@ -815,6 +1306,7 @@ }, { "cell_type": "markdown", + "id": "fitting-algeria", "metadata": {}, "source": [ "We create a list with all the sources dataframes for the \"ModeId\" feature and display the \"RMS\" boxplot across the different modes." @@ -822,7 +1314,8 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 37, + "id": "synthetic-plymouth", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:11.059225Z", @@ -833,8 +1326,10 @@ "outputs": [ { "data": { - "text/plain": "
", - "image/png": "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\n" + "image/png": "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\n", + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" @@ -848,6 +1343,7 @@ }, { "cell_type": "markdown", + "id": "precious-shirt", "metadata": {}, "source": [ "We call the display over time of an individual source and identify all its operating modes.\n", @@ -856,7 +1352,8 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 38, + "id": "urban-alaska", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:16.615916Z", @@ -866,8 +1363,10 @@ "outputs": [ { "data": { - "text/plain": "
", - "image/png": "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3Tt27Oje1NTU7cknn+wza9asJoDp06fvrK+vPwDw4IMP9lmxYsWJhUJh9KhRoxofe+yx+rVr1/YqvWfp6HOriGj36h++zCdJkqSymzp16o7rr7/+vQ8//PDqzZs3v5WDvltSW1d36JhuSikuu+yypttvv3394Z512mmnNe/evbvb/v376dGjBy+99FLPQYMGtXtetCPKkiRJKrurrrpq65w5c149//zzXys9PmHChN3z588fALB48eI+/fr1a+7fv3/LhAkTds+bN28AwMKFC+t37drVDWDq1Km7Fi9e3G/9+vXdIZvjvGbNmndMq6irq2u9bz+AefPmDbj44ot3tDdmE2VJkqSuYsCANi2tVo77jRw5cv911123+eDjN99886vLli07saGhofFLX/rSsLvvvvtFgJtuuunVxx9//OTGxsbRDz30UN8hQ4a8CTBu3LjXr7322vWTJ09uaGhoaLzwwgsbXnnllR4H3/fWW29d961vfeu0008//dzt27d3//znP7+1vT9e5A13t9X48ePTkiVLjvp6SZKkWhQRS1NK46sdx/Lly18qFArtThC7kuXLlw8sFAoj8socUZYkSZJymChLkiRJOUyUJUmSpBwmypIkSVKOY0uU95d9m25JkiSpKo5tw5FnnoGIDgpFql3B0a8uow6Q7KckSe3n1AtJkqQuYuBAChGM66j/Bg6kcKRnRsS4Sy655IzW7/fv30+/fv0KH/7wh89qT+zDhg0bs2HDhjYP8t54442nnn766edGxLj2XFfKRFmSJKmLaGo6xtkER3G/3r17t6xevbr3nj17AuC+++6rHzx4cNnn737wgx/c89Of/nTN0KFD3zzae5goS5IkqawmT568c9GiRacA3HPPPf0vvfTSba1lmzZt6jZlypSRDQ0NjYVCYdRTTz3VG2Djxo3dJk2a9L7Ro0c3zpgxY3jpJnl33HFH/zFjxoweNWpU44wZM4Y3Nx+6QeCkSZNeO/vss486SQYTZUmSJJXZlVdeuW3BggX99u3bFytXrjxx4sSJe1vL5s6dO7RQKOxbs2bNczfccMP6mTNnngFwzTXXDJ04ceKelStXPjdt2rQdGzZs6AmwbNmyE+69997+S5YsWbVq1arn6urq0p133jmgHHGbKEuSJKmsLrjggtfWrVvX66677uo/ZcqUnaVlTz/9dJ/Zs2c3AUyb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\n" + "image/png": "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\n", + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" @@ -881,6 +1380,7 @@ }, { "cell_type": "markdown", + "id": "senior-plaza", "metadata": {}, "source": [ "Uncertain areas appear as a gray rectangle above the corresponding periods in the modes plot.\n", @@ -891,7 +1391,8 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 39, + "id": "liked-trouble", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:17.917436Z", @@ -904,8 +1405,10 @@ "outputs": [ { "data": { - "text/plain": "
", - "image/png": "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\n" + "image/png": "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m26h0hXPN2rUqLoFCxa87z13Fy9efHTnzp39MzMzsx9//PH0oqKig5K0aNGio5s3bx6QkZExZt26dUlpaWmXJCknJ+fCggULyiZNmpSZmZmZfdddd2UePny4T9PnfeaZZ44899xzNw4bNuz2kydPxn3hC1840dHXadFXoLRXbm6uKy4u7vD2AACgdzKz7c653Ku935KSkkORSKTDxScMSkpKBkUikRFB6zADCAAAEDIUQAAAgJChAAIAAIQMBRAAACBkKIAAAAAhQwEEAAAIGQogAADovQYpIlNOp30MUqS1XZpZzn333Tey8fO6ujolJSVFPvKRj2S0Z+jp6eljy8vL2/wOIk899dTgYcOG3W5mOe3ZrjkUQAAA0HtVdfLb2rbh+eLj4xtKS0vja2trTZJefvnlxNTU1LpOHUcz7rzzzto33nhj39ChQzv8FnCNKIAAAADtlJ+ff2rNmjU3SNLKlSuTp0yZUt24rLKyMjY/P39UZmZmdiQSydq6dWu8JFVUVMROnDjx1oyMjDHTpk0bHv1mHEuXLk0eO3bs6KysrOwZM2YMr69//xuSTJw48fxtt912xeVPogACAAC024MPPli9atWqpHPnztmePXv65+XlnW1cNm/evKGRSOTcvn373n7iiSfKZs2aNVKS5s+fPzQvL692//79uydPnlxTXl7eV5J27Nhx3dq1a5OLi4v37t279+2YmBi3bNmylK4cPwUQAACgncaPH3/+yJEj/ZYvX56cn59/KnrZtm3bEubMmVMlSYWFhWdqamriqqurY7Zs2ZIwe/bsKkmaPn36qcTExPckacOGDQm7du3qH4lERmdlZWVv2rQp8cCBA/26cvxXdNy8rsuPdgMAAPRMBQUFNQsXLrx548aNpceOHetwp3LO2dSpU6uWLFlS1pnjC3JFBfCttySzzhoK0LO41le57MVr5xvBZrbrlXcqdw3l2GbdmDeAKzN37twTN9xww3t33HHH+fXr1yc0Pj5+/PgzK1asSPnud79bvn79+oSkpKT65OTkhgkTJpwpKipK+c53vlO+evXqxNOnT8dKUkFBwen7778/46tf/Wplenp6fWVlZeypU6diMzMzO+V8v+ZwCBgAAPReKXr/1RJX6flGjRpVt2DBgmNNH1+8ePHRnTt39s/MzMx+/PHH04uKig5K0qJFi45u3rx5QEZGxph1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\n", + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" @@ -919,6 +1422,7 @@ }, { "cell_type": "markdown", + "id": "objective-quarter", "metadata": { "pycharm": { "name": "#%% md\n" @@ -934,7 +1438,8 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 40, + "id": "removed-administration", "metadata": { "pycharm": { "name": "#%%\n" @@ -943,9 +1448,11 @@ "outputs": [ { "data": { - "text/plain": "['u0001', 'u0002', 'u0003', 'u0004', 'u0005', 'u0006']" + "text/plain": [ + "['u0001', 'u0002', 'u0003', 'u0004', 'u0005', 'u0006']" + ] }, - "execution_count": 24, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -957,6 +1464,7 @@ }, { "cell_type": "markdown", + "id": "massive-subscriber", "metadata": {}, "source": [ "Similar to single asset feature, the requested population analysis will return a dictionary object with two elements.\n", @@ -971,7 +1479,8 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 41, + "id": "overhead-complex", "metadata": { "pycharm": { "name": "#%%\n" @@ -980,9 +1489,11 @@ "outputs": [ { "data": { - "text/plain": "{'request_id': 'f50aac753e019955cdeddda5be29012b', 'request_status': 'queued'}" + "text/plain": [ + "{'request_id': 'e86e3478105f844a2487ba276cb9f728', 'request_status': 'queued'}" + ] }, - "execution_count": 25, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -995,6 +1506,7 @@ }, { "cell_type": "markdown", + "id": "satisfied-weight", "metadata": {}, "source": [ "Similarly, we can query for the status of our requested analysis, where the different status options remain the same." @@ -1002,7 +1514,8 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 42, + "id": "waiting-small", "metadata": { "pycharm": { "name": "#%%\n" @@ -1025,6 +1538,7 @@ }, { "cell_type": "markdown", + "id": "beautiful-fitting", "metadata": {}, "source": [ "The next step is to retrieve the results by calling the \"request_id\".\n", @@ -1042,7 +1556,8 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 43, + "id": "right-nepal", "metadata": { "pycharm": { "name": "#%%\n" @@ -1051,9 +1566,11 @@ "outputs": [ { "data": { - "text/plain": "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" + "text/plain": [ + "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" + ] }, - "execution_count": 27, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -1065,6 +1582,7 @@ }, { "cell_type": "markdown", + "id": "deluxe-fever", "metadata": {}, "source": [ "The `\"results\"` of the \"BlackSheep\" indicates the atypical assets.\n", @@ -1078,7 +1596,8 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 44, + "id": "rural-clark", "metadata": { "pycharm": { "name": "#%%\n" @@ -1102,13 +1621,19 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 45, + "id": "later-invalid", + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "The 1st blacksheep is u0003\n", + "The 1st blacksheep is u0004\n", "The 2nd blacksheep is u0002\n" ] } @@ -1118,25 +1643,19 @@ "atypical2 = atypical[1]\n", "print(f\"The 1st blacksheep is {atypical1['source_id']}\")\n", "print(f\"The 2nd blacksheep is {atypical2['source_id']}\")" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", - "source": [ - "Please check the [\"Analysis Classes\"](analysis_classes.ipynb) example for some of the visualization options of the blacksheep results.\n" - ], + "id": "residential-dancing", "metadata": { - "collapsed": false, "pycharm": { "name": "#%% md\n" } - } + }, + "source": [ + "Please check the [\"Analysis Classes\"](analysis_classes.ipynb) example for some of the visualization options of the blacksheep results.\n" + ] } ], "metadata": { @@ -1155,7 +1674,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.8.10" }, "toc": { "base_numbering": 1, @@ -1202,4 +1721,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/docs/source/content/examples/brief_overview.ipynb b/docs/source/content/examples/brief_overview.ipynb index f307b3b7..c191349a 100644 --- a/docs/source/content/examples/brief_overview.ipynb +++ b/docs/source/content/examples/brief_overview.ipynb @@ -98,35 +98,30 @@ "name": "stdout", "output_type": "stream", "text": [ - "Looking in indexes: https://pypi.org/simple, https://vikinganalytics:****@pypi.vikinganalytics.se/simple/\n", - "Requirement already satisfied: va-mvg in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (0.7.1)\n", - "Requirement already satisfied: typer in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (0.3.2)\n", - "Requirement already satisfied: matplotlib in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (3.1.3)\n", - "Requirement already satisfied: requests in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (2.24.0)\n", - "Requirement already satisfied: semver in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (2.13.0)\n", - "Requirement already satisfied: tabulate in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (0.8.7)\n", - "Requirement already satisfied: numpy in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (1.18.1)\n", - "Requirement already satisfied: pandas in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from va-mvg) (1.2.4)\n", - "Requirement already satisfied: kiwisolver>=1.0.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib->va-mvg) (1.1.0)\n", - "Requirement already satisfied: python-dateutil>=2.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib->va-mvg) (2.8.1)\n", - "Requirement already satisfied: cycler>=0.10 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib->va-mvg) (0.10.0)\n", - "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from matplotlib->va-mvg) (2.4.6)\n", - "Requirement already satisfied: six in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from cycler>=0.10->matplotlib->va-mvg) (1.14.0)\n", - "Requirement already satisfied: setuptools in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from kiwisolver>=1.0.1->matplotlib->va-mvg) (41.2.0)\n", - "Requirement already satisfied: pytz>=2017.3 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from pandas->va-mvg) (2019.3)\n", - "Requirement already satisfied: chardet<4,>=3.0.2 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from requests->va-mvg) (3.0.4)\n", - "Requirement already satisfied: idna<3,>=2.5 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from requests->va-mvg) (2.9)\n", - "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from requests->va-mvg) (2020.4.5.2)\n", - "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from requests->va-mvg) (1.25.9)\n", - "Requirement already satisfied: click<7.2.0,>=7.1.1 in c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages (from typer->va-mvg) (7.1.2)\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: You are using pip version 21.0.1; however, version 21.1.3 is available.\n", - "You should consider upgrading via the 'c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\python.exe -m pip install --upgrade pip' command.\n" + "/usr/lib/python3/dist-packages/secretstorage/dhcrypto.py:15: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead\n", + " from cryptography.utils import int_from_bytes\n", + "/usr/lib/python3/dist-packages/secretstorage/util.py:19: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead\n", + " from cryptography.utils import int_from_bytes\n", + "Requirement already satisfied: va-mvg in /home/tuix/.local/lib/python3.8/site-packages (0.0.0.dev0)\n", + "Requirement already satisfied: pandas in /home/tuix/.local/lib/python3.8/site-packages (from va-mvg) (1.2.4)\n", + "Requirement already satisfied: numpy in /home/tuix/.local/lib/python3.8/site-packages (from va-mvg) (1.20.2)\n", + "Requirement already satisfied: typer in /home/tuix/.local/lib/python3.8/site-packages (from va-mvg) (0.3.2)\n", + "Requirement already satisfied: requests in /home/tuix/.local/lib/python3.8/site-packages (from va-mvg) (2.25.1)\n", + "Requirement already satisfied: semver in /home/tuix/.local/lib/python3.8/site-packages (from va-mvg) (2.13.0)\n", + "Requirement already satisfied: tabulate in /home/tuix/.local/lib/python3.8/site-packages (from va-mvg) (0.8.9)\n", + "Requirement already satisfied: matplotlib in /home/tuix/.local/lib/python3.8/site-packages (from va-mvg) (3.4.2)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /home/tuix/.local/lib/python3.8/site-packages (from matplotlib->va-mvg) (1.3.1)\n", + "Requirement already satisfied: pyparsing>=2.2.1 in /home/tuix/.local/lib/python3.8/site-packages (from matplotlib->va-mvg) (2.4.7)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /home/tuix/.local/lib/python3.8/site-packages (from matplotlib->va-mvg) (2.8.1)\n", + "Requirement already satisfied: cycler>=0.10 in /home/tuix/.local/lib/python3.8/site-packages (from matplotlib->va-mvg) (0.10.0)\n", + "Requirement already satisfied: pillow>=6.2.0 in /home/tuix/.local/lib/python3.8/site-packages (from matplotlib->va-mvg) (8.1.0)\n", + "Requirement already satisfied: six in /usr/lib/python3/dist-packages (from cycler>=0.10->matplotlib->va-mvg) (1.14.0)\n", + "Requirement already satisfied: pytz>=2017.3 in /home/tuix/.local/lib/python3.8/site-packages (from pandas->va-mvg) (2020.5)\n", + "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/lib/python3/dist-packages (from requests->va-mvg) (1.25.8)\n", + "Requirement already satisfied: chardet<5,>=3.0.2 in /usr/lib/python3/dist-packages (from requests->va-mvg) (3.0.4)\n", + "Requirement already satisfied: idna<3,>=2.5 in /usr/lib/python3/dist-packages (from requests->va-mvg) (2.8)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests->va-mvg) (2019.11.28)\n", + "Requirement already satisfied: click<7.2.0,>=7.1.1 in /home/tuix/.local/lib/python3.8/site-packages (from typer->va-mvg) (7.1.2)\n" ] } ], @@ -230,7 +225,9 @@ "outputs": [ { "data": { - "text/plain": "'{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.1.14\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}'" + "text/plain": [ + "'{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.2.0\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}'" + ] }, "execution_count": 6, "metadata": {}, @@ -311,15 +308,22 @@ }, "outputs": [ { - "name": "stderr", + "name": "stdout", "output_type": "stream", "text": [ - "fatal: destination path 'va-data-charlie' already exists and is not an empty directory.\n" + "Cloning into 'va-data-charlie'...\n", + "remote: Enumerating objects: 494, done.\u001b[K\n", + "remote: Counting objects: 100% (494/494), done.\u001b[K\n", + "remote: Compressing objects: 100% (403/403), done.\u001b[K\n", + "remote: Total 494 (delta 96), reused 434 (delta 87), pack-reused 0\u001b[K\n", + "Receiving objects: 100% (494/494), 70.52 MiB | 1.91 MiB/s, done.\n", + "Resolving deltas: 100% (96/96), done.\n", + "Updating files: 100% (955/955), done.\n" ] } ], "source": [ - "!git clone https://github.com/vikinganalytics/va-data-charlie.git" + "!git clone --depth=1 https://github.com/vikinganalytics/va-data-charlie.git" ] }, { @@ -337,7 +341,9 @@ "outputs": [ { "data": { - "text/plain": "'u0001'" + "text/plain": [ + "'u0001'" + ] }, "execution_count": 9, "metadata": {}, @@ -391,7 +397,7 @@ "# OPTION 1: Writing the meta-data directly when creating the source\n", "SOURCE_IDP = \"u001\"\n", "meta_information = {'assetId': 'assetJ', 'measPoint': 'mloc01', 'location': 'cancun', 'timezone': 'Europe/Stockholm'}\n", - "session.create_source(SOURCE_IDP, meta_information)\n", + "session.create_source(SOURCE_IDP, meta=meta_information, channels=[\"acc\"])\n", "session.get_source(SOURCE_IDP)\n", "# We delete this first example source to show the second option\n", "session.delete_source(SOURCE_IDP)" @@ -412,7 +418,11 @@ "outputs": [ { "data": { - "text/plain": "{'source_id': 'u0001',\n 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'},\n 'properties': {'data_class': 'waveform'}}" + "text/plain": [ + "{'source_id': 'u0001',\n", + " 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'},\n", + " 'properties': {'data_class': 'waveform', 'channels': ['acc']}}" + ] }, "execution_count": 11, "metadata": {}, @@ -425,7 +435,7 @@ "meta_filename = src_path / \"meta.json\"\n", "with open(meta_filename, \"r\") as json_file:\n", " meta = json.load(json_file)\n", - "session.create_source(SOURCE_ID, meta)\n", + "session.create_source(SOURCE_ID, meta=meta, channels=[\"acc\"])\n", "session.get_source(SOURCE_ID)" ] }, @@ -454,7 +464,11 @@ "outputs": [ { "data": { - "text/plain": "[{'source_id': 'u0001',\n 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'},\n 'properties': {'data_class': 'waveform'}}]" + "text/plain": [ + "[{'source_id': 'u0001',\n", + " 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'},\n", + " 'properties': {'data_class': 'waveform', 'channels': ['acc']}}]" + ] }, "execution_count": 12, "metadata": {}, @@ -498,9 +512,7 @@ "outputs": [], "source": [ "# meas is a list of timestamps representing the measurements in our repo\n", - "meas = {f.split(\".\")[0] for f in os.listdir(src_path)}\n", - "# We remove the \"meta\" file from this list\n", - "meas.remove(\"meta\")\n" + "meas = [f.stem for f in Path(src_path).glob(\"*.csv\")]" ] }, { @@ -522,154 +534,160 @@ "text": [ "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574424060.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570186860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573041660.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570273260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574337660.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570359660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573992060.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570446060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570273260.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570532460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570618860.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570618860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571569260.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570705260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572955260.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570791660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572782460.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570878060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570878060.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570964460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573905660.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571050860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572696060.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571137260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570964460.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571223660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571742060.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571310060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571050860.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571396460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571396460.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571482860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571655660.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571569260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573128060.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571655660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574164860.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571742060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571482860.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571828460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572001260.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571914860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570705260.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572001260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573473660.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572087660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572609660.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572177660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571223660.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572264060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572264060.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572350460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571914860.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572436860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573387260.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572523260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574078460.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572609660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572523260.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572696060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570186860.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572782460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571137260.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572868860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570532460.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572955260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570791660.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573041660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570359660.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573128060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571828460.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573214460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572350460.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573300860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573214460.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573387260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573560060.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573473660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572436860.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573560060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572868860.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573646460.csv\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573819260.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573732860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570446060.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573819260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571310060.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573905660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572177660.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573992060.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573646460.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574078460.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573732860.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574164860.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574251260.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574251260.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573300860.csv\n", + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574337660.csv\n", "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572087660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574424060.csv\n" ] } ], @@ -680,9 +698,9 @@ " # raw data per measurement\n", " TS_MEAS = str(m) + \".csv\" # filename\n", " TS_MEAS = REF_DB_PATH / SOURCE_ID / TS_MEAS # path to file\n", - " ts_df = pd.read_csv(TS_MEAS, names=['acc']) # read csv into df\n", - " accs = ts_df.iloc[:, 0].tolist() # convert to list\n", - " print(f\"Read {len(accs)} samples\")\n", + " ts_df = pd.read_csv(TS_MEAS) # read csv into df\n", + " accs = ts_df.to_dict(\"list\") # convert to list\n", + " print(f\"Read {len(ts_df)} samples\")\n", "\n", " # meta information file per measurement\n", " TS_META = str(m) + \".json\" # filename\n", @@ -764,7 +782,9 @@ "outputs": [ { "data": { - "text/plain": "{'RMS': '1.0.0', 'ModeId': '0.1.1', 'BlackSheep': '1.0.0'}" + "text/plain": [ + "{'RMS': '1.0.0', 'ModeId': '0.1.1', 'BlackSheep': '1.0.0', 'KPIDemo': '1.0.0'}" + ] }, "execution_count": 16, "metadata": {}, @@ -803,7 +823,9 @@ "outputs": [ { "data": { - "text/plain": "{'request_id': 'bd831c060faf3d6ca5332be3f17c5c10', 'request_status': 'queued'}" + "text/plain": [ + "{'request_id': 'bc4ea1194b4929764a08e97c60360cb6', 'request_status': 'queued'}" + ] }, "execution_count": 17, "metadata": {}, @@ -892,7 +914,9 @@ "outputs": [ { "data": { - "text/plain": "{'request_id': 'c1a1dc59c94e9a6a7f810cf802cb9d78', 'request_status': 'queued'}" + "text/plain": [ + "{'request_id': 'fae66b2396b7dde3039a2f58e287686a', 'request_status': 'queued'}" + ] }, "execution_count": 19, "metadata": {}, @@ -975,7 +999,9 @@ "outputs": [ { "data": { - "text/plain": "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" + "text/plain": [ + "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" + ] }, "execution_count": 21, "metadata": {}, @@ -991,6 +1017,7 @@ }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Visualization\n", "\n", @@ -999,72 +1026,147 @@ "In addition, it enables to quickly evaluate the results by getting a summary of them or visualize them.\n", "\n", "The name of this module is `\"analysis_classes\"` and we begin by calling it." - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 22, - "outputs": [], - "source": [ - "from mvg import analysis_classes" - ], "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } - } + }, + "outputs": [], + "source": [ + "from mvg import analysis_classes" + ] }, { "cell_type": "markdown", - "source": [ - "The first step requires parsing the results available from the analysis.\n", - "We begin by showing how to do this with the RMS feature." - ], "metadata": { - "collapsed": false, "pycharm": { "name": "#%% md\n" } - } + }, + "source": [ + "The first step requires parsing the results available from the analysis.\n", + "We begin by showing how to do this with the RMS feature." + ] }, { "cell_type": "code", "execution_count": 23, - "outputs": [], - "source": [ - "rms_results_parsed = analysis_classes.parse_results(rms_results)" - ], "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } - } + }, + "outputs": [], + "source": [ + "rms_results_parsed = analysis_classes.parse_results(rms_results)" + ] }, { "cell_type": "markdown", - "source": [ - "From here, we can call these results into a Pandas dataframe." - ], "metadata": { - "collapsed": false, "pycharm": { "name": "#%% md\n" } - } + }, + "source": [ + "From here, we can call these results into a Pandas dataframe." + ] }, { "cell_type": "code", "execution_count": 24, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { - "text/plain": " timestamps rms rms_dc dc utilization\n0 1570186860 0.647086 0.662108 -0.140237 1\n1 1570273260 0.647123 0.662183 -0.140420 1\n2 1570359660 0.646619 0.661652 -0.140239 1\n3 1570446060 0.646873 0.661923 -0.140347 1\n4 1570532460 0.646643 0.661714 -0.140423 1", - "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
timestampsrmsrms_dcdcutilization
015701868600.6470860.662108-0.1402371
115702732600.6471230.662183-0.1404201
215703596600.6466190.661652-0.1402391
315704460600.6468730.661923-0.1403471
415705324600.6466430.661714-0.1404231
\n
" + "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", + "
timestampsrmsrms_dcdcutilization
015701868600.6470860.662108-0.1402371
115702732600.6471230.662183-0.1404201
215703596600.6466190.661652-0.1402391
315704460600.6468730.661923-0.1403471
415705324600.6466430.661714-0.1404231
\n", + "
" + ], + "text/plain": [ + " timestamps rms rms_dc dc utilization\n", + "0 1570186860 0.647086 0.662108 -0.140237 1\n", + "1 1570273260 0.647123 0.662183 -0.140420 1\n", + "2 1570359660 0.646619 0.661652 -0.140239 1\n", + "3 1570446060 0.646873 0.661923 -0.140347 1\n", + "4 1570532460 0.646643 0.661714 -0.140423 1" + ] }, "execution_count": 24, "metadata": {}, @@ -1074,40 +1176,38 @@ "source": [ "df_rms = rms_results_parsed.to_df()\n", "df_rms.head()\n" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, "source": [ "From the results, we can see that the RMS feature provides the rms value, the dc component and\n", "the rms without the dc component.\n", "All this is available for each timestamp.\n", "\n", "We can request to display a summary of the results." - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } + ] }, { "cell_type": "code", "execution_count": 25, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "=== RMS ===\n", - "request_id bd831c060faf3d6ca5332be3f17c5c10\n", + "request_id bc4ea1194b4929764a08e97c60360cb6\n", "from 1570186860 to 1574424060\n", "\n", "+-------+--------------+------------+------------+------------+---------------+\n", @@ -1126,8 +1226,112 @@ }, { "data": { - "text/plain": " timestamps rms rms_dc dc utilization\ncount 5.000000e+01 50.000000 50.000000 50.000000 50.0\nmean 1.572306e+09 0.611691 0.623692 -0.120874 1.0\nstd 1.261051e+06 0.056541 0.056382 0.014194 0.0\nmin 1.570187e+09 0.484564 0.497987 -0.140524 1.0\n25% 1.571245e+09 0.627912 0.637381 -0.140196 1.0\n50% 1.572307e+09 0.628307 0.637800 -0.112316 1.0\n75% 1.573366e+09 0.646840 0.661892 -0.109660 1.0\nmax 1.574424e+09 0.647694 0.662754 -0.109065 1.0", - "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
timestampsrmsrms_dcdcutilization
count5.000000e+0150.00000050.00000050.00000050.0
mean1.572306e+090.6116910.623692-0.1208741.0
std1.261051e+060.0565410.0563820.0141940.0
min1.570187e+090.4845640.497987-0.1405241.0
25%1.571245e+090.6279120.637381-0.1401961.0
50%1.572307e+090.6283070.637800-0.1123161.0
75%1.573366e+090.6468400.661892-0.1096601.0
max1.574424e+090.6476940.662754-0.1090651.0
\n
" + "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", + "
timestampsrmsrms_dcdcutilization
count5.000000e+0150.00000050.00000050.00000050.0
mean1.572306e+090.6116910.623692-0.1208741.0
std1.261051e+060.0565410.0563820.0141940.0
min1.570187e+090.4845640.497987-0.1405241.0
25%1.571245e+090.6279120.637381-0.1401961.0
50%1.572307e+090.6283070.637800-0.1123161.0
75%1.573366e+090.6468400.661892-0.1096601.0
max1.574424e+090.6476940.662754-0.1090651.0
\n", + "
" + ], + "text/plain": [ + " timestamps rms rms_dc dc utilization\n", + "count 5.000000e+01 50.000000 50.000000 50.000000 50.0\n", + "mean 1.572306e+09 0.611691 0.623692 -0.120874 1.0\n", + "std 1.261051e+06 0.056541 0.056382 0.014194 0.0\n", + "min 1.570187e+09 0.484564 0.497987 -0.140524 1.0\n", + "25% 1.571245e+09 0.627912 0.637381 -0.140196 1.0\n", + "50% 1.572307e+09 0.628307 0.637800 -0.112316 1.0\n", + "75% 1.573366e+09 0.646840 0.661892 -0.109660 1.0\n", + "max 1.574424e+09 0.647694 0.662754 -0.109065 1.0" + ] }, "execution_count": 25, "metadata": {}, @@ -1136,34 +1340,34 @@ ], "source": [ "rms_results_parsed.summary()\n" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", - "source": [ - "Finally, we can generate a plot that displays these results." - ], "metadata": { - "collapsed": false, "pycharm": { "name": "#%% md\n" } - } + }, + "source": [ + "Finally, we can generate a plot that displays these results." + ] }, { "cell_type": "code", "execution_count": 26, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { - "text/plain": "
", - "image/png": "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85o2qoGJiBQYOnQoL7/8Mps2beLNN9/k9ttvB6BPnz5s3bq11encfvvt3HXXXVx11VX107Zs2cKAAQPo1asXK1asYMmSJfXzqqur2bVr127pzJw5k5tuuom6ujo2bNjAvffey7Rp097CHnYOqoGJiBSorq7m4osvZvr06YwZM4Zx48YBcOaZZ3LuuefSs2dPHnjggRbT+fa3v8369evrg82cOXO48MILWbBgARMnTuSggw5ixowZ9cufc845TJw4kSlTpnDDDTfUT587dy4PPPAAkyZNwsz45je/yT777MOKFe37fDBtrDP0WJk6daoX6wkkIunz9NNPc/DBB5c7G51OsXI1s4fdvXU9UiqQmhBFRCSVFMBERCSVFMBEpOJ0hkcblaSzlqcCmIhUlB49erBp06ZOe9EtNXdn06ZN9OjRo9xZaXfqhSgiFWXEiBHU1NSwYcOGcmel0+jRowcjRowodzbanQKYiFSU6upqxowZ0/KC0uWpCVFERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFJJAUxERFKppAHMzI43s5VmtsrM5heZP8/MHo+fv5nZpFLmT0RE0qNkAczMssA1wAnAeOA0MxtfsNhzwLHuPhH4KnBdqfInIiLpUsoa2DRglbuvdvedwI3ASckF3P1v7v5qHF0CdL73/4uISLsoZQAbDqxNjNfEaU35GPCHpmaa2TlmttTMlup3g0REup5SBjArMq3oT66a2b8QAtj5TSXm7te5+1R3nzpkyJB2yqKIiKRFKX/QsgYYmRgfAawvXMjMJgLXAye4+6YS5U1ERFKmlDWwh4CxZjbGzLoBpwK3Jhcws/2Am4EPu/s/Spg3ERFJmZLVwNy91szOA+4EssBCd19uZufG+QuAi4FBwLVmBlDr7lNLlUcREUkPcy/6GCpVpk6d6kuXLi13NkREUsXMHk5zJUFv4hARkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVRSABMRkVQqaQAzs+PN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\n" + "image/png": "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\n", + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" @@ -1172,7 +1376,9 @@ }, { "data": { - "text/plain": "''" + "text/plain": [ + "''" + ] }, "execution_count": 26, "metadata": {}, @@ -1181,16 +1387,15 @@ ], "source": [ "rms_results_parsed.plot()" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, "source": [ "All these functions are available for the ModeId feature as well.\n", "We proceed to repeat the same procedure for this other feature.\n", @@ -1199,48 +1404,116 @@ "In this particular case, we need to define the unit of time to perform the epoch conversion to datetime.\n", "The default unit is milliseconds, but we need seconds now.\n", "The timezone can also be defined, to increase the precision of these results." - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } + ] }, { "cell_type": "code", "execution_count": 27, - "outputs": [], - "source": [ - "mode_results_parsed = analysis_classes.parse_results(mode_results, t_unit=\"s\")\n" - ], "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } - } + }, + "outputs": [], + "source": [ + "mode_results_parsed = analysis_classes.parse_results(mode_results, t_unit=\"s\")\n" + ] }, { "cell_type": "markdown", - "source": [ - "First, we generate the pandas dataframe of ModeId results." - ], "metadata": { - "collapsed": false, "pycharm": { "name": "#%% md\n" } - } + }, + "source": [ + "First, we generate the pandas dataframe of ModeId results." + ] }, { "cell_type": "code", "execution_count": 28, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { - "text/plain": " timestamps labels uncertain mode_probability\n0 1570186860 0 False 0.001262\n1 1570273260 0 False 0.001833\n2 1570359660 0 False 0.000154\n3 1570446060 0 False 0.000546\n4 1570532460 0 False 0.000025", - "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
timestampslabelsuncertainmode_probability
015701868600False0.001262
115702732600False0.001833
215703596600False0.000154
315704460600False0.000546
415705324600False0.000025
\n
" + "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", + "
timestampslabelsuncertainmode_probability
015701868600False0.001262
115702732600False0.001833
215703596600False0.000154
315704460600False0.000546
415705324600False0.000025
\n", + "
" + ], + "text/plain": [ + " timestamps labels uncertain mode_probability\n", + "0 1570186860 0 False 0.001262\n", + "1 1570273260 0 False 0.001833\n", + "2 1570359660 0 False 0.000154\n", + "3 1570446060 0 False 0.000546\n", + "4 1570532460 0 False 0.000025" + ] }, "execution_count": 28, "metadata": {}, @@ -1250,37 +1523,34 @@ "source": [ "df_mode = mode_results_parsed.to_df()\n", "df_mode.head()" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "From the results, we can see that the ModeId feature provides a mode label for each timestamp, together with a boolean\n", "describing the certainty around this mode label and its probability.\n", "\n", "\n", "We can also request to display a summary of the results." - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 29, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "=== ModeId ===\n", - "request_id c1a1dc59c94e9a6a7f810cf802cb9d78\n", + "request_id fae66b2396b7dde3039a2f58e287686a\n", "from 1570186860 to 1574424060\n", "\n", "Labels\n", @@ -1313,7 +1583,22 @@ }, { "data": { - "text/plain": "[ counts portion mode_probability\n labels \n 0 17 34.0 17.0\n 1 8 16.0 8.0\n 2 25 50.0 25.0,\n portion mode_probability counts\n labels uncertain \n 0 False 34.0 17.0 17\n 1 False 16.0 8.0 8\n 2 False 50.0 25.0 25,\n modes emerging_time max_prob_time max_probability\n 0 0 1570186860 1571137260 0.007276\n 1 1 1571655660 1571655660 0.023025\n 2 2 1572350460 1574424060 0.010912]" + "text/plain": [ + "[ counts portion mode_probability\n", + " labels \n", + " 0 17 34.0 17.0\n", + " 1 8 16.0 8.0\n", + " 2 25 50.0 25.0,\n", + " portion mode_probability counts\n", + " labels uncertain \n", + " 0 False 34.0 17.0 17\n", + " 1 False 16.0 8.0 8\n", + " 2 False 50.0 25.0 25,\n", + " modes emerging_time max_prob_time max_probability\n", + " 0 0 1570186860 1571137260 0.007276\n", + " 1 1 1571655660 1571655660 0.023025\n", + " 2 2 1572350460 1574424060 0.010912]" + ] }, "execution_count": 29, "metadata": {}, @@ -1322,16 +1607,11 @@ ], "source": [ "mode_results_parsed.summary()" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "The summary of the results describes the number of timestamps for each mode and how many of these timestamps are uncertain.\n", "Uncertain areas appear as a gray rectangle above the corresponding periods in the modes plot.\n", @@ -1341,19 +1621,23 @@ "This information can be useful to identify if a new mode is affecting or appearing in the asset.\n", "\n", "Finally, we can generate a plot that displays display the different modes over time." - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 30, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { - "text/plain": "
", - "image/png": "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Pn362Nra2rr6+vpxjz32WH+AtWvX9jr11FOPHz9+fN2sWbOOTunNyuAbb7xxyIQJE8aPGzeubtasWUfv2vXWSubGxkYeeeSRAR//+MdfBrj44osbfvSjHx3W3rhNlCVJktSpzj///JfmzZs3eMeOHbFkyZKDp06dur1p3Jw5c0bV19fvWL58+dNXX331qgsvvPAYgMsvv3zU1KlTty1ZsuTpmTNnblqzZk1fgIULFx501113DVmwYMHSpUuXPl1TU5NuuummoZXrW7duXe8BAwbs7tOnDwBjxox5fd26dX3bG7eJsiRJkjrVKaec8srKlSv73XzzzUOmT5++uXLc448/PuCSSy5pAJg5c+bWTZs29W5oaOj16KOPDrj44osbAM4777zNAwcO3A1w7733Dli8ePHB9fX148eNG1f30EMPDVyxYkW/ymVW1j43iYh29/7hzXySJEnqdDNmzNh01VVXHXn//fcvW79+/Rs56J6S2pqat9fpppTi7LPPbrjhhhtWtbSuI444YtfWrVt77dy5kz59+vD888/3HT58eLvbRVujLEmSpE532WWXbZw9e/bqyZMnv1I5fMqUKVtvvfXWoQDz588fMHjw4F1DhgxpnDJlytZbbrllKMAdd9wxcMuWLb0AZsyYsWX+/PmDV61a1RtyG+fly5e/pVlFTU1N03IHA9xyyy1DzzjjjE3tjdlEWZIk6UAxdGibulbrjOWNHTt255VXXrm++fDrrrtu9cKFCw+ura2t+/znPz967ty5zwFce+21qx9++OFD6+rqxt93332DRo4c+TrAxIkTX73iiitWTZs2rba2trbutNNOq33xxRf7NF/uV77ylZXf+ta3jjjqqKNOfPnll3t/5jOf2djezYuy6u62mjRpUlqwYMFezy9JktQTRcQTKaVJ1Y5j0aJFz9fX17c7QTyQLFq0aFh9ff2YsnHWKEuSJEklTJQlSZKkEibKkiRJUgkTZUmSJKnEviXKOzv9Md2SJElSVezbA0eeegoiOigUqecK9r53GXWA5HlKktR+Nr2QJEk6QAwbRn0EEzvqNWwY9a2tMyImfuhDHzqm6f+dO3cyePDg+j/8wz88rj2xjx49esKaNWvaXMn7pS996fCjjjrqxIiY2J75KpkoS5IkHSAaGvaxNcFeLK9///6Ny5Yt679t27YAuPvuuweOGDGi09vvvu9979v205/+dPmoUaNe39tlmChLkiSpU02bNm3znXfeeRjA7bffPuSss856qWncunXrek2fPn1sbW1tXX19/bjHHnusP8DatWt7nXrqqcePHz++btasWUdXPiTvxhtvHDJhwoTx48aNq5s1a9bRu3a9/QGBp5566ivvfOc79zpJBhNlSZIkdbLzzz//pXnz5g3esWNHLFmy5OCpU6dubxo3Z86cUfX19TuWL1/+9NVXX73qwgsvPAbg8ssvHzV16tRtS5YseXrmzJmb1qxZ0xdg4cKFB911111DFixYsHTp0qVP19TUpJtuumloZ8RtoixJkqROdcopp7yycuXKfjfffPOQ6dOnb64c9/jjjw+45JJLGgBmzpy5ddOmTb0bGhp6PfroowMuvvjiBoDzzjtv88CBA3cD3HvvvQMWL158cH19/fhx48bVPfTQQwNXrFjRrzPi7tB2KpIkSVKZGTNmbLrqqquOvP/++5etX7/+jRy0sklFk4hIADU1b6/TTSnF2Wef3XDDDTes6sx4wRplSZIkdYHLLrts4+zZs1dPnjz5lcrhU6ZM2XrrrbcOBZg/f/6AwYMH7xoyZEjjlClTtt5yyy1DAe64446BW7Zs6QUwY8aMLfPnzx+8atWq3pDbOC9fvrxvZ8RsoixJknSAGDqUt9/11kXLGzt27M4rr7xyffPh11133eqFCxceXFtbW/f5z39+9Ny5c58DuPbaa1c//PDDh9bV1Y2/7777Bo0cOfJ1gIkTJ756xRVXrJo2bVptbW1t3WmnnVb74osv9mm+3GuuuWb4iBEjTlq3bl3f+vr6unPPPffo9m5flFV3t9WkiLRgr+eWDhw+cKTKfOCIpK4WPJFSmlTtMBYtWvR8fX39xmrHsT9btGjRsPr6+jFl46xRliRJkkqYKEuSJEklTJQlSZKkEibKkiRJUgkTZUmSJKmEibIkSZJUwifzSZIkHSCGMay+gYYOy/+GMnTXRjYu2tM0ETHxzDPPfOmee+55DmDnzp0MHz68/uSTT97+4IMPPtPWdY0ePXrCggULlowcObJNfTfPnDnzmKeeeuqQPn36pJNPPnn7bbfd9kK/fv3a1V+rNcqSJEkHiI5Mktu6vP79+zcuW7as/7Zt2wLg7rvvHjhixIidHRlHmY997GMvrVixYvGyZct+8+qrr8bXv/71Ye1dhomyJEmSOtW0adM233nnnYcB3H777UPOOuusl5rGrVu3rtf06dPH1tbW1tXX14977LHH+gOsXbu216mnnnr8+PHj62bNmnV05UPybrzxxiETJkwYP27cuLpZs2YdvWvX2yuZzz333M01NTXU1NQwadKk7StXrmz3Y65NlCVJktSpzj///JfmzZs3eMeOHbFkyZKDp06dur1p3Jw5c0bV19fvWL58+dNXX331qgsvvPAYgMsvv3zU1KlTty1ZsuTpmTNnblqzZk1fgIULFx501113DVmwYMHSpUuXPl1TU5NuuummoS2t+7XXXot58+YNPf300ze3N24TZUmSJHWqU0455ZWVK1f2u/nmm4dMnz79LQnr448/PuCSSy5pAJg5c+bWTZs29W5oaOj16KOPDrj44osbAM4777zNAwcO3A1w7733Dli8ePHB9fX148eNG1f30EMPDVyxYkW/ltZ94YUXHjVlypRtM2bM2NbeuL2ZT5IkSZ1uxowZm6666qoj77///mXr169/IwetbFLRJCISQE3N2+t0U0px9tlnN9xwww2rWlvn7NmzR27cuLH3fffd9+zexGyNsiRJkjrdZZddtnH27NmrJ0+e/Erl8ClTpmy99dZbhwLMnz9/wODBg3cNGTKkccqUKVtvueWWoQB33HHHwC1btvQCmDFjxpb58+cPXrVqVW/IbZyXL1/+tvbHX/3qV4c98MADg+65554VvXr12quYrVGWJEk6QAxl6K6O7h6urdOOHTt255VXXrm++fDrrrtu9axZs8bU1tbW9e/fv3Hu3LnPAVx77bWrzzrrrGPr6urGT506ddvIkSNfB5g4ceKrV1xxxapp06bVNjY20qdPn/TNb37zd7W1ta9XLnfOnDlHjxw58rVJkyaNBzjjjDNevv7669e0Z/uirLq7rSZFpAV7Pbd04Aj2/jhTB0hR7QgkHWiCJ1JKk6odxqJFi56vr6/fWO049meLFi0aVl9fP6ZsnE0vJEmSpBImypIkSVIJE2VJkqSeq7GxsdH2Zy0oyqaxpfEmypIkST3X4g0bNgwyWX67xsbG2LBhwyBgcUvT2OuFJElSD7Vr165L165d+521a9eeiBWkzTUCi3ft2nVpSxPY64XUBez1osrs9UJSV9tPer3QvvGXhSRJklTCRFmSJEkqYaIsSZIklTBRliRJkkqYKEuSJEklTJQlSZKkEibKkiRJUgkTZUmSJKmEibIkSZJUwkRZkiRJKmGiLEmSJJUwUZYkSZJKmChLkiRJJUyUJUmSpBImypIkSVIJE2VJkiSphImyJEmSVMJEWZIkSSphoixJkiSVMFGWJEmSSpgoS5IkSSVMlCVJkqQSJsqSJElSCRNlSZIkqYSJsiRJklTCRFmSJEkqYaIsSZIklTBRliRJkkqYKEuSJEklTJQlSZKkEibKkiRJUgkTZUmSJKmEibIkSZJUwkRZkiRJKmGiLEmSJJUwUZYkSZJKmChLkiRJJUyUJUmSpBImypIkSVIJE2VJkiSphImyJEmSVMJEWZIkSSphoixJkiSVMFGWJEmSSpgoS5IkSSVMlCVJkqQSJsqSJElSCRNlSZIkqYSJsiRJklTCRFmSJEkqYaIsSZIklTBRliRJkkqYKEuSJEklTJQlSZKkEibKkiRJUgkTZUmSJKmEibIkSZJUwkRZkiRJKhEppb2fOWIrsKzjwpF6rGHAxmoHcQCz/CV1tXemlAZUOwjtm977OP+ylNKkDolE6sEiYoHHSvVY/pK6WkQsqHYM2nc2vZAkSZJKmChLkiRJJfY1Uf6nDolC6vk8VqrL8pfU1Tzv9AD7dDOfJEmS1FPZ9EKSJEkqYaIsSZIklWh3ohwR0RmBSJIkSfuTDmmjHBF9Uko7OyAeqceIiKYfoil5M0DVRMRQYDewC9juZyFJaqt2PXAkInoD7wVeA14FNgAJ+AvgMx0endSNpZQay4ZHRC9gckrpkS4O6YASEeOA04HBwGjgGWAx8L+rGZeknisixgPnkfOjR1JKTxTDAzg2pfRsNeNT+7WrRjkixgKPAfcAm4BDgSHAdGAu0JBS+mLHhyl1LxExAPgQsJ386OQG8jGzGhgD/DCl9O6qBdjDRcQo4CvAC+SyPx14DjgEGAl8KKXUUL0IJfU0ETES+DqwE2gkn+v/NqX084g4GvhOSumPqhii9kJ7H2G9CbgdGAgsAZ4ApgETgEcA2y9LWT3wZWAeMALoB/Qln0CPIjcFUOcZDwxLKX0UICJ+DPxNSumciLiInERfVL3wJPVA7wQGp5Q+ABARpwHXR8Ql5MTZHKkbaleinFJqiIjPAZcBY4EfkWvIlqWU7oyIfp0Qo9QdjQJWkpPlAA4i12a+Qk7Q6qsW2YHhdWBnRPwB+RLoGeQmYwBbgYOrFZikHms4+SoiEdEvpfRARMwBrgWeAlZUMzjtnfa2UY7ipr1vRsQ5wJeAI4CmNjfe0CdljwFfIN88trlyRET8ltxsSZ1nIXAv8OfF/4lciwxwPLC5bCZJ2gcrgAciYlBKaXPR0cHPIiIBPwW+W+X4tBf2qdeLiBhMvpHvlyml/xMRNS3dwCTpTRHRP6X0SrXj6Oki4jjyj5LfpJR2Fj2R9AX6ppS2VDc6ST1JcaN275TSa5XDUkq7I+K95JzrP6oXofZGuxPliHg3MIl8aXMlsAxYl1J6vePDk7qviJhMrr18OqX0ZLXjOdAU56ojgeUppSXVjgkoow8AAAhYSURBVEdSzxcR9UAduUnqwmrHo33X3l4vLgBOBYYB/cnt/I4F1gN/lVL6eWcEKXU3EXEu8Mfk46SRfFPf/JRSY0RcT+71wu7hOklR/jPI7cJ3Az8AfmT5S+osEXEe8AFybrSbt573/x74N8873U97n8z3WeDOlNJZKaUPppTen1I6CrgEuLrot1QSfJLcRvZj5CTtb4Czi3EnYXv+zvZJ4Cfk/ky/D/w1lr+kzvUJ8nl/Fm8/79fjeadbam/3cFuAYRFxSEqp6c7OPimlRRFxKPmOfkm5S7ifFG32fxQRzwB3RsSz5B4w1lU1up7P8pfU1Tzv9EDtTZSvJtfQ1EbE8+QmF70i4nTgd8Dajg1P6rYWAccBTxY3uS4peoq5g/yUuI1Vja7ns/wldTXPOz3Q3t7M9yFyY/XDyMnyz4AfpJR2dHiEUjcUEe8EdqeUnmk2/CTgmyml91clsAOE5S+pq3ne6Zn2qXs4eKPphe1upD0oug0alFJ6KSJ6p5R2VTumA4nlL6mred7pGdp7Mx+R9SneTwYeLt63e1lSTxURUfmXfCPHjwE8WXY+y19SV/O80zPtTXIb5KdcQe7If0XFcElASikVPx57FYMOA56HN2oZ1Iksf0ldLb39Ev0g4DnwvNOdtfdmPoq7OZuevvciuQsUeDN5loTHSrVZ/pKqrAG4p9pBaN+094EjdcAfkZ/K1wD8FnjWR8FKb+WxUl2WvySpI7Q5UY6ID5OfNHYI+akzB5Gfyrcb+F8ppe91VpBSd+KxUl2Wv6SuFhFDgYHAaxWvmpTSloj4GvDblNKN1YxRe6c9TS8uAe5OKX23cmBEHAF8PyI2pJTu79DopO7JY6W6LH9JXe0KYBTwLLAL2Aa8WjxsZBrwRBVj0z5oz81828lP5RvYNCAi+qaU1pLbAdpFnJR5rFSX5S+pq00DXgYWAy8B/YExwHuAWvJD2dQNtafpxcnAxeTLCSuADcCr5J1jHHBpSmlVJ8UpdRseK9Vl+UvqahFxGfBISunXJeOeAj6aUvpN10emfdXem/mOA/6U3Dfg4cAO4AHgtpTS1k6JUOqGPFaqy/KX1JUi4mCgD7nJRVNilYquKt8N/D8fztY9tadGuW9K6fVOjkfq9jxWqsvyl9TVKh4yUkNOlFNJv8rqhtrcRrmlL56I6BMRV3RcSFL35rFSXZa/pK6W3rQ7pdTYlCR73un+2lSjHBGjgOvJDdRXASuLv88AI4C5KaUTOjFOqVvwWKkuy19SV2vDeeefU0p11YtQ+6Kt3cOdBJwLfAl4FzADGAYMAN4BPNop0Undj8dKdVn+krqa550erK2J8i7gxpTSlc1HRMRM4BMdGpXUfXmsVJflL6mred7pwdqaKD8OrImIwSmllyOiD7A7pdQIbAV+2GkRSt2Lx0p1Wf6SuprnnR6sXd3DvWXGiEOBnSml1zo2JKln8VipLstfUlfzvNNztOfJfABERNM8nwB+v2PDkXoOj5XqsvwldTXPOz1PuxLlop/ApuYaM4CDKoZLKnisVJflL6mred7pmdqUKDd9yEUfgU19lD4NPNdZgUndkcdKdVn+krqa552erT1P5hsM/B7wGvkRjctSSts6MTapW/JYqS7LX1JX87zTc7X1gSN/BrwHCOD95M60VwI/AP7DxzRKmcdKdVn+krqa552erdWmFxFxCPA54MfAzcCtwG+BnwDXAmd3ZoBSd+GxUl2Wv6Su5nmn52u1RjkixgJ3p5ROKv7vD/xnSmlSRBxdjHt354cq7d88VqrL8pfU1Tzv9HxteeDIZmBhRPwDsBgYBzxcjBsBbOmk2KTuxmOluix/SV3N804P12rTi5TSRuCrwKvAROB14H8WowcC/9lp0UndiMdKdVn+krqa552er11P5ouI3imlXcX7sIG6VM5jpbosf0ldzfNOz7TXj7AGiIgx5Ec0ruqogKSeyGOluix/SV3N807P0Jab+aYCdeR2OJuAl4EdKaUlEXE7sDCl9PedHqm0n/NYqS7LX1JX87zT87XlZr7ZQC/yU2YOK973johNwAeAf+u88KRuxWOluix/SV3N804P15ZEeTi5P8AfAIcABwMDyHdynges7bTopO7FY6W6LH9JXc3zTg/XlkT5r4CXUkpve2Z5RDwLrOvwqKTuyWOluix/SV3N804Pt08380mSJEk9VVtqlImIc4CTgO3k55c/AyxNKb3cibFJ3Y7HSnVZ/pK6muednm2PNcoRcSjwJXLj9O3ASPKTZg4CHgeuLTrblg5oHivVZflL6mqedw4MrdUoHwOcCvxeSqmxaWBE9AH+Gvgn4M86Lzyp2/BYqS7LX1JX87xzAGjtEdaDgF3AsMqBKaWdwC+L8ZI8VqrN8pfU1TzvHABaq1F+ErgVuD4i1gMbgN8B/YFpwM87Nzyp2/BYqS7LX1JX87xzAGjLk/l6AxcAJ5D7BjwGWAPcmlJ6sNMjlLoJj5XqsvwldTXPOz1fazfzHQ18CjiU/Cvp+ymlF4pxU4HtKaWnuiJQaX/msVJdlr+kruZ558DQWhvlzxbT3Ed+4sy3I+JPinGfBE7uxNik7sRjpbosf0ldzfPOAaC1NsoTgL9MKT0J3BMRlwKfjojFQD/y5QVJHivVZvlL6mqedw4ArdUo9yL3C0hE9EopfYf8TPMvkrtE+V3nhid1Gx4r1WX5S+pqnncOAK0lylcBLwKklHZHRO+U0jeBXwHDgc2dHJ/UXXisVJflL6mred45ALSl14tIFRM1/R8Rx6aUVnR6hFI34bFSXZa/pK7meafnazVRliRJkg5ErTW9kCRJkg5IJsqSJElSCRNlSZIkqYSJsiRJklTCRFmSJEkq8f8BVXTZAvYaFzwAAAAASUVORK5CYII=\n" + "image/png": "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1tZOqKurG//www/3BdiwYUOPGTNmvGHcuHEnz5kzZ3RKr3YGX3/99YMnTpx40vjx4yecd955o+vrX9vJ3NDQwK9//esBH/rQh54HuOiii7b+7Gc/O7qtcZsoS5IkqUNdcMEF226++eZBe/fujeXLl/ebPn36nsayefPmjayrq9u7atWqJ6666qp1c+fOPQHgsssuGzl9+vTdq1ev/u1ZZ521ff369b0BHnvssSNuu+22wYsXL16xYsWKJ2pqatINN9wwpLy+jRs39hwwYMArvXr1AmDMmDEvb9y4sXdb4zZRliRJUoeaOnXqC2vXru1z4403Dp45c+aOctkjjzwy4OKLL94KMHv27F3bt2/vuW3btpqHHnpowEUXXbQV4Nxzz90xcODAVwDuvvvuAcuWLetXV1d30vjx4yc88MADA9esWdOnI+L2ZD5JkiR1uFmzZm2/4oorjrv33ntXbtq06YBz0JRSnHPOOVuvu+66dc29Zvjw4fW7du3qsW/fPnr16sVTTz3Ve/jw4S+3dV32KEuSJKnDXXLJJVsuvfTS50499dQXytOnTp26a8GCBUMAFi1aNGDQoEH1gwcPbpg2bdquhQsXDgG45ZZbBu7cubMHwKxZs3YuWrRo0Lp163pCHuO8atWq1wyrqKmpYdq0absWLFgwCOAHP/jBkDPPPHN7W2M2UZYkSTpMDBlCqy6t1hHLGzt27L758+dvajr92muvfW7JkiX9amtrJ1x++eWjFi5c+CTANddc89yDDz7Yf9y4cSfffvvtg0aMGPEywOTJk1+cP3/+utNPP722trZ2wjve8Y7aZ599tlfT5X71q19d++1vf/vY448//pTnn3++56c+9aktbX1/UT6DsK2mTJmSFi9efMDzS5IkdUcR8WhKaUq141i6dOlTdXV1bU4QDydLly4dWldXN6ZSmT3KkiRJUgUmypIkSVIFJsqSJElSBSbKkiRJUgUHlSjv6/C7dEuSJEnVcVA3HHn8cYhor1Ck7uvAry2jdvFjD1SSpLZz6IUkSdLhYih1BJPb7TGUupZWGRGT3/ve957Q+Hzfvn0MGjSo7u1vf/u4toQ+atSoievXr291J+8Xv/jFYccff/wpETG5LfOVmShLkiQdLrYe3GiCA1le3759G1auXNl39+7dAXDHHXcMHD58eIcP4D3ttNN233fffatGjhzZ5ltXNzJRliRJUoeaOXPmjltvvfVogJtuumnw2Wefva2xbOPGjT1mzpw5tra2dkJdXd34hx9+uC/Ahg0besyYMeMN48aNO3nOnDmjyzfJu/766wdPnDjxpPHjx08477zzRtfX/+ENAmfMmPHCiSeeeMBJMpgoS5IkqYNdcMEF226++eZBe/fujeXLl/ebPn36nsayefPmjayrq9u7atWqJ6666qp1c+fOPQHgsssuGzl9+vTdq1ev/u1ZZ521ff369b0BHnvssSNuu+22wYsXL16xYsWKJ2pqatINN9wwpCPiNlGWJElSh5o6deoLa9eu7XPjjTcOnjlz5o5y2SOPPDLg4osv3gowe/bsXdu3b++5bdu2moceemjARRddtBXg3HPP3TFw4MBXAO6+++4By5Yt61dXV3fS+PHjJzzwwAMD16xZ06cj4m7fcSqSJElSBbNmzdp+xRVXHHfvvfeu3LRp0wHnoCmlOOecc7Zed91169ozvkrsUZYkSVKHu+SSS7Zceumlz5166qkvlKdPnTp114IFC4YALFq0aMCgQYPqBw8e3DBt2rRdCxcuHAJwyy23DNy5c2cPgFmzZu1ctGjRoHXr1vWEPMZ51apVvTsiZhNlSZKkw8UQ/vCst05a3tixY/fNnz9/U9Pp11577XNLlizpV1tbO+Hyyy8ftXDhwicBrrnmmucefPDB/uPGjTv59ttvHzRixIiXASZPnvzi/Pnz151++um1tbW1E97xjnfUPvvss72aLvfqq68+Zvjw4W/cuHFj77q6uglz5swZ3da3F+UzCNs8c0xJsPiA55cOF95wpMq84YikThbn82hKaUq141i6dOlTdXV1W6odx6Fs6dKlQ+vq6sZUKrNHWZIkSarARFmSJEmqwERZkiRJqsBEWZIkSarARFmSJEmqwERZkiRJqsA780mSJB0ubhtax8tb2y//6z2knv+yZen+XhIRk2fPnr3trrvuehJg3759HHPMMXWTJk3ac//9969u7apGjRo1cfHixctHjBjRqms3z549+4THH3/8yF69eqVJkybt+dGPfvR0nz592nTFVnuUJUmSDhftmSS3cnl9+/ZtWLlyZd/du3cHwB133DFw+PDh+9o1jgrOP//8bWvWrFm2cuXK37744ovxjW98Y2hbl2GiLEmSpA41c+bMHbfeeuvRADfddNPgs88+e1tj2caN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\n", + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" @@ -1362,7 +1646,9 @@ }, { "data": { - "text/plain": "''" + "text/plain": [ + "''" + ] }, "execution_count": 30, "metadata": {}, @@ -1371,36 +1657,142 @@ ], "source": [ "mode_results_parsed.plot()" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", - "source": [ - "Lastly, we can combine the information from the RMS and ModeId features to display a boxplot of the \"RMS\" for each one of the operating modes.\n", - "\n", - "First, we merge the \"RMS\" and \"ModeId\" dataframes." - ], "metadata": { - "collapsed": false, "pycharm": { "name": "#%% md\n" } - } + }, + "source": [ + "Lastly, we can combine the information from the RMS and ModeId features to display a boxplot of the \"RMS\" for each one of the operating modes.\n", + "\n", + "First, we merge the \"RMS\" and \"ModeId\" dataframes." + ] }, { "cell_type": "code", "execution_count": 31, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { - "text/plain": " timestamps rms rms_dc dc utilization labels uncertain \\\n0 1570186860 0.647086 0.662108 -0.140237 1 0 False \n1 1570273260 0.647123 0.662183 -0.140420 1 0 False \n2 1570359660 0.646619 0.661652 -0.140239 1 0 False \n3 1570446060 0.646873 0.661923 -0.140347 1 0 False \n4 1570532460 0.646643 0.661714 -0.140423 1 0 False \n\n mode_probability Date \n0 0.001262 2019-10-04 11:01:00 \n1 0.001833 2019-10-05 11:01:00 \n2 0.000154 2019-10-06 11:01:00 \n3 0.000546 2019-10-07 11:01:00 \n4 0.000025 2019-10-08 11:01:00 ", - "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
timestampsrmsrms_dcdcutilizationlabelsuncertainmode_probabilityDate
015701868600.6470860.662108-0.14023710False0.0012622019-10-04 11:01:00
115702732600.6471230.662183-0.14042010False0.0018332019-10-05 11:01:00
215703596600.6466190.661652-0.14023910False0.0001542019-10-06 11:01:00
315704460600.6468730.661923-0.14034710False0.0005462019-10-07 11:01:00
415705324600.6466430.661714-0.14042310False0.0000252019-10-08 11:01:00
\n
" + "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", + "
timestampsrmsrms_dcdcutilizationlabelsuncertainmode_probabilityDate
015701868600.6470860.662108-0.14023710False0.0012622019-10-04 11:01:00
115702732600.6471230.662183-0.14042010False0.0018332019-10-05 11:01:00
215703596600.6466190.661652-0.14023910False0.0001542019-10-06 11:01:00
315704460600.6468730.661923-0.14034710False0.0005462019-10-07 11:01:00
415705324600.6466430.661714-0.14042310False0.0000252019-10-08 11:01:00
\n", + "
" + ], + "text/plain": [ + " timestamps rms rms_dc dc utilization labels uncertain \\\n", + "0 1570186860 0.647086 0.662108 -0.140237 1 0 False \n", + "1 1570273260 0.647123 0.662183 -0.140420 1 0 False \n", + "2 1570359660 0.646619 0.661652 -0.140239 1 0 False \n", + "3 1570446060 0.646873 0.661923 -0.140347 1 0 False \n", + "4 1570532460 0.646643 0.661714 -0.140423 1 0 False \n", + "\n", + " mode_probability Date \n", + "0 0.001262 2019-10-04 11:01:00 \n", + "1 0.001833 2019-10-05 11:01:00 \n", + "2 0.000154 2019-10-06 11:01:00 \n", + "3 0.000546 2019-10-07 11:01:00 \n", + "4 0.000025 2019-10-08 11:01:00 " + ] }, "execution_count": 31, "metadata": {}, @@ -1410,26 +1802,19 @@ "source": [ "df_u0001 = pd.merge_asof(df_rms, df_mode, on=\"timestamps\")\n", "df_u0001.head()" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", - "source": [ - "The MVG library provides additional visualization functions that can help towards this goal.\n", - "Thus, we import the visualization module" - ], "metadata": { - "collapsed": false, "pycharm": { "name": "#%% md\n" } - } + }, + "source": [ + "The MVG library provides additional visualization functions that can help towards this goal.\n", + "Thus, we import the visualization module" + ] }, { "cell_type": "code", @@ -1450,15 +1835,14 @@ }, { "cell_type": "markdown", - "source": [ - "Now, we can proceed to plot the boxplot." - ], "metadata": { - "collapsed": false, "pycharm": { "name": "#%% md\n" } - } + }, + "source": [ + "Now, we can proceed to plot the boxplot." + ] }, { "cell_type": "code", @@ -1475,7 +1859,9 @@ "outputs": [ { "data": { - "text/plain": "" + "text/plain": [ + "" + ] }, "execution_count": 33, "metadata": {}, @@ -1483,8 +1869,10 @@ }, { "data": { - "text/plain": "
", - "image/png": "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\n" + "image/png": "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\n", + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" @@ -1520,7 +1908,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.8.10" }, "toc": { "base_numbering": 1, @@ -1567,4 +1955,4 @@ }, "nbformat": 4, "nbformat_minor": 1 -} \ No newline at end of file +} diff --git a/docs/source/content/examples/check_version.ipynb b/docs/source/content/examples/check_version.ipynb index 6e82d92d..fd9ca65b 100644 --- a/docs/source/content/examples/check_version.ipynb +++ b/docs/source/content/examples/check_version.ipynb @@ -92,8 +92,8 @@ "output_type": "stream", "text": [ "Checking versions for:https://api.beta.multiviz.com\n", - "mvg version: 0.7.1\n", - "Highest tested API version: 0.1.12\n" + "mvg version: 0.9.0\n", + "Highest tested API version: 0.2.0\n" ] } ], @@ -120,7 +120,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.8.10" }, "toc": { "base_numbering": 1, @@ -167,4 +167,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/docs/source/content/examples/error_handling.ipynb b/docs/source/content/examples/error_handling.ipynb index 4cf5ccf0..bbe8b515 100644 --- a/docs/source/content/examples/error_handling.ipynb +++ b/docs/source/content/examples/error_handling.ipynb @@ -27,6 +27,7 @@ "outputs": [], "source": [ "import json\n", + "import os\n", "import sys\n", "import logging\n", "from requests import HTTPError\n", @@ -55,7 +56,7 @@ }, "outputs": [], "source": [ - "TOKEN = \"NO TOKEN\" # replace with your token" + "TOKEN = os.environ[\"TEST_TOKEN\"] # replace with your token" ] }, { @@ -129,8 +130,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-03-18 11:13:44,009 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", - "2021-03-18 11:13:44,137 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"GET / HTTP/1.1\" 200 465\n" + "2021-09-22 19:53:10,807 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", + "2021-09-22 19:53:10,999 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"GET / HTTP/1.1\" 200 115\n" ] } ], @@ -165,16 +166,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-03-18 11:13:44,141 - INFO - mvg.mvg - Getting API info for: https://api.beta.multiviz.com\n", - "2021-03-18 11:13:44,143 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", - "2021-03-18 11:13:44,269 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"GET / HTTP/1.1\" 200 465\n" + "2021-09-22 19:53:11,007 - INFO - mvg.mvg - Getting API info for: https://api.beta.multiviz.com\n", + "2021-09-22 19:53:11,010 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", + "2021-09-22 19:53:11,193 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"GET / HTTP/1.1\" 200 115\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.0.13\"}, \"features\": {\"mode_id\": true, \"blacksheep\": false, \"emerging_mode\": false, \"on_off\": false, \"asset_type\": false, \"indicator_arrow\": false}, \"request_status\": [\"initialized\", \"accepted\", \"queued\", \"ongoing\", \"failed\", \"ready\"], \"traffic_limit\": 10000000, \"max_source_id_length\": 255, \"max_meta_size\": 50000, \"max_number_of_samples\": 400000, \"max_number_of_sources\": 100, \"max_number_of_measurements\": 1000, \"db_version\": \"1.0.0\"}\n" + "{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.2.0\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}\n" ] } ], @@ -206,8 +207,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-03-18 11:13:44,274 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", - "2021-03-18 11:13:44,393 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"GET / HTTP/1.1\" 200 465\n" + "2021-09-22 19:53:11,205 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", + "2021-09-22 19:53:11,394 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"GET / HTTP/1.1\" 200 115\n" ] } ], @@ -241,31 +242,17 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-03-18 11:13:44,398 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-18 11:13:44,399 - INFO - mvg.mvg - listing sources\n", - "2021-03-18 11:13:44,400 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - ">>> Provoke Unathorized call\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-03-18 11:13:44,544 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"GET /sources/ HTTP/1.1\" 401 25\n", - "2021-03-18 11:13:44,546 - DEBUG - mvg.mvg - 401 Client Error: Unauthorized for url: https://api.beta.multiviz.com/sources/\n", - "2021-03-18 11:13:44,546 - DEBUG - mvg.mvg - {\"detail\":\"Unauthorized\"}\n" + "2021-09-22 19:53:11,405 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 19:53:11,407 - INFO - mvg.mvg - listing sources\n", + "2021-09-22 19:53:11,409 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", + "2021-09-22 19:53:11,598 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"GET /sources/ HTTP/1.1\" 401 25\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + ">>> Provoke Unathorized call\n", "OUCH\n", "401 Client Error: Unauthorized for url: https://api.beta.multiviz.com/sources/\n" ] @@ -312,41 +299,27 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-03-18 11:13:44,551 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-18 11:13:44,551 - INFO - mvg.mvg - creating source with source id=illegal%name\n", - "2021-03-18 11:13:44,552 - INFO - mvg.mvg - metadata: {}\n", - "2021-03-18 11:13:44,553 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - ">>> Provoke illegal source Id name\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-03-18 11:13:44,683 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"POST /sources/ HTTP/1.1\" 401 25\n", - "2021-03-18 11:13:44,684 - DEBUG - mvg.mvg - 401 Client Error: Unauthorized for url: https://api.beta.multiviz.com/sources/\n", - "2021-03-18 11:13:44,685 - DEBUG - mvg.mvg - {\"detail\":\"Unauthorized\"}\n" + "2021-09-22 19:53:11,611 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 19:53:11,614 - INFO - mvg.mvg - creating source with source id=illegal%name\n", + "2021-09-22 19:53:11,616 - INFO - mvg.mvg - metadata: {}\n", + "2021-09-22 19:53:11,619 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", + "2021-09-22 19:53:11,797 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"POST /sources/ HTTP/1.1\" 422 120\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + ">>> Provoke illegal source Id name\n", "OUCH\n", - "401 Client Error: Unauthorized for url: https://api.beta.multiviz.com/sources/\n" + "422 Client Error: Unprocessable Entity for url: https://api.beta.multiviz.com/sources/\n" ] } ], "source": [ "try:\n", " print(\">>> Provoke illegal source Id name\")\n", - " session.create_source(\"illegal%name\", {})\n", + " session.create_source(\"illegal%name\", {}, channels=[\"acc\"])\n", "except HTTPError as exc:\n", " # As we have rouge token\n", " # We'll end up here\n", @@ -383,12 +356,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-03-18 11:13:44,689 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-18 11:13:44,689 - INFO - mvg.mvg - creating measurement from source id=\n", - "2021-03-18 11:13:44,690 - INFO - mvg.mvg - duration: -3\n", - "2021-03-18 11:13:44,690 - INFO - mvg.mvg - timestamp: -5\n", - "2021-03-18 11:13:44,691 - INFO - mvg.mvg - meta data: {}\n", - "2021-03-18 11:13:44,692 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n" + "2021-09-22 19:53:11,808 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 19:53:11,809 - INFO - mvg.mvg - creating measurement from source id=\n", + "2021-09-22 19:53:11,812 - INFO - mvg.mvg - duration: -3\n" ] }, { @@ -402,9 +372,10 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-03-18 11:13:44,825 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"POST /sources//measurements HTTP/1.1\" 404 22\n", - "2021-03-18 11:13:44,826 - DEBUG - mvg.mvg - 404 Client Error: Not Found for url: https://api.beta.multiviz.com/sources//measurements\n", - "2021-03-18 11:13:44,827 - DEBUG - mvg.mvg - {\"detail\":\"Not Found\"}\n" + "2021-09-22 19:53:11,815 - INFO - mvg.mvg - timestamp: -5\n", + "2021-09-22 19:53:11,816 - INFO - mvg.mvg - meta data: {}\n", + "2021-09-22 19:53:11,820 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", + "2021-09-22 19:53:11,991 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"POST /sources//measurements HTTP/1.1\" 404 22\n" ] }, { @@ -458,12 +429,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-03-18 11:13:44,832 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-03-18 11:13:44,832 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-03-18 11:13:44,833 - INFO - mvg.mvg - duration: -3\n", - "2021-03-18 11:13:44,833 - INFO - mvg.mvg - timestamp: -5\n", - "2021-03-18 11:13:44,834 - INFO - mvg.mvg - meta data: {}\n", - "2021-03-18 11:13:44,835 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n" + "2021-09-22 19:53:12,003 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 19:53:12,005 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 19:53:12,007 - INFO - mvg.mvg - duration: -3\n", + "2021-09-22 19:53:12,008 - INFO - mvg.mvg - timestamp: -5\n", + "2021-09-22 19:53:12,008 - INFO - mvg.mvg - meta data: {}\n" ] }, { @@ -477,25 +447,24 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-03-18 11:13:44,964 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"POST /sources/u0001/measurements HTTP/1.1\" 401 25\n", - "2021-03-18 11:13:44,966 - DEBUG - mvg.mvg - 401 Client Error: Unauthorized for url: https://api.beta.multiviz.com/sources/u0001/measurements\n", - "2021-03-18 11:13:44,966 - DEBUG - mvg.mvg - {\"detail\":\"Unauthorized\"}\n" + "2021-09-22 19:53:12,012 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", + "2021-09-22 19:53:12,206 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"POST /sources/u0001/measurements HTTP/1.1\" 422 101\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "401 Client Error: Unauthorized for url: https://api.beta.multiviz.com/sources/u0001/measurements\n", + "422 Client Error: Unprocessable Entity for url: https://api.beta.multiviz.com/sources/u0001/measurements\n", "Details on error\n", - "{'detail': 'Unauthorized'}\n" + "{'detail': [{'loc': ['body', 0, 'timestamp'], 'msg': 'Timestamp cannot be negative', 'type': 'value_error'}]}\n" ] } ], "source": [ "try:\n", " print(\">>> Parameter value out of range\")\n", - " d = [1, 2, 3]\n", + " d = {\"acc\": [1, 2, 3]}\n", " session.create_measurement(sid=\"u0001\",\n", " duration=-3,\n", " timestamp=-5,\n", @@ -570,7 +539,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.8.10" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/sources_and_measurements.ipynb b/docs/source/content/examples/sources_and_measurements.ipynb index 44fbbc36..a927c664 100644 --- a/docs/source/content/examples/sources_and_measurements.ipynb +++ b/docs/source/content/examples/sources_and_measurements.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "knowing-literacy", "metadata": {}, "source": [ "# Sources and Measurements Example\n", @@ -12,6 +13,7 @@ { "cell_type": "code", "execution_count": 1, + "id": "front-height", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.678492Z", @@ -36,6 +38,7 @@ }, { "cell_type": "markdown", + "id": "subsequent-guinea", "metadata": { "ExecuteTime": { "end_time": "2021-03-04T14:04:45.710183Z", @@ -52,6 +55,7 @@ { "cell_type": "code", "execution_count": 2, + "id": "national-gallery", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.681622Z", @@ -66,6 +70,7 @@ }, { "cell_type": "markdown", + "id": "illegal-great", "metadata": {}, "source": [ "This is Viking Analytics default logging setup which can be adapted to suit your needs.\n", @@ -75,6 +80,7 @@ { "cell_type": "code", "execution_count": 3, + "id": "meaning-backing", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.688245Z", @@ -93,6 +99,7 @@ }, { "cell_type": "markdown", + "id": "awful-graduation", "metadata": {}, "source": [ "## Downloading the Data\n", @@ -104,6 +111,7 @@ { "cell_type": "code", "execution_count": 4, + "id": "cubic-infection", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.800754Z", @@ -112,10 +120,10 @@ }, "outputs": [ { - "name": "stderr", + "name": "stdout", "output_type": "stream", "text": [ - "fatal: destination path 'va-data-charlie' already exists and is not an empty directory.\n" + "fatal: destination path 'va-data-charlie' already exists and is not an empty directory.\r\n" ] } ], @@ -125,6 +133,7 @@ }, { "cell_type": "markdown", + "id": "ordered-experience", "metadata": {}, "source": [ "We are going to use six of the sources from the charlie dataset with IDs `u0001` to `u0006`." @@ -133,6 +142,7 @@ { "cell_type": "code", "execution_count": 5, + "id": "occupational-paradise", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.804606Z", @@ -147,6 +157,7 @@ }, { "cell_type": "markdown", + "id": "governmental-biodiversity", "metadata": {}, "source": [ "## Connect to the API\n", @@ -158,6 +169,7 @@ { "cell_type": "code", "execution_count": 6, + "id": "gross-tribune", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.957584Z", @@ -172,6 +184,7 @@ }, { "cell_type": "markdown", + "id": "vulnerable-costume", "metadata": {}, "source": [ "We now check if the server is alive. The hello message contains, amongst others the API version." @@ -180,6 +193,7 @@ { "cell_type": "code", "execution_count": 7, + "id": "pressing-product", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.111625Z", @@ -191,14 +205,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-07-13 19:29:54,775 - INFO - mvg.mvg - Getting API info for: https://api.beta.multiviz.com\n" + "2021-09-22 20:11:08,132 - INFO - mvg.mvg - Getting API info for: https://api.beta.multiviz.com\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.1.14\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}\n" + "{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.2.0\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}\n" ] } ], @@ -209,6 +223,7 @@ }, { "cell_type": "markdown", + "id": "assumed-radical", "metadata": {}, "source": [ "## Check Database\n", @@ -223,7 +238,8 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, + "id": "timely-template", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.247583Z", @@ -235,10 +251,10 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:38:17,928 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:38:17,929 - INFO - mvg.mvg - listing sources\n", - "2021-06-24 11:38:18,147 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:38:18,148 - INFO - mvg.mvg - retrieving source with source id=u0001\n" + "2021-09-22 20:11:08,315 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:08,318 - INFO - mvg.mvg - listing sources\n", + "2021-09-22 20:11:08,490 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:08,491 - INFO - mvg.mvg - retrieving source with source id=u0001\n" ] }, { @@ -246,8 +262,8 @@ "output_type": "stream", "text": [ "Retrieved sources\n", - "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform'}}\n", - "Source info retrieved for one source: {'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform'}}\n" + "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "Source info retrieved for one source: {'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n" ] } ], @@ -266,6 +282,7 @@ }, { "cell_type": "markdown", + "id": "capital-aviation", "metadata": {}, "source": [ "The example below revolves around a source with source id u0001" @@ -273,7 +290,8 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, + "id": "preceding-utilization", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.250783Z", @@ -287,6 +305,7 @@ }, { "cell_type": "markdown", + "id": "informative-creature", "metadata": {}, "source": [ "To make sure we start from a clean slate we delete our resource in case it exists." @@ -294,7 +313,8 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, + "id": "sorted-nothing", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.408675Z", @@ -306,10 +326,10 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:39:00,051 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:39:00,053 - INFO - mvg.mvg - retrieving source with source id=u0001\n", - "2021-06-24 11:39:00,281 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:39:00,282 - INFO - mvg.mvg - deleting source with source id=u0001\n" + "2021-09-22 20:11:08,690 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:08,691 - INFO - mvg.mvg - retrieving source with source id=u0001\n", + "2021-09-22 20:11:08,881 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:08,881 - INFO - mvg.mvg - deleting source with source id=u0001\n" ] }, { @@ -331,6 +351,7 @@ }, { "cell_type": "markdown", + "id": "clinical-detective", "metadata": {}, "source": [ "## Build measurements\n", @@ -340,7 +361,8 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, + "id": "private-support", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.413080Z", @@ -368,6 +390,7 @@ }, { "cell_type": "markdown", + "id": "assured-monroe", "metadata": {}, "source": [ "Create the source and check for it" @@ -375,7 +398,8 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, + "id": "hairy-latin", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.688070Z", @@ -387,11 +411,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:39:28,004 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:39:28,006 - INFO - mvg.mvg - creating source with source id=u0001\n", - "2021-06-24 11:39:28,008 - INFO - mvg.mvg - metadata: {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}\n", - "2021-06-24 11:39:28,231 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:39:28,231 - INFO - mvg.mvg - retrieving source with source id=u0001\n" + "2021-09-22 20:11:09,108 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:09,110 - INFO - mvg.mvg - creating source with source id=u0001\n", + "2021-09-22 20:11:09,111 - INFO - mvg.mvg - metadata: {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}\n", + "2021-09-22 20:11:09,288 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:09,289 - INFO - mvg.mvg - retrieving source with source id=u0001\n" ] }, { @@ -399,12 +423,12 @@ "output_type": "stream", "text": [ "Retrieved\n", - "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform'}}\n" + "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n" ] } ], "source": [ - "session.create_source(SOURCE_ID, meta) # create\n", + "session.create_source(SOURCE_ID, meta, channels=[\"acc\"]) # create\n", "source = session.get_source(SOURCE_ID)\n", "print(\"Retrieved\")\n", "print(source)" @@ -412,6 +436,7 @@ }, { "cell_type": "markdown", + "id": "standing-league", "metadata": {}, "source": [ "Update the source" @@ -419,7 +444,8 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, + "id": "blocked-fairy", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.983670Z", @@ -431,11 +457,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:40:00,900 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:40:00,901 - INFO - mvg.mvg - updating source with source id=u0001\n", - "2021-06-24 11:40:00,902 - INFO - mvg.mvg - metadata: {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}\n", - "2021-06-24 11:40:01,117 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:40:01,117 - INFO - mvg.mvg - retrieving source with source id=u0001\n" + "2021-09-22 20:11:09,473 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:09,475 - INFO - mvg.mvg - updating source with source id=u0001\n", + "2021-09-22 20:11:09,476 - INFO - mvg.mvg - metadata: {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}\n", + "2021-09-22 20:11:09,654 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:09,655 - INFO - mvg.mvg - retrieving source with source id=u0001\n" ] }, { @@ -443,7 +469,7 @@ "output_type": "stream", "text": [ "Retrieved\n", - "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}, 'properties': {'data_class': 'waveform'}}\n" + "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n" ] } ], @@ -457,6 +483,7 @@ }, { "cell_type": "markdown", + "id": "considered-former", "metadata": {}, "source": [ "Upload measurements to source. Measurements are tied to sources, they consist of\n", @@ -469,7 +496,8 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, + "id": "original-colombia", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.986967Z", @@ -478,12 +506,12 @@ }, "outputs": [], "source": [ - "meas = {f.split(\".\")[0] for f in os.listdir(src_path)}\n", - "meas.remove(\"meta\")" + "meas = [f.stem for f in Path(src_path).glob(\"*.csv\")]" ] }, { "cell_type": "markdown", + "id": "friendly-mustang", "metadata": {}, "source": [ "`meas` now contains a list of timestamps representing the measurements in our repo we upload from iterate over all of them." @@ -491,7 +519,8 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, + "id": "endangered-beaver", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:15.657580Z", @@ -503,11 +532,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:40:21,485 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:40:21,485 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:40:21,486 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:40:21,486 - INFO - mvg.mvg - timestamp: 1573732860\n", - "2021-06-24 11:40:21,487 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:09,897 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:09,898 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:09,899 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:09,900 - INFO - mvg.mvg - timestamp: 1570186860\n", + "2021-09-22 20:11:09,901 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -516,18 +545,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573732860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570186860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:40:30,068 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:40:30,068 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:40:30,069 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:40:30,069 - INFO - mvg.mvg - timestamp: 1571655660\n", - "2021-06-24 11:40:30,069 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:10,840 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:10,841 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:10,842 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:10,842 - INFO - mvg.mvg - timestamp: 1570273260\n", + "2021-09-22 20:11:10,843 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -536,18 +565,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571655660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570273260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:40:37,684 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:40:37,685 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:40:37,685 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:40:37,686 - INFO - mvg.mvg - timestamp: 1572523260\n", - "2021-06-24 11:40:37,686 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:11,835 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:11,836 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:11,837 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:11,837 - INFO - mvg.mvg - timestamp: 1570359660\n", + "2021-09-22 20:11:11,838 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -556,18 +585,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572523260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570359660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:40:44,673 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:40:44,673 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:40:44,674 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:40:44,674 - INFO - mvg.mvg - timestamp: 1571569260\n", - "2021-06-24 11:40:44,674 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:12,961 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:12,962 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:12,962 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:12,963 - INFO - mvg.mvg - timestamp: 1570446060\n", + "2021-09-22 20:11:12,964 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -576,18 +605,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571569260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570446060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:40:51,339 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:40:51,339 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:40:51,340 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:40:51,340 - INFO - mvg.mvg - timestamp: 1572177660\n", - "2021-06-24 11:40:51,341 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:13,965 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:13,967 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:13,968 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:13,969 - INFO - mvg.mvg - timestamp: 1570532460\n", + "2021-09-22 20:11:13,970 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -596,18 +625,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572177660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570532460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:40:58,270 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:40:58,271 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:40:58,272 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:40:58,273 - INFO - mvg.mvg - timestamp: 1570705260\n", - "2021-06-24 11:40:58,273 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:15,265 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:15,266 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:15,266 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:15,267 - INFO - mvg.mvg - timestamp: 1570618860\n", + "2021-09-22 20:11:15,268 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -616,18 +645,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570705260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570618860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:41:05,408 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:41:05,409 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:41:05,410 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:41:05,410 - INFO - mvg.mvg - timestamp: 1572868860\n", - "2021-06-24 11:41:05,411 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:16,233 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:16,234 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:16,234 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:16,235 - INFO - mvg.mvg - timestamp: 1570705260\n", + "2021-09-22 20:11:16,236 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -636,18 +665,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572868860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570705260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:41:14,509 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:41:14,509 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:41:14,510 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:41:14,512 - INFO - mvg.mvg - timestamp: 1570964460\n", - "2021-06-24 11:41:14,513 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:17,404 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:17,405 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:17,405 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:17,406 - INFO - mvg.mvg - timestamp: 1570791660\n", + "2021-09-22 20:11:17,407 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -656,18 +685,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570964460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570791660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:41:21,419 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:41:21,419 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:41:21,420 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:41:21,420 - INFO - mvg.mvg - timestamp: 1572955260\n", - "2021-06-24 11:41:21,421 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:18,439 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:18,440 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:18,440 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:18,441 - INFO - mvg.mvg - timestamp: 1570878060\n", + "2021-09-22 20:11:18,442 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -676,18 +705,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572955260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570878060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:41:28,289 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:41:28,290 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:41:28,290 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:41:28,291 - INFO - mvg.mvg - timestamp: 1571742060\n", - "2021-06-24 11:41:28,292 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:19,614 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:19,615 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:19,616 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:19,616 - INFO - mvg.mvg - timestamp: 1570964460\n", + "2021-09-22 20:11:19,617 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -696,18 +725,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571742060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570964460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:41:34,962 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:41:34,962 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:41:34,963 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:41:34,963 - INFO - mvg.mvg - timestamp: 1571482860\n", - "2021-06-24 11:41:34,964 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:20,683 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:20,683 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:20,684 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:20,685 - INFO - mvg.mvg - timestamp: 1571050860\n", + "2021-09-22 20:11:20,685 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -716,18 +745,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571482860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571050860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:41:46,427 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:41:46,428 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:41:46,429 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:41:46,429 - INFO - mvg.mvg - timestamp: 1574078460\n", - "2021-06-24 11:41:46,429 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:21,619 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:21,620 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:21,621 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:21,621 - INFO - mvg.mvg - timestamp: 1571137260\n", + "2021-09-22 20:11:21,623 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -736,18 +765,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574078460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571137260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:41:53,637 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:41:53,638 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:41:53,638 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:41:53,639 - INFO - mvg.mvg - timestamp: 1570618860\n", - "2021-06-24 11:41:53,639 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:22,552 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:22,553 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:22,553 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:22,554 - INFO - mvg.mvg - timestamp: 1571223660\n", + "2021-09-22 20:11:22,555 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -756,18 +785,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570618860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571223660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:42:00,511 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:42:00,511 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:42:00,512 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:42:00,512 - INFO - mvg.mvg - timestamp: 1572350460\n", - "2021-06-24 11:42:00,512 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:23,502 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:23,503 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:23,503 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:23,504 - INFO - mvg.mvg - timestamp: 1571310060\n", + "2021-09-22 20:11:23,505 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -776,18 +805,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572350460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571310060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:42:07,218 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:42:07,219 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:42:07,220 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:42:07,220 - INFO - mvg.mvg - timestamp: 1572264060\n", - "2021-06-24 11:42:07,221 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:24,447 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:24,447 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:24,448 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:24,449 - INFO - mvg.mvg - timestamp: 1571396460\n", + "2021-09-22 20:11:24,450 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -796,18 +825,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572264060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571396460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:42:14,329 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:42:14,330 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:42:14,330 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:42:14,330 - INFO - mvg.mvg - timestamp: 1573387260\n", - "2021-06-24 11:42:14,331 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:25,399 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:25,400 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:25,401 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:25,402 - INFO - mvg.mvg - timestamp: 1571482860\n", + "2021-09-22 20:11:25,404 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -816,18 +845,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573387260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571482860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:42:22,027 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:42:22,027 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:42:22,028 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:42:22,028 - INFO - mvg.mvg - timestamp: 1571914860\n", - "2021-06-24 11:42:22,028 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:26,359 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:26,360 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:26,361 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:26,362 - INFO - mvg.mvg - timestamp: 1571569260\n", + "2021-09-22 20:11:26,363 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -836,18 +865,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571914860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571569260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:42:29,935 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:42:29,935 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:42:29,936 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:42:29,937 - INFO - mvg.mvg - timestamp: 1570446060\n", - "2021-06-24 11:42:29,937 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:27,298 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:27,299 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:27,299 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:27,300 - INFO - mvg.mvg - timestamp: 1571655660\n", + "2021-09-22 20:11:27,301 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -856,18 +885,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570446060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571655660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:42:37,617 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:42:37,617 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:42:37,618 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:42:37,618 - INFO - mvg.mvg - timestamp: 1572087660\n", - "2021-06-24 11:42:37,619 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:28,243 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:28,244 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:28,245 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:28,246 - INFO - mvg.mvg - timestamp: 1571742060\n", + "2021-09-22 20:11:28,247 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -876,18 +905,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572087660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571742060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:42:44,402 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:42:44,402 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:42:44,403 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:42:44,403 - INFO - mvg.mvg - timestamp: 1573905660\n", - "2021-06-24 11:42:44,404 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:29,173 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:29,173 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:29,174 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:29,175 - INFO - mvg.mvg - timestamp: 1571828460\n", + "2021-09-22 20:11:29,175 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -896,18 +925,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573905660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571828460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:42:51,034 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:42:51,034 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:42:51,035 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:42:51,035 - INFO - mvg.mvg - timestamp: 1574164860\n", - "2021-06-24 11:42:51,035 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:30,173 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:30,174 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:30,174 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:30,175 - INFO - mvg.mvg - timestamp: 1571914860\n", + "2021-09-22 20:11:30,176 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -916,18 +945,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574164860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571914860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:42:57,718 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:42:57,719 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:42:57,719 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:42:57,720 - INFO - mvg.mvg - timestamp: 1573473660\n", - "2021-06-24 11:42:57,720 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:31,123 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:31,124 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:31,124 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:31,125 - INFO - mvg.mvg - timestamp: 1572001260\n", + "2021-09-22 20:11:31,126 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -936,18 +965,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573473660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572001260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:43:04,363 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:43:04,363 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:43:04,363 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:43:04,364 - INFO - mvg.mvg - timestamp: 1573560060\n", - "2021-06-24 11:43:04,364 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:32,150 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:32,151 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:32,152 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:32,154 - INFO - mvg.mvg - timestamp: 1572087660\n", + "2021-09-22 20:11:32,156 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -956,18 +985,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573560060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572087660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:43:11,654 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:43:11,654 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:43:11,654 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:43:11,655 - INFO - mvg.mvg - timestamp: 1570186860\n", - "2021-06-24 11:43:11,656 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:33,118 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:33,119 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:33,120 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:33,120 - INFO - mvg.mvg - timestamp: 1572177660\n", + "2021-09-22 20:11:33,121 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -976,18 +1005,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570186860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572177660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:43:18,770 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:43:18,770 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:43:18,771 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:43:18,771 - INFO - mvg.mvg - timestamp: 1571223660\n", - "2021-06-24 11:43:18,771 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:34,063 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:34,064 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:34,064 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:34,065 - INFO - mvg.mvg - timestamp: 1572264060\n", + "2021-09-22 20:11:34,066 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -996,18 +1025,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571223660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572264060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:43:25,797 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:43:25,797 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:43:25,798 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:43:25,798 - INFO - mvg.mvg - timestamp: 1572609660\n", - "2021-06-24 11:43:25,798 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:35,042 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:35,043 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:35,045 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:35,046 - INFO - mvg.mvg - timestamp: 1572350460\n", + "2021-09-22 20:11:35,048 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1016,18 +1045,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572609660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572350460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:43:32,909 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:43:32,910 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:43:32,910 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:43:32,911 - INFO - mvg.mvg - timestamp: 1573992060\n", - "2021-06-24 11:43:32,912 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:36,416 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:36,417 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:36,418 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:36,418 - INFO - mvg.mvg - timestamp: 1572436860\n", + "2021-09-22 20:11:36,419 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1036,18 +1065,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573992060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572436860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:43:41,382 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:43:41,383 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:43:41,384 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:43:41,384 - INFO - mvg.mvg - timestamp: 1574251260\n", - "2021-06-24 11:43:41,384 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:37,339 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:37,339 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:37,340 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:37,341 - INFO - mvg.mvg - timestamp: 1572523260\n", + "2021-09-22 20:11:37,341 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1056,18 +1085,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574251260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572523260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:43:48,526 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:43:48,527 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:43:48,527 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:43:48,528 - INFO - mvg.mvg - timestamp: 1572436860\n", - "2021-06-24 11:43:48,529 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:38,403 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:38,403 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:38,404 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:38,405 - INFO - mvg.mvg - timestamp: 1572609660\n", + "2021-09-22 20:11:38,405 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1076,18 +1105,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572436860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572609660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:43:55,431 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:43:55,432 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:43:55,432 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:43:55,433 - INFO - mvg.mvg - timestamp: 1573128060\n", - "2021-06-24 11:43:55,434 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:39,654 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:39,655 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:39,656 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:39,657 - INFO - mvg.mvg - timestamp: 1572696060\n", + "2021-09-22 20:11:39,657 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1096,18 +1125,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573128060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572696060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:44:02,167 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:44:02,168 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:44:02,168 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:44:02,169 - INFO - mvg.mvg - timestamp: 1573041660\n", - "2021-06-24 11:44:02,169 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:40,611 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:40,612 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:40,613 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:40,615 - INFO - mvg.mvg - timestamp: 1572782460\n", + "2021-09-22 20:11:40,617 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1116,18 +1145,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573041660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572782460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:44:08,878 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:44:08,879 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:44:08,880 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:44:08,880 - INFO - mvg.mvg - timestamp: 1573214460\n", - "2021-06-24 11:44:08,880 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:41,597 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:41,598 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:41,599 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:41,599 - INFO - mvg.mvg - timestamp: 1572868860\n", + "2021-09-22 20:11:41,600 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1136,18 +1165,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573214460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572868860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:44:15,720 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:44:15,721 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:44:15,722 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:44:15,722 - INFO - mvg.mvg - timestamp: 1571396460\n", - "2021-06-24 11:44:15,723 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:42,534 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:42,534 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:42,535 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:42,536 - INFO - mvg.mvg - timestamp: 1572955260\n", + "2021-09-22 20:11:42,537 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1156,18 +1185,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571396460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572955260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:44:22,277 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:44:22,277 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:44:22,278 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:44:22,278 - INFO - mvg.mvg - timestamp: 1573819260\n", - "2021-06-24 11:44:22,279 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:43,463 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:43,464 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:43,465 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:43,465 - INFO - mvg.mvg - timestamp: 1573041660\n", + "2021-09-22 20:11:43,466 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1176,18 +1205,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573819260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573041660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:44:29,886 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:44:29,886 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:44:29,887 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:44:29,887 - INFO - mvg.mvg - timestamp: 1570359660\n", - "2021-06-24 11:44:29,888 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:44,414 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:44,414 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:44,415 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:44,416 - INFO - mvg.mvg - timestamp: 1573128060\n", + "2021-09-22 20:11:44,417 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1196,18 +1225,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570359660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573128060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:44:36,749 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:44:36,749 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:44:36,750 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:44:36,750 - INFO - mvg.mvg - timestamp: 1572001260\n", - "2021-06-24 11:44:36,751 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:45,348 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:45,348 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:45,349 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:45,349 - INFO - mvg.mvg - timestamp: 1573214460\n", + "2021-09-22 20:11:45,350 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1216,18 +1245,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572001260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573214460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:44:45,569 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:44:45,570 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:44:45,571 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:44:45,571 - INFO - mvg.mvg - timestamp: 1570532460\n", - "2021-06-24 11:44:45,572 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:46,315 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:46,316 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:46,317 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:46,318 - INFO - mvg.mvg - timestamp: 1573300860\n", + "2021-09-22 20:11:46,319 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1236,18 +1265,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570532460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573300860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:44:53,245 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:44:53,245 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:44:53,245 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:44:53,246 - INFO - mvg.mvg - timestamp: 1572782460\n", - "2021-06-24 11:44:53,246 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:47,265 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:47,266 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:47,267 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:47,267 - INFO - mvg.mvg - timestamp: 1573387260\n", + "2021-09-22 20:11:47,268 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1256,18 +1285,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572782460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573387260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:44:59,769 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:44:59,769 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:44:59,769 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:44:59,770 - INFO - mvg.mvg - timestamp: 1574424060\n", - "2021-06-24 11:44:59,771 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:48,197 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:48,197 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:48,198 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:48,199 - INFO - mvg.mvg - timestamp: 1573473660\n", + "2021-09-22 20:11:48,199 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1276,18 +1305,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574424060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573473660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:45:12,006 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:45:12,007 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:45:12,007 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:45:12,008 - INFO - mvg.mvg - timestamp: 1571137260\n", - "2021-06-24 11:45:12,008 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:49,133 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:49,134 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:49,134 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:49,135 - INFO - mvg.mvg - timestamp: 1573560060\n", + "2021-09-22 20:11:49,136 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1296,18 +1325,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571137260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573560060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:45:21,792 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:45:21,792 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:45:21,793 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:45:21,793 - INFO - mvg.mvg - timestamp: 1571828460\n", - "2021-06-24 11:45:21,794 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:50,062 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:50,063 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:50,064 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:50,065 - INFO - mvg.mvg - timestamp: 1573646460\n", + "2021-09-22 20:11:50,066 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1316,18 +1345,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571828460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573646460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:45:30,858 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:45:30,859 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:45:30,859 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:45:30,859 - INFO - mvg.mvg - timestamp: 1574337660\n", - "2021-06-24 11:45:30,860 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:50,989 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:50,990 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:50,991 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:50,992 - INFO - mvg.mvg - timestamp: 1573732860\n", + "2021-09-22 20:11:50,993 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1336,18 +1365,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1574337660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573732860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:45:38,974 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:45:38,975 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:45:38,976 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:45:38,976 - INFO - mvg.mvg - timestamp: 1572696060\n", - "2021-06-24 11:45:38,977 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:51,919 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:51,920 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:51,920 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:51,921 - INFO - mvg.mvg - timestamp: 1573819260\n", + "2021-09-22 20:11:51,922 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1356,18 +1385,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1572696060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573819260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:45:48,035 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:45:48,036 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:45:48,037 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:45:48,037 - INFO - mvg.mvg - timestamp: 1573646460\n", - "2021-06-24 11:45:48,037 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:52,852 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:52,852 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:52,853 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:52,853 - INFO - mvg.mvg - timestamp: 1573905660\n", + "2021-09-22 20:11:52,854 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1376,18 +1405,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573646460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573905660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:45:57,660 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:45:57,660 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:45:57,661 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:45:57,661 - INFO - mvg.mvg - timestamp: 1571050860\n", - "2021-06-24 11:45:57,662 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:53,792 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:53,793 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:53,793 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:53,794 - INFO - mvg.mvg - timestamp: 1573992060\n", + "2021-09-22 20:11:53,795 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1396,18 +1425,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571050860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573992060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:46:10,735 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:46:10,735 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:46:10,736 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:46:10,737 - INFO - mvg.mvg - timestamp: 1570791660\n", - "2021-06-24 11:46:10,737 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:54,781 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:54,781 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:54,782 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:54,783 - INFO - mvg.mvg - timestamp: 1574078460\n", + "2021-09-22 20:11:54,783 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1416,18 +1445,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570791660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574078460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:46:20,178 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:46:20,179 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:46:20,180 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:46:20,180 - INFO - mvg.mvg - timestamp: 1570273260\n", - "2021-06-24 11:46:20,180 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:55,723 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:55,723 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:55,724 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:55,724 - INFO - mvg.mvg - timestamp: 1574164860\n", + "2021-09-22 20:11:55,725 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1436,18 +1465,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570273260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574164860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:46:26,829 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:46:26,830 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:46:26,830 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:46:26,830 - INFO - mvg.mvg - timestamp: 1573300860\n", - "2021-06-24 11:46:26,831 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:56,655 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:56,655 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:56,656 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:56,657 - INFO - mvg.mvg - timestamp: 1574251260\n", + "2021-09-22 20:11:56,657 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1456,18 +1485,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1573300860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574251260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:46:33,894 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:46:33,894 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:46:33,895 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:46:33,896 - INFO - mvg.mvg - timestamp: 1571310060\n", - "2021-06-24 11:46:33,896 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:57,599 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:57,600 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:57,600 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:57,601 - INFO - mvg.mvg - timestamp: 1574337660\n", + "2021-09-22 20:11:57,601 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1476,18 +1505,18 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1571310060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574337660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:46:41,245 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:46:41,246 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-06-24 11:46:41,247 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 11:46:41,247 - INFO - mvg.mvg - timestamp: 1570878060\n", - "2021-06-24 11:46:41,247 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:11:59,114 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:11:59,115 - INFO - mvg.mvg - creating measurement from source id=u0001\n", + "2021-09-22 20:11:59,117 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:11:59,118 - INFO - mvg.mvg - timestamp: 1574424060\n", + "2021-09-22 20:11:59,119 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1496,7 +1525,7 @@ "text": [ "Read 40000 samples\n", "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0001\\1570878060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574424060.csv\n" ] } ], @@ -1506,7 +1535,7 @@ " # samples file for one measurement\n", " TS_MEAS = str(m) + \".csv\" # filename\n", " TS_MEAS = REF_DB_PATH / SOURCE_ID / TS_MEAS # path to file\n", - " ts_df = pd.read_csv(TS_MEAS, names=['acc']) # read csv into df\n", + " ts_df = pd.read_csv(TS_MEAS) # read csv into df\n", " accs = ts_df.iloc[:, 0].tolist() # convert to list\n", " print(f\"Read {len(accs)} samples\")\n", "\n", @@ -1534,7 +1563,7 @@ " session.create_measurement(sid=SOURCE_ID,\n", " duration=duration,\n", " timestamp=m,\n", - " data=accs,\n", + " data={\"acc\": accs},\n", " meta=meta_info)\n", " except HTTPError as exc:\n", " print(\"OUCH\")\n", @@ -1543,6 +1572,7 @@ }, { "cell_type": "markdown", + "id": "fatty-certification", "metadata": {}, "source": [ "## Read the Measurements" @@ -1550,6 +1580,7 @@ }, { "cell_type": "markdown", + "id": "vanilla-illustration", "metadata": {}, "source": [ "Check if we actually created the measurements by reading them" @@ -1558,6 +1589,7 @@ { "cell_type": "code", "execution_count": 16, + "id": "undefined-annual", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:41.728688Z", @@ -1569,9 +1601,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:50:19,947 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:50:19,948 - INFO - mvg.mvg - retrieving all measurements from source id=u0001\n", - "2021-06-24 11:50:20,172 - INFO - mvg.mvg - 50 measurements in database\n" + "2021-09-22 20:12:00,034 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:12:00,036 - INFO - mvg.mvg - retrieving all measurements from source id=u0001\n", + "2021-09-22 20:12:00,236 - INFO - mvg.mvg - 50 measurements in database\n" ] }, { @@ -1589,6 +1621,7 @@ }, { "cell_type": "markdown", + "id": "further-freeware", "metadata": {}, "source": [ "It is also possible to read a specific measurement at a single timestamp.\n", @@ -1597,7 +1630,8 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, + "id": "unknown-catering", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:42.225546Z", @@ -1609,9 +1643,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:55:07,892 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:55:07,895 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-06-24 11:55:07,896 - INFO - mvg.mvg - timestamp=1570186860\n" + "2021-09-22 20:13:04,777 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:13:04,779 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", + "2021-09-22 20:13:04,779 - INFO - mvg.mvg - timestamp=1570186860\n" ] }, { @@ -1634,11 +1668,12 @@ "print(f\"timestamp: {ts_0}\")\n", "print(f\"duration: {meas_0['duration']}\")\n", "print(f\"meta: {meas_0['meta']}\")\n", - "print(f\"data: {meas_0['data'][1:3]}...\")" + "print(f\"data: {meas_0['data']['acc'][1:3]}...\")" ] }, { "cell_type": "markdown", + "id": "renewable-subdivision", "metadata": {}, "source": [ "We can update the meta information for a measurement at a single timestamp let's get the timestamp of the first measurement" @@ -1646,7 +1681,8 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 21, + "id": "ancient-baking", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:42.870908Z", @@ -1658,12 +1694,12 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:55:59,850 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:55:59,852 - INFO - mvg.mvg - deleting measurement for source id=u0001\n", - "2021-06-24 11:55:59,854 - INFO - mvg.mvg - timestamp: 1570186860\n", - "2021-06-24 11:56:00,073 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:56:00,073 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-06-24 11:56:00,074 - INFO - mvg.mvg - timestamp=1570186860\n" + "2021-09-22 20:13:29,345 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:13:29,346 - INFO - mvg.mvg - deleting measurement for source id=u0001\n", + "2021-09-22 20:13:29,347 - INFO - mvg.mvg - timestamp: 1570186860\n", + "2021-09-22 20:13:29,531 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:13:29,532 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", + "2021-09-22 20:13:29,533 - INFO - mvg.mvg - timestamp=1570186860\n" ] }, { @@ -1690,11 +1726,12 @@ "print(f\"timestamp: {ts_0}\")\n", "print(f\"duration: {meas_0_u['duration']}\")\n", "print(f\"meta: {meas_0_u['meta']}\")\n", - "print(f\"data: {meas_0_u['data'][1:3]}...\")" + "print(f\"data: {meas_0_u['data']['acc'][1:3]}...\")" ] }, { "cell_type": "markdown", + "id": "posted-adjustment", "metadata": {}, "source": [ "Finally we delete the measurement" @@ -1702,7 +1739,8 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 22, + "id": "homeless-revelation", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:43.023114Z", @@ -1714,9 +1752,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:56:24,041 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:56:24,041 - INFO - mvg.mvg - deleting measurement for source id=u0001\n", - "2021-06-24 11:56:24,043 - INFO - mvg.mvg - timestamp: 1570186860\n" + "2021-09-22 20:13:34,597 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:13:34,599 - INFO - mvg.mvg - deleting measurement for source id=u0001\n", + "2021-09-22 20:13:34,599 - INFO - mvg.mvg - timestamp: 1570186860\n" ] } ], @@ -1726,6 +1764,7 @@ }, { "cell_type": "markdown", + "id": "nearby-methodology", "metadata": {}, "source": [ "We check if it's actually deleted" @@ -1733,7 +1772,8 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 23, + "id": "resident-singapore", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:43.153589Z", @@ -1745,9 +1785,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 11:56:26,689 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 11:56:26,691 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", - "2021-06-24 11:56:26,692 - INFO - mvg.mvg - timestamp=1570186860\n" + "2021-09-22 20:13:38,561 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:13:38,563 - INFO - mvg.mvg - retrieving measurements from source id=u0001\n", + "2021-09-22 20:13:38,564 - INFO - mvg.mvg - timestamp=1570186860\n" ] }, { @@ -1767,6 +1807,7 @@ }, { "cell_type": "markdown", + "id": "practical-murder", "metadata": {}, "source": [ "If all went well we end up here now.\n", @@ -1775,6 +1816,7 @@ }, { "cell_type": "markdown", + "id": "dimensional-ethnic", "metadata": {}, "source": [ "## Uploading additional sources\n", @@ -1784,7 +1826,8 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 26, + "id": "compatible-insurance", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:56:43.305948Z", @@ -1799,30 +1842,29 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:15:28,045 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:15:28,046 - INFO - mvg.mvg - deleting source with source id=u0002\n" + "2021-09-22 20:52:39,692 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:39,696 - INFO - mvg.mvg - deleting source with source id=u0002\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "Deleting u0002\n", - "Source u0002 does not exist\n" + "Deleting u0002\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:15:28,257 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:15:28,258 - INFO - mvg.mvg - creating source with source id=u0002\n", - "2021-06-24 12:15:28,259 - INFO - mvg.mvg - metadata: {'assetId': 'assetB', 'measPoint': 'mloc01', 'location': 'paris'}\n", - "2021-06-24 12:15:28,486 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:15:28,487 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:15:28,487 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:15:28,488 - INFO - mvg.mvg - timestamp: 1573732860\n", - "2021-06-24 12:15:28,488 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:39,956 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:39,958 - INFO - mvg.mvg - creating source with source id=u0002\n", + "2021-09-22 20:52:39,959 - INFO - mvg.mvg - metadata: {'assetId': 'assetB', 'measPoint': 'mloc01', 'location': 'paris'}\n", + "2021-09-22 20:52:40,179 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:40,180 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:40,181 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:40,182 - INFO - mvg.mvg - timestamp: 1570186860\n", + "2021-09-22 20:52:40,183 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1831,18 +1873,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573732860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1570186860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:15:35,605 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:15:35,605 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:15:35,605 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:15:35,606 - INFO - mvg.mvg - timestamp: 1571655660\n", - "2021-06-24 12:15:35,606 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:41,154 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:41,155 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:41,156 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:41,157 - INFO - mvg.mvg - timestamp: 1570273260\n", + "2021-09-22 20:52:41,158 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1851,18 +1893,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571655660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1570273260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:15:43,154 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:15:43,155 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:15:43,156 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:15:43,156 - INFO - mvg.mvg - timestamp: 1572523260\n", - "2021-06-24 12:15:43,157 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:42,184 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:42,185 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:42,186 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:42,187 - INFO - mvg.mvg - timestamp: 1570359660\n", + "2021-09-22 20:52:42,188 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1871,18 +1913,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572523260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1570359660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:15:49,813 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:15:49,813 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:15:49,813 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:15:49,814 - INFO - mvg.mvg - timestamp: 1571569260\n", - "2021-06-24 12:15:49,814 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:43,113 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:43,114 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:43,115 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:43,116 - INFO - mvg.mvg - timestamp: 1570446060\n", + "2021-09-22 20:52:43,117 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1891,18 +1933,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571569260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1570446060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:15:57,148 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:15:57,148 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:15:57,148 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:15:57,148 - INFO - mvg.mvg - timestamp: 1572177660\n", - "2021-06-24 12:15:57,149 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:44,039 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:44,040 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:44,041 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:44,041 - INFO - mvg.mvg - timestamp: 1570532460\n", + "2021-09-22 20:52:44,042 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1911,18 +1953,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572177660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1570532460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:16:03,624 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:16:03,624 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:16:03,624 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:16:03,625 - INFO - mvg.mvg - timestamp: 1570705260\n", - "2021-06-24 12:16:03,625 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:45,001 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:45,002 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:45,003 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:45,005 - INFO - mvg.mvg - timestamp: 1570618860\n", + "2021-09-22 20:52:45,007 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1931,18 +1973,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570705260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1570618860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:16:10,012 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:16:10,013 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:16:10,014 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:16:10,014 - INFO - mvg.mvg - timestamp: 1572868860\n", - "2021-06-24 12:16:10,014 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:46,033 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:46,034 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:46,035 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:46,036 - INFO - mvg.mvg - timestamp: 1570705260\n", + "2021-09-22 20:52:46,037 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1951,18 +1993,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572868860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1570705260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:16:16,413 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:16:16,413 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:16:16,414 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:16:16,415 - INFO - mvg.mvg - timestamp: 1570964460\n", - "2021-06-24 12:16:16,415 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:47,026 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:47,027 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:47,027 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:47,028 - INFO - mvg.mvg - timestamp: 1570791660\n", + "2021-09-22 20:52:47,031 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1971,18 +2013,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570964460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1570791660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:16:22,943 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:16:22,943 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:16:22,944 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:16:22,944 - INFO - mvg.mvg - timestamp: 1572955260\n", - "2021-06-24 12:16:22,945 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:47,988 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:47,988 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:47,989 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:47,990 - INFO - mvg.mvg - timestamp: 1570878060\n", + "2021-09-22 20:52:47,991 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -1991,18 +2033,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572955260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1570878060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:16:29,638 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:16:29,639 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:16:29,639 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:16:29,640 - INFO - mvg.mvg - timestamp: 1571742060\n", - "2021-06-24 12:16:29,640 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:48,922 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:48,923 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:48,924 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:48,925 - INFO - mvg.mvg - timestamp: 1570964460\n", + "2021-09-22 20:52:48,926 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2011,18 +2053,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571742060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1570964460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:16:36,498 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:16:36,499 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:16:36,499 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:16:36,499 - INFO - mvg.mvg - timestamp: 1571482860\n", - "2021-06-24 12:16:36,500 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:49,870 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:49,870 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:49,872 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:49,873 - INFO - mvg.mvg - timestamp: 1571050860\n", + "2021-09-22 20:52:49,874 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2031,18 +2073,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571482860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1571050860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:16:44,205 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:16:44,206 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:16:44,207 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:16:44,207 - INFO - mvg.mvg - timestamp: 1574078460\n", - "2021-06-24 12:16:44,208 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:50,827 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:50,828 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:50,829 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:50,830 - INFO - mvg.mvg - timestamp: 1571137260\n", + "2021-09-22 20:52:50,831 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2051,18 +2093,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1574078460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1571137260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:16:51,149 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:16:51,149 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:16:51,149 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:16:51,150 - INFO - mvg.mvg - timestamp: 1570618860\n", - "2021-06-24 12:16:51,150 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:51,764 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:51,765 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:51,766 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:51,768 - INFO - mvg.mvg - timestamp: 1571223660\n", + "2021-09-22 20:52:51,769 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2071,18 +2113,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570618860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1571223660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:16:59,483 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:16:59,483 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:16:59,484 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:16:59,485 - INFO - mvg.mvg - timestamp: 1572350460\n", - "2021-06-24 12:16:59,485 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:52,709 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:52,710 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:52,711 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:52,712 - INFO - mvg.mvg - timestamp: 1571310060\n", + "2021-09-22 20:52:52,713 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2091,18 +2133,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572350460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1571310060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:17:06,267 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:17:06,267 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:17:06,268 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:17:06,269 - INFO - mvg.mvg - timestamp: 1572264060\n", - "2021-06-24 12:17:06,269 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:54,567 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:54,568 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:54,569 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:54,570 - INFO - mvg.mvg - timestamp: 1571396460\n", + "2021-09-22 20:52:54,571 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2111,18 +2153,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572264060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1571396460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:17:12,826 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:17:12,827 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:17:12,828 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:17:12,828 - INFO - mvg.mvg - timestamp: 1573387260\n", - "2021-06-24 12:17:12,829 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:55,521 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:55,521 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:55,524 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:55,525 - INFO - mvg.mvg - timestamp: 1571482860\n", + "2021-09-22 20:52:55,526 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2131,18 +2173,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573387260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1571482860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:17:20,335 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:17:20,336 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:17:20,337 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:17:20,337 - INFO - mvg.mvg - timestamp: 1571914860\n", - "2021-06-24 12:17:20,338 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:56,465 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:56,466 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:56,467 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:56,469 - INFO - mvg.mvg - timestamp: 1571569260\n", + "2021-09-22 20:52:56,471 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2151,18 +2193,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571914860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1571569260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:17:26,991 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:17:26,992 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:17:26,992 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:17:26,993 - INFO - mvg.mvg - timestamp: 1570446060\n", - "2021-06-24 12:17:26,993 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:57,412 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:57,413 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:57,414 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:57,415 - INFO - mvg.mvg - timestamp: 1571655660\n", + "2021-09-22 20:52:57,416 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2171,18 +2213,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570446060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1571655660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:17:33,758 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:17:33,759 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:17:33,759 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:17:33,760 - INFO - mvg.mvg - timestamp: 1572087660\n", - "2021-06-24 12:17:33,761 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:58,369 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:58,371 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:58,373 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:58,374 - INFO - mvg.mvg - timestamp: 1571742060\n", + "2021-09-22 20:52:58,375 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2191,18 +2233,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572087660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1571742060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:17:41,284 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:17:41,284 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:17:41,284 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:17:41,285 - INFO - mvg.mvg - timestamp: 1573905660\n", - "2021-06-24 12:17:41,285 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:52:59,327 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:52:59,328 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:52:59,329 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:52:59,332 - INFO - mvg.mvg - timestamp: 1571828460\n", + "2021-09-22 20:52:59,333 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2211,18 +2253,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573905660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1571828460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:17:47,840 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:17:47,840 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:17:47,841 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:17:47,841 - INFO - mvg.mvg - timestamp: 1574164860\n", - "2021-06-24 12:17:47,842 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:00,280 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:00,282 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:00,282 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:00,284 - INFO - mvg.mvg - timestamp: 1571914860\n", + "2021-09-22 20:53:00,285 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2231,18 +2273,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1574164860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1571914860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:17:54,511 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:17:54,511 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:17:54,511 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:17:54,512 - INFO - mvg.mvg - timestamp: 1573473660\n", - "2021-06-24 12:17:54,513 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:01,228 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:01,230 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:01,231 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:01,232 - INFO - mvg.mvg - timestamp: 1572001260\n", + "2021-09-22 20:53:01,233 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2251,18 +2293,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573473660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1572001260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:18:01,973 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:18:01,974 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:18:01,974 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:18:01,975 - INFO - mvg.mvg - timestamp: 1573560060\n", - "2021-06-24 12:18:01,976 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:02,201 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:02,202 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:02,203 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:02,206 - INFO - mvg.mvg - timestamp: 1572087660\n", + "2021-09-22 20:53:02,207 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2271,18 +2313,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573560060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1572087660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:18:08,601 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:18:08,601 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:18:08,602 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:18:08,602 - INFO - mvg.mvg - timestamp: 1570186860\n", - "2021-06-24 12:18:08,602 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:03,147 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:03,148 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:03,149 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:03,150 - INFO - mvg.mvg - timestamp: 1572177660\n", + "2021-09-22 20:53:03,151 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2291,18 +2333,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570186860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1572177660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:18:15,215 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:18:15,216 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:18:15,217 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:18:15,217 - INFO - mvg.mvg - timestamp: 1571223660\n", - "2021-06-24 12:18:15,218 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:04,098 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:04,100 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:04,101 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:04,102 - INFO - mvg.mvg - timestamp: 1572264060\n", + "2021-09-22 20:53:04,103 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2311,18 +2353,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571223660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1572264060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:18:22,851 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:18:22,851 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:18:22,851 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:18:22,852 - INFO - mvg.mvg - timestamp: 1572609660\n", - "2021-06-24 12:18:22,852 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:05,041 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:05,042 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:05,043 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:05,044 - INFO - mvg.mvg - timestamp: 1572350460\n", + "2021-09-22 20:53:05,045 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2331,18 +2373,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572609660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1572350460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:18:29,462 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:18:29,462 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:18:29,463 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:18:29,463 - INFO - mvg.mvg - timestamp: 1573992060\n", - "2021-06-24 12:18:29,464 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:05,998 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:06,000 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:06,000 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:06,002 - INFO - mvg.mvg - timestamp: 1572436860\n", + "2021-09-22 20:53:06,003 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2351,18 +2393,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573992060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1572436860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:18:38,052 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:18:38,052 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:18:38,052 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:18:38,053 - INFO - mvg.mvg - timestamp: 1574251260\n", - "2021-06-24 12:18:38,053 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:06,971 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:06,971 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:06,972 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:06,973 - INFO - mvg.mvg - timestamp: 1572523260\n", + "2021-09-22 20:53:06,974 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2371,18 +2413,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1574251260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1572523260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:18:45,083 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:18:45,084 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:18:45,084 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:18:45,085 - INFO - mvg.mvg - timestamp: 1572436860\n", - "2021-06-24 12:18:45,085 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:07,896 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:07,896 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:07,897 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:07,898 - INFO - mvg.mvg - timestamp: 1572609660\n", + "2021-09-22 20:53:07,900 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2391,18 +2433,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572436860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1572609660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:18:53,322 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:18:53,323 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:18:53,323 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:18:53,324 - INFO - mvg.mvg - timestamp: 1573128060\n", - "2021-06-24 12:18:53,324 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:08,899 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:08,900 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:08,901 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:08,902 - INFO - mvg.mvg - timestamp: 1572696060\n", + "2021-09-22 20:53:08,903 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2411,18 +2453,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573128060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1572696060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:19:01,406 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:19:01,406 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:19:01,406 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:19:01,407 - INFO - mvg.mvg - timestamp: 1573041660\n", - "2021-06-24 12:19:01,408 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:09,837 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:09,839 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:09,839 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:09,840 - INFO - mvg.mvg - timestamp: 1572782460\n", + "2021-09-22 20:53:09,841 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2431,18 +2473,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573041660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1572782460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:19:08,105 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:19:08,106 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:19:08,106 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:19:08,107 - INFO - mvg.mvg - timestamp: 1573214460\n", - "2021-06-24 12:19:08,108 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:10,787 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:10,788 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:10,789 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:10,790 - INFO - mvg.mvg - timestamp: 1572868860\n", + "2021-09-22 20:53:10,791 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2451,18 +2493,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573214460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1572868860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:19:14,729 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:19:14,730 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:19:14,730 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:19:14,731 - INFO - mvg.mvg - timestamp: 1571396460\n", - "2021-06-24 12:19:14,731 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:11,735 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:11,736 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:11,736 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:11,737 - INFO - mvg.mvg - timestamp: 1572955260\n", + "2021-09-22 20:53:11,738 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2471,18 +2513,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571396460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1572955260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:19:21,234 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:19:21,235 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:19:21,235 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:19:21,236 - INFO - mvg.mvg - timestamp: 1573819260\n", - "2021-06-24 12:19:21,236 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:12,701 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:12,701 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:12,702 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:12,703 - INFO - mvg.mvg - timestamp: 1573041660\n", + "2021-09-22 20:53:12,703 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2491,18 +2533,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573819260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1573041660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:19:28,059 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:19:28,059 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:19:28,060 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:19:28,060 - INFO - mvg.mvg - timestamp: 1570359660\n", - "2021-06-24 12:19:28,061 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:13,646 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:13,646 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:13,648 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:13,649 - INFO - mvg.mvg - timestamp: 1573128060\n", + "2021-09-22 20:53:13,652 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2511,18 +2553,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570359660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1573128060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:19:35,067 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:19:35,068 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:19:35,068 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:19:35,068 - INFO - mvg.mvg - timestamp: 1572001260\n", - "2021-06-24 12:19:35,069 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:14,602 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:14,603 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:14,603 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:14,604 - INFO - mvg.mvg - timestamp: 1573214460\n", + "2021-09-22 20:53:14,605 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2531,18 +2573,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572001260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1573214460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:19:42,369 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:19:42,370 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:19:42,370 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:19:42,370 - INFO - mvg.mvg - timestamp: 1570532460\n", - "2021-06-24 12:19:42,371 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:15,535 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:15,536 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:15,536 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:15,537 - INFO - mvg.mvg - timestamp: 1573300860\n", + "2021-09-22 20:53:15,538 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2551,18 +2593,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570532460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1573300860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:19:49,370 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:19:49,371 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:19:49,371 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:19:49,372 - INFO - mvg.mvg - timestamp: 1572782460\n", - "2021-06-24 12:19:49,372 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:16,484 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:16,484 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:16,486 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:16,487 - INFO - mvg.mvg - timestamp: 1573387260\n", + "2021-09-22 20:53:16,488 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2571,18 +2613,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572782460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1573387260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:19:56,329 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:19:56,329 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:19:56,330 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:19:56,330 - INFO - mvg.mvg - timestamp: 1574424060\n", - "2021-06-24 12:19:56,331 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:17,436 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:17,437 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:17,438 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:17,439 - INFO - mvg.mvg - timestamp: 1573473660\n", + "2021-09-22 20:53:17,441 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2591,18 +2633,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1574424060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1573473660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:20:04,057 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:20:04,057 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:20:04,057 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:20:04,058 - INFO - mvg.mvg - timestamp: 1571137260\n", - "2021-06-24 12:20:04,058 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:18,387 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:18,388 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:18,388 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:18,389 - INFO - mvg.mvg - timestamp: 1573560060\n", + "2021-09-22 20:53:18,390 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2611,18 +2653,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571137260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1573560060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:20:10,640 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:20:10,641 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:20:10,641 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:20:10,642 - INFO - mvg.mvg - timestamp: 1571828460\n", - "2021-06-24 12:20:10,642 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:19,347 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:19,348 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:19,348 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:19,349 - INFO - mvg.mvg - timestamp: 1573646460\n", + "2021-09-22 20:53:19,350 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2631,18 +2673,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571828460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1573646460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:20:17,134 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:20:17,134 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:20:17,135 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:20:17,135 - INFO - mvg.mvg - timestamp: 1574337660\n", - "2021-06-24 12:20:17,136 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:20,314 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:20,315 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:20,316 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:20,317 - INFO - mvg.mvg - timestamp: 1573732860\n", + "2021-09-22 20:53:20,318 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2651,18 +2693,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1574337660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1573732860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:20:24,091 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:20:24,091 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:20:24,092 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:20:24,092 - INFO - mvg.mvg - timestamp: 1572696060\n", - "2021-06-24 12:20:24,093 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:21,267 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:21,267 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:21,269 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:21,270 - INFO - mvg.mvg - timestamp: 1573819260\n", + "2021-09-22 20:53:21,271 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2671,18 +2713,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1572696060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1573819260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:20:30,838 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:20:30,838 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:20:30,839 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:20:30,839 - INFO - mvg.mvg - timestamp: 1573646460\n", - "2021-06-24 12:20:30,840 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:22,201 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:22,202 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:22,203 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:22,203 - INFO - mvg.mvg - timestamp: 1573905660\n", + "2021-09-22 20:53:22,204 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2691,18 +2733,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573646460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1573905660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:20:37,622 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:20:37,623 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:20:37,624 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:20:37,624 - INFO - mvg.mvg - timestamp: 1571050860\n", - "2021-06-24 12:20:37,624 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:23,150 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:23,151 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:23,152 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:23,153 - INFO - mvg.mvg - timestamp: 1573992060\n", + "2021-09-22 20:53:23,154 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2711,18 +2753,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571050860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1573992060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:20:44,164 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:20:44,164 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:20:44,165 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:20:44,165 - INFO - mvg.mvg - timestamp: 1570791660\n", - "2021-06-24 12:20:44,166 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:24,131 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:24,132 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:24,133 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:24,134 - INFO - mvg.mvg - timestamp: 1574078460\n", + "2021-09-22 20:53:24,135 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2731,18 +2773,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570791660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1574078460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:20:50,840 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:20:50,840 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:20:50,841 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:20:50,841 - INFO - mvg.mvg - timestamp: 1570273260\n", - "2021-06-24 12:20:50,841 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:25,100 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:25,101 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:25,103 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:25,104 - INFO - mvg.mvg - timestamp: 1574164860\n", + "2021-09-22 20:53:25,105 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2751,18 +2793,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570273260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1574164860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:20:57,055 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:20:57,056 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:20:57,057 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:20:57,057 - INFO - mvg.mvg - timestamp: 1573300860\n", - "2021-06-24 12:20:57,058 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:26,051 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:26,052 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:26,053 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:26,054 - INFO - mvg.mvg - timestamp: 1574251260\n", + "2021-09-22 20:53:26,055 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2771,18 +2813,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1573300860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1574251260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:21:03,636 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:21:03,637 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:21:03,638 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:21:03,638 - INFO - mvg.mvg - timestamp: 1571310060\n", - "2021-06-24 12:21:03,638 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:26,991 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:26,992 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:26,993 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:26,993 - INFO - mvg.mvg - timestamp: 1574337660\n", + "2021-09-22 20:53:26,994 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2791,18 +2833,18 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1571310060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1574337660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:21:10,074 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:21:10,074 - INFO - mvg.mvg - creating measurement from source id=u0002\n", - "2021-06-24 12:21:10,075 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:21:10,075 - INFO - mvg.mvg - timestamp: 1570878060\n", - "2021-06-24 12:21:10,076 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:27,938 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:27,939 - INFO - mvg.mvg - creating measurement from source id=u0002\n", + "2021-09-22 20:53:27,940 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:27,940 - INFO - mvg.mvg - timestamp: 1574424060\n", + "2021-09-22 20:53:27,941 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2811,37 +2853,25 @@ "text": [ "Read 40000 samples for u0002.\n", "Read u0002 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0002\\1570878060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0002/1574424060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:21:16,935 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:21:16,936 - INFO - mvg.mvg - deleting source with source id=u0003\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Deleting u0003\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-06-24 12:21:17,151 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:21:17,151 - INFO - mvg.mvg - creating source with source id=u0003\n", - "2021-06-24 12:21:17,152 - INFO - mvg.mvg - metadata: {'assetId': 'assetC', 'measPoint': 'mloc01', 'location': 'milano'}\n" + "2021-09-22 20:53:28,847 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:28,848 - INFO - mvg.mvg - deleting source with source id=u0003\n", + "2021-09-22 20:53:29,035 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:29,036 - INFO - mvg.mvg - creating source with source id=u0003\n", + "2021-09-22 20:53:29,036 - INFO - mvg.mvg - metadata: {'assetId': 'assetC', 'measPoint': 'mloc01', 'location': 'milano'}\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ + "Deleting u0003\n", "Source u0003 does not exist\n" ] }, @@ -2849,11 +2879,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:21:17,959 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:21:17,959 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:21:17,960 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:21:17,961 - INFO - mvg.mvg - timestamp: 1573732860\n", - "2021-06-24 12:21:17,961 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:29,275 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:29,276 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:29,277 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:29,279 - INFO - mvg.mvg - timestamp: 1570186860\n", + "2021-09-22 20:53:29,280 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2862,18 +2892,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573732860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1570186860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:21:24,570 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:21:24,570 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:21:24,571 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:21:24,571 - INFO - mvg.mvg - timestamp: 1571655660\n", - "2021-06-24 12:21:24,571 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:30,216 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:30,217 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:30,217 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:30,218 - INFO - mvg.mvg - timestamp: 1570273260\n", + "2021-09-22 20:53:30,220 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2882,18 +2912,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571655660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1570273260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:21:31,236 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:21:31,237 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:21:31,238 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:21:31,239 - INFO - mvg.mvg - timestamp: 1572523260\n", - "2021-06-24 12:21:31,239 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:31,172 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:31,173 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:31,174 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:31,175 - INFO - mvg.mvg - timestamp: 1570359660\n", + "2021-09-22 20:53:31,176 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2902,18 +2932,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572523260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1570359660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:21:38,011 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:21:38,011 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:21:38,012 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:21:38,013 - INFO - mvg.mvg - timestamp: 1571569260\n", - "2021-06-24 12:21:38,013 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:32,125 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:32,127 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:32,128 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:32,130 - INFO - mvg.mvg - timestamp: 1570446060\n", + "2021-09-22 20:53:32,131 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2922,18 +2952,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571569260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1570446060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:21:44,847 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:21:44,848 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:21:44,848 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:21:44,848 - INFO - mvg.mvg - timestamp: 1572177660\n", - "2021-06-24 12:21:44,849 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:33,122 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:33,123 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:33,124 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:33,125 - INFO - mvg.mvg - timestamp: 1570532460\n", + "2021-09-22 20:53:33,126 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2942,18 +2972,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572177660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1570532460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:21:51,797 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:21:51,798 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:21:51,798 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:21:51,799 - INFO - mvg.mvg - timestamp: 1570705260\n", - "2021-06-24 12:21:51,799 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:34,068 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:34,068 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:34,069 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:34,070 - INFO - mvg.mvg - timestamp: 1570618860\n", + "2021-09-22 20:53:34,072 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2962,18 +2992,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570705260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1570618860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:21:59,352 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:21:59,352 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:21:59,353 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:21:59,353 - INFO - mvg.mvg - timestamp: 1572868860\n", - "2021-06-24 12:21:59,354 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:35,032 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:35,033 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:35,034 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:35,035 - INFO - mvg.mvg - timestamp: 1570705260\n", + "2021-09-22 20:53:35,038 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -2982,18 +3012,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572868860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1570705260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:22:06,155 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:22:06,156 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:22:06,156 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:22:06,156 - INFO - mvg.mvg - timestamp: 1570964460\n", - "2021-06-24 12:22:06,157 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:35,995 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:35,996 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:35,997 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:35,998 - INFO - mvg.mvg - timestamp: 1570791660\n", + "2021-09-22 20:53:35,999 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3002,18 +3032,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570964460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1570791660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:22:13,031 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:22:13,032 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:22:13,033 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:22:13,033 - INFO - mvg.mvg - timestamp: 1572955260\n", - "2021-06-24 12:22:13,033 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:36,942 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:36,943 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:36,944 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:36,945 - INFO - mvg.mvg - timestamp: 1570878060\n", + "2021-09-22 20:53:36,946 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3022,18 +3052,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572955260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1570878060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:22:19,768 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:22:19,768 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:22:19,769 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:22:19,769 - INFO - mvg.mvg - timestamp: 1571742060\n", - "2021-06-24 12:22:19,770 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:37,906 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:37,906 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:37,907 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:37,908 - INFO - mvg.mvg - timestamp: 1570964460\n", + "2021-09-22 20:53:37,909 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3042,18 +3072,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571742060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1570964460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:22:26,207 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:22:26,207 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:22:26,208 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:22:26,208 - INFO - mvg.mvg - timestamp: 1571482860\n", - "2021-06-24 12:22:26,208 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:38,846 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:38,847 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:38,848 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:38,849 - INFO - mvg.mvg - timestamp: 1571050860\n", + "2021-09-22 20:53:38,850 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3062,18 +3092,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571482860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1571050860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:22:33,750 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:22:33,750 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:22:33,751 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:22:33,751 - INFO - mvg.mvg - timestamp: 1574078460\n", - "2021-06-24 12:22:33,752 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:39,793 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:39,795 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:39,795 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:39,796 - INFO - mvg.mvg - timestamp: 1571137260\n", + "2021-09-22 20:53:39,797 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3082,18 +3112,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1574078460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1571137260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:22:40,523 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:22:40,524 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:22:40,525 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:22:40,525 - INFO - mvg.mvg - timestamp: 1570618860\n", - "2021-06-24 12:22:40,525 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:40,786 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:40,787 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:40,788 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:40,788 - INFO - mvg.mvg - timestamp: 1571223660\n", + "2021-09-22 20:53:40,789 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3102,18 +3132,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570618860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1571223660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:22:47,257 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:22:47,257 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:22:47,258 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:22:47,258 - INFO - mvg.mvg - timestamp: 1572350460\n", - "2021-06-24 12:22:47,259 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:41,733 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:41,734 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:41,735 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:41,736 - INFO - mvg.mvg - timestamp: 1571310060\n", + "2021-09-22 20:53:41,737 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3122,18 +3152,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572350460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1571310060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:22:55,664 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:22:55,665 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:22:55,665 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:22:55,666 - INFO - mvg.mvg - timestamp: 1572264060\n", - "2021-06-24 12:22:55,666 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:42,676 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:42,677 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:42,678 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:42,679 - INFO - mvg.mvg - timestamp: 1571396460\n", + "2021-09-22 20:53:42,679 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3142,18 +3172,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572264060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1571396460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:23:02,251 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:23:02,251 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:23:02,252 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:23:02,252 - INFO - mvg.mvg - timestamp: 1573387260\n", - "2021-06-24 12:23:02,253 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:43,638 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:43,638 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:43,639 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:43,640 - INFO - mvg.mvg - timestamp: 1571482860\n", + "2021-09-22 20:53:43,641 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3162,18 +3192,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573387260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1571482860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:23:08,637 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:23:08,637 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:23:08,638 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:23:08,638 - INFO - mvg.mvg - timestamp: 1571914860\n", - "2021-06-24 12:23:08,639 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:44,877 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:44,878 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:44,879 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:44,880 - INFO - mvg.mvg - timestamp: 1571569260\n", + "2021-09-22 20:53:44,881 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3182,18 +3212,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571914860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1571569260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:23:15,124 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:23:15,125 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:23:15,126 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:23:15,127 - INFO - mvg.mvg - timestamp: 1570446060\n", - "2021-06-24 12:23:15,127 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:45,822 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:45,823 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:45,824 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:45,826 - INFO - mvg.mvg - timestamp: 1571655660\n", + "2021-09-22 20:53:45,827 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3202,18 +3232,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570446060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1571655660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:23:22,088 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:23:22,089 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:23:22,090 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:23:22,090 - INFO - mvg.mvg - timestamp: 1572087660\n", - "2021-06-24 12:23:22,090 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:46,783 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:46,784 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:46,785 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:46,785 - INFO - mvg.mvg - timestamp: 1571742060\n", + "2021-09-22 20:53:46,786 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3222,18 +3252,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572087660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1571742060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:23:28,667 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:23:28,668 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:23:28,668 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:23:28,669 - INFO - mvg.mvg - timestamp: 1573905660\n", - "2021-06-24 12:23:28,669 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:47,751 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:47,752 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:47,754 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:47,755 - INFO - mvg.mvg - timestamp: 1571828460\n", + "2021-09-22 20:53:47,756 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3242,18 +3272,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573905660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1571828460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:23:36,276 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:23:36,276 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:23:36,277 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:23:36,277 - INFO - mvg.mvg - timestamp: 1574164860\n", - "2021-06-24 12:23:36,278 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:48,707 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:48,708 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:48,709 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:48,710 - INFO - mvg.mvg - timestamp: 1571914860\n", + "2021-09-22 20:53:48,711 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3262,18 +3292,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1574164860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1571914860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:23:42,700 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:23:42,701 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:23:42,701 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:23:42,702 - INFO - mvg.mvg - timestamp: 1573473660\n", - "2021-06-24 12:23:42,702 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:49,674 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:49,676 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:49,677 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:49,677 - INFO - mvg.mvg - timestamp: 1572001260\n", + "2021-09-22 20:53:49,678 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3282,18 +3312,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573473660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1572001260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:23:49,515 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:23:49,516 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:23:49,517 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:23:49,517 - INFO - mvg.mvg - timestamp: 1573560060\n", - "2021-06-24 12:23:49,518 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:50,619 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:50,620 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:50,620 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:50,621 - INFO - mvg.mvg - timestamp: 1572087660\n", + "2021-09-22 20:53:50,623 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3302,18 +3332,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573560060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1572087660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:23:56,198 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:23:56,199 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:23:56,199 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:23:56,200 - INFO - mvg.mvg - timestamp: 1570186860\n", - "2021-06-24 12:23:56,200 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:51,614 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:51,615 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:51,616 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:51,617 - INFO - mvg.mvg - timestamp: 1572177660\n", + "2021-09-22 20:53:51,618 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3322,18 +3352,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570186860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1572177660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:24:02,605 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:24:02,606 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:24:02,606 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:24:02,606 - INFO - mvg.mvg - timestamp: 1571223660\n", - "2021-06-24 12:24:02,607 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:52,711 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:52,712 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:52,712 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:52,713 - INFO - mvg.mvg - timestamp: 1572264060\n", + "2021-09-22 20:53:52,714 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3342,18 +3372,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571223660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1572264060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:24:09,669 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:24:09,669 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:24:09,669 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:24:09,670 - INFO - mvg.mvg - timestamp: 1572609660\n", - "2021-06-24 12:24:09,671 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:53,664 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:53,664 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:53,665 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:53,666 - INFO - mvg.mvg - timestamp: 1572350460\n", + "2021-09-22 20:53:53,667 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3362,18 +3392,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572609660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1572350460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:24:16,383 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:24:16,384 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:24:16,385 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:24:16,385 - INFO - mvg.mvg - timestamp: 1573992060\n", - "2021-06-24 12:24:16,386 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:54,605 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:54,606 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:54,607 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:54,608 - INFO - mvg.mvg - timestamp: 1572436860\n", + "2021-09-22 20:53:54,609 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3382,18 +3412,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573992060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1572436860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:24:23,487 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:24:23,488 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:24:23,488 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:24:23,489 - INFO - mvg.mvg - timestamp: 1574251260\n", - "2021-06-24 12:24:23,489 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:55,561 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:55,562 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:55,563 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:55,566 - INFO - mvg.mvg - timestamp: 1572523260\n", + "2021-09-22 20:53:55,567 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3402,18 +3432,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1574251260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1572523260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:24:30,005 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:24:30,005 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:24:30,006 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:24:30,006 - INFO - mvg.mvg - timestamp: 1572436860\n", - "2021-06-24 12:24:30,007 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:56,519 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:56,520 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:56,521 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:56,522 - INFO - mvg.mvg - timestamp: 1572609660\n", + "2021-09-22 20:53:56,523 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3422,18 +3452,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572436860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1572609660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:24:36,719 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:24:36,720 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:24:36,720 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:24:36,720 - INFO - mvg.mvg - timestamp: 1573128060\n", - "2021-06-24 12:24:36,721 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:57,475 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:57,476 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:57,476 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:57,477 - INFO - mvg.mvg - timestamp: 1572696060\n", + "2021-09-22 20:53:57,478 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3442,18 +3472,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573128060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1572696060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:24:43,680 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:24:43,681 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:24:43,682 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:24:43,682 - INFO - mvg.mvg - timestamp: 1573041660\n", - "2021-06-24 12:24:43,682 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:58,432 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:58,433 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:58,433 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:58,435 - INFO - mvg.mvg - timestamp: 1572782460\n", + "2021-09-22 20:53:58,436 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3462,18 +3492,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573041660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1572782460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:24:50,354 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:24:50,354 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:24:50,355 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:24:50,356 - INFO - mvg.mvg - timestamp: 1573214460\n", - "2021-06-24 12:24:50,356 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:53:59,421 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:53:59,422 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:53:59,423 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:53:59,424 - INFO - mvg.mvg - timestamp: 1572868860\n", + "2021-09-22 20:53:59,425 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3482,18 +3512,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573214460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1572868860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:24:57,134 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:24:57,135 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:24:57,136 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:24:57,136 - INFO - mvg.mvg - timestamp: 1571396460\n", - "2021-06-24 12:24:57,137 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:00,373 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:00,373 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:00,375 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:00,376 - INFO - mvg.mvg - timestamp: 1572955260\n", + "2021-09-22 20:54:00,377 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3502,18 +3532,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571396460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1572955260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:25:05,131 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:25:05,131 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:25:05,132 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:25:05,132 - INFO - mvg.mvg - timestamp: 1573819260\n", - "2021-06-24 12:25:05,133 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:01,385 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:01,386 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:01,387 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:01,387 - INFO - mvg.mvg - timestamp: 1573041660\n", + "2021-09-22 20:54:01,388 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3522,18 +3552,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573819260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1573041660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:25:12,036 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:25:12,037 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:25:12,037 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:25:12,038 - INFO - mvg.mvg - timestamp: 1570359660\n", - "2021-06-24 12:25:12,038 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:02,329 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:02,330 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:02,331 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:02,332 - INFO - mvg.mvg - timestamp: 1573128060\n", + "2021-09-22 20:54:02,333 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3542,18 +3572,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570359660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1573128060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:25:19,387 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:25:19,387 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:25:19,388 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:25:19,389 - INFO - mvg.mvg - timestamp: 1572001260\n", - "2021-06-24 12:25:19,389 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:03,283 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:03,284 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:03,285 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:03,285 - INFO - mvg.mvg - timestamp: 1573214460\n", + "2021-09-22 20:54:03,286 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3562,18 +3592,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572001260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1573214460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:25:26,125 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:25:26,125 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:25:26,126 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:25:26,126 - INFO - mvg.mvg - timestamp: 1570532460\n", - "2021-06-24 12:25:26,127 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:04,218 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:04,219 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:04,220 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:04,221 - INFO - mvg.mvg - timestamp: 1573300860\n", + "2021-09-22 20:54:04,222 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3582,18 +3612,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570532460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1573300860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:25:32,837 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:25:32,838 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:25:32,838 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:25:32,839 - INFO - mvg.mvg - timestamp: 1572782460\n", - "2021-06-24 12:25:32,839 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:05,186 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:05,187 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:05,189 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:05,190 - INFO - mvg.mvg - timestamp: 1573387260\n", + "2021-09-22 20:54:05,192 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3602,18 +3632,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572782460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1573387260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:25:39,993 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:25:39,993 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:25:39,994 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:25:39,994 - INFO - mvg.mvg - timestamp: 1574424060\n", - "2021-06-24 12:25:39,995 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:06,169 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:06,170 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:06,170 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:06,171 - INFO - mvg.mvg - timestamp: 1573473660\n", + "2021-09-22 20:54:06,172 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3622,18 +3652,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1574424060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1573473660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:25:46,690 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:25:46,691 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:25:46,691 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:25:46,691 - INFO - mvg.mvg - timestamp: 1571137260\n", - "2021-06-24 12:25:46,692 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:07,141 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:07,142 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:07,144 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:07,145 - INFO - mvg.mvg - timestamp: 1573560060\n", + "2021-09-22 20:54:07,146 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3642,18 +3672,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571137260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1573560060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:25:53,429 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:25:53,430 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:25:53,430 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:25:53,431 - INFO - mvg.mvg - timestamp: 1571828460\n", - "2021-06-24 12:25:53,431 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:08,103 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:08,104 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:08,106 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:08,107 - INFO - mvg.mvg - timestamp: 1573646460\n", + "2021-09-22 20:54:08,108 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3662,18 +3692,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571828460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1573646460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:26:00,173 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:26:00,174 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:26:00,175 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:26:00,175 - INFO - mvg.mvg - timestamp: 1574337660\n", - "2021-06-24 12:26:00,175 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:09,060 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:09,061 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:09,061 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:09,062 - INFO - mvg.mvg - timestamp: 1573732860\n", + "2021-09-22 20:54:09,063 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3682,18 +3712,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1574337660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1573732860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:26:06,743 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:26:06,743 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:26:06,743 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:26:06,744 - INFO - mvg.mvg - timestamp: 1572696060\n", - "2021-06-24 12:26:06,744 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:10,046 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:10,046 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:10,047 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:10,047 - INFO - mvg.mvg - timestamp: 1573819260\n", + "2021-09-22 20:54:10,048 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3702,18 +3732,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1572696060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1573819260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:26:13,265 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:26:13,265 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:26:13,266 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:26:13,267 - INFO - mvg.mvg - timestamp: 1573646460\n", - "2021-06-24 12:26:13,267 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:10,998 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:10,999 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:11,000 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:11,001 - INFO - mvg.mvg - timestamp: 1573905660\n", + "2021-09-22 20:54:11,002 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3722,18 +3752,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573646460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1573905660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:26:21,646 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:26:21,647 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:26:21,648 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:26:21,648 - INFO - mvg.mvg - timestamp: 1571050860\n", - "2021-06-24 12:26:21,648 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:11,954 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:11,955 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:11,956 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:11,957 - INFO - mvg.mvg - timestamp: 1573992060\n", + "2021-09-22 20:54:11,958 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3742,18 +3772,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571050860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1573992060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:26:28,098 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:26:28,099 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:26:28,100 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:26:28,100 - INFO - mvg.mvg - timestamp: 1570791660\n", - "2021-06-24 12:26:28,100 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:12,910 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:12,911 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:12,911 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:12,913 - INFO - mvg.mvg - timestamp: 1574078460\n", + "2021-09-22 20:54:12,915 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3762,18 +3792,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570791660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1574078460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:26:36,551 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:26:36,552 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:26:36,552 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:26:36,552 - INFO - mvg.mvg - timestamp: 1570273260\n", - "2021-06-24 12:26:36,553 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:14,843 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:14,844 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:14,845 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:14,845 - INFO - mvg.mvg - timestamp: 1574164860\n", + "2021-09-22 20:54:14,846 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3782,18 +3812,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570273260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1574164860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:26:43,116 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:26:43,116 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:26:43,117 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:26:43,117 - INFO - mvg.mvg - timestamp: 1573300860\n", - "2021-06-24 12:26:43,117 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:15,790 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:15,791 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:15,791 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:15,792 - INFO - mvg.mvg - timestamp: 1574251260\n", + "2021-09-22 20:54:15,793 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3802,18 +3832,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1573300860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1574251260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:26:50,887 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:26:50,887 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:26:50,887 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:26:50,888 - INFO - mvg.mvg - timestamp: 1571310060\n", - "2021-06-24 12:26:50,888 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:16,724 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:16,725 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:16,725 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:16,726 - INFO - mvg.mvg - timestamp: 1574337660\n", + "2021-09-22 20:54:16,727 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3822,18 +3852,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1571310060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1574337660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:26:57,368 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:26:57,369 - INFO - mvg.mvg - creating measurement from source id=u0003\n", - "2021-06-24 12:26:57,369 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:26:57,370 - INFO - mvg.mvg - timestamp: 1570878060\n", - "2021-06-24 12:26:57,370 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:18,010 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:18,010 - INFO - mvg.mvg - creating measurement from source id=u0003\n", + "2021-09-22 20:54:18,011 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:18,012 - INFO - mvg.mvg - timestamp: 1574424060\n", + "2021-09-22 20:54:18,012 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3842,15 +3872,18 @@ "text": [ "Read 40000 samples for u0003.\n", "Read u0003 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0003\\1570878060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0003/1574424060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:27:04,941 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:27:04,942 - INFO - mvg.mvg - deleting source with source id=u0004\n" + "2021-09-22 20:54:18,920 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:18,921 - INFO - mvg.mvg - deleting source with source id=u0004\n", + "2021-09-22 20:54:19,102 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:19,103 - INFO - mvg.mvg - creating source with source id=u0004\n", + "2021-09-22 20:54:19,103 - INFO - mvg.mvg - metadata: {'assetId': 'assetD', 'measPoint': 'mloc01', 'location': 'milano'}\n" ] }, { @@ -3865,14 +3898,11 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:27:05,153 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:27:05,154 - INFO - mvg.mvg - creating source with source id=u0004\n", - "2021-06-24 12:27:05,154 - INFO - mvg.mvg - metadata: {'assetId': 'assetD', 'measPoint': 'mloc01', 'location': 'milano'}\n", - "2021-06-24 12:27:05,385 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:27:05,386 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:27:05,387 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:27:05,387 - INFO - mvg.mvg - timestamp: 1573732860\n", - "2021-06-24 12:27:05,388 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:19,320 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:19,321 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:19,322 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:19,324 - INFO - mvg.mvg - timestamp: 1570186860\n", + "2021-09-22 20:54:19,326 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3881,18 +3911,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573732860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1570186860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:27:12,025 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:27:12,026 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:27:12,026 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:27:12,027 - INFO - mvg.mvg - timestamp: 1571655660\n", - "2021-06-24 12:27:12,027 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:20,265 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:20,265 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:20,267 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:20,268 - INFO - mvg.mvg - timestamp: 1570273260\n", + "2021-09-22 20:54:20,269 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3901,18 +3931,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571655660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1570273260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:27:18,764 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:27:18,764 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:27:18,765 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:27:18,765 - INFO - mvg.mvg - timestamp: 1572523260\n", - "2021-06-24 12:27:18,765 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:21,219 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:21,221 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:21,222 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:21,223 - INFO - mvg.mvg - timestamp: 1570359660\n", + "2021-09-22 20:54:21,225 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3921,18 +3951,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572523260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1570359660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:27:26,610 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:27:26,611 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:27:26,612 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:27:26,612 - INFO - mvg.mvg - timestamp: 1571569260\n", - "2021-06-24 12:27:26,612 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:22,181 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:22,182 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:22,184 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:22,184 - INFO - mvg.mvg - timestamp: 1570446060\n", + "2021-09-22 20:54:22,186 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3941,18 +3971,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571569260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1570446060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:27:33,909 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:27:33,910 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:27:33,910 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:27:33,911 - INFO - mvg.mvg - timestamp: 1572177660\n", - "2021-06-24 12:27:33,911 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:23,125 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:23,126 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:23,127 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:23,127 - INFO - mvg.mvg - timestamp: 1570532460\n", + "2021-09-22 20:54:23,128 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3961,18 +3991,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572177660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1570532460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:27:40,370 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:27:40,372 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:27:40,372 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:27:40,372 - INFO - mvg.mvg - timestamp: 1570705260\n", - "2021-06-24 12:27:40,372 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:24,060 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:24,060 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:24,061 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:24,062 - INFO - mvg.mvg - timestamp: 1570618860\n", + "2021-09-22 20:54:24,063 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -3981,18 +4011,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570705260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1570618860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:27:46,681 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:27:46,682 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:27:46,682 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:27:46,683 - INFO - mvg.mvg - timestamp: 1572868860\n", - "2021-06-24 12:27:46,683 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:25,011 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:25,012 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:25,013 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:25,014 - INFO - mvg.mvg - timestamp: 1570705260\n", + "2021-09-22 20:54:25,015 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4001,18 +4031,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572868860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1570705260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:27:54,324 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:27:54,324 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:27:54,325 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:27:54,325 - INFO - mvg.mvg - timestamp: 1570964460\n", - "2021-06-24 12:27:54,326 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:25,949 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:25,950 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:25,950 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:25,951 - INFO - mvg.mvg - timestamp: 1570791660\n", + "2021-09-22 20:54:25,952 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4021,18 +4051,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570964460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1570791660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:28:01,311 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:28:01,312 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:28:01,312 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:28:01,313 - INFO - mvg.mvg - timestamp: 1572955260\n", - "2021-06-24 12:28:01,313 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:26,896 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:26,896 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:26,897 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:26,898 - INFO - mvg.mvg - timestamp: 1570878060\n", + "2021-09-22 20:54:26,900 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4041,18 +4071,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572955260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1570878060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:28:07,916 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:28:07,917 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:28:07,918 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:28:07,918 - INFO - mvg.mvg - timestamp: 1571742060\n", - "2021-06-24 12:28:07,918 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:27,888 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:27,890 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:27,891 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:27,892 - INFO - mvg.mvg - timestamp: 1570964460\n", + "2021-09-22 20:54:27,893 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4061,18 +4091,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571742060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1570964460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:28:14,726 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:28:14,727 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:28:14,727 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:28:14,728 - INFO - mvg.mvg - timestamp: 1571482860\n", - "2021-06-24 12:28:14,728 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:28,862 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:28,863 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:28,864 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:28,864 - INFO - mvg.mvg - timestamp: 1571050860\n", + "2021-09-22 20:54:28,866 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4081,18 +4111,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571482860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1571050860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:28:22,180 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:28:22,181 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:28:22,181 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:28:22,182 - INFO - mvg.mvg - timestamp: 1574078460\n", - "2021-06-24 12:28:22,183 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:29,800 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:29,801 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:29,802 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:29,804 - INFO - mvg.mvg - timestamp: 1571137260\n", + "2021-09-22 20:54:29,805 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4101,18 +4131,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1574078460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1571137260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:28:28,591 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:28:28,592 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:28:28,593 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:28:28,593 - INFO - mvg.mvg - timestamp: 1570618860\n", - "2021-06-24 12:28:28,594 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:30,768 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:30,769 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:30,770 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:30,771 - INFO - mvg.mvg - timestamp: 1571223660\n", + "2021-09-22 20:54:30,773 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4121,18 +4151,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570618860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1571223660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:28:35,121 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:28:35,122 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:28:35,122 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:28:35,123 - INFO - mvg.mvg - timestamp: 1572350460\n", - "2021-06-24 12:28:35,123 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:31,753 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:31,754 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:31,754 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:31,755 - INFO - mvg.mvg - timestamp: 1571310060\n", + "2021-09-22 20:54:31,756 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4141,18 +4171,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572350460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1571310060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:28:41,800 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:28:41,800 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:28:41,801 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:28:41,801 - INFO - mvg.mvg - timestamp: 1572264060\n", - "2021-06-24 12:28:41,802 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:32,697 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:32,698 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:32,700 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:32,700 - INFO - mvg.mvg - timestamp: 1571396460\n", + "2021-09-22 20:54:32,702 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4161,18 +4191,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572264060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1571396460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:28:48,335 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:28:48,336 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:28:48,336 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:28:48,337 - INFO - mvg.mvg - timestamp: 1573387260\n", - "2021-06-24 12:28:48,337 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:33,656 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:33,657 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:33,658 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:33,659 - INFO - mvg.mvg - timestamp: 1571482860\n", + "2021-09-22 20:54:33,660 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4181,18 +4211,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573387260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1571482860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:28:55,103 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:28:55,104 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:28:55,105 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:28:55,105 - INFO - mvg.mvg - timestamp: 1571914860\n", - "2021-06-24 12:28:55,105 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:34,625 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:34,626 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:34,627 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:34,628 - INFO - mvg.mvg - timestamp: 1571569260\n", + "2021-09-22 20:54:34,629 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4201,18 +4231,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571914860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1571569260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:29:01,898 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:29:01,899 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:29:01,899 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:29:01,900 - INFO - mvg.mvg - timestamp: 1570446060\n", - "2021-06-24 12:29:01,900 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:35,604 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:35,605 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:35,605 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:35,606 - INFO - mvg.mvg - timestamp: 1571655660\n", + "2021-09-22 20:54:35,607 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4221,18 +4251,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570446060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1571655660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:29:08,324 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:29:08,325 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:29:08,325 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:29:08,326 - INFO - mvg.mvg - timestamp: 1572087660\n", - "2021-06-24 12:29:08,326 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:36,561 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:36,562 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:36,563 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:36,563 - INFO - mvg.mvg - timestamp: 1571742060\n", + "2021-09-22 20:54:36,564 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4241,18 +4271,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572087660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1571742060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:29:15,505 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:29:15,505 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:29:15,506 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:29:15,506 - INFO - mvg.mvg - timestamp: 1573905660\n", - "2021-06-24 12:29:15,507 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:37,494 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:37,495 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:37,495 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:37,496 - INFO - mvg.mvg - timestamp: 1571828460\n", + "2021-09-22 20:54:37,497 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4261,18 +4291,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573905660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1571828460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:29:22,221 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:29:22,221 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:29:22,222 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:29:22,222 - INFO - mvg.mvg - timestamp: 1574164860\n", - "2021-06-24 12:29:22,223 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:38,457 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:38,458 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:38,459 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:38,460 - INFO - mvg.mvg - timestamp: 1571914860\n", + "2021-09-22 20:54:38,461 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4281,18 +4311,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1574164860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1571914860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:29:29,681 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:29:29,681 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:29:29,681 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:29:29,681 - INFO - mvg.mvg - timestamp: 1573473660\n", - "2021-06-24 12:29:29,682 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:39,417 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:39,419 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:39,420 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:39,421 - INFO - mvg.mvg - timestamp: 1572001260\n", + "2021-09-22 20:54:39,421 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4301,18 +4331,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573473660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1572001260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:29:36,575 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:29:36,575 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:29:36,575 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:29:36,576 - INFO - mvg.mvg - timestamp: 1573560060\n", - "2021-06-24 12:29:36,576 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:40,380 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:40,381 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:40,382 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:40,383 - INFO - mvg.mvg - timestamp: 1572087660\n", + "2021-09-22 20:54:40,384 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4321,18 +4351,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573560060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1572087660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:29:43,999 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:29:44,000 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:29:44,000 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:29:44,001 - INFO - mvg.mvg - timestamp: 1570186860\n", - "2021-06-24 12:29:44,002 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:41,397 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:41,397 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:41,398 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:41,399 - INFO - mvg.mvg - timestamp: 1572177660\n", + "2021-09-22 20:54:41,401 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4341,18 +4371,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570186860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1572177660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:29:50,648 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:29:50,648 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:29:50,649 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:29:50,650 - INFO - mvg.mvg - timestamp: 1571223660\n", - "2021-06-24 12:29:50,650 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:42,348 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:42,348 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:42,349 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:42,350 - INFO - mvg.mvg - timestamp: 1572264060\n", + "2021-09-22 20:54:42,351 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4361,18 +4391,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571223660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1572264060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:29:57,389 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:29:57,390 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:29:57,390 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:29:57,390 - INFO - mvg.mvg - timestamp: 1572609660\n", - "2021-06-24 12:29:57,391 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:43,295 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:43,296 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:43,296 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:43,297 - INFO - mvg.mvg - timestamp: 1572350460\n", + "2021-09-22 20:54:43,299 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4381,18 +4411,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572609660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1572350460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:30:05,117 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:30:05,118 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:30:05,118 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:30:05,119 - INFO - mvg.mvg - timestamp: 1573992060\n", - "2021-06-24 12:30:05,120 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:44,237 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:44,237 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:44,238 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:44,239 - INFO - mvg.mvg - timestamp: 1572436860\n", + "2021-09-22 20:54:44,240 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4401,18 +4431,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573992060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1572436860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:30:12,147 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:30:12,147 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:30:12,148 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:30:12,148 - INFO - mvg.mvg - timestamp: 1574251260\n", - "2021-06-24 12:30:12,148 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:45,195 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:45,196 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:45,198 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:45,199 - INFO - mvg.mvg - timestamp: 1572523260\n", + "2021-09-22 20:54:45,200 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4421,18 +4451,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1574251260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1572523260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:30:19,347 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:30:19,347 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:30:19,348 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:30:19,348 - INFO - mvg.mvg - timestamp: 1572436860\n", - "2021-06-24 12:30:19,349 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:46,146 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:46,146 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:46,147 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:46,148 - INFO - mvg.mvg - timestamp: 1572609660\n", + "2021-09-22 20:54:46,149 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4441,18 +4471,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572436860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1572609660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:30:26,111 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:30:26,111 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:30:26,111 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:30:26,112 - INFO - mvg.mvg - timestamp: 1573128060\n", - "2021-06-24 12:30:26,112 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:47,082 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:47,083 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:47,083 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:47,084 - INFO - mvg.mvg - timestamp: 1572696060\n", + "2021-09-22 20:54:47,085 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4461,18 +4491,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573128060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1572696060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:30:33,721 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:30:33,721 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:30:33,722 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:30:33,722 - INFO - mvg.mvg - timestamp: 1573041660\n", - "2021-06-24 12:30:33,722 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:48,037 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:48,037 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:48,038 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:48,039 - INFO - mvg.mvg - timestamp: 1572782460\n", + "2021-09-22 20:54:48,040 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4481,18 +4511,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573041660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1572782460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:30:40,347 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:30:40,348 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:30:40,348 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:30:40,349 - INFO - mvg.mvg - timestamp: 1573214460\n", - "2021-06-24 12:30:40,349 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:48,984 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:48,985 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:48,986 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:48,988 - INFO - mvg.mvg - timestamp: 1572868860\n", + "2021-09-22 20:54:48,990 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4501,18 +4531,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573214460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1572868860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:30:47,158 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:30:47,159 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:30:47,159 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:30:47,160 - INFO - mvg.mvg - timestamp: 1571396460\n", - "2021-06-24 12:30:47,160 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:49,972 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:49,973 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:49,974 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:49,974 - INFO - mvg.mvg - timestamp: 1572955260\n", + "2021-09-22 20:54:49,975 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4521,18 +4551,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571396460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1572955260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:30:54,242 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:30:54,243 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:30:54,243 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:30:54,244 - INFO - mvg.mvg - timestamp: 1573819260\n", - "2021-06-24 12:30:54,244 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:50,948 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:50,949 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:50,950 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:50,950 - INFO - mvg.mvg - timestamp: 1573041660\n", + "2021-09-22 20:54:50,951 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4541,18 +4571,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573819260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1573041660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:31:01,049 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:31:01,050 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:31:01,050 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:31:01,051 - INFO - mvg.mvg - timestamp: 1570359660\n", - "2021-06-24 12:31:01,051 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:51,883 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:51,883 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:51,884 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:51,885 - INFO - mvg.mvg - timestamp: 1573128060\n", + "2021-09-22 20:54:51,886 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4561,18 +4591,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570359660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1573128060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:31:09,467 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:31:09,468 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:31:09,468 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:31:09,468 - INFO - mvg.mvg - timestamp: 1572001260\n", - "2021-06-24 12:31:09,469 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:52,859 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:52,860 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:52,861 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:52,862 - INFO - mvg.mvg - timestamp: 1573214460\n", + "2021-09-22 20:54:52,863 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4581,18 +4611,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572001260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1573214460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:31:16,963 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:31:16,963 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:31:16,964 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:31:16,964 - INFO - mvg.mvg - timestamp: 1570532460\n", - "2021-06-24 12:31:16,965 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:54,178 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:54,179 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:54,180 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:54,181 - INFO - mvg.mvg - timestamp: 1573300860\n", + "2021-09-22 20:54:54,181 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4601,18 +4631,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570532460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1573300860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:31:23,728 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:31:23,729 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:31:23,729 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:31:23,730 - INFO - mvg.mvg - timestamp: 1572782460\n", - "2021-06-24 12:31:23,730 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:55,162 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:55,163 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:55,164 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:55,165 - INFO - mvg.mvg - timestamp: 1573387260\n", + "2021-09-22 20:54:55,166 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4621,18 +4651,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572782460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1573387260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:31:30,871 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:31:30,872 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:31:30,873 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:31:30,873 - INFO - mvg.mvg - timestamp: 1574424060\n", - "2021-06-24 12:31:30,874 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:56,151 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:56,153 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:56,154 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:56,156 - INFO - mvg.mvg - timestamp: 1573473660\n", + "2021-09-22 20:54:56,157 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4641,18 +4671,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1574424060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1573473660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:31:37,674 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:31:37,675 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:31:37,675 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:31:37,676 - INFO - mvg.mvg - timestamp: 1571137260\n", - "2021-06-24 12:31:37,676 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:57,119 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:57,120 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:57,122 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:57,123 - INFO - mvg.mvg - timestamp: 1573560060\n", + "2021-09-22 20:54:57,127 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4661,18 +4691,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571137260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1573560060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:31:44,356 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:31:44,356 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:31:44,357 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:31:44,358 - INFO - mvg.mvg - timestamp: 1571828460\n", - "2021-06-24 12:31:44,358 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:54:58,079 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:54:58,079 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:54:58,080 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:54:58,081 - INFO - mvg.mvg - timestamp: 1573646460\n", + "2021-09-22 20:54:58,082 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4681,18 +4711,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571828460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1573646460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:31:51,802 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:31:51,803 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:31:51,803 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:31:51,804 - INFO - mvg.mvg - timestamp: 1574337660\n", - "2021-06-24 12:31:51,804 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:00,095 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:00,096 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:55:00,097 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:00,098 - INFO - mvg.mvg - timestamp: 1573732860\n", + "2021-09-22 20:55:00,099 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4701,18 +4731,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1574337660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1573732860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:31:58,464 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:31:58,464 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:31:58,465 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:31:58,466 - INFO - mvg.mvg - timestamp: 1572696060\n", - "2021-06-24 12:31:58,466 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:01,061 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:01,062 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:55:01,063 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:01,064 - INFO - mvg.mvg - timestamp: 1573819260\n", + "2021-09-22 20:55:01,064 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4721,18 +4751,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1572696060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1573819260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:32:05,096 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:32:05,096 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:32:05,097 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:32:05,097 - INFO - mvg.mvg - timestamp: 1573646460\n", - "2021-06-24 12:32:05,098 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:02,036 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:02,037 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:55:02,038 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:02,040 - INFO - mvg.mvg - timestamp: 1573905660\n", + "2021-09-22 20:55:02,041 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4741,18 +4771,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573646460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1573905660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:32:11,512 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:32:11,512 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:32:11,513 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:32:11,513 - INFO - mvg.mvg - timestamp: 1571050860\n", - "2021-06-24 12:32:11,514 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:03,199 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:03,201 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:55:03,201 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:03,203 - INFO - mvg.mvg - timestamp: 1573992060\n", + "2021-09-22 20:55:03,204 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4761,18 +4791,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571050860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1573992060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:32:18,842 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:32:18,842 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:32:18,843 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:32:18,843 - INFO - mvg.mvg - timestamp: 1570791660\n", - "2021-06-24 12:32:18,844 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:04,136 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:04,137 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:55:04,138 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:04,139 - INFO - mvg.mvg - timestamp: 1574078460\n", + "2021-09-22 20:55:04,140 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4781,18 +4811,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570791660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1574078460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:32:25,611 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:32:25,612 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:32:25,613 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:32:25,613 - INFO - mvg.mvg - timestamp: 1570273260\n", - "2021-06-24 12:32:25,613 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:05,072 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:05,073 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:55:05,074 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:05,076 - INFO - mvg.mvg - timestamp: 1574164860\n", + "2021-09-22 20:55:05,077 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4801,18 +4831,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570273260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1574164860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:32:32,215 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:32:32,215 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:32:32,216 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:32:32,216 - INFO - mvg.mvg - timestamp: 1573300860\n", - "2021-06-24 12:32:32,217 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:06,015 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:06,016 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:55:06,017 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:06,017 - INFO - mvg.mvg - timestamp: 1574251260\n", + "2021-09-22 20:55:06,018 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4821,18 +4851,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1573300860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1574251260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:32:39,051 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:32:39,051 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:32:39,052 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:32:39,052 - INFO - mvg.mvg - timestamp: 1571310060\n", - "2021-06-24 12:32:39,053 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:06,967 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:06,968 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:55:06,969 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:06,969 - INFO - mvg.mvg - timestamp: 1574337660\n", + "2021-09-22 20:55:06,970 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4841,18 +4871,18 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1571310060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1574337660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:32:46,440 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:32:46,441 - INFO - mvg.mvg - creating measurement from source id=u0004\n", - "2021-06-24 12:32:46,441 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:32:46,442 - INFO - mvg.mvg - timestamp: 1570878060\n", - "2021-06-24 12:32:46,442 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:07,911 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:07,911 - INFO - mvg.mvg - creating measurement from source id=u0004\n", + "2021-09-22 20:55:07,912 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:07,913 - INFO - mvg.mvg - timestamp: 1574424060\n", + "2021-09-22 20:55:07,914 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4861,15 +4891,15 @@ "text": [ "Read 40000 samples for u0004.\n", "Read u0004 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0004\\1570878060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0004/1574424060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:32:52,880 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:32:52,881 - INFO - mvg.mvg - deleting source with source id=u0005\n" + "2021-09-22 20:55:08,828 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:08,829 - INFO - mvg.mvg - deleting source with source id=u0005\n" ] }, { @@ -4884,14 +4914,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:32:53,090 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:32:53,091 - INFO - mvg.mvg - creating source with source id=u0005\n", - "2021-06-24 12:32:53,091 - INFO - mvg.mvg - metadata: {'assetId': 'assetE', 'measPoint': 'mloc01', 'location': 'london'}\n", - "2021-06-24 12:32:53,318 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:32:53,319 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:32:53,319 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:32:53,320 - INFO - mvg.mvg - timestamp: 1573732860\n", - "2021-06-24 12:32:53,320 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:09,041 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:09,041 - INFO - mvg.mvg - creating source with source id=u0005\n", + "2021-09-22 20:55:09,042 - INFO - mvg.mvg - metadata: {'assetId': 'assetE', 'measPoint': 'mloc01', 'location': 'london'}\n", + "2021-09-22 20:55:09,286 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:09,287 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:09,287 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:09,288 - INFO - mvg.mvg - timestamp: 1570186860\n", + "2021-09-22 20:55:09,289 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4900,18 +4930,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573732860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1570186860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:33:00,067 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:33:00,067 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:33:00,068 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:33:00,068 - INFO - mvg.mvg - timestamp: 1571655660\n", - "2021-06-24 12:33:00,069 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:10,239 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:10,239 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:10,240 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:10,241 - INFO - mvg.mvg - timestamp: 1570273260\n", + "2021-09-22 20:55:10,242 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4920,18 +4950,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571655660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1570273260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:33:06,763 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:33:06,764 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:33:06,765 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:33:06,765 - INFO - mvg.mvg - timestamp: 1572523260\n", - "2021-06-24 12:33:06,765 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:11,238 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:11,239 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:11,240 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:11,241 - INFO - mvg.mvg - timestamp: 1570359660\n", + "2021-09-22 20:55:11,242 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4940,18 +4970,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572523260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1570359660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:33:15,005 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:33:15,005 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:33:15,006 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:33:15,007 - INFO - mvg.mvg - timestamp: 1571569260\n", - "2021-06-24 12:33:15,007 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:12,173 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:12,174 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:12,175 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:12,176 - INFO - mvg.mvg - timestamp: 1570446060\n", + "2021-09-22 20:55:12,177 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4960,18 +4990,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571569260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1570446060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:33:21,450 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:33:21,451 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:33:21,452 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:33:21,452 - INFO - mvg.mvg - timestamp: 1572177660\n", - "2021-06-24 12:33:21,453 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:13,122 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:13,123 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:13,124 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:13,125 - INFO - mvg.mvg - timestamp: 1570532460\n", + "2021-09-22 20:55:13,126 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -4980,18 +5010,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572177660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1570532460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:33:28,169 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:33:28,170 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:33:28,170 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:33:28,171 - INFO - mvg.mvg - timestamp: 1570705260\n", - "2021-06-24 12:33:28,171 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:14,104 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:14,105 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:14,105 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:14,106 - INFO - mvg.mvg - timestamp: 1570618860\n", + "2021-09-22 20:55:14,107 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5000,18 +5030,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570705260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1570618860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:33:35,045 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:33:35,045 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:33:35,046 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:33:35,046 - INFO - mvg.mvg - timestamp: 1572868860\n", - "2021-06-24 12:33:35,047 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:15,059 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:15,060 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:15,061 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:15,061 - INFO - mvg.mvg - timestamp: 1570705260\n", + "2021-09-22 20:55:15,063 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5020,18 +5050,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572868860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1570705260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:33:41,782 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:33:41,782 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:33:41,783 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:33:41,783 - INFO - mvg.mvg - timestamp: 1570964460\n", - "2021-06-24 12:33:41,784 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:16,087 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:16,087 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:16,088 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:16,088 - INFO - mvg.mvg - timestamp: 1570791660\n", + "2021-09-22 20:55:16,089 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5040,18 +5070,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570964460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1570791660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:33:49,492 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:33:49,493 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:33:49,494 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:33:49,494 - INFO - mvg.mvg - timestamp: 1572955260\n", - "2021-06-24 12:33:49,495 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:17,018 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:17,019 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:17,020 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:17,022 - INFO - mvg.mvg - timestamp: 1570878060\n", + "2021-09-22 20:55:17,023 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5060,18 +5090,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572955260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1570878060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:33:56,866 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:33:56,867 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:33:56,867 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:33:56,867 - INFO - mvg.mvg - timestamp: 1571742060\n", - "2021-06-24 12:33:56,868 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:17,983 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:17,984 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:17,985 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:17,986 - INFO - mvg.mvg - timestamp: 1570964460\n", + "2021-09-22 20:55:17,987 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5080,18 +5110,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571742060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1570964460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:34:03,530 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:34:03,531 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:34:03,531 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:34:03,532 - INFO - mvg.mvg - timestamp: 1571482860\n", - "2021-06-24 12:34:03,532 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:18,950 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:18,951 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:18,952 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:18,953 - INFO - mvg.mvg - timestamp: 1571050860\n", + "2021-09-22 20:55:18,957 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5100,18 +5130,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571482860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1571050860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:34:10,179 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:34:10,180 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:34:10,180 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:34:10,181 - INFO - mvg.mvg - timestamp: 1574078460\n", - "2021-06-24 12:34:10,182 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:19,897 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:19,899 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:19,899 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:19,900 - INFO - mvg.mvg - timestamp: 1571137260\n", + "2021-09-22 20:55:19,901 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5120,18 +5150,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1574078460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1571137260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:34:18,593 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:34:18,593 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:34:18,594 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:34:18,594 - INFO - mvg.mvg - timestamp: 1570618860\n", - "2021-06-24 12:34:18,595 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:20,820 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:20,821 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:20,822 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:20,822 - INFO - mvg.mvg - timestamp: 1571223660\n", + "2021-09-22 20:55:20,823 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5140,18 +5170,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570618860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1571223660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:34:25,260 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:34:25,260 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:34:25,261 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:34:25,262 - INFO - mvg.mvg - timestamp: 1572350460\n", - "2021-06-24 12:34:25,262 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:21,984 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:21,985 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:21,986 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:21,986 - INFO - mvg.mvg - timestamp: 1571310060\n", + "2021-09-22 20:55:21,987 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5160,18 +5190,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572350460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1571310060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:34:31,906 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:34:31,906 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:34:31,906 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:34:31,907 - INFO - mvg.mvg - timestamp: 1572264060\n", - "2021-06-24 12:34:31,907 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:22,929 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:22,930 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:22,930 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:22,931 - INFO - mvg.mvg - timestamp: 1571396460\n", + "2021-09-22 20:55:22,932 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5180,18 +5210,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572264060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1571396460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:34:39,615 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:34:39,615 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:34:39,615 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:34:39,616 - INFO - mvg.mvg - timestamp: 1573387260\n", - "2021-06-24 12:34:39,617 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:23,915 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:23,915 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:23,916 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:23,917 - INFO - mvg.mvg - timestamp: 1571482860\n", + "2021-09-22 20:55:23,918 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5200,18 +5230,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573387260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1571482860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:34:46,360 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:34:46,361 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:34:46,362 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:34:46,362 - INFO - mvg.mvg - timestamp: 1571914860\n", - "2021-06-24 12:34:46,362 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:25,704 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:25,706 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:25,706 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:25,707 - INFO - mvg.mvg - timestamp: 1571569260\n", + "2021-09-22 20:55:25,708 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5220,18 +5250,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571914860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1571569260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:34:53,317 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:34:53,317 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:34:53,318 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:34:53,318 - INFO - mvg.mvg - timestamp: 1570446060\n", - "2021-06-24 12:34:53,319 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:27,025 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:27,027 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:27,028 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:27,030 - INFO - mvg.mvg - timestamp: 1571655660\n", + "2021-09-22 20:55:27,031 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5240,18 +5270,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570446060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1571655660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:34:59,736 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:34:59,736 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:34:59,737 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:34:59,737 - INFO - mvg.mvg - timestamp: 1572087660\n", - "2021-06-24 12:34:59,737 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:28,444 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:28,445 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:28,447 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:28,448 - INFO - mvg.mvg - timestamp: 1571742060\n", + "2021-09-22 20:55:28,449 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5260,18 +5290,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572087660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1571742060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:35:07,394 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:35:07,395 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:35:07,396 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:35:07,396 - INFO - mvg.mvg - timestamp: 1573905660\n", - "2021-06-24 12:35:07,397 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:30,104 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:30,105 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:30,107 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:30,108 - INFO - mvg.mvg - timestamp: 1571828460\n", + "2021-09-22 20:55:30,110 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5280,18 +5310,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573905660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1571828460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:35:14,314 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:35:14,315 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:35:14,315 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:35:14,316 - INFO - mvg.mvg - timestamp: 1574164860\n", - "2021-06-24 12:35:14,317 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:31,843 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:31,843 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:31,844 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:31,845 - INFO - mvg.mvg - timestamp: 1571914860\n", + "2021-09-22 20:55:31,846 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5300,18 +5330,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1574164860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1571914860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:35:21,181 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:35:21,182 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:35:21,182 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:35:21,183 - INFO - mvg.mvg - timestamp: 1573473660\n", - "2021-06-24 12:35:21,183 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:34,716 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:34,717 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:34,718 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:34,721 - INFO - mvg.mvg - timestamp: 1572001260\n", + "2021-09-22 20:55:34,722 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5320,18 +5350,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573473660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1572001260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:35:29,311 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:35:29,312 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:35:29,313 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:35:29,313 - INFO - mvg.mvg - timestamp: 1573560060\n", - "2021-06-24 12:35:29,313 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:35,679 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:35,679 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:35,680 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:35,682 - INFO - mvg.mvg - timestamp: 1572087660\n", + "2021-09-22 20:55:35,683 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5340,18 +5370,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573560060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1572087660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:35:36,001 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:35:36,001 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:35:36,003 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:35:36,003 - INFO - mvg.mvg - timestamp: 1570186860\n", - "2021-06-24 12:35:36,003 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:36,609 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:36,610 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:36,611 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:36,612 - INFO - mvg.mvg - timestamp: 1572177660\n", + "2021-09-22 20:55:36,613 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5360,18 +5390,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570186860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1572177660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:35:42,721 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:35:42,721 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:35:42,721 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:35:42,721 - INFO - mvg.mvg - timestamp: 1571223660\n", - "2021-06-24 12:35:42,722 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:37,557 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:37,558 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:37,560 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:37,561 - INFO - mvg.mvg - timestamp: 1572264060\n", + "2021-09-22 20:55:37,563 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5380,18 +5410,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571223660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1572264060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:35:49,562 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:35:49,563 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:35:49,564 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:35:49,564 - INFO - mvg.mvg - timestamp: 1572609660\n", - "2021-06-24 12:35:49,565 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:38,507 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:38,508 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:38,510 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:38,511 - INFO - mvg.mvg - timestamp: 1572350460\n", + "2021-09-22 20:55:38,512 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5400,18 +5430,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572609660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1572350460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:35:56,971 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:35:56,971 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:35:56,972 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:35:56,972 - INFO - mvg.mvg - timestamp: 1573992060\n", - "2021-06-24 12:35:56,973 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:39,464 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:39,465 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:39,466 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:39,467 - INFO - mvg.mvg - timestamp: 1572436860\n", + "2021-09-22 20:55:39,468 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5420,18 +5450,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573992060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1572436860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:36:03,644 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:36:03,645 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:36:03,645 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:36:03,645 - INFO - mvg.mvg - timestamp: 1574251260\n", - "2021-06-24 12:36:03,646 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:40,398 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:40,399 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:40,400 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:40,401 - INFO - mvg.mvg - timestamp: 1572523260\n", + "2021-09-22 20:55:40,402 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5440,18 +5470,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1574251260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1572523260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:36:10,920 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:36:10,921 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:36:10,921 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:36:10,922 - INFO - mvg.mvg - timestamp: 1572436860\n", - "2021-06-24 12:36:10,922 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:41,342 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:41,344 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:41,344 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:41,345 - INFO - mvg.mvg - timestamp: 1572609660\n", + "2021-09-22 20:55:41,348 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5460,18 +5490,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572436860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1572609660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:36:17,503 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:36:17,504 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:36:17,505 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:36:17,505 - INFO - mvg.mvg - timestamp: 1573128060\n", - "2021-06-24 12:36:17,505 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:42,278 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:42,278 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:42,279 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:42,280 - INFO - mvg.mvg - timestamp: 1572696060\n", + "2021-09-22 20:55:42,281 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5480,18 +5510,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573128060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1572696060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:36:24,355 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:36:24,355 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:36:24,356 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:36:24,356 - INFO - mvg.mvg - timestamp: 1573041660\n", - "2021-06-24 12:36:24,356 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:43,212 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:43,212 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:43,213 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:43,214 - INFO - mvg.mvg - timestamp: 1572782460\n", + "2021-09-22 20:55:43,214 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5500,18 +5530,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573041660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1572782460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:36:30,712 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:36:30,712 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:36:30,713 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:36:30,713 - INFO - mvg.mvg - timestamp: 1573214460\n", - "2021-06-24 12:36:30,714 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:44,138 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:44,139 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:44,139 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:44,140 - INFO - mvg.mvg - timestamp: 1572868860\n", + "2021-09-22 20:55:44,141 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5520,18 +5550,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573214460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1572868860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:36:37,526 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:36:37,527 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:36:37,528 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:36:37,528 - INFO - mvg.mvg - timestamp: 1571396460\n", - "2021-06-24 12:36:37,529 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:45,115 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:45,116 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:45,117 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:45,118 - INFO - mvg.mvg - timestamp: 1572955260\n", + "2021-09-22 20:55:45,119 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5540,18 +5570,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571396460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1572955260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:36:44,328 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:36:44,329 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:36:44,329 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:36:44,330 - INFO - mvg.mvg - timestamp: 1573819260\n", - "2021-06-24 12:36:44,330 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:46,067 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:46,067 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:46,068 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:46,069 - INFO - mvg.mvg - timestamp: 1573041660\n", + "2021-09-22 20:55:46,070 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5560,18 +5590,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573819260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1573041660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:36:51,188 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:36:51,189 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:36:51,189 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:36:51,190 - INFO - mvg.mvg - timestamp: 1570359660\n", - "2021-06-24 12:36:51,190 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:47,027 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:47,027 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:47,028 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:47,029 - INFO - mvg.mvg - timestamp: 1573128060\n", + "2021-09-22 20:55:47,030 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5580,18 +5610,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570359660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1573128060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:36:57,859 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:36:57,860 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:36:57,860 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:36:57,861 - INFO - mvg.mvg - timestamp: 1572001260\n", - "2021-06-24 12:36:57,861 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:48,022 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:48,024 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:48,024 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:48,025 - INFO - mvg.mvg - timestamp: 1573214460\n", + "2021-09-22 20:55:48,026 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5600,18 +5630,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572001260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1573214460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:37:05,371 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:37:05,371 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:37:05,372 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:37:05,372 - INFO - mvg.mvg - timestamp: 1570532460\n", - "2021-06-24 12:37:05,372 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:49,116 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:49,118 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:49,119 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:49,120 - INFO - mvg.mvg - timestamp: 1573300860\n", + "2021-09-22 20:55:49,121 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5620,18 +5650,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570532460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1573300860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:37:11,874 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:37:11,874 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:37:11,875 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:37:11,876 - INFO - mvg.mvg - timestamp: 1572782460\n", - "2021-06-24 12:37:11,876 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:50,058 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:50,059 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:50,060 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:50,061 - INFO - mvg.mvg - timestamp: 1573387260\n", + "2021-09-22 20:55:50,062 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5640,18 +5670,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572782460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1573387260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:37:18,718 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:37:18,719 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:37:18,719 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:37:18,719 - INFO - mvg.mvg - timestamp: 1574424060\n", - "2021-06-24 12:37:18,720 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:51,013 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:51,014 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:51,015 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:51,018 - INFO - mvg.mvg - timestamp: 1573473660\n", + "2021-09-22 20:55:51,019 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5660,18 +5690,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1574424060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1573473660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:37:25,229 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:37:25,229 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:37:25,230 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:37:25,230 - INFO - mvg.mvg - timestamp: 1571137260\n", - "2021-06-24 12:37:25,230 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:51,954 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:51,955 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:51,956 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:51,957 - INFO - mvg.mvg - timestamp: 1573560060\n", + "2021-09-22 20:55:51,958 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5680,18 +5710,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571137260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1573560060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:37:33,125 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:37:33,126 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:37:33,127 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:37:33,127 - INFO - mvg.mvg - timestamp: 1571828460\n", - "2021-06-24 12:37:33,127 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:52,906 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:52,907 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:52,908 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:52,908 - INFO - mvg.mvg - timestamp: 1573646460\n", + "2021-09-22 20:55:52,910 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5700,18 +5730,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571828460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1573646460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:37:40,051 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:37:40,052 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:37:40,053 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:37:40,053 - INFO - mvg.mvg - timestamp: 1574337660\n", - "2021-06-24 12:37:40,054 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:53,917 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:53,917 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:53,919 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:53,919 - INFO - mvg.mvg - timestamp: 1573732860\n", + "2021-09-22 20:55:53,921 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5720,18 +5750,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1574337660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1573732860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:37:47,883 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:37:47,883 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:37:47,884 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:37:47,884 - INFO - mvg.mvg - timestamp: 1572696060\n", - "2021-06-24 12:37:47,885 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:54,909 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:54,910 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:54,911 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:54,911 - INFO - mvg.mvg - timestamp: 1573819260\n", + "2021-09-22 20:55:54,912 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5740,18 +5770,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1572696060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1573819260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:37:54,413 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:37:54,413 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:37:54,413 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:37:54,414 - INFO - mvg.mvg - timestamp: 1573646460\n", - "2021-06-24 12:37:54,414 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:55,857 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:55,857 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:55,859 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:55,859 - INFO - mvg.mvg - timestamp: 1573905660\n", + "2021-09-22 20:55:55,860 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5760,18 +5790,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573646460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1573905660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:38:02,025 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:38:02,025 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:38:02,026 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:38:02,026 - INFO - mvg.mvg - timestamp: 1571050860\n", - "2021-06-24 12:38:02,026 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:56,807 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:56,808 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:56,809 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:56,810 - INFO - mvg.mvg - timestamp: 1573992060\n", + "2021-09-22 20:55:56,811 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5780,18 +5810,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571050860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1573992060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:38:08,483 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:38:08,483 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:38:08,484 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:38:08,484 - INFO - mvg.mvg - timestamp: 1570791660\n", - "2021-06-24 12:38:08,485 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:57,779 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:57,779 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:57,780 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:57,781 - INFO - mvg.mvg - timestamp: 1574078460\n", + "2021-09-22 20:55:57,781 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5800,18 +5830,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570791660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1574078460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:38:15,066 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:38:15,066 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:38:15,067 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:38:15,068 - INFO - mvg.mvg - timestamp: 1570273260\n", - "2021-06-24 12:38:15,068 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:58,716 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:58,716 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:58,717 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:58,718 - INFO - mvg.mvg - timestamp: 1574164860\n", + "2021-09-22 20:55:58,719 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5820,18 +5850,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570273260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1574164860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:38:21,816 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:38:21,816 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:38:21,817 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:38:21,817 - INFO - mvg.mvg - timestamp: 1573300860\n", - "2021-06-24 12:38:21,817 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:55:59,694 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:55:59,695 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:55:59,696 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:55:59,697 - INFO - mvg.mvg - timestamp: 1574251260\n", + "2021-09-22 20:55:59,698 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5840,18 +5870,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1573300860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1574251260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:38:28,190 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:38:28,191 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:38:28,191 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:38:28,192 - INFO - mvg.mvg - timestamp: 1571310060\n", - "2021-06-24 12:38:28,193 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:00,626 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:00,628 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:56:00,628 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:00,629 - INFO - mvg.mvg - timestamp: 1574337660\n", + "2021-09-22 20:56:00,630 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5860,18 +5890,18 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1571310060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1574337660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:38:35,973 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:38:35,974 - INFO - mvg.mvg - creating measurement from source id=u0005\n", - "2021-06-24 12:38:35,974 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:38:35,975 - INFO - mvg.mvg - timestamp: 1570878060\n", - "2021-06-24 12:38:35,975 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:01,598 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:01,599 - INFO - mvg.mvg - creating measurement from source id=u0005\n", + "2021-09-22 20:56:01,600 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:01,601 - INFO - mvg.mvg - timestamp: 1574424060\n", + "2021-09-22 20:56:01,602 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5880,15 +5910,15 @@ "text": [ "Read 40000 samples for u0005.\n", "Read u0005 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0005\\1570878060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0005/1574424060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:38:42,567 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:38:42,567 - INFO - mvg.mvg - deleting source with source id=u0006\n" + "2021-09-22 20:56:02,503 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:02,505 - INFO - mvg.mvg - deleting source with source id=u0006\n" ] }, { @@ -5903,14 +5933,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:38:42,782 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:38:42,782 - INFO - mvg.mvg - creating source with source id=u0006\n", - "2021-06-24 12:38:42,783 - INFO - mvg.mvg - metadata: {'assetId': 'assetF', 'measPoint': 'mloc01', 'location': 'london'}\n", - "2021-06-24 12:38:43,014 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:38:43,014 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:38:43,015 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:38:43,015 - INFO - mvg.mvg - timestamp: 1573732860\n", - "2021-06-24 12:38:43,016 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:02,710 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:02,712 - INFO - mvg.mvg - creating source with source id=u0006\n", + "2021-09-22 20:56:02,712 - INFO - mvg.mvg - metadata: {'assetId': 'assetF', 'measPoint': 'mloc01', 'location': 'london'}\n", + "2021-09-22 20:56:02,936 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:02,936 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:02,938 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:02,940 - INFO - mvg.mvg - timestamp: 1570186860\n", + "2021-09-22 20:56:02,942 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5919,18 +5949,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573732860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1570186860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:38:49,589 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:38:49,590 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:38:49,591 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:38:49,591 - INFO - mvg.mvg - timestamp: 1571655660\n", - "2021-06-24 12:38:49,592 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:03,878 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:03,880 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:03,881 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:03,882 - INFO - mvg.mvg - timestamp: 1570273260\n", + "2021-09-22 20:56:03,883 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5939,18 +5969,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571655660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1570273260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:38:57,635 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:38:57,636 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:38:57,637 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:38:57,637 - INFO - mvg.mvg - timestamp: 1572523260\n", - "2021-06-24 12:38:57,638 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:04,824 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:04,825 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:04,826 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:04,827 - INFO - mvg.mvg - timestamp: 1570359660\n", + "2021-09-22 20:56:04,828 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5959,18 +5989,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572523260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1570359660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:39:04,276 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:39:04,277 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:39:04,278 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:39:04,278 - INFO - mvg.mvg - timestamp: 1571569260\n", - "2021-06-24 12:39:04,278 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:05,787 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:05,788 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:05,789 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:05,789 - INFO - mvg.mvg - timestamp: 1571137260\n", + "2021-09-22 20:56:05,792 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5979,18 +6009,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571569260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1571137260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:39:11,274 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:39:11,274 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:39:11,274 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:39:11,275 - INFO - mvg.mvg - timestamp: 1572177660\n", - "2021-06-24 12:39:11,275 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:06,749 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:06,750 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:06,751 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:06,752 - INFO - mvg.mvg - timestamp: 1571223660\n", + "2021-09-22 20:56:06,753 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -5999,18 +6029,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572177660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1571223660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:39:18,119 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:39:18,119 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:39:18,119 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:39:18,120 - INFO - mvg.mvg - timestamp: 1572868860\n", - "2021-06-24 12:39:18,120 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:07,718 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:07,719 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:07,719 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:07,722 - INFO - mvg.mvg - timestamp: 1571310060\n", + "2021-09-22 20:56:07,723 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6019,18 +6049,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572868860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1571310060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:39:25,566 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:39:25,567 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:39:25,567 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:39:25,568 - INFO - mvg.mvg - timestamp: 1572955260\n", - "2021-06-24 12:39:25,569 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:08,697 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:08,699 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:08,699 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:08,700 - INFO - mvg.mvg - timestamp: 1571396460\n", + "2021-09-22 20:56:08,701 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6039,18 +6069,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572955260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1571396460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:39:32,980 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:39:32,981 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:39:32,982 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:39:32,983 - INFO - mvg.mvg - timestamp: 1574078460\n", - "2021-06-24 12:39:32,983 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:09,668 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:09,669 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:09,670 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:09,671 - INFO - mvg.mvg - timestamp: 1571482860\n", + "2021-09-22 20:56:09,672 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6059,18 +6089,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1574078460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1571482860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:39:39,700 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:39:39,701 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:39:39,702 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:39:39,702 - INFO - mvg.mvg - timestamp: 1571742060\n", - "2021-06-24 12:39:39,703 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:10,606 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:10,607 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:10,607 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:10,608 - INFO - mvg.mvg - timestamp: 1571569260\n", + "2021-09-22 20:56:10,609 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6079,18 +6109,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571742060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1571569260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:39:46,859 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:39:46,859 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:39:46,860 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:39:46,860 - INFO - mvg.mvg - timestamp: 1571482860\n", - "2021-06-24 12:39:46,861 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:11,547 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:11,548 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:11,549 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:11,549 - INFO - mvg.mvg - timestamp: 1571655660\n", + "2021-09-22 20:56:11,550 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6099,18 +6129,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571482860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1571655660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:39:53,516 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:39:53,517 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:39:53,517 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:39:53,518 - INFO - mvg.mvg - timestamp: 1572350460\n", - "2021-06-24 12:39:53,518 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:12,495 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:12,496 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:12,497 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:12,498 - INFO - mvg.mvg - timestamp: 1571742060\n", + "2021-09-22 20:56:12,499 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6119,18 +6149,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572350460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1571742060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:40:01,179 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:40:01,179 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:40:01,179 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:40:01,180 - INFO - mvg.mvg - timestamp: 1572264060\n", - "2021-06-24 12:40:01,180 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:13,436 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:13,437 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:13,439 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:13,440 - INFO - mvg.mvg - timestamp: 1571828460\n", + "2021-09-22 20:56:13,441 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6139,18 +6169,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572264060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1571828460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:40:08,073 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:40:08,073 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:40:08,073 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:40:08,074 - INFO - mvg.mvg - timestamp: 1573387260\n", - "2021-06-24 12:40:08,074 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:14,385 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:14,386 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:14,386 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:14,387 - INFO - mvg.mvg - timestamp: 1571914860\n", + "2021-09-22 20:56:14,388 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6159,18 +6189,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573387260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1571914860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:40:15,443 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:40:15,444 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:40:15,445 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:40:15,445 - INFO - mvg.mvg - timestamp: 1571914860\n", - "2021-06-24 12:40:15,446 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:15,406 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:15,407 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:15,408 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:15,408 - INFO - mvg.mvg - timestamp: 1572001260\n", + "2021-09-22 20:56:15,409 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6179,18 +6209,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571914860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1572001260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:40:23,134 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:40:23,135 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:40:23,135 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:40:23,136 - INFO - mvg.mvg - timestamp: 1572087660\n", - "2021-06-24 12:40:23,136 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:16,361 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:16,362 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:16,362 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:16,363 - INFO - mvg.mvg - timestamp: 1572087660\n", + "2021-09-22 20:56:16,364 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6199,18 +6229,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572087660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1572087660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:40:30,000 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:40:30,001 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:40:30,001 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:40:30,002 - INFO - mvg.mvg - timestamp: 1573905660\n", - "2021-06-24 12:40:30,002 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:18,939 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:18,940 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:18,940 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:18,941 - INFO - mvg.mvg - timestamp: 1572177660\n", + "2021-09-22 20:56:18,942 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6219,18 +6249,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573905660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1572177660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:40:37,166 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:40:37,167 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:40:37,167 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:40:37,168 - INFO - mvg.mvg - timestamp: 1574164860\n", - "2021-06-24 12:40:37,168 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:19,920 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:19,922 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:19,923 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:19,924 - INFO - mvg.mvg - timestamp: 1572264060\n", + "2021-09-22 20:56:19,926 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6239,18 +6269,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1574164860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1572264060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:40:47,341 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:40:47,342 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:40:47,342 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:40:47,343 - INFO - mvg.mvg - timestamp: 1573473660\n", - "2021-06-24 12:40:47,343 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:20,879 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:20,881 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:20,881 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:20,882 - INFO - mvg.mvg - timestamp: 1572350460\n", + "2021-09-22 20:56:20,885 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6259,18 +6289,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573473660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1572350460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:40:54,497 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:40:54,497 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:40:54,497 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:40:54,498 - INFO - mvg.mvg - timestamp: 1573560060\n", - "2021-06-24 12:40:54,498 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:21,810 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:21,811 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:21,812 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:21,812 - INFO - mvg.mvg - timestamp: 1572436860\n", + "2021-09-22 20:56:21,814 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6279,18 +6309,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573560060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1572436860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:41:01,085 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:41:01,085 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:41:01,085 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:41:01,086 - INFO - mvg.mvg - timestamp: 1570186860\n", - "2021-06-24 12:41:01,086 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:22,754 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:22,756 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:22,757 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:22,758 - INFO - mvg.mvg - timestamp: 1572523260\n", + "2021-09-22 20:56:22,759 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6299,18 +6329,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1570186860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1572523260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:41:08,242 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:41:08,243 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:41:08,244 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:41:08,244 - INFO - mvg.mvg - timestamp: 1571223660\n", - "2021-06-24 12:41:08,244 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:23,749 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:23,750 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:23,751 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:23,751 - INFO - mvg.mvg - timestamp: 1572609660\n", + "2021-09-22 20:56:23,753 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6319,18 +6349,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571223660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1572609660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:41:15,138 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:41:15,139 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:41:15,140 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:41:15,140 - INFO - mvg.mvg - timestamp: 1572609660\n", - "2021-06-24 12:41:15,141 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:24,730 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:24,731 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:24,732 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:24,733 - INFO - mvg.mvg - timestamp: 1572696060\n", + "2021-09-22 20:56:24,734 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6339,18 +6369,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572609660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1572696060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:41:22,009 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:41:22,010 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:41:22,010 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:41:22,011 - INFO - mvg.mvg - timestamp: 1573992060\n", - "2021-06-24 12:41:22,011 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:25,682 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:25,682 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:25,683 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:25,684 - INFO - mvg.mvg - timestamp: 1572782460\n", + "2021-09-22 20:56:25,685 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6359,18 +6389,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573992060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1572782460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:41:28,540 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:41:28,540 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:41:28,541 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:41:28,541 - INFO - mvg.mvg - timestamp: 1574251260\n", - "2021-06-24 12:41:28,542 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:26,644 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:26,645 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:26,646 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:26,647 - INFO - mvg.mvg - timestamp: 1572868860\n", + "2021-09-22 20:56:26,648 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6379,18 +6409,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1574251260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1572868860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:41:35,217 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:41:35,217 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:41:35,218 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:41:35,218 - INFO - mvg.mvg - timestamp: 1572436860\n", - "2021-06-24 12:41:35,218 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:27,666 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:27,667 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:27,668 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:27,669 - INFO - mvg.mvg - timestamp: 1572955260\n", + "2021-09-22 20:56:27,669 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6399,18 +6429,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572436860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1572955260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:41:42,222 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:41:42,223 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:41:42,223 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:41:42,224 - INFO - mvg.mvg - timestamp: 1573128060\n", - "2021-06-24 12:41:42,224 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:28,620 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:28,620 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:28,621 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:28,622 - INFO - mvg.mvg - timestamp: 1573041660\n", + "2021-09-22 20:56:28,623 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6419,18 +6449,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573128060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1573041660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:41:48,821 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:41:48,821 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:41:48,821 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:41:48,822 - INFO - mvg.mvg - timestamp: 1573041660\n", - "2021-06-24 12:41:48,823 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:29,613 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:29,614 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:29,615 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:29,616 - INFO - mvg.mvg - timestamp: 1573128060\n", + "2021-09-22 20:56:29,617 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6439,18 +6469,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573041660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1573128060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:41:55,642 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:41:55,643 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:41:55,644 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:41:55,644 - INFO - mvg.mvg - timestamp: 1573214460\n", - "2021-06-24 12:41:55,644 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:30,703 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:30,703 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:30,704 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:30,705 - INFO - mvg.mvg - timestamp: 1573214460\n", + "2021-09-22 20:56:30,706 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6459,18 +6489,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573214460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1573214460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:42:02,190 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:42:02,190 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:42:02,191 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:42:02,191 - INFO - mvg.mvg - timestamp: 1571396460\n", - "2021-06-24 12:42:02,192 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:31,696 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:31,698 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:31,699 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:31,701 - INFO - mvg.mvg - timestamp: 1573300860\n", + "2021-09-22 20:56:31,703 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6479,18 +6509,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571396460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1573300860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:42:09,935 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:42:09,936 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:42:09,936 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:42:09,937 - INFO - mvg.mvg - timestamp: 1573819260\n", - "2021-06-24 12:42:09,938 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:32,665 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:32,666 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:32,667 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:32,667 - INFO - mvg.mvg - timestamp: 1573387260\n", + "2021-09-22 20:56:32,668 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6499,18 +6529,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573819260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1573387260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:42:16,652 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:42:16,653 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:42:16,653 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:42:16,654 - INFO - mvg.mvg - timestamp: 1570359660\n", - "2021-06-24 12:42:16,654 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:33,618 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:33,620 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:33,621 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:33,622 - INFO - mvg.mvg - timestamp: 1573473660\n", + "2021-09-22 20:56:33,624 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6519,18 +6549,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1570359660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1573473660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:42:23,320 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:42:23,320 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:42:23,320 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:42:23,320 - INFO - mvg.mvg - timestamp: 1572001260\n", - "2021-06-24 12:42:23,321 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:34,578 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:34,579 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:34,581 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:34,582 - INFO - mvg.mvg - timestamp: 1573560060\n", + "2021-09-22 20:56:34,584 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6539,18 +6569,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572001260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1573560060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:42:30,811 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:42:30,812 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:42:30,813 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:42:30,813 - INFO - mvg.mvg - timestamp: 1572782460\n", - "2021-06-24 12:42:30,813 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:35,529 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:35,529 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:35,530 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:35,531 - INFO - mvg.mvg - timestamp: 1573646460\n", + "2021-09-22 20:56:35,533 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6559,18 +6589,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572782460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1573646460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:42:37,514 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:42:37,515 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:42:37,516 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:42:37,516 - INFO - mvg.mvg - timestamp: 1574424060\n", - "2021-06-24 12:42:37,517 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:36,473 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:36,474 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:36,475 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:36,476 - INFO - mvg.mvg - timestamp: 1573732860\n", + "2021-09-22 20:56:36,477 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6579,18 +6609,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1574424060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1573732860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:42:45,832 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:42:45,833 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:42:45,833 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:42:45,834 - INFO - mvg.mvg - timestamp: 1571137260\n", - "2021-06-24 12:42:45,834 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:37,423 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:37,424 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:37,425 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:37,426 - INFO - mvg.mvg - timestamp: 1573819260\n", + "2021-09-22 20:56:37,427 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6599,18 +6629,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571137260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1573819260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:42:54,711 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:42:54,712 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:42:54,713 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:42:54,713 - INFO - mvg.mvg - timestamp: 1571828460\n", - "2021-06-24 12:42:54,713 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:38,367 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:38,369 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:38,369 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:38,370 - INFO - mvg.mvg - timestamp: 1573905660\n", + "2021-09-22 20:56:38,371 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6619,18 +6649,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571828460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1573905660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:43:02,697 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:43:02,698 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:43:02,698 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:43:02,699 - INFO - mvg.mvg - timestamp: 1574337660\n", - "2021-06-24 12:43:02,699 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:39,307 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:39,308 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:39,310 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:39,313 - INFO - mvg.mvg - timestamp: 1573992060\n", + "2021-09-22 20:56:39,314 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6639,18 +6669,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1574337660.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1573992060.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:43:09,937 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:43:09,937 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:43:09,937 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:43:09,938 - INFO - mvg.mvg - timestamp: 1572696060\n", - "2021-06-24 12:43:09,938 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:40,283 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:40,284 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:40,285 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:40,286 - INFO - mvg.mvg - timestamp: 1574078460\n", + "2021-09-22 20:56:40,287 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6659,18 +6689,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1572696060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1574078460.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:43:16,958 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:43:16,958 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:43:16,959 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:43:16,959 - INFO - mvg.mvg - timestamp: 1573646460\n", - "2021-06-24 12:43:16,959 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:41,232 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:41,234 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:41,234 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:41,236 - INFO - mvg.mvg - timestamp: 1574164860\n", + "2021-09-22 20:56:41,237 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6679,18 +6709,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573646460.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1574164860.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:43:23,573 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:43:23,573 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:43:23,574 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:43:23,574 - INFO - mvg.mvg - timestamp: 1570273260\n", - "2021-06-24 12:43:23,575 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:42,181 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:42,182 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:42,183 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:42,183 - INFO - mvg.mvg - timestamp: 1574251260\n", + "2021-09-22 20:56:42,184 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6699,18 +6729,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1570273260.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1574251260.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:43:31,407 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:43:31,407 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:43:31,408 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:43:31,408 - INFO - mvg.mvg - timestamp: 1573300860\n", - "2021-06-24 12:43:31,409 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:43,111 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:43,112 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:43,113 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:43,115 - INFO - mvg.mvg - timestamp: 1574337660\n", + "2021-09-22 20:56:43,116 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6719,18 +6749,18 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1573300860.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1574337660.csv\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2021-06-24 12:43:39,010 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-06-24 12:43:39,010 - INFO - mvg.mvg - creating measurement from source id=u0006\n", - "2021-06-24 12:43:39,011 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-06-24 12:43:39,011 - INFO - mvg.mvg - timestamp: 1571310060\n", - "2021-06-24 12:43:39,012 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" + "2021-09-22 20:56:44,057 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", + "2021-09-22 20:56:44,058 - INFO - mvg.mvg - creating measurement from source id=u0006\n", + "2021-09-22 20:56:44,060 - INFO - mvg.mvg - duration: 2.8672073400507907\n", + "2021-09-22 20:56:44,060 - INFO - mvg.mvg - timestamp: 1574424060\n", + "2021-09-22 20:56:44,062 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" ] }, { @@ -6739,7 +6769,7 @@ "text": [ "Read 40000 samples for u0006.\n", "Read u0006 meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading C:\\Users\\Sergio\\Documents\\GitHub\\mvg\\docs\\source\\content\\examples\\va-data-charlie\\charlieDb\\acc\\u0006\\1571310060.csv\n" + "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0006/1574424060.csv\n" ] } ], @@ -6758,17 +6788,16 @@ " m_file_name = REF_DB_PATH / NEW_SOURCE / \"meta.json\"\n", " with open(m_file_name, \"r\") as json_file:\n", " meta = json.load(json_file)\n", - " session.create_source(NEW_SOURCE, meta) # create\n", + " session.create_source(NEW_SOURCE, meta, channels=[\"acc\"]) # create\n", "\n", - " meas = {f.split(\".\")[0] for f in os.listdir(src_path)}\n", - " meas.remove(\"meta\")\n", + " meas = [f.stem for f in Path(src_path).glob(\"*.csv\")]\n", "\n", " for m in meas:\n", "\n", " # samples file for one measurement\n", " TS_MEAS = str(m) + \".csv\" # filename\n", " TS_MEAS = REF_DB_PATH / NEW_SOURCE / TS_MEAS # path to file\n", - " ts_df = pd.read_csv(TS_MEAS, names=['acc']) # read csv into df\n", + " ts_df = pd.read_csv(TS_MEAS) # read csv into df\n", " accs = ts_df.iloc[:, 0].tolist() # convert to list\n", " print(f\"Read {len(accs)} samples for {NEW_SOURCE}.\")\n", "\n", @@ -6789,25 +6818,13 @@ " session.create_measurement(sid=NEW_SOURCE,\n", " duration=duration,\n", " timestamp=m,\n", - " data=accs,\n", + " data={\"acc\": accs},\n", " meta=meta_info)\n", " except HTTPError as exc:\n", " print(exc)\n", "\n", "\n" ] - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } } ], "metadata": { @@ -6826,7 +6843,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.8.10" }, "toc": { "base_numbering": 1, @@ -6878,4 +6895,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/mvg/features/rms.py b/mvg/features/rms.py index c13f9360..51799c9d 100644 --- a/mvg/features/rms.py +++ b/mvg/features/rms.py @@ -1,4 +1,5 @@ """Analysis Class for RMS Feature""" +import copy import pandas as pd import matplotlib.pyplot as plt from tabulate import tabulate @@ -23,7 +24,21 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): time unit for conversion from epoch time [ms]. """ - Analysis.__init__(self, results, t_zone, t_unit) + rsl = copy.deepcopy(results) + # Handle multi-channel waveform data. + channels = [k for k in rsl["results"] if k != "timestamps"] + if len(channels) == 1: + rsl["results"].update(rsl["results"].pop(channels[0])) + else: + # Prefix the KPIs with channel name + for chan in channels: + rch = rsl["results"].pop(chan) + rsl["results"].update( + {chan + "_" + kpi: val for kpi, val in rch.items()} + ) + + Analysis.__init__(self, rsl, t_zone, t_unit) + self._results_df = pd.DataFrame.from_dict(self.results()) self.time_column = "timestamps" self._add_datetime() diff --git a/mvg/mvg.py b/mvg/mvg.py index 391dff39..f4130e55 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -51,7 +51,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.9.0") + self.mvg_version = self.parse_version("v0.9.1") self.tested_api_version = self.parse_version("v0.2.0") # Get API version diff --git a/tests/test_analysis_classes.py b/tests/test_analysis_classes.py index 99dde64a..01c10721 100644 --- a/tests/test_analysis_classes.py +++ b/tests/test_analysis_classes.py @@ -5,7 +5,6 @@ import json import os -import tempfile import pandas as pd import pytest from mvg import analysis_classes @@ -21,7 +20,9 @@ def test_RMS(): feat = parse_results(api_results, t_zone=None, t_unit=None) # Check dataframe conversion - columns - assert set(feat.to_df().columns.values) == set(api_results["results"].keys()) + assert set(feat.to_df().columns.values) == set( + api_results["results"]["acc"].keys() + ).union({"timestamps"}) # Check dataframe conversion - length assert len(feat.to_df()["timestamps"]) == len(api_results["results"]["timestamps"]) diff --git a/tests/test_data/RMS_results_dict.json b/tests/test_data/RMS_results_dict.json index 5ef1d36f..70110b7b 100644 --- a/tests/test_data/RMS_results_dict.json +++ b/tests/test_data/RMS_results_dict.json @@ -1 +1,338 @@ -{"status": "successful", "request_id": "2f6dc5ae055f9e82f6f5311c23250f07", "feature": "RMS", "results": {"timestamps": [1570186860, 1570273260, 1570359660, 1570446060, 1570532460, 1570618860, 1570705260, 1570791660, 1570878060, 1570964460, 1571050860, 1571137260, 1571223660, 1571310060, 1571396460, 1571482860, 1571569260, 1571655660, 1571742060, 1571828460, 1571914860, 1572001260, 1572087660, 1572177660, 1572264060, 1572350460, 1572436860, 1572523260, 1572609660, 1572696060, 1572782460, 1572868860, 1572955260, 1573041660, 1573128060, 1573214460, 1573300860, 1573387260, 1573473660, 1573560060, 1573646460, 1573732860, 1573819260, 1573905660, 1573992060, 1574078460, 1574164860, 1574251260, 1574337660, 1574424060], "rms": [0.6470859724128016, 0.6471233090087879, 0.646619032857862, 0.6468729279266723, 0.6466425188145082, 0.6467172058948399, 0.647092780648743, 0.6474220671843836, 0.6468903895762841, 0.647693834249824, 0.6470808565115449, 0.6472050737356421, 0.6467427853732736, 0.6473221821058892, 0.6474336931665059, 0.6476212217700601, 0.6471112840086092, 0.4848921153840439, 0.4848409433332954, 0.48475167234412847, 0.4845635972925419, 0.48500110983328193, 0.4850127179498178, 0.4852543654465155, 0.48515672855335834, 0.6278945984238401, 0.6281390462008573, 0.6283081249535378, 0.6280197922186224, 0.6280192424935522, 0.628283207129633, 0.6281522276066049, 0.6279655163885232, 0.6277353544965057, 0.6278700835347184, 0.6286806371261024, 0.6281269536708373, 0.6281217503270783, 0.6277798778644154, 0.6278461900382366, 0.6285363191287583, 0.6283971912344205, 0.628306637724784, 0.6281424042187251, 0.6285404729543972, 0.628117681739837, 0.6284285531715674, 0.6284407826182109, 0.6286006002142908, 0.6279629684369986], "rms_dc": [0.6621077357581335, 0.6621829958188445, 0.6616518915968526, 0.6619229399260815, 0.6617138187667061, 0.6617088713545417, 0.6621712182715772, 0.6624628340232414, 0.661977447702136, 0.6627544903873464, 0.6620207993082551, 0.662241081744421, 0.661799506359354, 0.6623544164712631, 0.6624120892580125, 0.6626660580828794, 0.6620974380917977, 0.498214159978348, 0.49823204245121355, 0.4981883248148897, 0.49798748569938905, 0.4983621583589863, 0.4983645131550537, 0.49866331698402155, 0.49849425732991726, 0.6374436148716767, 0.6377106362522227, 0.6377963245451337, 0.6375594045830764, 0.6374337096669657, 0.6378045217930529, 0.6376521190146351, 0.637442235802496, 0.6373332350391726, 0.6373635157843435, 0.6381945643264252, 0.6376292497131597, 0.6376899092541004, 0.6372860080258722, 0.6373424476924897, 0.6380636089021572, 0.637839000655549, 0.6377363375921016, 0.6376999348751861, 0.6381092936591727, 0.6376180440233918, 0.6378754730392424, 0.6378695336896755, 0.6379947683984636, 0.6373637582315667], "dc": [-0.1402369354248047, -0.14041988067626954, -0.14023926696777345, -0.14034740295410156, -0.14042304229736327, -0.1400552963256836, -0.1405050018310547, -0.1403626495361328, -0.14052389526367187, -0.14048562774658202, -0.13984957580566407, -0.14031693725585936, -0.14036508178710938, -0.1403116729736328, -0.14006922912597655, -0.1404031967163086, -0.14007142333984374, -0.11444206237792968, -0.11473634033203126, -0.11492355346679688, -0.11484622802734375, -0.11462444915771484, -0.11458556365966797, -0.1148621109008789, -0.11454026947021484, -0.10992149658203125, -0.11007358551025391, -0.10960406799316406, -0.10987781829833984, -0.10914927978515625, -0.10979444274902343, -0.10965857849121094, -0.10950759887695312, -0.11019064025878907, -0.10959657592773438, -0.10978596649169922, -0.10967037048339844, -0.11005220184326171, -0.10966257781982422, -0.1096109359741211, -0.10985110168457031, -0.10934148712158204, -0.10926300964355469, -0.10999239501953124, -0.11009243621826172, -0.1096583236694336, -0.10937400360107422, -0.10926904754638672, -0.10908074951171876, -0.10906452484130859], "utilization": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}, "inputs": {"request_id": "2f6dc5ae055f9e82f6f5311c23250f07", "feature": "RMS", "experiment": "RMS", "sw-commit": {"api": "0.0.0-dev0", "feature": "0.0.2"}, "dataType": "vibration", "db_def": "vibium_app\\pipeline\\wartenberg\\feature\\data\\featureDb\\database.json", "UUID": "u0001", "timestamps": [1570186860, 1570273260, 1570359660, 1570446060, 1570532460, 1570618860, 1570705260, 1570791660, 1570878060, 1570964460, 1571050860, 1571137260, 1571223660, 1571310060, 1571396460, 1571482860, 1571569260, 1571655660, 1571742060, 1571828460, 1571914860, 1572001260, 1572087660, 1572177660, 1572264060, 1572350460, 1572436860, 1572523260, 1572609660, 1572696060, 1572782460, 1572868860, 1572955260, 1573041660, 1573128060, 1573214460, 1573300860, 1573387260, 1573473660, 1573560060, 1573646460, 1573732860, 1573819260, 1573905660, 1573992060, 1574078460, 1574164860, 1574251260, 1574337660, 1574424060], "params": {"utilization_threshold": 0.1}}, "error_info": "", "debug_info": ""} \ No newline at end of file +{ + "status": "successful", + "request_id": "2f6dc5ae055f9e82f6f5311c23250f07", + "feature": "RMS", + "results": { + "timestamps": [ + 1570186860, + 1570273260, + 1570359660, + 1570446060, + 1570532460, + 1570618860, + 1570705260, + 1570791660, + 1570878060, + 1570964460, + 1571050860, + 1571137260, + 1571223660, + 1571310060, + 1571396460, + 1571482860, + 1571569260, + 1571655660, + 1571742060, + 1571828460, + 1571914860, + 1572001260, + 1572087660, + 1572177660, + 1572264060, + 1572350460, + 1572436860, + 1572523260, + 1572609660, + 1572696060, + 1572782460, + 1572868860, + 1572955260, + 1573041660, + 1573128060, + 1573214460, + 1573300860, + 1573387260, + 1573473660, + 1573560060, + 1573646460, + 1573732860, + 1573819260, + 1573905660, + 1573992060, + 1574078460, + 1574164860, + 1574251260, + 1574337660, + 1574424060 + ], + "acc": { + "rms": [ + 0.6470859724128016, + 0.6471233090087879, + 0.646619032857862, + 0.6468729279266723, + 0.6466425188145082, + 0.6467172058948399, + 0.647092780648743, + 0.6474220671843836, + 0.6468903895762841, + 0.647693834249824, + 0.6470808565115449, + 0.6472050737356421, + 0.6467427853732736, + 0.6473221821058892, + 0.6474336931665059, + 0.6476212217700601, + 0.6471112840086092, + 0.4848921153840439, + 0.4848409433332954, + 0.48475167234412849, + 0.4845635972925419, + 0.48500110983328195, + 0.4850127179498178, + 0.4852543654465155, + 0.48515672855335836, + 0.6278945984238401, + 0.6281390462008573, + 0.6283081249535378, + 0.6280197922186224, + 0.6280192424935522, + 0.628283207129633, + 0.6281522276066049, + 0.6279655163885232, + 0.6277353544965058, + 0.6278700835347184, + 0.6286806371261025, + 0.6281269536708373, + 0.6281217503270783, + 0.6277798778644154, + 0.6278461900382366, + 0.6285363191287583, + 0.6283971912344205, + 0.628306637724784, + 0.6281424042187251, + 0.6285404729543972, + 0.628117681739837, + 0.6284285531715674, + 0.6284407826182109, + 0.6286006002142908, + 0.6279629684369986 + ], + "rms_dc": [ + 0.6621077357581335, + 0.6621829958188445, + 0.6616518915968526, + 0.6619229399260815, + 0.6617138187667061, + 0.6617088713545417, + 0.6621712182715772, + 0.6624628340232414, + 0.661977447702136, + 0.6627544903873464, + 0.6620207993082551, + 0.662241081744421, + 0.661799506359354, + 0.6623544164712631, + 0.6624120892580125, + 0.6626660580828794, + 0.6620974380917977, + 0.498214159978348, + 0.49823204245121358, + 0.4981883248148897, + 0.49798748569938908, + 0.4983621583589863, + 0.4983645131550537, + 0.49866331698402158, + 0.49849425732991728, + 0.6374436148716767, + 0.6377106362522227, + 0.6377963245451337, + 0.6375594045830764, + 0.6374337096669657, + 0.6378045217930529, + 0.6376521190146351, + 0.637442235802496, + 0.6373332350391726, + 0.6373635157843435, + 0.6381945643264252, + 0.6376292497131597, + 0.6376899092541004, + 0.6372860080258722, + 0.6373424476924897, + 0.6380636089021572, + 0.637839000655549, + 0.6377363375921016, + 0.6376999348751861, + 0.6381092936591727, + 0.6376180440233918, + 0.6378754730392424, + 0.6378695336896755, + 0.6379947683984636, + 0.6373637582315667 + ], + "dc": [ + -0.1402369354248047, + -0.14041988067626955, + -0.14023926696777345, + -0.14034740295410157, + -0.14042304229736328, + -0.1400552963256836, + -0.1405050018310547, + -0.1403626495361328, + -0.14052389526367188, + -0.14048562774658203, + -0.13984957580566408, + -0.14031693725585937, + -0.14036508178710939, + -0.1403116729736328, + -0.14006922912597656, + -0.1404031967163086, + -0.14007142333984375, + -0.11444206237792969, + -0.11473634033203126, + -0.11492355346679688, + -0.11484622802734375, + -0.11462444915771485, + -0.11458556365966798, + -0.1148621109008789, + -0.11454026947021484, + -0.10992149658203125, + -0.11007358551025391, + -0.10960406799316407, + -0.10987781829833984, + -0.10914927978515625, + -0.10979444274902343, + -0.10965857849121094, + -0.10950759887695312, + -0.11019064025878907, + -0.10959657592773438, + -0.10978596649169922, + -0.10967037048339844, + -0.11005220184326171, + -0.10966257781982422, + -0.1096109359741211, + -0.10985110168457031, + -0.10934148712158204, + -0.10926300964355469, + -0.10999239501953125, + -0.11009243621826172, + -0.1096583236694336, + -0.10937400360107422, + -0.10926904754638672, + -0.10908074951171876, + -0.10906452484130859 + ], + "utilization": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1 + ] + } + }, + "inputs": { + "request_id": "2f6dc5ae055f9e82f6f5311c23250f07", + "feature": "RMS", + "experiment": "RMS", + "sw-commit": { + "api": "0.0.0-dev0", + "feature": "0.0.2" + }, + "dataType": "vibration", + "db_def": "vibium_app\\pipeline\\wartenberg\\feature\\data\\featureDb\\database.json", + "UUID": "u0001", + "timestamps": [ + 1570186860, + 1570273260, + 1570359660, + 1570446060, + 1570532460, + 1570618860, + 1570705260, + 1570791660, + 1570878060, + 1570964460, + 1571050860, + 1571137260, + 1571223660, + 1571310060, + 1571396460, + 1571482860, + 1571569260, + 1571655660, + 1571742060, + 1571828460, + 1571914860, + 1572001260, + 1572087660, + 1572177660, + 1572264060, + 1572350460, + 1572436860, + 1572523260, + 1572609660, + 1572696060, + 1572782460, + 1572868860, + 1572955260, + 1573041660, + 1573128060, + 1573214460, + 1573300860, + 1573387260, + 1573473660, + 1573560060, + 1573646460, + 1573732860, + 1573819260, + 1573905660, + 1573992060, + 1574078460, + 1574164860, + 1574251260, + 1574337660, + 1574424060 + ], + "params": { + "utilization_threshold": 0.1 + } + }, + "error_info": "", + "debug_info": "" +} \ No newline at end of file From 464a6a87429000699aca6b60ff083e4baecf05a2 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Fri, 24 Sep 2021 15:31:46 +0200 Subject: [PATCH 22/90] Method to retrieve all tabular measurements for a single source (#77) * Method to retrieve all tabular measurements for a given source * Corrected API route for list tabular measurements * Testcases for list tabular measurements * Done linting * Debugging request error * Removed debug statements * Upgrade versions for MVG and backend API --- mvg/mvg.py | 45 +++++++++++++++++++++++++++++++++++-- tests/test_api_sources.py | 47 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 2 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index f4130e55..acdfc977 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -51,8 +51,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.9.1") - self.tested_api_version = self.parse_version("v0.2.0") + self.mvg_version = self.parse_version("v0.9.2") + self.tested_api_version = self.parse_version("v0.2.1") # Get API version try: @@ -553,6 +553,47 @@ def read_single_measurement(self, sid: str, timestamp: int) -> dict: return response.json() + def list_tabular_measurements( + self, sid: str, start_timestamp: int = None, end_timestamp: int = None + ) -> dict: + """Retrieves tabular measurements (including metadata) for a source. + + Parameters + ---------- + sid : str + source Id. + + start_timestamp : int + Measurements starting from a timestamp [optional]. + + end_timestamp : int + Measurements ending at a timestamp [optional]. + + Returns + ------- + An dict having a list of all timestamps, a list of all measurements grouped by + KPI, and metadata corresponding to a measurement + """ + logger.info("endpoint %s", self.endpoint) + logger.info("retrieving all measurements from source id=%s", sid) + + query_params_list = [] + query_params_str = "" + + if start_timestamp is not None: + query_params_list.append(f"start_timestamp={start_timestamp}") + if end_timestamp is not None: + query_params_list.append(f"end_timestamp={end_timestamp}") + + if len(query_params_list) != 0: + query_params_str = f"?{'&'.join(query_params_list)}" + + response = self._request( + "get", f"/sources/{sid}/measurements/tabular{query_params_str}" + ) + + return response.json() + # in example def update_measurement(self, sid: str, timestamp: int, meta: dict): """Replaces meta information along measurement. diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index e7df43c7..da8afd51 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -293,6 +293,53 @@ def test_tabular_measurements(session, tabular_source): assert exc.value.response.status_code == 404 +def test_list_tabular_measurements(session, tabular_source): + columns = tabular_df.columns.tolist() + + ts_0 = tabular_dict["timestamp"][0] + ts_1 = tabular_dict["timestamp"][1] + ts_n = tabular_dict["timestamp"][-1] + + # Metadata for two timestamps + meta = { + f"{ts_0}": {"new": "meta for {ts_0}"}, + f"{ts_1}": {"new": "meta for {ts_1}"}, + } + + # Create all measurements + session.create_tabular_measurement(tabular_source, tabular_dict, meta) + + # Retrieve data for a segment (1..n) + response = session.list_tabular_measurements(tabular_source, ts_1, ts_n) + assert all( + tabular_dict[column][1:] == response["data"][column] for column in columns + ) + assert len(response["meta"].keys()) == 1 + assert response["meta"][f"{ts_1}"] == meta[f"{ts_1}"] + + # Retrieve entire data (0..n) + response = session.list_tabular_measurements(tabular_source, None, None) + assert all(tabular_dict[column] == response["data"][column] for column in columns) + assert len(response["meta"].keys()) == 2 + assert response["meta"][f"{ts_0}"] == meta[f"{ts_0}"] + assert response["meta"][f"{ts_1}"] == meta[f"{ts_1}"] + + # Retrieve data that is beyond the range of the dataset timestamps + with pytest.raises(HTTPError) as exc: + session.list_tabular_measurements(tabular_source, ts_n + 1, ts_n + 2) + assert exc.value.response.status_code == 404 + + # Call API with negative timestamp + with pytest.raises(HTTPError) as exc: + session.list_tabular_measurements(tabular_source, -1) + assert exc.value.response.status_code == 422 + + # Call API with negative timestamp + with pytest.raises(HTTPError) as exc: + session.list_tabular_measurements(tabular_source, None, -1) + assert exc.value.response.status_code == 422 + + def test_create_label(session, tabular_source_with_measurements): timestamps = tabular_dict["timestamp"] label1 = {"label": "normal", "severity": 0, "notes": ""} From ce377a728c18eeb7216e60c51b17008a4cb55422 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Thu, 30 Sep 2021 09:55:35 +0200 Subject: [PATCH 23/90] Labels plot (#80) * Ability to save the file with a given filename * A wrapper method over MVG API to return all measurements with label info * A file to contain labelling features * High-level method to call the plot function for labelling * Code refactoring * Corrected lint errors * Upgraded versions for both MVG and backend --- mvg/features/analysis.py | 16 ++- mvg/features/modeid.py | 46 ++++++++- mvg/labelling.py | 206 +++++++++++++++++++++++++++++++++++++++ mvg/mvg.py | 38 +++++++- 4 files changed, 298 insertions(+), 8 deletions(-) create mode 100644 mvg/labelling.py diff --git a/mvg/features/analysis.py b/mvg/features/analysis.py index 5cb6d34d..4b1f8f5c 100644 --- a/mvg/features/analysis.py +++ b/mvg/features/analysis.py @@ -42,13 +42,15 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): self.time_column = None - def _render_plot(self, interactive): + def _render_plot(self, interactive, filename=""): """Render plot to screen (interactive) or file. Parameters --------- interactive: bool Wheter to display plot on screen (True) or to store to file (False). + filename: str + Filename for the plot Returns ------- @@ -59,11 +61,15 @@ def _render_plot(self, interactive): plot_file = "" plt.show() else: - if len(self.sources()) > 1: - srcstr = self.sources()[0] + "_to_" + self.sources()[-1] + "_" + if filename == "" or filename is None: + if len(self.sources()) > 1: + srcstr = self.sources()[0] + "_to_" + self.sources()[-1] + "_" + else: + srcstr = self.sources()[0] + "_" + plot_file = srcstr + self.request_id() + ".png" else: - srcstr = self.sources()[0] + "_" - plot_file = srcstr + self.request_id() + ".png" + plot_file = filename + plt.savefig(plot_file, dpi=600, bbox_inches="tight") print(f"saved plot to {plot_file}") diff --git a/mvg/features/modeid.py b/mvg/features/modeid.py index 139df04d..2596fc1d 100644 --- a/mvg/features/modeid.py +++ b/mvg/features/modeid.py @@ -2,7 +2,7 @@ import numpy as np import pandas as pd from tabulate import tabulate -from mvg import plotting +from mvg import plotting, labelling from mvg.features.analysis import Analysis @@ -101,6 +101,50 @@ def plot(self, interactive=True, time_format=None): return self._render_plot(interactive) + def plot_labels( + self, source_id, data, interactive=True, time_format=None, filename=None + ): + """ + Generate a plot visualizing the labels + + Parameters + ---------- + source_id : str + ID of the source of labels + + data : Dataframe + Labels data + + interactive : bool, optional + Defaults to True. + True: show plot, False: save plot + + time_format : str, optional + Defaults to None. + strftime format specifier for tick_x_lables. If not given + only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + + filename: str, optional + Filename for the plot + + Returns + ------- + plot file name : str + name of plot file (or emtpy string in case of interactive plot) + """ + + self.check_status() + labelling.plot_labels_over_time( + data=data, + source_id=source_id, + timeunit=self._t_unit, + time_format=time_format, + ) + + save_as_file = f"{source_id}_labels.png" if filename is None else filename + + return self._render_plot(interactive, save_as_file) + def mode_table(self, show_uncertain=False): """ Show mode table which gives start time for each consecutive period of diff --git a/mvg/labelling.py b/mvg/labelling.py new file mode 100644 index 00000000..6a2555f8 --- /dev/null +++ b/mvg/labelling.py @@ -0,0 +1,206 @@ +""" +MVG library for supporting labelling features +----------- +Library to plot, analyze labelling results +For more information see README.md. +""" + +import logging +import pandas as pd +import matplotlib.pyplot as plt +import matplotlib.patches as patches + +logger = logging.getLogger(__name__) + + +# Dictionary the defines color coding for labels +# where code -1 represents "No Data" +LABEL_COLOR_CODES = dict( + ( + [-1, "white"], + [0, "coral"], + [1, "crimson"], + [2, "red"], + [3, "tomato"], + [4, "plum"], + [5, "lavender"], + [6, "purple"], + [7, "salmon"], + [8, "sienna"], + [9, "silver"], + [10, "tan"], + [11, "wheat"], + [12, "khaki"], + ) +) + + +# pylint: disable=too-many-locals +def plot_labels_over_time( + data, + source_id, + colors=None, + height=100, + width=5, + timeticks_interval=None, + timeunit="ms", + axes=None, + only_start_end_timeticks=False, + timetick_angle=85, + time_format=None, +): + """Creates a rectangular timeline of labels. + + The rectangle presents the timeline of the labels for a source. + + Parameters + ---------- + data: dataframe + data from labels table. + + source_id: string + string with source_Id. Can be replaced by other name + + colors: dictionary, optional + color code for each mode. + + height: int, optional + height of timeline. + + width: int, optional + width of each measurement of source. + + timeticks_interval: int, optional + time interval (in days) to separate the X-ticks. + + timeunit: str, optional + unit of time corresponding to the timestamp epoch + + axes: object of class matplotlib.axes, optional + the axes to be used by boxplot. + + only_start_end_timeticks: bool, optional + If True, only print the time stamps for the first and last element of data. + + timetick_angle: float, optional + the angle of time tick texts. + + time_format: str, optional + strftime format specifier for tick_x_lables. If not given + only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + + Returns + ---------- + image: object of class matplotlib.axes + + """ + + data["Date"] = pd.to_datetime(data["timestamp"], unit=timeunit) + # Categorize the labels as integers + data["label_idx"] = pd.factorize(data["label"])[0] + + colors = colors or LABEL_COLOR_CODES + + # Create figure with blank plot + if axes is None: + fig = plt.figure(figsize=(10, 3)) + axes = fig.add_subplot(111) + image = axes.plot() + + ts_range = data["timestamp"].iloc[-1] - data["timestamp"].iloc[0] + scaling_factor = len(data) / ts_range + + def _plot_row(row_data, y_pos=0): + # Collect the indices of data where modes change plus start and end points + interval_list = ( + [0] + + [i for i in range(1, len(row_data)) if row_data[i] != row_data[i - 1]] + + [len(row_data) - 1] + ) + + for idx in range(len(interval_list) - 1): + i = interval_list[idx] + col = row_data[i] + label = data["label"].iloc[i] + i_next = interval_list[idx + 1] + block_len = ( + data["timestamp"].iloc[i_next] - data["timestamp"].iloc[i] + ) * scaling_factor + start_pos = ( + data["timestamp"].iloc[i] - data["timestamp"].iloc[0] + ) * scaling_factor + if label is not None: + rect = patches.Rectangle( + (width * start_pos, y_pos), + width * block_len, + height - y_pos, + edgecolor=colors[col], + facecolor=colors[col], + fill=True, + ) + else: + rect = patches.Rectangle( + (width * start_pos, y_pos), + width * block_len, + height - y_pos, + fill=False, + hatch="/////", + ) + + axes.add_patch(rect) + + datalist = data["label_idx"].tolist() + _plot_row(datalist) + + # Create time ticks on x-axis and labels + if timeticks_interval is None: + tick_index = ( + [0] + + [i for i in range(1, len(datalist)) if datalist[i] != datalist[i - 1]] + + [len(datalist) - 1] + ) + else: + tick_index = list(range(0, len(datalist), timeticks_interval)) + if only_start_end_timeticks: + tick_index = [0, len(datalist) - 1] + tick_positions = [ + (data["timestamp"].iloc[i] - data["timestamp"].iloc[0]) * scaling_factor * width + for i in tick_index + ] + + # Modify figure properties to leave wide rectangle only + axes.set_ylim(0, height) + axes.set_xlim(0, len(datalist) * width) + axes.tick_params( + axis="y", # changes apply to the y-axis + which="both", # both major and minor ticks are affected + left=False, # ticks along the bottom edge are off + right=False, # ticks along the top edge are off + labelleft=False, + ) # labels along the bottom edge are off + axes.set_xticks(tick_positions) + + # Modify ticks position and create legend + df_changes = data.iloc[tick_index] + if time_format is None: + tick_x_labels = df_changes["Date"].apply(lambda x: x.date()) + else: + tick_x_labels = df_changes["Date"].apply(lambda x: x.strftime(time_format)) + + axes.set_xticklabels(tick_x_labels, rotation=timetick_angle) + legend_labels = [ + patches.Patch( + facecolor=colors[i], edgecolor="black", hatch="/////", label="No data" + ) + if i == -1 + else patches.Patch( + color=colors[i], label=f"{data[data['label_idx'] == i].iloc[0]['label']}" + ) + for i in set(datalist) + ] + + axes.legend(handles=legend_labels, bbox_to_anchor=(1.05, 1), loc="upper left") + axes.set_title("Labels over time for {}".format(source_id)) + plt.tight_layout() + + return image diff --git a/mvg/mvg.py b/mvg/mvg.py index acdfc977..de688088 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -1,3 +1,5 @@ +# pylint: disable=too-many-lines + """ MVG library ----------- @@ -12,6 +14,7 @@ import time import logging from typing import Dict, List, Optional +from pandas import DataFrame import requests from requests.exceptions import RequestException @@ -51,8 +54,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.9.2") - self.tested_api_version = self.parse_version("v0.2.1") + self.mvg_version = self.parse_version("v0.9.3") + self.tested_api_version = self.parse_version("v0.2.2") # Get API version try: @@ -996,3 +999,34 @@ def wait_for_analyses(self, request_id_list: list, timeout=None): logger.info("wait_for_analyses timed out") break time.sleep(min(min_wait, timeout - elapsed)) + + def get_labelled_measurements(self, source_id): + """Get all measurements of a source with label information. + + Parameters + ---------- + source_id : string + Id of the source for all measurements. + + Returns + ------- + Dataframe + A dataframe listing the label info for each measurement. + Columns: [timestamp, label, severity, notes] + """ + + measurements = self.list_measurements(source_id) + labels = self.list_labels(source_id) + labels_by_ts = {label["timestamp"]: label for label in labels} + labelled_measurements = [] + + for measurement in measurements: + timestamp = measurement["timestamp"] + if timestamp in labels_by_ts: + labelled_measurements.append(labels_by_ts[timestamp]) + else: + labelled_measurements.append( + {"timestamp": timestamp, "label": None, "severity": -1, "notes": ""} + ) + + return DataFrame(labelled_measurements) From 7ccc0827727117baad5ddc7c08ee2856e9aa89d0 Mon Sep 17 00:00:00 2001 From: Oskar Liew <43787643+OskarLiew@users.noreply.github.com> Date: Thu, 30 Sep 2021 21:42:02 +0200 Subject: [PATCH 24/90] Updating tests with label creation timestamp (#79) * Updating tests with label creation timestamp * bump MVG and API versions Co-authored-by: Mohsen Nosratinia --- mvg/mvg.py | 4 ++-- tests/test_api_sources.py | 45 ++++++++++++++++++++++++--------------- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index de688088..dc1a8cc1 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -54,8 +54,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.9.3") - self.tested_api_version = self.parse_version("v0.2.2") + self.mvg_version = self.parse_version("v0.9.4") + self.tested_api_version = self.parse_version("v0.2.3") # Get API version try: diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index da8afd51..82f8173f 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -6,6 +6,7 @@ Tests need to be run in order -p no:randomly """ +from datetime import datetime, timedelta from pathlib import Path import os @@ -14,7 +15,6 @@ import pandas as pd from requests import HTTPError import pytest -from mvg import MVG import numpy as np # Test data and session setup @@ -348,36 +348,47 @@ def test_create_label(session, tabular_source_with_measurements): session.create_label(tabular_source_with_measurements, timestamps[0], **label1) session.create_label(tabular_source_with_measurements, timestamps[1], **label2) - label1_ = session.get_label(tabular_source_with_measurements, timestamps[0]) - label2_ = session.get_label(tabular_source_with_measurements, timestamps[1]) + label1_response = session.get_label(tabular_source_with_measurements, timestamps[0]) + label2_response = session.get_label(tabular_source_with_measurements, timestamps[1]) labels = session.list_labels(tabular_source_with_measurements) + # Remove timestamps + for label in labels: + label.pop("label_timestamp") assert labels == [ dict(timestamp=timestamps[0], **label1), dict(timestamp=timestamps[1], **label2), ] - assert label1_ == label1 - assert label2_ == label2 + label1_timestamp = label1_response.pop("label_timestamp") + dtdiff1 = datetime.utcnow() - datetime.strptime( + label1_timestamp, "%Y-%m-%d %H:%M:%S" + ) + assert label1_response == label1 + assert dtdiff1 < timedelta(minutes=1) + + label2_timestamp = label2_response.pop("label_timestamp") + dtdiff2 = datetime.utcnow() - datetime.strptime( + label2_timestamp, "%Y-%m-%d %H:%M:%S" + ) + assert label2_response == label2 + assert dtdiff2 < timedelta(minutes=1) def test_update_label(session, tabular_source_with_measurements): timestamps = tabular_dict["timestamp"] - session.create_label( - tabular_source_with_measurements, - timestamps[0], - "failure", - 100, - "This is really bad!", - ) + label_pre = {"label": "failure", "severity": 100, "notes": "This is really bad!"} + session.create_label(tabular_source_with_measurements, timestamps[0], **label_pre) - session.update_label( - tabular_source_with_measurements, timestamps[0], "normal", 0, "It wasn't so bad" - ) + label_post = {"label": "normal", "severity": 0, "notes": "It wasn't so bad"} + session.update_label(tabular_source_with_measurements, timestamps[0], **label_post) - label1 = session.get_label(tabular_source_with_measurements, timestamps[0]) + label_response = session.get_label(tabular_source_with_measurements, timestamps[0]) - assert label1 == {"label": "normal", "severity": 0, "notes": "It wasn't so bad"} + label_timestamp = label_response.pop("label_timestamp") + dtdiff = datetime.utcnow() - datetime.strptime(label_timestamp, "%Y-%m-%d %H:%M:%S") + assert label_response == label_post + assert dtdiff < timedelta(minutes=1) def test_delete_label(session, tabular_source_with_measurements): From fb02ddb0a12b6cb794e952605023fd65a5015569 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Fri, 15 Oct 2021 19:30:23 +0200 Subject: [PATCH 25/90] Create tabular measurements endpoint should not raise 409 for existing measurements (#83) * Create tabular measurements should silently ignore 409 if exist_ok is True * Test cases to test 409 for tabular source & tabular measurements * bump mvg and api versions Co-authored-by: Mohsen Nosratinia --- mvg/mvg.py | 5 +++-- tests/test_api_sources.py | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index dc1a8cc1..78d79aa5 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -54,8 +54,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.9.4") - self.tested_api_version = self.parse_version("v0.2.3") + self.mvg_version = self.parse_version("v0.9.5") + self.tested_api_version = self.parse_version("v0.2.4") # Get API version try: @@ -498,6 +498,7 @@ def create_tabular_measurement( self._request( "post", f"/sources/{sid}/measurements/tabular", + do_not_raise, json=body, ) diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index 82f8173f..051db701 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -256,8 +256,17 @@ def test_sources_cru_existing(session): def test_tabular_sources(session, tabular_source): columns = tabular_df.columns.tolist() - columns.remove("timestamp") meta = {"extra": "information"} + + # create source again (409 ignored) + session.create_tabular_source(tabular_source, meta, columns, exist_ok=True) + + # create source again (409 not ignored) + with pytest.raises(HTTPError) as exc: + session.create_tabular_source(tabular_source, meta, columns) + assert exc.value.response.status_code == 409 + + columns.remove("timestamp") src = session.get_source(tabular_source) assert src["source_id"] == tabular_source assert src["meta"] == meta @@ -277,6 +286,14 @@ def test_tabular_measurements(session, tabular_source): columns.remove("timestamp") session.create_tabular_measurement(tabular_source, tabular_dict) + # create measurements again (409 ignored) + session.create_tabular_measurement(tabular_source, tabular_dict, exist_ok=True) + + # create measurements again (409 not ignored) + with pytest.raises(HTTPError) as exc: + session.create_tabular_measurement(tabular_source, tabular_dict) + assert exc.value.response.status_code == 409 + ts0 = tabular_dict["timestamp"][0] meas = session.read_single_measurement(tabular_source, ts0) assert meas["meta"] == {} From 374d1d9c9075f2fb915fb7343fdbf663642a7c1f Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Tue, 19 Oct 2021 14:19:16 +0200 Subject: [PATCH 26/90] add python 3.10 to CI worksflow (#87) --- .github/workflows/ci-checks.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-checks.yml b/.github/workflows/ci-checks.yml index 6e88785e..f75a0bf1 100644 --- a/.github/workflows/ci-checks.yml +++ b/.github/workflows/ci-checks.yml @@ -53,7 +53,7 @@ jobs: needs: [black, pylint, flake8] strategy: matrix: - python-version: [3.6,3.7,3.8,3.9] + python-version: [3.6,3.7,3.8,3.9,"3.10"] steps: - uses: actions/checkout@v2 - name: "Set up Python ${{ matrix.python-version }}" @@ -73,4 +73,4 @@ jobs: - name: "Running tests with pytest" env: TEST_TOKEN: ${{ secrets.TEST_TOKEN }} - run: "python -m pytest --verbose tests/" \ No newline at end of file + run: "python -m pytest --verbose tests/" From 987a69c964b1d5a5bb2876a45ba96d3b0391a8b5 Mon Sep 17 00:00:00 2001 From: Oskar Liew <43787643+OskarLiew@users.noreply.github.com> Date: Thu, 21 Oct 2021 09:11:48 +0200 Subject: [PATCH 27/90] Labeling example (#84) * Labeling example * review fix * Removed plot_labels method * Update docs/source/content/examples/labeling.ipynb Co-authored-by: Vishnu Nadhan * Update docs/source/content/examples/labeling.ipynb Co-authored-by: Vishnu Nadhan * Update mvg/plotting.py Co-authored-by: Vishnu Nadhan * Cleaning up example * Updated label plot Co-authored-by: Vishnu Nadhan --- .../content/examples/analysis_classes.ipynb | 26 +- docs/source/content/examples/labeling.ipynb | 404 ++++++++++++++++++ docs/source/index.rst | 1 + mvg/features/modeid.py | 46 +- mvg/labelling.py | 206 --------- mvg/mvg.py | 77 ++-- mvg/plotting.py | 195 +++++++++ 7 files changed, 659 insertions(+), 296 deletions(-) create mode 100644 docs/source/content/examples/labeling.ipynb delete mode 100644 mvg/labelling.py diff --git a/docs/source/content/examples/analysis_classes.ipynb b/docs/source/content/examples/analysis_classes.ipynb index 97a999b5..db2d0415 100644 --- a/docs/source/content/examples/analysis_classes.ipynb +++ b/docs/source/content/examples/analysis_classes.ipynb @@ -10,9 +10,10 @@ "MVG comes with a set of analysis classes which provide a unified interface to analysis results *irrespective of the specific feature*. Note that the analysis classes are helper classes, as such the mvg class does *not* depend on them.\n", "\n", "Except for step (1) requesting the specific feature analysis, the following generic workflow holds:\n", - "- (1) Request a specific analysis\n", - "- (2) Retrieve results and parse them into an analysis_class object\n", - "- (3) Use generic methods like plot(), summary() or to_df()\n", + "\n", + "1. Request a specific analysis\n", + "2. Retrieve results and parse them into an analysis_class object\n", + "3. Use generic methods like plot(), summary() or to_df()\n", "\n", "One application is to use the analysis classes interactively from a Python REPL session.\n", "\n", @@ -27,9 +28,10 @@ "\n", "### Prerequisites\n", "For running the examples in this notebook:\n", - "* Installed mvg package\n", - "* A token for API access from Viking Analytics\n", - "* The database needs to be populated with our example assets. This can be achieved by running the [\"Sources and Measurement\"](sources_and_measurements.ipynb) example." + "\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\"](sources_and_measurements.ipynb) example." ] }, { @@ -758,7 +760,7 @@ "outputs": [ { "data": { - "image/png": "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aQPgfcDV1ZkR8WJEbBER4yJiHHAHcFhEzCknXDMzaxSlJriIWAWcAFwP/Bm4MiIeknSWpMPKjM3MzBpb2b0oiYjrgOtqpp3RxbIz+iMmMzNrfGVXUZqZNaxZs2bx1FNPtY9/5CMf4eGH06ecxo0bx3PPPQfAvvvuu1bbP/vsszuNr+121ldOcGZma6k2wX3/+99n111X+64KbrvttrXafm2CW9vtrK+c4MzMejB//nwmTJjQPn7eeecxYcIE5syZw8yZM5k8eTLLly9nxowZzJmzeh+4YcOGAXDGGWcwefJkJk+ezJgxY/jQhz4EwBFHHMFee+3FbrvtxiWXXALAqaeeyvLly5k8eTIzZ87stJ2I4OSTT2bChAlMnDiRK664AoDZs2czY8YMjjrqKHbeeWdmzpxJRKy7AzPAld4GZ2bWW+fceQ6PPP9In25z5xE7c8q0U9Z4vaOOOorZs2dz3nnnMWVK7z65dNZZZ3HWWWexZMkS9t9/f0444QQALr30UkaMGMHy5cuZOnUq7373u/nKV77ChRdeyH333bfadn71q19x3333cf/99/Pcc88xdepUDjjgAADuvfdeHnroIUaPHs306dO59dZb2W+//dZ4/5qBS3BmZv0oIjjmmGM48cQT2WuvvQC44IIL2H333dlnn3148sknefTRR7vdxi233MLRRx9NS0sLW265JQceeCB33XUXANOmTWPs2LFUKhUmT57M/Pnz1/UuDVguwZlZw1ibklZfGDRoUKcfM12xYsVab+vMM89k7Nix7dWTs2fP5oYbbuD2229no402YsaMGa9r+0OGDGkfbmlpYdWqVWu9rUbnEpyZWQ+23HJLnn32WRYvXsyrr77KtddeC8Dw4cNZunRpr7dzzTXXcMMNN3DBBRe0T3vxxRfZfPPN2WijjXjkkUe444472ucNHjyYlStXrrad/fffnyuuuILW1lYWLVrEzTffzLRp017HHjYnl+DMzHowePBgzjjjDKZNm8aYMWPYeeedATjuuOP4+Mc/zoYbbsjtt9/e43a+/vWvs3DhwvZkdNhhh3Haaadx8cUXs8suu7DTTjuxzz77tC9//PHHM2nSJPbcc09+9rOftU8/8sgjuf3229l9992RxLnnnstWW23FI4/0bftko1Mz9rCZMmVK1OvJZGaN589//jO77LJL2WE0nXrHVdLdEdE03/XrKkozM2tKTnBmZtaUnODMbMBrxqaUMq0vx9MJzswGtKFDh7J48eL15qa8rkUEixcvZujQoWWHss65F6WZDWhjx45lwYIFLFq0qOxQmsbQoUMZO3Zs2WGsc05wZjagDR48mO22267sMKwBuYrSzMyakhOcmZk1JSc4MzNrSk5wZmbWlJzgzMysKTnBmZlZU3KCMzOzplR6gpN0iKS5kuZJOrXO/BMlPSzpAUn/K2nbMuI0M7PGUmqCk9QCXAQcCuwKHC1p15rF7gWmRMQk4JfAuf0bpZmZNaKyS3DTgHkR8XhEvAZcDhxeXCAifh8Rr+TRO4Dm/34ZMzN73cpOcGOAJwvjC/K0rnwY+G29GZKOlzRH0hx/Z52ZmZWd4HpN0jHAFOCr9eZHxCURMSUipowaNap/gzMzswGn7C9bXghsXRgfm6d1Iulg4DTgwIh4tZ9iMzOzBlZ2Ce4uYLyk7SRtALwPuLq4gKQ9gO8Ch0XEsyXEaGZmDajUBBcRq4ATgOuBPwNXRsRDks6SdFhe7KvAMOAXku6TdHUXmzMzM2tXdhUlEXEdcF3NtDMKwwf3e1BmZtbwyq6iNDMzWyec4MzMrCk5wZmZWVNygjMzs6bkBGdmZk3JCc7MzJqSE5yZmTUlJzgzM2tKTnBmZtaUnODMzKwpOcGZmVlTcoIzM7Om5ARnZmZNyQnOzMyakhOcmZk1JSc4MzNrSk5wZmbWlJzgzMysKTnBmZlZU3KCMzOzpuQEZ2ZmTckJzszMmlLpCU7SIZLmSpon6dQ684dIuiLP/6OkcSWEaWZmDabUBCepBbgIOBTYFTha0q41i30YeCEidgC+AZzTv1GamVkjKrsENw2YFxGPR8RrwOXA4TXLHA78KA//EjhIkvoxRjMza0BlJ7gxwJOF8QV5Wt1lImIV8CIwsnZDko6XNEfSnEWLFq2jcM3MrFGUneD6TERcEhFTImLKqFGjyg7HzMxKVnaCWwhsXRgfm6fVXUbSIGBTYHG/RGdmZg2r7AR3FzBe0naSNgDeB1xds8zVwAfz8FHAjRER/RijmZk1oEFlvnhErJJ0AnA90AJcGhEPSToLmBMRVwM/AH4iaR7wPCkJmpmZdavUBAcQEdcB19VMO6MwvAL45/6Oy8zMGlvZVZRmZmbrhBOcmZk1JSc4MzNrSk5wZmbWlJzgzMysKTnBmZlZU3KCMzOzpuQEZ2ZmTckJzszMmpITnJmZNaXSv6rLrOmtehVeWggvLoRlf4cIqP5mrwQo/R9t0NYG0QptrR3/E6BKXq7S8QfQtqrzX+vK9L8ElUFQGQyVljw8KK8XKYYe/6cjxsrgtH5LYXuq5NfNcVZjiNa8XqVj36qxQ9evU2kp7F9LWk+VdFwi0najLR+btrQ+dN5GMebi61eHa49tdbgaT1V1m+3HcVBh//MxaP/dZXUejrbOcba/ZlvHH9QZL8TQ5Xlp6xRmXZPeA5tv28NC6wcnOBvY/v4w3PHtlCTab35a/QbWfvMvJAwo3PxqbxxtdW4adW5wVaqA6Iih/YYdnW9UkW9Gr74ELy5Iie1l/wCv9aOtpznBZU5wNjCtXA43fxVu/SYM2hA23mL1pFQt3RSfcqtP9sVSEsXSEvWf7FUsYdB5vdW2XUhonUpUhRLWBhvDpmPgjbvDpmNhkzFpfNhW6em/3hO6Kh2lmEpLKsVUWnIchaTc/tQfhVLaIGgplDSgozS3WulKNQ8CPfzfvv7KjuHWlSmGlsEdcXYqJdI55upwp3NReJ3icW1r7byfxQebTqW84vlSYbi2xFMYLsZaHS5uS+q8zWirX0JuW5Vfqk6pq1oCrZbyOr1OoWRa74Gs7nAXD3RdWe06Xn85wdnA8/hNcO2n4fnHYff3w9u+CBuPLDuqxjN4w7IjMCuVE5wNHC8vhv/5HNx/GYx4Exz7G3jTjLKjMrMG5QRXdP8V8MTtrF4lVbOc2v/pXF1QW73Rqdql2E7T1rkaqr3qpSWvW2x8Lwx3VY3UrqYNqb16pbVzNUu0da4C61SFUrsPdL39Yny11YPtVTXFdrM8HIWqo/Zj0gqP3QgrXoT9T4IDTnYJxMxeFye4oqfvh0eupX6HhZr2mHrDVV32DCvc7DslvUJvLlj9NVdrp6hpvykmomKCUqFdpFMbiTr3JIvWjt579fah+Br1EmD7flVjr9MGU2xfqXc8VIGtJsHbvwRb7tbFCTIz6z0nuKJDzk5/ZmbW8NzdxszMmpITnJmZNSUnODMza0pOcGZm1pSc4MzMrCk5wZmZWVNygjMzs6akqPdTEw1O0iLgbyW9/BbAcyW99tpwvI2l0fa/0eKFxou5L+PdNiJG9dG2SteUCa5MkuZExJSy4+gtx9tYGm3/Gy1eaLyYGy3e/uQqSjMza0pOcGZm1pSc4PreJWUHsIYcb2NptP1vtHih8WJutHj7jdvgzMysKbkEZ2ZmTckJzszMmpITnJmZNSUnuDUkaYykDfKwelp+IJD0T5I2LzuO3pI0vHpsG+UYr88k7Sxp4zw84M+XpA9JekPZcfSWpDdIGpSHB/zxHUic4HpJ0nslPQh8A/gJQAzwHjqSjpF0B7AfsKLseHqS470HuAD4Ogz8Y9yXJH1E0pWS9i87lt6Q9B5JDwPnAr+CgX2+JH1A0i3A3sArZcfTE0kzJT1Aej9cBgP7+A5IEeG/Hv6AqcBtwL55/M/AnmXH1U28Aj4EtAJ7lx1PL2LdAPgUcDOwLzAWmAscWV2m7Dj74Ti8HXgY+C/gP4DNB/K+AzsDtwL75PEngP3LjqubeA8D2oBpdeYNmGOc3w8twLH5/fAPefrjwAcGWrwD/c8luC5IGloY3Q64NSJuk7Ql8CCwpJTAeiHSu+Au4OfAq5Iqkj4oaZeSQ+tE0pBIXiMd06Mi4raIWED6bM9O0LxPrdVqvWwOcDBwISnBHwgDa99r4h0BPAI8IWkIcC+wspTAeucG4LfAZgCS/lXSdBg4x1jSRvn90Ep6PxwdEbfn2V8k1cQMmHgbgRNcHZJOB34n6d8kbQs8AGwr6RekxCHg+5LOycuXXi8u6QuS3lmYNA+4HrgWuB/4B+BSSV/Oy5d67iV9BviVpE9J2jEi/hdYVIhrL+Cp8iJctyR9FrhF0mmS3hoRiyPiKeAmYCEwRdK4vOxAuL6q8X4uJ4ZHgJdJCfkxYCnwJUnflLRJiaECIOksScdLagGIiFeAbwLX5Gq/NwHnSDpf0rAyYwWQdArpnnO6pAMj4h7g6cK5n0Qq4dsacIKrIelfgIOAU0jf0n0BsCQi3gM8CnwuIo4CPgwcK2lMmU9UkkZIugT4N+BsSYMBImIF8HvgYuCIiPg48AHgOEmjI6KtpHi3k3QjsBtwHrAj8FFJw2uOo4D7atYt/UbfFyT9E3AI6XwsBL4qaUeAfF5uAIaTSnSlP7HXxLsAuAjYNCL+Dfgj8PWIOCbP35eUPMqKdXh+8DweOBrYvjovIv4H+Czw/oj4v8D7gP0pN97Rkn4N7E6qml4BfFLSFvlaaMmLbkwq1dkacIIryDfQrYFvR8QfSY3n1Y4lkC6yhwEi4q+kdrkdSwi16GXgqojYnHSzPLEw7yngnIh4DCAi5pFi3rbfo+zwPHBtRBwTEb8HrgZGAyslKSLaci/VsRHxgKTJkj4B5d/o+9BmwG8i4sGImEU6Bu1ftxQRdwP3AKMlHSfp1FKi7LAZneO9BvhRnreK/NNUuQQ6j0JSKcEKUnyjSW3lR0vasDD/GxHxIECuCn8UGNPvUXZ4CfhtRLw/Iu4gVaMuBzYCiIhVebkdgbskTZB0cjmhNp71NsHVKw0UbqDH5vFlwPnAeEm7Ac8Cp0t6m6TzSG+Mfnuq6iLmV0mN0QCfJ5WG3pjntUXEyrzuhpLOJ7Wd9EtVR228OYG9CHyvMPkh0kPF4MLxnwpsLOkrwA9ovut0KLk9BSAiziBVgb+rsMy9wAeBr/RzbPXUxns6Kd79SO+J9+ceoF8l3YjvLidMyNf73bn0cxEwg1Q6qs5vg/aS3teAbUjHut/l98MyUlt51VPALhR6eUqaAGxKaof7MQ3QI3qgaLYbx5po70SiLI9+BXiTpAPy+HPAz4AjgHOAG4GP53kHRcSi/gkXqIm5OhwRy/Kb5S5SG85/FleSNAP43zz6zpxk+kOneKsJLCKWFpbZG3iyZtpoYIc8vH9EXLjOI+0H1XMWEd8Gpko6uDD7LOCYvNwGpFqDPwBviohSklwP8f4n8NGI+AnpBn0AqZfiARExv79jLYqI5fl6e4h0DD8kaUR1vqQ9SG3Tg4CDI+KZkuKs937YEVgYEcUfMN2M1NFtBbBfRHyr34JsdH3dLXOg/wFvI1XT/QCYWZg+CBiUhz8J/LEw75PAfxTGhw6gmCvV4fz/KFIHgPGkjiWTgE2AMQM03hOrxxaYTupBOJ50Yy/9elnL/T8C+BYwoma6gCF5+KPAg4V5B5OSRvUL0DdpgHi/VBgfPEDirV5fLfn/EcB/k0py7yQlYgFbDtB43wOcn4ffDEzM7+lt+iveZvpbr0pwkkaRnpTPJZXK3pt78xERqyJilaQ3RsRFwMuSvpKrYQ4D2tt/InXgGCgxt+UqyQ3ytEWk3pNzge+QblAvRcTCARZvtXQ3Dtgkd5Q5k3RjfzQiHu+PePtSrgj4J+DLwJHAm6u9Qqsl2Ih4VdI2EfE94L7c6/Ao4N9JSb/6VP9SA8Tbfv+IXBU+AOJtk7QNHW1Yz5N6Pv8W+CopoURE/H2AxVv9CMYewIaSLiY1OWwQEYsi4ol1HW9TKjvD9tcf6WlpAvDdwrRdSZ0eRuXxr5NKHuNIPas+TqryO22Ax3wzqd1KwD8Cf6VQ4hyg8e5F6in4FCkZf6rsa6SPjsFkYCTwbuDXFJ68ST3ivpD3dxLwRtLT/TXAqY63z+J9kPQ5QpF6dT4OfGYAx/tQjncD0ofnH2uW90PZf6UHsE53LjXSv7UwPg74EzCyMO1iUo+w4aTPyWxes40NGilmUvXepg0U7/8pLttof3X2f1Bh+Erg0+TqO1I7yufqXGOD1nWc62u8wJbA8AaKd2bt8fbf6zgfZQewTnYKNgd+CTxN+pB2S2Hej4EfFcZHkKowti5Ma+mvWPsw5n676fRRvP364NBf+0+qtqu2o+1H6tyzR531+/UaWw/jHRDvhzWIt6HfDwP1rynb4CLiBeB/SN1t7wbOKMw+AXiHpKl5fBmpm3CqY0t14639GC7QJzGvoh/1Qbyv9WO4fa67/Y98x4qIW0gfVj9U6Rv3PwblXGPrYbwD5v3Qy3gb+v0wYJWdYfv6j46npaH5/6mkKrNtC8ucQPpw7QdJHSJupR+r9Ro95kaLt7/3n9S2Uu0dtzUpwf8dOL24vuN1vGXEuz79VU9Mw5LUEhGtxc9Z1VnmXGB0pK8Tqk57C6nBfFNSA3S/fe9ho8XcaPH2tdex/1uSvqFEwMci4mnH63j7O971WtkZdm3/SJ/x+h6pu/LwwvT2p6XCtG2AO0jff7glsEN1WcfcPPEOoP0fRepA0EI/fn7J8Tpe/3X+a8g2OEkHkr7F/EbSt158VtLbACKiNdJnSzZU/pbwSJ8h+TWp2uAm0gefiX5sV2i0mBst3r72Ovf/D6SecK3RT59fcryO1+ooO8OuzR/p2y8uyMMjgEuBH5K/nYDU5vMrYFIeP5r0hbDn0o/fuNDIMTdavOv7/jtex+u/1f8G0QAk7QM8HxF/yZPmApOVfvblKUnLSB+mPELS70nfY3hy5G/RJ33weUakXwBwzE0Qb19rtP13vI7XejagO5lI2oz0dU8HkL7o+PxIXyw8HvgU6YtJl5I+a3IbqUfueYX1W6Kfq8gaLeZGi7evNdr+O17Ha7030BPcGNJX3LwE7AT8ISKuy/M2IH0575YRcbmkdwCfiIh/zPMrUcKPejZazI0Wb19rtP13vI7Xem/AJThJx5Lqru+NiJckDSU9LZ1M6l57SdTpbi7pc6Rf3u73n1ZptJgbLd6+1mj773gdr62dAdGLUskbc132B0nfx/YdpZ9tXxERrwA3kL4O5y016+4n6W7ST89f65ibI96+1mj773gdr71+pSe4XGcdpC/iXRgRB5G+gPd50ociAYiIW4H5wM6SNpVU/XmJx0nfCPD26KcfWmy0mBst3r7WaPvveB2v9Y3SqigltZB+4LEFuI70uamjIuKDeX6F9FMq742Im/K0YaSfbd8X2BbYKyIWOObmiLevNdr+O17Ha32rlBKc0ocm7yYV/+eRLrqVwJslTQPIjbVn5r+qdwKfAO4HJvZzcmuomBst3r7WaPvveB2v9b2yPgfXBnwtIn4CIGkP0lfZnEH6Feq98tPUVcBbJI3LVQErgIMj4mbH3HTx9rVG23/H63itj5XVBnc3cGWuMoD0TfPbRMQsoEXSv+anqbFAa7WeOyJ+U+KF1mgxN1q8fa3R9t/xOl7rY6UkuIh4JSJejY4PRL4VWJSHPwTsIula4OfAPZB6PfV/pB0aLeZGi7evNdr+O951q9Hitb5R6ld15aepIH37/NV58lLgs8AE4K8RsRA6fjSwbI0Wc6PF29cabf8d77rVaPHa61P2xwTagMHAc8Ck/AR1OtAWEbdUL7QBptFibrR4+1qj7b/jXbcaLV57HUr/JhOlLzW9Lf/9MCJ+UGpAvdBoMTdavH2t0fbf8a5bjRavrb2BkODGAh8Avh4Rr5YaTC81WsyNFm9fa7T9d7zrVqPFa2uv9ARnZma2LpTdBmdmZrZOOMGZmVlTcoIzM7Om5ARnZmZNyQnOzMyakhOcWS9IOlPSv3cz/whJu/ZiO52Wk3SWpIP7Kk4z6+AEZ9Y3jgB6THC1y0XEGRFxwzqKyWy95gRn1gVJp0n6i6RbgJ3ytI9KukvS/ZL+S9JGkvYFDgO+Kuk+Sdvnv99JulvSHyTt3MVysyQdlbc9X9KX87w5kvaUdL2kxyR9vBDXyTmGByR9oYRDY9YQSv2yZbOBStJewPuAyaT3yT2kn1z5VUR8Ly/zReDDEfEtSVcD10bEL/O8/wU+HhGPStob+HZEvKXOcrUv/URETJb0DWAWMB0YCjwIXCzpbcB4YBog4GpJB/gnXcxW5wRnVt/+wK8j4hWAnJgAJuTEthkwDLi+dkVJw4B9gV8UEtiQXr5u9XX+BAyLiKXAUkmvStoMeFv+uzcvN4yU8JzgzGo4wZmtmVnAERFxv6TjgBl1lqkASyJi8lpsv/rdiG2F4er4IFKp7csR8d212LbZesVtcGb13QwcIWlDScOBd+Xpw4GnJQ0GZhaWX5rnEREvAX+V9M+QfjhT0u61y62l64F/yaVEJI2R9IbXsT2zpuUEZ1ZHRNwDXAHcD/wWuCvPOh34I3Ar8EhhlcuBkyXdK2l7UvL7sKT7gYeAw7tYbk3j+h/gMuB2SX8CfsnrS5hmTcu/JmBmZk3JJTgzM2tKTnBmZtaUnODMzKwpOcGZmVlTcoIzM7Om5ARnZmZNyQnOzMya0v8HRKaSiD2LKXUAAAAASUVORK5CYII=\n", + "image/png": "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aQPgfcDV1ZkR8WJEbBER4yJiHHAHcFhEzCknXDMzaxSlJriIWAWcAFwP/Bm4MiIeknSWpMPKjM3MzBpb2b0oiYjrgOtqpp3RxbIz+iMmMzNrfGVXUZqZNaxZs2bx1FNPtY9/5CMf4eGH06ecxo0bx3PPPQfAvvvuu1bbP/vsszuNr+121ldOcGZma6k2wX3/+99n111X+64KbrvttrXafm2CW9vtrK+c4MzMejB//nwmTJjQPn7eeecxYcIE5syZw8yZM5k8eTLLly9nxowZzJmzeh+4YcOGAXDGGWcwefJkJk+ezJgxY/jQhz4EwBFHHMFee+3FbrvtxiWXXALAqaeeyvLly5k8eTIzZ87stJ2I4OSTT2bChAlMnDiRK664AoDZs2czY8YMjjrqKHbeeWdmzpxJRKy7AzPAld4GZ2bWW+fceQ6PPP9In25z5xE7c8q0U9Z4vaOOOorZs2dz3nnnMWVK7z65dNZZZ3HWWWexZMkS9t9/f0444QQALr30UkaMGMHy5cuZOnUq7373u/nKV77ChRdeyH333bfadn71q19x3333cf/99/Pcc88xdepUDjjgAADuvfdeHnroIUaPHs306dO59dZb2W+//dZ4/5qBS3BmZv0oIjjmmGM48cQT2WuvvQC44IIL2H333dlnn3148sknefTRR7vdxi233MLRRx9NS0sLW265JQceeCB33XUXANOmTWPs2LFUKhUmT57M/Pnz1/UuDVguwZlZw1ibklZfGDRoUKcfM12xYsVab+vMM89k7Nix7dWTs2fP5oYbbuD2229no402YsaMGa9r+0OGDGkfbmlpYdWqVWu9rUbnEpyZWQ+23HJLnn32WRYvXsyrr77KtddeC8Dw4cNZunRpr7dzzTXXcMMNN3DBBRe0T3vxxRfZfPPN2WijjXjkkUe444472ucNHjyYlStXrrad/fffnyuuuILW1lYWLVrEzTffzLRp017HHjYnl+DMzHowePBgzjjjDKZNm8aYMWPYeeedATjuuOP4+Mc/zoYbbsjtt9/e43a+/vWvs3DhwvZkdNhhh3Haaadx8cUXs8suu7DTTjuxzz77tC9//PHHM2nSJPbcc09+9rOftU8/8sgjuf3229l9992RxLnnnstWW23FI4/0bftko1Mz9rCZMmVK1OvJZGaN589//jO77LJL2WE0nXrHVdLdEdE0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", "text/plain": [ "
" ] @@ -4570,7 +4572,7 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -4644,9 +4646,11 @@ } ], "metadata": { + "interpreter": { + "hash": "3e082f03f9b308c2eff9c6e1d6622ba5a80b88607e08f1bd210e546296deb595" + }, "kernelspec": { - "display_name": "Python 3", - "language": "python", + "display_name": "Python 3.8.5 64-bit ('env': venv)", "name": "python3" }, "language_info": { @@ -4659,7 +4663,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.8.5" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/labeling.ipynb b/docs/source/content/examples/labeling.ipynb new file mode 100644 index 00000000..92e51ef9 --- /dev/null +++ b/docs/source/content/examples/labeling.ipynb @@ -0,0 +1,404 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Labeling Measurements\n", + "\n", + "MVG comes with a labeling API that allows a user to store important information about a measurement. 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", + "This example will go through how what a label is in MVG and how the labeling API functions. \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\"](sources_and_measurements.ipynb) example." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Import the required packages and functions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from mvg import MVG\n", + "from mvg.plotting import plot_labels_over_time" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create a session for API access\n", + "\n", + "Note that the `TOKEN` is used both for authorization and authentication. Thus, each unique token represents a unique user and each user has their own unique database on the Viking Analytics MultiViz Vibration service.\n", + "\n", + "**You need to insert your token received from Viking Analytics here:**" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'api_version': '0.2.5',\n", + " 'mvg_highest_tested_version': '0.2.3',\n", + " 'mvg_version': '0.9.4'}" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "TOKEN = os.environ[\"TEST_TOKEN\"]\n", + "URL = \"https://api.beta.multiviz.com\"\n", + "session = MVG(URL, TOKEN)\n", + "\n", + "session.check_version()" + ] + }, + { + "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. Each measurement can only have one label. The label itself has three components\n", + "\n", + "1. A label identification string\n", + "2. A severity level number\n", + "3. And 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.\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": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'source_id': 'u0001',\n", + " 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'},\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 it's measurements to know which ones to label" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'timestamp': 1570186860, 'meta': {}, 'duration': 2.8672073400507907},\n", + " {'timestamp': 1570273260, 'meta': {}, 'duration': 2.8672073400507907},\n", + " {'timestamp': 1570359660, 'meta': {}, 'duration': 2.8672073400507907}]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "measurements = session.list_measurements(SOURCE_ID)\n", + "measurements[:3]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For this example let us say that there was a bearing failure of the machine in the first few measurements, so we will add some labels to the afflicted measurements. To do so we use the `MVG.create_label()` method." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "for measurement in measurements[:3]:\n", + " session.create_label(\n", + " sid=SOURCE_ID,\n", + " timestamp=measurement[\"timestamp\"],\n", + " label=\"bearing_failure\",\n", + " severity=3,\n", + " notes=\"Imaginary bearing failure\"\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": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'timestamp': 1570186860,\n", + " 'label': 'bearing_failure',\n", + " 'severity': 3,\n", + " 'notes': 'Imaginary bearing failure',\n", + " 'label_timestamp': '2021-10-20 07:18:02'},\n", + " {'timestamp': 1570273260,\n", + " 'label': 'bearing_failure',\n", + " 'severity': 3,\n", + " 'notes': 'Imaginary bearing failure',\n", + " 'label_timestamp': '2021-10-20 07:18:02'},\n", + " {'timestamp': 1570359660,\n", + " 'label': 'bearing_failure',\n", + " 'severity': 3,\n", + " 'notes': 'Imaginary bearing failure',\n", + " 'label_timestamp': '2021-10-20 07:18:02'}]" + ] + }, + "execution_count": 7, + "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 too show up. To inspect the label of a specific measurement we use `MVG.get_label()`" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'label': 'bearing_failure',\n", + " 'severity': 3,\n", + " 'notes': 'Imaginary bearing failure',\n", + " 'label_timestamp': '2021-10-20 07:18:02'}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "session.get_label(SOURCE_ID, measurements[0][\"timestamp\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Updating labels\n", + "\n", + "Maybe we realized that the problem did not actually occur until the third timestamp and we want to change the labels for the first two. Then we use the `session.update_label()` method." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'timestamp': 1570186860,\n", + " 'label': 'OK',\n", + " 'severity': 0,\n", + " 'notes': 'This was an OK measurement',\n", + " 'label_timestamp': '2021-10-20 07:18:02'},\n", + " {'timestamp': 1570273260,\n", + " 'label': 'OK',\n", + " 'severity': 0,\n", + " 'notes': 'This was an OK measurement',\n", + " 'label_timestamp': '2021-10-20 07:18:02'},\n", + " {'timestamp': 1570359660,\n", + " 'label': 'bearing_failure',\n", + " 'severity': 3,\n", + " 'notes': 'Imaginary bearing failure',\n", + " 'label_timestamp': '2021-10-20 07:18:02'}]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "for measurement in measurements[:2]:\n", + " session.update_label(\n", + " sid=SOURCE_ID,\n", + " timestamp=measurement[\"timestamp\"],\n", + " label=\"OK\",\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. The `plotting` module of `mvg` contains the function `plot_labels_over_time` that does just that. The plot is very similar to that of the ModeId plots, so it is easy to compare results. We can add the `include_unlabeled=True` keyword to plot the unlabeled measurements as well." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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Z61398zq1asX5Mdefvnlq2655ZYVHofgyZMnN+bDZPuA/KlPfeq9tra2TCaTeW3o0KGt7p554IEH3j7ppJMa29raMsuXL8/269evraOAnPfkt2/bti3T0NAw390zq1atyg4dOrQ1l8uVFZAl+c9//vO33T0zb96816ZMmdLY2to6z90z55133tp77713afteqj4gh56c+PHjx48fP/4wfgJyFCIHDx68Nf/9H/7wh8UTJ05s6tu3b662tra5tra2efTo0c0nnHDCRnfPPPXUU4uOPvroTaNHj26uqanZOn369PdD8D333LM072kfkH/yk5/U5bftu+++OXfPfPnLX15z9913vz/mE5/4xIauBuTW1tZ5559//trRo0c319bWNu+99947li9fnvUyAnLv3r09H+xvvfXW5QcddNC2/HsfPnx46xVXXLGqfS9VH5BDT078+PHjx48ffxg/ATkKkYcccsjfBeSpU6duGD9+/OZi+9fU1Gx9+eWXX/c4dJ5xxhnrvV14df/HgFy4LR9gKwnIM2fOXHraaae9lz/TW1NTs3XRokWvFvoLA/J9991Xd955570fkCdOnNhUuMQi//ott9yy4utf//rqzj63qg/IoScnfvz48ePHjz+MP3UBOcBt3vJLLJ577rk33D1zzjnnrLvuuuveHTp0aGv+tdbW1nmvvPLKa+6eGTBgwPZ3330329raOm/ixIkbKwnIv/zlL9+ePHlyY1tbW2bFihXZ/v37d3mJxU033bTiggsuWOPumdmzZy+W5DsLyM8888yiCRMmbG5ra8u89dZbC/v27ZsrFpAzmcxrw4YNa3333Xez7p6pr69fsHjx4lfb91L1ATn05MSPHz9+/Pjxh/GnLiAHqPxFeqeffnrDyJEjW/IX3r300kuvH3PMMZvGjBnTPGrUqJY77rhjmbtnbrvttuU1NTVbjzrqqC0XXHDBmkoCcltbW2b69OnvX6Q3ceLEpieeeOLNjnot9KxatSo7fvz4zaNHj24+88wz148cObJlZwE5l8tlpk2b1jBixIiWqVOnbjj22GM3FQvI7tGa6/zSkrFjx255/vnn32jfS9UH5NCTEz9+/Pjx48cfxk9ADl+NjY3z3aOL/w499NDW/DritFfVB+TQkxM/fvz48ePHH8ZPQA5fxx577Kba2trmww47rGXmzJlLQ/fT1ar6gOxe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", + "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. 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", + "To delete labels we use the `MVG.delete_label()` method. Let's use that to remove our example labels to get back to a clean slate." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Removed 3 labels\n" + ] + } + ], + "source": [ + "labels = session.list_labels(SOURCE_ID)\n", + "for label in labels:\n", + " session.delete_label(SOURCE_ID, label[\"timestamp\"])\n", + "print(f\"Removed {len(labels)} labels\")" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "a44fa91c5dfe8381243a89b49ad51245e1b4984ebdbff837585626a5fdba33e0" + }, + "kernelspec": { + "display_name": "Python 3.8.5 64-bit ('env': venv)", + "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.8.5" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/source/index.rst b/docs/source/index.rst index d645f57b..dffa006d 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -18,6 +18,7 @@ content/examples/analysis_visual content/examples/analysis_classes content/examples/tabular_example + content/examples/labeling .. toctree:: :maxdepth: 2 diff --git a/mvg/features/modeid.py b/mvg/features/modeid.py index 2596fc1d..139df04d 100644 --- a/mvg/features/modeid.py +++ b/mvg/features/modeid.py @@ -2,7 +2,7 @@ import numpy as np import pandas as pd from tabulate import tabulate -from mvg import plotting, labelling +from mvg import plotting from mvg.features.analysis import Analysis @@ -101,50 +101,6 @@ def plot(self, interactive=True, time_format=None): return self._render_plot(interactive) - def plot_labels( - self, source_id, data, interactive=True, time_format=None, filename=None - ): - """ - Generate a plot visualizing the labels - - Parameters - ---------- - source_id : str - ID of the source of labels - - data : Dataframe - Labels data - - interactive : bool, optional - Defaults to True. - True: show plot, False: save plot - - time_format : str, optional - Defaults to None. - strftime format specifier for tick_x_lables. If not given - only dates are shown. To show dates and time use %y%m%d-%H:%M:%S - - filename: str, optional - Filename for the plot - - Returns - ------- - plot file name : str - name of plot file (or emtpy string in case of interactive plot) - """ - - self.check_status() - labelling.plot_labels_over_time( - data=data, - source_id=source_id, - timeunit=self._t_unit, - time_format=time_format, - ) - - save_as_file = f"{source_id}_labels.png" if filename is None else filename - - return self._render_plot(interactive, save_as_file) - def mode_table(self, show_uncertain=False): """ Show mode table which gives start time for each consecutive period of diff --git a/mvg/labelling.py b/mvg/labelling.py deleted file mode 100644 index 6a2555f8..00000000 --- a/mvg/labelling.py +++ /dev/null @@ -1,206 +0,0 @@ -""" -MVG library for supporting labelling features ------------ -Library to plot, analyze labelling results -For more information see README.md. -""" - -import logging -import pandas as pd -import matplotlib.pyplot as plt -import matplotlib.patches as patches - -logger = logging.getLogger(__name__) - - -# Dictionary the defines color coding for labels -# where code -1 represents "No Data" -LABEL_COLOR_CODES = dict( - ( - [-1, "white"], - [0, "coral"], - [1, "crimson"], - [2, "red"], - [3, "tomato"], - [4, "plum"], - [5, "lavender"], - [6, "purple"], - [7, "salmon"], - [8, "sienna"], - [9, "silver"], - [10, "tan"], - [11, "wheat"], - [12, "khaki"], - ) -) - - -# pylint: disable=too-many-locals -def plot_labels_over_time( - data, - source_id, - colors=None, - height=100, - width=5, - timeticks_interval=None, - timeunit="ms", - axes=None, - only_start_end_timeticks=False, - timetick_angle=85, - time_format=None, -): - """Creates a rectangular timeline of labels. - - The rectangle presents the timeline of the labels for a source. - - Parameters - ---------- - data: dataframe - data from labels table. - - source_id: string - string with source_Id. Can be replaced by other name - - colors: dictionary, optional - color code for each mode. - - height: int, optional - height of timeline. - - width: int, optional - width of each measurement of source. - - timeticks_interval: int, optional - time interval (in days) to separate the X-ticks. - - timeunit: str, optional - unit of time corresponding to the timestamp epoch - - axes: object of class matplotlib.axes, optional - the axes to be used by boxplot. - - only_start_end_timeticks: bool, optional - If True, only print the time stamps for the first and last element of data. - - timetick_angle: float, optional - the angle of time tick texts. - - time_format: str, optional - strftime format specifier for tick_x_lables. If not given - only dates are shown. To show dates and time use %y%m%d-%H:%M:%S - - Returns - ---------- - image: object of class matplotlib.axes - - """ - - data["Date"] = pd.to_datetime(data["timestamp"], unit=timeunit) - # Categorize the labels as integers - data["label_idx"] = pd.factorize(data["label"])[0] - - colors = colors or LABEL_COLOR_CODES - - # Create figure with blank plot - if axes is None: - fig = plt.figure(figsize=(10, 3)) - axes = fig.add_subplot(111) - image = axes.plot() - - ts_range = data["timestamp"].iloc[-1] - data["timestamp"].iloc[0] - scaling_factor = len(data) / ts_range - - def _plot_row(row_data, y_pos=0): - # Collect the indices of data where modes change plus start and end points - interval_list = ( - [0] - + [i for i in range(1, len(row_data)) if row_data[i] != row_data[i - 1]] - + [len(row_data) - 1] - ) - - for idx in range(len(interval_list) - 1): - i = interval_list[idx] - col = row_data[i] - label = data["label"].iloc[i] - i_next = interval_list[idx + 1] - block_len = ( - data["timestamp"].iloc[i_next] - data["timestamp"].iloc[i] - ) * scaling_factor - start_pos = ( - data["timestamp"].iloc[i] - data["timestamp"].iloc[0] - ) * scaling_factor - if label is not None: - rect = patches.Rectangle( - (width * start_pos, y_pos), - width * block_len, - height - y_pos, - edgecolor=colors[col], - facecolor=colors[col], - fill=True, - ) - else: - rect = patches.Rectangle( - (width * start_pos, y_pos), - width * block_len, - height - y_pos, - fill=False, - hatch="/////", - ) - - axes.add_patch(rect) - - datalist = data["label_idx"].tolist() - _plot_row(datalist) - - # Create time ticks on x-axis and labels - if timeticks_interval is None: - tick_index = ( - [0] - + [i for i in range(1, len(datalist)) if datalist[i] != datalist[i - 1]] - + [len(datalist) - 1] - ) - else: - tick_index = list(range(0, len(datalist), timeticks_interval)) - if only_start_end_timeticks: - tick_index = [0, len(datalist) - 1] - tick_positions = [ - (data["timestamp"].iloc[i] - data["timestamp"].iloc[0]) * scaling_factor * width - for i in tick_index - ] - - # Modify figure properties to leave wide rectangle only - axes.set_ylim(0, height) - axes.set_xlim(0, len(datalist) * width) - axes.tick_params( - axis="y", # changes apply to the y-axis - which="both", # both major and minor ticks are affected - left=False, # ticks along the bottom edge are off - right=False, # ticks along the top edge are off - labelleft=False, - ) # labels along the bottom edge are off - axes.set_xticks(tick_positions) - - # Modify ticks position and create legend - df_changes = data.iloc[tick_index] - if time_format is None: - tick_x_labels = df_changes["Date"].apply(lambda x: x.date()) - else: - tick_x_labels = df_changes["Date"].apply(lambda x: x.strftime(time_format)) - - axes.set_xticklabels(tick_x_labels, rotation=timetick_angle) - legend_labels = [ - patches.Patch( - facecolor=colors[i], edgecolor="black", hatch="/////", label="No data" - ) - if i == -1 - else patches.Patch( - color=colors[i], label=f"{data[data['label_idx'] == i].iloc[0]['label']}" - ) - for i in set(datalist) - ] - - axes.legend(handles=legend_labels, bbox_to_anchor=(1.05, 1), loc="upper left") - axes.set_title("Labels over time for {}".format(source_id)) - plt.tight_layout() - - return image diff --git a/mvg/mvg.py b/mvg/mvg.py index 78d79aa5..3749cf3d 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -14,7 +14,6 @@ import time import logging from typing import Dict, List, Optional -from pandas import DataFrame import requests from requests.exceptions import RequestException @@ -911,12 +910,53 @@ def get_label(self, sid: str, timestamp: int) -> dict: response = self._request("get", f"/sources/{sid}/labels/{timestamp}") return response.json() - def list_labels(self, source_id: str) -> List[dict]: + def list_labels( + self, source_id: str, include_unlabeled: bool = False + ) -> List[dict]: + """Get a list of all the labels for a source + + Parameters + ---------- + source_id : str + Source ID of the source to get the labels from + include_unlabeled : bool + Only returns the labeled times if True, by default False + + Returns + ------- + List[dict] + Label information for the different timestamps + """ logger.info("endpoint %s", self.endpoint) logger.info("Getting labels") response = self._request("get", f"/sources/{source_id}/labels") - return response.json() + labels = response.json() + + if not include_unlabeled: + return labels + + # Inlcude the missing labels + measurements = self.list_measurements(source_id) + labels_by_ts = {label["timestamp"]: label for label in labels} + labelled_measurements = [] + + for measurement in measurements: + timestamp = measurement["timestamp"] + if timestamp in labels_by_ts: + labelled_measurements.append(labels_by_ts[timestamp]) + else: + labelled_measurements.append( + { + "timestamp": timestamp, + "label": None, + "severity": -1, + "notes": "", + "label_timestamp": None, + } + ) + + return labelled_measurements def update_label( self, @@ -1000,34 +1040,3 @@ def wait_for_analyses(self, request_id_list: list, timeout=None): logger.info("wait_for_analyses timed out") break time.sleep(min(min_wait, timeout - elapsed)) - - def get_labelled_measurements(self, source_id): - """Get all measurements of a source with label information. - - Parameters - ---------- - source_id : string - Id of the source for all measurements. - - Returns - ------- - Dataframe - A dataframe listing the label info for each measurement. - Columns: [timestamp, label, severity, notes] - """ - - measurements = self.list_measurements(source_id) - labels = self.list_labels(source_id) - labels_by_ts = {label["timestamp"]: label for label in labels} - labelled_measurements = [] - - for measurement in measurements: - timestamp = measurement["timestamp"] - if timestamp in labels_by_ts: - labelled_measurements.append(labels_by_ts[timestamp]) - else: - labelled_measurements.append( - {"timestamp": timestamp, "label": None, "severity": -1, "notes": ""} - ) - - return DataFrame(labelled_measurements) diff --git a/mvg/plotting.py b/mvg/plotting.py index f3c69e27..6016913d 100644 --- a/mvg/plotting.py +++ b/mvg/plotting.py @@ -376,3 +376,198 @@ def modes_over_time_group(dfs, request_ids, days=1, tol=2, timeunit="ms"): timeunit=timeunit, axes=axes[count], ) + + +# Dictionary the defines color coding for labels +# where code -1 represents "No Data" +LABEL_COLOR_CODES = dict( + ( + [-1, "white"], + [0, "orangered"], + [1, "coral"], + [2, "darksalmon"], + [3, "darkviolet"], + [4, "mediumorchid"], + [5, "mediumpurple"], + [6, "thistle"], + [7, "slategrey"], + [8, "silver"], + [9, "sienna"], + [10, "tan"], + [11, "moccasin"], + [12, "khaki"], + ) +) + + +# pylint: disable=too-many-locals +def plot_labels_over_time( + data, + source_id, + colors=None, + height=100, + width=5, + timeticks_interval=None, + timeunit="ms", + axes=None, + only_start_end_timeticks=False, + timetick_angle=85, + time_format=None, +): + """Creates a rectangular timeline of labels. + + The rectangle presents the timeline of the labels for a source. + + Parameters + ---------- + data: dataframe or list of dicts + data from labels table. + + source_id: string + string with source_Id. Can be replaced by other name + + colors: dictionary, optional + color code for each mode. + + height: int, optional + height of timeline. + + width: int, optional + width of each measurement of source. + + timeticks_interval: int, optional + time interval (in days) to separate the X-ticks. + + timeunit: str, optional + unit of time corresponding to the timestamp epoch + + axes: object of class matplotlib.axes, optional + the axes to be used by boxplot. + + only_start_end_timeticks: bool, optional + If True, only print the time stamps for the first and last element of data. + + timetick_angle: float, optional + the angle of time tick texts. + + time_format: str, optional + strftime format specifier for tick_x_lables. If not given + only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + + Returns + ---------- + image: object of class matplotlib.axes + + """ + + data = pd.DataFrame(data) + + data["Date"] = pd.to_datetime(data["timestamp"], unit=timeunit) + # Categorize the labels as integers + data["label_idx"] = pd.factorize(data["label"])[0] + + colors = colors or LABEL_COLOR_CODES + + # Create figure with blank plot + if axes is None: + fig = plt.figure(figsize=(10, 3)) + axes = fig.add_subplot(111) + image = axes.plot() + + ts_range = data["timestamp"].iloc[-1] - data["timestamp"].iloc[0] + scaling_factor = len(data) / ts_range + + def _plot_row(row_data, y_pos=0): + # Collect the indices of data where modes change plus start and end points + interval_list = ( + [0] + + [i for i in range(1, len(row_data)) if row_data[i] != row_data[i - 1]] + + [len(row_data) - 1] + ) + + for idx in range(len(interval_list) - 1): + i = interval_list[idx] + col = row_data[i] + label = data["label"].iloc[i] + i_next = interval_list[idx + 1] + block_len = ( + data["timestamp"].iloc[i_next] - data["timestamp"].iloc[i] + ) * scaling_factor + start_pos = ( + data["timestamp"].iloc[i] - data["timestamp"].iloc[0] + ) * scaling_factor + if label is not None: + rect = patches.Rectangle( + (width * start_pos, y_pos), + width * block_len, + height - y_pos, + edgecolor=colors[col], + facecolor=colors[col], + fill=True, + ) + else: + rect = patches.Rectangle( + (width * start_pos, y_pos), + width * block_len, + height - y_pos, + fill=False, + hatch="/////", + ) + + axes.add_patch(rect) + + datalist = data["label_idx"].tolist() + _plot_row(datalist) + + # Create time ticks on x-axis and labels + if timeticks_interval is None: + tick_index = ( + [0] + + [i for i in range(1, len(datalist)) if datalist[i] != datalist[i - 1]] + + [len(datalist) - 1] + ) + else: + tick_index = list(range(0, len(datalist), timeticks_interval)) + if only_start_end_timeticks: + tick_index = [0, len(datalist) - 1] + tick_positions = [ + (data["timestamp"].iloc[i] - data["timestamp"].iloc[0]) * scaling_factor * width + for i in tick_index + ] + + # Modify figure properties to leave wide rectangle only + axes.set_ylim(0, height) + axes.set_xlim(0, len(datalist) * width) + axes.tick_params( + axis="y", # changes apply to the y-axis + which="both", # both major and minor ticks are affected + left=False, # ticks along the bottom edge are off + right=False, # ticks along the top edge are off + labelleft=False, + ) # labels along the bottom edge are off + axes.set_xticks(tick_positions) + + # Modify ticks position and create legend + df_changes = data.iloc[tick_index] + if time_format is None: + tick_x_labels = df_changes["Date"].apply(lambda x: x.date()) + else: + tick_x_labels = df_changes["Date"].apply(lambda x: x.strftime(time_format)) + + axes.set_xticklabels(tick_x_labels, rotation=timetick_angle) + legend_labels = [ + patches.Patch( + facecolor=colors[i], edgecolor="black", hatch="/////", label="No data" + ) + if i == -1 + else patches.Patch( + color=colors[i], label=f"{data[data['label_idx'] == i].iloc[0]['label']}" + ) + for i in set(datalist) + ] + + axes.legend(handles=legend_labels, bbox_to_anchor=(1.05, 1), loc="upper left") + axes.set_title("Labels over time for {}".format(source_id)) + plt.tight_layout() + + return image From 75d1f72689e5bf321d319333c3a096e849b44aae Mon Sep 17 00:00:00 2001 From: Oskar Liew <43787643+OskarLiew@users.noreply.github.com> Date: Thu, 28 Oct 2021 15:28:42 +0200 Subject: [PATCH 28/90] Label prop plotting (#85) * Labeling example * review fix * Removed plot_labels method * Added labelprop feature with plotting * Linters * Fixing tests * fixing tests again * Review changes * review changes * Fixing review comments --- mvg/analysis_classes.py | 31 +++++---- mvg/features/analysis.py | 48 ++++++++------ mvg/features/blacksheep.py | 8 +-- mvg/features/kpidemo.py | 5 +- mvg/features/label_propagation.py | 65 +++++++++++++++++++ mvg/features/modeid.py | 7 +-- mvg/features/rms.py | 5 +- mvg/mvg.py | 2 +- tests/test_analysis_classes.py | 69 ++++++++++++++++----- tests/test_data/label_prop_results.json | 1 + tests/test_data/mode_table_datetime.pkl | Bin 1486 -> 0 bytes tests/test_data/mode_table_no_datetime.csv | 4 -- tests/test_data/mode_table_nowc.csv | 4 -- 13 files changed, 172 insertions(+), 77 deletions(-) create mode 100644 mvg/features/label_propagation.py create mode 100644 tests/test_data/label_prop_results.json delete mode 100644 tests/test_data/mode_table_datetime.pkl delete mode 100644 tests/test_data/mode_table_no_datetime.csv delete mode 100644 tests/test_data/mode_table_nowc.csv diff --git a/mvg/analysis_classes.py b/mvg/analysis_classes.py index 9811f086..4c22e55e 100644 --- a/mvg/analysis_classes.py +++ b/mvg/analysis_classes.py @@ -15,18 +15,20 @@ """ # Import feature classes -from mvg.features.analysis import Analysis # Base Class from mvg.features.rms import RMS from mvg.features.modeid import ModeId from mvg.features.blacksheep import BlackSheep from mvg.features.kpidemo import KPIDemo +from mvg.features.label_propagation import LabelPropagation -# from mvg.features.envelope import Envelope -_ = RMS # avoid F401 linting error -_ = ModeId # avoid F401 linting error -_ = BlackSheep # avoid F401 linting error -_ = KPIDemo # avoid F401 linting error +FEATURES = { + RMS.__name__: RMS, + ModeId.__name__: ModeId, + BlackSheep.__name__: BlackSheep, + KPIDemo.__name__: KPIDemo, + LabelPropagation.__name__: LabelPropagation, +} # Parser/Factory function @@ -41,7 +43,7 @@ def parse_results(results, t_zone=None, t_unit=None): Dictionary with the server response form a get_analysis_results call. t_zone: str - timezone, if None, times will remain in epoch time [Europe/Stockholm]. + timezone, if None, times will remain in epoch time [UTC]. t_unit: str time unit for conversion from epoch time [ms]. @@ -66,15 +68,10 @@ def parse_results(results, t_zone=None, t_unit=None): "Malformed input." "Check if input is result of a get_results call." ) - # retrieve instance - res = None - for cls in Analysis.__subclasses__(): - if cls.__name__ == feature: - res = cls(results, t_zone, t_unit) - - # raise error if no instance can be instantiated - if res is None: + # Get the analysis class from the features dict + try: + feature_class = FEATURES[feature] + except KeyError: raise KeyError(f"Analysis class for: {feature} not implemented!") - # return analysis class - return res + return feature_class(results, t_zone, t_unit) diff --git a/mvg/features/analysis.py b/mvg/features/analysis.py index 4b1f8f5c..4271d0f6 100644 --- a/mvg/features/analysis.py +++ b/mvg/features/analysis.py @@ -10,7 +10,7 @@ class Analysis: """Root class for analysis system classes.""" # Init class with results - def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): + def __init__(self, results, t_zone=None, t_unit=None): """ Constructor Called as super() from specific analysis class. Stores the results @@ -22,7 +22,7 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): results: dict analysis results t_zone: t_zone - timezone, if None, times will remain in epoch time [Europe/Stockholm]. + timezone, if None, times will remain in epoch time [UTC]. t_unit: t_unit time unit for conversion from epoch time [ms]. @@ -32,8 +32,8 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): self._raw_results = results # timezone and unit set in constructor - self._t_zone = t_zone - self._t_unit = t_unit + self._t_zone = t_zone or "UTC" + self._t_unit = t_unit or "ms" # Dataframe representation self._results_df = None @@ -75,8 +75,15 @@ def _render_plot(self, interactive, filename=""): return plot_file - def _add_datetime(self): + def _add_datetime(self, time_column="timestamps"): """ + Add a datetime column to self._results_df + + Parameters + --------- + time_column: str + Column name for the integer timestamps + Convert EPOCH time to datetime with the timezone and time unit given in constructor. Will add an additional column "datetime" to the dataframe @@ -84,8 +91,8 @@ def _add_datetime(self): Works on class object dframe and sets time column to datetime. """ - - self._results_df = self._add_datetime_df(self._results_df, "timestamps") + self.time_column = time_column + self._results_df = self._add_datetime_df(self._results_df, self.time_column) def _add_datetime_df(self, dframe, timecolumn): """ @@ -106,18 +113,15 @@ def _add_datetime_df(self, dframe, timecolumn): DataFrame with added datetime colums """ - # Check if there is info for conversion - if self._t_zone is not None: - - # EPOCH to datetime considering time zone - dt_col = pd.to_datetime( - dframe[timecolumn], unit=self._t_unit, utc=True - ).dt.tz_convert(self._t_zone) + # EPOCH to datetime considering time zone + dt_col = pd.to_datetime( + dframe[timecolumn], unit=self._t_unit, utc=True + ).dt.tz_convert(self._t_zone) - dframe["datetime"] = dt_col + dframe["datetime"] = dt_col - # Mark timecolumn as available - self.time_column = "datetime" + # Mark timecolumn as available + self.time_column = "datetime" return dframe @@ -283,7 +287,7 @@ def to_df(self): """ self.check_status() - return self._results_df + return self._results_df.copy() # Save results to dataframe def save_df(self, file_name=None): @@ -310,7 +314,7 @@ def save_df(self, file_name=None): file_name = f"{self.request_id()}.csv" print(f"Saving {self.feature()} data frame results to", file_name) - self._results_df.copy().to_csv(file_name, index=False) + self.to_df().to_csv(file_name, index=False) return file_name @@ -345,3 +349,9 @@ def save_json(self, file_name=None, raw=False): with open(file_name, "w") as json_file: json.dump(s_dict, json_file, indent=4) return file_name + + def __repr__(self): + return ( + f"<{self.__class__.__name__} - feaure='{self.feature()}'" + f" - request_id='{self.request_id()}'>" + ) diff --git a/mvg/features/blacksheep.py b/mvg/features/blacksheep.py index f1a271d0..0438c21c 100644 --- a/mvg/features/blacksheep.py +++ b/mvg/features/blacksheep.py @@ -9,7 +9,7 @@ class BlackSheep(Analysis): - def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): + def __init__(self, results, t_zone=None, t_unit=None): """Constructor Parameters @@ -18,7 +18,7 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): Dictionary with the server response form a get_analysis_results call. t_zone: str - timezone, if None, times will remain in epoch time [Europe/Stockholm]. + timezone, if None, times will remain in epoch time [UTC]. t_unit: str time unit for conversion from epoch time [ms]. @@ -129,9 +129,7 @@ def plot(self, interactive=True, time_format=None): pdfd.at[row.Index, "hash"] = hash(row[2:]) ticktimes = pdfd.loc[pdfd["hash"].shift(1) != pdfd["hash"]] - # Convert EPOCH if t_zone given - if self._t_zone is not None: - ticktimes = self._add_datetime_df(ticktimes, "timestamps") + ticktimes = self._add_datetime_df(ticktimes, "timestamps") # select reasonable number of ticks # this could be improved to yield equidistant ticks diff --git a/mvg/features/kpidemo.py b/mvg/features/kpidemo.py index b2a5388a..05511965 100644 --- a/mvg/features/kpidemo.py +++ b/mvg/features/kpidemo.py @@ -8,7 +8,7 @@ class KPIDemo(Analysis): """ Analysis class for KPIDemo feature.""" - def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): + def __init__(self, results, t_zone=None, t_unit=None): """Constructor Parameters @@ -17,7 +17,7 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): Dictionary with the server response form a get_analysis_results call. t_zone: str - timezone, if None, times will remain in epoch time [Europe/Stockholm]. + timezone, if None, times will remain in epoch time [UTC]. t_unit: str time unit for conversion from epoch time [ms]. @@ -25,7 +25,6 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): Analysis.__init__(self, results, t_zone, t_unit) self._results_df = pd.DataFrame.from_dict(self.results()) - self.time_column = "timestamps" self._add_datetime() def summary(self): diff --git a/mvg/features/label_propagation.py b/mvg/features/label_propagation.py new file mode 100644 index 00000000..35392bfe --- /dev/null +++ b/mvg/features/label_propagation.py @@ -0,0 +1,65 @@ +import pandas as pd +from tabulate import tabulate +from mvg import plotting + +from mvg.features.analysis import Analysis + + +class LabelPropagation(Analysis): + def __init__(self, results, t_zone=None, t_unit=None): + """Constructor + + Parameters + ---------- + results: dict + Dictionary with the server response from a get_analysis_results call. + + t_zone: str + timezone, if None, times will remain in epoch time [UTC]. + + t_unit: str + time unit for conversion from epoch time [ms]. + """ + super().__init__(results, t_zone=t_zone, t_unit=t_unit) + self._results_df = pd.DataFrame(self.results()) + self._add_datetime("timestamp") + + def results(self): + return super().results()["propagated_labels"] + + def summary(self): + """ + Print summary table with average severity and counts of each label + """ + + super().summary() + print() + + result_df: pd.DataFrame = self.to_df() + tbl = result_df.groupby("label").mean().drop("timestamp", axis=1) + tbl["count"] = result_df.groupby("label").count()["severity"] + print(tabulate(tbl, headers="keys", tablefmt="psql")) + + def plot(self, interactive=True, time_format=None): + """ + Generate a label plot for the propagated labels + + Parameters + ---------- + interactive : bool + True: show plot, False: save plot + + time_format: str, optional + strftime format specifier for tick_x_lables. If not given + only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + + Returns + ------- + plot file name : str + name of plot file (or emtpy string in case of interactive plot) + """ + self.check_status() + sources = ", ".join(self.sources()) + plotting.plot_labels_over_time(self.results(), sources, time_format=time_format) + + return self._render_plot(interactive) diff --git a/mvg/features/modeid.py b/mvg/features/modeid.py index 139df04d..e4a7ecb7 100644 --- a/mvg/features/modeid.py +++ b/mvg/features/modeid.py @@ -7,16 +7,16 @@ class ModeId(Analysis): - def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): + def __init__(self, results, t_zone=None, t_unit=None): """Constructor Parameters ---------- results: dict - Dictionary with the server response form a get_analysis_results call. + Dictionary with the server response from a get_analysis_results call. t_zone: str - timezone, if None, times will remain in epoch time [Europe/Stockholm]. + timezone, if None, times will remain in epoch time [UTC]. t_unit: str time unit for conversion from epoch time [ms]. @@ -30,7 +30,6 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): dict_for_emerging = dict_for_df.pop("mode_info") self.emerging_df = pd.DataFrame.from_dict(dict_for_emerging) self._results_df = pd.DataFrame.from_dict(dict_for_df) - self.time_column = "timestamps" self._add_datetime() self.emerging_df = self._add_datetime_df(self.emerging_df, "emerging_time") diff --git a/mvg/features/rms.py b/mvg/features/rms.py index 51799c9d..09912a01 100644 --- a/mvg/features/rms.py +++ b/mvg/features/rms.py @@ -9,7 +9,7 @@ class RMS(Analysis): """ Analysis class for RMS feature.""" - def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): + def __init__(self, results, t_zone=None, t_unit=None): """Constructor Parameters @@ -18,7 +18,7 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): Dictionary with the server response form a get_analysis_results call. t_zone: str - timezone, if None, times will remain in epoch time [Europe/Stockholm]. + timezone, if None, times will remain in epoch time [UTC]. t_unit: str time unit for conversion from epoch time [ms]. @@ -40,7 +40,6 @@ def __init__(self, results, t_zone="Europe/Stockholm", t_unit="ms"): Analysis.__init__(self, rsl, t_zone, t_unit) self._results_df = pd.DataFrame.from_dict(self.results()) - self.time_column = "timestamps" self._add_datetime() def summary(self): diff --git a/mvg/mvg.py b/mvg/mvg.py index 3749cf3d..9d02135b 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -673,7 +673,7 @@ def request_analysis( parameters: dict = None, start_timestamp: int = None, end_timestamp: int = None, - ) -> str: + ) -> dict: """Request an analysis on the given endpoint with given parameters. Parameters diff --git a/tests/test_analysis_classes.py b/tests/test_analysis_classes.py index 01c10721..704c7ecf 100644 --- a/tests/test_analysis_classes.py +++ b/tests/test_analysis_classes.py @@ -9,6 +9,9 @@ import pytest from mvg import analysis_classes from mvg.analysis_classes import parse_results +from mvg.features.label_propagation import LabelPropagation + +TZ = "Europe/Stockholm" def test_RMS(): @@ -17,10 +20,14 @@ def test_RMS(): api_results = json.load(json_file) # get object - feat = parse_results(api_results, t_zone=None, t_unit=None) + feat = parse_results(api_results, t_zone=TZ, t_unit=None) + + cols = feat.to_df().columns.tolist() + cols_without_datetime = cols.copy() # Datetime is not part of the original data + cols_without_datetime.remove("datetime") # Check dataframe conversion - columns - assert set(feat.to_df().columns.values) == set( + assert set(cols_without_datetime) == set( api_results["results"]["acc"].keys() ).union({"timestamps"}) @@ -73,16 +80,20 @@ def test_KPIDemo(): api_results = json.load(json_file) # get object - feat = parse_results(api_results, t_zone=None, t_unit=None) + feat = parse_results(api_results, t_zone=TZ, t_unit=None) + + cols = feat.to_df().columns.tolist() + cols_without_datetime = cols.copy() # Datetime is not part of the original data + cols_without_datetime.remove("datetime") # Check dataframe conversion - columns - assert set(feat.to_df().columns.values) == set(api_results["results"].keys()) + assert set(cols_without_datetime) == set(api_results["results"].keys()) # Check dataframe conversion - length assert len(feat.to_df()["timestamps"]) == len(api_results["results"]["timestamps"]) # Test datetime conversion - feat = analysis_classes.KPIDemo(api_results, t_zone="Europe/Stockholm", t_unit="s") + feat = analysis_classes.KPIDemo(api_results, t_zone=TZ, t_unit="s") assert str(feat.to_df()["datetime"][0]) == "2019-10-04 13:01:00+02:00" # test save as pickle file @@ -127,11 +138,11 @@ def test_BlackSheep(): api_results = json.load(json_file) # get object - feat = parse_results(api_results, t_zone=None, t_unit=None) + feat = parse_results(api_results, t_zone=TZ, t_unit=None) # Check dataframe conversion df_df = pd.read_csv("./tests/test_data/BlackSheep_df.csv") - assert df_df.equals(feat.to_df()) + assert df_df.equals(feat.to_df().drop("datetime", axis=1)) # Summary summary_df = pd.read_csv("./tests/test_data/BlackSheep_summary.csv") @@ -145,10 +156,12 @@ def test_ModeId(): with open("./tests/test_data/ModeId_results_dict.json") as json_file: api_results = json.load(json_file) - feat = parse_results(api_results, t_zone=None, t_unit=None) + feat = parse_results(api_results, t_zone=TZ, t_unit=None) # Check dataframe conversion df_df = pd.read_csv("./tests/test_data/ModeId_df.csv") - pd.testing.assert_frame_equal(feat.to_df(), df_df, check_less_precise=True) + pd.testing.assert_frame_equal( + feat.to_df().drop("datetime", axis=1), df_df, check_less_precise=True + ) # Summary res = feat.summary() @@ -157,19 +170,37 @@ def test_ModeId(): assert (res[1]["counts"][1] == 8).any() assert (res[1]["portion"][0] == 84).any() - # Mode table (only EPOCH times) - mt_df = feat.mode_table().reset_index(drop=True) - mt_correct_df = pd.read_csv("./tests/test_data/mode_table_nowc.csv") - assert mt_correct_df.equals(mt_df.reset_index(drop=True)) - # Mode table (+wallclock times) - feat = parse_results(api_results, t_zone="Europe/Stockholm", t_unit="s") + feat = parse_results(api_results, t_zone=TZ, t_unit="s") mt_df = feat.mode_table().reset_index(drop=True) mt_correct_df = pd.read_pickle("./tests/test_data/mode_table_wc.pkl") mt_correct_df = mt_correct_df.reset_index(drop=True) assert mt_correct_df.equals(mt_df.reset_index(drop=True)) +def test_labelprop(): + + with open("./tests/test_data/label_prop_results.json") as json_file: + api_results = json.load(json_file) + + labelprop: LabelPropagation = parse_results(api_results, t_zone=TZ) + + # Accessor functions + assert labelprop.feature() == "LabelPropagation" + assert labelprop.sources() == [api_results["inputs"]["UUID"]] + assert labelprop.request_id() == "208e5dfafaee0687d73dce036a42fd04" + assert labelprop.inputs() == api_results["inputs"] + assert labelprop.status() == api_results["status"] + assert labelprop.raw_results() == api_results + assert labelprop.results() == api_results["results"]["propagated_labels"] + + # Plot (not tested at all) + plt_file = labelprop.plot(False) + assert plt_file is not None + assert os.path.exists(plt_file) + os.remove(plt_file) # Cleanup + + def test_none_existing_feature(): # read dict with open("./tests/test_data/Nonexisting_feature.json") as json_file: @@ -177,7 +208,7 @@ def test_none_existing_feature(): # try to get non implemented object with pytest.raises(KeyError): - assert parse_results(api_results, t_zone=None, t_unit=None) + assert parse_results(api_results, t_zone=TZ, t_unit=None) def test_failed_run(): @@ -186,7 +217,7 @@ def test_failed_run(): api_results = json.load(json_file) # try to get non implemented object - feat = parse_results(api_results, t_zone=None, t_unit=None) + feat = parse_results(api_results, t_zone=TZ, t_unit=None) with pytest.raises(ValueError): assert feat.summary() @@ -195,3 +226,7 @@ def test_failed_run(): with pytest.raises(ValueError): assert feat.to_df() + + +if __name__ == "__main__": + test_ModeId() diff --git a/tests/test_data/label_prop_results.json b/tests/test_data/label_prop_results.json new file mode 100644 index 00000000..09dd7e42 --- /dev/null +++ b/tests/test_data/label_prop_results.json @@ -0,0 +1 @@ +{"status": "successful", "request_id": "208e5dfafaee0687d73dce036a42fd04", "feature": "LabelPropagation", "results": {"propagated_labels": [{"label": "string", "severity": 0, "notes": "", "label_timestamp": "2021-10-07 14:58:17", "timestamp": 1570273260}, {"label": "string", "severity": 0, "notes": "", "label_timestamp": "2021-10-07 14:58:26", "timestamp": 1570359660}, {"label": "string", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1570446060}, {"label": "string", "severity": 0, "notes": "", "label_timestamp": "2021-10-07 14:58:35", "timestamp": 1570532460}, {"label": "string", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1570618860}, {"label": "string", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1570705260}, {"label": "string", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1570791660}, {"label": "string", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1570878060}, {"label": "string", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1570964460}, {"label": "string", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1571050860}, {"label": "string", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1571137260}, {"label": "string", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1571223660}, {"label": "string", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1571310060}, {"label": "string", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1571396460}, {"label": "string", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1571482860}, {"label": "string", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1571569260}, {"label": "l2", "severity": 0, "notes": "", "label_timestamp": "2021-10-08 13:19:19", "timestamp": 1571655660}, {"label": "l2", "severity": 0, "notes": "", "label_timestamp": "2021-10-08 13:19:25", "timestamp": 1571742060}, {"label": "l2", "severity": 0, "notes": "", "label_timestamp": "2021-10-08 13:19:30", "timestamp": 1571828460}, {"label": "l2", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1571914860}, {"label": "l2", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1572001260}, {"label": "l2", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1572087660}, {"label": "l2", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1572177660}, {"label": "l2", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1572264060}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1572350460}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1572436860}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1572523260}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1572609660}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1572696060}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1572782460}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1572868860}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1572955260}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1573041660}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1573128060}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1573214460}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1573300860}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1573387260}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1573473660}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1573560060}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1573646460}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1573732860}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1573819260}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1573905660}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1573992060}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1574078460}, {"label": "hej", "severity": -1, "notes": "Added by label propagation", "label_timestamp": "2021-10-18 12:51:06", "timestamp": 1574164860}, {"label": "hej", "severity": 0, "notes": "", "label_timestamp": "2021-10-07 14:59:03", "timestamp": 1574251260}, {"label": "hej", "severity": 0, "notes": "", "label_timestamp": "2021-10-07 14:58:56", "timestamp": 1574337660}, {"label": "hej", "severity": 0, "notes": "", "label_timestamp": "2021-10-07 14:58:48", "timestamp": 1574424060}]}, "inputs": {"request_id": "208e5dfafaee0687d73dce036a42fd04", "feature": "LabelPropagation", "experiment": "LabelPropagation", "sw-commit": {"api": "0.0.0-dev0", "feature": "0.1.0"}, "dataType": "waveform", "db_def": "vibium_app/pipeline/apfel/strudel/data/strudelDb/database.json", "UUID": "u0001", "preprocessor_functions": ["downselect"], "timestamps": [1570273260, 1570359660, 1570446060, 1570532460, 1570618860, 1570705260, 1570791660, 1570878060, 1570964460, 1571050860, 1571137260, 1571223660, 1571310060, 1571396460, 1571482860, 1571569260, 1571655660, 1571742060, 1571828460, 1571914860, 1572001260, 1572087660, 1572177660, 1572264060, 1572350460, 1572436860, 1572523260, 1572609660, 1572696060, 1572782460, 1572868860, 1572955260, 1573041660, 1573128060, 1573214460, 1573300860, 1573387260, 1573473660, 1573560060, 1573646460, 1573732860, 1573819260, 1573905660, 1573992060, 1574078460, 1574164860, 1574251260, 1574337660, 1574424060], "params": {"model_ref": "d64f5db936eaad21bccc87b0cb3c8cc1"}}, "error_info": "", "debug_info": ""} \ No newline at end of file diff --git a/tests/test_data/mode_table_datetime.pkl b/tests/test_data/mode_table_datetime.pkl deleted file mode 100644 index 8c5cbda34849bac59231b92968e75ae09e6fb75f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1486 zcmbVMOKTKC5T4ncSz}^IA}$&Tq6gzfWKBRYpb&KvA&yxg<|Kr%XVXa!&SRbFF-DB& z!I(gU2g`U-R8Vi;10KD35j=SjJp1?uf>zDW;3n!pXJM=QQQcpC^>y7cAG|TO^izFJ z7R<4@+6W_FosXE$L2VyrlATHY`!IAHmZ72y+h2%4?QP%g29ies^Wv({0=B@T7}So_ zUf8%i)fz(@UYW)CJ(~mP_%$9^9Twwtop!(%?a2V=FhF!EGxyVr=MW62a*+7Vr4~#- z@ubV5h%MoLcElTD5X&fONDNnIx)IbiOe@`TA1v(-)N}{#!ZcJY-74JyQC8-hTxxO( zDV!gLwbj;YQRz3JUaz11fnWM(jY)9UD2Gnz`aG7*Z(^byh>Oz%sFKGV?$I1BMshk_ zBp7JYZArwW8wSAf7-a;+a6MT;D56{S|B01|1q(#WG}$&P#NoO!(;F}&WyCUUf>k7k zqob#1a>BW@jVp9{wF0q@cF8cGD7jb|%rheft#L3Nd)=+M>LJ%XD^pmiHP@J{e9&L1T;+glh ztc|XIx%vEES^Kc@(j9nTre$R!ulx$sRmpA%YI9N3IfPDHL)<+%?wO0@nf&qxmISUu zE#m#EAg_ZmnoDE~c9Y7bdMA=7Z1N))B)%^ZdOl2j>O~zC&rQvwlqF8${GPW?tWxIw ze`T(Xz5I9#d&Se?*Pj;)SXuGp+w3-tGAF5tZqb9RiN4=2HjwcB^lZcdaZpsm5a}N! zoJs$$ae5Xf2H8Ib9BL2X%lIybt0PCNBdz|$u;GB{R3(QRR1Am=k*m^G<|VW;p*pa` z*|>;< Date: Thu, 4 Nov 2021 12:05:31 +0100 Subject: [PATCH 29/90] bump mvg and api versions (#89) --- mvg/mvg.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 9d02135b..b8edec88 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -53,8 +53,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.9.5") - self.tested_api_version = self.parse_version("v0.2.4") + self.mvg_version = self.parse_version("v0.9.6") + self.tested_api_version = self.parse_version("v0.2.6") # Get API version try: From 059d10ee6143e9e3a0f080ddc6d253842ada7af4 Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Wed, 10 Nov 2021 16:32:58 +0100 Subject: [PATCH 30/90] add support for callback_url to analysis request methds (#92) * add support for callback_url to analysis request methds * add test for callback --- mvg/mvg.py | 29 +++++++++++--- requirements_dev.txt | 3 ++ tests/callback_test_server.py | 22 +++++++++++ tests/test_api_analyses.py | 72 +++++++++++++++++++++++++++++++++-- 4 files changed, 117 insertions(+), 9 deletions(-) create mode 100644 tests/callback_test_server.py diff --git a/mvg/mvg.py b/mvg/mvg.py index b8edec88..349dc46f 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -53,8 +53,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.9.6") - self.tested_api_version = self.parse_version("v0.2.6") + self.mvg_version = self.parse_version("v0.9.7") + self.tested_api_version = self.parse_version("v0.2.7") # Get API version try: @@ -673,6 +673,7 @@ def request_analysis( parameters: dict = None, start_timestamp: int = None, end_timestamp: int = None, + callback_url: str = None, ) -> dict: """Request an analysis on the given endpoint with given parameters. @@ -693,6 +694,11 @@ def request_analysis( end_timestamp : int start of analysis time window [optional]. + callback_url : str + Base URL to receieve a notification when the analysis job ends. + A POST reuest will be made to {callback_url}/analyses with payload + that includes the request_id and request_status of the job [optional]. + Returns ------- request_id: analysis identifier @@ -715,8 +721,12 @@ def request_analysis( "start_timestamp": start_timestamp, "end_timestamp": end_timestamp, } - - response = self._request("post", "/analyses/requests/", json=analysis_info) + params = None + if callback_url: + params = {"callback_url": callback_url} + response = self._request( + "post", "/analyses/requests/", json=analysis_info, params=params + ) return response.json() @@ -727,6 +737,7 @@ def request_population_analysis( parameters: dict = None, start_timestamp: int = None, end_timestamp: int = None, + callback_url: str = None, ) -> str: """Request an population analysis on the given endpoint with given parameters. @@ -747,6 +758,11 @@ def request_population_analysis( end_timestamp : int start of analysis time window [optional]. + callback_url : str + Base URL to receieve a notification when the analysis job ends. + A POST reuest will be made to {callback_url}/analyses with payload + that includes the request_id and request_status of the job [optional]. + Returns ------- request_id: analysis identifier @@ -770,8 +786,11 @@ def request_population_analysis( "end_timestamp": end_timestamp, } + params = None + if callback_url: + params = {"callback_url": callback_url} response = self._request( - "post", "/analyses/requests/population/", json=analysis_info + "post", "/analyses/requests/population/", json=analysis_info, params=params ) return response.json() diff --git a/requirements_dev.txt b/requirements_dev.txt index b06cc188..45f985ac 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -14,3 +14,6 @@ sphinx-rtd-theme nbsphinx sphinx-copybutton m2r2 +# for callback test server +uvicorn +fastapi diff --git a/tests/callback_test_server.py b/tests/callback_test_server.py new file mode 100644 index 00000000..122dc561 --- /dev/null +++ b/tests/callback_test_server.py @@ -0,0 +1,22 @@ +from fastapi import FastAPI, HTTPException +from pydantic import BaseModel + + +class Status(BaseModel): + request_status: str + request_id: str + + +app = FastAPI() + + +@app.post("/analyses", response_model=str) +def request_callback(body: Status): + res = f"{body.request_id}::{body.request_status}" + print(res) + return "Request received" + + +@app.post("/fail/analyses", response_model=str) +def request_callback_failure(body: Status): + raise HTTPException(status_code=400) diff --git a/tests/test_api_analyses.py b/tests/test_api_analyses.py index 7242be33..5f056d08 100644 --- a/tests/test_api_analyses.py +++ b/tests/test_api_analyses.py @@ -6,13 +6,54 @@ Tests need to be run in order -p no:randomly """ -from pathlib import Path +import os +import subprocess +import time +import socket +from pathlib import Path import pytest -from mvg import MVG -# Test data setup -REF_DB_PATH = Path.cwd() / "tests" / "test_data" / "mini_charlie" +LOG_FILE = Path("_callback_test_server_log.txt") + + +def get_ip(): + # based on https://stackoverflow.com/a/28950776/1292374 + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + try: + s.connect(("10.255.255.255", 1)) + ip = s.getsockname()[0] + except Exception: + ip = "127.0.0.1" + finally: + s.close() + return ip + + +@pytest.fixture +def callback_server(): + with LOG_FILE.open("wt") as f: + try: + ip = get_ip() + port = 9876 + process = subprocess.Popen( + [ + "uvicorn", + "tests.callback_test_server:app", + "--host", + ip, + "--port", + str(port), + ], + stderr=f, + stdout=f, + ) + time.sleep(5) # Wait a moment for server to start + yield f"http://{ip}:{port}" + finally: + process.kill() + f.close() + os.remove(LOG_FILE) def test_kpidemo_analysis(session, waveform_source_with_measurements): @@ -27,3 +68,26 @@ def test_kpidemo_analysis(session, waveform_source_with_measurements): kpi_results = results["results"] assert len(kpi_results.keys()) == 2 assert len(kpi_results["acc"].keys()) == 7 + + +def test_callback(session, callback_server, waveform_source_with_measurements): + req = session.request_analysis( + waveform_source_with_measurements, "KPIDemo", callback_url=callback_server + ) + req_id = req["request_id"] + session.wait_for_analyses([req_id]) + status = session.get_analysis_status(req_id) + assert status == "successful" + assert f"{req_id}::{status}" in LOG_FILE.read_text() + + +def test_callback_server_failure( + session, callback_server, waveform_source_with_measurements +): + req = session.request_analysis( + waveform_source_with_measurements, + "KPIDemo", + callback_url=f"{callback_server}/fail", + ) + session.wait_for_analyses([req["request_id"]]) + assert "400 Bad Request" in LOG_FILE.read_text() From 5bed775fb72410529fdf4453a5c7de8ca7244c31 Mon Sep 17 00:00:00 2001 From: Oskar Liew <43787643+OskarLiew@users.noreply.github.com> Date: Mon, 15 Nov 2021 11:23:46 +0100 Subject: [PATCH 31/90] Remove rms (#96) * Documentation for KPIDemo feature * Fixing examples and removing rms * small change * linters * Update to all the jupyter notebooks to fix typos and notebook text * Bump mvg version Co-authored-by: SergioMDCB <61144290+SergioMDCB@users.noreply.github.com> --- .../content/examples/analysis_classes.ipynb | 7743 +++++++++-------- .../content/examples/analysis_visual.ipynb | 593 +- .../content/examples/brief_overview.ipynb | 962 +- .../content/examples/check_version.ipynb | 31 +- .../content/examples/error_handling.ipynb | 141 +- docs/source/content/examples/labeling.ipynb | 67 +- .../examples/sources_and_measurements.ipynb | 6729 +------------- .../content/examples/tabular_example.ipynb | 416 +- docs/source/content/features/RMS.md | 67 - docs/source/content/features/kpidemo.md | 113 + mvg/analysis_classes.py | 2 - mvg/features/analysis.py | 4 +- mvg/features/kpidemo.py | 26 +- mvg/features/rms.py | 82 - mvg/mvg.py | 2 +- requirements_dev.txt | 1 + tests/test_analysis_classes.py | 75 +- tests/test_data/KPIDemo_results_dict.json | 2 +- tests/test_data/RMS_results_dict.json | 338 - 19 files changed, 5713 insertions(+), 11681 deletions(-) delete mode 100644 docs/source/content/features/RMS.md create mode 100644 docs/source/content/features/kpidemo.md delete mode 100644 mvg/features/rms.py delete mode 100644 tests/test_data/RMS_results_dict.json diff --git a/docs/source/content/examples/analysis_classes.ipynb b/docs/source/content/examples/analysis_classes.ipynb index db2d0415..40ed1417 100644 --- a/docs/source/content/examples/analysis_classes.ipynb +++ b/docs/source/content/examples/analysis_classes.ipynb @@ -2,7 +2,6 @@ "cells": [ { "cell_type": "markdown", - "id": "critical-introduction", "metadata": {}, "source": [ "# Analysis Classes - a Unified Interface to Analysis Results\n", @@ -36,7 +35,6 @@ }, { "cell_type": "markdown", - "id": "running-impossible", "metadata": {}, "source": [ "## Example flow\n", @@ -47,7 +45,6 @@ { "cell_type": "code", "execution_count": 1, - "id": "framed-reality", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:28.735704Z", @@ -57,18 +54,13 @@ "outputs": [], "source": [ "import os\n", - "import json\n", - "from requests import HTTPError\n", "\n", - "# import mvg library with python bindings to mvg-API\n", - "from mvg import MVG, analysis_classes\n", - "# import analysis classes\n", - "from mvg.analysis_classes import parse_results" + "from mvg import MVG, analysis_classes # mvg library with python bindings to mvg-API\n", + "from mvg.analysis_classes import parse_results # analysis classes" ] }, { "cell_type": "markdown", - "id": "bound-average", "metadata": { "ExecuteTime": { "end_time": "2021-03-04T10:59:02.619313Z", @@ -86,7 +78,6 @@ { "cell_type": "code", "execution_count": 2, - "id": "virgin-projector", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:29.472021Z", @@ -95,15 +86,16 @@ }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{\n", - " \"api_version\": \"0.2.0\",\n", - " \"mvg_highest_tested_version\": \"0.2.0\",\n", - " \"mvg_version\": \"0.9.0\"\n", - "}\n" - ] + "data": { + "text/plain": [ + "{'api_version': '0.2.7',\n", + " 'mvg_highest_tested_version': '0.2.7',\n", + " 'mvg_version': '0.9.7'}" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -111,12 +103,11 @@ "TOKEN = os.environ[\"TEST_TOKEN\"] # use our own token\n", "ENDPOINT = \"https://api.beta.multiviz.com\"\n", "session = MVG(ENDPOINT, TOKEN)\n", - "print(json.dumps(session.check_version(), indent=4)) # Check if API is accessible" + "session.check_version() # Check if API is accessible" ] }, { "cell_type": "markdown", - "id": "assigned-license", "metadata": { "pycharm": { "name": "#%% md\n" @@ -131,7 +122,6 @@ { "cell_type": "code", "execution_count": 3, - "id": "wireless-station", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:32.804304Z", @@ -143,36 +133,28 @@ }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{\n", - " \"source_id\": \"u0001\",\n", - " \"meta\": {\n", - " \"assetId\": \"assetA\",\n", - " \"measPoint\": \"mloc01\",\n", - " \"location\": \"paris\",\n", - " \"updated\": \"YES! I have been updated\"\n", - " },\n", - " \"properties\": {\n", - " \"data_class\": \"waveform\",\n", - " \"channels\": [\n", - " \"acc\"\n", - " ]\n", - " }\n", - "}\n" - ] + "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": 3, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "SOURCE_ID = \"u0001\"\n", - "s_info = session.get_source(SOURCE_ID)\n", - "print(json.dumps(s_info, sort_keys=False, indent=4))" + "session.get_source(SOURCE_ID)" ] }, { "cell_type": "markdown", - "id": "invalid-expense", "metadata": { "pycharm": { "name": "#%% md\n" @@ -189,7 +171,6 @@ { "cell_type": "code", "execution_count": 4, - "id": "unusual-ceremony", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:37.584243Z", @@ -204,345 +185,476 @@ "name": "stdout", "output_type": "stream", "text": [ - "Waiting for {'request_id': '99c500893a6184b4f3dcd4a7a3b1565b', 'request_status': 'queued'}\n", - "{\n", - " \"status\": \"successful\",\n", - " \"request_id\": \"99c500893a6184b4f3dcd4a7a3b1565b\",\n", - " \"feature\": \"RMS\",\n", - " \"results\": {\n", - " \"acc\": {\n", - " \"rms\": [\n", - " 0.6471233090087871,\n", - " 0.6466190328578604,\n", - " 0.6468729279266724,\n", - " 0.646642518814507,\n", - " 0.646717205894838,\n", - " 0.6470927806487413,\n", - " 0.6474220671843843,\n", - " 0.6468903895762858,\n", - " 0.6476938342498252,\n", - " 0.6470808565115466,\n", - " 0.6472050737356406,\n", - " 0.6467427853732756,\n", - " 0.6473221821058875,\n", - " 0.6474336931665048,\n", - " 0.6476212217700588,\n", - " 0.6471112840086102,\n", - " 0.4848921153840481,\n", - " 0.48484094333329586,\n", - " 0.4847516723441296,\n", - " 0.4845635972925438,\n", - " 0.4850011098332846,\n", - " 0.48501271794981815,\n", - " 0.48525436544651607,\n", - " 0.4851567285533576,\n", - " 0.6278945984238412,\n", - " 0.6281390462008642,\n", - " 0.6283081249535385,\n", - " 0.6280197922186243,\n", - " 0.6280192424935491,\n", - " 0.6282832071296321,\n", - " 0.6281522276066059,\n", - " 0.627965516388511,\n", - " 0.6277353544965071,\n", - " 0.6278700835347193,\n", - " 0.6286806371261001,\n", - " 0.6281269536708333,\n", - " 0.6281217503270786,\n", - " 0.6277798778644176,\n", - " 0.6278461900382379,\n", - " 0.6285363191287605,\n", - " 0.6283971912344217,\n", - " 0.6283066377247811,\n", - " 0.628142404218728,\n", - " 0.6285404729543963,\n", - " 0.628117681739836,\n", - " 0.6284285531715674,\n", - " 0.628440782618211,\n", - " 0.6286006002142941,\n", - " 0.6279629684369982\n", - " ],\n", - " \"rms_dc\": [\n", - " 0.6621829958188445,\n", - " 0.6616518915968526,\n", - " 0.6619229399260815,\n", - " 0.6617138187667061,\n", - " 0.6617088713545417,\n", - " 0.6621712182715772,\n", - " 0.6624628340232414,\n", - " 0.661977447702136,\n", - " 0.6627544903873464,\n", - " 0.6620207993082551,\n", - " 0.662241081744421,\n", - " 0.661799506359354,\n", - " 0.6623544164712631,\n", - " 0.6624120892580125,\n", - " 0.6626660580828794,\n", - " 0.6620974380917977,\n", - " 0.498214159978348,\n", - " 0.49823204245121355,\n", - " 0.4981883248148897,\n", - " 0.49798748569938905,\n", - " 0.4983621583589863,\n", - " 0.4983645131550537,\n", - " 0.49866331698402155,\n", - " 0.49849425732991726,\n", - " 0.6374436148716767,\n", - " 0.6377106362522227,\n", - " 0.6377963245451337,\n", - " 0.6375594045830764,\n", - " 0.6374337096669657,\n", - " 0.6378045217930529,\n", - " 0.6376521190146351,\n", - " 0.637442235802496,\n", - " 0.6373332350391726,\n", - " 0.6373635157843435,\n", - " 0.6381945643264252,\n", - " 0.6376292497131597,\n", - " 0.6376899092541004,\n", - " 0.6372860080258722,\n", - " 0.6373424476924897,\n", - " 0.6380636089021572,\n", - " 0.637839000655549,\n", - " 0.6377363375921016,\n", - " 0.6376999348751861,\n", - " 0.6381092936591727,\n", - " 0.6376180440233918,\n", - " 0.6378754730392424,\n", - " 0.6378695336896755,\n", - " 0.6379947683984636,\n", - " 0.6373637582315667\n", - " ],\n", - " \"dc\": [\n", - " -0.14041988067626954,\n", - " -0.14023926696777345,\n", - " -0.14034740295410156,\n", - " -0.14042304229736327,\n", - " -0.1400552963256836,\n", - " -0.1405050018310547,\n", - " -0.1403626495361328,\n", - " -0.14052389526367187,\n", - " -0.14048562774658202,\n", - " -0.13984957580566407,\n", - " -0.14031693725585936,\n", - " -0.14036508178710938,\n", - " -0.1403116729736328,\n", - " -0.14006922912597655,\n", - " -0.1404031967163086,\n", - " -0.14007142333984374,\n", - " -0.11444206237792968,\n", - " -0.11473634033203126,\n", - " -0.11492355346679688,\n", - " -0.11484622802734375,\n", - " -0.11462444915771484,\n", - " -0.11458556365966797,\n", - " -0.1148621109008789,\n", - " -0.11454026947021484,\n", - " -0.10992149658203125,\n", - " -0.11007358551025391,\n", - " -0.10960406799316406,\n", - " -0.10987781829833984,\n", - " -0.10914927978515625,\n", - " -0.10979444274902343,\n", - " -0.10965857849121094,\n", - " -0.10950759887695312,\n", - " -0.11019064025878907,\n", - " -0.10959657592773438,\n", - " -0.10978596649169922,\n", - " -0.10967037048339844,\n", - " -0.11005220184326171,\n", - " -0.10966257781982422,\n", - " -0.1096109359741211,\n", - " -0.10985110168457031,\n", - " -0.10934148712158204,\n", - " -0.10926300964355469,\n", - " -0.10999239501953124,\n", - " -0.11009243621826172,\n", - " -0.1096583236694336,\n", - " -0.10937400360107422,\n", - " -0.10926904754638672,\n", - " -0.10908074951171876,\n", - " -0.10906452484130859\n", - " ],\n", - " \"utilization\": [\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1\n", - " ]\n", - " },\n", - " \"timestamps\": [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ]\n", - " },\n", - " \"inputs\": {\n", - " \"request_id\": \"99c500893a6184b4f3dcd4a7a3b1565b\",\n", - " \"feature\": \"RMS\",\n", - " \"experiment\": \"RMS\",\n", - " \"sw-commit\": {\n", - " \"api\": \"v0.2.0\",\n", - " \"feature\": \"1.0.0\"\n", - " },\n", - " \"dataType\": \"waveform\",\n", - " \"db_def\": \"/pipeline/dev_client_1/dev_site_1/data/dev_site_1Db/database.json\",\n", - " \"UUID\": \"u0001\",\n", - " \"timestamps\": [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " \"params\": {\n", - " \"utilization_threshold\": 0.1\n", - " }\n", - " },\n", - " \"error_info\": \"\",\n", - " \"debug_info\": \"\"\n", - "}\n" + "Waiting for {'request_id': '6ca83f696c2c9c7852db61292b7b9c76', 'request_status': 'queued'}\n" ] + }, + { + "data": { + "text/plain": [ + "{'status': 'successful',\n", + " 'request_id': '6ca83f696c2c9c7852db61292b7b9c76',\n", + " 'feature': 'KPIDemo',\n", + " 'results': {'acc': {'rms': [0.6471306969644414,\n", + " 0.6466266944439302,\n", + " 0.6468806720402722,\n", + " 0.6466493957387159,\n", + " 0.6467249872072451,\n", + " 0.647100732403723,\n", + " 0.6474297483216226,\n", + " 0.6468977699997093,\n", + " 0.6477017500152474,\n", + " 0.6470887870500318,\n", + " 0.647212859812641,\n", + " 0.6467505833073381,\n", + " 0.6473294495532388,\n", + " 0.6474410190623384,\n", + " 0.6476292704319382,\n", + " 0.6471187716244126,\n", + " 0.4848978443906459,\n", + " 0.48484688004435844,\n", + " 0.48475765388364805,\n", + " 0.48456940607276594,\n", + " 0.4850067490271975,\n", + " 0.4850187365383283,\n", + " 0.48525980138293656,\n", + " 0.48516238436722653,\n", + " 0.6279023656493041,\n", + " 0.6281468737921598,\n", + " 0.6283156705845551,\n", + " 0.6280271420358873,\n", + " 0.628026946860152,\n", + " 0.6282908228344413,\n", + " 0.6281600540558904,\n", + " 0.6279733052109427,\n", + " 0.6277421066711281,\n", + " 0.6278769053426508,\n", + " 0.6286883127970024,\n", + " 0.6281343035247084,\n", + " 0.6281292299681172,\n", + " 0.6277872706078097,\n", + " 0.6278531570472111,\n", + " 0.6285441754422537,\n", + " 0.6284047851367978,\n", + " 0.6283140536346776,\n", + " 0.6281499282360293,\n", + " 0.6285481383470801,\n", + " 0.6281251443487925,\n", + " 0.6284361962847654,\n", + " 0.6284482844164598,\n", + " 0.6286081295548268,\n", + " 0.6279703831408971],\n", + " 'peak': [2.6917552104452027,\n", + " 2.715255164704313,\n", + " 2.6851505333043484,\n", + " 2.7266109280295483,\n", + " 2.6970042262531173,\n", + " 2.711735134992144,\n", + " 2.681259855287886,\n", + " 2.667384142184121,\n", + " 2.6787570888613037,\n", + " 2.7229817204780704,\n", + " 2.682739508062897,\n", + " 2.682787559190933,\n", + " 2.700802677842825,\n", + " 2.7210068297972096,\n", + " 2.738182747476402,\n", + " 2.6924439987220383,\n", + " 2.3720132599872614,\n", + " 2.2734294797799635,\n", + " 2.3565631117706656,\n", + " 2.367473192872302,\n", + " 2.2605627121879217,\n", + " 2.3019645284833294,\n", + " 2.260862113899039,\n", + " 2.33652828167628,\n", + " 3.0371081557922737,\n", + " 3.0697912558897955,\n", + " 3.1035036648621293,\n", + " 3.032672310338032,\n", + " 2.9693198781385552,\n", + " 3.029719051997296,\n", + " 3.136087697846743,\n", + " 3.123363962089775,\n", + " 3.0473913260795387,\n", + " 3.1346266673634613,\n", + " 3.0981306499825583,\n", + " 3.069391137549435,\n", + " 2.9618012255115946,\n", + " 3.07212973445674,\n", + " 3.0116547698238354,\n", + " 2.978442280270874,\n", + " 3.1067808753934667,\n", + " 3.0939468951811686,\n", + " 2.996531248730437,\n", + " 3.012682780143234,\n", + " 3.103924514311588,\n", + " 3.0582901611724864,\n", + " 3.0854686711406067,\n", + " 3.049574684496507,\n", + " 3.088072126729926],\n", + " 'peak2peak': [5.36700439453125,\n", + " 5.41485595703125,\n", + " 5.3515625,\n", + " 5.39532470703125,\n", + " 5.31097412109375,\n", + " 5.314697265625,\n", + " 5.325927734375,\n", + " 5.2713623046875,\n", + " 5.379150390625,\n", + " 5.4998779296875,\n", + " 5.299072265625,\n", + " 5.278564453125,\n", + " 5.42462158203125,\n", + " 5.3746337890625,\n", + " 5.36669921875,\n", + " 5.36260986328125,\n", + " 4.60797119140625,\n", + " 4.55438232421875,\n", + " 4.66448974609375,\n", + " 4.70159912109375,\n", + " 4.65277099609375,\n", + " 4.59197998046875,\n", + " 4.6187744140625,\n", + " 4.58441162109375,\n", + " 5.60101318359375,\n", + " 5.72088623046875,\n", + " 5.7542724609375,\n", + " 5.69451904296875,\n", + " 5.6492919921875,\n", + " 5.67547607421875,\n", + " 5.7117919921875,\n", + " 5.7236328125,\n", + " 5.65484619140625,\n", + " 5.79638671875,\n", + " 5.69525146484375,\n", + " 5.6915283203125,\n", + " 5.5751953125,\n", + " 5.696533203125,\n", + " 5.71685791015625,\n", + " 5.55279541015625,\n", + " 5.70556640625,\n", + " 5.68310546875,\n", + " 5.58990478515625,\n", + " 5.6024169921875,\n", + " 5.71759033203125,\n", + " 5.59027099609375,\n", + " 5.76727294921875,\n", + " 5.6591796875,\n", + " 5.77734375],\n", + " 'variance': [0.41877813895368365,\n", + " 0.4181260819674838,\n", + " 0.41845460385927424,\n", + " 0.4181554410092465,\n", + " 0.41825320907821134,\n", + " 0.41873935787743477,\n", + " 0.4191652790117996,\n", + " 0.4184767248305968,\n", + " 0.4195175569728141,\n", + " 0.4187238983258814,\n", + " 0.41888448590685734,\n", + " 0.4182863170083822,\n", + " 0.41903541625889906,\n", + " 0.4191798731644793,\n", + " 0.41942367192020447,\n", + " 0.41876270458868864,\n", + " 0.23512591949469505,\n", + " 0.2350764970887485,\n", + " 0.2349899829987787,\n", + " 0.23480750930171312,\n", + " 0.2352315466019309,\n", + " 0.2352431747932363,\n", + " 0.23547707483820707,\n", + " 0.23538253920489244,\n", + " 0.3942613807879924,\n", + " 0.3945684950548635,\n", + " 0.3947805819021192,\n", + " 0.3944180911337645,\n", + " 0.39441784598248414,\n", + " 0.3947493580579793,\n", + " 0.39458505351149914,\n", + " 0.3943504720575559,\n", + " 0.3940601524879059,\n", + " 0.3942294082626641,\n", + " 0.39524899464754154,\n", + " 0.3945527032644705,\n", + " 0.3945463295403398,\n", + " 0.39411685713720324,\n", + " 0.3941995868141499,\n", + " 0.39506778048238267,\n", + " 0.394892573982825,\n", + " 0.3947785499948405,\n", + " 0.39457233234292877,\n", + " 0.3950727622195802,\n", + " 0.39454119696319145,\n", + " 0.3949320528008642,\n", + " 0.3949472461859916,\n", + " 0.39514818054241796,\n", + " 0.39434680210212514],\n", + " 'crest_factor': [4.159523297336503,\n", + " 4.199107751094795,\n", + " 4.1509209493542905,\n", + " 4.216521264842036,\n", + " 4.17024899238794,\n", + " 4.190591973090684,\n", + " 4.141391189142457,\n", + " 4.12334725189317,\n", + " 4.169192536071003,\n", + " 4.291368147281347,\n", + " 4.145065209055815,\n", + " 4.148102264510928,\n", + " 4.207778444296482,\n", + " 4.202709976173473,\n", + " 4.228009561164774,\n", + " 4.160664342904785,\n", + " 4.891779345746705,\n", + " 4.704480813056079,\n", + " 4.861322132597601,\n", + " 4.885725683880231,\n", + " 4.932319578447107,\n", + " 4.746135262552724,\n", + " 4.85907197225831,\n", + " 4.815971635401411,\n", + " 4.8369114721389,\n", + " 4.8870596734125,\n", + " 4.939401976039809,\n", + " 4.8288873320139665,\n", + " 4.728013492070362,\n", + " 4.822160282923067,\n", + " 4.992497815799841,\n", + " 4.973720914841443,\n", + " 4.854527510094295,\n", + " 4.992422305535833,\n", + " 4.927927856967997,\n", + " 4.886520478703161,\n", + " 4.715273679688384,\n", + " 4.893583986630332,\n", + " 4.796750221003309,\n", + " 4.738636354676574,\n", + " 4.94391664238704,\n", + " 4.924204507735062,\n", + " 4.770407690955719,\n", + " 4.793082019248064,\n", + " 4.941570230450774,\n", + " 4.866508611777468,\n", + " 4.909662016192138,\n", + " 4.851312830866793,\n", + " 4.917544218063957],\n", + " 'utilization': [1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1],\n", + " 'dc_component': [-0.14042464403895252,\n", + " -0.1402429576730629,\n", + " -0.14035072861684825,\n", + " -0.1404292874045484,\n", + " -0.14005842547186725,\n", + " -0.14050710764839433,\n", + " -0.1403663006003861,\n", + " -0.140528673434121,\n", + " -0.14048804589255356,\n", + " -0.13985183766557055,\n", + " -0.14032007446914688,\n", + " -0.1403681255971829,\n", + " -0.140316837999075,\n", + " -0.1400742126097098,\n", + " -0.14040442716390175,\n", + " -0.14007583465953835,\n", + " -0.1144449006122614,\n", + " -0.11473807352996325,\n", + " -0.11492492817691537,\n", + " -0.11484868115355228,\n", + " -0.11462765359417189,\n", + " -0.11458659879582928,\n", + " -0.11486602014903888,\n", + " -0.11454341839503018,\n", + " -0.10992309719852371,\n", + " -0.11007445901479568,\n", + " -0.10960718048712936,\n", + " -0.10988178299428189,\n", + " -0.10915142110730502,\n", + " -0.10979717699729602,\n", + " -0.10965947519049304,\n", + " -0.1095089816210249,\n", + " -0.1101965018607887,\n", + " -0.10960225330096143,\n", + " -0.10978836482630816,\n", + " -0.10967434067443484,\n", + " -0.11005562004284482,\n", + " -0.10966635555049033,\n", + " -0.10961619560508544,\n", + " -0.10985097167712396,\n", + " -0.10934435195596687,\n", + " -0.1092667193999186,\n", + " -0.10999560419918701,\n", + " -0.11009488951823405,\n", + " -0.10966181899908826,\n", + " -0.10937658695373634,\n", + " -0.10927238207810663,\n", + " -0.10908396184025694,\n", + " -0.10906822047992606]},\n", + " 'timestamps': [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060]},\n", + " 'inputs': {'request_id': '6ca83f696c2c9c7852db61292b7b9c76',\n", + " 'feature': 'KPIDemo',\n", + " 'experiment': 'KPIDemo',\n", + " 'sw-commit': {'api': '0.0.0-dev0', 'feature': '1.0.0'},\n", + " 'dataType': 'waveform',\n", + " 'db_def': 'vibium_app/pipeline/apfel/strudel/data/strudelDb/database.json',\n", + " 'UUID': 'u0001',\n", + " 'timestamps': [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " 'params': {'utilization_threshold': 0.1}},\n", + " 'error_info': '',\n", + " 'debug_info': ''}" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ "# Specifc part : Select one of two anlysis here by un/commenting\n", - "selected_feature = \"RMS\"\n", + "selected_feature = \"KPIDemo\"\n", "# selected_feature = \"ModeId\"\n", "\n", "# Generic Part: request analysis and wait for results\n", @@ -552,12 +664,11 @@ "\n", "# Generic Part: Displaying unparsed results\n", "raw_result = session.get_analysis_results(analysis_request[\"request_id\"])\n", - "print(json.dumps(raw_result, sort_keys=False, indent=4)) # Pretty but pretty long" + "raw_result" ] }, { "cell_type": "markdown", - "id": "advised-thursday", "metadata": { "pycharm": { "name": "#%% md\n" @@ -578,7 +689,6 @@ { "cell_type": "code", "execution_count": 5, - "id": "hollow-impact", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:38.637859Z", @@ -594,159 +704,46 @@ "name": "stdout", "output_type": "stream", "text": [ - "=== RMS ===\n", - "request_id 99c500893a6184b4f3dcd4a7a3b1565b\n", + "=== KPIDemo ===\n", + "request_id 6ca83f696c2c9c7852db61292b7b9c76\n", "from 20191005-13:01.00 to 20191122-13:01.00\n", "\n", - "+-------+--------------+------------+------------+------------+---------------+\n", - "| | timestamps | rms | rms_dc | dc | utilization |\n", - "|-------+--------------+------------+------------+------------+---------------|\n", - "| count | 49 | 49 | 49 | 49 | 49 |\n", - "| mean | 1.57235e+09 | 0.610969 | 0.622908 | -0.120479 | 1 |\n", - "| std | 1.2361e+06 | 0.0568938 | 0.0566906 | 0.0140601 | 0 |\n", - "| min | 1.57027e+09 | 0.484564 | 0.497987 | -0.140524 | 1 |\n", - "| 25% | 1.57131e+09 | 0.627895 | 0.637364 | -0.140071 | 1 |\n", - "| 50% | 1.57235e+09 | 0.628307 | 0.637796 | -0.110191 | 1 |\n", - "| 75% | 1.57339e+09 | 0.646743 | 0.6618 | -0.109659 | 1 |\n", - "| max | 1.57442e+09 | 0.647694 | 0.662754 | -0.109065 | 1 |\n", - "+-------+--------------+------------+------------+------------+---------------+\n" + "+-------+--------------+------------+------------+-----------------+----------------+--------------------+-------------------+--------------------+\n", + "| | timestamps | rms_acc | peak_acc | peak2peak_acc | variance_acc | crest_factor_acc | utilization_acc | dc_component_acc |\n", + "|-------+--------------+------------+------------+-----------------+----------------+--------------------+-------------------+--------------------|\n", + "| count | 49 | 49 | 49 | 49 | 49 | 49 | 49 | 49 |\n", + "| mean | 1.57235e+09 | 0.610976 | 2.82032 | 5.40237 | 0.376463 | 4.63947 | 1 | -0.120482 |\n", + "| std | 1.2361e+06 | 0.0568944 | 0.28031 | 0.381933 | 0.0639936 | 0.329529 | 0 | 0.0140604 |\n", + "| min | 1.57027e+09 | 0.484569 | 2.26056 | 4.55438 | 0.234808 | 4.12335 | 1 | -0.140529 |\n", + "| 25% | 1.57131e+09 | 0.627902 | 2.68279 | 5.3147 | 0.394261 | 4.20778 | 1 | -0.140076 |\n", + "| 50% | 1.57235e+09 | 0.628314 | 2.9618 | 5.5528 | 0.394779 | 4.81597 | 1 | -0.110197 |\n", + "| 75% | 1.57339e+09 | 0.646751 | 3.06939 | 5.69452 | 0.418286 | 4.89178 | 1 | -0.109662 |\n", + "| max | 1.57442e+09 | 0.647702 | 3.13609 | 5.79639 | 0.419518 | 4.9925 | 1 | -0.109068 |\n", + "+-------+--------------+------------+------------+-----------------+----------------+--------------------+-------------------+--------------------+\n" ] - }, - { - "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", - "
timestampsrmsrms_dcdcutilization
count4.900000e+0149.00000049.00000049.00000049.0
mean1.572349e+090.6109690.622908-0.1204791.0
std1.236102e+060.0568940.0566910.0140600.0
min1.570273e+090.4845640.497987-0.1405241.0
25%1.571310e+090.6278950.637364-0.1400711.0
50%1.572350e+090.6283070.637796-0.1101911.0
75%1.573387e+090.6467430.661800-0.1096591.0
max1.574424e+090.6476940.662754-0.1090651.0
\n", - "
" - ], - "text/plain": [ - " timestamps rms rms_dc dc utilization\n", - "count 4.900000e+01 49.000000 49.000000 49.000000 49.0\n", - "mean 1.572349e+09 0.610969 0.622908 -0.120479 1.0\n", - "std 1.236102e+06 0.056894 0.056691 0.014060 0.0\n", - "min 1.570273e+09 0.484564 0.497987 -0.140524 1.0\n", - "25% 1.571310e+09 0.627895 0.637364 -0.140071 1.0\n", - "50% 1.572350e+09 0.628307 0.637796 -0.110191 1.0\n", - "75% 1.573387e+09 0.646743 0.661800 -0.109659 1.0\n", - "max 1.574424e+09 0.647694 0.662754 -0.109065 1.0" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ "# Parse\n", - "pretty_result = parse_results(raw_result, \"Europe/Stockholm\", \"s\")\n", - "# pretty_result = parse_results(raw_result) # show only raw timestamps\n", + "result = parse_results(raw_result, \"Europe/Stockholm\", \"s\")\n", + "# result = parse_results(raw_result) # show only raw timestamps\n", "# Show summary\n", - "pretty_result.summary()" + "summary = result.summary()" ] }, { "cell_type": "markdown", - "id": "athletic-reward", "metadata": {}, "source": [ "### Plotting\n", - "For visual representation of the results there is the 'plot' method:" + "For visual representation of the results there is the 'plot' method:\n", + "\n", + "Please not that when plotting the results for the KPIDemo feature, one selects the KPI to be displayed by passing the parameter `\"kpi\"`. If this parameter is not included, the plot function will display the results of the first KPI after the timestamps, which is the RMS value." ] }, { "cell_type": "code", "execution_count": 6, - "id": "historical-peripheral", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:43.435603Z", @@ -760,7 +757,7 @@ "outputs": [ { "data": { - "image/png": "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aQPgfcDV1ZkR8WJEbBER4yJiHHAHcFhEzCknXDMzaxSlJriIWAWcAFwP/Bm4MiIeknSWpMPKjM3MzBpb2b0oiYjrgOtqpp3RxbIz+iMmMzNrfGVXUZqZNaxZs2bx1FNPtY9/5CMf4eGH06ecxo0bx3PPPQfAvvvuu1bbP/vsszuNr+121ldOcGZma6k2wX3/+99n111X+64KbrvttrXafm2CW9vtrK+c4MzMejB//nwmTJjQPn7eeecxYcIE5syZw8yZM5k8eTLLly9nxowZzJmzeh+4YcOGAXDGGWcwefJkJk+ezJgxY/jQhz4EwBFHHMFee+3FbrvtxiWXXALAqaeeyvLly5k8eTIzZ87stJ2I4OSTT2bChAlMnDiRK664AoDZs2czY8YMjjrqKHbeeWdmzpxJRKy7AzPAld4GZ2bWW+fceQ6PPP9In25z5xE7c8q0U9Z4vaOOOorZs2dz3nnnMWVK7z65dNZZZ3HWWWexZMkS9t9/f0444QQALr30UkaMGMHy5cuZOnUq7373u/nKV77ChRdeyH333bfadn71q19x3333cf/99/Pcc88xdepUDjjgAADuvfdeHnroIUaPHs306dO59dZb2W+//dZ4/5qBS3BmZv0oIjjmmGM48cQT2WuvvQC44IIL2H333dlnn3148sknefTRR7vdxi233MLRRx9NS0sLW265JQceeCB33XUXANOmTWPs2LFUKhUmT57M/Pnz1/UuDVguwZlZw1ibklZfGDRoUKcfM12xYsVab+vMM89k7Nix7dWTs2fP5oYbbuD2229no402YsaMGa9r+0OGDGkfbmlpYdWqVWu9rUbnEpyZWQ+23HJLnn32WRYvXsyrr77KtddeC8Dw4cNZunRpr7dzzTXXcMMNN3DBBRe0T3vxxRfZfPPN2WijjXjkkUe444472ucNHjyYlStXrrad/fffnyuuuILW1lYWLVrEzTffzLRp017HHjYnl+DMzHowePBgzjjjDKZNm8aYMWPYeeedATjuuOP4+Mc/zoYbbsjtt9/e43a+/vWvs3DhwvZkdNhhh3Haaadx8cUXs8suu7DTTjuxzz77tC9//PHHM2nSJPbcc09+9rOftU8/8sgjuf3229l9992RxLnnnstWW23FI4/0bftko1Mz9rCZMmVK1OvJZGaN589//jO77LJL2WE0nXrHVdLdEdE0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", + "image/png": "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", "text/plain": [ "
" ] @@ -782,12 +779,11 @@ } ], "source": [ - "pretty_result.plot()" + "result.plot()" ] }, { "cell_type": "markdown", - "id": "atomic-marketing", "metadata": { "pycharm": { "name": "#%% md\n" @@ -801,7 +797,6 @@ { "cell_type": "code", "execution_count": 7, - "id": "painted-precipitation", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:44.400481Z", @@ -834,10 +829,13 @@ " \n", " \n", " timestamps\n", - " rms\n", - " rms_dc\n", - " dc\n", - " utilization\n", + " rms_acc\n", + " peak_acc\n", + " peak2peak_acc\n", + " variance_acc\n", + " crest_factor_acc\n", + " utilization_acc\n", + " dc_component_acc\n", " datetime\n", " \n", " \n", @@ -845,442 +843,589 @@ " \n", " 0\n", " 1570273260\n", - " 0.647123\n", - " 0.662183\n", - " -0.140420\n", + " 0.647131\n", + " 2.691755\n", + " 5.367004\n", + " 0.418778\n", + " 4.159523\n", " 1\n", + " -0.140425\n", " 2019-10-05 13:01:00+02:00\n", " \n", " \n", " 1\n", " 1570359660\n", - " 0.646619\n", - " 0.661652\n", - " -0.140239\n", + " 0.646627\n", + " 2.715255\n", + " 5.414856\n", + " 0.418126\n", + " 4.199108\n", " 1\n", + " -0.140243\n", " 2019-10-06 13:01:00+02:00\n", " \n", " \n", " 2\n", " 1570446060\n", - " 0.646873\n", - " 0.661923\n", - " -0.140347\n", + " 0.646881\n", + " 2.685151\n", + " 5.351562\n", + " 0.418455\n", + " 4.150921\n", " 1\n", + " -0.140351\n", " 2019-10-07 13:01:00+02:00\n", " \n", " \n", " 3\n", " 1570532460\n", - " 0.646643\n", - " 0.661714\n", - " -0.140423\n", + " 0.646649\n", + " 2.726611\n", + " 5.395325\n", + " 0.418155\n", + " 4.216521\n", " 1\n", + " -0.140429\n", " 2019-10-08 13:01:00+02:00\n", " \n", " \n", " 4\n", " 1570618860\n", - " 0.646717\n", - " 0.661709\n", - " -0.140055\n", + " 0.646725\n", + " 2.697004\n", + " 5.310974\n", + " 0.418253\n", + " 4.170249\n", " 1\n", + " -0.140058\n", " 2019-10-09 13:01:00+02:00\n", " \n", " \n", " 5\n", " 1570705260\n", - " 0.647093\n", - " 0.662171\n", - " -0.140505\n", + " 0.647101\n", + " 2.711735\n", + " 5.314697\n", + " 0.418739\n", + " 4.190592\n", " 1\n", + " -0.140507\n", " 2019-10-10 13:01:00+02:00\n", " \n", " \n", " 6\n", " 1570791660\n", - " 0.647422\n", - " 0.662463\n", - " -0.140363\n", + " 0.647430\n", + " 2.681260\n", + " 5.325928\n", + " 0.419165\n", + " 4.141391\n", " 1\n", + " -0.140366\n", " 2019-10-11 13:01:00+02:00\n", " \n", " \n", " 7\n", " 1570878060\n", - " 0.646890\n", - " 0.661977\n", - " -0.140524\n", + " 0.646898\n", + " 2.667384\n", + " 5.271362\n", + " 0.418477\n", + " 4.123347\n", " 1\n", + " -0.140529\n", " 2019-10-12 13:01:00+02:00\n", " \n", " \n", " 8\n", " 1570964460\n", - " 0.647694\n", - " 0.662754\n", - " -0.140486\n", + " 0.647702\n", + " 2.678757\n", + " 5.379150\n", + " 0.419518\n", + " 4.169193\n", " 1\n", + " -0.140488\n", " 2019-10-13 13:01:00+02:00\n", " \n", " \n", " 9\n", " 1571050860\n", - " 0.647081\n", - " 0.662021\n", - " -0.139850\n", + " 0.647089\n", + " 2.722982\n", + " 5.499878\n", + " 0.418724\n", + " 4.291368\n", " 1\n", + " -0.139852\n", " 2019-10-14 13:01:00+02:00\n", " \n", " \n", " 10\n", " 1571137260\n", - " 0.647205\n", - " 0.662241\n", - " -0.140317\n", + " 0.647213\n", + " 2.682740\n", + " 5.299072\n", + " 0.418884\n", + " 4.145065\n", " 1\n", + " -0.140320\n", " 2019-10-15 13:01:00+02:00\n", " \n", " \n", " 11\n", " 1571223660\n", - " 0.646743\n", - " 0.661800\n", - " -0.140365\n", + " 0.646751\n", + " 2.682788\n", + " 5.278564\n", + " 0.418286\n", + " 4.148102\n", " 1\n", + " -0.140368\n", " 2019-10-16 13:01:00+02:00\n", " \n", " \n", " 12\n", " 1571310060\n", - " 0.647322\n", - " 0.662354\n", - " -0.140312\n", + " 0.647329\n", + " 2.700803\n", + " 5.424622\n", + " 0.419035\n", + " 4.207778\n", " 1\n", + " -0.140317\n", " 2019-10-17 13:01:00+02:00\n", " \n", " \n", " 13\n", " 1571396460\n", - " 0.647434\n", - " 0.662412\n", - " -0.140069\n", + " 0.647441\n", + " 2.721007\n", + " 5.374634\n", + " 0.419180\n", + " 4.202710\n", " 1\n", + " -0.140074\n", " 2019-10-18 13:01:00+02:00\n", " \n", " \n", " 14\n", " 1571482860\n", - " 0.647621\n", - " 0.662666\n", - " -0.140403\n", + " 0.647629\n", + " 2.738183\n", + " 5.366699\n", + " 0.419424\n", + " 4.228010\n", " 1\n", + " -0.140404\n", " 2019-10-19 13:01:00+02:00\n", " \n", " \n", " 15\n", " 1571569260\n", - " 0.647111\n", - " 0.662097\n", - " -0.140071\n", + " 0.647119\n", + " 2.692444\n", + " 5.362610\n", + " 0.418763\n", + " 4.160664\n", " 1\n", + " -0.140076\n", " 2019-10-20 13:01:00+02:00\n", " \n", " \n", " 16\n", " 1571655660\n", - " 0.484892\n", - " 0.498214\n", - " -0.114442\n", + " 0.484898\n", + " 2.372013\n", + " 4.607971\n", + " 0.235126\n", + " 4.891779\n", " 1\n", + " -0.114445\n", " 2019-10-21 13:01:00+02:00\n", " \n", " \n", " 17\n", " 1571742060\n", - " 0.484841\n", - " 0.498232\n", - " -0.114736\n", + " 0.484847\n", + " 2.273429\n", + " 4.554382\n", + " 0.235076\n", + " 4.704481\n", " 1\n", + " -0.114738\n", " 2019-10-22 13:01:00+02:00\n", " \n", " \n", " 18\n", " 1571828460\n", - " 0.484752\n", - " 0.498188\n", - " -0.114924\n", + " 0.484758\n", + " 2.356563\n", + " 4.664490\n", + " 0.234990\n", + " 4.861322\n", " 1\n", + " -0.114925\n", " 2019-10-23 13:01:00+02:00\n", " \n", " \n", " 19\n", " 1571914860\n", - " 0.484564\n", - " 0.497987\n", - " -0.114846\n", + " 0.484569\n", + " 2.367473\n", + " 4.701599\n", + " 0.234808\n", + " 4.885726\n", " 1\n", + " -0.114849\n", " 2019-10-24 13:01:00+02:00\n", " \n", " \n", " 20\n", " 1572001260\n", - " 0.485001\n", - " 0.498362\n", - " -0.114624\n", + " 0.485007\n", + " 2.260563\n", + " 4.652771\n", + " 0.235232\n", + " 4.932320\n", " 1\n", + " -0.114628\n", " 2019-10-25 13:01:00+02:00\n", " \n", " \n", " 21\n", " 1572087660\n", - " 0.485013\n", - " 0.498365\n", - " -0.114586\n", + " 0.485019\n", + " 2.301965\n", + " 4.591980\n", + " 0.235243\n", + " 4.746135\n", " 1\n", + " -0.114587\n", " 2019-10-26 13:01:00+02:00\n", " \n", " \n", " 22\n", " 1572177660\n", - " 0.485254\n", - " 0.498663\n", - " -0.114862\n", + " 0.485260\n", + " 2.260862\n", + " 4.618774\n", + " 0.235477\n", + " 4.859072\n", " 1\n", + " -0.114866\n", " 2019-10-27 13:01:00+01:00\n", " \n", " \n", " 23\n", " 1572264060\n", - " 0.485157\n", - " 0.498494\n", - " -0.114540\n", + " 0.485162\n", + " 2.336528\n", + " 4.584412\n", + " 0.235383\n", + " 4.815972\n", " 1\n", + " -0.114543\n", " 2019-10-28 13:01:00+01:00\n", " \n", " \n", " 24\n", " 1572350460\n", - " 0.627895\n", - " 0.637444\n", - " -0.109921\n", + " 0.627902\n", + " 3.037108\n", + " 5.601013\n", + " 0.394261\n", + " 4.836911\n", " 1\n", + " -0.109923\n", " 2019-10-29 13:01:00+01:00\n", " \n", " \n", " 25\n", " 1572436860\n", - " 0.628139\n", - " 0.637711\n", - " -0.110074\n", + " 0.628147\n", + " 3.069791\n", + " 5.720886\n", + " 0.394568\n", + " 4.887060\n", " 1\n", + " -0.110074\n", " 2019-10-30 13:01:00+01:00\n", " \n", " \n", " 26\n", " 1572523260\n", - " 0.628308\n", - " 0.637796\n", - " -0.109604\n", + " 0.628316\n", + " 3.103504\n", + " 5.754272\n", + " 0.394781\n", + " 4.939402\n", " 1\n", + " -0.109607\n", " 2019-10-31 13:01:00+01:00\n", " \n", " \n", " 27\n", " 1572609660\n", - " 0.628020\n", - " 0.637559\n", - " -0.109878\n", + " 0.628027\n", + " 3.032672\n", + " 5.694519\n", + " 0.394418\n", + " 4.828887\n", " 1\n", + " -0.109882\n", " 2019-11-01 13:01:00+01:00\n", " \n", " \n", " 28\n", " 1572696060\n", - " 0.628019\n", - " 0.637434\n", - " -0.109149\n", + " 0.628027\n", + " 2.969320\n", + " 5.649292\n", + " 0.394418\n", + " 4.728013\n", " 1\n", + " -0.109151\n", " 2019-11-02 13:01:00+01:00\n", " \n", " \n", " 29\n", " 1572782460\n", - " 0.628283\n", - " 0.637805\n", - " -0.109794\n", + " 0.628291\n", + " 3.029719\n", + " 5.675476\n", + " 0.394749\n", + " 4.822160\n", " 1\n", + " -0.109797\n", " 2019-11-03 13:01:00+01:00\n", " \n", " \n", " 30\n", " 1572868860\n", - " 0.628152\n", - " 0.637652\n", - " -0.109659\n", + " 0.628160\n", + " 3.136088\n", + " 5.711792\n", + " 0.394585\n", + " 4.992498\n", " 1\n", + " -0.109659\n", " 2019-11-04 13:01:00+01:00\n", " \n", " \n", " 31\n", " 1572955260\n", - " 0.627966\n", - " 0.637442\n", - " -0.109508\n", + " 0.627973\n", + " 3.123364\n", + " 5.723633\n", + " 0.394350\n", + " 4.973721\n", " 1\n", + " -0.109509\n", " 2019-11-05 13:01:00+01:00\n", " \n", " \n", " 32\n", " 1573041660\n", - " 0.627735\n", - " 0.637333\n", - " -0.110191\n", + " 0.627742\n", + " 3.047391\n", + " 5.654846\n", + " 0.394060\n", + " 4.854528\n", " 1\n", + " -0.110197\n", " 2019-11-06 13:01:00+01:00\n", " \n", " \n", " 33\n", " 1573128060\n", - " 0.627870\n", - " 0.637364\n", - " -0.109597\n", + " 0.627877\n", + " 3.134627\n", + " 5.796387\n", + " 0.394229\n", + " 4.992422\n", " 1\n", + " -0.109602\n", " 2019-11-07 13:01:00+01:00\n", " \n", " \n", " 34\n", " 1573214460\n", - " 0.628681\n", - " 0.638195\n", - " -0.109786\n", + " 0.628688\n", + " 3.098131\n", + " 5.695251\n", + " 0.395249\n", + " 4.927928\n", " 1\n", + " -0.109788\n", " 2019-11-08 13:01:00+01:00\n", " \n", " \n", " 35\n", " 1573300860\n", - " 0.628127\n", - " 0.637629\n", - " -0.109670\n", + " 0.628134\n", + " 3.069391\n", + " 5.691528\n", + " 0.394553\n", + " 4.886520\n", " 1\n", + " -0.109674\n", " 2019-11-09 13:01:00+01:00\n", " \n", " \n", " 36\n", " 1573387260\n", - " 0.628122\n", - " 0.637690\n", - " -0.110052\n", + " 0.628129\n", + " 2.961801\n", + " 5.575195\n", + " 0.394546\n", + " 4.715274\n", " 1\n", + " -0.110056\n", " 2019-11-10 13:01:00+01:00\n", " \n", " \n", " 37\n", " 1573473660\n", - " 0.627780\n", - " 0.637286\n", - " -0.109663\n", + " 0.627787\n", + " 3.072130\n", + " 5.696533\n", + " 0.394117\n", + " 4.893584\n", " 1\n", + " -0.109666\n", " 2019-11-11 13:01:00+01:00\n", " \n", " \n", " 38\n", " 1573560060\n", - " 0.627846\n", - " 0.637342\n", - " -0.109611\n", + " 0.627853\n", + " 3.011655\n", + " 5.716858\n", + " 0.394200\n", + " 4.796750\n", " 1\n", + " -0.109616\n", " 2019-11-12 13:01:00+01:00\n", " \n", " \n", " 39\n", " 1573646460\n", - " 0.628536\n", - " 0.638064\n", - " -0.109851\n", + " 0.628544\n", + " 2.978442\n", + " 5.552795\n", + " 0.395068\n", + " 4.738636\n", " 1\n", + " -0.109851\n", " 2019-11-13 13:01:00+01:00\n", " \n", " \n", " 40\n", " 1573732860\n", - " 0.628397\n", - " 0.637839\n", - " -0.109341\n", + " 0.628405\n", + " 3.106781\n", + " 5.705566\n", + " 0.394893\n", + " 4.943917\n", " 1\n", + " -0.109344\n", " 2019-11-14 13:01:00+01:00\n", " \n", " \n", " 41\n", " 1573819260\n", - " 0.628307\n", - " 0.637736\n", - " -0.109263\n", + " 0.628314\n", + " 3.093947\n", + " 5.683105\n", + " 0.394779\n", + " 4.924205\n", " 1\n", + " -0.109267\n", " 2019-11-15 13:01:00+01:00\n", " \n", " \n", " 42\n", " 1573905660\n", - " 0.628142\n", - " 0.637700\n", - " -0.109992\n", + " 0.628150\n", + " 2.996531\n", + " 5.589905\n", + " 0.394572\n", + " 4.770408\n", " 1\n", + " -0.109996\n", " 2019-11-16 13:01:00+01:00\n", " \n", " \n", " 43\n", " 1573992060\n", - " 0.628540\n", - " 0.638109\n", - " -0.110092\n", + " 0.628548\n", + " 3.012683\n", + " 5.602417\n", + " 0.395073\n", + " 4.793082\n", " 1\n", + " -0.110095\n", " 2019-11-17 13:01:00+01:00\n", " \n", " \n", " 44\n", " 1574078460\n", - " 0.628118\n", - " 0.637618\n", - " -0.109658\n", + " 0.628125\n", + " 3.103925\n", + " 5.717590\n", + " 0.394541\n", + " 4.941570\n", " 1\n", + " -0.109662\n", " 2019-11-18 13:01:00+01:00\n", " \n", " \n", " 45\n", " 1574164860\n", - " 0.628429\n", - " 0.637875\n", - " -0.109374\n", + " 0.628436\n", + " 3.058290\n", + " 5.590271\n", + " 0.394932\n", + " 4.866509\n", " 1\n", + " -0.109377\n", " 2019-11-19 13:01:00+01:00\n", " \n", " \n", " 46\n", " 1574251260\n", - " 0.628441\n", - " 0.637870\n", - " -0.109269\n", + " 0.628448\n", + " 3.085469\n", + " 5.767273\n", + " 0.394947\n", + " 4.909662\n", " 1\n", + " -0.109272\n", " 2019-11-20 13:01:00+01:00\n", " \n", " \n", " 47\n", " 1574337660\n", - " 0.628601\n", - " 0.637995\n", - " -0.109081\n", + " 0.628608\n", + " 3.049575\n", + " 5.659180\n", + " 0.395148\n", + " 4.851313\n", " 1\n", + " -0.109084\n", " 2019-11-21 13:01:00+01:00\n", " \n", " \n", " 48\n", " 1574424060\n", - " 0.627963\n", - " 0.637364\n", - " -0.109065\n", + " 0.627970\n", + " 3.088072\n", + " 5.777344\n", + " 0.394347\n", + " 4.917544\n", " 1\n", + " -0.109068\n", " 2019-11-22 13:01:00+01:00\n", " \n", " \n", @@ -1288,56 +1433,107 @@ "" ], "text/plain": [ - " timestamps rms rms_dc dc utilization \\\n", - "0 1570273260 0.647123 0.662183 -0.140420 1 \n", - "1 1570359660 0.646619 0.661652 -0.140239 1 \n", - "2 1570446060 0.646873 0.661923 -0.140347 1 \n", - "3 1570532460 0.646643 0.661714 -0.140423 1 \n", - "4 1570618860 0.646717 0.661709 -0.140055 1 \n", - "5 1570705260 0.647093 0.662171 -0.140505 1 \n", - "6 1570791660 0.647422 0.662463 -0.140363 1 \n", - "7 1570878060 0.646890 0.661977 -0.140524 1 \n", - "8 1570964460 0.647694 0.662754 -0.140486 1 \n", - "9 1571050860 0.647081 0.662021 -0.139850 1 \n", - "10 1571137260 0.647205 0.662241 -0.140317 1 \n", - "11 1571223660 0.646743 0.661800 -0.140365 1 \n", - "12 1571310060 0.647322 0.662354 -0.140312 1 \n", - "13 1571396460 0.647434 0.662412 -0.140069 1 \n", - "14 1571482860 0.647621 0.662666 -0.140403 1 \n", - "15 1571569260 0.647111 0.662097 -0.140071 1 \n", - "16 1571655660 0.484892 0.498214 -0.114442 1 \n", - "17 1571742060 0.484841 0.498232 -0.114736 1 \n", - "18 1571828460 0.484752 0.498188 -0.114924 1 \n", - "19 1571914860 0.484564 0.497987 -0.114846 1 \n", - "20 1572001260 0.485001 0.498362 -0.114624 1 \n", - "21 1572087660 0.485013 0.498365 -0.114586 1 \n", - "22 1572177660 0.485254 0.498663 -0.114862 1 \n", - "23 1572264060 0.485157 0.498494 -0.114540 1 \n", - "24 1572350460 0.627895 0.637444 -0.109921 1 \n", - "25 1572436860 0.628139 0.637711 -0.110074 1 \n", - "26 1572523260 0.628308 0.637796 -0.109604 1 \n", - "27 1572609660 0.628020 0.637559 -0.109878 1 \n", - "28 1572696060 0.628019 0.637434 -0.109149 1 \n", - "29 1572782460 0.628283 0.637805 -0.109794 1 \n", - "30 1572868860 0.628152 0.637652 -0.109659 1 \n", - "31 1572955260 0.627966 0.637442 -0.109508 1 \n", - "32 1573041660 0.627735 0.637333 -0.110191 1 \n", - "33 1573128060 0.627870 0.637364 -0.109597 1 \n", - "34 1573214460 0.628681 0.638195 -0.109786 1 \n", - "35 1573300860 0.628127 0.637629 -0.109670 1 \n", - "36 1573387260 0.628122 0.637690 -0.110052 1 \n", - "37 1573473660 0.627780 0.637286 -0.109663 1 \n", - "38 1573560060 0.627846 0.637342 -0.109611 1 \n", - "39 1573646460 0.628536 0.638064 -0.109851 1 \n", - "40 1573732860 0.628397 0.637839 -0.109341 1 \n", - "41 1573819260 0.628307 0.637736 -0.109263 1 \n", - "42 1573905660 0.628142 0.637700 -0.109992 1 \n", - "43 1573992060 0.628540 0.638109 -0.110092 1 \n", - "44 1574078460 0.628118 0.637618 -0.109658 1 \n", - "45 1574164860 0.628429 0.637875 -0.109374 1 \n", - "46 1574251260 0.628441 0.637870 -0.109269 1 \n", - "47 1574337660 0.628601 0.637995 -0.109081 1 \n", - "48 1574424060 0.627963 0.637364 -0.109065 1 \n", + " timestamps rms_acc peak_acc peak2peak_acc variance_acc \\\n", + "0 1570273260 0.647131 2.691755 5.367004 0.418778 \n", + "1 1570359660 0.646627 2.715255 5.414856 0.418126 \n", + "2 1570446060 0.646881 2.685151 5.351562 0.418455 \n", + "3 1570532460 0.646649 2.726611 5.395325 0.418155 \n", + "4 1570618860 0.646725 2.697004 5.310974 0.418253 \n", + "5 1570705260 0.647101 2.711735 5.314697 0.418739 \n", + "6 1570791660 0.647430 2.681260 5.325928 0.419165 \n", + "7 1570878060 0.646898 2.667384 5.271362 0.418477 \n", + "8 1570964460 0.647702 2.678757 5.379150 0.419518 \n", + "9 1571050860 0.647089 2.722982 5.499878 0.418724 \n", + "10 1571137260 0.647213 2.682740 5.299072 0.418884 \n", + "11 1571223660 0.646751 2.682788 5.278564 0.418286 \n", + "12 1571310060 0.647329 2.700803 5.424622 0.419035 \n", + "13 1571396460 0.647441 2.721007 5.374634 0.419180 \n", + "14 1571482860 0.647629 2.738183 5.366699 0.419424 \n", + "15 1571569260 0.647119 2.692444 5.362610 0.418763 \n", + "16 1571655660 0.484898 2.372013 4.607971 0.235126 \n", + "17 1571742060 0.484847 2.273429 4.554382 0.235076 \n", + "18 1571828460 0.484758 2.356563 4.664490 0.234990 \n", + "19 1571914860 0.484569 2.367473 4.701599 0.234808 \n", + "20 1572001260 0.485007 2.260563 4.652771 0.235232 \n", + "21 1572087660 0.485019 2.301965 4.591980 0.235243 \n", + "22 1572177660 0.485260 2.260862 4.618774 0.235477 \n", + "23 1572264060 0.485162 2.336528 4.584412 0.235383 \n", + "24 1572350460 0.627902 3.037108 5.601013 0.394261 \n", + "25 1572436860 0.628147 3.069791 5.720886 0.394568 \n", + "26 1572523260 0.628316 3.103504 5.754272 0.394781 \n", + "27 1572609660 0.628027 3.032672 5.694519 0.394418 \n", + "28 1572696060 0.628027 2.969320 5.649292 0.394418 \n", + "29 1572782460 0.628291 3.029719 5.675476 0.394749 \n", + "30 1572868860 0.628160 3.136088 5.711792 0.394585 \n", + "31 1572955260 0.627973 3.123364 5.723633 0.394350 \n", + "32 1573041660 0.627742 3.047391 5.654846 0.394060 \n", + "33 1573128060 0.627877 3.134627 5.796387 0.394229 \n", + "34 1573214460 0.628688 3.098131 5.695251 0.395249 \n", + "35 1573300860 0.628134 3.069391 5.691528 0.394553 \n", + "36 1573387260 0.628129 2.961801 5.575195 0.394546 \n", + "37 1573473660 0.627787 3.072130 5.696533 0.394117 \n", + "38 1573560060 0.627853 3.011655 5.716858 0.394200 \n", + "39 1573646460 0.628544 2.978442 5.552795 0.395068 \n", + "40 1573732860 0.628405 3.106781 5.705566 0.394893 \n", + "41 1573819260 0.628314 3.093947 5.683105 0.394779 \n", + "42 1573905660 0.628150 2.996531 5.589905 0.394572 \n", + "43 1573992060 0.628548 3.012683 5.602417 0.395073 \n", + "44 1574078460 0.628125 3.103925 5.717590 0.394541 \n", + "45 1574164860 0.628436 3.058290 5.590271 0.394932 \n", + "46 1574251260 0.628448 3.085469 5.767273 0.394947 \n", + "47 1574337660 0.628608 3.049575 5.659180 0.395148 \n", + "48 1574424060 0.627970 3.088072 5.777344 0.394347 \n", + "\n", + " crest_factor_acc utilization_acc dc_component_acc \\\n", + "0 4.159523 1 -0.140425 \n", + "1 4.199108 1 -0.140243 \n", + "2 4.150921 1 -0.140351 \n", + "3 4.216521 1 -0.140429 \n", + "4 4.170249 1 -0.140058 \n", + "5 4.190592 1 -0.140507 \n", + "6 4.141391 1 -0.140366 \n", + "7 4.123347 1 -0.140529 \n", + "8 4.169193 1 -0.140488 \n", + "9 4.291368 1 -0.139852 \n", + "10 4.145065 1 -0.140320 \n", + "11 4.148102 1 -0.140368 \n", + "12 4.207778 1 -0.140317 \n", + "13 4.202710 1 -0.140074 \n", + "14 4.228010 1 -0.140404 \n", + "15 4.160664 1 -0.140076 \n", + "16 4.891779 1 -0.114445 \n", + "17 4.704481 1 -0.114738 \n", + "18 4.861322 1 -0.114925 \n", + "19 4.885726 1 -0.114849 \n", + "20 4.932320 1 -0.114628 \n", + "21 4.746135 1 -0.114587 \n", + "22 4.859072 1 -0.114866 \n", + "23 4.815972 1 -0.114543 \n", + "24 4.836911 1 -0.109923 \n", + "25 4.887060 1 -0.110074 \n", + "26 4.939402 1 -0.109607 \n", + "27 4.828887 1 -0.109882 \n", + "28 4.728013 1 -0.109151 \n", + "29 4.822160 1 -0.109797 \n", + "30 4.992498 1 -0.109659 \n", + "31 4.973721 1 -0.109509 \n", + "32 4.854528 1 -0.110197 \n", + "33 4.992422 1 -0.109602 \n", + "34 4.927928 1 -0.109788 \n", + "35 4.886520 1 -0.109674 \n", + "36 4.715274 1 -0.110056 \n", + "37 4.893584 1 -0.109666 \n", + "38 4.796750 1 -0.109616 \n", + "39 4.738636 1 -0.109851 \n", + "40 4.943917 1 -0.109344 \n", + "41 4.924205 1 -0.109267 \n", + "42 4.770408 1 -0.109996 \n", + "43 4.793082 1 -0.110095 \n", + "44 4.941570 1 -0.109662 \n", + "45 4.866509 1 -0.109377 \n", + "46 4.909662 1 -0.109272 \n", + "47 4.851313 1 -0.109084 \n", + "48 4.917544 1 -0.109068 \n", "\n", " datetime \n", "0 2019-10-05 13:01:00+02:00 \n", @@ -1397,12 +1593,11 @@ } ], "source": [ - "pretty_result.to_df()" + "result.to_df()" ] }, { "cell_type": "markdown", - "id": "suited-circumstances", "metadata": { "pycharm": { "name": "#%% md\n" @@ -1416,7 +1611,6 @@ { "cell_type": "code", "execution_count": 8, - "id": "compliant-viking", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:48.331542Z", @@ -1428,276 +1622,413 @@ }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "{\n", - " \"timestamps\": [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " \"rms\": [\n", - " 0.6471233090087871,\n", - " 0.6466190328578604,\n", - " 0.6468729279266724,\n", - " 0.646642518814507,\n", - " 0.646717205894838,\n", - " 0.6470927806487413,\n", - " 0.6474220671843843,\n", - " 0.6468903895762858,\n", - " 0.6476938342498252,\n", - " 0.6470808565115466,\n", - " 0.6472050737356406,\n", - " 0.6467427853732756,\n", - " 0.6473221821058875,\n", - " 0.6474336931665048,\n", - " 0.6476212217700588,\n", - " 0.6471112840086102,\n", - " 0.4848921153840481,\n", - " 0.48484094333329586,\n", - " 0.4847516723441296,\n", - " 0.4845635972925438,\n", - " 0.4850011098332846,\n", - " 0.48501271794981815,\n", - " 0.48525436544651607,\n", - " 0.4851567285533576,\n", - " 0.6278945984238412,\n", - " 0.6281390462008642,\n", - " 0.6283081249535385,\n", - " 0.6280197922186243,\n", - " 0.6280192424935491,\n", - " 0.6282832071296321,\n", - " 0.6281522276066059,\n", - " 0.627965516388511,\n", - " 0.6277353544965071,\n", - " 0.6278700835347193,\n", - " 0.6286806371261001,\n", - " 0.6281269536708333,\n", - " 0.6281217503270786,\n", - " 0.6277798778644176,\n", - " 0.6278461900382379,\n", - " 0.6285363191287605,\n", - " 0.6283971912344217,\n", - " 0.6283066377247811,\n", - " 0.628142404218728,\n", - " 0.6285404729543963,\n", - " 0.628117681739836,\n", - " 0.6284285531715674,\n", - " 0.628440782618211,\n", - " 0.6286006002142941,\n", - " 0.6279629684369982\n", - " ],\n", - " \"rms_dc\": [\n", - " 0.6621829958188445,\n", - " 0.6616518915968526,\n", - " 0.6619229399260815,\n", - " 0.6617138187667061,\n", - " 0.6617088713545417,\n", - " 0.6621712182715772,\n", - " 0.6624628340232414,\n", - " 0.661977447702136,\n", - " 0.6627544903873464,\n", - " 0.6620207993082551,\n", - " 0.662241081744421,\n", - " 0.661799506359354,\n", - " 0.6623544164712631,\n", - " 0.6624120892580125,\n", - " 0.6626660580828794,\n", - " 0.6620974380917977,\n", - " 0.498214159978348,\n", - " 0.49823204245121355,\n", - " 0.4981883248148897,\n", - " 0.49798748569938905,\n", - " 0.4983621583589863,\n", - " 0.4983645131550537,\n", - " 0.49866331698402155,\n", - " 0.49849425732991726,\n", - " 0.6374436148716767,\n", - " 0.6377106362522227,\n", - " 0.6377963245451337,\n", - " 0.6375594045830764,\n", - " 0.6374337096669657,\n", - " 0.6378045217930529,\n", - " 0.6376521190146351,\n", - " 0.637442235802496,\n", - " 0.6373332350391726,\n", - " 0.6373635157843435,\n", - " 0.6381945643264252,\n", - " 0.6376292497131597,\n", - " 0.6376899092541004,\n", - " 0.6372860080258722,\n", - " 0.6373424476924897,\n", - " 0.6380636089021572,\n", - " 0.637839000655549,\n", - " 0.6377363375921016,\n", - " 0.6376999348751861,\n", - " 0.6381092936591727,\n", - " 0.6376180440233918,\n", - " 0.6378754730392424,\n", - " 0.6378695336896755,\n", - " 0.6379947683984636,\n", - " 0.6373637582315667\n", - " ],\n", - " \"dc\": [\n", - " -0.14041988067626954,\n", - " -0.14023926696777345,\n", - " -0.14034740295410156,\n", - " -0.14042304229736327,\n", - " -0.1400552963256836,\n", - " -0.1405050018310547,\n", - " -0.1403626495361328,\n", - " -0.14052389526367187,\n", - " -0.14048562774658202,\n", - " -0.13984957580566407,\n", - " -0.14031693725585936,\n", - " -0.14036508178710938,\n", - " -0.1403116729736328,\n", - " -0.14006922912597655,\n", - " -0.1404031967163086,\n", - " -0.14007142333984374,\n", - " -0.11444206237792968,\n", - " -0.11473634033203126,\n", - " -0.11492355346679688,\n", - " -0.11484622802734375,\n", - " -0.11462444915771484,\n", - " -0.11458556365966797,\n", - " -0.1148621109008789,\n", - " -0.11454026947021484,\n", - " -0.10992149658203125,\n", - " -0.11007358551025391,\n", - " -0.10960406799316406,\n", - " -0.10987781829833984,\n", - " -0.10914927978515625,\n", - " -0.10979444274902343,\n", - " -0.10965857849121094,\n", - " -0.10950759887695312,\n", - " -0.11019064025878907,\n", - " -0.10959657592773438,\n", - " -0.10978596649169922,\n", - " -0.10967037048339844,\n", - " -0.11005220184326171,\n", - " -0.10966257781982422,\n", - " -0.1096109359741211,\n", - " -0.10985110168457031,\n", - " -0.10934148712158204,\n", - " -0.10926300964355469,\n", - " -0.10999239501953124,\n", - " -0.11009243621826172,\n", - " -0.1096583236694336,\n", - " -0.10937400360107422,\n", - " -0.10926904754638672,\n", - " -0.10908074951171876,\n", - " -0.10906452484130859\n", - " ],\n", - " \"utilization\": [\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1\n", - " ]\n", - "}\n" - ] + "data": { + "text/plain": [ + "{'acc': {'rms': [0.6471306969644414,\n", + " 0.6466266944439302,\n", + " 0.6468806720402722,\n", + " 0.6466493957387159,\n", + " 0.6467249872072451,\n", + " 0.647100732403723,\n", + " 0.6474297483216226,\n", + " 0.6468977699997093,\n", + " 0.6477017500152474,\n", + " 0.6470887870500318,\n", + " 0.647212859812641,\n", + " 0.6467505833073381,\n", + " 0.6473294495532388,\n", + " 0.6474410190623384,\n", + " 0.6476292704319382,\n", + " 0.6471187716244126,\n", + " 0.4848978443906459,\n", + " 0.48484688004435844,\n", + " 0.48475765388364805,\n", + " 0.48456940607276594,\n", + " 0.4850067490271975,\n", + " 0.4850187365383283,\n", + " 0.48525980138293656,\n", + " 0.48516238436722653,\n", + " 0.6279023656493041,\n", + " 0.6281468737921598,\n", + " 0.6283156705845551,\n", + " 0.6280271420358873,\n", + " 0.628026946860152,\n", + " 0.6282908228344413,\n", + " 0.6281600540558904,\n", + " 0.6279733052109427,\n", + " 0.6277421066711281,\n", + " 0.6278769053426508,\n", + " 0.6286883127970024,\n", + " 0.6281343035247084,\n", + " 0.6281292299681172,\n", + " 0.6277872706078097,\n", + " 0.6278531570472111,\n", + " 0.6285441754422537,\n", + " 0.6284047851367978,\n", + " 0.6283140536346776,\n", + " 0.6281499282360293,\n", + " 0.6285481383470801,\n", + " 0.6281251443487925,\n", + " 0.6284361962847654,\n", + " 0.6284482844164598,\n", + " 0.6286081295548268,\n", + " 0.6279703831408971],\n", + " 'peak': [2.6917552104452027,\n", + " 2.715255164704313,\n", + " 2.6851505333043484,\n", + " 2.7266109280295483,\n", + " 2.6970042262531173,\n", + " 2.711735134992144,\n", + " 2.681259855287886,\n", + " 2.667384142184121,\n", + " 2.6787570888613037,\n", + " 2.7229817204780704,\n", + " 2.682739508062897,\n", + " 2.682787559190933,\n", + " 2.700802677842825,\n", + " 2.7210068297972096,\n", + " 2.738182747476402,\n", + " 2.6924439987220383,\n", + " 2.3720132599872614,\n", + " 2.2734294797799635,\n", + " 2.3565631117706656,\n", + " 2.367473192872302,\n", + " 2.2605627121879217,\n", + " 2.3019645284833294,\n", + " 2.260862113899039,\n", + " 2.33652828167628,\n", + " 3.0371081557922737,\n", + " 3.0697912558897955,\n", + " 3.1035036648621293,\n", + " 3.032672310338032,\n", + " 2.9693198781385552,\n", + " 3.029719051997296,\n", + " 3.136087697846743,\n", + " 3.123363962089775,\n", + " 3.0473913260795387,\n", + " 3.1346266673634613,\n", + " 3.0981306499825583,\n", + " 3.069391137549435,\n", + " 2.9618012255115946,\n", + " 3.07212973445674,\n", + " 3.0116547698238354,\n", + " 2.978442280270874,\n", + " 3.1067808753934667,\n", + " 3.0939468951811686,\n", + " 2.996531248730437,\n", + " 3.012682780143234,\n", + " 3.103924514311588,\n", + " 3.0582901611724864,\n", + " 3.0854686711406067,\n", + " 3.049574684496507,\n", + " 3.088072126729926],\n", + " 'peak2peak': [5.36700439453125,\n", + " 5.41485595703125,\n", + " 5.3515625,\n", + " 5.39532470703125,\n", + " 5.31097412109375,\n", + " 5.314697265625,\n", + " 5.325927734375,\n", + " 5.2713623046875,\n", + " 5.379150390625,\n", + " 5.4998779296875,\n", + " 5.299072265625,\n", + " 5.278564453125,\n", + " 5.42462158203125,\n", + " 5.3746337890625,\n", + " 5.36669921875,\n", + " 5.36260986328125,\n", + " 4.60797119140625,\n", + " 4.55438232421875,\n", + " 4.66448974609375,\n", + " 4.70159912109375,\n", + " 4.65277099609375,\n", + " 4.59197998046875,\n", + " 4.6187744140625,\n", + " 4.58441162109375,\n", + " 5.60101318359375,\n", + " 5.72088623046875,\n", + " 5.7542724609375,\n", + " 5.69451904296875,\n", + " 5.6492919921875,\n", + " 5.67547607421875,\n", + " 5.7117919921875,\n", + " 5.7236328125,\n", + " 5.65484619140625,\n", + " 5.79638671875,\n", + " 5.69525146484375,\n", + " 5.6915283203125,\n", + " 5.5751953125,\n", + " 5.696533203125,\n", + " 5.71685791015625,\n", + " 5.55279541015625,\n", + " 5.70556640625,\n", + " 5.68310546875,\n", + " 5.58990478515625,\n", + " 5.6024169921875,\n", + " 5.71759033203125,\n", + " 5.59027099609375,\n", + " 5.76727294921875,\n", + " 5.6591796875,\n", + " 5.77734375],\n", + " 'variance': [0.41877813895368365,\n", + " 0.4181260819674838,\n", + " 0.41845460385927424,\n", + " 0.4181554410092465,\n", + " 0.41825320907821134,\n", + " 0.41873935787743477,\n", + " 0.4191652790117996,\n", + " 0.4184767248305968,\n", + " 0.4195175569728141,\n", + " 0.4187238983258814,\n", + " 0.41888448590685734,\n", + " 0.4182863170083822,\n", + " 0.41903541625889906,\n", + " 0.4191798731644793,\n", + " 0.41942367192020447,\n", + " 0.41876270458868864,\n", + " 0.23512591949469505,\n", + " 0.2350764970887485,\n", + " 0.2349899829987787,\n", + " 0.23480750930171312,\n", + " 0.2352315466019309,\n", + " 0.2352431747932363,\n", + " 0.23547707483820707,\n", + " 0.23538253920489244,\n", + " 0.3942613807879924,\n", + " 0.3945684950548635,\n", + " 0.3947805819021192,\n", + " 0.3944180911337645,\n", + " 0.39441784598248414,\n", + " 0.3947493580579793,\n", + " 0.39458505351149914,\n", + " 0.3943504720575559,\n", + " 0.3940601524879059,\n", + " 0.3942294082626641,\n", + " 0.39524899464754154,\n", + " 0.3945527032644705,\n", + " 0.3945463295403398,\n", + " 0.39411685713720324,\n", + " 0.3941995868141499,\n", + " 0.39506778048238267,\n", + " 0.394892573982825,\n", + " 0.3947785499948405,\n", + " 0.39457233234292877,\n", + " 0.3950727622195802,\n", + " 0.39454119696319145,\n", + " 0.3949320528008642,\n", + " 0.3949472461859916,\n", + " 0.39514818054241796,\n", + " 0.39434680210212514],\n", + " 'crest_factor': [4.159523297336503,\n", + " 4.199107751094795,\n", + " 4.1509209493542905,\n", + " 4.216521264842036,\n", + " 4.17024899238794,\n", + " 4.190591973090684,\n", + " 4.141391189142457,\n", + " 4.12334725189317,\n", + " 4.169192536071003,\n", + " 4.291368147281347,\n", + " 4.145065209055815,\n", + " 4.148102264510928,\n", + " 4.207778444296482,\n", + " 4.202709976173473,\n", + " 4.228009561164774,\n", + " 4.160664342904785,\n", + " 4.891779345746705,\n", + " 4.704480813056079,\n", + " 4.861322132597601,\n", + " 4.885725683880231,\n", + " 4.932319578447107,\n", + " 4.746135262552724,\n", + " 4.85907197225831,\n", + " 4.815971635401411,\n", + " 4.8369114721389,\n", + " 4.8870596734125,\n", + " 4.939401976039809,\n", + " 4.8288873320139665,\n", + " 4.728013492070362,\n", + " 4.822160282923067,\n", + " 4.992497815799841,\n", + " 4.973720914841443,\n", + " 4.854527510094295,\n", + " 4.992422305535833,\n", + " 4.927927856967997,\n", + " 4.886520478703161,\n", + " 4.715273679688384,\n", + " 4.893583986630332,\n", + " 4.796750221003309,\n", + " 4.738636354676574,\n", + " 4.94391664238704,\n", + " 4.924204507735062,\n", + " 4.770407690955719,\n", + " 4.793082019248064,\n", + " 4.941570230450774,\n", + " 4.866508611777468,\n", + " 4.909662016192138,\n", + " 4.851312830866793,\n", + " 4.917544218063957],\n", + " 'utilization': [1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1],\n", + " 'dc_component': [-0.14042464403895252,\n", + " -0.1402429576730629,\n", + " -0.14035072861684825,\n", + " -0.1404292874045484,\n", + " -0.14005842547186725,\n", + " -0.14050710764839433,\n", + " -0.1403663006003861,\n", + " -0.140528673434121,\n", + " -0.14048804589255356,\n", + " -0.13985183766557055,\n", + " -0.14032007446914688,\n", + " -0.1403681255971829,\n", + " -0.140316837999075,\n", + " -0.1400742126097098,\n", + " -0.14040442716390175,\n", + " -0.14007583465953835,\n", + " -0.1144449006122614,\n", + " -0.11473807352996325,\n", + " -0.11492492817691537,\n", + " -0.11484868115355228,\n", + " -0.11462765359417189,\n", + " -0.11458659879582928,\n", + " -0.11486602014903888,\n", + " -0.11454341839503018,\n", + " -0.10992309719852371,\n", + " -0.11007445901479568,\n", + " -0.10960718048712936,\n", + " -0.10988178299428189,\n", + " -0.10915142110730502,\n", + " -0.10979717699729602,\n", + " -0.10965947519049304,\n", + " -0.1095089816210249,\n", + " -0.1101965018607887,\n", + " -0.10960225330096143,\n", + " -0.10978836482630816,\n", + " -0.10967434067443484,\n", + " -0.11005562004284482,\n", + " -0.10966635555049033,\n", + " -0.10961619560508544,\n", + " -0.10985097167712396,\n", + " -0.10934435195596687,\n", + " -0.1092667193999186,\n", + " -0.10999560419918701,\n", + " -0.11009488951823405,\n", + " -0.10966181899908826,\n", + " -0.10937658695373634,\n", + " -0.10927238207810663,\n", + " -0.10908396184025694,\n", + " -0.10906822047992606]},\n", + " 'timestamps': [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060]}" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "print(json.dumps(pretty_result.results(), sort_keys=False, indent=4)) # Pretty but long" + "result.results()" ] }, { "cell_type": "markdown", - "id": "exotic-conspiracy", "metadata": {}, "source": [ "## Black Sheep Analysis example\n", @@ -1708,7 +2039,6 @@ { "cell_type": "code", "execution_count": 9, - "id": "supposed-robinson", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:51.412234Z", @@ -1723,2770 +2053,2630 @@ "name": "stdout", "output_type": "stream", "text": [ - "Waiting for {'request_id': 'e0b73e97cf46102ea692af98ccb011a0', 'request_status': 'queued'}\n", - "{\n", - " \"status\": \"successful\",\n", - " \"request_id\": \"e0b73e97cf46102ea692af98ccb011a0\",\n", - " \"feature\": \"BlackSheep\",\n", - " \"results\": {\n", - " \"atypical_assets\": [\n", - " {\n", - " \"timestamps\": [\n", - " 1570186860,\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " \"labels\": [\n", - " 0,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 7,\n", - " 7,\n", - " 7,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 7,\n", - " 0,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 10,\n", - " 8,\n", - " 10,\n", - " 10,\n", - " 3,\n", - " 3,\n", - " 8,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8\n", - " ],\n", - " \"atypical\": [\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false\n", - " ],\n", - " \"source_id\": \"u0004\"\n", - " },\n", - " {\n", - " \"timestamps\": [\n", - " 1570186860,\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " \"labels\": [\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 3,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 7,\n", - " 9,\n", - " 7,\n", - " 9,\n", - " 0,\n", - " 7,\n", - " 7,\n", - " 7,\n", - " 7,\n", - " 0,\n", - " 0,\n", - " 7,\n", - " 0,\n", - " 9\n", - " ],\n", - " \"atypical\": [\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " true,\n", - " false,\n", - " true,\n", - " false\n", - " ],\n", - " \"source_id\": \"u0002\"\n", - " },\n", - " {\n", - " \"timestamps\": [\n", - " 1570186860,\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " \"labels\": [\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 10,\n", - " 10,\n", - " 8,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 3,\n", - " 10,\n", - " 8,\n", - " 8,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 1,\n", - " 11,\n", - " 11,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 11,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 11,\n", - " 11,\n", - " 11,\n", - " 1\n", - " ],\n", - " \"atypical\": [\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false\n", - " ],\n", - " \"source_id\": \"u0003\"\n", - " },\n", - " {\n", - " \"timestamps\": [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " \"labels\": [\n", - " 9,\n", - " 0,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 0,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 9,\n", - " 7,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 0,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 3,\n", - " 6,\n", - " 10,\n", - " 10,\n", - " 3,\n", - " 8,\n", - " 3,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6\n", - " ],\n", - " \"atypical\": [\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false\n", - " ],\n", - " \"source_id\": \"u0001\"\n", - " },\n", - " {\n", - " \"timestamps\": [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " \"labels\": [\n", - " 9,\n", - " 0,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 0,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 9,\n", - " 7,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 0,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 3,\n", - " 6,\n", - " 10,\n", - " 10,\n", - " 3,\n", - " 8,\n", - " 3,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6\n", - " ],\n", - " \"atypical\": [\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false\n", - " ],\n", - " \"source_id\": \"u0001\"\n", - " },\n", - " {\n", - " \"timestamps\": [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " \"labels\": [\n", - " 9,\n", - " 0,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 0,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 9,\n", - " 7,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 0,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 3,\n", - " 6,\n", - " 10,\n", - " 10,\n", - " 3,\n", - " 8,\n", - " 3,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6\n", - " ],\n", - " \"atypical\": [\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false\n", - " ],\n", - " \"source_id\": \"u0001\"\n", - " },\n", - " {\n", - " \"timestamps\": [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " \"labels\": [\n", - " 9,\n", - " 0,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 0,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 9,\n", - " 7,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 0,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 3,\n", - " 6,\n", - " 10,\n", - " 10,\n", - " 3,\n", - " 8,\n", - " 3,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6\n", - " ],\n", - " \"atypical\": [\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false\n", - " ],\n", - " \"source_id\": \"u0001\"\n", - " },\n", - " {\n", - " \"timestamps\": [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " \"labels\": [\n", - " 9,\n", - " 0,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 0,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 9,\n", - " 7,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 0,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 3,\n", - " 6,\n", - " 10,\n", - " 10,\n", - " 3,\n", - " 8,\n", - " 3,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6\n", - " ],\n", - " \"atypical\": [\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false\n", - " ],\n", - " \"source_id\": \"u0001\"\n", - " },\n", - " {\n", - " \"timestamps\": [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " \"labels\": [\n", - " 9,\n", - " 0,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 0,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 9,\n", - " 7,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 0,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 3,\n", - " 6,\n", - " 10,\n", - " 10,\n", - " 3,\n", - " 8,\n", - " 3,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6\n", - " ],\n", - " \"atypical\": [\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false\n", - " ],\n", - " \"source_id\": \"u0001\"\n", - " },\n", - " {\n", - " \"timestamps\": [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " \"labels\": [\n", - " 9,\n", - " 0,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 0,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 9,\n", - " 7,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 0,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 3,\n", - " 6,\n", - " 10,\n", - " 10,\n", - " 3,\n", - " 8,\n", - " 3,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6\n", - " ],\n", - " \"atypical\": [\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false\n", - " ],\n", - " \"source_id\": \"u0001\"\n", - " },\n", - " {\n", - " \"timestamps\": [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " \"labels\": [\n", - " 9,\n", - " 0,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 0,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 9,\n", - " 7,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 0,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 3,\n", - " 6,\n", - " 10,\n", - " 10,\n", - " 3,\n", - " 8,\n", - " 3,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6\n", - " ],\n", - " \"atypical\": [\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false\n", - " ],\n", - " \"source_id\": \"u0001\"\n", - " },\n", - " {\n", - " \"timestamps\": [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " \"labels\": [\n", - " 9,\n", - " 0,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 0,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 9,\n", - " 7,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 0,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 3,\n", - " 6,\n", - " 10,\n", - " 10,\n", - " 3,\n", - " 8,\n", - " 3,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6\n", - " ],\n", - " \"atypical\": [\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false\n", - " ],\n", - " \"source_id\": \"u0001\"\n", - " },\n", - " {\n", - " \"timestamps\": [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " \"labels\": [\n", - " 9,\n", - " 0,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 0,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 9,\n", - " 9,\n", - " 7,\n", - " 9,\n", - " 7,\n", - " 7,\n", - " 0,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 11,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 10,\n", - " 3,\n", - " 6,\n", - " 10,\n", - " 10,\n", - " 3,\n", - " 8,\n", - " 3,\n", - " 6,\n", - " 3,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 10,\n", - " 8,\n", - " 6\n", - " ],\n", - " \"atypical\": [\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " true,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false,\n", - " false\n", - " ],\n", - " \"source_id\": \"u0001\"\n", - " }\n", - " ]\n", - " },\n", - " \"inputs\": {\n", - " \"experiment\": \"BlackSheep\",\n", - " \"feature\": \"BlackSheep\",\n", - " \"dataType\": \"waveform\",\n", - " \"UUID\": [\n", - " \"u0001\",\n", - " \"u0001\",\n", - " \"u0001\",\n", - " \"u0001\",\n", - " \"u0001\",\n", - " \"u0001\",\n", - " \"u0001\",\n", - " \"u0001\",\n", - " \"u0001\",\n", - " \"u0004\",\n", - " \"u0002\",\n", - " \"u0003\",\n", - " \"u0001\"\n", - " ],\n", - " \"black_sheep\": true,\n", - " \"data-commit\": \"\",\n", - " \"n_trials\": 12,\n", - " \"force_create_model\": true,\n", - " \"load_model\": \"\",\n", - " \"save\": false,\n", - " \"complex\": false,\n", - " \"preprocessor_functions\": [\n", - " \"downselect\"\n", - " ],\n", - " \"preproc_params\": {\n", - " \"MINIMUM_REQUIRED_ROWS\": 20,\n", - " \"DFT_FREQ_RESOLUTION\": 0.2,\n", - " \"CORRELATION_THRESHOLD\": 0.5\n", - " },\n", - " \"timestamps\": [\n", - " [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " [\n", - " 1570186860,\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " [\n", - " 1570186860,\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " [\n", - " 1570186860,\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ],\n", - " [\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060\n", - " ]\n", - " ],\n", - " \"algo_params\": {\n", - " \"look_back\": 1,\n", - " \"number_of_modes\": [\n", - " 2,\n", - " 12\n", - " ],\n", - " \"model_sparsity_factor\": 0.11,\n", - " \"smoothening_factor\": 1,\n", - " \"max_iterations\": 20,\n", - " \"threshold\": 0\n", - " }\n", - " },\n", - " \"error_info\": \"\",\n", - " \"debug_info\": \"\"\n", - "}\n" + "Waiting for {'request_id': '023d673646aaa34407bc9cbcc4f078c8', 'request_status': 'queued'}\n" ] + }, + { + "data": { + "text/plain": [ + "{'status': 'successful',\n", + " 'request_id': '023d673646aaa34407bc9cbcc4f078c8',\n", + " 'feature': 'BlackSheep',\n", + " 'results': {'atypical_assets': [{'timestamps': [1570186860,\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " 'labels': [10,\n", + " 10,\n", + " 10,\n", + " 10,\n", + " 0,\n", + " 10,\n", + " 9,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 4,\n", + " 4,\n", + " 4,\n", + " 4,\n", + " 4,\n", + " 4,\n", + " 4,\n", + " 3,\n", + " 6,\n", + " 3,\n", + " 8,\n", + " 7,\n", + " 8,\n", + " 8,\n", + " 7,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 7,\n", + " 8,\n", + " 8,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 7,\n", + " 8,\n", + " 3,\n", + " 11],\n", + " 'atypical': [False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " True,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False],\n", + " 'source_id': 'u0004'},\n", + " {'timestamps': [1570186860,\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " 'labels': [5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 5,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 6,\n", + " 3,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 10,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 10],\n", + " 'atypical': [True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False],\n", + " 'source_id': 'u0002'},\n", + " {'timestamps': [1570186860,\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " 'labels': [8,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 2,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1],\n", + " 'atypical': [False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " True,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False],\n", + " 'source_id': 'u0003'},\n", + " {'timestamps': [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " 'labels': [9,\n", + " 0,\n", + " 10,\n", + " 0,\n", + " 0,\n", + " 9,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 9,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 11,\n", + " 3,\n", + " 7,\n", + " 3,\n", + " 3,\n", + " 11],\n", + " 'atypical': [False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False],\n", + " 'source_id': 'u0001'},\n", + " {'timestamps': [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " 'labels': [9,\n", + " 0,\n", + " 10,\n", + " 0,\n", + " 0,\n", + " 9,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 9,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 11,\n", + " 3,\n", + " 7,\n", + " 3,\n", + " 3,\n", + " 11],\n", + " 'atypical': [False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False],\n", + " 'source_id': 'u0001'},\n", + " {'timestamps': [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " 'labels': [9,\n", + " 0,\n", + " 10,\n", + " 0,\n", + " 0,\n", + " 9,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 9,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 11,\n", + " 3,\n", + " 7,\n", + " 3,\n", + " 3,\n", + " 11],\n", + " 'atypical': [False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False],\n", + " 'source_id': 'u0001'},\n", + " {'timestamps': [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " 'labels': [9,\n", + " 0,\n", + " 10,\n", + " 0,\n", + " 0,\n", + " 9,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 9,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 11,\n", + " 3,\n", + " 7,\n", + " 3,\n", + " 3,\n", + " 11],\n", + " 'atypical': [False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False],\n", + " 'source_id': 'u0001'},\n", + " {'timestamps': [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " 'labels': [9,\n", + " 0,\n", + " 10,\n", + " 0,\n", + " 0,\n", + " 9,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 9,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 11,\n", + " 3,\n", + " 7,\n", + " 3,\n", + " 3,\n", + " 11],\n", + " 'atypical': [False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False],\n", + " 'source_id': 'u0001'},\n", + " {'timestamps': [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " 'labels': [9,\n", + " 0,\n", + " 10,\n", + " 0,\n", + " 0,\n", + " 9,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 9,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 11,\n", + " 3,\n", + " 7,\n", + " 3,\n", + " 3,\n", + " 11],\n", + " 'atypical': [False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False],\n", + " 'source_id': 'u0001'},\n", + " {'timestamps': [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " 'labels': [9,\n", + " 0,\n", + " 10,\n", + " 0,\n", + " 0,\n", + " 9,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 9,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 11,\n", + " 3,\n", + " 7,\n", + " 3,\n", + " 3,\n", + " 11],\n", + " 'atypical': [False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False],\n", + " 'source_id': 'u0001'},\n", + " {'timestamps': [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " 'labels': [9,\n", + " 0,\n", + " 10,\n", + " 0,\n", + " 0,\n", + " 9,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 9,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 11,\n", + " 3,\n", + " 7,\n", + " 3,\n", + " 3,\n", + " 11],\n", + " 'atypical': [False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False],\n", + " 'source_id': 'u0001'},\n", + " {'timestamps': [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " 'labels': [9,\n", + " 0,\n", + " 10,\n", + " 0,\n", + " 0,\n", + " 9,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 9,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 11,\n", + " 3,\n", + " 7,\n", + " 3,\n", + " 3,\n", + " 11],\n", + " 'atypical': [False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False],\n", + " 'source_id': 'u0001'},\n", + " {'timestamps': [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " 'labels': [9,\n", + " 0,\n", + " 10,\n", + " 0,\n", + " 0,\n", + " 9,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 10,\n", + " 10,\n", + " 9,\n", + " 9,\n", + " 0,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 1,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 7,\n", + " 6,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 11,\n", + " 8,\n", + " 8,\n", + " 8,\n", + " 3,\n", + " 11,\n", + " 3,\n", + " 7,\n", + " 3,\n", + " 3,\n", + " 11],\n", + " 'atypical': [False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " True,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False,\n", + " False],\n", + " 'source_id': 'u0001'}]},\n", + " 'inputs': {'experiment': 'BlackSheep',\n", + " 'feature': 'BlackSheep',\n", + " 'dataType': 'waveform',\n", + " 'UUID': ['u0001',\n", + " 'u0001',\n", + " 'u0001',\n", + " 'u0001',\n", + " 'u0001',\n", + " 'u0001',\n", + " 'u0001',\n", + " 'u0001',\n", + " 'u0001',\n", + " 'u0004',\n", + " 'u0002',\n", + " 'u0003',\n", + " 'u0001'],\n", + " 'black_sheep': True,\n", + " 'data-commit': '',\n", + " 'force_create_model': True,\n", + " 'load_model': '',\n", + " 'save': False,\n", + " 'complex': False,\n", + " 'preprocessor_functions': ['downselect'],\n", + " 'preproc_params': {'MINIMUM_REQUIRED_ROWS': 20,\n", + " 'DFT_FREQ_RESOLUTION': 0.2,\n", + " 'CORRELATION_THRESHOLD': 0.5,\n", + " 'DOWNSELECTION_BAND_WIDTH': 50,\n", + " 'window_func': 'hanning'},\n", + " 'timestamps': [[1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " [1570186860,\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " [1570186860,\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " [1570186860,\n", + " 1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060],\n", + " [1570273260,\n", + " 1570359660,\n", + " 1570446060,\n", + " 1570532460,\n", + " 1570618860,\n", + " 1570705260,\n", + " 1570791660,\n", + " 1570878060,\n", + " 1570964460,\n", + " 1571050860,\n", + " 1571137260,\n", + " 1571223660,\n", + " 1571310060,\n", + " 1571396460,\n", + " 1571482860,\n", + " 1571569260,\n", + " 1571655660,\n", + " 1571742060,\n", + " 1571828460,\n", + " 1571914860,\n", + " 1572001260,\n", + " 1572087660,\n", + " 1572177660,\n", + " 1572264060,\n", + " 1572350460,\n", + " 1572436860,\n", + " 1572523260,\n", + " 1572609660,\n", + " 1572696060,\n", + " 1572782460,\n", + " 1572868860,\n", + " 1572955260,\n", + " 1573041660,\n", + " 1573128060,\n", + " 1573214460,\n", + " 1573300860,\n", + " 1573387260,\n", + " 1573473660,\n", + " 1573560060,\n", + " 1573646460,\n", + " 1573732860,\n", + " 1573819260,\n", + " 1573905660,\n", + " 1573992060,\n", + " 1574078460,\n", + " 1574164860,\n", + " 1574251260,\n", + " 1574337660,\n", + " 1574424060]],\n", + " 'n_trials': 12,\n", + " 'algo_params': {'look_back': 1,\n", + " 'number_of_modes': [2, 12],\n", + " 'model_sparsity_factor': 0.11,\n", + " 'smoothening_factor': 1,\n", + " 'max_iterations': 20,\n", + " 'threshold': 0}},\n", + " 'error_info': '',\n", + " 'debug_info': ''}" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -4498,13 +4688,12 @@ "print(f\"Waiting for {analysis_request}\")\n", "session.wait_for_analyses([analysis_request[\"request_id\"]])\n", "raw_result = session.get_analysis_results(analysis_request[\"request_id\"])\n", - "print(json.dumps(raw_result, sort_keys=False, indent=4)) # Pretty but long\n", + "raw_result\n", " " ] }, { "cell_type": "markdown", - "id": "cooked-aaron", "metadata": { "pycharm": { "name": "#%% md\n" @@ -4517,8 +4706,7 @@ }, { "cell_type": "code", - "execution_count": 10, - "id": "alpha-louis", + "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:53.012148Z", @@ -4531,7 +4719,7 @@ "output_type": "stream", "text": [ "=== BlackSheep ===\n", - "request_id e0b73e97cf46102ea692af98ccb011a0\n", + "request_id 023d673646aaa34407bc9cbcc4f078c8\n", "\n", "+----+----------+------------+\n", "| | source | atypical |\n", @@ -4558,21 +4746,9 @@ "+------------+-----+\n" ] }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/tuix/.local/lib/python3.8/site-packages/mvg/features/analysis.py:111: SettingWithCopyWarning: \n", - "A value is trying to be set on a copy of a slice from a DataFrame.\n", - "Try using .loc[row_indexer,col_indexer] = value instead\n", - "\n", - "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", - " dframe[\"datetime\"] = dt_col\n" - ] - }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -4588,32 +4764,30 @@ "''" ] }, - "execution_count": 10, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Parse\n", - "pretty_result = analysis_classes.parse_results(raw_result, \"Europe/Stockholm\", \"s\")\n", + "blacksheep_result = analysis_classes.parse_results(raw_result, \"Europe/Stockholm\", \"s\")\n", "# Show summary\n", - "pretty_result.summary()\n", - "pretty_result.plot()" + "blacksheep_result.summary()\n", + "blacksheep_result.plot()" ] }, { "cell_type": "markdown", - "id": "filled-aberdeen", "metadata": {}, "source": [ "### Serializing\n", - "Finally, we can save the object including the results to pickle. If no name is given it is saved under the name \\.pkl." + "Finally, we can save the object including the results to pickle. If no name is given it is saved under the name `\".pkl\"`." ] }, { "cell_type": "code", - "execution_count": 11, - "id": "banner-mistress", + "execution_count": 13, "metadata": { "pycharm": { "name": "#%%\n" @@ -4624,24 +4798,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "Saving BlackSheep object to e0b73e97cf46102ea692af98ccb011a0.pkl\n" + "Saving BlackSheep object to 023d673646aaa34407bc9cbcc4f078c8.pkl\n" ] }, { "data": { "text/plain": [ - "'e0b73e97cf46102ea692af98ccb011a0.pkl'" + "'023d673646aaa34407bc9cbcc4f078c8.pkl'" ] }, - "execution_count": 11, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "pretty_result.save_pkl()\n", - "\n", - "\n" + "blacksheep_result.save_pkl()" ] } ], @@ -4650,7 +4822,8 @@ "hash": "3e082f03f9b308c2eff9c6e1d6622ba5a80b88607e08f1bd210e546296deb595" }, "kernelspec": { - "display_name": "Python 3.8.5 64-bit ('env': venv)", + "display_name": "Python 3", + "language": "python", "name": "python3" }, "language_info": { @@ -4663,7 +4836,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.8.2" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/analysis_visual.ipynb b/docs/source/content/examples/analysis_visual.ipynb index 91224b33..31b5ed3c 100644 --- a/docs/source/content/examples/analysis_visual.ipynb +++ b/docs/source/content/examples/analysis_visual.ipynb @@ -2,13 +2,12 @@ "cells": [ { "cell_type": "markdown", - "id": "voluntary-maria", "metadata": {}, "source": [ "# Analysis and Results Visualization\n", "\n", "This script describes the procedure to request an analysis to the Viking Analytics' MultiViz Analytics Engine (MVG) service.\n", - "It shows how to query for results of single-asset or asset-population analysis.\n", + "It shows how to query for results of single-asset or asset-population analyses.\n", "In addition, it presents some examples of how to visualize the results available for the mode identification feature.\n", "\n", "In this example, we will describe how to access and manipulate the analysis results directly.\n", @@ -23,7 +22,6 @@ { "cell_type": "code", "execution_count": 1, - "id": "pharmaceutical-raising", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:28.735704Z", @@ -34,8 +32,6 @@ "source": [ "import os\n", "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "from requests import HTTPError\n", "\n", "# import mvg library with python bindings to mvg-API\n", "from mvg import MVG, plotting" @@ -43,7 +39,6 @@ }, { "cell_type": "markdown", - "id": "impossible-chemical", "metadata": { "ExecuteTime": { "end_time": "2021-03-04T10:59:02.619313Z", @@ -59,7 +54,6 @@ { "cell_type": "code", "execution_count": 2, - "id": "voluntary-asbestos", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:29.472021Z", @@ -74,7 +68,6 @@ }, { "cell_type": "markdown", - "id": "skilled-macedonia", "metadata": {}, "source": [ "Instantiate a session object with MVG library.\n", @@ -83,8 +76,7 @@ }, { "cell_type": "code", - "execution_count": 3, - "id": "early-citizen", + "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:30.395676Z", @@ -99,7 +91,6 @@ }, { "cell_type": "markdown", - "id": "informative-plain", "metadata": { "pycharm": { "name": "#%% md\n" @@ -115,8 +106,7 @@ }, { "cell_type": "code", - "execution_count": 14, - "id": "incorrect-emphasis", + "execution_count": 6, "metadata": { "pycharm": { "name": "#%%\n" @@ -127,35 +117,46 @@ "name": "stdout", "output_type": "stream", "text": [ - "Retrieved sources\n", + "Source info retrieved:\n", + "{'source_id': '68517664205311ec876c00155d413801', 'meta': {'assetId': 'assetJ', 'measPoint': 'mloc01', 'location': 'cancun'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "\n", + "Source info retrieved:\n", + "{'source_id': 'a8c39ff6205311ec85fd00155d413801', 'meta': {'assetId': 'assetJ', 'measPoint': 'mloc01', 'location': 'cancun'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "\n", + "Source info retrieved:\n", + "{'source_id': 'dba0b67a205311ecbc5e00155d413801', 'meta': {'assetId': 'assetJ', 'measPoint': 'mloc01', 'location': 'cancun'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "\n", + "Source info retrieved:\n", "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", - "Source info retrieved for one source: {'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "\n", + "Source info retrieved:\n", "{'source_id': 'u0002', 'meta': {'assetId': 'assetB', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", - "Source info retrieved for one source: {'source_id': 'u0002', 'meta': {'assetId': 'assetB', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "\n", + "Source info retrieved:\n", "{'source_id': 'u0003', 'meta': {'assetId': 'assetC', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", - "Source info retrieved for one source: {'source_id': 'u0003', 'meta': {'assetId': 'assetC', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "\n", + "Source info retrieved:\n", "{'source_id': 'u0004', 'meta': {'assetId': 'assetD', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", - "Source info retrieved for one source: {'source_id': 'u0004', 'meta': {'assetId': 'assetD', 'measPoint': 'mloc01', 'location': 'milano'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "\n", + "Source info retrieved:\n", "{'source_id': 'u0005', 'meta': {'assetId': 'assetE', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", - "Source info retrieved for one source: {'source_id': 'u0005', 'meta': {'assetId': 'assetE', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "\n", + "Source info retrieved:\n", "{'source_id': 'u0006', 'meta': {'assetId': 'assetF', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", - "Source info retrieved for one source: {'source_id': 'u0006', 'meta': {'assetId': 'assetF', 'measPoint': 'mloc01', 'location': 'london'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n" + "\n" ] } ], "source": [ "sources = session.list_sources()\n", "\n", - "print(\"Retrieved sources\")\n", "for src in sources:\n", - " print(src)\n", " s_info = session.get_source(src['source_id'])\n", - " print(f\"Source info retrieved for one source: {s_info}\")" + " print(f\"Source info retrieved:\\n{s_info}\\n\")" ] }, { "cell_type": "markdown", - "id": "asian-poland", "metadata": {}, "source": [ "During our example, we will utilize sources, \"u0001\" and \"u0005\", which were previously uploaded to our database." @@ -163,8 +164,7 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "plain-patio", + "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:32.804304Z", @@ -181,7 +181,7 @@ "['u0001', 'u0005']" ] }, - "execution_count": 15, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -193,7 +193,6 @@ }, { "cell_type": "markdown", - "id": "accompanied-saturday", "metadata": { "pycharm": { "name": "#%% md\n" @@ -206,8 +205,7 @@ }, { "cell_type": "code", - "execution_count": 16, - "id": "spatial-afghanistan", + "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:36.152571Z", @@ -221,10 +219,14 @@ { "data": { "text/plain": [ - "{'RMS': '1.0.0', 'ModeId': '0.1.1', 'BlackSheep': '1.0.0', 'KPIDemo': '1.0.0'}" + "{'RMS': '1.0.0',\n", + " 'ModeId': '0.1.1',\n", + " 'BlackSheep': '1.0.0',\n", + " 'KPIDemo': '1.0.0',\n", + " 'LabelPropagation': '0.1.0'}" ] }, - "execution_count": 16, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -236,7 +238,6 @@ }, { "cell_type": "markdown", - "id": "collaborative-fruit", "metadata": { "pycharm": { "name": "#%% md\n" @@ -250,13 +251,12 @@ "The first element is a `\"request_id\"` that can be used to retrieve the results after.\n", "The second element is `\"request_status\"` that provides the status right after placing the analysis request. \n", "\n", - "Here, we will request the \"RMS\" feature from our source \"u0001\"." + "Here, we will request the \"KPIDemo\" feature from our source \"u0001\"." ] }, { "cell_type": "code", - "execution_count": 7, - "id": "current-blind", + "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:37.584243Z", @@ -270,23 +270,22 @@ { "data": { "text/plain": [ - "{'request_id': '99c500893a6184b4f3dcd4a7a3b1565b', 'request_status': 'queued'}" + "{'request_id': '6ca83f696c2c9c7852db61292b7b9c76', 'request_status': 'queued'}" ] }, - "execution_count": 7, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SOURCE_ID = SOURCE_IDS[0]\n", - "RMS_u0001 = session.request_analysis(SOURCE_ID, 'RMS')\n", - "RMS_u0001 " + "KPI_u0001 = session.request_analysis(SOURCE_ID, 'KPIDemo')\n", + "KPI_u0001 " ] }, { "cell_type": "markdown", - "id": "endless-grounds", "metadata": { "pycharm": { "name": "#%% md\n" @@ -298,8 +297,7 @@ }, { "cell_type": "code", - "execution_count": 8, - "id": "comparative-conversation", + "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:38.637859Z", @@ -313,10 +311,10 @@ { "data": { "text/plain": [ - "{'request_id': 'adb33a07b97ac7c1b2ab59ae3af16e5d', 'request_status': 'queued'}" + "{'request_id': '3e829b8c4e3b402167ef87348e989547', 'request_status': 'queued'}" ] }, - "execution_count": 8, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -328,7 +326,6 @@ }, { "cell_type": "markdown", - "id": "trying-north", "metadata": { "pycharm": { "name": "#%% md\n" @@ -347,8 +344,7 @@ }, { "cell_type": "code", - "execution_count": 9, - "id": "regular-buyer", + "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:43.435603Z", @@ -363,22 +359,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "RMS Analysis: successful\n", - "ModeId Analysis: successful\n" + "KPI Analysis: successful\n", + "ModeId Analysis: queued\n" ] } ], "source": [ - "REQUEST_IDS_u0001 = [RMS_u0001['request_id'], ModeId_u0001['request_id']]\n", + "REQUEST_IDS_u0001 = [KPI_u0001['request_id'], ModeId_u0001['request_id']]\n", "status = session.get_analysis_status(REQUEST_IDS_u0001[0])\n", - "print(f\"RMS Analysis: {status}\")\n", + "print(f\"KPI Analysis: {status}\")\n", "status = session.get_analysis_status(REQUEST_IDS_u0001[1])\n", "print(f\"ModeId Analysis: {status}\")" ] }, { "cell_type": "markdown", - "id": "circular-active", "metadata": { "pycharm": { "name": "#%% md\n" @@ -390,8 +385,7 @@ }, { "cell_type": "code", - "execution_count": 17, - "id": "charged-retreat", + "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:44.400481Z", @@ -405,24 +399,23 @@ { "data": { "text/plain": [ - "{'request_id': 'caebeacdee1874386c48da874896ba1e', 'request_status': 'queued'}" + "{'request_id': 'b73db2c38cdcb47ac016bfae13c8bb40', 'request_status': 'queued'}" ] }, - "execution_count": 17, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "SOURCE_ID = SOURCE_IDS[1]\n", - "RMS_u0005 = session.request_analysis(SOURCE_ID, 'RMS')\n", - "RMS_u0005" + "KPI_u0005 = session.request_analysis(SOURCE_ID, 'KPIDemo')\n", + "KPI_u0005" ] }, { "cell_type": "code", - "execution_count": 18, - "id": "cultural-bunch", + "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:44.815607Z", @@ -436,10 +429,10 @@ { "data": { "text/plain": [ - "{'request_id': '938331c0426f024997a353e85e039a25', 'request_status': 'queued'}" + "{'request_id': 'ddcca4899be38bf493286201b1c358a2', 'request_status': 'queued'}" ] }, - "execution_count": 18, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -452,7 +445,6 @@ }, { "cell_type": "markdown", - "id": "little-camera", "metadata": { "pycharm": { "name": "#%% md\n" @@ -464,8 +456,7 @@ }, { "cell_type": "code", - "execution_count": 19, - "id": "built-daily", + "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:48.331542Z", @@ -480,22 +471,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "RMS Analysis: successful\n", - "ModeId Analysis: successful\n" + "KPI Analysis: successful\n", + "ModeId Analysis: queued\n" ] } ], "source": [ - "REQUEST_IDS_u0005 = [RMS_u0005['request_id'], ModeId_u0005['request_id']]\n", + "REQUEST_IDS_u0005 = [KPI_u0005['request_id'], ModeId_u0005['request_id']]\n", "status = session.get_analysis_status(REQUEST_IDS_u0005[0])\n", - "print(f\"RMS Analysis: {status}\")\n", + "print(f\"KPI Analysis: {status}\")\n", "status = session.get_analysis_status(REQUEST_IDS_u0005[1])\n", "print(f\"ModeId Analysis: {status}\")" ] }, { "cell_type": "markdown", - "id": "numerous-grade", "metadata": {}, "source": [ "## Visualization\n", @@ -507,8 +497,7 @@ }, { "cell_type": "code", - "execution_count": 20, - "id": "separate-failure", + "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:51.412234Z", @@ -523,17 +512,17 @@ "name": "stdout", "output_type": "stream", "text": [ - "The RMS analysis of u0001 has request_id ['bc4ea1194b4929764a08e97c60360cb6', '99c500893a6184b4f3dcd4a7a3b1565b'].\n", - "The RMS analysis of u0005 has request_id ['caebeacdee1874386c48da874896ba1e'].\n", - "The ModeId analysis of u0001 has request_id ['fae66b2396b7dde3039a2f58e287686a', 'adb33a07b97ac7c1b2ab59ae3af16e5d'].\n", - "The ModeId analysis of u0005 has request_id ['938331c0426f024997a353e85e039a25'].\n" + "The KPI analysis of u0001 has request_id ['6ca83f696c2c9c7852db61292b7b9c76'].\n", + "The KPI analysis of u0005 has request_id ['b73db2c38cdcb47ac016bfae13c8bb40'].\n", + "The ModeId analysis of u0001 has request_id ['d64f5db936eaad21bccc87b0cb3c8cc1', '3e829b8c4e3b402167ef87348e989547'].\n", + "The ModeId analysis of u0005 has request_id ['ddcca4899be38bf493286201b1c358a2'].\n" ] } ], "source": [ - "REQUEST_IDS_RMS = [session.list_analyses(SOURCE_IDS[0], \"RMS\"), session.list_analyses(SOURCE_IDS[1], \"RMS\")]\n", - "print(f\"The RMS analysis of {SOURCE_IDS[0]} has request_id {REQUEST_IDS_RMS[0]}.\")\n", - "print(f\"The RMS analysis of {SOURCE_IDS[1]} has request_id {REQUEST_IDS_RMS[1]}.\")\n", + "REQUEST_IDS_RMS = [session.list_analyses(SOURCE_IDS[0], \"KPIDemo\"), session.list_analyses(SOURCE_IDS[1], \"KPIDemo\")]\n", + "print(f\"The KPI analysis of {SOURCE_IDS[0]} has request_id {REQUEST_IDS_RMS[0]}.\")\n", + "print(f\"The KPI analysis of {SOURCE_IDS[1]} has request_id {REQUEST_IDS_RMS[1]}.\")\n", "REQUEST_IDS_MODEID = [session.list_analyses(SOURCE_IDS[0], \"ModeId\"), session.list_analyses(SOURCE_IDS[1], \"ModeId\")]\n", "print(f\"The ModeId analysis of {SOURCE_IDS[0]} has request_id {REQUEST_IDS_MODEID[0]}.\")\n", "print(f\"The ModeId analysis of {SOURCE_IDS[1]} has request_id {REQUEST_IDS_MODEID[1]}.\")" @@ -541,7 +530,6 @@ }, { "cell_type": "markdown", - "id": "secure-amendment", "metadata": { "pycharm": { "name": "#%% md\n" @@ -557,8 +545,7 @@ }, { "cell_type": "code", - "execution_count": 21, - "id": "distributed-poland", + "execution_count": 29, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:53.012148Z", @@ -572,23 +559,24 @@ "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" ] }, - "execution_count": 21, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "rms_output1 = session.get_analysis_results(request_id=REQUEST_IDS_u0001[0])\n", + "session.wait_for_analyses(REQUEST_IDS_u0001 + REQUEST_IDS_u0005)\n", + "\n", + "kpi_output1 = session.get_analysis_results(request_id=REQUEST_IDS_u0001[0])\n", "mode_output1 = session.get_analysis_results(request_id=REQUEST_IDS_u0001[1])\n", - "rms_output5 = session.get_analysis_results(request_id=REQUEST_IDS_u0005[0])\n", + "kpi_output5 = session.get_analysis_results(request_id=REQUEST_IDS_u0005[0])\n", "mode_output5 = session.get_analysis_results(request_id=REQUEST_IDS_u0005[1])\n", "\n", - "rms_output1.keys()" + "kpi_output1.keys()" ] }, { "cell_type": "markdown", - "id": "other-imperial", "metadata": {}, "source": [ "Each dictionary contains seven key elements.\n", @@ -604,20 +592,22 @@ }, { "cell_type": "markdown", - "id": "mobile-settlement", "metadata": { "pycharm": { "name": "#%% md\n" } }, "source": [ - "The `\"results\"` of the \"RMS\" feature are five lists.\n", + "The `\"results\"` of the \"KPIDemo\" feature is a list per channel defined in the source. Each channel is formed by eight lists.\n", "These lists are:\n", - "- timestamps: epoch (in seconds for this example) of the measurements.\n", "- rms: rms value for each measurement.\n", - "- rms_dc: rms value without the dc component for each measurement.\n", - "- dc: dc component value for each measurement.\n", + "- peak: peak value for each measurement.\n", + "- peak2peak: peak-to-peak value for each measurement.\n", + "- variance: variance value for each measurement.\n", + "- crest_factor: crest factor value for each measurement.\n", "- utilization: boolean indicating whether the measurement was used for the rms calculation.\n", + "- dc_component: DC component value for each measurement.\n", + "- timestamps: epoch (in seconds for this example) of the measurements.\n", "\n", "\n", "These lists can be converted into a dataframe for ease of manipulation.\n", @@ -628,8 +618,7 @@ }, { "cell_type": "code", - "execution_count": 28, - "id": "eight-infection", + "execution_count": 30, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:55.411186Z", @@ -662,9 +651,12 @@ " \n", " \n", " rms\n", - " rms_dc\n", - " dc\n", + " peak\n", + " peak2peak\n", + " variance\n", + " crest_factor\n", " utilization\n", + " dc_component\n", " timestamps\n", " Date\n", " \n", @@ -672,46 +664,61 @@ " \n", " \n", " 0\n", - " 0.647123\n", - " 0.662183\n", - " -0.140420\n", + " 0.647131\n", + " 2.691755\n", + " 5.367004\n", + " 0.418778\n", + " 4.159523\n", " 1\n", + " -0.140425\n", " 1570273260\n", " 2019-10-05 11:01:00\n", " \n", " \n", " 1\n", - " 0.646619\n", - " 0.661652\n", - " -0.140239\n", + " 0.646627\n", + " 2.715255\n", + " 5.414856\n", + " 0.418126\n", + " 4.199108\n", " 1\n", + " -0.140243\n", " 1570359660\n", " 2019-10-06 11:01:00\n", " \n", " \n", " 2\n", - " 0.646873\n", - " 0.661923\n", - " -0.140347\n", + " 0.646881\n", + " 2.685151\n", + " 5.351562\n", + " 0.418455\n", + " 4.150921\n", " 1\n", + " -0.140351\n", " 1570446060\n", " 2019-10-07 11:01:00\n", " \n", " \n", " 3\n", - " 0.646643\n", - " 0.661714\n", - " -0.140423\n", + " 0.646649\n", + " 2.726611\n", + " 5.395325\n", + " 0.418155\n", + " 4.216521\n", " 1\n", + " -0.140429\n", " 1570532460\n", " 2019-10-08 11:01:00\n", " \n", " \n", " 4\n", - " 0.646717\n", - " 0.661709\n", - " -0.140055\n", + " 0.646725\n", + " 2.697004\n", + " 5.310974\n", + " 0.418253\n", + " 4.170249\n", " 1\n", + " -0.140058\n", " 1570618860\n", " 2019-10-09 11:01:00\n", " \n", @@ -720,29 +727,35 @@ "" ], "text/plain": [ - " rms rms_dc dc utilization timestamps Date\n", - "0 0.647123 0.662183 -0.140420 1 1570273260 2019-10-05 11:01:00\n", - "1 0.646619 0.661652 -0.140239 1 1570359660 2019-10-06 11:01:00\n", - "2 0.646873 0.661923 -0.140347 1 1570446060 2019-10-07 11:01:00\n", - "3 0.646643 0.661714 -0.140423 1 1570532460 2019-10-08 11:01:00\n", - "4 0.646717 0.661709 -0.140055 1 1570618860 2019-10-09 11:01:00" + " rms peak peak2peak variance crest_factor utilization \\\n", + "0 0.647131 2.691755 5.367004 0.418778 4.159523 1 \n", + "1 0.646627 2.715255 5.414856 0.418126 4.199108 1 \n", + "2 0.646881 2.685151 5.351562 0.418455 4.150921 1 \n", + "3 0.646649 2.726611 5.395325 0.418155 4.216521 1 \n", + "4 0.646725 2.697004 5.310974 0.418253 4.170249 1 \n", + "\n", + " dc_component timestamps Date \n", + "0 -0.140425 1570273260 2019-10-05 11:01:00 \n", + "1 -0.140243 1570359660 2019-10-06 11:01:00 \n", + "2 -0.140351 1570446060 2019-10-07 11:01:00 \n", + "3 -0.140429 1570532460 2019-10-08 11:01:00 \n", + "4 -0.140058 1570618860 2019-10-09 11:01:00 " ] }, - "execution_count": 28, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_rms1 = pd.DataFrame(rms_output1[\"results\"][\"acc\"])\n", - "df_rms1[\"timestamps\"] = rms_output1[\"results\"]['timestamps']\n", - "df_rms1['Date'] = pd.to_datetime(df_rms1['timestamps'], unit=\"s\")\n", - "df_rms1.head()" + "df_kpi1 = pd.DataFrame(kpi_output1[\"results\"][\"acc\"])\n", + "df_kpi1[\"timestamps\"] = kpi_output1[\"results\"]['timestamps']\n", + "df_kpi1['Date'] = pd.to_datetime(df_kpi1['timestamps'], unit=\"s\")\n", + "df_kpi1.head()" ] }, { "cell_type": "markdown", - "id": "assumed-directory", "metadata": { "pycharm": { "name": "#%% md\n" @@ -754,6 +767,7 @@ "- The second list corresponds to the mode label given to the timestamp.\n", "- The third list is a boolean to indicate the uncertainty of label.\n", "- The fourth list corresponds to the mode probability of each mode label.\n", + "\n", "The dictionary, called 'model_info', contains the \"Emerging modes\" results.\n", "\n", "\"Emerging modes\" is an additional output of the analysis results that describes the first appearance of each one of the identified modes.\n", @@ -766,8 +780,7 @@ }, { "cell_type": "code", - "execution_count": 30, - "id": "champion-america", + "execution_count": 31, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:57.673176Z", @@ -810,7 +823,7 @@ " 1570273260\n", " 0\n", " False\n", - " 0.002528\n", + " 0.900327\n", " 2019-10-05 11:01:00\n", " \n", " \n", @@ -818,7 +831,7 @@ " 1570359660\n", " 0\n", " False\n", - " 0.000194\n", + " 0.987532\n", " 2019-10-06 11:01:00\n", " \n", " \n", @@ -826,7 +839,7 @@ " 1570446060\n", " 0\n", " False\n", - " 0.000825\n", + " 0.993737\n", " 2019-10-07 11:01:00\n", " \n", " \n", @@ -834,7 +847,7 @@ " 1570532460\n", " 0\n", " False\n", - " 0.000025\n", + " 0.939948\n", " 2019-10-08 11:01:00\n", " \n", " \n", @@ -842,7 +855,7 @@ " 1570618860\n", " 0\n", " False\n", - " 0.000704\n", + " 0.791743\n", " 2019-10-09 11:01:00\n", " \n", " \n", @@ -851,14 +864,14 @@ ], "text/plain": [ " timestamps labels uncertain mode_probability Date\n", - "0 1570273260 0 False 0.002528 2019-10-05 11:01:00\n", - "1 1570359660 0 False 0.000194 2019-10-06 11:01:00\n", - "2 1570446060 0 False 0.000825 2019-10-07 11:01:00\n", - "3 1570532460 0 False 0.000025 2019-10-08 11:01:00\n", - "4 1570618860 0 False 0.000704 2019-10-09 11:01:00" + "0 1570273260 0 False 0.900327 2019-10-05 11:01:00\n", + "1 1570359660 0 False 0.987532 2019-10-06 11:01:00\n", + "2 1570446060 0 False 0.993737 2019-10-07 11:01:00\n", + "3 1570532460 0 False 0.939948 2019-10-08 11:01:00\n", + "4 1570618860 0 False 0.791743 2019-10-09 11:01:00" ] }, - "execution_count": 30, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -875,8 +888,7 @@ }, { "cell_type": "code", - "execution_count": 31, - "id": "standing-butter", + "execution_count": 32, "metadata": { "pycharm": { "name": "#%%\n" @@ -916,24 +928,24 @@ " 0\n", " 0\n", " 1570273260\n", - " 1571137260\n", - " 0.009954\n", + " 1570446060\n", + " 0.993737\n", " 2019-10-05 11:01:00\n", " \n", " \n", " 1\n", " 1\n", " 1571655660\n", - " 1571655660\n", - " 0.023025\n", + " 1572264060\n", + " 0.997227\n", " 2019-10-21 11:01:00\n", " \n", " \n", " 2\n", " 2\n", " 1572350460\n", - " 1574424060\n", - " 0.010912\n", + " 1573646460\n", + " 0.997645\n", " 2019-10-29 12:01:00\n", " \n", " \n", @@ -942,12 +954,12 @@ ], "text/plain": [ " modes emerging_time max_prob_time max_probability emerging_Date\n", - "0 0 1570273260 1571137260 0.009954 2019-10-05 11:01:00\n", - "1 1 1571655660 1571655660 0.023025 2019-10-21 11:01:00\n", - "2 2 1572350460 1574424060 0.010912 2019-10-29 12:01:00" + "0 0 1570273260 1570446060 0.993737 2019-10-05 11:01:00\n", + "1 1 1571655660 1572264060 0.997227 2019-10-21 11:01:00\n", + "2 2 1572350460 1573646460 0.997645 2019-10-29 12:01:00" ] }, - "execution_count": 31, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -961,7 +973,6 @@ }, { "cell_type": "markdown", - "id": "controlled-moral", "metadata": { "pycharm": { "name": "#%% md\n" @@ -973,8 +984,7 @@ }, { "cell_type": "code", - "execution_count": 32, - "id": "pointed-parliament", + "execution_count": 33, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:58.990587Z", @@ -1007,9 +1017,12 @@ " \n", " \n", " rms\n", - " rms_dc\n", - " dc\n", + " peak\n", + " peak2peak\n", + " variance\n", + " crest_factor\n", " utilization\n", + " dc_component\n", " timestamps\n", " Date\n", " labels\n", @@ -1020,97 +1033,118 @@ " \n", " \n", " 0\n", - " 0.647123\n", - " 0.662183\n", - " -0.140420\n", + " 0.647131\n", + " 2.691755\n", + " 5.367004\n", + " 0.418778\n", + " 4.159523\n", " 1\n", + " -0.140425\n", " 1570273260\n", " 2019-10-05 11:01:00\n", " 0\n", " False\n", - " 0.002528\n", + " 0.900327\n", " \n", " \n", " 1\n", - " 0.646619\n", - " 0.661652\n", - " -0.140239\n", + " 0.646627\n", + " 2.715255\n", + " 5.414856\n", + " 0.418126\n", + " 4.199108\n", " 1\n", + " -0.140243\n", " 1570359660\n", " 2019-10-06 11:01:00\n", " 0\n", " False\n", - " 0.000194\n", + " 0.987532\n", " \n", " \n", " 2\n", - " 0.646873\n", - " 0.661923\n", - " -0.140347\n", + " 0.646881\n", + " 2.685151\n", + " 5.351562\n", + " 0.418455\n", + " 4.150921\n", " 1\n", + " -0.140351\n", " 1570446060\n", " 2019-10-07 11:01:00\n", " 0\n", " False\n", - " 0.000825\n", + " 0.993737\n", " \n", " \n", " 3\n", - " 0.646643\n", - " 0.661714\n", - " -0.140423\n", + " 0.646649\n", + " 2.726611\n", + " 5.395325\n", + " 0.418155\n", + " 4.216521\n", " 1\n", + " -0.140429\n", " 1570532460\n", " 2019-10-08 11:01:00\n", " 0\n", " False\n", - " 0.000025\n", + " 0.939948\n", " \n", " \n", " 4\n", - " 0.646717\n", - " 0.661709\n", - " -0.140055\n", + " 0.646725\n", + " 2.697004\n", + " 5.310974\n", + " 0.418253\n", + " 4.170249\n", " 1\n", + " -0.140058\n", " 1570618860\n", " 2019-10-09 11:01:00\n", " 0\n", " False\n", - " 0.000704\n", + " 0.791743\n", " \n", " \n", "\n", "" ], "text/plain": [ - " rms rms_dc dc utilization timestamps Date \\\n", - "0 0.647123 0.662183 -0.140420 1 1570273260 2019-10-05 11:01:00 \n", - "1 0.646619 0.661652 -0.140239 1 1570359660 2019-10-06 11:01:00 \n", - "2 0.646873 0.661923 -0.140347 1 1570446060 2019-10-07 11:01:00 \n", - "3 0.646643 0.661714 -0.140423 1 1570532460 2019-10-08 11:01:00 \n", - "4 0.646717 0.661709 -0.140055 1 1570618860 2019-10-09 11:01:00 \n", + " rms peak peak2peak variance crest_factor utilization \\\n", + "0 0.647131 2.691755 5.367004 0.418778 4.159523 1 \n", + "1 0.646627 2.715255 5.414856 0.418126 4.199108 1 \n", + "2 0.646881 2.685151 5.351562 0.418455 4.150921 1 \n", + "3 0.646649 2.726611 5.395325 0.418155 4.216521 1 \n", + "4 0.646725 2.697004 5.310974 0.418253 4.170249 1 \n", "\n", - " labels uncertain mode_probability \n", - "0 0 False 0.002528 \n", - "1 0 False 0.000194 \n", - "2 0 False 0.000825 \n", - "3 0 False 0.000025 \n", - "4 0 False 0.000704 " + " dc_component timestamps Date labels uncertain \\\n", + "0 -0.140425 1570273260 2019-10-05 11:01:00 0 False \n", + "1 -0.140243 1570359660 2019-10-06 11:01:00 0 False \n", + "2 -0.140351 1570446060 2019-10-07 11:01:00 0 False \n", + "3 -0.140429 1570532460 2019-10-08 11:01:00 0 False \n", + "4 -0.140058 1570618860 2019-10-09 11:01:00 0 False \n", + "\n", + " mode_probability \n", + "0 0.900327 \n", + "1 0.987532 \n", + "2 0.993737 \n", + "3 0.939948 \n", + "4 0.791743 " ] }, - "execution_count": 32, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_u0001 = pd.merge_asof(df_rms1, df_mode1, on=\"timestamps\", by=\"Date\")\n", + "df_u0001 = pd.merge_asof(df_kpi1, df_mode1, on=\"timestamps\", by=\"Date\")\n", "df_u0001.head()" ] }, { "cell_type": "markdown", - "id": "cathedral-myanmar", "metadata": { "pycharm": { "name": "#%% md\n" @@ -1122,8 +1156,7 @@ }, { "cell_type": "code", - "execution_count": 35, - "id": "compliant-morgan", + "execution_count": 34, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:01.536419Z", @@ -1156,9 +1189,12 @@ " \n", " \n", " rms\n", - " rms_dc\n", - " dc\n", + " peak\n", + " peak2peak\n", + " variance\n", + " crest_factor\n", " utilization\n", + " dc_component\n", " timestamps\n", " Date\n", " labels\n", @@ -1169,93 +1205,115 @@ " \n", " \n", " 0\n", - " 0.646887\n", - " 0.661967\n", - " -0.140491\n", + " 0.646894\n", + " 2.753410\n", + " 5.352417\n", + " 0.418472\n", + " 4.256353\n", " 1\n", + " -0.140495\n", " 1570186860\n", " 2019-10-04 11:01:00\n", " 0\n", " False\n", - " 0.000008\n", + " 0.952959\n", " \n", " \n", " 1\n", - " 0.646963\n", - " 0.661950\n", - " -0.140056\n", + " 0.646971\n", + " 2.784287\n", + " 5.446289\n", + " 0.418571\n", + " 4.303575\n", " 1\n", + " -0.140061\n", " 1570273260\n", " 2019-10-05 11:01:00\n", " 0\n", " False\n", - " 0.000001\n", + " 0.811580\n", " \n", " \n", " 2\n", - " 0.646905\n", - " 0.661932\n", - " -0.140244\n", + " 0.646912\n", + " 2.767691\n", + " 5.388000\n", + " 0.418495\n", + " 4.278314\n", " 1\n", + " -0.140249\n", " 1570359660\n", " 2019-10-06 11:01:00\n", " 0\n", " False\n", - " 0.000002\n", + " 0.921701\n", " \n", " \n", " 3\n", - " 0.647395\n", - " 0.662385\n", - " -0.140124\n", + " 0.647403\n", + " 2.838855\n", + " 5.481140\n", + " 0.419130\n", + " 4.384991\n", " 1\n", + " -0.140125\n", " 1570446060\n", " 2019-10-07 11:01:00\n", " 0\n", " False\n", - " 0.000046\n", + " 0.963872\n", " \n", " \n", " 4\n", - " 0.647057\n", - " 0.662064\n", - " -0.140165\n", + " 0.647064\n", + " 2.748447\n", + " 5.371582\n", + " 0.418692\n", + " 4.247562\n", " 1\n", + " -0.140170\n", " 1570532460\n", " 2019-10-08 11:01:00\n", " 0\n", " False\n", - " 0.000004\n", + " 0.930680\n", " \n", " \n", "\n", "" ], "text/plain": [ - " rms rms_dc dc utilization timestamps Date \\\n", - "0 0.646887 0.661967 -0.140491 1 1570186860 2019-10-04 11:01:00 \n", - "1 0.646963 0.661950 -0.140056 1 1570273260 2019-10-05 11:01:00 \n", - "2 0.646905 0.661932 -0.140244 1 1570359660 2019-10-06 11:01:00 \n", - "3 0.647395 0.662385 -0.140124 1 1570446060 2019-10-07 11:01:00 \n", - "4 0.647057 0.662064 -0.140165 1 1570532460 2019-10-08 11:01:00 \n", + " rms peak peak2peak variance crest_factor utilization \\\n", + "0 0.646894 2.753410 5.352417 0.418472 4.256353 1 \n", + "1 0.646971 2.784287 5.446289 0.418571 4.303575 1 \n", + "2 0.646912 2.767691 5.388000 0.418495 4.278314 1 \n", + "3 0.647403 2.838855 5.481140 0.419130 4.384991 1 \n", + "4 0.647064 2.748447 5.371582 0.418692 4.247562 1 \n", "\n", - " labels uncertain mode_probability \n", - "0 0 False 0.000008 \n", - "1 0 False 0.000001 \n", - "2 0 False 0.000002 \n", - "3 0 False 0.000046 \n", - "4 0 False 0.000004 " + " dc_component timestamps Date labels uncertain \\\n", + "0 -0.140495 1570186860 2019-10-04 11:01:00 0 False \n", + "1 -0.140061 1570273260 2019-10-05 11:01:00 0 False \n", + "2 -0.140249 1570359660 2019-10-06 11:01:00 0 False \n", + "3 -0.140125 1570446060 2019-10-07 11:01:00 0 False \n", + "4 -0.140170 1570532460 2019-10-08 11:01:00 0 False \n", + "\n", + " mode_probability \n", + "0 0.952959 \n", + "1 0.811580 \n", + "2 0.921701 \n", + "3 0.963872 \n", + "4 0.930680 " ] }, - "execution_count": 35, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#RMS\n", - "df_rms5 = pd.DataFrame(rms_output5[\"results\"][\"acc\"])\n", - "df_rms5[\"timestamps\"] = rms_output5[\"results\"]['timestamps']\n", + "df_rms5 = pd.DataFrame(kpi_output5[\"results\"][\"acc\"])\n", + "df_rms5[\"timestamps\"] = kpi_output5[\"results\"]['timestamps']\n", "df_rms5['Date'] = pd.to_datetime(df_rms5['timestamps'], unit=\"s\")\n", "#MODE_ID (full)\n", "mode_all5 = mode_output5[\"results\"].copy()\n", @@ -1269,7 +1327,6 @@ }, { "cell_type": "markdown", - "id": "needed-machine", "metadata": {}, "source": [ "We can call the individual boxplot for one source and display the boxplot of the \"RMS\" for each one of the operating modes.\n", @@ -1278,8 +1335,7 @@ }, { "cell_type": "code", - "execution_count": 36, - "id": "drawn-aerospace", + "execution_count": 37, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:07.727375Z", @@ -1287,9 +1343,17 @@ } }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/oskar/viking_unix/mvg/env/lib/python3.8/site-packages/pandas/core/arrays/categorical.py:2630: FutureWarning: The `inplace` parameter in pandas.Categorical.set_categories is deprecated and will be removed in a future version. Removing unused categories will always return a new Categorical object.\n", + " res = method(*args, **kwargs)\n" + ] + }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAADGCAYAAADIUGp/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAATIUlEQVR4nO3df9SfdV3H8eeLIVIgNppMGpNBjVIYYi76gcfuLH5kR/BIKUo6slydIis7FhiBYp5j9svy0MmFEzgqWP46M3YC0t2QKbZhuLURNmbEVuZgS72RQPDdH9/rnl++3Gzfe+66v/e1+/k453v2vT7X9bmu9/3dBfdrn891fa9UFZIkSV10yKgLkCRJ2l8GGUmS1FkGGUmS1FkGGUmS1FkGGUmS1FkGGUmS1FkGGUmtSVJJvu8A7WthktuSfC3JnxyIfUrqPoOMNAck+Y8kDyWZSLI7yY1JFo+6rklJLkryqX1sthK4Hziqqn57Bmp6apLVSb6a5EtJ3jCw/ieT/FuSrydZl+T4YfomOSzJh5q/k0oy1vbPIh3MDDLS3PGSqjoSOBb4H+BdI65nuo4HttR+fItnkkP343hvBpY2x/0J4HeSnNPsbwHwEeD3gaOBDcAHh+nb+BTw88CX9qMuSX0MMtIcU1X/B3wIeM5kW5KnJ7kuyc4k9ya5LMkhSY5Osj3JS5rtjkyyNclrmuVrkvxVkluaKZ9b+0cm+u3lGM8G/gr40WbE6H+n6HsNsIJeIJhI8lPNqMc7k/xX83pnkqc22481df9uki8B751in29O8r6+5SXNCMlk6FkBvLWqdlfVXcBfAxc1614GbK6qv20+zzcDz03yA/vqW1WPVNU7q+pTwGN7+auSNASDjDTHJPlO4BXA7X3N7wKeDpwI/DjwGuAXqmoX8Frgr5McA/wZcGdVXdfX90LgrcAC4E7g/U9y6Cc7xl3ArwCfqaojq+q7BjtW1UXNft/RbPMPwO8BPwKcBjwXOB24rK/bM+mNlhxPb1pqaEnm0xu5+nxf8+eBk5v3J/evq6oHgXuAk4foK+kA2p/hVknd9LEkjwJHADuBswGSzAMuAE6rqq8BkxfTvhp4T1XdnORvgU/QCwanDuz3xqq6rdnX7wFfSbK4qu6b3GBfx9jPn+dC4Ner6svNMd4CvJvedA/AN4Erqurh/dj3kc2fX+lr+wrwtL71Owf6TK7fV19JB5AjMtLc8dJmtONw4GLg1iTPpDeS8hTg3r5t7wUW9S2vAk4BrqmqBwb2uyewVNUEsAv4noFthjnGdH3PFPvrP+7OZtpnf0w0fx7V13YU8LW+9UfxeJPr99VX0gFkkJHmmKp6rKo+Qu/6jBfQuxPoG/SmYCY9C9gBe0ZTVgHXAb86xe3Ue+5+SnIkvVGb/xrYZq/HAKZ9AW9zjMH99R93X/t8EPjOvuVn7ulYtRv4b3pTVpOeC2xu3m/uX5fkCOB76V03s6++kg4gg4w0x6TnPGA+cFdVPQb8DfC2JE9rLtZ9AzB5Ieyb6IWC1wJ/BFzXhJtJL07ygiSH0btW5vb+aSXohad9HON/gOOafQzreuCyJM9o7iK6vG9/w7gTeGGSZyV5OnDpwPrrmv3Pby7ifR1wTbPuo8ApSc5Pcnhz7I1V9W9D9J28PfvwZvGwJIcnyTRql9QwyEhzx8eTTABfBd4GrKiqyVGCX6c3QrGN3q3BHwBWJ3k+vcDxmiaM/CG9UHNJ334/AFxBb0rp+fRuK57KlMdo1n2S3ojFl5LcP+TP8wf0bnveCGwCPte0DaWqbqF3y/RG4A7g7wY2uYLeBbz3ArcCf1RVf9/03QmcT+9z3A38ML1rgPbZt3E38BC9qbWbmvdT3u0lae+yH1/JIEnAntuit1fVZfvaVpLa4IiMJEnqLIOMJEnqLKeWJElSZzkiI0mSOssgI0mSOuugeUTBggULasmSJaMu46Dy4IMPcsQRR4y6DGlKnp+azTw/D6w77rjj/qp6xlTrWg0yzWPr/xyYB1xdVW+fYpuX03tybAGfr6pXNe2P0ftuCID/rKpz93asJUuWsGHDhgNYvcbHxxkbGxt1GdKUPD81m3l+HlhJ7n2yda0FmeabP68CzgS2A+uTrKmqLX3bLKX3bZpnVNXu5um6kx6qqtPaqk+SJHVfm9fInA5sraptVfUIcANw3sA2rwOuap5NwuRTbCVJkobRZpBZRN9TcemNygw+6fYk4KQk/5Tk9mYqatLhSTY07S9tsU5JktRRo77Y91BgKTAGHAfclmRZVf0vcHxV7UhyIvDJJJuq6p7+zklWAisBFi5cyPj4+EzWftCbmJjwM9Ws5fmp2czzc+a0GWR2AIv7lo9r2vptBz5bVd8AvpjkC/SCzfqq2gFQVduSjAPPo/cQtj2qahWwCmD58uXlhVVPbqYerOsXLGqmeDGlZjPPz5nTZpBZDyxNcgK9AHMB8KqBbT4GvBJ4b5IF9KaatiWZD3y9qh5u2s8A3tFirZ2y7Npl0+5zyjWntFDJE+1PbZtWbNr3RpIkTaG1IFNVjya5mN4j6ucBq6tqc5IrgQ1VtaZZd1aSLcBjwBur6oEkPwa8O8k36V3H8/b+u53mupn6xe+/KCRJs12r18hU1Vpg7UDb5X3vC3hD8+rf5tPA9P9pL0mS5hQfUSBJkjrLICNJkjrLICNJkjrLICNJkjrLICNJkjrLICNJkjrLICNJkjrLICNJkjrLICNJkjrLICNJkjrLICNJkjqr1WctSZI02yy7doYe5Xdt+4eYqYcIz2YGGUnSnDLdX/5JWqrkiXrPUtZ0OLUkSdJeVNW0X+vWrduvfpo+g4wkSeosg4wkSeosg4wkSeosg4wkSeosg4wkSeosg4wkSeosg4wkSeosg4wkSeosg4wkSeosg4wkSeosg4wkSeosg4wkSeosg4wkSeosg4wkSeosg4wkSeqsVoNMknOS3J1ka5JLnmSblyfZkmRzkg/0ta9I8u/Na0WbdUqSpG46tK0dJ5kHXAWcCWwH1idZU1Vb+rZZClwKnFFVu5Mc07QfDVwBLAcKuKPpu7uteiVJUve0OSJzOrC1qrZV1SPADcB5A9u8DrhqMqBU1Zeb9rOBW6pqV7PuFuCcFmuVJEkd1GaQWQTc17e8vWnrdxJwUpJ/SnJ7knOm0VeSJM1xrU0tTeP4S4Ex4DjgtiTLhu2cZCWwEmDhwoWMj4+3UOLcNTEx4WeqWcvzU7OZ5+fMaTPI7AAW9y0f17T12w58tqq+AXwxyRfoBZsd9MJNf9/xwQNU1SpgFcDy5ctrbGxscBN9G8bHx/Ez1Wzl+anZzPNz5rQ5tbQeWJrkhCSHARcAawa2+RhNYEmygN5U0zbgJuCsJPOTzAfOatokSZL2aG1EpqoeTXIxvQAyD1hdVZuTXAlsqKo1fCuwbAEeA95YVQ8AJHkrvTAEcGVV7WqrVkmS1E2tXiNTVWuBtQNtl/e9L+ANzWuw72pgdZv1SZKkbvObfSVJUmcZZCRJUmcZZCRJUmcZZCRJUmcZZCRJUmcZZCRJUmcZZCRJUmcZZCRJUmcZZCRJUmcZZCRJUmcZZCRJUmcZZCRJUmcZZCRJUmcNFWSSHJHkkOb9SUnOTfKUdkuTJEnau2FHZG4DDk+yCLgZeDVwTVtFSZIkDWPYIJOq+jrwMuAvq+rngJPbK0uSJGnfhg4ySX4UuBC4sWmb105JkiRJwxk2yPwmcCnw0aranOREYF1rVUmSJA3h0GE2qqpbgVv7lrcBr2+rKEmSpGEMFWSSLAfeBCzp71NVp7ZTliRJ0r4NFWSA9wNvBDYB32yvHEmSpOENG2R2VtWaViuRJEmapmGDzBVJrgY+ATw82VhVH2mlKkmSpCEMG2R+AfgB4Cl8a2qpAIOMJEkamWGDzA9V1fe3WokkSdI0Dfs9Mp9O8pxWK5EkSZqmfY7IJAnw48CFSb5I7xqZAOXt15IkaZT2GWSqqpIcAyydgXokSZKGNuw1Mh8Gjqmq9W0WI0mSNB3DXiPzw8BnktyTZGOSTUk27qtTknOS3J1ka5JLplh/UZKdSe5sXr/Ut+6xvna/w0aSJD3BsCMyZ093x0nmAVcBZwLbgfVJ1lTVloFNP1hVF0+xi4eq6rTpHleSJM0dwz408t792PfpwNbmAZMkuQE4DxgMMpIkSftl2Kml/bEIuK9veXvTNuj8ZrrqQ0kW97UfnmRDktuTvLTFOiVJUkcNO7XUlo8D11fVw0l+GbgWeFGz7viq2pHkROCTSTZV1T39nZOsBFYCLFy4kPHx8Rks/eA3MTHhZ6pZy/NTs5nn58xpM8jsAPpHWI5r2vaoqgf6Fq8G3tG3bkfz57Yk48DzgHsG+q8CVgEsX768xsbGDlz1Ynx8HD9TzVaen5rNPD9nTptTS+uBpUlOSHIYcAHwuLuPkhzbt3gucFfTPj/JU5v3C4Az8NoaSZI0oLURmap6NMnFwE3APGB1VW1OciWwoarWAK9Pci7wKLALuKjp/mzg3Um+SS9svX2Ku50kSdIc1+o1MlW1Flg70HZ53/tLgUun6PdpYFmbtUmSpO5rc2pJkiSpVQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWQYZSZLUWa0GmSTnJLk7ydYkl0yx/qIkO5Pc2bx+qW/diiT/3rxWtFmnJEnqpkPb2nGSecBVwJnAdmB9kjVVtWVg0w9W1cUDfY8GrgCWAwXc0fTd3Va9kiSpe9ockTkd2FpV26rqEeAG4Lwh+54N3FJVu5rwcgtwTkt1SpKkjmozyCwC7utb3t60DTo/ycYkH0qyeJp9JUnSHNba1NKQPg5cX1UPJ/ll4FrgRcN2TrISWAmwcOFCxsfHWylyrpqYmPAz1azl+anZzPNz5rQZZHYAi/uWj2va9qiqB/oWrwbe0dd3bKDv+OABqmoVsApg+fLlNTY2NriJvg3j4+P4mWq28vzUbOb5OXPanFpaDyxNckKSw4ALgDX9GyQ5tm/xXOCu5v1NwFlJ5ieZD5zVtEmSJO3R2ohMVT2a5GJ6AWQesLqqNie5EthQVWuA1yc5F3gU2AVc1PTdleSt9MIQwJVVtautWiVJUje1eo1MVa0F1g60Xd73/lLg0ifpuxpY3WZ9kiSp2/xmX0mS1FkGGUmS1FkGGUmS1FkGGUmS1FkGGUmS1FkGGUmS1FmjfkSBpIPQsmuXzcyBrm3/EJtWbGr/IJL2m0FG0gE33V/+SVqq5PGqakaOI2nmOLUkaeSqatqvdevWTbuPpIOPQUaSJHWWQUaSJHWWQUaSJHWWQUaSJHVWDpYL4JLsBO4ddR0HmQXA/aMuQnoSnp+azTw/D6zjq+oZU604aIKMDrwkG6pq+ajrkKbi+anZzPNz5ji1JEmSOssgI0mSOssgo71ZNeoCpL3w/NRs5vk5Q7xGRpIkdZYjMpIkqbMMMnqCJOckuTvJ1iSXjLoeqV+S1Um+nORfR12LNCjJ4iTrkmxJsjnJb4y6poOdU0t6nCTzgC8AZwLbgfXAK6tqy0gLkxpJXghMANdV1Smjrkfql+RY4Niq+lySpwF3AC/1/6HtcURGg04HtlbVtqp6BLgBOG/ENUl7VNVtwK5R1yFNpar+u6o+17z/GnAXsGi0VR3cDDIatAi4r295O/5HKEnTlmQJ8DzgsyMu5aBmkJEk6QBLciTwYeA3q+qro67nYGaQ0aAdwOK+5eOaNknSEJI8hV6IeX9VfWTU9RzsDDIatB5YmuSEJIcBFwBrRlyTJHVCkgDvAe6qqj8ddT1zgUFGj1NVjwIXAzfRu0jtb6pq82irkr4lyfXAZ4DvT7I9yS+OuiapzxnAq4EXJbmzeb141EUdzLz9WpIkdZYjMpIkqbMMMpIkqbMMMpIkqbMMMpIkqbMMMpIkqbMMMpJGJkkleV/f8qFJdib5u2nu5z+SLDjwFUqa7QwykkbpQeCUJN/RLJ+J3yQtaRoMMpJGbS3wM837VwLXT65IcnSSjyXZmOT2JKc27d+d5OYkm5NcDaSvz88n+efmi8jenWRe87omyb8m2ZTkt2byB5TUHoOMpFG7AbggyeHAqTz+ScFvAf6lqk4F3gRc17RfAXyqqk4GPgo8CyDJs4FXAGdU1WnAY8CFwGnAoqo6paqWAe9t+4eSNDMOHXUBkua2qtqYZAm90Zi1A6tfAJzfbPfJZiTmKOCFwMua9huT7G62/0ng+cD63iNv+A7gy8DHgROTvAu4Ebi51R9K0owxyEiaDdYAfwyMAd/9bewnwLVVdekTViTPBc4GfgV4OfDab+M4kmYJp5YkzQargbdU1aaB9n+kNzVEkjHg/qr6KnAb8Kqm/aeB+c32nwB+Nskxzbqjkxzf3NF0SFV9GLgM+MF2fxxJM8URGUkjV1Xbgb+YYtWbgdVJNgJfB1Y07W8Brk+yGfg08J/NfrYkuQy4OckhwDeAXwMeAt7btAE8YcRGUjf59GtJktRZTi1JkqTOMshIkqTOMshIkqTOMshIkqTOMshIkqTOMshIkqTOMshIkqTOMshIkqTO+n9rkzF1m9d1PAAAAABJRU5ErkJggg==\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1306,7 +1370,6 @@ }, { "cell_type": "markdown", - "id": "fitting-algeria", "metadata": {}, "source": [ "We create a list with all the sources dataframes for the \"ModeId\" feature and display the \"RMS\" boxplot across the different modes." @@ -1314,8 +1377,7 @@ }, { "cell_type": "code", - "execution_count": 37, - "id": "synthetic-plymouth", + "execution_count": 38, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:11.059225Z", @@ -1324,9 +1386,19 @@ "scrolled": true }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/oskar/viking_unix/mvg/env/lib/python3.8/site-packages/pandas/core/arrays/categorical.py:2630: FutureWarning: The `inplace` parameter in pandas.Categorical.set_categories is deprecated and will be removed in a future version. Removing unused categories will always return a new Categorical object.\n", + " res = method(*args, **kwargs)\n", + "/home/oskar/viking_unix/mvg/env/lib/python3.8/site-packages/pandas/core/arrays/categorical.py:2630: FutureWarning: The `inplace` parameter in pandas.Categorical.set_categories is deprecated and will be removed in a future version. Removing unused categories will always return a new Categorical object.\n", + " res = method(*args, **kwargs)\n" + ] + }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAGICAYAAAAUHnT2AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAlKElEQVR4nO3dfbRddX3v+/fHYKTlwWKRSEMkeBqtEHw43cXj1aEbFUI9t+DQ05ZILVSOKbXR9tLhqRGKiIehx9722HoRTCECozb47IiHnAaOZctVa2+CB8EkamMUSXwCQWQjBQPf+8eaG9deBrLJ3muvufd6v8ZYI2v+5m/O+V2ZsD/5/dbcc6aqkCSpbZ4w6AIkSdobA0qS1EoGlCSplQwoSVIrGVCSpFYyoCRJrWRASTMkSSX51Rna16IkNya5N8lfzcQ+pbnGgNK8k+RbSe5PMp7k7iTXJlky6LomJDkryef20W0VcCdwaFX92SzU9KQk65L8OMn3kpzbs/7lSb6a5CdJbkhy9FS2TbIwyceac1JJRvv9WTR/GFCar36rqg4GjgS+D7xvwPU8XkcD22o/fpM+yQH7cbwLgWXNcU8E/kuSU5r9HQ58AvgL4CnAFuDDU9m28Tng94Dv7UddGmIGlOa1qvo34GPAsRNtSZ6c5OokdyS5Lcn5SZ6Q5ClJdiX5rabfwUl2JPn9ZvnKJJclub6Zevts90ii22Mc49nAZcALmxHej/ay7ZXAmXR+0I8neUUzSnlvku80r/cmeVLTf7Sp+8+TfA/44F72eWGSv+9aXtqMaCbC7EzgnVV1d1VtB/4OOKtZ92pga1V9tPn7vBB4bpJf29e2VfVgVb23qj4HPPQYp0r6OQaU5rUkvwj8LvDFrub3AU8GngG8FPh94A+q6i7g9cDfJTkC+O/AzVV1dde2ZwDvBA4HbgY+9CiHfrRjbAfOAf65qg6uql/q3bCqzmr2+56mz/8CzgP+A/A84LnACcD5XZs9jc7o5mg604NTluQwOiPNL3c1fxk4rnl/XPe6qroP+AZw3BS2lfbb/kwFSHPBp5LsAQ4C7gBWACRZAJwOPK+q7gUmLkJ4HXBFVV2X5KPAZ+j8wH9Oz36vraobm32dB9yTZElV3T7RYV/H2M/Pcwbwpqr6QXOMdwAfoDPtBvAw8PaqemA/9n1w8+c9XW33AId0rb+jZ5uJ9fvaVtpvjqA0X72qGZ0cCKwGPpvkaXRGPk8EbuvqexuwuGt5LbAcuLKqftiz30eCqKrGgbuAX+npM5VjPF6/spf9dR/3jmb6bX+MN38e2tV2KHBv1/pDmWxi/b62lfabAaV5raoeqqpP0Pn+48V0roz7KZ2psAlPB3bDI6OftcDVwBv3ctn4I1cDJjmYzijrOz19HvMYwP48QuA7e9lf93H3tc/7gF/sWn7aIxtW3Q18l87U4YTnAlub91u71yU5CPh3dL6X2te20n4zoDSvpeM04DBge1U9BHwEuDjJIc1FDucCExcQvI3OD/vXA38JXN2E1oRXJnlxkoV0vov6Yvf0HnRCcR/H+D5wVLOPqVoPnJ/kqc1VdRd07W8qbgZekuTpSZ4MrOlZf3Wz/8Oaix/eAFzZrPsksDzJa5Ic2Bz7lqr66hS2nbgM/cBmcWGSA5PkcdSuYVVVvnzNqxfwLeB+OtNP9wJfAc7oWn8YnR/ud9CZsruAzj/Wfh24G/jVpt8C4PPAec3ylXSuwLu+2feNwDFd+62ubfd6jGbdQuBaOtODdz7KZ7gS+K9dywcCf0tntPLd5v2BzbpRYNcU/l4uAX4E7KATIgUc0Kx7ErAO+DGdAD23Z9tXAF9t/l7HgKVd6/a17beaY3W/lu6rXl++UuUDC6WpaC7/3lVV5++rr6Tpc4pPktRKBpQkqZWc4pMktZIjKElSKxlQkqRWmje3Ojr88MNr6dKlgy5j1t13330cdNBBgy5DfeZ5Hg7Dep5vuummO6vqqb3tfQ2o5pb7f0Pn90kur6p376XP79C5O3IBX66q1zbtDwG3Nt2+XVWnPtaxli5dypYtW2aw+rlhbGyM0dHRQZehPvM8D4dhPc9Jbttbe98Cqvnt+0uAk4BdwOYkG6pqW1efZXR+o/1FVXV3cwfpCfdX1fP6VZ8kqd36+R3UCcCOqtpZVQ8C1wCn9fR5A3BJde7nRTV3apYkqZ9TfIvpuvMznVHUC3r6PBMgyefpTANeWFX/2Kw7MMkWYA/w7qr6VO8BkqyiefbNokWLGBsbm8n654Tx8fGh/NzDxvM8HDzPkw36IokD6DwqehQ4CrgxyfFV9SPg6KraneQZwD8lubWqvtG9cVWtpXPnaUZGRmoY526Hdc562Hieh4PnebJ+BtRuuh5NQCeAdvf02QX8S1X9FPhmkq/TCazNVbUboKp2JhkDnk/nKZ5DYaZv9uwvZEuaa/oZUJuBZUmOoRNMpwOv7enzKWAl8MHmEQLPBHY2j5H+SVU90LS/CHhPH2udVcdfdfw++yy/cvmsH/PWM2/dZx9Jmi19C6iq2pNkNbCJzvdL66pqa5KLgC1VtaFZd3KSbXQeKPeWqvphkv8D+ECSh+lcyPHu7qv/5rqZDAKnBCTNV339DqqqNgIbe9ou6HpfdB7kdm5Pny8A+/4nvyRp3vJWR5KkVjKgJEmtZEBJklrJgJIktZIBJUlqJQNKktRKBpQkqZUMKElSKxlQkqRWMqAkSa1kQEmSWsmAkiS10qAfWChJc95UHmczZVfN3K7m+iN0DChJmqaZCgIfnzOZU3ySpFYyoCRJrWRASZJayYCSJLWSASVJaiUDSpLUSgaUJKmVDChJUisZUJKkVjKgJEmtZEBJklrJgJIktZIBJUlqJQNKktRKBpQkqZUMKElSKxlQkqRW6mtAJTklydeS7Ejy1kfp8ztJtiXZmuQfutrPTPKvzevMftYpSWqfvj3yPckC4BLgJGAXsDnJhqra1tVnGbAGeFFV3Z3kiKb9KcDbgRGggJuabe/uV72SpHbp5wjqBGBHVe2sqgeBa4DTevq8AbhkIniq6gdN+wrg+qq6q1l3PXBKH2uVJLVM30ZQwGLg9q7lXcALevo8EyDJ54EFwIVV9Y+Psu3i3gMkWQWsAli0aBFjY2MzVfucMT4+PpSfe9h4noeD53myfgbUVI+/DBgFjgJuTHL8VDeuqrXAWoCRkZEaHR3tQ4ntNjY2xjB+7mHjeR4OnufJ+jnFtxtY0rV8VNPWbRewoap+WlXfBL5OJ7Cmsq0kaR7rZ0BtBpYlOSbJQuB0YENPn0/RGT2R5HA6U347gU3AyUkOS3IYcHLTJkkaEn2b4quqPUlW0wmWBcC6qtqa5CJgS1Vt4GdBtA14CHhLVf0QIMk76YQcwEVVdVe/apUktU9fv4Oqqo3Axp62C7reF3Bu8+rddh2wrp/1SZLayztJSJJayYCSJLWSASVJaiUDSpLUSgaUJKmVDChJUisZUJKkVjKgJEmtZEBJklrJgJIktZIBJUlqJQNKktRKBpQkqZUMKElSK00poJIclOQJzftnJjk1yRP7W5okaZhNdQR1I3BgksXAdcDrgCv7VZQkSVMNqFTVT4BXA++vqt8GjutfWZKkYTflgEryQuAM4NqmbUF/SpIkaeoB9afAGuCTVbU1yTOAG/pWlSRp6B0wlU5V9Vngs13LO4E396soSZKmFFBJRoC3AUu7t6mq5/SnLEnSsJtSQAEfAt4C3Ao83L9yJEnqmGpA3VFVG/paiSRJXaYaUG9PcjnwGeCBicaq+kRfqpIkDb2pBtQfAL8GPJGfTfEVYEBJkvpiqgH1G1X1rL5WIklSl6n+HtQXkhzb10okSeqyzxFUkgAvBc5I8k0630EFKC8zlyT1yz4DqqoqyRHAslmoR5IkYOrfQX0cOKKqNvezGEmSJkw1oF5AZ4rvNuA+nOKTJPXZVANqxf7sPMkpwN/QufP55VX17p71ZwF/Cexumv6fqrq8WfcQnTtXAHy7qk7dnxokSXPTVG8We9vj3XGSBcAlwEnALmBzkg1Vta2n64eravVednF/VT3v8R5XkjQ/TPUy8/1xArCjqnZW1YPANcBpfTyeJGke6WdALQZu71re1bT1ek2SW5J8LMmSrvYDk2xJ8sUkr+pjnZKkFprqd1D98mlgfVU9kOQPgauAlzXrjq6q3c3DEf8pya1V9Y3ujZOsAlYBLFq0iLGxsVksvR3Gx8eH8nMPG8/zcPA8T9bPgNoNdI+IjuJnF0MAUFU/7Fq8HHhP17rdzZ87k4wBzwe+0bP9WmAtwMjISI2Ojs5c9XPE2NgYw/i5h43neTh4nifr5xTfZmBZkmOSLAROByY9siPJkV2LpwLbm/bDkjypeX848CKg9+IKSdI81rcRVFXtSbIa2ETnMvN1VbU1yUXAlub5Um9OciqwB7gLOKvZ/NnAB5I8TCdE372Xq/8kSfNYX7+DqqqNwMaetgu63q8B1uxluy8Ax/ezNklSu/Vzik+SpP1mQEmSWsmAkiS1kgElSWolA0qS1EoGlCSplQwoSVIrGVCSpFYyoCRJrWRASZJayYCSJLWSASVJaiUDSpLUSgaUJKmVDChJUisZUJKkVjKgJEmtZEBJklrJgJIktZIBJUlqJQNKktRKBpQkqZUMKElSKxlQkqRWMqAkSa1kQEmSWsmAkiS1kgElSWolA0qS1EoGlCSplQwoSVIr9TWgkpyS5GtJdiR5617Wn5XkjiQ3N6//3LXuzCT/2rzO7GedkqT2OaBfO06yALgEOAnYBWxOsqGqtvV0/XBVre7Z9inA24ERoICbmm3v7le9kqR26ecI6gRgR1XtrKoHgWuA06a47Qrg+qq6qwml64FT+lSnJKmF+hlQi4Hbu5Z3NW29XpPkliQfS7LkcW4rSZqn+jbFN0WfBtZX1QNJ/hC4CnjZVDdOsgpYBbBo0SLGxsb6UmSbjY+PD+XnHjae5+HgeZ6snwG1G1jStXxU0/aIqvph1+LlwHu6th3t2Xas9wBVtRZYCzAyMlKjo6O9Xea9sbExhvFzDxvP83DwPE/Wzym+zcCyJMckWQicDmzo7pDkyK7FU4HtzftNwMlJDktyGHBy0yZJGhJ9G0FV1Z4kq+kEywJgXVVtTXIRsKWqNgBvTnIqsAe4Czir2fauJO+kE3IAF1XVXf2qVZLUPn39DqqqNgIbe9ou6Hq/BljzKNuuA9b1sz5JUnt5JwlJUisZUJKkVjKgJEmtZEBJklrJgJIktZIBJUlqpUHf6kia1577juu45/6fPmaf2/7b/zljxzv6z//HY65/8i88kS+//eQZO57UTwaU1EcPL/0zDtlHn+VXLp/BI/7cY9cmeRiAW2fweFL/GFBSH9165syEgfdo0zDyOyhJUisZUJKkVjKgJEmtZEBJklopVTXoGmZEkjuA2wZdxwAcDtw56CLUd57n4TCs5/noqnpqb+O8CahhlWRLVY0Mug71l+d5OHieJ3OKT5LUSgaUJKmVDKi5b+2gC9Cs8DwPB89zF7+DkiS1kiMoSVIrGVCSpFYyoOaoJKck+VqSHUke+xbWmrOSrEvygyRfGXQt6p8kS5LckGRbkq1J/mTQNbWB30HNQUkWAF8HTgJ2AZuBlVW1baCFacYleQkwDlxdVTP5XA61SJIjgSOr6ktJDgFuAl417P9PO4Kam04AdlTVzqp6ELgGOG3ANakPqupG4K5B16H+qqrvVtWXmvf3AtuBxYOtavAMqLlpMXB71/Iu/I9ZmheSLAWeD/zLgEsZOANKkloiycHAx4E/raofD7qeQTOg5qbdwJKu5aOaNklzVJIn0gmnD1XVJwZdTxsYUHPTZmBZkmOSLAROBzYMuCZJ+ylJgCuA7VX114Oupy0MqDmoqvYAq4FNdL5M/UhVbR1sVeqHJOuBfwaelWRXkrMHXZP64kXA64CXJbm5eb1y0EUNmpeZS5JayRGUJKmVDChJUisZUJKkVjKgJEmtZEBJklrJgJIktZIBJUlqJQNKktRKBpQkqZUMKElSKxlQkqRWMqAkSa1kQEkzJEkl+dUZ2teiJDcmuTfJX83EPqW5xoDSvJPkW0nuTzKe5O4k1yZZsu8tZ0eSs5J8bh/dVgF3AodW1Z/NQk1PSrIuyY+TfC/JuT3rX57kq0l+kuSGJEdPZdskS5vgHu96/UW/P4/mBwNK89VvVdXBwJHA94H3Dbiex+toYFvtx/NwkhywH8e7EFjWHPdE4L8kOaXZ3+HAJ4C/AJ4CbAE+PJVtu/xSVR3cvN65H/VpCBlQmteq6t+AjwHHTrQleXKSq5PckeS2JOcneUKSpzQPBfytpt/BSXYk+f1m+coklyW5vpl6+2z3SKLbYxzj2cBlwAub0cSP9rLtlcCZdH7Qjyd5RTNKeW+S7zSv9yZ5UtN/tKn7z5N8D/jgXvZ5YZK/71qeGNlMhNmZwDur6u6q2g78HXBWs+7VwNaq+mjz93kh8NwkvzaFbaX9ZkBpXkvyi8DvAl/san4f8GTgGcBLgd8H/qCq7gJeD/xdkiOA/w7cXFVXd217BvBO4HDgZuBDj3LoRzvGduAc4J+b0cQv9W5YVWc1+31P0+d/AecB/wF4HvBc4ATg/K7NnkZndHM0nenBKUtyGJ2R5pe7mr8MHNe8P657XVXdB3wDOG4K2064rQnRDzYjMmmfDCjNV59qRif3ACcBfwmQZAFwOrCmqu6tqm8Bf0XncdtU1XXAR4HPAK8E/rBnv9dW1Y1V9QCd0Hhh7/db+zrGfjoDuKiqflBVdwDv6Nnfw8Dbq+qBqrr/ce774ObPe7ra7gEO6Vp/D5NNrN/XtncCv0EnOH+9aX+0UJcmMaA0X72qGZ0cCKwGPpvkaXRGPk8EbuvqexuwuGt5LbAcuLKqftiz39sn3lTVOHAX8Cs9faZyjMfrV/ayv+7j3tFMv+2P8ebPQ7vaDgXu7Vp/KJNNrH/MbatqvKq2VNWeqvo+nXNxcpJDkPbBgNK8VlUPVdUngIeAF9P5F/1P6fyLfsLTgd3wyOhnLXA18Ma9XDb+yGgpycF0ptW+09PnMY8BPO4LH5pj9O6v+7j72ud9wC92LT/tkQ2r7ga+S2fqcMJzga3N+63d65IcBPw7Ot9L7WvbXhN1+rNH++R/JJrX0nEacBiwvaoeAj4CXJzkkOYih3OBiQsI3kbnh+jr6UwLXt2E1oRXJnlxkoV0vov6YlXd3rWeKRzj+8BRzT6maj1wfpKnNt/hXNC1v6m4GXhJkqcneTKwpmf91c3+D2sufngDcGWz7pPA8iSvSXJgc+xbquqr+9o2yQuSPKu5QOSXgb8Fxqqqd8pQ+nlV5cvXvHoB3wLupzP9dC/wFeCMrvWH0fnhfgedKbsL6Pxj7deBu4FfbfotAD4PnNcsX0nnCrzrm33fCBzTtd/q2navx2jWLQSupTM9eOejfIYrgf/atXwgnR/u321efwsc2KwbBXZN4e/lEuBHwA46IVLAAc26JwHrgB/TCdBze7Z9BfDV5u91DFjate5RtwVWAt+kM4L7Lp0we9qg/xvxNTdeqdqf2QZp+DSXf++qqvP31VfS9DnFJ0lqJQNKktRKTvFJklrJEZQkqZX256aSrXT44YfX0qVLB13GrLvvvvs46KCDBl2G+szzPByG9TzfdNNNd1bVU3vb501ALV26lC1btgy6jFk3NjbG6OjooMtQn3meh8Ownuckt+2t3Sk+SVIrGVCSpFYyoCRJrWRASZJayYCSJLXSvLmKby45/qrjZ3aHV83Mbm4989aZ2ZEkzQADagBmIghWrFjB9ddf37njb8JJJ53Epk2bZqA6SWoHp/jmoBUrVnDddddxzjnn8OlPf5pzzjmH6667jhUrVgy6NEmaMY6g5qDrr7+eP/qjP+L9738/Y2NjvP/97wfgsssuG3BlkjRzHEHNQVXFu971rklt73rXu/DGv5LmEwNqDkrCmjWTn9i9Zs0akgyoIkmaeU7xzUEnnXQSl156KQCvfOUreeMb38ill17KySefPODKJGnmDCSgkpwC/A2wALi8qt69lz6/A1wIFPDlqnrtrBbZYps2bWLFihVcdtllXHrppSTh5JNP9io+SfPKrAdUkgXAJcBJwC5gc5INVbWtq88yYA3woqq6O8kRs11n202E0bDe/VjS/DeI76BOAHZU1c6qehC4Bjitp88bgEuq6m6AqvrBLNcoSRqwQUzxLQZu71reBbygp88zAZJ8ns404IVV9Y+9O0qyClgFsGjRIsbGxvpRb6uNj48P5eceNp7n4eB5nqytF0kcACwDRoGjgBuTHF9VP+ruVFVrgbUAIyMjNYxTXU7xDQfP83DwPE82iCm+3cCSruWjmrZuu4ANVfXTqvom8HU6gSVJGhKDCKjNwLIkxyRZCJwObOjp8yk6oyeSHE5nym/nLNYoSRqwWQ+oqtoDrAY2AduBj1TV1iQXJTm16bYJ+GGSbcANwFuq6oezXaskaXAG8h1UVW0ENva0XdD1voBzm5ckaQh5qyNJUisZUJKkVjKgJEmtZEBJklrJgJIktZIBJUlqJQNKktRKBpQkqZUMKElSKxlQkqRWMqAkSa1kQEmSWmkgAZXklCRfS7IjyVv3sv6sJHckubl5/edB1ClJGpxZv5t5kgXAJcBJdB5MuDnJhqra1tP1w1W1erbrkyS1wyBGUCcAO6pqZ1U9CFwDnDaAOiRJLTaIgFoM3N61vKtp6/WaJLck+ViSJXtZL0maxwbywMIp+DSwvqoeSPKHwFXAy3o7JVkFrAJYtGgRY2Njs1pkG4yPjw/l5x42nufh4HmebBABtRvoHhEd1bQ9oufx7pcD79nbjqpqLbAWYGRkpEZHR2e00LlgbGyMYfzcw8bzPBw8z5MNYopvM7AsyTFJFgKnAxu6OyQ5smvxVGD7LNYnSWqBWR9BVdWeJKuBTcACYF1VbU1yEbClqjYAb05yKrAHuAs4a7brlGbC8VcdP3M7u2pmdnPrmbfOzI6kPhvId1BVtRHY2NN2Qdf7NcCa2a5LmmkzFQZO/WgYeScJSVIrGVCSpFYyoCRJrWRASZJayYCSJLWSASVJaiUDSpLUSgaUJKmVDChJUisZUJKkVjKgJEmtZEBJklrJgJIktdJAAirJKUm+lmRHkrc+Rr/XJKkkI7NZnyRp8GY9oJIsAC4BfhM4FliZ5Ni99DsE+BPgX2a3QklSGwxiBHUCsKOqdlbVg8A1wGl76fdO4L8B/zabxUmS2mEQAbUYuL1reVfT9ogk/x5YUlXXzmZhkqT2GMgTdR9LkicAf80UHvOeZBWwCmDRokWMjY31tbY2Gh8fH8rPPWw8z8PB8zzZIAJqN7Cka/mopm3CIcByYCwJwNOADUlOraot3TuqqrXAWoCRkZEaxkdi+yjw4eB5Hg6e58kGMcW3GViW5JgkC4HTgQ0TK6vqnqo6vKqWVtVS4IvAz4WTJGl+m/WAqqo9wGpgE7Ad+EhVbU1yUZJTZ7seSVI7TWuKL8lBwP1V9XCSZwK/BvzPqvrpY21XVRuBjT1tFzxK39Hp1ChJmpumO4K6ETgwyWLgOuB1wJXTLUqSpOkGVKrqJ8CrgfdX1W8Dx02/LEnSsJt2QCV5IXAGMPE7SwumuU9JkqYdUH8KrAE+2Vzo8AzghmlXJUkaetO6SKKqPgt8tmt5J/Dm6RYlSdJ0r+IbAd4GLO3eV1U9Z3plSZKG3XTvJPEh4C3ArcDD0y9HkqSO6QbUHVW1Yd/dJEl6fKYbUG9PcjnwGeCBicaq+sQ09ytJGnLTDag/oHP3iCfysym+AgwoSdK0TDegfqOqnjUjlUiS1GW6vwf1hb09rl2SpOna7xFUOg9reilwRpJv0vkOKkB5mbkkabr2O6CqqpIcASx7vNsmOQX4Gzq3Rbq8qt7ds/4c4I+Bh4BxYFVVbdvfWiVJc890v4P6OHBEVW2e6gZJFgCXACcBu4DNSTb0BNA/VNVlTf9T6TwC/pRp1ipJmkOmG1AvoDPFdxtwH1Ob4jsB2NHcFokk1wCnAY8EVFX9uKv/QXSuDJQkDZHpBtSK/dhmMXB71/IuOkE3SZI/Bs4FFgIv26/qJElz1nRvFnvbTBWyl31fAlyS5LXA+cCZvX2SrAJWASxatIixsbF+ldNa4+PjQ/m5h43neTh4nieb7ghqf+wGlnQtH9W0PZprgEv3tqKq1gJrAUZGRmp0dHSGSpw7xsbGGMbPPWw8z8PB8zzZdH8Pan9sBpYlOSbJQuB0YNL9/JJ0Xxn4H4F/ncX6JEktMOsjqKrak2Q1sInOZebrmocdXgRsaW4+uzrJK4CfAnezl+k9SdL8NogpPqpqI7Cxp+2Crvd/MutFSZJaZRBTfJIk7ZMBJUlqJQNKktRKBpQkqZUMKElSKxlQkqRWMqAkSa1kQEmSWsmAkiS1kgElSWolA0qS1EoGlCSplQwoSVIrDSSgkpyS5GtJdiR5617Wn5tkW5JbknwmydGDqFOSNDizHlBJFgCXAL8JHAusTHJsT7f/DYxU1XOAjwHvmd0qJUmDNogR1AnAjqraWVUP0nmk+2ndHarqhqr6SbP4RTqPhZckDZFBPLBwMXB71/Iu4AWP0f9s4H/ubUWSVcAqgEWLFjE2NjZDJc4d4+PjQ/m5h43neTh4nicbyBN1pyrJ7wEjwEv3tr6q1gJrAUZGRmp0dHT2imuJsbExhvFzDxvP83DwPE82iIDaDSzpWj6qaZskySuA84CXVtUDs1SbJKklBvEd1GZgWZJjkiwETgc2dHdI8nzgA8CpVfWDAdQoSRqwWQ+oqtoDrAY2AduBj1TV1iQXJTm16faXwMHAR5PcnGTDo+xOkjRPDeQ7qKraCGzsabug6/0rZr0oSVKreCcJSVIrGVCSpFYyoCRJrWRASZJayYCSJLWSASVJaiUDSpLUSgaUJKmVDChJUisZUJKkVjKgJEmtZEBJklrJgJIktdJAAirJKUm+lmRHkrfuZf1LknwpyZ4k/2kQNUqSBmvWAyrJAuAS4DeBY4GVSY7t6fZt4CzgH2a3OklSWwzieVAnADuqaidAkmuA04BtEx2q6lvNuocHUJ8kqQUGEVCLgdu7lncBL9ifHSVZBawCWLRoEWNjY9Mubq4ZHx8fys89bDzPw8HzPNlAnqg7U6pqLbAWYGRkpEZHRwdb0ACMjY0xjJ972Hieh4PnebJBXCSxG1jStXxU0yZJ0iMGEVCbgWVJjkmyEDgd2DCAOiRJLTbrAVVVe4DVwCZgO/CRqtqa5KIkpwIk+Y0ku4DfBj6QZOts1ylJGqyBfAdVVRuBjT1tF3S930xn6k+SNKS8k4QkqZUMKElSKxlQkjRg69evZ/ny5bz85S9n+fLlrF+/ftAltcKc/j0oSZrr1q9fz3nnnccVV1zBQw89xIIFCzj77LMBWLly5YCrGyxHUJI0QBdffDFXXHEFJ554IgcccAAnnngiV1xxBRdffPGgSxs4R1CSNE3HX3X8fm+bt4Q3f/vNcFXTcNXP2qezX4Bbz7x1WtsPmgElSdM0nSBYvnw573vf+zjxxBMfudXRDTfcwJve9Ca+8pWvzGCVc49TfJI0QOeddx5nn302N9xwA3v27OGGG27g7LPP5rzzzht0aQPnCEqSBmjiQog3velNbN++nWc/+9lcfPHFQ3+BBBhQkjRwK1euZOXKld7NvIdTfJKkVjKgJEmtlKoadA0zIskdwG2DrmMADgfuHHQR6jvP83AY1vN8dFU9tbdx3gTUsEqypapGBl2H+svzPBw8z5M5xSdJaiUDSpLUSgbU3Ld20AVoVnieh4PnuYvfQUmSWskRlCSplQyoOSrJKUm+lmRHkrcOuh71R5J1SX6QZLjvGjrPJVmS5IYk25JsTfIng66pDZzim4OSLAC+DpwE7AI2AyurattAC9OMS/ISYBy4uqqWD7oe9UeSI4Ejq+pLSQ4BbgJeNez/TzuCmptOAHZU1c6qehC4BjhtwDWpD6rqRuCuQdeh/qqq71bVl5r39wLbgcWDrWrwDKi5aTFwe9fyLvyPWZoXkiwFng/8y4BLGTgDSpJaIsnBwMeBP62qHw+6nkEzoOam3cCSruWjmjZJc1SSJ9IJpw9V1ScGXU8bGFBz02ZgWZJjkiwETgc2DLgmSfspSYArgO1V9deDrqctDKg5qKr2AKuBTXS+TP1IVW0dbFXqhyTrgX8GnpVkV5KzB12T+uJFwOuAlyW5uXm9ctBFDZqXmUuSWskRlCSplQwoSVIrGVCSpFYyoCRJrWRASZJayYCSZkmSSvL3XcsHJLkjyf94nPv5VpLDZ75CqV0MKGn23AcsT/ILzfJJeAcQ6VEZUNLs2gj8x+b9SmD9xIokT0nyqSS3JPlikuc07b+c5LrmOUGXA+na5veS/H/NL3Z+IMmC5nVlkq8kuTXJ/zWbH1CaKQaUNLuuAU5PciDwHCbfsfodwP+uqucAbwOubtrfDnyuqo4DPgk8HSDJs4HfBV5UVc8DHgLOAJ4HLK6q5VV1PPDBfn8oqR8OGHQB0jCpqluaxymspDOa6vZi4DVNv39qRk6HAi8BXt20X5vk7qb/y4FfBzZ3buXGLwA/AD4NPCPJ+4Brgev6+qGkPjGgpNm3Afi/gVHgl6exnwBXVdWan1uRPBdYAZwD/A7w+mkcRxoIp/ik2bcOeEdV3drT/v/SmaIjyShwZ/NMoBuB1zbtvwkc1vT/DPCfkhzRrHtKkqObK/yeUFUfB84H/n1/P47UH46gpFlWVbuAv93LqguBdUluAX4CnNm0vwNYn2Qr8AXg281+tiU5H7guyROAnwJ/DNwPfLBpA/i5EZY0F3g3c0lSKznFJ0lqJQNKktRKBpQkqZUMKElSKxlQkqRWMqAkSa1kQEmSWsmAkiS10v8PMEmr7n2ancMAAAAASUVORK5CYII=\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1343,7 +1415,6 @@ }, { "cell_type": "markdown", - "id": "precious-shirt", "metadata": {}, "source": [ "We call the display over time of an individual source and identify all its operating modes.\n", @@ -1352,8 +1423,7 @@ }, { "cell_type": "code", - "execution_count": 38, - "id": "urban-alaska", + "execution_count": 39, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:16.615916Z", @@ -1363,7 +1433,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1380,7 +1450,6 @@ }, { "cell_type": "markdown", - "id": "senior-plaza", "metadata": {}, "source": [ "Uncertain areas appear as a gray rectangle above the corresponding periods in the modes plot.\n", @@ -1391,8 +1460,7 @@ }, { "cell_type": "code", - "execution_count": 39, - "id": "liked-trouble", + "execution_count": 40, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:17.917436Z", @@ -1405,7 +1473,7 @@ "outputs": [ { "data": { - "image/png": "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m26h0hXPN2rUqLoFCxa87z13Fy9efHTnzp39MzMzsx9//PH0oqKig5K0aNGio5s3bx6QkZExZt26dUlpaWmXJCknJ+fCggULyiZNmpSZmZmZfdddd2UePny4T9PnfeaZZ44899xzNw4bNuz2kydPxn3hC1840dHXadFXoLRXbm6uKy4u7vD2AACgdzKz7c653Ku935KSkkORSKTDxScMSkpKBkUikRFB6zADCAAAEDIUQAAAgJChAAIAAIQMBRAAACBkKIAAAAAhQwEEAAAIGQogAADovQYpIlNOp30MUqS1XZpZzn333Tey8fO6ujolJSVFPvKRj2S0Z+jp6eljy8vL2/wOIk899dTgYcOG3W5mOe3ZrjkUQAAA0HtVdfLb2rbh+eLj4xtKS0vja2trTZJefvnlxNTU1LpOHUcz7rzzzto33nhj39ChQzv8FnCNKIAAAADtlJ+ff2rNmjU3SNLKlSuTp0yZUt24rLKyMjY/P39UZmZmdiQSydq6dWu8JFVUVMROnDjx1oyMjDHTpk0bHv1mHEuXLk0eO3bs6KysrOwZM2YMr69//xuSTJw48fxtt912xeVPogACAAC024MPPli9atWqpHPnztmePXv65+XlnW1cNm/evKGRSOTcvn373n7iiSfKZs2aNVKS5s+fPzQvL692//79uydPnlxTXl7eV5J27Nhx3dq1a5OLi4v37t279+2YmBi3bNmylK4cPwUQAACgncaPH3/+yJEj/ZYvX56cn59/KnrZtm3bEubMmVMlSYWFhWdqamriqqurY7Zs2ZIwe/bsKkmaPn36qcTExPckacOGDQm7du3qH4lERmdlZWVv2rQp8cCBA/26cvxXdNy8rsuPdgMAAPRMBQUFNQsXLrx548aNpceOHetwp3LO2dSpU6uWLFlS1pnjC3JFBfCttySzzhoK0LO41le57MVr5xvBZrbrlXcqdw3l2GbdmDeAKzN37twTN9xww3t33HHH+fXr1yc0Pj5+/PgzK1asSPnud79bvn79+oSkpKT65OTkhgkTJpwpKipK+c53vlO+evXqxNOnT8dKUkFBwen7778/46tf/Wplenp6fWVlZeypU6diMzMzO+V8v+ZwCBgAAPReKXr/1RJX6flGjRpVt2DBgmNNH1+8ePHRnTt39s/MzMx+/PHH04uKig5K0qJFi45u3rx5QEZGxph1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\n", + "image/png": "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1hZsl8hXJe2VtMnMTkn6jaQbktkwyRya8zlJX1FwNe5IxZVH59wOSX+noMwdUXD+3hfitv2CgnMOjyi4GGVOuE0y285XMPs5L/wczoXPAUCHMOfa8ggPAAAAOjtmAAEAADxDAQQAAPAMBRAAAMAzFEAAAADPXNRtCK644grXp0+fZte7+uqrlZJC1wQA4HKxZcuWY865/h09DrTORRXAPn366POf/3yz6y1YsOBidgMAADoZM3uz+bXQWTEtBwAA4BkKIAAAgGcogAAAAJ7hvSgBAECXsWXLlqvS0tKelXSjmMiKUi9pe11d3WfHjBlzpPFCCiAAAOgy0tLSnr366quH9+/f/0RKSgrvZ5tAfX29HT16dERFRcWzkoobL6c5AwCAruTG/v37n6L8RUtJSXH9+/c/qWCm9L3LL/F4AAAALkYK5S85YU5Ndj0KIAAAgGcogAAAoMu65pprYmY2pq0e11xzTay5fZrZmM997nPXNHz8jW98I+f+++8f2NrPITc3d1R5eXnkdRnz5s27urWv3xQKIAAA6LLKysrSnHNqq0dZWVmzF8h2797d/epXv8pqrrS1paeeempAW74eBRAAAKAFUlNT3ac//emjjz76aE7jZbt37+4+fvz4/Pz8/BGFhYX5f/rTn7o3XqeioiJ1woQJ1+fl5Y2cNm3aYOcunNJYVFQ0bOTIkcPz8vJGPv744/0k6Qtf+ELuO++8k1JQUDCiuLh4aKL1WoICCAAA0EJf+cpXjqxZsya7qqoqNf75OXPmDLrrrruq9uzZ88a0adOq5syZc23jbefNmzewsLCwZu/evTsmT55cXV5e/ueS+Nxzzx3YsWPHzv/8z/9844c//GFORUVF6qJFi8p69OhRv2vXrjd++ctf7k+0XkvGTwEEAABooezs7PqpU6dWLVy48Kr457dt23bFvffee1yS5syZc3zLli29G2+7adOmjFmzZlVJ0vTp009mZma+27Dssccey7nhhhtGjBkzZnhFRUW3HTt29Gxq/8mulwgFEAAAoBW+9rWvVT7//PP9zpw50yZ9au3atRm/+93vMkpKSnbt3r37jeHDh587d+7ce1472fWiUAABAABaIScn593bb7/9xPPPP//nc/De//73n3n22WezJOmHP/xh9tixY2sabzd+/PjTy5Yt6ytJK1euzDx16lSqJFVXV6f26dPn3YyMjPpt27b1LC0tvaJhm7S0NPfOO+9Yc+sliwIIAAC6rNzc3DozU1s9cnNz61qy/wcffLCiurr6z1cDL168+K2f/vSn/fLz80csX76876JFiw423mbhwoWHN27c2DsvL2/kmjVrsgYMGHBekqZMmXKyrq7OrrvuupFf+cpXcmOx2JmGbe66666jw4cPH1FcXDw0ar1kWfyVJy01cOBA9/nPf77Z9RYsWNDqfQAAgM7HzLY458Ze6v2WlpYeiMVixy71fruq0tLSfrFYbEjj55kBBAAA8AwFEAAAwDMUQAAAAM9QAAEAADxDAQQAAPAMBRAAAMAzac2vAgAA0Dn166dYVVXb9Zm+fVV37JhKo9YxszHFxcXHX3rppf2SVFtbq6uuuio2evToM6+++ureZPeVm5s7qqSkZOeAAQOSuvfgrl27ut95553XVVdXp40aNersL37xi/09e/Zs1f38mAEEAABdVluWv2RfLz09vX737t3pNTU1JkkvvPBCZk5OTm1bjqMp999//zVf/OIXK996663tffr0qfvBD37Qr/mtmkYBBAAAaKGioqKTq1atulKSli9fnj1lypTjDcsqKytTi4qKhuXn54+IxWIFmzdvTpekioqK1AkTJlyfl5c3ctq0aYPj34xj0aJF2aNGjRpeUFAwYsaMGYPr6v5yUrC+vl5//OMfM+65554TkjRr1qyql19++crWjp8CCAAA0EJ333338RUrVmSdPXvWdu7c2auwsPDPb8c2d+7cgbFY7OyePXveePjhh8tmzpw5VJLmzZs3sLCwsGbv3r07Jk+eXF1eXt5dkrZu3dpz9erV2SUlJbt27dr1RkpKilu8eHHf+P1VVlamZWRkvNutWzdJ0pAhQ85XVlZ2b+34KYAAAAAtNG7cuHOHDh3qsWTJkuyioqKT8ctee+21jNmzZ1dJUnFx8enq6uq048ePp2zatClj1qxZVZI0ffr0k5mZme9K0rp16zK2b9/eKxaLDS8oKBixYcOGzH379vVoz/Ff1HHz1NTUpNY7deqMMjOvuJhdAQAAdCqTJk2qXrBgwbXr16/ffeTIkVZ3KuecTZ06teqZZ54pS7ROTk5O3enTp1Nra2vVrVs3HThwoHtOTs751u7zogpgTk6OFixY0Ox6ZhezF6BttepyKbTec/wAAHB5mjNnzrErr7zy3Ztuuunc2rVrMxqeHzdu3OmlS5f2/e53v1u+du3ajKysrLrs7Oz68ePHn162bFnff/qnfypfuXJl5qlTp1IladKkSac+/vGP533961+vzM3NrausrEw9efJkan5+/p8LXkpKisaPH3966dKlWffee++JH//4x31vu+226taOnUPAAACgy+rbV0ndQqU9Xm/YsGG18+fPP9L4+ccee+zwtm3beuXn54948MEHc5ctW7ZfkhYuXHh448aNvfPy8kauWbMma8CAAeclacyYMW/Pnz+/bOLEifn5+fkjbrnllvyDBw92a/y6TzzxxKGnn3766kGDBt144sSJtC996UvHWvt5WvwVKC01duxYV1JS0vxOmABAJ8IM4CXGDCBwWbK7tMU5N/ZS77e0tPRALBZrdfHxTWlpab9YLDak8fPMAAIAAHiGAggAAOAZCiAAAIBnKIAAAACeoQACAAB4hgIIAADgGQogAADouvopJtOYNnv0U6y5XZrZmDvuuGNow8e1tbXKysqKffjDH85rydBzc3NHlZeXJ/2mHI8++mj/QYMG3WhmY1qyXVMogAAAoOuqurh3NWvN66Wnp9fv3r07vaamxiTphRdeyMzJyalt03E04eabb6555ZVX9gwcOLDVbwHXgAIIAADQQkVFRSdXrVp1pSQtX748e8qUKccbllVWVqYWFRUNy8/PHxGLxQo2b96cLkkVFRWpEyZMuD4vL2/ktGnTBse/GceiRYuyR40aNbygoGDEjBkzBtfVvfcNSSZMmHDuhhtuuOjyJ1EAAQAAWuzuu+8+vmLFiqyzZ8/azp07exUWFp5pWDZ37tyBsVjs7J49e954+OGHy2bOnDlUkubNmzewsLCwZu/evTsmT55cXV5e3l2Stm7d2nP16tXZJSUlu3bt2vVGSkqKW7x4cd/2HD8FEAAAoIXGjRt37tChQz2WLFmSXVRUdDJ+2WuvvZYxe/bsKkkqLi4+XV1dnXb8+PGUTZs2ZcyaNatKkqZPn34yMzPzXUlat25dxvbt23vFYrHhBQUFIzZs2JC5b9++Hu05/rY9bg4AAOCJSZMmVS9YsODa9evX7z5y5EirO5VzzqZOnVr1zDPPlLXl+KIwAwgAANAKc+bMOfbAAw8cvummm87FPz9u3LjTS5cu7StJa9euzcjKyqrLzs6uHz9+/Olly5b1laSVK1dmnjp1KlWSJk2adGrt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", "text/plain": [ "
" ] @@ -1422,7 +1490,6 @@ }, { "cell_type": "markdown", - "id": "objective-quarter", "metadata": { "pycharm": { "name": "#%% md\n" @@ -1438,8 +1505,7 @@ }, { "cell_type": "code", - "execution_count": 40, - "id": "removed-administration", + "execution_count": 41, "metadata": { "pycharm": { "name": "#%%\n" @@ -1452,7 +1518,7 @@ "['u0001', 'u0002', 'u0003', 'u0004', 'u0005', 'u0006']" ] }, - "execution_count": 40, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -1464,7 +1530,6 @@ }, { "cell_type": "markdown", - "id": "massive-subscriber", "metadata": {}, "source": [ "Similar to single asset feature, the requested population analysis will return a dictionary object with two elements.\n", @@ -1479,8 +1544,7 @@ }, { "cell_type": "code", - "execution_count": 41, - "id": "overhead-complex", + "execution_count": 42, "metadata": { "pycharm": { "name": "#%%\n" @@ -1490,10 +1554,10 @@ { "data": { "text/plain": [ - "{'request_id': 'e86e3478105f844a2487ba276cb9f728', 'request_status': 'queued'}" + "{'request_id': '7117a1dbe2a1a5dc67ffa494552b0a18', 'request_status': 'queued'}" ] }, - "execution_count": 41, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1506,7 +1570,6 @@ }, { "cell_type": "markdown", - "id": "satisfied-weight", "metadata": {}, "source": [ "Similarly, we can query for the status of our requested analysis, where the different status options remain the same." @@ -1514,8 +1577,7 @@ }, { "cell_type": "code", - "execution_count": 42, - "id": "waiting-small", + "execution_count": 43, "metadata": { "pycharm": { "name": "#%%\n" @@ -1526,7 +1588,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "BlackSheep Analysis: successful\n" + "BlackSheep Analysis: queued\n" ] } ], @@ -1538,7 +1600,6 @@ }, { "cell_type": "markdown", - "id": "beautiful-fitting", "metadata": {}, "source": [ "The next step is to retrieve the results by calling the \"request_id\".\n", @@ -1556,8 +1617,7 @@ }, { "cell_type": "code", - "execution_count": 43, - "id": "right-nepal", + "execution_count": 49, "metadata": { "pycharm": { "name": "#%%\n" @@ -1570,19 +1630,19 @@ "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" ] }, - "execution_count": 43, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ + "session.wait_for_analyses([REQUEST_ID_ALL])\n", "blacksheep_table = session.get_analysis_results(request_id=REQUEST_ID_ALL)\n", "blacksheep_table.keys()" ] }, { "cell_type": "markdown", - "id": "deluxe-fever", "metadata": {}, "source": [ "The `\"results\"` of the \"BlackSheep\" indicates the atypical assets.\n", @@ -1596,8 +1656,7 @@ }, { "cell_type": "code", - "execution_count": 44, - "id": "rural-clark", + "execution_count": 50, "metadata": { "pycharm": { "name": "#%%\n" @@ -1621,8 +1680,7 @@ }, { "cell_type": "code", - "execution_count": 45, - "id": "later-invalid", + "execution_count": 51, "metadata": { "pycharm": { "name": "#%%\n" @@ -1647,7 +1705,6 @@ }, { "cell_type": "markdown", - "id": "residential-dancing", "metadata": { "pycharm": { "name": "#%% md\n" @@ -1674,7 +1731,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.8.2" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/brief_overview.ipynb b/docs/source/content/examples/brief_overview.ipynb index c191349a..902c92bc 100644 --- a/docs/source/content/examples/brief_overview.ipynb +++ b/docs/source/content/examples/brief_overview.ipynb @@ -32,8 +32,6 @@ "### Python Pre-requisites\n", "\n", "1. Make sure you have Python 3.6 or higher installed.\n", - "2. Install the MVG package from [\"https://pypi.org/project/va-mvg/\"](https://pypi.org/project/va-mvg/)\n", - "3. Make sure you have the following packages installed (json, matplotlib...)\n", "\n", "In the following section we will walk through the code needed for the API interaction" ] @@ -70,6 +68,8 @@ "import os\n", "import sys\n", "from pathlib import Path\n", + "\n", + "from tqdm.notebook import tqdm\n", "import pandas as pd\n", "from requests import HTTPError" ] @@ -83,7 +83,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:49.156431Z", @@ -93,40 +93,9 @@ "name": "#%%\n" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "/usr/lib/python3/dist-packages/secretstorage/dhcrypto.py:15: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead\n", - " from cryptography.utils import int_from_bytes\n", - "/usr/lib/python3/dist-packages/secretstorage/util.py:19: CryptographyDeprecationWarning: int_from_bytes is deprecated, use int.from_bytes instead\n", - " from cryptography.utils import int_from_bytes\n", - "Requirement already satisfied: va-mvg in /home/tuix/.local/lib/python3.8/site-packages (0.0.0.dev0)\n", - "Requirement already satisfied: pandas in /home/tuix/.local/lib/python3.8/site-packages (from va-mvg) (1.2.4)\n", - "Requirement already satisfied: numpy in /home/tuix/.local/lib/python3.8/site-packages (from va-mvg) (1.20.2)\n", - "Requirement already satisfied: typer in /home/tuix/.local/lib/python3.8/site-packages (from va-mvg) (0.3.2)\n", - "Requirement already satisfied: requests in /home/tuix/.local/lib/python3.8/site-packages (from va-mvg) (2.25.1)\n", - "Requirement already satisfied: semver in /home/tuix/.local/lib/python3.8/site-packages (from va-mvg) (2.13.0)\n", - "Requirement already satisfied: tabulate in /home/tuix/.local/lib/python3.8/site-packages (from va-mvg) (0.8.9)\n", - "Requirement already satisfied: matplotlib in /home/tuix/.local/lib/python3.8/site-packages (from va-mvg) (3.4.2)\n", - "Requirement already satisfied: kiwisolver>=1.0.1 in /home/tuix/.local/lib/python3.8/site-packages (from matplotlib->va-mvg) (1.3.1)\n", - "Requirement already satisfied: pyparsing>=2.2.1 in /home/tuix/.local/lib/python3.8/site-packages (from matplotlib->va-mvg) (2.4.7)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /home/tuix/.local/lib/python3.8/site-packages (from matplotlib->va-mvg) (2.8.1)\n", - "Requirement already satisfied: cycler>=0.10 in /home/tuix/.local/lib/python3.8/site-packages (from matplotlib->va-mvg) (0.10.0)\n", - "Requirement already satisfied: pillow>=6.2.0 in /home/tuix/.local/lib/python3.8/site-packages (from matplotlib->va-mvg) (8.1.0)\n", - "Requirement already satisfied: six in /usr/lib/python3/dist-packages (from cycler>=0.10->matplotlib->va-mvg) (1.14.0)\n", - "Requirement already satisfied: pytz>=2017.3 in /home/tuix/.local/lib/python3.8/site-packages (from pandas->va-mvg) (2020.5)\n", - "Requirement already satisfied: urllib3<1.27,>=1.21.1 in /usr/lib/python3/dist-packages (from requests->va-mvg) (1.25.8)\n", - "Requirement already satisfied: chardet<5,>=3.0.2 in /usr/lib/python3/dist-packages (from requests->va-mvg) (3.0.4)\n", - "Requirement already satisfied: idna<3,>=2.5 in /usr/lib/python3/dist-packages (from requests->va-mvg) (2.8)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /usr/lib/python3/dist-packages (from requests->va-mvg) (2019.11.28)\n", - "Requirement already satisfied: click<7.2.0,>=7.1.1 in /home/tuix/.local/lib/python3.8/site-packages (from typer->va-mvg) (7.1.2)\n" - ] - } - ], + "outputs": [], "source": [ - "!{sys.executable} -m pip install --user va-mvg" + "!{sys.executable} -m pip install va-mvg" ] }, { @@ -140,7 +109,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:49.162159Z", @@ -168,7 +137,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:49.166821Z", @@ -187,7 +156,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:49.308364Z", @@ -212,7 +181,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:49.437898Z", @@ -226,17 +195,18 @@ { "data": { "text/plain": [ - "'{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.2.0\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}'" + "{'api': {'name': 'MultiViz Engine API',\n", + " 'version': 'v0.2.7',\n", + " 'swagger': 'http://api.beta.multiviz.com/docs'}}" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "hello_message = json.dumps(session.say_hello())\n", - "hello_message\n" + "session.say_hello()" ] }, { @@ -250,7 +220,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:49.715201Z", @@ -265,16 +235,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "Retrieved sources\n" + "Deleting u0001\n" ] } ], "source": [ "sources = session.list_sources()\n", "\n", - "print(\"Retrieved sources\")\n", "for src in sources:\n", - " print(src)\n", " print(f\"Deleting {src['source_id']}\")\n", " session.delete_source(src['source_id'])" ] @@ -296,7 +264,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:49.825082Z", @@ -306,29 +274,14 @@ "name": "#%%\n" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Cloning into 'va-data-charlie'...\n", - "remote: Enumerating objects: 494, done.\u001b[K\n", - "remote: Counting objects: 100% (494/494), done.\u001b[K\n", - "remote: Compressing objects: 100% (403/403), done.\u001b[K\n", - "remote: Total 494 (delta 96), reused 434 (delta 87), pack-reused 0\u001b[K\n", - "Receiving objects: 100% (494/494), 70.52 MiB | 1.91 MiB/s, done.\n", - "Resolving deltas: 100% (96/96), done.\n", - "Updating files: 100% (955/955), done.\n" - ] - } - ], + "outputs": [], "source": [ "!git clone --depth=1 https://github.com/vikinganalytics/va-data-charlie.git" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:49.830068Z", @@ -345,7 +298,7 @@ "'u0001'" ] }, - "execution_count": 9, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -371,18 +324,17 @@ " - the source ID\n", " - metadata with required fields\n", " - optional arbitrary customer specific 'free form' data belonging to the source.\n", + " - channel definition as a list\n", " \n", "The vibration service will only rely on the required fields.\n", "The free form data is a possibility for the client side to keep together source information, measurements and metadata which may be interesting for the analytics built-in features in the service.\n", "Examples of the free form data include location of sensor or the name of the asset which is mounted on.\n", - "As we will see later, timestamps are internally represented as milliseconds since EPOCH (Jan 1st 1970), for that reason it is good practice to include the timezone where the measurement originated in the metadata.\n", - "\n", - "There are two ways to create a source:" + "As we will see later, timestamps are internally represented as milliseconds since EPOCH (Jan 1st 1970), for that reason it is good practice to include the timezone where the measurement originated in the metadata. In addition, we provide the channel definition that contains the waveform data. Each channel represents a waveform. Thus, if the sensor only have one channel, we need to provide only the name given to the raw waveform for that channel. If the sensor has two or more channels, like ina tri-axial sensor, one needs to provide the name of the channels corresponding to the different waveforms that will be available in the measurements." ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:50.251327Z", @@ -392,50 +344,26 @@ "name": "#%%\n" } }, - "outputs": [], - "source": [ - "# OPTION 1: Writing the meta-data directly when creating the source\n", - "SOURCE_IDP = \"u001\"\n", - "meta_information = {'assetId': 'assetJ', 'measPoint': 'mloc01', 'location': 'cancun', 'timezone': 'Europe/Stockholm'}\n", - "session.create_source(SOURCE_IDP, meta=meta_information, channels=[\"acc\"])\n", - "session.get_source(SOURCE_IDP)\n", - "# We delete this first example source to show the second option\n", - "session.delete_source(SOURCE_IDP)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "ExecuteTime": { - "end_time": "2021-03-18T10:20:50.537310Z", - "start_time": "2021-03-18T10:20:50.252679Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, "outputs": [ { "data": { "text/plain": [ "{'source_id': 'u0001',\n", - " 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'},\n", + " 'meta': {'assetId': 'assetJ',\n", + " 'measPoint': 'mloc01',\n", + " 'location': 'cancun',\n", + " 'timezone': 'Europe/Stockholm'},\n", " 'properties': {'data_class': 'waveform', 'channels': ['acc']}}" ] }, - "execution_count": 11, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "# OPTION 2: Uploading the metadata from a json file\n", - "src_path = REF_DB_PATH / SOURCE_ID\n", - "meta_filename = src_path / \"meta.json\"\n", - "with open(meta_filename, \"r\") as json_file:\n", - " meta = json.load(json_file)\n", - "session.create_source(SOURCE_ID, meta=meta, channels=[\"acc\"])\n", + "meta_information = {'assetId': 'assetJ', 'measPoint': 'mloc01', 'location': 'cancun', 'timezone': 'Europe/Stockholm'}\n", + "session.create_source(SOURCE_ID, meta=meta_information, channels=[\"acc\"])\n", "session.get_source(SOURCE_ID)" ] }, @@ -446,12 +374,12 @@ "List sources\n", "\n", "We can now check if our source actually has been created, by listing all the sources in the database.\n", - "This function provides all the existing information about the source." + "This function provides all the existing information about the source. Notice how in the source properties, one can see that the type of data to be uploaded for the source will be a waveform given that when one passes a channel definition to the source. The server interprets this as expecting for each measurement to be waveform data with the names of channels listed by the channel variable." ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:50.666517Z", @@ -466,25 +394,27 @@ "data": { "text/plain": [ "[{'source_id': 'u0001',\n", - " 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'},\n", + " 'meta': {'assetId': 'assetJ',\n", + " 'measPoint': 'mloc01',\n", + " 'location': 'cancun',\n", + " 'timezone': 'Europe/Stockholm'},\n", " 'properties': {'data_class': 'waveform', 'channels': ['acc']}}]" ] }, - "execution_count": 12, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "sources = session.list_sources()\n", - "sources" + "session.list_sources()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### Uploading a Measurement\n", + "### Uploading Measurements\n", "\n", "Now that we have created a source, we can upload vibration measurements related to the source. \n", "The information needed to create a measurement consists of\n", @@ -494,12 +424,12 @@ "- data: list of floating point values representing the raw data of the vibration measurement.\n", "- meta: additional meta information for later use by the client but not to be processed by the analytics engine.\n", "\n", - "In this example, all the measurement data is stored as csv and json files, where the timestamp is the name of each of these files." + "In this example, all the measurement data is stored as csv and json files, where the timestamp is the name of each of these files. On the csv file, the header of the colum of data corresponds to the channel name." ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:50.670011Z", @@ -512,12 +442,13 @@ "outputs": [], "source": [ "# meas is a list of timestamps representing the measurements in our repo\n", + "src_path = REF_DB_PATH / SOURCE_ID\n", "meas = [f.stem for f in Path(src_path).glob(\"*.csv\")]" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:21:50.347959Z", @@ -532,162 +463,156 @@ "name": "stdout", "output_type": "stream", "text": [ - "Read 40000 samples\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570186860.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573646460.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570273260.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570273260.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570359660.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571482860.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570446060.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574251260.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570532460.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571050860.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570618860.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574164860.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570705260.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573387260.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570791660.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570446060.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570878060.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572350460.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570964460.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573041660.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571050860.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573905660.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571137260.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570964460.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571223660.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573819260.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571310060.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573128060.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571396460.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573300860.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571482860.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573732860.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571569260.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571310060.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571655660.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570878060.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571742060.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573560060.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571828460.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572696060.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571914860.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572782460.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572001260.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574078460.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572087660.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571655660.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572177660.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572001260.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572264060.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571569260.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572350460.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571223660.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572436860.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570618860.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572523260.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570186860.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572609660.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571914860.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572696060.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570532460.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572782460.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574337660.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572868860.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570791660.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572955260.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572609660.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573041660.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572177660.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573128060.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572264060.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573214460.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572868860.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573300860.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572955260.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573387260.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571828460.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573473660.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572523260.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573560060.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570705260.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573646460.csv\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571742060.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573732860.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571137260.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573819260.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570359660.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573905660.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574424060.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573992060.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572436860.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574078460.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573473660.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574164860.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571396460.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574251260.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573992060.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574337660.csv\n", - "Read 40000 samples\n", + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572087660.csv\n", + "Read 39999 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574424060.csv\n" + "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573214460.csv\n" ] } ], @@ -699,7 +624,7 @@ " TS_MEAS = str(m) + \".csv\" # filename\n", " TS_MEAS = REF_DB_PATH / SOURCE_ID / TS_MEAS # path to file\n", " ts_df = pd.read_csv(TS_MEAS) # read csv into df\n", - " accs = ts_df.to_dict(\"list\") # convert to list\n", + " accs = ts_df.iloc[:, 0].tolist() # convert to list\n", " print(f\"Read {len(ts_df)} samples\")\n", "\n", " # meta information file per measurement\n", @@ -718,11 +643,11 @@ " try:\n", " session.create_measurement(sid=SOURCE_ID, \n", " duration=duration, \n", - " timestamp=m, \n", - " data=accs, \n", + " timestamp=int(m), \n", + " data={\"acc\": accs}, \n", " meta=meta_info)\n", " except HTTPError as exc:\n", - " print(exc)" + " print(exc.response.text)" ] }, { @@ -734,7 +659,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.187529Z", @@ -754,8 +679,8 @@ } ], "source": [ - "m = session.list_measurements(SOURCE_ID)\n", - "print(f\"Read {len(m)} stored measurements\")\n" + "measurements = session.list_measurements(SOURCE_ID)\n", + "print(f\"Read {len(measurements)} stored measurements\")" ] }, { @@ -769,7 +694,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.319506Z", @@ -783,10 +708,13 @@ { "data": { "text/plain": [ - "{'RMS': '1.0.0', 'ModeId': '0.1.1', 'BlackSheep': '1.0.0', 'KPIDemo': '1.0.0'}" + "{'ModeId': '0.1.1',\n", + " 'BlackSheep': '1.0.0',\n", + " 'KPIDemo': '1.0.0',\n", + " 'LabelPropagation': '0.1.0'}" ] }, - "execution_count": 16, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -800,17 +728,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In this example, we will show how to request the RMS and ModeId features to be applied to the previously defined SOURCE_ID.\n", + "In this example, we will show how to request the KPIDemo and ModeId features to be applied to the previously defined SOURCE_ID.\n", "The BlackSheep feature is aimed to population analytics.\n", "You can read about how to use it in the [\"Analysis and Results Visualization\"](analysis_visual.ipynb) example.\n", "\n", - "We will begin with the 'RMS' feature, which provides the RMS for each signal.\n", + "We will begin with the 'KPIDemo' feature, which provides KPIs, such as RMS, for each vibration measurement.\n", "We proceed to request the analysis to the MVG service." ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.439918Z", @@ -824,17 +752,17 @@ { "data": { "text/plain": [ - "{'request_id': 'bc4ea1194b4929764a08e97c60360cb6', 'request_status': 'queued'}" + "{'request_id': '75fc046d1b6ca741cf442552f506f95b', 'request_status': 'queued'}" ] }, - "execution_count": 17, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "RMS_u0001 = session.request_analysis(SOURCE_ID, 'RMS')\n", - "RMS_u0001" + "KPI_u0001 = session.request_analysis(SOURCE_ID, 'KPIDemo')\n", + "KPI_u0001" ] }, { @@ -861,7 +789,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.571418Z", @@ -876,14 +804,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "RMS Analysis: successful\n" + "KPI Analysis: successful\n" ] } ], "source": [ - "REQUEST_ID_RMS_u0001 = RMS_u0001['request_id']\n", - "status = session.get_analysis_status(REQUEST_ID_RMS_u0001)\n", - "print(f\"RMS Analysis: {status}\")" + "REQUEST_ID_KPI_u0001 = KPI_u0001['request_id']\n", + "status = session.get_analysis_status(REQUEST_ID_KPI_u0001)\n", + "print(f\"KPI Analysis: {status}\")" ] }, { @@ -901,7 +829,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.716298Z", @@ -915,17 +843,17 @@ { "data": { "text/plain": [ - "{'request_id': 'fae66b2396b7dde3039a2f58e287686a', 'request_status': 'queued'}" + "{'request_id': '09fa086e2bcf4d25b2ad39a442d2c5ad', 'request_status': 'queued'}" ] }, - "execution_count": 19, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ModeId_u0001 = session.request_analysis(SOURCE_ID, 'ModeId')\n", - "ModeId_u0001 " + "ModeId_u0001" ] }, { @@ -952,7 +880,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "ModeId Analysis: successful\n" + "ModeId Analysis: queued\n" ] } ], @@ -977,7 +905,7 @@ "These elements are:\n", "- `\"status\"` indicates if the analysis was successful.\n", "- `\"request_id\"` is the identifier of the requested analysis.\n", - "- `\"feature\"` is the name of the request feature.\n", + "- `\"feature\"` is the name of the requested feature.\n", "- `\"results\"` includes the numeric results.\n", "- `\"inputs\"` includes the input information for the request analysis.\n", "- `\"error_info\"` includes the error information in case the analysis fails and it is empty if the analysis is successful.\n", @@ -1009,10 +937,11 @@ } ], "source": [ - "rms_results = session.get_analysis_results(request_id=REQUEST_ID_RMS_u0001)\n", + "session.wait_for_analyses([REQUEST_ID_ModeId_u0001, REQUEST_ID_KPI_u0001])\n", + "kpi_results = session.get_analysis_results(request_id=REQUEST_ID_KPI_u0001)\n", "mode_results = session.get_analysis_results(request_id=REQUEST_ID_ModeId_u0001)\n", "\n", - "rms_results.keys()\n" + "kpi_results.keys()" ] }, { @@ -1050,12 +979,12 @@ }, "source": [ "The first step requires parsing the results available from the analysis.\n", - "We begin by showing how to do this with the RMS feature." + "We begin by showing how to do this with the KPIDemo feature." ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "metadata": { "pycharm": { "name": "#%%\n" @@ -1063,7 +992,7 @@ }, "outputs": [], "source": [ - "rms_results_parsed = analysis_classes.parse_results(rms_results)" + "kpi_results_parsed = analysis_classes.parse_results(kpi_results)" ] }, { @@ -1079,7 +1008,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "metadata": { "pycharm": { "name": "#%%\n" @@ -1108,74 +1037,112 @@ " \n", " \n", " timestamps\n", - " rms\n", - " rms_dc\n", - " dc\n", - " utilization\n", + " rms_acc\n", + " peak_acc\n", + " peak2peak_acc\n", + " variance_acc\n", + " crest_factor_acc\n", + " utilization_acc\n", + " dc_component_acc\n", + " datetime\n", " \n", " \n", " \n", " \n", " 0\n", " 1570186860\n", - " 0.647086\n", - " 0.662108\n", - " -0.140237\n", + " 0.647094\n", + " 2.686565\n", + " 5.313293\n", + " 0.418730\n", + " 4.151739\n", " 1\n", + " -0.140239\n", + " 1970-01-19 04:09:46.860000+00:00\n", " \n", " \n", " 1\n", " 1570273260\n", - " 0.647123\n", - " 0.662183\n", - " -0.140420\n", + " 0.647131\n", + " 2.691755\n", + " 5.367004\n", + " 0.418778\n", + " 4.159523\n", " 1\n", + " -0.140425\n", + " 1970-01-19 04:11:13.260000+00:00\n", " \n", " \n", " 2\n", " 1570359660\n", - " 0.646619\n", - " 0.661652\n", - " -0.140239\n", + " 0.646627\n", + " 2.715255\n", + " 5.414856\n", + " 0.418126\n", + " 4.199108\n", " 1\n", + " -0.140243\n", + " 1970-01-19 04:12:39.660000+00:00\n", " \n", " \n", " 3\n", " 1570446060\n", - " 0.646873\n", - " 0.661923\n", - " -0.140347\n", + " 0.646881\n", + " 2.685151\n", + " 5.351562\n", + " 0.418455\n", + " 4.150921\n", " 1\n", + " -0.140351\n", + " 1970-01-19 04:14:06.060000+00:00\n", " \n", " \n", " 4\n", " 1570532460\n", - " 0.646643\n", - " 0.661714\n", - " -0.140423\n", + " 0.646649\n", + " 2.726611\n", + " 5.395325\n", + " 0.418155\n", + " 4.216521\n", " 1\n", + " -0.140429\n", + " 1970-01-19 04:15:32.460000+00:00\n", " \n", " \n", "\n", "" ], "text/plain": [ - " timestamps rms rms_dc dc utilization\n", - "0 1570186860 0.647086 0.662108 -0.140237 1\n", - "1 1570273260 0.647123 0.662183 -0.140420 1\n", - "2 1570359660 0.646619 0.661652 -0.140239 1\n", - "3 1570446060 0.646873 0.661923 -0.140347 1\n", - "4 1570532460 0.646643 0.661714 -0.140423 1" + " timestamps rms_acc peak_acc peak2peak_acc variance_acc \\\n", + "0 1570186860 0.647094 2.686565 5.313293 0.418730 \n", + "1 1570273260 0.647131 2.691755 5.367004 0.418778 \n", + "2 1570359660 0.646627 2.715255 5.414856 0.418126 \n", + "3 1570446060 0.646881 2.685151 5.351562 0.418455 \n", + "4 1570532460 0.646649 2.726611 5.395325 0.418155 \n", + "\n", + " crest_factor_acc utilization_acc dc_component_acc \\\n", + "0 4.151739 1 -0.140239 \n", + "1 4.159523 1 -0.140425 \n", + "2 4.199108 1 -0.140243 \n", + "3 4.150921 1 -0.140351 \n", + "4 4.216521 1 -0.140429 \n", + "\n", + " datetime \n", + "0 1970-01-19 04:09:46.860000+00:00 \n", + "1 1970-01-19 04:11:13.260000+00:00 \n", + "2 1970-01-19 04:12:39.660000+00:00 \n", + "3 1970-01-19 04:14:06.060000+00:00 \n", + "4 1970-01-19 04:15:32.460000+00:00 " ] }, - "execution_count": 24, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_rms = rms_results_parsed.to_df()\n", - "df_rms.head()\n" + "df_kpi = kpi_results_parsed.to_df()\n", + "df_kpi.head()" ] }, { @@ -1186,16 +1153,15 @@ } }, "source": [ - "From the results, we can see that the RMS feature provides the rms value, the dc component and\n", - "the rms without the dc component.\n", - "All this is available for each timestamp.\n", + "From the results, we can see that the KPIDemo feature provides some KPIs, e.g. rms and peak-to-peak.\n", + "All this is available for each measurement.\n", "\n", "We can request to display a summary of the results." ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 37, "metadata": { "pycharm": { "name": "#%%\n" @@ -1206,22 +1172,22 @@ "name": "stdout", "output_type": "stream", "text": [ - "=== RMS ===\n", - "request_id bc4ea1194b4929764a08e97c60360cb6\n", - "from 1570186860 to 1574424060\n", + "=== KPIDemo ===\n", + "request_id 75fc046d1b6ca741cf442552f506f95b\n", + "from 19700119-04:09.46 to 19700119-05:20.24\n", "\n", - "+-------+--------------+------------+------------+------------+---------------+\n", - "| | timestamps | rms | rms_dc | dc | utilization |\n", - "|-------+--------------+------------+------------+------------+---------------|\n", - "| count | 50 | 50 | 50 | 50 | 50 |\n", - "| mean | 1.57231e+09 | 0.611691 | 0.623692 | -0.120874 | 1 |\n", - "| std | 1.26105e+06 | 0.0565414 | 0.0563824 | 0.0141936 | 0 |\n", - "| min | 1.57019e+09 | 0.484564 | 0.497987 | -0.140524 | 1 |\n", - "| 25% | 1.57125e+09 | 0.627912 | 0.637381 | -0.140196 | 1 |\n", - "| 50% | 1.57231e+09 | 0.628307 | 0.6378 | -0.112316 | 1 |\n", - "| 75% | 1.57337e+09 | 0.64684 | 0.661892 | -0.10966 | 1 |\n", - "| max | 1.57442e+09 | 0.647694 | 0.662754 | -0.109065 | 1 |\n", - "+-------+--------------+------------+------------+------------+---------------+\n" + "+-------+--------------+-----------+------------+-----------------+----------------+--------------------+-------------------+--------------------+\n", + "| | timestamps | rms_acc | peak_acc | peak2peak_acc | variance_acc | crest_factor_acc | utilization_acc | dc_component_acc |\n", + "|-------+--------------+-----------+------------+-----------------+----------------+--------------------+-------------------+--------------------|\n", + "| count | 50 | 50 | 50 | 50 | 50 | 50 | 50 | 50 |\n", + "| mean | 1.57231e+09 | 0.611699 | 2.81764 | 5.40059 | 0.377308 | 4.62971 | 1 | -0.120877 |\n", + "| std | 1.26105e+06 | 0.056542 | 0.278079 | 0.378225 | 0.0636187 | 0.333362 | 0 | 0.0141939 |\n", + "| min | 1.57019e+09 | 0.484569 | 2.26056 | 4.55438 | 0.234808 | 4.12335 | 1 | -0.140529 |\n", + "| 25% | 1.57125e+09 | 0.627919 | 2.68338 | 5.31364 | 0.394283 | 4.20398 | 1 | -0.140198 |\n", + "| 50% | 1.57231e+09 | 0.628315 | 2.84999 | 5.52634 | 0.39478 | 4.80636 | 1 | -0.112321 |\n", + "| 75% | 1.57337e+09 | 0.646848 | 3.06662 | 5.69377 | 0.418413 | 4.8906 | 1 | -0.109663 |\n", + "| max | 1.57442e+09 | 0.647702 | 3.13609 | 5.79639 | 0.419518 | 4.9925 | 1 | -0.109068 |\n", + "+-------+--------------+-----------+------------+-----------------+----------------+--------------------+-------------------+--------------------+\n" ] }, { @@ -1246,10 +1212,13 @@ " \n", " \n", " timestamps\n", - " rms\n", - " rms_dc\n", - " dc\n", - " utilization\n", + " rms_acc\n", + " peak_acc\n", + " peak2peak_acc\n", + " variance_acc\n", + " crest_factor_acc\n", + " utilization_acc\n", + " dc_component_acc\n", " \n", " \n", " \n", @@ -1259,87 +1228,121 @@ " 50.000000\n", " 50.000000\n", " 50.000000\n", + " 50.000000\n", + " 50.000000\n", " 50.0\n", + " 50.000000\n", " \n", " \n", " mean\n", " 1.572306e+09\n", - " 0.611691\n", - " 0.623692\n", - " -0.120874\n", + " 0.611699\n", + " 2.817644\n", + " 5.400591\n", + " 0.377308\n", + " 4.629712\n", " 1.0\n", + " -0.120877\n", " \n", " \n", " std\n", " 1.261051e+06\n", - " 0.056541\n", - " 0.056382\n", - " 0.014194\n", + " 0.056542\n", + " 0.278079\n", + " 0.378225\n", + " 0.063619\n", + " 0.333362\n", " 0.0\n", + " 0.014194\n", " \n", " \n", " min\n", " 1.570187e+09\n", - " 0.484564\n", - " 0.497987\n", - " -0.140524\n", + " 0.484569\n", + " 2.260563\n", + " 4.554382\n", + " 0.234808\n", + " 4.123347\n", " 1.0\n", + " -0.140529\n", " \n", " \n", " 25%\n", " 1.571245e+09\n", - " 0.627912\n", - " 0.637381\n", - " -0.140196\n", + " 0.627919\n", + " 2.683378\n", + " 5.313644\n", + " 0.394283\n", + " 4.203977\n", " 1.0\n", + " -0.140198\n", " \n", " \n", " 50%\n", " 1.572307e+09\n", - " 0.628307\n", - " 0.637800\n", - " -0.112316\n", + " 0.628315\n", + " 2.849992\n", + " 5.526337\n", + " 0.394780\n", + " 4.806361\n", " 1.0\n", + " -0.112321\n", " \n", " \n", " 75%\n", " 1.573366e+09\n", - " 0.646840\n", - " 0.661892\n", - " -0.109660\n", + " 0.646848\n", + " 3.066616\n", + " 5.693771\n", + " 0.418413\n", + " 4.890599\n", " 1.0\n", + " -0.109663\n", " \n", " \n", " max\n", " 1.574424e+09\n", - " 0.647694\n", - " 0.662754\n", - " -0.109065\n", + " 0.647702\n", + " 3.136088\n", + " 5.796387\n", + " 0.419518\n", + " 4.992498\n", " 1.0\n", + " -0.109068\n", " \n", " \n", "\n", "" ], "text/plain": [ - " timestamps rms rms_dc dc utilization\n", - "count 5.000000e+01 50.000000 50.000000 50.000000 50.0\n", - "mean 1.572306e+09 0.611691 0.623692 -0.120874 1.0\n", - "std 1.261051e+06 0.056541 0.056382 0.014194 0.0\n", - "min 1.570187e+09 0.484564 0.497987 -0.140524 1.0\n", - "25% 1.571245e+09 0.627912 0.637381 -0.140196 1.0\n", - "50% 1.572307e+09 0.628307 0.637800 -0.112316 1.0\n", - "75% 1.573366e+09 0.646840 0.661892 -0.109660 1.0\n", - "max 1.574424e+09 0.647694 0.662754 -0.109065 1.0" + " timestamps rms_acc peak_acc peak2peak_acc variance_acc \\\n", + "count 5.000000e+01 50.000000 50.000000 50.000000 50.000000 \n", + "mean 1.572306e+09 0.611699 2.817644 5.400591 0.377308 \n", + "std 1.261051e+06 0.056542 0.278079 0.378225 0.063619 \n", + "min 1.570187e+09 0.484569 2.260563 4.554382 0.234808 \n", + "25% 1.571245e+09 0.627919 2.683378 5.313644 0.394283 \n", + "50% 1.572307e+09 0.628315 2.849992 5.526337 0.394780 \n", + "75% 1.573366e+09 0.646848 3.066616 5.693771 0.418413 \n", + "max 1.574424e+09 0.647702 3.136088 5.796387 0.419518 \n", + "\n", + " crest_factor_acc utilization_acc dc_component_acc \n", + "count 50.000000 50.0 50.000000 \n", + "mean 4.629712 1.0 -0.120877 \n", + "std 0.333362 0.0 0.014194 \n", + "min 4.123347 1.0 -0.140529 \n", + "25% 4.203977 1.0 -0.140198 \n", + "50% 4.806361 1.0 -0.112321 \n", + "75% 4.890599 1.0 -0.109663 \n", + "max 4.992498 1.0 -0.109068 " ] }, - "execution_count": 25, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "rms_results_parsed.summary()\n" + "kpi_results_parsed.summary()" ] }, { @@ -1350,12 +1353,12 @@ } }, "source": [ - "Finally, we can generate a plot that displays these results." + "Finally, we can generate a plot that displays these results. When plotting the results for the KPIDemo feature, one selects the KPI to be displayed by passing the parameter `\"kpi\"`. If this parameter is not included, the plot function will display the results of the first KPI after the timestamps, which is the RMS value." ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "metadata": { "pycharm": { "name": "#%%\n" @@ -1364,7 +1367,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcQAAAEWCAYAAAD4qec7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAABBCElEQVR4nO2de5gcVZn/P9++zHTuhCRcAyRiUMEAkhBARPiJXLwFvCGKKK7Iui4qi7qC7CIi6+rqrpeVVZFFRRRwYcWgKKCArAiYgBFMuIUkQLgOuSdz6Z7u9/fHOT2pdGaSCclMdXXez/PU01WnTlV9q/rUeeu85z1VMjMcx3EcZ0cnl7YAx3Ecx2kG3CA6juM4Dm4QHcdxHAdwg+g4juM4gBtEx3EcxwHcIDqO4zgO4AbRSSBpqaQ3bqd9jZB0o6TVkv5ne+zTAUmXSHpR0nNpa6kj6Q5JZ27vvFlH0t9Jel7SOkkT0tbzUpC0q6Q7Ja2V9O9DfKxXSJofj/WJbdzXRZKu2trtdkiDKGmypOtjxbJa0l8lnZG2rqwg6RhJy7aQ7V3ArsAEM3v3MMhKHUlTJJmkwmbyfDdWkPWpR9LaxPo7JHUn1j+SWLc38ClgfzPbbQtaJOkrkpbH6SuS1E++D0TNZzakHxIrwnWxUv/kIK/B7pLmSHom7nfKYLZLbJ+PRv+ZWDH+WdJOW7OPfva52WueyDctXvurEmkv6XwkFYH/AI43s9Fmtjyx7ui4r0sG2PZ3yXIkaRdJV0cNqyXdJemwRP5jJNUazvGDifWbK1NvkfQHSaskPSfpckljEnLOAl4ExprZpySdIanacKxjEvubIul2SZ2SHlbDA7akl0n6ZfxvX5T0b4nV/wjcbmZjzOxbknaS9CNJL8TpooZ9LZXUldBxy5b/mc2zVQZxczd6xvgx8BSwDzABOB14PlVFL4Em/z/2AR41s96t3XAw59Xk5z4gZvbRWEGONrPRwNVAYwv67ESeVyTS9waWm9kLgzjUWcDJwEHAgcDbgL9NZpA0HvgcsKAhfSLwG+B7hPvj5cBgK5ta3Padg8zfyBeA1wJHAGMJ92b3S9wXMOhrDnApMLch7aWez65AiU2vbRH4JnBvfxtJOg0oNiSPjrpmADsDPwJ+JWl0Is8zyXM0sx817GOgMjUOuATYA3gVsCfw1cT6fYCFtvEbXO5uONYdiXVXA38mlJsLgOskTYrn1gbcCtwG7AZMBpKtuH3Y+Hp9HRgJTAFmAadL+lDDeb0toeN4thUz2+wELAU+CzwA9BBuDgM+RDAqK4GPAofGPKuAbye2fznwe2A14Unj2kEc85tx32uA+4CjEuvyhJv4cWBtXL9XXHcA4YKvIBi4zw2w/3XAwQOsOwZY1s81eGOcv4hwM10Vj/8gsB9wPvBC1H18Yts7CAXuj/G4NxIKy0/i+c0Fpgzy3C8CrovHXgP8E9BJaIXV8xwCdADFfs6tvv21Ufv9wEEDnGc78A3gmTh9I6aNAroIFcW6OO3RcJwvAGWgEtd/mPDw9U/AE/E6XQmMi/mnEMrUh4EngTsH+l8IZfE5wkNNDjgvloXlwM+AnRPbnB6Pt5xwcybP74fAJQP974QK4vp4LZcAn0ismwXMi//B88B/xPQn43nUr8sRWyjno+L/cHRDeTmzn7xvbLjuP4zpryOUrVWEcnNGTP8jcFZi+w8D9zTs87vAxxqPCXwJ+PFmdB8HPEy4p79NuL/PbMhTiNdiSkP6HcC/An+K1+8X9f8MGB/Pbd8Bjru5e3/A+2ZL1zymnxrLz0XAVf1sN9D57Az8gHCPrARuINQH6xNl4bZE/vOAf2ssf3HdOOBR4PC4bWEz/8EaYMZAdVY/13yTMjVA3ncADybukQrhXl4Xy+AZwB8G2HY/go0Yk0j7P+Cjcf4s4P8G2PY2oEp4+FkX9/UicGgiz+eS25O4n/vZ30Vspq4b8PwHcYGWAvOBvYARbKi8vkt4Ajo+nsQNwC6EJ4wX6gWO8MRwAaHyKgGvG8Qx308wGgWCi+g5oBTXfYZghF4BiPAEPAEYAzwb85fi8mED7P+3wF2Em2DvhnWbFC42NYjdwAlR35WECvMCwpPdR4AlDYVxEbAvocAvJBT6Nya2/8Egz/0iQgE9OV7PEcBNwN8ltv868J+bKSQVgjuzCHw6ai/2c54XA/fE/3QSoYL94mBuwMSxrkos/028Di8jPPH+L7HSZUOZupJQYY3oZ3/HAL3AVwiGeQTwyahxckz7HnB1zL8/4cZ6fVz3H3H7LRrEeG3vAy4E2qLmxcAJcf3dwOlxfjRweMN5DFiRNZzTB+J+1VBeOgiVwV3AMQOVTcIT9VrgvfH/nEB80CMYq8MSeWcCaxPLdaOeY1ODeBvBwPyRcC/fSLxPgInxmPUy9A/xum6NQXwaeHX8r6+vl5P4X61iw0PPo8DfJ7bt997f0n0ziGs+Nh5rMltvEH9FqHTHx+tRr/c2KQvx/3o0lpkfsqlBvDRez82WI+BgQh00LlEuyoSHsyWEOmDUYMpUP/v+BnBNYnkjnQSDuD7u61Hgn+s6gbcDDzXs79vE+gi4gvAg++u4/R3A9AadyXL4IjArsXwBsLKhXn4+ntstbPxwfxGbqesGPP9B3LRLgb9JLNf/rD0TacuB9ySWrwfOifNXApcBkwdTSQygYWX9ZIFHgJP6yfNe4M+D3N944MuE5nmVYPAPTRSuLRnEWxPr3kaoePNxeUy8Pjsl/uQLEvn/Hfh1w/bzB3nuF9HQegLeA9wV5/OEimDWAPu6iEQrgVAZPkt8mm44z8eBNyfyngAsHegaDXCspEH8HfCxxPIrYoEtJMrUyzazv2MIN30pkfYQcGxieffEPi9k4xt7VNx+MAbxMODJhuOfT3xwAe4ktIInNuSpn8dgDeLvgIsa0g6LZagd+CDB+Ozb33WPmn4+wL6rwCsTy9OiNsVyMo8NhvwONq6IHiUYpkMJD5ffSpSxDzSUIRFa7ltjEL+cWN4//i954H1xm/8mPPAcSKjsjtvcvb+l+2YQ1/ybwGf7K7ebO59Y3mrA+H7yb1IWCK3h9wxQ/mYS6qFCf9sm8o0lPBScn0jbLV7HHDA1ls/vDaZMNez7uHjd9kukNep8WTxGDphOeMA/P647nU29EP/CBm/GLYT7802EB83PEB5O2gYoh1cRHpzHEDyNjwM9ifVHxnIyknAvPMeGevciNlPXDTQNtg/xqX7Skn1uXf0s1/3b/0i4af4kaYGkv9nSwSR9WtJDsQN5FaFlNTGu3otwYRoZKH0TzGylmZ1nZgcQfP3zgRv6CzoYgMZzfdHMqoll2HD+/eUf6Fpt6dxh0//iF8D+kqYSCvRqM/vTZrT3bW9mNUJltkc/+fYguBvrPDFAvsHS3/4KhOu/ibYB6DCzZH/SPsDPY0DAKoKBrMZ97sHG57qe8OA2GPYB9qjvN+77cwmtHya4dB6WNFfSWwe53z4UAmSOITww9mFm95rZWjPrsdAPdBfw5gF2s7kyv45QedYZC6yzUDt8DHjAzO4ZYNsugqGdG6/3F4DXShrHptfV2PL/1kgy/xOEJ/iJbLh3LjazLjN7ALiGDec/4PkO4r7p95pLOpjgrfn6Vp5DXc8KM1u5pYyS3kZwJV7bz7oc8F/AJ20zfe6SRhBa6/eY2b/W083sOTNbaGY1M1tCqHPfmVi/xTIl6XDgp8C7zOzRgTSY2WIzWxKP9SDBk/SuuLqxzBGX6wFMXQR366/NrAx8jdCqf9UAh/tE3OYxQj13NaG+qmu5K5aTzng9VgFHJbYfbF3Xx2ADE2yQ+Tbd0Ow5ghsRSa8DfivpTjNb1F9+SUcR/tBjgQVmVpO0kmBUIZzkvsBfGzZ9iuAC3Vp9L0r6GuHJaWeCO2BkQk+e4DIccgZx7tDwX5hZt6SfEVxGryS4JDbHXonj5Qhuomf6yfcMG3dy753I91LKQ31/dfYmuNqejxoGs9/G9U8RvBd3NWaU9CyJG03SSMLNV2ej/5nwlJ3c7xIzm9avCLPHgPfG6/cOQuDAhEHoT3I6odW1eAv56q26/niK4PrsjwUEl2L94eggNvyXxwJHS6pXijsDr5F0sJmdTYgFSJ5Lcv5ZNi5DSi4PkmT+vQmthhfjcRuPl5zv994f5H0D/V/zYwgtsifj8/BoIC9pfzM7ZAvn8RSws6SdzGzVFvIeC8zUhuEy44CqpOmEumcmcG3UkI95lkl6t5n9n6R2QrfUMhqCo/rB2HzA5EZlStJrgDmEe+l3W9j35va1AHiZpDFmVjeCBxEMLYT/98hB79hsBXBaQueX2FCet6QFBl/X9THkwy4kvVtSvcJbSRBd28wmYwgVZQdQkHQhGz91XA58USFEWpIOjJXRL4HdJZ0jqV3SGCVCkxs0fUXSqyUVYojx3wGLLIRGPwqUFMKRi4RAkPaXfgW2ii2d+0BcSfDtz2bLBnGGpHfEKM1zCJ3g/bUUrgb+SdKkGHV4IRsiwp4HJsQWw2C5GvgHSVNjdNyXCAFWWx2FmuC7wL9I2gcgaj0prrsOeKuk18XotovZuLzPB94saWdJuxGuRZ0/AWslfVZhPGU+lpdD43HeL2lSfOpcFbepEf63GsGttCU+QHBH9aEQZn6CpFIsm6cR+tV+M8A+fgK8UdIpMf+E2OKBUCbOlbSnpD0I/Wr1451BeFg4OE7zCK3AC+L6HwBvl3RwvAf+mfBkv5rQZ3ZAogx9go0fJpBUYsM90x6Xk7xf0v7xIeVi4Dozq5rZ44QgjAviPfwqwkPuL+N2A937g71vNrnmhO6cfRPX4rvxHE/Y0vmY2bOE/rD/kjReUlHS6/s5LvEa7pc4zhzg+4TgxNWElkt9Xf1BZQZwb/wPriO0lj4Yy10fkv6fpH3iNdmL0B30i7hus2VK0qvj/MfN7MYBtCeP9SZJu8b5V8bz+kW8Ho8S7qvPx+O9neD2vj5ufhVwuKQ3KjQ0ziE8CD00wLH2jWU6L+lNhKCcS+K6vSUdKaktHuszBI9A8uF4sHVdH8MxDvFQwp+6jlAIPrmFp+KbCX/QowR3Sjcbu1j+gxANdgsh0uq/CUEYawkuw7cRfMmPAf9vgGOMBH5OqMwWE1ouswHiTf8xws33NKElsaUxd9uLLZ17v8QWUg2438ye2EL2XxD6HVcSnpjfYWaVfvJdQqgoHyD0Wdwf0zCzhwkGbrGCS3EwrtR6h/qdhM7tbuDjg9huc3yTUKZuURhXdg+hvwQzWwD8PeHp9FnC+Sb/xx8DfyH0m95CCIwgblsF3kqonJYQbtrLCU/1ACcCC2KZ/iZwat11Q+gzuStel8P7Ey3pCMLTamPof5FwjesBEB8HTh7IhWVmTxIqz08RIqvnE57IIQQY3Uj47/5KqOS/F7dbFd1sz0UPThlYE8s+ZnYbwUX8K0JQzcsJ/XuY2YvAuwmV7nJC32RjC72L4D6DEI3a1bD+xwTD9ByhjzI5CPu9hPtxeTz+PydaLf3e+wzivhnomkd3W/JarAO6zaxjkOdzOqGF+3C8VufQD9FlmTxOF7DezFZYILmufuzno2vxtYTyeDywShvG3dXdg68hBECtj78PJq7plsrUpwgesP9O7HejoSINHAs8IGk9IaDvfwkPt3VOJbR2VxLKyLvq19LMHiF4sr4b158EzI7n2B8z4rmsJUQmnxbvawgPQd+J+3macE++yRLjPRl8XdeHQheAk3Uk3Qb81Mwu30yei4CXm9n7h01YEyFpKaHT/rdpa3Ecp/nI5OBmZ2OiK+8QwhOX4ziO8xJI5dVtko7Sxq/+6ZvS0JNlJP2IMK7ynERHtuM4jrOVuMvUcRzHcdhBX+7tOI7jOI24QXQcx3EcdrCgmokTJ9qUKVPSluE4jpMp7rvvvhfNbFheUJImO5RBnDJlCvPmzUtbhuM4TqaQtKXxzS2Bu0wdx3EcBzeIjuM4jgO4QXQcx3EcYAfrQ3QcZ8eiUqmwbNkyuru7t5zZoVQqMXnyZIrFYtpSUsENouM4LcuyZcsYM2YMU6ZMQYP+3OmOiZmxfPlyli1bxtSpU9OWkwruMnUcp2Xp7u5mwoQJbgwHgSQmTJiwQ7emvYU4CNZ2V6hUDTOjZmz4xSjkcowfWaSQH95ni+5KlTVdFdZ097K2u8La7l7W9YT5rnKV8aPamDSmnV3GtDNpdImxIwpIoloznlnVxdLl61m6vJOlL67nieWdFHJit3Eldh9XYrdxJXYbG37HlIpUqrU4Wd+8EONHFdl5VBvthXy/GivVGi+u6+H5NT28sKabrkqV3qrRWwv76q3W6K0ZPb01eipVenprdCd+87kcE0e3MXF0OxPHxN/R7UweP4IxpR3TpeNsPW4MB8+Ofq3cIA6Cj151H3ctWj7gegnGj2zbUHmPbmfciCI9vVU6y/Wpl85yla5ylWI+x8i2PCPa8owoht+RbXlA1GpGb82oWfytGV2VKqu7KhtN5d7NfWN5U9ryOcaPKrJifZlKdcP7a0vFHHvvPJKawV2LXmRtz9Z/r3d0e4GdR7Wx86g2xpQKrFhf5vk1PSxf38PWvCq3VMzRXsj3/fZWa7y4rky5uvG5jmkvMPef3kip2L8hdhzHeSm4QRwEpx8+heNetSu5nJBETiDCb7laY/m6Mi+u64lTmQeWrWJVV4VSIc/I9mDsRrYFozFipzyVao2uSpV1Pb10rO2hqxKMJkBeIp8LUyEncjlRKuYYN6LIrmNHM25EkbEjiuG3VGRMqcDYUpHRpQJjSgXGlIqUCjlWdpZ5YW3Q07G2h461PSxf18PEMe1MmTCSfSaMYsqEUewypp1cbsNT4druCs+v6ea51T08u7qL9T29FAs5ivkcbfkchbwo5nOYGSvWV1ixvofl68usiNPa7l52G1viwMk7sevYdnYdW2LXse3sMqbEiLY8xVzYRyGvvvm2Qth3f0+nZsaa7t5wbdf2MOcvz/CTe59kTVfFDaKTKcyClymX856qZsUN4iA48dW7pS1hq5kwup2X7zJmq7cbUyoyplR8SdsOBZIYFx8A9p00midXdPKTe5+ku7J1LWTHSYOlS5dywgkncNhhh3H99dezyy67cPTRR/PHP/6RQw89lA996EN8/vOf54UXXuAnP/kJs2bN4ve//z2f/OQngVD+77zzTsaM2fR+XLduHSeddBIrV66kUqlwySWXcNJJ4ZOoV155JV/72teQxIEHHsiPf/xjnn/+eT760Y+yePFiAL7zne/w2te+dvguRhaoP7XsCNOMGTPMyTZz5j9t+3z2l/bIc2vSluJkgIULF6Z6/CVLlpgku/vuu23JkiWWz+ftgQcesGq1aocccoh96EMfslqtZjfccIOddNJJZmb21re+1f7whz+YmdnatWutUqn0u+9KpWKrV682M7OOjg7bd999rVar2V//+lebNm2adXR0mJnZ8uXLzczslFNOsa9//etmZtbb22urVq3qd7/9XTNgnjVBHT7Uk7cQnUxRd5N2V6opK3GyxhduXMDCZ9Zs133uv8dYPv+2AzabZ5999uHwww9n6dKlTJ06lenTpwNwwAEHcOyxxyKJ6dOns3TpUgCOPPJIzj33XE477TTe8Y53MHny5H73a2Z87nOf48477ySXy/H000/z/PPPc9ttt/Hud7+biRMnArDzzjsDcNttt3HllVcCkM/nGTdu3Pa4BC1Fqs5sSSdKekTSIknnDZDnFEkLJS2Q9NOGdWMlLZP07eFR7KRNqRiKrLtMnawwatSovvn29va++Vwu17ecy+Xo7Q0Bbeeddx6XX345XV1dHHnkkTz88MP97vcnP/kJHR0d3HfffcyfP59dd911hx4ysT1IrYUoKQ9cChwHLAPmSppjZgsTeaYB5wNHmtlKSbs07OaLwJ3DpdlJH28hOi+VLbXkmoXHH3+c6dOnM336dObOncvDDz/MK1/5yk3yrV69ml122YViscjtt9/OE0+ED1K84Q1v4O1vfzvnnnsuEyZMYMWKFey8884ce+yxfOc73+Gcc86hWq2ybt06byU2kGYLcRawyMwWm1kZuAY4qSHPR4BLzWwlgJm9UF8haQawK3DLMOl1moBSwQ2i09p84xvf4NWvfjUHHnggxWKRN73pTf3mO+2005g3bx7Tp0/nyiuv7DOaBxxwABdccAFHH300Bx10EOeeey4A3/zmN7n99tuZPn06M2bMYOHChf3ud0dGtjUDxbbngaV3ASea2Zlx+XTgMDM7O5HnBuBR4EggD1xkZr+RlANuA94PvBGYmdyu4ThnAWcB7L333jPqT1FONnns+bUc9/U7+dZ7X8Psg/ZIW47T5Dz00EO86lWvSltGpujvmkm6z8xmpiRp2Gj2ATEFYBpwDPBe4PuSdgI+BtxkZsu2tAMzu8zMZprZzEmTWv6Dzy2Pu0wdxxkq0owyfRrYK7E8OaYlWQbca2YVYImkRwkG8gjgKEkfA0YDbZLWmVm/gTlO69Aeg2p63CA6OwgPPvggp59++kZp7e3t3HvvvSkpal3SNIhzgWmSphIM4anA+xry3EBoGf5A0kRgP2CxmZ1WzyDpDILL1I3hDsCGFqJHmTo7BtOnT2f+/Plpy9ghSM1lama9wNnAzcBDwM/MbIGkiyXNjtluBpZLWgjcDnzGzAZ+qajT8nhQjeM4Q0WqA/PN7Cbgpoa0CxPzBpwbp4H28UPgh0Oj0Gk2ivnwDtnuXjeIzuAwsx3+Kw6DJa0gy2ah2YNqHGcjJFEq5t1l6gyKUqnE8uXLd/iKfjCYhQ8El0qltKWkhr+6zckcwSB6C9HZMpMnT2bZsmV0dHSkLSUTlEqlAV8VtyPgBtHJHKVCzluIzqAoFotMnTo1bRlORnCXqZM5SsU8Pd6H6DjOdsYNopM52r0P0XGcIcANopM5SsWctxAdx9nueB+ikzlKhdYOqnludTcrO8t0lqt0lat0lnvpqoT5nt4aPb1Vyr21OF+j3FujkBOj2guMbi8wqr3AqPY8o9sLtBVyiE2HHFTN6OzppTPuf325SmdPOE4+l6MtL4r5HMVCLvzmRXshR6mYp72Qoz3+lop5RtSntjgV8xTzG561qzWjUq1Rrtao9NZY093LE8vXs/TF9Sxd3snS5et5Ynknz67uYtyIIruMKbHLmHZ2GdvOpDElJo1pp73Q/7N7qZhnTKnA2FKRsaUCY0pFxpQKlIp5qjWjZka1ZlTNqNWMrkqVZ1Z1sWxlmJ5e1cXTK7t4fk03OYm2Qo62fI5iQeE3TvmcKOQUfvPxN5ejvZijPR+uR1s+LFdrxuquCqs6K/G3zKquCl3lKmNHFBk/ssj4kW2MH9XG+JFFxpaKdFeqrOvpZW1PL+u6e1kXf3trRj0+Nhkp21s1ytVaLAehPJR7a+TzYvexI9h9pxK7jSuxx7gR7D6uxB47jWDarqNpj+N4nf5xg+hkjlIxx4vretOWMSTcu3g577nsnkHllaA9VuCVaqjstwUpPGxUa6Gy3RbqxqNSrVHbzIiHUW15pkwcxf67j+XYV+7C6q4KL6zt4ZnV3fxl2SqWry8zlCMmxo8ssuf4EUwePwKActWo9NbortRY291LubdGby0Y1d5ajWrV6K2FqVLd8EDSH2NKBXYaWWSnEW3sNLLIxNHtrO6qsOTF9dzfuYqV68v0NlyctkKOMe0FRpcKjGorUIwPAvVHmvpwykJOlIo5xo0o0pbPBUNeyFGp1nh2dTf3P7mS51Z3U6lu2P8dnz6GKRNH4QyMG0Qnc7TysItnV4cPvH5h9gHsPWEkI4t5RrYVGNGWZ2RbnlIxT1shR3shRyGnjQacV2sWWns9obWxvqd3QMOWE4xsC5XuyPY8o9oKlIq5vv1ZbFlVEi2RcrVGT6VKdyW0Snp6a3RXqnRXqrEFW6Oz3Et3pUpnuUq1ZrQVNrSy6q3MEW0F9pkwkn0mjGTS6PbNDpqvVGusWF+m0s95mEFPb5XVXb2s7a6wpjv+dvXS01slL5GLhrk+Xyrm2GPcCPYcP4I9dxrBqPZtrwLNwnWqt9QkMbZUoJDffI+UmbGup5c13b2MKOYZ1Z7fri24Ws14cX0Pz63u5plV3ey+0447vnCwuEF0MkepmG/ZN9XUW3nHH7Aru48bsVXb5nOKLsPiNuuQgmuwkIcRpOdmK+Zz7Dq2uStySbQVgrt1a7fbXv9Xf+Ryiu7nEgfuuEMLtwoPqnEyR6nYuuMQu8rBII4oel+P4ww3bhCdzNHewkE19RbiiDY3iI4z3KRqECWdKOkRSYsk9fv5JkmnSFooaYGkn8a0gyXdHdMekPSe4VXupEmpmKenhVuIOUHbFvqfHMfZ/qTWhygpD1wKHEf4EPBcSXPMbGEizzTgfOBIM1spaZe4qhP4gJk9JmkP4D5JN5vZquE9CycNSsUc5WqNas3I51rrKwZdlSojinn/OoPjpECaj6GzgEVmttjMysA1wEkNeT4CXGpmKwHM7IX4+6iZPRbnnwFeACYNm3InVeofCW7Fwfldlaq7Sx0nJdI0iHsCTyWWl8W0JPsB+0m6S9I9kk5s3ImkWUAb8PiQKXWailKM5mvFwJrucrXP4DuOM7w0+7CLAjANOAaYDNwpaXrdNSppd+DHwAfNrN/aUdJZwFkAe++99zBIdoaausFoxcCarkqVkd5CdJxUSLOF+DSwV2J5ckxLsgyYY2YVM1sCPEowkEgaC/wKuMDMBny1h5ldZmYzzWzmpEnuVW0FWtkgdparPuTCcVIiTYM4F5gmaaqkNuBUYE5DnhsIrUMkTSS4UBfH/D8HrjSz64ZNsdMUlIqt6zLtqrjL1HHSIjWDaGa9wNnAzcBDwM/MbIGkiyXNjtluBpZLWgjcDnzGzJYDpwCvB86QND9OBw//WThp0F5vIbZgUE23B9U4Tmqk2odoZjcBNzWkXZiYN+DcOCXzXAVcNRwaneajVGhdl2lXucqIndwgOk4a+OhfJ3PUXaatODjfh104Tnq4QXQyRysH1XR5UI3jpIYbRCdzlFq4D7H+phrHcYYfN4hO5mjVKFMzc5ep46SIG0Qnc7S3aFBNT28NM3zYheOkhBtEJ3O0aguxbuD9TTWOkw5uEJ3M0arDLjr948COkypuEJ3MkcuJtnyu5YJq/OPAjpMubhCdTNJezLXcOMSu2EL0PkTHSQc3iE4mKRXzLecyrZ+Pu0wdJx3cIDqZpFTMtZxB7PKgGsdJFTeITiYpFfItF2Xa6S5Tx0kVN4hOJikV8y0XVNPtQTWOkyqpGkRJJ0p6RNIiSecNkOcUSQslLZD000T6ByU9FqcPDp9qpxloSZepD7twnFRJ7fNPkvLApcBxwDJgrqQ5ZrYwkWcacD5wpJmtlLRLTN8Z+DwwEzDgvrjtyuE+DycdSsU8a7t705axXenyoBrHSZU0W4izgEVmttjMysA1wEkNeT4CXFo3dGb2Qkw/AbjVzFbEdbcCJw6TbqcJaC+0XpSpj0N0nHRJ0yDuCTyVWF4W05LsB+wn6S5J90g6cSu2dVqYUjFHT29rBdV0latI0F7wrn3HSYPUXKaDpABMA44BJgN3Spq+NTuQdBZwFsDee++9vfU5KdGK4xDr30KUlLYUx9khSfNR9Glgr8Ty5JiWZBkwx8wqZrYEeJRgIAezLQBmdpmZzTSzmZMmTdpu4p10acmgGv8WouOkSpoGcS4wTdJUSW3AqcCchjw3EFqHSJpIcKEuBm4Gjpc0XtJ44PiY5uwgtOI4xK5K1ccgOk6KpOYyNbNeSWcTDFkeuMLMFki6GJhnZnPYYPgWAlXgM2a2HEDSFwlGFeBiM1sx/GfhpEV9HKKZtYyLsbtS9bfUOE6KpNqHaGY3ATc1pF2YmDfg3Dg1bnsFcMVQa3Sak1IxhxmUq7W+DwZnnc5y1SNMHSdFPJzNySR112IruU27yu4ydZw0cYPoZJL2aDh6WiiwptuDahwnVdwgOpmkFMfqtVQL0Q2i46SKG0Qnk/S5TFvoBd9dHlTjOKniBtHJJBv6EFvIIJarlNwgOk5quEF0MkmpGIpuK72+rf6mGsdx0sENopNJWq2FaGbeh+g4KeMG0ckkpUJrDbsoV2vUzL904Thp4gbRySR1l2mrtBC7y8GwewvRcdLDDaKTSVrNZdpZCR879hai46SHG0Qnk7TXW4gtElTTVY4fB/YWouOkhhtEJ5OUWuxNNV3xPPzVbY6THm4QnUyyIaimNQxi/TzcZeo46ZGqQZR0oqRHJC2SdF4/68+Q1CFpfpzOTKz7N0kLJD0k6VtqlW8AOYOimBc5tU6UaVcMqvE31ThOeqT2+SdJeeBS4DhgGTBX0hwzW9iQ9VozO7th29cCRwIHxqQ/AEcDdwypaKdpkBS+idgiLcS6y9T7EB0nPdJsIc4CFpnZYjMrA9cAJw1yWwNKQBvQDhSB54dEpdO01D8S3Ap0lkOUqfchOk56pGkQ9wSeSiwvi2mNvFPSA5Kuk7QXgJndDdwOPBunm83soaEW7DQXpUKuZVym3ofoOOnT7EE1NwJTzOxA4FbgRwCSXg68CphMMKJvkHRUfzuQdJakeZLmdXR0DJNsZzhoKZepD7twnNRJ0yA+DeyVWJ4c0/ows+Vm1hMXLwdmxPm3A/eY2TozWwf8Gjiiv4OY2WVmNtPMZk6aNGm7noCTLu3FfMu0ELsqHlTjOGmTpkGcC0yTNFVSG3AqMCeZQdLuicXZQN0t+iRwtKSCpCIhoMZdpjsYpWKOnhbpQ6wH1bQXmt1p4zitS2pRpmbWK+ls4GYgD1xhZgskXQzMM7M5wCckzQZ6gRXAGXHz64A3AA8SAmx+Y2Y3Dvc5OOlSKrSSy7SXEcU8PnrIcdIjNYMIYGY3ATc1pF2YmD8fOL+f7arA3w65QKepKRVzvLiuN20Z24WuStUDahwnZdw/42SW9pZqIdY8oMZxUsYNopNZSsVcy4xD7PYWouOkjhtEJ7OUWirKtOotRMdJGTeITmZppXGInTGoxnGc9HCD6GSW9mKOnpZpIdYoucvUcVLFDaKTWUqFPOVqjWrN0payzXSXq4wo+u3oOGnid6CTWfo+EtwCgTVdlSoj21IdBeU4OzxuEJ3MUootqlYIrOmqVP1LF46TMm4QncxSNyCtEFjTVfYoU8dJGzeITmbZ0ELMtkE0s/imGr8dHSdN/A50MkupUG8hZttlWqka1Zp5C9FxUsYNopNZ+lymGQ+q6er7OLAH1ThOmrhBdDJLe4u4TOv6vYXoOOmSqkGUdKKkRyQtknReP+vPkNQhaX6czkys21vSLZIekrRQ0pRhFe+kTt+wi4y7TDvL9RaiP586Tpqk5qORlAcuBY4DlgFzJc0xs4UNWa81s7P72cWVwL+Y2a2SRgPZrhWdrWZDH2K2W4hdZW8hOk4zkOYj6SxgkZktNrMycA1w0mA2lLQ/UDCzWwHMbJ2ZdQ6dVKcZ6YsybZE+RB+H6DjpkqZB3BN4KrG8LKY18k5JD0i6TtJeMW0/YJWk/5X0Z0lfjS1OZwdiwzjEbDsH6i1cf1ON46RLs3da3AhMMbMDgVuBH8X0AnAU8GngUOBlwBn97UDSWZLmSZrX0dEx9IqdYaNVBua7y9RxmoM0DeLTwF6J5ckxrQ8zW25mPXHxcmBGnF8GzI/u1l7gBuCQ/g5iZpeZ2Uwzmzlp0qTtqd9JmVZ5dVtnxYNqHKcZSPMOnAtMkzRVUhtwKjAnmUHS7onF2cBDiW13klS3cG8AGoNxnBanVYJqusveh+g4zUBqnRZm1ivpbOBmIA9cYWYLJF0MzDOzOcAnJM0GeoEVRLeomVUlfRr4nSQB9wHfT+M8nPTI5URbPtcyQTXuMnWcdEm1F9/MbgJuaki7MDF/PnD+ANveChw4pAKdpqcVPhLc5UE1jtMUeKeFk2lKxXzmXab1oJr2gt+OjpMmfgc6maZUzGXfIFaqlIo5cjmlLcVxdmjcIDqZplTIZz7K1L+F6DjNgRtEJ9OUivmWCKpxg+g46eMG0ck0reIyHdHmBtFx0sYNopNpQlBNtl2m3WU3iI7TDLhBdDJNeyFPT2+2DWKn9yE6TlPgBtHJNKVijp4WcJn6W2ocJ33cIDqZphXGIXZ7UI3jNAVuEJ1MUyrm6M64y7SrUmWk9yE6Tuq4QXQyTRiHmO0WYpcH1ThOU+AG0ck0dZepmaUt5SXTVfY+RMdpBtwgOpmmVMxRM6hUM2wQvQ/RcZqCVA2ipBMlPSJpkaTz+ll/hqQOSfPjdGbD+rGSlkn69vCpdpqJessqq2+rqVRr9NbMDaLjNAGpfW9GUh64FDgOWAbMlTTHzBo/9HutmZ09wG6+CNw5hDKdJqe9uOEjwWNLxZTVbD1930L0PkTHSZ00W4izgEVmttjMysA1wEmD3VjSDGBX4JYh0udkgFL8ZFJWv4nYXXaD6DjNQpoGcU/gqcTyspjWyDslPSDpOkl7AUjKAf8OfHroZTrNTCnRQswinXWD6C5Tx0mdZg+quRGYYmYHArcCP4rpHwNuMrNlW9qBpLMkzZM0r6OjYwilOmmwwSBms4XY5zJ1g+g4qZNaHyLwNLBXYnlyTOvDzJYnFi8H/i3OHwEcJeljwGigTdI6M9skMMfMLgMuA5g5c2Z2QxGdfql/ZT6rQTV1g1hyl6njpE6aBnEuME3SVIIhPBV4XzKDpN3N7Nm4OBt4CMDMTkvkOQOY2Z8xdFqfrLtM632II72F6Dipk5pBNLNeSWcDNwN54AozWyDpYmCemc0BPiFpNtALrADOSEuv05yUirGFmHWXqbcQHSd10mwhYmY3ATc1pF2YmD8fOH8L+/gh8MMhkOdkgKy3ED2oxnGah2YPqnGczVIqZNsg9vUhukF0nNRxg+hkmj6XaUa/eNHtLlPHaRrcIDqZpv6mmqx+JLirHlTjBtFxUscNopNpNgTVZNQg1l2mBTeIjpM2bhCdTNOWzyFlOMq0XKW9kCOXU9pSHGeHxw2ik2kkZfojwV0V/ziw4zQLbhCdzFMq5rL7ppqyfwvRcZoFN4hO5ikV89l1mXoL0XGaBjeITuYJBjGbLcTuircQHadZcIPoZJ72Qi6zLcROd5k6TtPgBtHJPKVinp6s9iG6y9RxmgY3iE7mKRVzmXWZdpWr/to2x2kSUjWIkk6U9IikRZI2+XyTpDMkdUiaH6czY/rBku6WtEDSA5LeM/zqnWYhy0E13ZWqv6XGcZqE1L52ISkPXAocBywD5kqaY2YLG7Jea2ZnN6R1Ah8ws8ck7QHcJ+lmM1s15MKdpiPz4xC9heg4TUGaLcRZwCIzW2xmZeAa4KTBbGhmj5rZY3H+GeAFYNKQKXWamqyPQ3SXqeM0B2kaxD2BpxLLy2JaI++MbtHrJO3VuFLSLKANeHxoZDrNTpZdph5U4zjNQ7MH1dwITDGzA4FbgR8lV0raHfgx8CEz67dGlHSWpHmS5nV0dAy5YGf4yeo4xEq1RqVq7jJ1nCYhTYP4NJBs8U2OaX2Y2XIz64mLlwMz6uskjQV+BVxgZvcMdBAzu8zMZprZzEmT3KvairQXc/RksIVYN+IeVOM4zUGaBnEuME3SVEltwKnAnGSG2AKsMxt4KKa3AT8HrjSz64ZJr9OklAp5ytUa1ZqlLWWr6Pv0k7cQHacpSC3K1Mx6JZ0N3AzkgSvMbIGki4F5ZjYH+ISk2UAvsAI4I25+CvB6YIKketoZZjZ/GE/BaRLqBqWnt8rIttSK9FbTXQ6tWneZOk5zkGrtYWY3ATc1pF2YmD8fOL+f7a4CrhpygU4m2PCR4Boj21IWsxV0VnoBPKjGcZqEZg+qcZwtUm8hZi2wpqsc9HoL0XGaAzeITubZ0ELMmEGMer2F6DjNgRtEJ/OUCvUWYrYiTesG3FuIjtMcuEF0Mk+fyzRjb6vpqgfVeAvRcZoCN4hO5mnPqMu0sxyDaryF6DhNgRtEJ/P0DbvIqMvUxyE6TnPgBtHJPBv6ELPVQuzyN9U4TlPhBtHJPH1RphntQ/QWouM0B24QncyTVZdpV6VKWyFHPqe0pTiOgxtEpwXI7sD8Xg+ocZwmwg2ik3k2uEyz10J0g+g4zYMbRCfzZDeopuYBNY7TRLhBdDJPLifa8rnMvammq1z1gBrHaSJSNYiSTpT0iKRFks7rZ/0ZkjokzY/TmYl1H5T0WJw+OLzKnWajvZjLXAuxu1L1t9Q4ThOR2uefJOWBS4HjgGXAXElzzGxhQ9Zrzezshm13Bj4PzAQMuC9uu3IYpDtNSKmYpydjwy46y72Z+n6j47Q6abYQZwGLzGyxmZWBa4CTBrntCcCtZrYiGsFbgROHSKeTAdoLGXSZVmruMnWcJiJNg7gn8FRieVlMa+Sdkh6QdJ2kvbZyW2cHoVTMZ9Jl6kE1jtM8NHtQzY3AFDM7kNAK/NHW7kDSWZLmSZrX0dGx3QU6zUEpg32IXWUfduE4zUSaBvFpYK/E8uSY1oeZLTeznrh4OTBjsNsm9nGZmc00s5mTJk3aLsKd5qNUyGfQZepBNY7TTKRpEOcC0yRNldQGnArMSWaQtHticTbwUJy/GThe0nhJ44HjY5qzg1Iq5jP4LlMfduE4zURqIW5m1ivpbIIhywNXmNkCSRcD88xsDvAJSbOBXmAFcEbcdoWkLxKMKsDFZrZi2E/CaRpKxRzL12enhdhbrVGu1txl6jhNRKox32Z2E3BTQ9qFifnzgfMH2PYK4IohFehkhvZinp4M9SHWXzPnQTWO0zw0e1CN4wyK0IeYHYPYVY4fB3aD6DhNgxtEpyUoFXOZerl33Xi7y9Rxmgc3iE5LkLVxiJ1lN4iO02y4QXRagvo4RDNLW8qg6Kq3ENv8FnScZsHvRqclKBXy1Awq1YwYxL4Wor/L1HGaBTeITktQH8+XlbGIfX2IHlTjOE2DG0SnJSgVQ1HOSj9ilwfVOE7T4QbRaQnao2Hpycjr2zyoxnGaDzeITkvQ5zLNWAux5EE1jtM0+N3otASlQt1lmo0WYndsIfoHgh2nefC70WkJ6i3ElZ1lOsu95KQ4EX5z2qb9d5WrrOwss6a7Qi3aXMOoj/IwCwE9XeUqXZWNf6s1o5AXhZwo5HPkc+L+J1cG3QV/JnWcZsENotMSjGoPRfkDV/yp3/USFHIinxOFXC7+imI+R3sxR6mQp1TM0V7I017MYQYr1pdZ1VlmRWd5SFqeE0e3U8i7QXScZsENotMSHDR5HF9+x3TWdvdSM6NmhN+aUY2/vTWjmvitVGtUqjV6emt0V6p9v+t6ehGwx04l9t9jLDuPamP8yDbGjywyplQk2LDQ4lRseOYkSsUcI4p5RrTl+35HFgvkcvQdt7dq9NZq9FaN8aPa0rpcjuP0Q6oGUdKJwDcJn3+63My+PEC+dwLXAYea2TxJRcIHgw8hnMOVZvavwyTbaUIK+Rynzto7bRmO42SY1Pw1kvLApcCbgP2B90rav598Y4BPAvcmkt8NtJvZdGAG8LeSpgy5aMdxHKdlSbMDYxawyMwWm1kZuAY4qZ98XwS+AnQn0gwYJakAjADKwJoh1us4juO0MGkaxD2BpxLLy2JaH5IOAfYys181bHsdsB54FngS+JqZrRhCrY7jOE6L07QhbpJywH8An+pn9SygCuwBTAU+JellA+znLEnzJM3r6OgYMr2O4zhOtknTID4N7JVYnhzT6owBXg3cIWkpcDgwR9JM4H3Ab8ysYmYvAHcBM/s7iJldZmYzzWzmpEmThuA0HMdxnFYgTYM4F5gmaaqkNuBUYE59pZmtNrOJZjbFzKYA9wCzzWwewU36BgBJowjG8uHhPgHHcRyndUjNIJpZL3A2cDPwEPAzM1sg6WJJs7ew+aXAaEkLCIb1B2b2wNAqdhzHcVoZZeUL49sDSR3AE9uwi4nAi9tJzlDjWocG1zo0ZEkrZEvv9tC6j5m1fJ/TDmUQtxVJ88ys377KZsO1Dg2udWjIklbIlt4saU2bpo0ydRzHcZzhxA2i4ziO4+AGcWu5LG0BW4FrHRpc69CQJa2QLb1Z0poq3ofoOI7jOHgL0XEcx3EAN4ibED8tlQkypnXbPlk/jGRMa5bKQJa0jkhbw2DJktZmx12mkfiZqS8RvpzxP2Z2T8qSBiSDWr8IPAPcaGYPpSxpQDKoNUtlICtaRwNfBsYDPwbuNrPV6arqnyxpzQreQqTvyfX7hOvxGPBPks5KV1X/ZEzrOOAnhI8454HvSDouXVX9kzGtWSoDmdEa+QbQBvwv8F7gvFTVbJ5vkB2tmaCQtoAmYSIw1cxOBZD0DHCCpNlmNmfzmw47u5AtrXua2WwASeuB4yStMbN7N7/p8CApb2ZVsqF1rJmtIVtlYFcyoDW6yXcifEHnFDNbJ2kR8A+SPmJm309VYAOSJpIRrVlih2whStpH0uH1ZTN7FuiQdFpM+gOwADg2untSQ9K+ki6UdJSkdjN7GljRxFq/LOktkkpm9hjwpKTjY5afE9xmr5VUSk9pcONJ+gXwZkm5qHVpk2rdV9IPgA9GrU/TvOX1lZK+KelUSW1mtgx4QdL7Y5Zm0jpV0tsALLASEHBmzPIwoRy8VdLOKckEQNLL4731znhvvUho0DSd1iyzwxlESf8ILAH+XtKrY1o7we3wOkmj48eG/wIYsFtKOiXpYuAGYGfgXODbcXUzar0EuB7oAT7EhrFP9wOvkTTCzJ4CHgT2AXJpBa/E404AjgAOAV6m8NWUPzeh1i8BvwT+Ymb/aWY1SQWarAxErTOAa4AO4O3A5ZL2Bn4WtY5pIq3nED4q8HFJRydWfQM4UdJOZtYDPECoLw4ZdpH03VsXEv7vbuAMgmsfmkxrK7BDGcRo+J4DPgw8ChwtqRAL018ILYIPxux/BI4ivWu0H6Ev6w1mdg7hyyCHS9olamsmrVOAFwhaPw98FVgZ180D9gROiMu/BGYDYy2liK543InAX4G9gSPMbD3hyym7N4tWSeMJ1/a3ZvaNmNYevxRzN1CjecoAwDTgETO7hFBxQ7iWzwFrEmnNoPVJ4G+A/wHepvAJOoD5wCLgswBmtoTwH6wffolAeGgoEz59dxHhM3mHStoXuBN4nObRmnl2qD5EM+uR9HMzWyvpdGAGcCTwe0Ll+CvgEoXPSq2MU1o37ePAj8ysQ1IOKBJcTSsIlUvTaI034rcAJM0itGp/K+lvzex7sZXwEUlL4iZ/TUNnA2OAK4Be4PWSfsuGFuGHFT5KbaSo1cxWSvpP4JOSPk74Bugzklab2eckzaEJyoAkxQeGJ4GVkvYys6ckXU14oHgcuBX4F0kPpqk1wY1mVpH0euBg4B2E1u0LwDeBX0n6E/AsMIngSk2DF4BrzWxpNNpVwgfRO2Pf4TeaSGvmaVmDKGlcPQQ59rvUAMxsbczya+AVhD6ih8zsBeCW2AL7APA64AvDEXrfn9bYCng0aq5Fl900YFTM2zRaE+vGECqXzwJ3AP8jqTMaxTbg88CBwIVm9lyaWoGRwGFm9vHYj3QbIXT9q4T74sIm0fogwQ32GeAfCQb6Z5IeM7MfSNqd4S8DE4FVsYzWW9wQWqw1wn31lJn9WtJbgAPM7D8l7Zm21jpmVomz9wOvIniL7oqu8sckfSrqfDPwFTP7YxpaY8DXkjhflrQTcBDhOmNmda1HAm8ZLq0ti5m13ER4Kn0WeEtD+mENy28hPA0eEZfz8be9CbWeCVwZ55VILzWD1qSmRPq7gQcTyzs3gdbD4++bgY8SjPfTBENzTJNpnRV/dwfGJdLfCcxPLLcNo9bPAYuBGQ3pb4y/FwP/BOwXl98E/DmRbzjvrYG0ntBwDx0CfA14X1yeOFwaB6H1xAatJwPXx3kN5/2/I0wt1YeYCHxoI3Tsfyqx7q3ANEnFej4z+xWhv+ALkjqBd8X0nmbTCowltAxOBh6WdELU2t0MWunf27ArcG19wUJAxZAyCK371RcJQUoHAq8BbgTeIGlSE2l9RQyged42HnC9F6Hvi6i1PAxaD5B0P3AAcJSZ3ZdYNwN4WVy8HhhHGAIggjG/Nbr9h+ve2pLWPYH2RD1wP8FDcE6sB04eao1boXWPqLVeV48juEjfTogsfctwad0hSNsib4+JDW/cycXfswlRbj8APh/TRjVskyN0WD9LCAU/plm1xrQ/AKsIFfdRzaqVMJbraOA3hH6jA5tY67TE/CuJrZom1VoCDgduAX47jNe1rnEfQoBUveW3L+Er6v1tsxfhYeNWgst3xlDr3AathVgPPBHvsaObVWtcP4cQZPPz4aoHdqQp069uiz73i4ClBDfCkpj+cUJAxD3A94DTgNUWxhsiqWihQ/1lwLE2DANZt0FrgWC8LwNuNrOrm1irCK2dTwPPmNkPmlhrm4U+mRzBQFWbWGuOUAY+TuhjGu7r+gsLfVXnEoxymVBxryQEpF1tZk/G7dotBK/lCBX7kv7232RaRwLvNbP/bmKtJTPrVhiK9aiZXTXUWndEMusylTQBuBroIrgTvyPpDXH1ROB2M5tHiCK8j9BBjqTDCGOPxpvZ4mEyhtui9ZMx34eGyRhui9ZzCU++/zJMlfa2aP37GMhSGyZjuC1a/4HQT/j1lK7rf0k6gjDurQQ8YWZHAF8heAROjtu9Evi8pN3idR0OY7itWnc3s85hMobbqnWcmV3oxnDoyHKUaT3Q4DMAMdLqzZKeJHROf1vh5ber4vKDcbuVhOEMKzOi9Yc2DH1E21FrV0a0XmnD+yLkbb2unSlrfRdhCMApFvutzez3kmYD9YjNVcBXm+DeakWt/zbM5XWHJBMtxETwQZJFwNOSjorLNxAK0JsI7qfVwEVmdhxwJTFgwcweNbPlrtW1utat0lqOWvuGBCgM+TiQEBCEmT03lAbGtTpDTdO3EOt9PYnl+iDgsYS3SsySdLeZPS7pEeDlwDVmdmViN98ejpaLa3WtLaz1IUIlnY99bl8nDFf4gZld51qzqdXZmKZuIUo6G/i9pM8qhKH3YWEg/QJCCHX9hcw3Ae8juhoUAlIYpsrFtbrWVtb6G8LbXEZY+OLGHYQox2+51mxqdTalaVuIkk4hFJSzCa/Z+pKk5WZ2d+IJ7HeET+GcLekxQnDCfOJ5WcPbKVyra3Wt26y1LWr9sWvNrlZnAKwJxn4kJzaM0fo6cGoi/WrCF6E3yhfnzyW8Df4x4GTX6lpdq2t1rT5t9X+ZtgCzvsGxnwb2SqSdC8yN83nCK6GeBj4Y03IN+5jgWl2ra3WtrtWnlzqlPjBf0nTgRwS/+m1m9t7EupsIb5I5Avgu4TMyx5nZR1yra3WtrtW1OtuVtC0yYWzOGcB4wjfejk+sG0V4tdFBcfn9wOfi/CYvk3atrtW1ulbX6tNL/m/TFmBmECKsAP4WuCORnkvMjyG8OPgs1+paXatrda0+be+pKYZd2IYw8yuBbkmfiOk1STlJJxFevLvYzC5LS2fU5FqHANc6NLjWoSFLWp2tIG2L3DgRvlV2b5yfTnBBTAYmpa3NtbpW1+pas6zVp81PTdFCTGJmNwMrJfUAXwZGmtkyM+tIWdomuNahwbUODa51aMiSVmfzNJVBjK6GS4BXAWeb2VuatVC51qHBtQ4NrnVoyJJWZ8ukPuyiEUlvIoQyD/mXtbcV1zo0uNahwbUODVnS6myepjOIjuM4jpMGTeUydRzHcZy0cIPoOI7jOLhBdBzHcRzADaLjOI7jAG4QHcdxHAdwg+g424SkiyR9ejPrT5a0/yD2s1E+SRdLeuP20uk4zpZxg+g4Q8vJwBYNYmM+M7vQzH47RJocx+kHN4iOs5VIukDSo5L+ALwipn1E0lxJf5F0vaSRkl4LzAa+Kmm+pH3j9BtJ90n6P0mvHCDfDyW9K+57qaR/jevmSTpE0s2SHpf00YSuz0QND0j6QgqXxnEyTSFtAY6TJSTNAE4FDibcP/cD9wH/a2bfj3kuAT5sZv8paQ7wSzO7Lq77HfBRM3tM0mHAf5nZG/rJ13joJ83sYElfB34IHAmUgL8C35V0PDANmAUImCPp9WZ251BdC8dpNdwgOs7WcRTwczPrBIiGDODV0RDuBIwGbm7cUNJo4LXA/yQMXvsgj1s/zoPAaDNbC6yV1CNpJ+D4OP055htNMJBuEB1nkLhBdJztww+Bk83sL5LOAI7pJ08OWGVmB7+E/dffk1lLzNeXC4RW4b+a2fdewr4dx8H7EB1na7kTOFnSCEljgLfF9DHAs5KKwGmJ/GvjOsxsDbBE0rsBFDioMd9L5Gbgb2IrFEl7StplG/bnODscbhAdZysws/uBa4G/AL8G5sZV/wzcC9wFPJzY5BrgM5L+LGlfgrH8sKS/AAuAkwbIt7W6bgF+Ctwt6UHgOrbNwDrODod/7cJxHMdx8Bai4ziO4wBuEB3HcRwHcIPoOI7jOIAbRMdxHMcB3CA6juM4DuAG0XEcx3EAN4iO4ziOA7hBdBzHcRwA/j/zXWRZpxEzlgAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -1380,13 +1383,13 @@ "''" ] }, - "execution_count": 26, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "rms_results_parsed.plot()" + "kpi_results_parsed.plot()" ] }, { @@ -1408,7 +1411,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "metadata": { "pycharm": { "name": "#%%\n" @@ -1416,7 +1419,7 @@ }, "outputs": [], "source": [ - "mode_results_parsed = analysis_classes.parse_results(mode_results, t_unit=\"s\")\n" + "mode_results_parsed = analysis_classes.parse_results(mode_results, t_unit=\"s\")" ] }, { @@ -1432,7 +1435,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, "metadata": { "pycharm": { "name": "#%%\n" @@ -1464,6 +1467,7 @@ " labels\n", " uncertain\n", " mode_probability\n", + " datetime\n", " \n", " \n", " \n", @@ -1472,50 +1476,55 @@ " 1570186860\n", " 0\n", " False\n", - " 0.001262\n", + " 0.939155\n", + " 2019-10-04 11:01:00+00:00\n", " \n", " \n", " 1\n", " 1570273260\n", " 0\n", " False\n", - " 0.001833\n", + " 0.872610\n", + " 2019-10-05 11:01:00+00:00\n", " \n", " \n", " 2\n", " 1570359660\n", " 0\n", " False\n", - " 0.000154\n", + " 0.982989\n", + " 2019-10-06 11:01:00+00:00\n", " \n", " \n", " 3\n", " 1570446060\n", " 0\n", " False\n", - " 0.000546\n", + " 0.996053\n", + " 2019-10-07 11:01:00+00:00\n", " \n", " \n", " 4\n", " 1570532460\n", " 0\n", " False\n", - " 0.000025\n", + " 0.921091\n", + " 2019-10-08 11:01:00+00:00\n", " \n", " \n", "\n", "" ], "text/plain": [ - " timestamps labels uncertain mode_probability\n", - "0 1570186860 0 False 0.001262\n", - "1 1570273260 0 False 0.001833\n", - "2 1570359660 0 False 0.000154\n", - "3 1570446060 0 False 0.000546\n", - "4 1570532460 0 False 0.000025" + " timestamps labels uncertain mode_probability datetime\n", + "0 1570186860 0 False 0.939155 2019-10-04 11:01:00+00:00\n", + "1 1570273260 0 False 0.872610 2019-10-05 11:01:00+00:00\n", + "2 1570359660 0 False 0.982989 2019-10-06 11:01:00+00:00\n", + "3 1570446060 0 False 0.996053 2019-10-07 11:01:00+00:00\n", + "4 1570532460 0 False 0.921091 2019-10-08 11:01:00+00:00" ] }, - "execution_count": 28, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -1538,7 +1547,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, "metadata": { "pycharm": { "name": "#%%\n" @@ -1550,57 +1559,62 @@ "output_type": "stream", "text": [ "=== ModeId ===\n", - "request_id fae66b2396b7dde3039a2f58e287686a\n", - "from 1570186860 to 1574424060\n", + "request_id 09fa086e2bcf4d25b2ad39a442d2c5ad\n", + "from 20191004-11:01.00 to 20191122-12:01.00\n", "\n", "Labels\n", - "+----------+----------+-----------+--------------------+\n", - "| labels | counts | portion | mode_probability |\n", - "|----------+----------+-----------+--------------------|\n", - "| 0 | 17 | 34 | 17 |\n", - "| 1 | 8 | 16 | 8 |\n", - "| 2 | 25 | 50 | 25 |\n", - "+----------+----------+-----------+--------------------+\n", + "+----------+----------+-----------+--------------------+------------+\n", + "| labels | counts | portion | mode_probability | datetime |\n", + "|----------+----------+-----------+--------------------+------------|\n", + "| 0 | 17 | 34 | 17 | 17 |\n", + "| 1 | 8 | 16 | 8 | 8 |\n", + "| 2 | 25 | 50 | 25 | 25 |\n", + "+----------+----------+-----------+--------------------+------------+\n", "\n", "Lables & uncertain labels\n", - "+------------+-----------+--------------------+----------+\n", - "| | portion | mode_probability | counts |\n", - "|------------+-----------+--------------------+----------|\n", - "| (0, False) | 34 | 17 | 17 |\n", - "| (1, False) | 16 | 8 | 8 |\n", - "| (2, False) | 50 | 25 | 25 |\n", - "+------------+-----------+--------------------+----------+\n", + "+------------+-----------+--------------------+------------+----------+\n", + "| | portion | mode_probability | datetime | counts |\n", + "|------------+-----------+--------------------+------------+----------|\n", + "| (0, False) | 34 | 17 | 17 | 17 |\n", + "| (1, False) | 16 | 8 | 8 | 8 |\n", + "| (2, False) | 50 | 25 | 25 | 25 |\n", + "+------------+-----------+--------------------+------------+----------+\n", "\n", "Emerging Modes\n", - "+----+---------+-----------------+-----------------+-------------------+\n", - "| | modes | emerging_time | max_prob_time | max_probability |\n", - "|----+---------+-----------------+-----------------+-------------------|\n", - "| 0 | 0 | 1.57019e+09 | 1.57114e+09 | 0.00727616 |\n", - "| 1 | 1 | 1.57166e+09 | 1.57166e+09 | 0.0230245 |\n", - "| 2 | 2 | 1.57235e+09 | 1.57442e+09 | 0.0109123 |\n", - "+----+---------+-----------------+-----------------+-------------------+\n" + "+----+---------+-----------------+-----------------+-------------------+---------------------------+\n", + "| | modes | emerging_time | max_prob_time | max_probability | datetime |\n", + "|----+---------+-----------------+-----------------+-------------------+---------------------------|\n", + "| 0 | 0 | 1570186860 | 1570446060 | 0.996053 | 2019-10-04 11:01:00+00:00 |\n", + "| 1 | 1 | 1571655660 | 1572264060 | 0.997885 | 2019-10-21 11:01:00+00:00 |\n", + "| 2 | 2 | 1572350460 | 1573646460 | 0.989592 | 2019-10-29 12:01:00+00:00 |\n", + "+----+---------+-----------------+-----------------+-------------------+---------------------------+\n" ] }, { "data": { "text/plain": [ - "[ counts portion mode_probability\n", - " labels \n", - " 0 17 34.0 17.0\n", - " 1 8 16.0 8.0\n", - " 2 25 50.0 25.0,\n", - " portion mode_probability counts\n", - " labels uncertain \n", - " 0 False 34.0 17.0 17\n", - " 1 False 16.0 8.0 8\n", - " 2 False 50.0 25.0 25,\n", - " modes emerging_time max_prob_time max_probability\n", - " 0 0 1570186860 1571137260 0.007276\n", - " 1 1 1571655660 1571655660 0.023025\n", - " 2 2 1572350460 1574424060 0.010912]" + "[ counts portion mode_probability datetime\n", + " labels \n", + " 0 17 34.0 17 17\n", + " 1 8 16.0 8 8\n", + " 2 25 50.0 25 25,\n", + " portion mode_probability datetime counts\n", + " labels uncertain \n", + " 0 False 34.0 17 17 17\n", + " 1 False 16.0 8 8 8\n", + " 2 False 50.0 25 25 25,\n", + " modes emerging_time max_prob_time max_probability \\\n", + " 0 0 1570186860 1570446060 0.996053 \n", + " 1 1 1571655660 1572264060 0.997885 \n", + " 2 2 1572350460 1573646460 0.989592 \n", + " \n", + " datetime \n", + " 0 2019-10-04 11:01:00+00:00 \n", + " 1 2019-10-21 11:01:00+00:00 \n", + " 2 2019-10-29 12:01:00+00:00 ]" ] }, - "execution_count": 29, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -1625,7 +1639,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, "metadata": { "pycharm": { "name": "#%%\n" @@ -1634,7 +1648,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsoAAADQCAYAAAAeREeUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAolUlEQVR4nO3deZxdZZng8d9T2UhIAtkISYQEE4sQiJU2kSSmW1SixoaOjQwGYTAIjsqMW7dMxCYOdIMK7a4Nojgm3S7I0ixtuptlRtSGFjCQDhPJ0jFsCdlDdpYU9c4f7yk5lLdSVUlV3VTl9/187qfqnveec577nvOe+9z3vuecSCkhSZIk6bVqqh2AJEmSdCgyUZYkSZIqMFGWJEmSKjBRliRJkiowUZYkSZIqMFGWJEmSKjBRVruLiDERkSKiZ7Vj6SgR8a8RMbeT1nV1RGyJiA3ttLwZEfGfEbE7Iv68PZZ5gHEsjIirq7X+5kTElRHxo3ZcXoqIcc2UXRgRD7TXug5FEXFWRDxb7G9/VO14JKktTJQPcxHxVES8HBFDm0xfUnzAj6lSaIeMSolTSuk9KaW/74R1Hw98BpiQUjq2nRb7N8DfpZT6p5TuPNiFRcS5EbE8IvZExO8i4k9KZf0i4voi0d8REb9q5TKPiYibIuK5Yr4HI2JqqfztEfH/ImJ7RGyNiDsiYlSpfFRE3BUR2yJibUR8rMnyexRfQJ6LiF3F/n50K2Pb3eTxSkR8uzXzHoyI+IuIWBMRO4u4v17+Mlp8Qb0/IvZGxIqImFkqOzciVhZ1uSki/j4iBpbKT4qInxflqyPirDbE9ZXii9euYr0fbPKSrwAfL/a3JRHxi4h4sVR/K5ss7xMR8WTxPhdHxB+3Mo5pEXFfsc03R8StETGiVN4nIm6IiI3Fa37WZJ/Z73bd377c0rKL1zTbTiQdukyUBfAk8IHGJxExEehXvXCqJw69XvDjga0ppU1tnXE/72U08NuDiurVdbwTuBb4EDAAeCuwpvSS7wGDgZOKv3/RykX3B34DTC7m+3vgnyOif1H+BPDulNLRwEjgP4HvlOb/EXm/Hg6cAXwxIt5eKv9r4C3AdGAgcAHwYmsCKxK+/iml/sCxwAvAra18Xwfjn4A3pZQGAqcAdcAnS+U3AUuAIcDlwG0RMawoexCYkVI6Cng90BO4Gn6/n9wFLCLX9UeAH0VEbSvj2gP8GXAUMBf4ZkS8pVReaX/7eKkeT2ycWHwZugb4L8Xy/jdwR0T0aEUcg8j725hinbuABaXyT5G39xvJ+8zzwO8T4VZs1/3ty/tddivaiaRDVUrJx2H8AJ4C5gO/KU37CvmDNgFjimlHAf8AbAaeLuapKcp6FPNsIR/8/0cxb8/SvP8bWA+sI39A9yjKxgG/BHYU89+8n1hnkz9wtwO/AE4qpn8WuK3Ja78JfKsV67+QnER8HdgKXN1kObOAl4F9wG5gaTH9F8CHKyxje1EHbymmPwtsAuaWltmnqK9ngI3ADUDfCu93JvnDuqFY98L91UNpe34WeBx4qXEblMp/VyzvhWKZfcgf3svJicUa4KNN5jkT+I9iff8OvLFU9u/Axc1sr/HATmBgM+ULi/d+X7HuXwKj97P9dwKTK0zvA3wJeKJ43p+8/w0rveZ7wA+L/wcV731sM+u5ErgNuLmI6zGgrpnXzi3qLErT/id5X3sOuKiIZVxRNoSc8O4EHgGuAh5oUmf3AduAlcD7m1nvEOD/ANcXz2uL7T2g9Jp/Az5WYd7+5Lb8L8XzU4r6KL+He4GrSvW1iNz2ny/+f91+ttM/kX8F6VMsN5GT6d81bTsV5p0DPFJ6fmQx/4i2tJ3itW8CdpWefwf429LzM4CVrdmutLwv73fZ7L+dtKl+ffjw0bmPqgfgo8o7QE6sZhYfyieRk9615B6ZcqL8D+RepwHkHptVjQd+4GPACuA4ck/L/bw2Ub4D+G7xoXcMOUH4aFF2EzkprwGOAP64mThriw/bdwK9gHnAaqB3EeteiiSheA/rgWmtWP+FQD3wCXIvW6WE9UrgR02m/f7DvrSMDxXrvrr4IL+u+GB/Fznh6l+8/uvkZGJwUZ8/A77UzPt+G7C2NfVQ2p7/UWyL5hKIp4CZpednAGOBAE4r6vJNRdkfkRP9qcV7m1vM36d4/jJwWRHDWuDvGtcLfBD4f8X73VL8f3ZpvQuLenlrsbxvUkoam8Q8idzje1Rp2vHk5L2B/EXmwmL6APL+d0zptTcCS4r/31rM91lgA3lf/h9Ntvc+cq9mL+BScu90rwpx/Ry4svR8FjmBO4W8v/2E1ybKPwVuKcpOIX9xe6AoO5L8xepD5H3xj4p6m1Ba/nnkhC2RE6u6YvpZwPImsf0d8O3S8z8mfyFtTFzfVUyvlCjfB9xR/D8EOJv8K9MAci/rnc1sp77ktjerNO3377/UdjYX7+1B4G2lsoHAo7y6v32C3EvemLC2pe18Gnio9HxKsb6RxXv5CfCNZuZtul1b2pebXTYtt5NW168PHz46/1H1AHxUeQd4NVGeT+6Vm1V8SPYsPuDGlA705Q/sjwK/KP7/OaWeK3JimIplDCf3dPUtlX8AuL/4/x/IvX377UEBPg/cUnpeQ04y3lY8fwD4YPH/O3m196ql9V8IPNPCuq+k5UT5P0tlE4v3P7w0bSs52QtykjK2VDYdeLKZdb+N1ybKLdXDU8BFrdnm+ym/E/hU8f93KHoWS+UryQn1yOJ9LgZGAEPJycIXitf9VVF+JfkLzWnkhKzxl4CFwE9Ly+0PvAIc12R9A8mJyeeaiXcwOemdVpr2APmn7yPIPYvbKHr4yMlmIv/K0Jf8c/lm4J2l7V1OsGrIyd+fNFnv6CLeE0rTfgBcU3peW6xrHLkd7QPGl8q/yKuJ8hzg35qs47vAFRXe8xvIvdHHFs8vKMdcTPsCxa8QTaaPKt5jbfG8F7n3dF7x/7vI7f2eZup7EvB8M2V/D9zNa5PuponyVHJC2If8xWsXRXsgt4+/KuqpnpyUvrlU1qq2U2zTbeVtRv5l6adFPPXkBHxwhXkrbdeW9uVml00L7aQt9evDh4/OfzhGWY1+SE4gLiQnr2VDyR+gT5emPU3+wIX8QfBsk7JGo4t51xcnXm0nf/gfU5TPI38APhIRv42Ii5qJb2R5uSmlhmKdjTH8hFfHWZ9XPG/N+mkS+4HaWPr/hSLGptP6A8PIPUePluK5u5jeGi3VA7Tx/UTEeyLioeIkpO3An5K3OeT6+0xjrEX5cUUcLxSv+XZKaX1KaQvwtWJ+ivJ95OEsL6eUfkn+teFdlWJNKe0mJzcjS7H1JfcaPpRS+lKl+FNK28gJ2l2lcdnnAycUy/8Oeczy2lJcAH+TUnohpfQ4Ocn501eX+pq4Gop5R/JaF5CT3CdL0/bXFoaRvzzur61MbVLX55PHyzZ9z/9JHn5zfTFpN/kLRdlAchLadN515H3up8XzfcCfk39Z2EAeNnFL8Z4bT2L7bkQ8HRE7gV8BRzcdNxwRXyb3Tr8/pZSarre0/odTSrtSSi+lfELsg7xa9xeTe9RPJiek/xVYFBEjaWXbiXyFkX8lf9n7t1JR4y88Q8i997cXr2uq0nZtaV/e37L3205aW7+SqsNEWQCklJ4m/7z8p+SDfNkW8ofE6NK048k9mZB7245rUtboWXKP7tCU0tHFY2BK6eRivRtSSv8tpTSS3Et9fVS+lNZz5fVHRBTrbIzhVuBtEfE68s/QjYnyftff+PYr10qry9tiC/mD8+RSPEelfAJRa7RUD9CGeCOiD/CP5HGfw1M+Oe5fyF9eINffF0qxHp1S6pdSuiml9Dw5mSqvr/z/4xVW2TS23+83xYl6g4v32BjbncU6PtrCW+lJ/vIzEPL+nFI6M6U0LKU0lZz4P9IkrubibhpXDfC6xrhKPkhO0Mv21xY2k3sb99dWftmkrvunlC75g3eb9SQPmYGcNL8+IgaUyuto/qTN8ryklB5PKZ2WUhqSUno3+YS/xvr6DHAiMDXlEwnfWkxv3EeIiL8G3kMezrGzmXU2J5WWNQlYlFJalVJqSCndTa7Tt9CKthMRo8ljt69KKf2wyXomkXvYt6WUXiL/4nBqNLniD5W3a0v7crPLbkU7abF+JVWPibLKLgbekVLaU56YUnqF3MP0hYgYUHwY/SW5l46i7JMR8bqIGEQei9c473ryiUFfjYiBEVETEWMj4jSAiDinSG4hn8iSyGNOm7oFOCMiTo+IXuQPl5fIJ8mQUtpMHg6xgPxT7PLWrL+VNgJjioTpoBS9kzcCX4+IY+D3lzJ7dysXsd96OAC9yT1hm4H6iHgPr+3xvRH4WERMjezIiDijlJAtAD4R+XJug8hXAlhUlP2KPFb7cxHRMyJmAG8H7ikt/08j4o8jojd5KMFDKaVni/d2GzkxmlvU2+9FxPsi4sRiew4j99AtKXqXGy93NiAiekfEfy3e09cAUkq/I5/odnlxWa+TgHNLcQNMLtbRkzzW9SXgodL630LuxW96tYtbgAsjYkJE9AOuaCwo2tHtwJVFL+IE8tCDRouA2oi4ICJ6FY83F/ERER8u7TMTgM8B/7dY9iry2PQrIuKIyJd3eyP5SxARcX7kSw02JpNfaJy3mPbGYr5+EXEpeYjAwqJ4QLEdtkfE4PJ7Kub9HPlXnJkppa3sR0QcHRHvLtbVMyLOJyeGdxcv+Q15/359sb+9kzx8ZVlLbSfy5dh+Tr704Q0VVv8b4IMRcVSxf/134Lmih7cxvua2a0v7ckvL3l872W/9SqqyjhrT4aNrPGhmvCqlMcrF80HkxHgzuefrf/HqVS968upVI56k8lUvvkPuVdlBHr93blH2t+Te0N3kKzJ8ZD+xnkW+LNgO8hUSTm5SfkGx3v/ZZPr+1n8hzZxAVpp/CHnM6/PAY8W0X/DaMcrlKxeMy03rNctYS3GiInnc7BfJ40J3kq848clm1v02SmOUW6qH5rbn/rZ5sb02kk9w+yH5J/mrS+WzyInAdnLv3q28euJkL/LP/9vJP9t/CziiNO/JwK/JY0ufAM4qlS3k1ate7CYnIycUZacV23JvUdb4+JOi/BPkfW1Psd6fUrpiBjm53VyUPwBMaVIHo8jJ2W6aXOmDP7zqxRKKkxtLr/kuxVU0KtTvZUVMla56MYycIDV31YsTgX8uYt9KTvwmFWULiu20p9iGX25S12PI++UL5HHk5W38BfI+uKf4+z1gSKn8y+T9ezd5yEB5TPHIYrm7ySc+fpTXtu9E/iJR3k5/VZq/6fv/TVGv28lfPt5Zem2Qr/P9TPGa5cAFpfJm2w45wUxN4tjdpB3/mHxy6vZivzi1Ddt1f/vyfpfNftpJS/Xrw4eP6j4azySWJEmSVOLQC0mSJKkCE2VJkiSpAhNlSZIkqQITZUmSJKmCni2/pHlDhgxNJ5wwpp1CkSRJ6h4effTRLSml1t5MSoeog0qUTzhhDIsXL26vWCRJkrqFiHi65VfpUOfQC0mSJKkCE2VJkiSpAhNlSZIkqYKDGqMsSZKkQ9ejjz56TM+ePb8PnIIdpE01AMvq6+s/PHny5E2VXmCiLEmS1E317Nnz+8cee+xJw4YNe76mpiZVO55DSUNDQ2zevHnChg0bvg/MrvQav1lIkiR1X6cMGzZsp0nyH6qpqUnDhg3bQe5tr/yaToxHkiRJnavGJLl5Rd00mw+bKEuSJEkVOEZZkiTpMDF0KHVbt7Zf/jdkCPVbtrB0f6+JiMmzZ8/edtdddz0JsG/fPo455pi6SZMm7bn//vtXt3Zdo0aNmrh48eLlI0aMqG/N61esWNH7/e9//+u3b9/ec+LEiXv/8R//8ckjjjiiTb3r9ihLkiQdJtozSW7t8vr27duwcuXKvrt37w6AO+64Y+Dw4cP3tWcclfzlX/7l6z7+8Y9vfOaZZ5YdddRR9d/85jeHtnUZJsqSJEnqUDNnztxx6623Hg1w0003DT777LO3NZZt3Lixx8yZM8fW1tZOqKurG//www/3BdiwYUOPGTNmvGHcuHEnz5kzZ3RKr3YGX3/99YMnTpx40vjx4yecd955o+vrX9vJ3NDQwK9//esBH/rQh54HuOiii7b+7Gc/O7qtcZsoS5IkqUNdcMEF226++eZBe/fujeXLl/ebPn36nsayefPmjayrq9u7atWqJ6666qp1c+fOPQHgsssuGzl9+vTdq1ev/u1ZZ521ff369b0BHnvssSNuu+22wYsXL16xYsWKJ2pqatINN9wwpLy+jRs39hwwYMArvXr1AmDMmDEvb9y4sXdb4zZRliRJUoeaOnXqC2vXru1z4403Dp45c+aOctkjjzwy4OKLL94KMHv27F3bt2/vuW3btpqHHnpowEUXXbQV4Nxzz90xcODAVwDuvvvuAcuWLetXV1d30vjx4yc88MADA9esWdOnI+L2ZD5JkiR1uFmzZm2/4oorjrv33ntXbtq06YBz0JRSnHPOOVuvu+66dc29Zvjw4fW7du3qsW/fPnr16sVTTz3Ve/jw4S+3dV32KEuSJKnDXXLJJVsuvfTS50499dQXytOnTp26a8GCBUMAFi1aNGDQoEH1gwcPbpg2bdquhQsXDgG45ZZbBu7cubMHwKxZs3YuWrRo0Lp163pCHuO8atWq1wyrqKmpYdq0absWLFgwCOAHP/jBkDPPPHN7W2M2UZYkSTpMDBlCqy6t1hHLGzt27L758+dvajr92muvfW7JkiX9amtrJ1x++eWjFi5c+CTANddc89yDDz7Yf9y4cSfffvvtg0aMGPEywOTJk1+cP3/+utNPP722trZ2wjve8Y7aZ599tlfT5X71q19d++1vf/vY448//pTnn3++56c+9aktbX1/UT6DsK2mTJmSFi9efMDzS5IkdUcR8WhKaUq141i6dOlTdXV1bU4QDydLly4dWldXN6ZSmT3KkiRJUgUmypIkSVIFJsqSJElSBSbKkiRJUgUHlSjv6/C7dEuSJEnVcVA3HHn8cYhor1Ck7uvAry2jdvFjD1SSpLZz6IUkSdLhYih1BJPb7TGUupZWGRGT3/ve957Q+Hzfvn0MGjSo7u1vf/u4toQ+atSoievXr291J+8Xv/jFYccff/wpETG5LfOVmShLkiQdLrYe3GiCA1le3759G1auXNl39+7dAXDHHXcMHD58eIcP4D3ttNN233fffatGjhzZ5ltXNzJRliRJUoeaOXPmjltvvfVogJtuumnw2Wefva2xbOPGjT1mzpw5tra2dkJdXd34hx9+uC/Ahg0besyYMeMN48aNO3nOnDmjyzfJu/766wdPnDjxpPHjx08477zzRtfX/+ENAmfMmPHCiSeeeMBJMpgoS5IkqYNdcMEF226++eZBe/fujeXLl/ebPn36nsayefPmjayrq9u7atWqJ6666qp1c+fOPQHgsssuGzl9+vTdq1ev/u1ZZ521ff369b0BHnvssSNuu+22wYsXL16xYsWKJ2pqatINN9wwpCPiNlGWJElSh5o6deoLa9eu7XPjjTcOnjlz5o5y2SOPPDLg4osv3gowe/bsXdu3b++5bdu2moceemjARRddtBXg3HPP3TFw4MBXAO6+++4By5Yt61dXV3fS+PHjJzzwwAMD16xZ06cj4m7fcSqSJElSBbNmzdp+xRVXHHfvvfeu3LRp0wHnoCmlOOecc7Zed91169ozvkrsUZYkSVKHu+SSS7Zceumlz5166qkvlKdPnTp114IFC4YALFq0aMCgQYPqBw8e3DBt2rRdCxcuHAJwyy23DNy5c2cPgFmzZu1ctGjRoHXr1vWEPMZ51apVvTsiZhNlSZKkw8UQ/vCst05a3tixY/fNnz9/U9Pp11577XNLlizpV1tbO+Hyyy8ftXDhwicBrrnmmucefPDB/uPGjTv59ttvHzRixIiXASZPnvzi/Pnz151++um1tbW1E97xjnfUPvvss72aLvfqq68+Zvjw4W/cuHFj77q6uglz5swZ3da3F+UzCNs8c0xJsPiA55cOF95wpMq84YikThbn82hKaUq141i6dOlTdXV1W6odx6Fs6dKlQ+vq6sZUKrNHWZIkSarARFmSJEmqwERZkiRJqsBEWZIkSarARFmSJEmqwERZkiRJqsA780mSJB0ubhtax8tb2y//6z2knv+yZen+XhIRk2fPnr3trrvuehJg3759HHPMMXWTJk3ac//9969u7apGjRo1cfHixctHjBjRqms3z549+4THH3/8yF69eqVJkybt+dGPfvR0nz592nTFVnuUJUmSDhftmSS3cnl9+/ZtWLlyZd/du3cHwB133DFw+PDh+9o1jgrOP//8bWvWrFm2cuXK37744ovxjW98Y2hbl2GiLEmSpA41c+bMHbfeeuvRADfddNPgs88+e1tj2caN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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsoAAADQCAYAAAAeREeUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAotUlEQVR4nO3de5xV5Xno8d8zgAoKyE0EomAgE0RxsBCBeBqtTlNSDamhBqPHkGia1HNykpzEQ0xDYlpNos09RmOjDbRNNKj10tDWaBvTVBM1KMGiAiV4AeR+v3hhnPf88a4dNuOGmYGZ2czw+34++zN71rvXWs96937Xfva73rVWpJSQJEmStLeaagcgSZIkHYpMlCVJkqQKTJQlSZKkCkyUJUmSpApMlCVJkqQKTJQlSZKkCkyU1S4iYkREpIjoXu1Y2ktE/GtEzOigdV0bERsiYk1HrK+ZWN4aEb+JiO0R8fFqx3MgIuLsiFh5gPNeEBErImJHRJzeynnbrF1ExJyIuPZgl3OoraujHIrbFBHPR0R9teOQtIeJsko759ciYmCT6QuKL/URVQrtkBERX4yIH5ZPSym9K6X0dx2w7hOBTwNjUkrHt9EyR0TEQxGxKyIWl385R8SREfHNiHgpIjZHxE0R0aNs9pnAQyml3iml77RgXeMi4oliXU9ExLgm67o5ItZGxKaI+ElEDGsy/0UR8WxE7IyI30bE77dgnUdGxN9GxAtFQv+biHhXiyqneV8DPpZSOialtKBsnW+JiFeafk6aifNrEfHfRYyLI+IDTcpTsd07isetLVzucRFxe/Eebo2IRyJiYou3cP/LHhMR84vPxuaI+LeIGFNWfmxE/F1ErCseXzzA9fz7vn5URMRZRdm1ZdNmFJ+vbRGxMiL+uqU/SCJiUkQ8WHwG10fEnRExpIXzHtB7JKlzMFFWyXPA+0v/RMRYoFf1wqmeQ7AX/ERgY0ppXWtn3M+23A4sAAYAnwPuiohBRdlVwATgVKAW+D1gVtm8w4GnW7j+I4D7gB8C/YC/A+4rpgN8ApgMnAYMBTYDN5TN/4fA9cCHgN7AO4DlLVh1d2AFcBbQt4j/jjb60bev7b8R+HUrl7UTeDc5xhnAtyPi7U1eU1ck5ceklD7cwuUeU8QyHuhPrvd/johjWhlfJS8Bf1osdyDwT8CPy8q/Sd53jADOAC6NiA+1ZgURcQnQYx9lPYBvA481KeoFfLKIaSJwLnBlC1fZD/h+EfNwYDswuxUhH8h7JKkzSCn5OMwfwPPkROLXZdO+Rk6gEjCimNYX+HtgPfBCMU9NUdatmGcDOZH538W83cvm/VtgNbAKuBboVpSNAv4D2FrMP3c/sU4lJylbgJ8DJxfTPwPc1eS13wa+04L1fxB4hPwFvxG4tslypgCvAbuBHcDCYvrPgQ9XWMaWog7eXkxfAawDZpQt88iivl4E1gI3Az0rbG898DLQWKx7zv7qoez9/AzwFPBq6T0oK68tpvcum/afwJ8Xz+cDF5aVXQysKJ7/DHgdeKWIpxY4j5x0byu29Ytl876zqO8om/YiMKV4/j3gr8vKzgOWlP3/S+Dy/Xwezgd+U9TDL4HT9vPap4BpxfOzgZXAX5A/c88Dl5S9tifwdfLnfCvwMPkztIP8ud4J/Lbs9RcBdwBfBH5YNn2/7aJCjP8EfLrs/wSM2sdr5xSfmwfJid1/AMP3s/3bgPHF85HFe7mxiO1HwLFlrz0deLJY7lxyInxthWV2L7ZpV9m0DcDbyv7/C+A/m7TLFUU8TwC/32SZfYGlwKRKdUX+IffXxfa/Iaay130K+Elrt6l47e8B25v5PPRswXu0z7ZRlF9aLHMjeX/7PFC/r23y4cNHxz/sUVbJo0CfiDg5IrqRv/ibHkK+gfwl9mZyT90HyD19AH9GTlpOJ/dG/mmTeecADeSk+HRyAlXqebkGeIDcq/MmynoUy0VELbkn9JPAIOBfgJ8UvZM/Bv44InoXr+0GvA+4rQXrh9wDtRwYDHypfL0ppfuBL5MT+GNSSnWV4iuW8RS5l/a2Iqa3Fev8n8B3y3r0riMnmeOK8mHAF5ouMKX0b8C7gJeKdX+wmXooeT/5S/rYlFJDk8WeAixPKW0vm7awmF4STZ6/KSL6ppTOISfVpaEHS8lJ4weAY4t1XhERf1K2rqdSSqlseU+VretvgTMjYmhE9AIuAf4VfvceTgAGRcSy4nD6dyOiZ1F+OvAD4KPkOv8b4J8i4sim9RgRg8n1Xd4TfDy593EYuTf3+xHx1qLsa+Te2LeTe05nAq+klErvX11KaWSx7D7AX5ETs6aaaxflMfYkf16a9lb/IiLWRMTdFXrELyG3n4HkHww/2seyxwFHAMtKk4CvkHvxTwZOICf5paMA9wL/UGz7ncC0CsvcQv7BdAO5fexV3OT5qWX//5r8ue9Pbid3RsRRZeVfJv+AesN4/IgYDlxGru/mvIOiLlu6TZXmLVT6PDSWle/rPdpn2yiGq3yPnCwPJX+G39SC7ZLUkaqdqfuo/oOiF4PcQ/wVcg/qg+TeokQ+HNmN3Ks6pmy+jwI/L57/jKJHsvj/ncW83cnJ56uU9ZiSE7mHiud/Tz7s+aZm4vw8cEfZ/zXk3sqzi/8fBj5QPP9Dih6/Fqz/g8CLzaz7i5T1FBbTfs7ePcr/XVY2ttj+wWXTNpIThCB/gY4sK5sMPLePdZ8NrGxFPTwPXLafbbkUeLTJtC+xp7f6WnLv+CByMvlYsS1Dmm73Ppb/LeCbZbH+uEn5jyh61sg/vH5cLL+B3PvWvygbWkyfDwwhJ4OPAF8qyr8HXNNk2UuAs5pM6wH8G/A3Teq0ATi6bNodRbw15F78un1s3149iOQe0s9U+pywn3ZRYbl/B9zP3r3v7yAnuMcC3wUWsecozZzyuiUPt3gdOKHJcvsA/wV8dj/v2Z8AC8rW+VKTOH5J5R7lo4H/BZxXNu2HwN3koTKjgN8Cr+5n3ZtLdU3+MfEb8n5jRNO6Ig/jmV62/fvqEb6MfMRg4AFs02nAJoqe7hZ8Hvb5HjXTNr7Q5P07mryPtUfZh49D6GGPssr9A/kw+wfJyWu5geSE44WyaS+Qe+MgJzUrmpSVDC/mXR0RW4qeqL8BjivKZ5KTx8cj4umIuGwf8Q0tX25KqbFYZymG29gzzvpi9vQmN7d+msR+oNaWPX+5iLHptGPICWgv4ImyeO4vprdEc/UA+9+eHeTkqVwf8iFpyEnzAnLC8ktyT9xu9t6+34mIiZFPDFwfEVuBPyd/XlqyrhvJw1AGkBOFuyl6lCnqELghpbQ6pbQB+Abwx8X04cCnS3VY1OMJ5PopxVZD/ly/BnysSRybU0o7y/5/oZh3IHAUOcHbr6Kntp485KaS/bWL8uV8ldzr+r6U0u9631NKv0gpvZZS2kIez30SuQe4ZEXZa3eQE7zy7e8J/IT8w+grZdMHR8SPI2JVRGwjJ7el92wosKo8jn3FXdTfzcDfR0SpPX2c/N79NzmxvZ2ctJbWfWXkkzO3Fu9ZX2Bg8V7dBHwivfEoCBHxbvJwobmVYil73Z+Qf/C/q/jMtHibImIU+fP3iZTSfxaT9/t52N971Ezb2OuzUdTlxv1tm6SOZ6Ks30kpvUA+qe+PyQlLuQ3kZGl42bQTyT2ZkMf+ntCkrGQFuUd3YErp2OLRJ6V0SrHeNSmlP0spDSX3Ut9UfGE19VL5+iMiinWWYrgTODsi3gRcwJ5Eeb/rL21+5VppcXlrbCAnEqeUxdM37Tms35zm6gH2H+/TwJtLw1QKdcV0Ukovp5Q+llIallJ6M/nL+4kiIa/kNvLY2hNSSn3JiVPp0PvTwGlFjCWnseew9jhyT/amlNKr5MP4Z0TEwJTSZnKCVb4t5c9XkHuXjy179Eop3V5WL39LPqIwLaW0u0nc/SLi6LL/TyTX7QbykIKR+9jecmeTez5fjHzpviuBaRHxZFG+v3ZBEedfkofXvDOltK2Z9SX2Htbwu2UXw3r6F9tAMQTlXnIdfrTJcr5cLGtsSqkPeWhQabmrgWFN3rM3xF2mhvzDbxhA8V5eklI6vmhjNcDjRUy/T/5h/D6gX0rpWPKY3yD/gJoAzC3qsnRi5MpivnOBCcUQhzXAdOCTEXFfWR1MAW4B3p1S+q+yGJvdpmJYx7+Rj1L8Q1lRaz4PsPd7tL+2sddnoxh6NKCF65DUQUyU1dTlwDlNetpIKb1OPjT9pYjoXXypfIo945jvAD4eEW+KiH7kE25K864mj0H+ekT0iYiaiBgZEWcBRMSFRXIL+TBsYu/xfyV3AOdFxLnFme+fJifAvyzWs548LGA2eRjDsy1ZfwutBUYUvV4HpUg4bwG+WeqFi4hhEfFHLVzEfuuhBetfSu4tvjoijoqIC8jJ6z+WxTI0sknk4QhX72eRvYFNKaVXIuIMcm9+yc/JwwE+HvmSbaVe3Z8Vf38NfCAi+hbb8r/I47FLPYGzgf8T+XJn/YD/C8wrym4B/rzotYuIODoiziv7AfA9cs/eu1NKpd7ppv4yIo4oErHzgTuL9+cHwDeKeugWEZOjwthn8pChkeSEfxw5EfpnoPRe7rNdAETEZ4v6qk8pbWxSdkrkS+t1K5Lgr5N/DD1b9rI/joj/EXkM7jXknuMVRV3eRf5BNqPCj5ze5N7+rZEvx/f/ysp+RR6W8vGI6BER7yVfvaIU1x9GxOlFXH3IvfybS3EVbWtAUf4u4CPk4Tyl9TaQTwjuHhFfYM8Rh63kXtZSXZaOHIwnD//5PHvG9Y8jJ6C3UJwnERHnkIf1TEspPd5ke5vbpmHkz+R3U0o3l8+4v89DC96j/bWNu4Dzy96/v8LvZOnQU+2xHz6q/2AfZ1pTNka5+L8fOTFeT+7N+wJ7rnrRnT1XjXiOyle9+B65d2sr+dD+RUXZX5O/XHaQD29+ZD+xXgA8UyzjP8i9suXllxbr/X9Npu9v/R8EHm6mjgaQx0BvBp4spv2cvccoP1z2+lG5ee21jJXA/yieH0Xu1VtOPiP+WeDj+1j32ZSNUW6uHvb1fjaZf0QR/8vkcb31ZWXvKJaxqyi7pMm8v9vu4v8/JR/G3k5OYr/L3uN0Tydf3eBl8lUHTm9Srz8iXxVkS1HHZ5SV9yAfjt9CPrnrO8BRZeVTyMn2FnIP3Z3k5GR48TkoXZ2j9LikvE7JVxrYQL4Sx6Vly+1JHk+6qqjjX9Cyqxx8scm2N9cuEvlHTnmMf1GUnVPU/86ifu4F3lK27DnsuerFjiLGk4qys4pl72qy7NK421OK92QH+UfTp9l7HPwEchspXSFiLsV4XuBCYHEx73ryD4PTyuZ9H7lXe1ex7D8qK+tGTjq3Fe/XTPa9/xlRXlcVyudQNsYYeIicDJdv77+2cJuuLtZVPu+O5j4PLXiPmmsbM8ifPa964cPHIfqIlNryiLIkSZLUNXiYR5IkSarARFmSJEmqwERZkiRJqsBEWZIkSaqg+8HMPGDAwHTSSSPaKBRJkqSu4YknntiQUmrpjaR0iDqoRPmkk0Ywf/78topFkiSpS4iIine0VOfi0AtJkiSpAhNlSZIkqQITZUmSJKmCgxqjLEmSpEPXE088cVz37t1vBU7FDtKmGoFFDQ0NHx4/fvy6Si8wUZYkSeqiunfvfuvxxx9/8qBBgzbX1NSkasdzKGlsbIz169ePWbNmza3A1Eqv8ZeFJElS13XqoEGDtpkkv1FNTU0aNGjQVnJve+XXdGA8kiRJ6lg1Jsn7VtTNPvNhE2VJkiSpAscoS5IkHSYGDqRu48a2y/8GDKBhwwYW7u81ETF+6tSpm+67777nAHbv3s1xxx1XN27cuJ0PPfTQspaua9iwYWPnz5//7JAhQxpa8vrFixcf8b73ve/NW7Zs6T527Nhd//iP//jcUUcd1aredXuUJUmSDhNtmSS3dHk9e/ZsXLJkSc8dO3YEwD333NNn8ODBu9syjko+9alPveljH/vY2hdffHFR3759G7797W8PbO0yTJQlSZLUrurr67feeeedxwLcfvvt/adNm7apVLZ27dpu9fX1I2tra8fU1dWNfuyxx3oCrFmzptuZZ575llGjRp0yffr04Snt6Qy+6aab+o8dO/bk0aNHj7n44ouHNzTs3cnc2NjIr371q94f+tCHNgNcdtllG3/yk58c29q4TZQlSZLUri699NJNc+fO7bdr16549tlne02ePHlnqWzmzJlD6+rqdi1duvSZa665ZtWMGTNOArjqqquGTp48eceyZcuevuCCC7asXr36CIAnn3zyqLvuuqv//PnzFy9evPiZmpqadPPNNw8oX9/atWu79+7d+/UePXoAMGLEiNfWrl17RGvjNlGWJElSu5o4ceLLK1euPPKWW27pX19fv7W87PHHH+99+eWXbwSYOnXq9i1btnTftGlTzaOPPtr7sssu2whw0UUXbe3Tp8/rAPfff3/vRYsW9aqrqzt59OjRYx5++OE+y5cvP7I94vZkPkmSJLW7KVOmbLn66qtPeOCBB5asW7fugHPQlFJceOGFG2+88cZV+3rN4MGDG7Zv395t9+7d9OjRg+eff/6IwYMHv9baddmjLEmSpHZ3xRVXbLjyyitfOuOMM14unz5x4sTts2fPHgAwb9683v369Wvo379/46RJk7bPmTNnAMAdd9zRZ9u2bd0ApkyZsm3evHn9Vq1a1R3yGOelS5fuNayipqaGSZMmbZ89e3Y/gB/84AcDzj///C2tjdlEWZIk6TAxYAAturRaeyxv5MiRu2fNmrWu6fTrr7/+pQULFvSqra0d87nPfW7YnDlzngO47rrrXnrkkUeOGTVq1Cl33313vyFDhrwGMH78+FdmzZq16txzz62tra0dc84559SuWLGiR9Plfv3rX195ww03HH/iiSeeunnz5u6f+MQnNrR2+6L8DMLWmjBhQpo/f/4Bzy9JktQVRcQTKaUJ1Y5j4cKFz9fV1bU6QTycLFy4cGBdXd2ISmX2KEuSJEkVmChLkiRJFZgoS5IkSRWYKEuSJEkVHFSivLvd79ItSZIkVcdB3XDkqacgoq1CkbquA7+2jNrEj9xRSZJaz6EXkiRJh4uB1BGMb7PHQOqaW2VEjH/Pe95zUun/3bt3069fv7o/+IM/GNWa0IcNGzZ29erVLe7k/fKXvzzoxBNPPDUixrdmvnImypIkSYeLjQc3muBAltezZ8/GJUuW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", "text/plain": [ "
" ] @@ -1650,7 +1664,7 @@ "''" ] }, - "execution_count": 30, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -1667,14 +1681,14 @@ } }, "source": [ - "Lastly, we can combine the information from the RMS and ModeId features to display a boxplot of the \"RMS\" for each one of the operating modes.\n", + "Lastly, we can combine the information from the KPIDemo and ModeId features to display a boxplot of the \"RMS\" for each one of the operating modes.\n", "\n", - "First, we merge the \"RMS\" and \"ModeId\" dataframes." + "First, we merge the \"KPI\" and \"ModeId\" dataframes." ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 32, "metadata": { "pycharm": { "name": "#%%\n" @@ -1703,104 +1717,142 @@ " \n", " \n", " timestamps\n", - " rms\n", - " rms_dc\n", - " dc\n", - " utilization\n", + " rms_acc\n", + " peak_acc\n", + " peak2peak_acc\n", + " variance_acc\n", + " crest_factor_acc\n", + " utilization_acc\n", + " dc_component_acc\n", + " datetime_x\n", " labels\n", " uncertain\n", " mode_probability\n", - " Date\n", + " datetime_y\n", " \n", " \n", " \n", " \n", " 0\n", " 1570186860\n", - " 0.647086\n", - " 0.662108\n", - " -0.140237\n", + " 0.647094\n", + " 2.686565\n", + " 5.313293\n", + " 0.418730\n", + " 4.151739\n", " 1\n", + " -0.140239\n", + " 1970-01-19 04:09:46.860000+00:00\n", " 0\n", " False\n", - " 0.001262\n", - " 2019-10-04 11:01:00\n", + " 0.939155\n", + " 2019-10-04 11:01:00+00:00\n", " \n", " \n", " 1\n", " 1570273260\n", - " 0.647123\n", - " 0.662183\n", - " -0.140420\n", + " 0.647131\n", + " 2.691755\n", + " 5.367004\n", + " 0.418778\n", + " 4.159523\n", " 1\n", + " -0.140425\n", + " 1970-01-19 04:11:13.260000+00:00\n", " 0\n", " False\n", - " 0.001833\n", - " 2019-10-05 11:01:00\n", + " 0.872610\n", + " 2019-10-05 11:01:00+00:00\n", " \n", " \n", " 2\n", " 1570359660\n", - " 0.646619\n", - " 0.661652\n", - " -0.140239\n", + " 0.646627\n", + " 2.715255\n", + " 5.414856\n", + " 0.418126\n", + " 4.199108\n", " 1\n", + " -0.140243\n", + " 1970-01-19 04:12:39.660000+00:00\n", " 0\n", " False\n", - " 0.000154\n", - " 2019-10-06 11:01:00\n", + " 0.982989\n", + " 2019-10-06 11:01:00+00:00\n", " \n", " \n", " 3\n", " 1570446060\n", - " 0.646873\n", - " 0.661923\n", - " -0.140347\n", + " 0.646881\n", + " 2.685151\n", + " 5.351562\n", + " 0.418455\n", + " 4.150921\n", " 1\n", + " -0.140351\n", + " 1970-01-19 04:14:06.060000+00:00\n", " 0\n", " False\n", - " 0.000546\n", - " 2019-10-07 11:01:00\n", + " 0.996053\n", + " 2019-10-07 11:01:00+00:00\n", " \n", " \n", " 4\n", " 1570532460\n", - " 0.646643\n", - " 0.661714\n", - " -0.140423\n", + " 0.646649\n", + " 2.726611\n", + " 5.395325\n", + " 0.418155\n", + " 4.216521\n", " 1\n", + " -0.140429\n", + " 1970-01-19 04:15:32.460000+00:00\n", " 0\n", " False\n", - " 0.000025\n", - " 2019-10-08 11:01:00\n", + " 0.921091\n", + " 2019-10-08 11:01:00+00:00\n", " \n", " \n", "\n", "" ], "text/plain": [ - " timestamps rms rms_dc dc utilization labels uncertain \\\n", - "0 1570186860 0.647086 0.662108 -0.140237 1 0 False \n", - "1 1570273260 0.647123 0.662183 -0.140420 1 0 False \n", - "2 1570359660 0.646619 0.661652 -0.140239 1 0 False \n", - "3 1570446060 0.646873 0.661923 -0.140347 1 0 False \n", - "4 1570532460 0.646643 0.661714 -0.140423 1 0 False \n", + " timestamps rms_acc peak_acc peak2peak_acc variance_acc \\\n", + "0 1570186860 0.647094 2.686565 5.313293 0.418730 \n", + "1 1570273260 0.647131 2.691755 5.367004 0.418778 \n", + "2 1570359660 0.646627 2.715255 5.414856 0.418126 \n", + "3 1570446060 0.646881 2.685151 5.351562 0.418455 \n", + "4 1570532460 0.646649 2.726611 5.395325 0.418155 \n", "\n", - " mode_probability Date \n", - "0 0.001262 2019-10-04 11:01:00 \n", - "1 0.001833 2019-10-05 11:01:00 \n", - "2 0.000154 2019-10-06 11:01:00 \n", - "3 0.000546 2019-10-07 11:01:00 \n", - "4 0.000025 2019-10-08 11:01:00 " + " crest_factor_acc utilization_acc dc_component_acc \\\n", + "0 4.151739 1 -0.140239 \n", + "1 4.159523 1 -0.140425 \n", + "2 4.199108 1 -0.140243 \n", + "3 4.150921 1 -0.140351 \n", + "4 4.216521 1 -0.140429 \n", + "\n", + " datetime_x labels uncertain mode_probability \\\n", + "0 1970-01-19 04:09:46.860000+00:00 0 False 0.939155 \n", + "1 1970-01-19 04:11:13.260000+00:00 0 False 0.872610 \n", + "2 1970-01-19 04:12:39.660000+00:00 0 False 0.982989 \n", + "3 1970-01-19 04:14:06.060000+00:00 0 False 0.996053 \n", + "4 1970-01-19 04:15:32.460000+00:00 0 False 0.921091 \n", + "\n", + " datetime_y \n", + "0 2019-10-04 11:01:00+00:00 \n", + "1 2019-10-05 11:01:00+00:00 \n", + "2 2019-10-06 11:01:00+00:00 \n", + "3 2019-10-07 11:01:00+00:00 \n", + "4 2019-10-08 11:01:00+00:00 " ] }, - "execution_count": 31, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df_u0001 = pd.merge_asof(df_rms, df_mode, on=\"timestamps\")\n", + "df_u0001 = pd.merge_asof(df_kpi, df_mode, on=\"timestamps\")\n", "df_u0001.head()" ] }, @@ -1818,7 +1870,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 33, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:17.670019Z", @@ -1846,7 +1898,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 36, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:17.902871Z", @@ -1857,19 +1909,27 @@ } }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/oskar/viking_unix/mvg/env/lib/python3.8/site-packages/pandas/core/arrays/categorical.py:2630: FutureWarning: The `inplace` parameter in pandas.Categorical.set_categories is deprecated and will be removed in a future version. Removing unused categories will always return a new Categorical object.\n", + " res = method(*args, **kwargs)\n" + ] + }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 33, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1881,7 +1941,7 @@ } ], "source": [ - "plotting.modes_boxplot(df_u0001, \"rms\", SOURCE_ID)" + "plotting.modes_boxplot(df_u0001, \"rms_acc\", SOURCE_ID)" ] }, { @@ -1908,7 +1968,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.8.2" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/check_version.ipynb b/docs/source/content/examples/check_version.ipynb index fd9ca65b..45b578d3 100644 --- a/docs/source/content/examples/check_version.ipynb +++ b/docs/source/content/examples/check_version.ipynb @@ -2,7 +2,6 @@ "cells": [ { "cell_type": "markdown", - "id": "seasonal-brush", "metadata": {}, "source": [ "# Check Version Example\n", @@ -13,7 +12,6 @@ { "cell_type": "code", "execution_count": 1, - "id": "independent-reverse", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:06.090370Z", @@ -22,7 +20,6 @@ }, "outputs": [], "source": [ - "import json\n", "import sys\n", "import logging\n", "\n", @@ -33,7 +30,6 @@ { "cell_type": "code", "execution_count": 2, - "id": "swiss-designation", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:06.093950Z", @@ -51,7 +47,6 @@ { "cell_type": "code", "execution_count": 3, - "id": "peaceful-iceland", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:06.382877Z", @@ -60,14 +55,13 @@ }, "outputs": [], "source": [ - "TOKEN = \"NO TOKEN\" # no token is needed for querying the version\n", + "TOKEN = \"NO TOKEN\"\n", "ENDPOINT = \"https://api.beta.multiviz.com\"\n", "session = MVG(ENDPOINT, TOKEN)" ] }, { "cell_type": "markdown", - "id": "dated-patch", "metadata": {}, "source": [ "It is advised to always check the version of the API against the MVG version. The `check_version` method will return a dictionary with the server API version, the mvg version and the API version the MVG version it has been tested against. If there is mismatch or incompatibility it will raise an exception and if there is a newer compatible version running on the server it will raise a warning. In the latter case, you should upgrade the MVG version (but you are not required to do so)." @@ -76,7 +70,6 @@ { "cell_type": "code", "execution_count": 4, - "id": "documented-gothic", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:06.387884Z", @@ -92,15 +85,25 @@ "output_type": "stream", "text": [ "Checking versions for:https://api.beta.multiviz.com\n", - "mvg version: 0.9.0\n", - "Highest tested API version: 0.2.0\n" + "mvg version: 0.9.7\n", + "Highest tested API version: 0.2.7\n" ] + }, + { + "data": { + "text/plain": [ + "{'api_version': '0.2.7',\n", + " 'mvg_highest_tested_version': '0.2.7',\n", + " 'mvg_version': '0.9.7'}" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "version = json.dumps(session.check_version())\n", - "\n", - "\n" + "session.check_version()" ] } ], @@ -120,7 +123,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.8.2" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/error_handling.ipynb b/docs/source/content/examples/error_handling.ipynb index bbe8b515..24262660 100644 --- a/docs/source/content/examples/error_handling.ipynb +++ b/docs/source/content/examples/error_handling.ipynb @@ -106,7 +106,7 @@ }, "outputs": [], "source": [ - "root_logger.setLevel(logging.DEBUG)" + "root_logger.setLevel(logging.ERROR)" ] }, { @@ -125,16 +125,7 @@ "start_time": "2021-03-18T10:13:44.005184Z" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 19:53:10,807 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", - "2021-09-22 19:53:10,999 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"GET / HTTP/1.1\" 200 115\n" - ] - } - ], + "outputs": [], "source": [ "ENDPOINT = \"https://api.beta.multiviz.com\"\n", "session = MVG(ENDPOINT, TOKEN)" @@ -162,20 +153,11 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 19:53:11,007 - INFO - mvg.mvg - Getting API info for: https://api.beta.multiviz.com\n", - "2021-09-22 19:53:11,010 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", - "2021-09-22 19:53:11,193 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"GET / HTTP/1.1\" 200 115\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.2.0\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}\n" + "{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.2.7\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}\n" ] } ], @@ -202,16 +184,7 @@ "start_time": "2021-03-18T10:13:44.273408Z" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 19:53:11,205 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", - "2021-09-22 19:53:11,394 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"GET / HTTP/1.1\" 200 115\n" - ] - } - ], + "outputs": [], "source": [ "unauth_session = MVG(ENDPOINT, \"PASSKEY\")" ] @@ -225,7 +198,7 @@ } }, "source": [ - "We need to call a method requiring authentication. Check http://endpoint/docs to see which methods require authentication, they have a lock icon." + "We need to call a method requiring authentication. Check https://api.beta.multiviz.com/docs to see which methods require authentication, they have a lock icon." ] }, { @@ -238,23 +211,14 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 19:53:11,405 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 19:53:11,407 - INFO - mvg.mvg - listing sources\n", - "2021-09-22 19:53:11,409 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", - "2021-09-22 19:53:11,598 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"GET /sources/ HTTP/1.1\" 401 25\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ ">>> Provoke Unathorized call\n", "OUCH\n", - "401 Client Error: Unauthorized for url: https://api.beta.multiviz.com/sources/\n" + "401 Client Error: Unauthorized for url: https://api.beta.multiviz.com/sources/\n", + "{\"detail\":\"Unauthorized\"}\n" ] } ], @@ -270,7 +234,9 @@ " # raise_for_status from the requests\n", " # We'll print it and see that it\n", " # states an authorization error (401)\n", - " print(exc)" + " print(exc)\n", + " # Get more info about the error from the response attribute\n", + " print(exc.response.text)" ] }, { @@ -295,24 +261,14 @@ "scrolled": true }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 19:53:11,611 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 19:53:11,614 - INFO - mvg.mvg - creating source with source id=illegal%name\n", - "2021-09-22 19:53:11,616 - INFO - mvg.mvg - metadata: {}\n", - "2021-09-22 19:53:11,619 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", - "2021-09-22 19:53:11,797 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"POST /sources/ HTTP/1.1\" 422 120\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ ">>> Provoke illegal source Id name\n", "OUCH\n", - "422 Client Error: Unprocessable Entity for url: https://api.beta.multiviz.com/sources/\n" + "422 Client Error: Unprocessable Entity for url: https://api.beta.multiviz.com/sources/\n", + "{\"detail\":[{\"loc\":[\"body\",\"source_id\"],\"msg\":\"can only contain letters, numbers and underscores\",\"type\":\"value_error\"}]}\n" ] } ], @@ -328,7 +284,9 @@ " # raise_for_status from the requests\n", " # We'll print it and see that it\n", " # states an authorization error (401)\n", - " print(exc)" + " print(exc)\n", + " # Get more info about the error from the response attribute\n", + " print(exc.response.text)" ] }, { @@ -352,39 +310,14 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 19:53:11,808 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 19:53:11,809 - INFO - mvg.mvg - creating measurement from source id=\n", - "2021-09-22 19:53:11,812 - INFO - mvg.mvg - duration: -3\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - ">>> Non existing source\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 19:53:11,815 - INFO - mvg.mvg - timestamp: -5\n", - "2021-09-22 19:53:11,816 - INFO - mvg.mvg - meta data: {}\n", - "2021-09-22 19:53:11,820 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", - "2021-09-22 19:53:11,991 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"POST /sources//measurements HTTP/1.1\" 404 22\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ + ">>> Non existing source\n", "404 Client Error: Not Found for url: https://api.beta.multiviz.com/sources//measurements\n", "Details on error\n", - "{'detail': 'Not Found'}\n" + "{\"detail\":\"Not Found\"}\n" ] } ], @@ -400,7 +333,8 @@ "except HTTPError as exc:\n", " print(exc)\n", " print(\"Details on error\")\n", - " print(exc.response.json())" + " # Get more info about the error from the response attribute\n", + " print(exc.response.text)" ] }, { @@ -412,7 +346,8 @@ } }, "source": [ - "## Parameter Value Out of Range" + "## Parameter Value Out of Range\n", + "Sometimes, it is possible to pass a value that it is out of range of the expected, as in this example where the values for the duration and timestamp parameters are negative values. " ] }, { @@ -425,39 +360,14 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 19:53:12,003 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 19:53:12,005 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-09-22 19:53:12,007 - INFO - mvg.mvg - duration: -3\n", - "2021-09-22 19:53:12,008 - INFO - mvg.mvg - timestamp: -5\n", - "2021-09-22 19:53:12,008 - INFO - mvg.mvg - meta data: {}\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - ">>> Parameter value out of range\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 19:53:12,012 - DEBUG - urllib3.connectionpool - Starting new HTTPS connection (1): api.beta.multiviz.com:443\n", - "2021-09-22 19:53:12,206 - DEBUG - urllib3.connectionpool - https://api.beta.multiviz.com:443 \"POST /sources/u0001/measurements HTTP/1.1\" 422 101\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ + ">>> Parameter value out of range\n", "422 Client Error: Unprocessable Entity for url: https://api.beta.multiviz.com/sources/u0001/measurements\n", "Details on error\n", - "{'detail': [{'loc': ['body', 0, 'timestamp'], 'msg': 'Timestamp cannot be negative', 'type': 'value_error'}]}\n" + "{\"detail\":[{\"loc\":[\"body\",0,\"timestamp\"],\"msg\":\"ensure this value is greater than or equal to 0\",\"type\":\"value_error.number.not_ge\",\"ctx\":{\"limit_value\":0}}]}\n" ] } ], @@ -474,7 +384,8 @@ " print(exc)\n", " # Retrieve details\n", " print(\"Details on error\")\n", - " print(exc.response.json())" + " # Get more info about the error from the response attribute\n", + " print(exc.response.text)" ] }, { @@ -539,7 +450,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.8.2" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/labeling.ipynb b/docs/source/content/examples/labeling.ipynb index 92e51ef9..b52ab1f8 100644 --- a/docs/source/content/examples/labeling.ipynb +++ b/docs/source/content/examples/labeling.ipynb @@ -54,18 +54,18 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'api_version': '0.2.5',\n", - " 'mvg_highest_tested_version': '0.2.3',\n", - " 'mvg_version': '0.9.4'}" + "{'api_version': '0.2.7',\n", + " 'mvg_highest_tested_version': '0.2.7',\n", + " 'mvg_version': '0.9.7'}" ] }, - "execution_count": 3, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -97,18 +97,21 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'source_id': 'u0001',\n", - " 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'},\n", + " 'meta': {'assetId': 'assetJ',\n", + " 'measPoint': 'mloc01',\n", + " 'location': 'cancun',\n", + " 'timezone': 'Europe/Stockholm'},\n", " 'properties': {'data_class': 'waveform', 'channels': ['acc']}}" ] }, - "execution_count": 4, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -122,12 +125,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now that we know that the source exists we need to check it's measurements to know which ones to label" + "Now that we know that the source exists we need to check its measurements to know which ones to label." ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -138,7 +141,7 @@ " {'timestamp': 1570359660, 'meta': {}, 'duration': 2.8672073400507907}]" ] }, - "execution_count": 5, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -157,7 +160,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -182,7 +185,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -192,20 +195,20 @@ " 'label': 'bearing_failure',\n", " 'severity': 3,\n", " 'notes': 'Imaginary bearing failure',\n", - " 'label_timestamp': '2021-10-20 07:18:02'},\n", + " 'label_timestamp': '2021-11-11 15:56:50'},\n", " {'timestamp': 1570273260,\n", " 'label': 'bearing_failure',\n", " 'severity': 3,\n", " 'notes': 'Imaginary bearing failure',\n", - " 'label_timestamp': '2021-10-20 07:18:02'},\n", + " 'label_timestamp': '2021-11-11 15:56:50'},\n", " {'timestamp': 1570359660,\n", " 'label': 'bearing_failure',\n", " 'severity': 3,\n", " 'notes': 'Imaginary bearing failure',\n", - " 'label_timestamp': '2021-10-20 07:18:02'}]" + " 'label_timestamp': '2021-11-11 15:56:50'}]" ] }, - "execution_count": 7, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -223,7 +226,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -232,10 +235,10 @@ "{'label': 'bearing_failure',\n", " 'severity': 3,\n", " 'notes': 'Imaginary bearing failure',\n", - " 'label_timestamp': '2021-10-20 07:18:02'}" + " 'label_timestamp': '2021-11-11 15:56:50'}" ] }, - "execution_count": 8, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -255,7 +258,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -265,20 +268,20 @@ " 'label': 'OK',\n", " 'severity': 0,\n", " 'notes': 'This was an OK measurement',\n", - " 'label_timestamp': '2021-10-20 07:18:02'},\n", + " 'label_timestamp': '2021-11-11 15:56:50'},\n", " {'timestamp': 1570273260,\n", " 'label': 'OK',\n", " 'severity': 0,\n", " 'notes': 'This was an OK measurement',\n", - " 'label_timestamp': '2021-10-20 07:18:02'},\n", + " 'label_timestamp': '2021-11-11 15:56:50'},\n", " {'timestamp': 1570359660,\n", " 'label': 'bearing_failure',\n", " 'severity': 3,\n", " 'notes': 'Imaginary bearing failure',\n", - " 'label_timestamp': '2021-10-20 07:18:02'}]" + " 'label_timestamp': '2021-11-11 15:56:50'}]" ] }, - "execution_count": 9, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -309,7 +312,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -318,7 +321,7 @@ "[]" ] }, - "execution_count": 10, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, @@ -358,7 +361,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -382,7 +385,8 @@ "hash": "a44fa91c5dfe8381243a89b49ad51245e1b4984ebdbff837585626a5fdba33e0" }, "kernelspec": { - "display_name": "Python 3.8.5 64-bit ('env': venv)", + "display_name": "Python 3", + "language": "python", "name": "python3" }, "language_info": { @@ -395,9 +399,8 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" - }, - "orig_nbformat": 4 + "version": "3.8.2" + } }, "nbformat": 4, "nbformat_minor": 2 diff --git a/docs/source/content/examples/sources_and_measurements.ipynb b/docs/source/content/examples/sources_and_measurements.ipynb index a927c664..2d54732a 100644 --- a/docs/source/content/examples/sources_and_measurements.ipynb +++ b/docs/source/content/examples/sources_and_measurements.ipynb @@ -2,7 +2,6 @@ "cells": [ { "cell_type": "markdown", - "id": "knowing-literacy", "metadata": {}, "source": [ "# Sources and Measurements Example\n", @@ -13,7 +12,6 @@ { "cell_type": "code", "execution_count": 1, - "id": "front-height", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.678492Z", @@ -24,12 +22,10 @@ "source": [ "import json\n", "import os\n", - "import sys\n", - "import logging\n", "from pathlib import Path\n", "\n", + "from tqdm.notebook import tqdm\n", "import pandas as pd\n", - "import requests\n", "from requests import HTTPError\n", "\n", "# import mvg library with python bindings to mvg-API\n", @@ -38,7 +34,6 @@ }, { "cell_type": "markdown", - "id": "subsequent-guinea", "metadata": { "ExecuteTime": { "end_time": "2021-03-04T14:04:45.710183Z", @@ -55,7 +50,6 @@ { "cell_type": "code", "execution_count": 2, - "id": "national-gallery", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.681622Z", @@ -70,36 +64,6 @@ }, { "cell_type": "markdown", - "id": "illegal-great", - "metadata": {}, - "source": [ - "This is Viking Analytics default logging setup which can be adapted to suit your needs.\n", - "Log messages are printed from `mvg` library, see the source code for details." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "meaning-backing", - "metadata": { - "ExecuteTime": { - "end_time": "2021-03-18T09:54:16.688245Z", - "start_time": "2021-03-18T09:54:16.683121Z" - } - }, - "outputs": [], - "source": [ - "root_logger = logging.getLogger()\n", - "root_logger.setLevel(\"INFO\")\n", - "formatter = logging.Formatter(\"%(asctime)s - %(levelname)s - %(name)s - %(message)s\")\n", - "stream_handler = logging.StreamHandler(stream=sys.stderr)\n", - "stream_handler.setFormatter(formatter)\n", - "root_logger.addHandler(stream_handler)" - ] - }, - { - "cell_type": "markdown", - "id": "awful-graduation", "metadata": {}, "source": [ "## Downloading the Data\n", @@ -110,30 +74,20 @@ }, { "cell_type": "code", - "execution_count": 4, - "id": "cubic-infection", + "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.800754Z", "start_time": "2021-03-18T09:54:16.689464Z" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "fatal: destination path 'va-data-charlie' already exists and is not an empty directory.\r\n" - ] - } - ], + "outputs": [], "source": [ "!git clone https://github.com/vikinganalytics/va-data-charlie.git" ] }, { "cell_type": "markdown", - "id": "ordered-experience", "metadata": {}, "source": [ "We are going to use six of the sources from the charlie dataset with IDs `u0001` to `u0006`." @@ -141,8 +95,7 @@ }, { "cell_type": "code", - "execution_count": 5, - "id": "occupational-paradise", + "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.804606Z", @@ -157,7 +110,6 @@ }, { "cell_type": "markdown", - "id": "governmental-biodiversity", "metadata": {}, "source": [ "## Connect to the API\n", @@ -168,8 +120,7 @@ }, { "cell_type": "code", - "execution_count": 6, - "id": "gross-tribune", + "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.957584Z", @@ -184,7 +135,6 @@ }, { "cell_type": "markdown", - "id": "vulnerable-costume", "metadata": {}, "source": [ "We now check if the server is alive. The hello message contains, amongst others the API version." @@ -192,8 +142,7 @@ }, { "cell_type": "code", - "execution_count": 7, - "id": "pressing-product", + "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.111625Z", @@ -202,28 +151,24 @@ }, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 20:11:08,132 - INFO - mvg.mvg - Getting API info for: https://api.beta.multiviz.com\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.2.0\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}\n" - ] + "data": { + "text/plain": [ + "{'api': {'name': 'MultiViz Engine API',\n", + " 'version': 'v0.2.7',\n", + " 'swagger': 'http://api.beta.multiviz.com/docs'}}" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "hello_message = json.dumps(session.say_hello())\n", - "print(hello_message)" + "session.say_hello()" ] }, { "cell_type": "markdown", - "id": "assumed-radical", "metadata": {}, "source": [ "## Check Database\n", @@ -238,51 +183,27 @@ }, { "cell_type": "code", - "execution_count": 8, - "id": "timely-template", + "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.247583Z", "start_time": "2021-03-18T09:54:17.113206Z" } }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 20:11:08,315 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 20:11:08,318 - INFO - mvg.mvg - listing sources\n", - "2021-09-22 20:11:08,490 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 20:11:08,491 - INFO - mvg.mvg - retrieving source with source id=u0001\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Retrieved sources\n", - "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", - "Source info retrieved for one source: {'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n" - ] - } - ], + "outputs": [], "source": [ "sources = session.list_sources()\n", "\n", - "print(\"Retrieved sources\")\n", "for src in sources:\n", - " print(src)\n", " # While the list returned contains all information\n", " # about all known sources, it is also possible\n", " # to query for a single source by its id\n", " s_info = session.get_source(src['source_id'])\n", - " print(f\"Source info retrieved for one source: {s_info}\")" + " print(f\"Source info retrieved:\\n{s_info}\\n\")" ] }, { "cell_type": "markdown", - "id": "capital-aviation", "metadata": {}, "source": [ "The example below revolves around a source with source id u0001" @@ -290,8 +211,7 @@ }, { "cell_type": "code", - "execution_count": 9, - "id": "preceding-utilization", + "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.250783Z", @@ -305,7 +225,6 @@ }, { "cell_type": "markdown", - "id": "informative-creature", "metadata": {}, "source": [ "To make sure we start from a clean slate we delete our resource in case it exists." @@ -313,8 +232,7 @@ }, { "cell_type": "code", - "execution_count": 10, - "id": "sorted-nothing", + "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.408675Z", @@ -322,47 +240,35 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 20:11:08,690 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 20:11:08,691 - INFO - mvg.mvg - retrieving source with source id=u0001\n", - "2021-09-22 20:11:08,881 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 20:11:08,881 - INFO - mvg.mvg - deleting source with source id=u0001\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "Deleting u0001\n" + "Source u0001 does not exist\n" ] } ], "source": [ "try:\n", " source = session.get_source(SOURCE_ID)\n", - " print(f\"Deleting {SOURCE_ID}\")\n", " session.delete_source(SOURCE_ID)\n", + " print(f\"Source {SOURCE_ID} deleted\")\n", "except HTTPError:\n", " print(f\"Source {SOURCE_ID} does not exist\")" ] }, { "cell_type": "markdown", - "id": "clinical-detective", "metadata": {}, "source": [ "## Build measurements\n", "\n", - "Now we want to (re) build the source and the attached measurements from scratch" + "Now we want to (re) build the source and the attached measurements from scratch. In this example, we have a json file with all the information needed to create each source." ] }, { "cell_type": "code", - "execution_count": 11, - "id": "private-support", + "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.413080Z", @@ -374,7 +280,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "creating\n", + "Creating meta info\n", "{'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}\n" ] } @@ -384,13 +290,12 @@ "m_file_name = REF_DB_PATH / SOURCE_ID / \"meta.json\"\n", "with open(m_file_name, \"r\") as json_file:\n", " meta = json.load(json_file)\n", - "print(\"creating\")\n", + "print(\"Creating meta info\")\n", "print(meta)" ] }, { "cell_type": "markdown", - "id": "assured-monroe", "metadata": {}, "source": [ "Create the source and check for it" @@ -398,8 +303,7 @@ }, { "cell_type": "code", - "execution_count": 12, - "id": "hairy-latin", + "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.688070Z", @@ -407,22 +311,11 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 20:11:09,108 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 20:11:09,110 - INFO - mvg.mvg - creating source with source id=u0001\n", - "2021-09-22 20:11:09,111 - INFO - mvg.mvg - metadata: {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}\n", - "2021-09-22 20:11:09,288 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 20:11:09,289 - INFO - mvg.mvg - retrieving source with source id=u0001\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "Retrieved\n", + "Recreated source info:\n", "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n" ] } @@ -430,13 +323,12 @@ "source": [ "session.create_source(SOURCE_ID, meta, channels=[\"acc\"]) # create\n", "source = session.get_source(SOURCE_ID)\n", - "print(\"Retrieved\")\n", + "print(\"Recreated source info:\")\n", "print(source)" ] }, { "cell_type": "markdown", - "id": "standing-league", "metadata": {}, "source": [ "Update the source" @@ -444,8 +336,7 @@ }, { "cell_type": "code", - "execution_count": 13, - "id": "blocked-fairy", + "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.983670Z", @@ -453,22 +344,11 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 20:11:09,473 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 20:11:09,475 - INFO - mvg.mvg - updating source with source id=u0001\n", - "2021-09-22 20:11:09,476 - INFO - mvg.mvg - metadata: {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}\n", - "2021-09-22 20:11:09,654 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 20:11:09,655 - INFO - mvg.mvg - retrieving source with source id=u0001\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "Retrieved\n", + "Updated source info\n", "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n" ] } @@ -477,18 +357,17 @@ "meta['updated'] = \"YES! I have been updated\"\n", "session.update_source(SOURCE_ID, meta) # update\n", "source = session.get_source(SOURCE_ID)\n", - "print(\"Retrieved\")\n", + "print(\"Updated source info\")\n", "print(source)" ] }, { "cell_type": "markdown", - "id": "considered-former", "metadata": {}, "source": [ "Upload measurements to source. Measurements are tied to sources, they consist of\n", "\n", - "- an array of floating point values\n", + "- an array of floating point values with a header indicating the channel name\n", "- timestamp when the values were sampled\n", "- a field for the duration of the measurement\n", "- meta information to be stored along the measurement" @@ -496,8 +375,7 @@ }, { "cell_type": "code", - "execution_count": 14, - "id": "original-colombia", + "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.986967Z", @@ -511,7 +389,6 @@ }, { "cell_type": "markdown", - "id": "friendly-mustang", "metadata": {}, "source": [ "`meas` now contains a list of timestamps representing the measurements in our repo we upload from iterate over all of them." @@ -519,8 +396,7 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "endangered-beaver", + "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:15.657580Z", @@ -528,6302 +404,453 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 20:11:09,897 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 20:11:09,898 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-09-22 20:11:09,899 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-09-22 20:11:09,900 - INFO - mvg.mvg - timestamp: 1570186860\n", - "2021-09-22 20:11:09,901 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570186860.csv\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 20:11:10,840 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 20:11:10,841 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-09-22 20:11:10,842 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-09-22 20:11:10,842 - INFO - mvg.mvg - timestamp: 1570273260\n", - "2021-09-22 20:11:10,843 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570273260.csv\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 20:11:11,835 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 20:11:11,836 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-09-22 20:11:11,837 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-09-22 20:11:11,837 - INFO - mvg.mvg - timestamp: 1570359660\n", - "2021-09-22 20:11:11,838 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "Read 40000 samples\n", - "Read meta: {'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading ~/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570359660.csv\n" + "Uploading measurements to source u0001\n" ] }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "2021-09-22 20:11:12,961 - INFO - mvg.mvg - endpoint https://api.beta.multiviz.com\n", - "2021-09-22 20:11:12,962 - INFO - mvg.mvg - creating measurement from source id=u0001\n", - "2021-09-22 20:11:12,962 - INFO - mvg.mvg - duration: 2.8672073400507907\n", - "2021-09-22 20:11:12,963 - INFO - mvg.mvg - timestamp: 1570446060\n", - "2021-09-22 20:11:12,964 - INFO - mvg.mvg - meta data: {'sampling_rate': 13950.857142857141}\n" - ] - }, + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b490d8ad7129476db88072eb28e25f45", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + " 0%| | 0/50 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timestampT_outT_downT_kitchenWATTT_upT_brine_inT_brine_outT_cellar
02018-02-01T00:00:00Z1.97605338.36718120.5121052.78016740.0280183.6900002.06851410.965206
12018-02-01T01:40:00Z2.38000036.94000020.1900003.04533339.0600003.5600001.99148610.924431
22018-02-01T03:25:00Z2.21122337.71592020.1900003.06000039.8402403.5983921.96160810.982982
32018-02-01T05:10:00Z1.96495637.94000020.2500003.15157940.0237893.6113302.06867010.888049
42018-02-01T06:55:00Z0.34913437.55129320.4064573.25716739.8568603.6900002.12000010.941380
\n", + "" + ], "text/plain": [ " timestamp T_out T_down T_kitchen WATT T_up \\\n", "0 2018-02-01T00:00:00Z 1.976053 38.367181 20.512105 2.780167 40.028018 \n", @@ -125,11 +190,11 @@ "2 3.598392 1.961608 10.982982 \n", "3 3.611330 2.068670 10.888049 \n", "4 3.690000 2.120000 10.941380 " - ], - "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
timestampT_outT_downT_kitchenWATTT_upT_brine_inT_brine_outT_cellar
02018-02-01T00:00:00Z1.97605338.36718120.5121052.78016740.0280183.6900002.06851410.965206
12018-02-01T01:40:00Z2.38000036.94000020.1900003.04533339.0600003.5600001.99148610.924431
22018-02-01T03:25:00Z2.21122337.71592020.1900003.06000039.8402403.5983921.96160810.982982
32018-02-01T05:10:00Z1.96495637.94000020.2500003.15157940.0237893.6113302.06867010.888049
42018-02-01T06:55:00Z0.34913437.55129320.4064573.25716739.8568603.6900002.12000010.941380
\n
" + ] }, + "execution_count": 15, "metadata": {}, - "execution_count": 4 + "output_type": "execute_result" } ], "source": [ @@ -139,22 +204,124 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "We loaded the `.csv` file into a dataframe object and printed out the first five rows. The timestamp was read as string timestamps, but for the Vibium API we need the timestamps to be in milliseconds since EPOCH. So we need to do some data wrangling in order to get it to the correct data type.\n", "\n", "We can use the function `pandas.to_datetime()` to convert a column into datetime objects. Then we can convert the timestamps into integers, which will automatically get converted to nanoseconds since EPOCH. By dividing by 1e6 we get the same time in milliseconds. We can see that the conversion was successful by printing the first five rows again." - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 16, "metadata": {}, "outputs": [ { - "output_type": "execute_result", + "name": "stderr", + "output_type": "stream", + "text": [ + ":1: FutureWarning: casting datetime64[ns, UTC] values to int64 with .astype(...) is deprecated and will raise in a future version. Use .view(...) instead.\n", + " data_df[\"timestamp\"] = pd.to_datetime(data_df[\"timestamp\"]).astype(\"int64\") // 1000000\n" + ] + }, + { "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", + "
timestampT_outT_downT_kitchenWATTT_upT_brine_inT_brine_outT_cellar
015174432000001.97605338.36718120.5121052.78016740.0280183.6900002.06851410.965206
115174492000002.38000036.94000020.1900003.04533339.0600003.5600001.99148610.924431
215174555000002.21122337.71592020.1900003.06000039.8402403.5983921.96160810.982982
315174618000001.96495637.94000020.2500003.15157940.0237893.6113302.06867010.888049
415174681000000.34913437.55129320.4064573.25716739.8568603.6900002.12000010.941380
\n", + "
" + ], "text/plain": [ " timestamp T_out T_down T_kitchen WATT T_up \\\n", "0 1517443200000 1.976053 38.367181 20.512105 2.780167 40.028018 \n", @@ -169,11 +336,11 @@ "2 3.598392 1.961608 10.982982 \n", "3 3.611330 2.068670 10.888049 \n", "4 3.690000 2.120000 10.941380 " - ], - "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
timestampT_outT_downT_kitchenWATTT_upT_brine_inT_brine_outT_cellar
015174432000001.97605338.36718120.5121052.78016740.0280183.6900002.06851410.965206
115174492000002.38000036.94000020.1900003.04533339.0600003.5600001.99148610.924431
215174555000002.21122337.71592020.1900003.06000039.8402403.5983921.96160810.982982
315174618000001.96495637.94000020.2500003.15157940.0237893.6113302.06867010.888049
415174681000000.34913437.55129320.4064573.25716739.8568603.6900002.12000010.941380
\n
" + ] }, + "execution_count": 16, "metadata": {}, - "execution_count": 5 + "output_type": "execute_result" } ], "source": [ @@ -182,33 +349,33 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "To upload the data to the API we need to convert the dataframe into a dictionary on the format {column: values}. Fortunately, dataframes have a method to do just that, called `to_dict()`. It has an argument for changing the orientation of the resulting dictionary. By using `to_dict(\"list\")` we will get it on the correct format. \n", "\n", ".. note:: The dictionary must have a `\"timestamp\"` key and at least one more column, corresponding to a tracked variable. The `to_dict(\"list\")` method will not include the index, so it is important to have the timestamp as a column in the data and not as an index." - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ - "data_dict = data_df.to_dict(\"list\")\n" + "data_dict = data_df.to_dict(\"list\")" ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "Now that the data has been converted to the correct format we are ready to create the source and upload some measurements. When creating a tabular source, you must define the columns that the data will contain ahead of time. This is to prevent arbitrary data to be uploaded to the source. Besides the columns argument, creating a tabular source works the exact same way as creating a waveform source." - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -220,22 +387,32 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "We can check that the source was uploaded correctly by getting the source information." - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 19, "metadata": {}, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ - "{'meta': {'location': 'Molnlycke'},\n 'properties': {'columns': ['T_out',\n 'T_down',\n 'T_kitchen',\n 'WATT',\n 'T_up',\n 'T_brine_in',\n 'T_brine_out',\n 'T_cellar'],\n 'data_class': 'tabular'},\n 'source_id': 'heatpump'}\n" + "{'meta': {'location': 'Molnlycke'},\n", + " 'properties': {'columns': ['T_out',\n", + " 'T_down',\n", + " 'T_kitchen',\n", + " 'WATT',\n", + " 'T_up',\n", + " 'T_brine_in',\n", + " 'T_brine_out',\n", + " 'T_cellar'],\n", + " 'data_class': 'tabular'},\n", + " 'source_id': 'heatpump'}\n" ] } ], @@ -245,15 +422,15 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "Next, let's upload the data we prepared to the source" - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -264,17 +441,17 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ - "Now that we have a source with measurements we can request an analysis of the data from the server. Requesting analyses for tabular data works the same way as it does for waveform data. Although not all features will work for tabular data. The RMS feature for example will only work with waveform data. Another thing to keep in mind is that when requesting population analyses, all sources to be analyzed simultaneously must have the same data class.\n", + "Now that we have a source with measurements we can request an analysis of the data from the server. Requesting analyses for tabular data works the same way as it does for waveform data. Although not all features will work for tabular data. The KPIDemo feature for example will only work with waveform data. Another thing to keep in mind is that when requesting population analyses, all sources to be analyzed simultaneously must have the same data class.\n", "\n", "For now we will simply run the mode identification algorithm" - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -286,15 +463,15 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "To make the results easier to work with we can load them into an analysis class. There exists one for each analysis feature. Once the analysis is finished and we have received the results, we can instatiate the analysis class with the results dictionary." - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": { "tags": [] }, @@ -306,39 +483,86 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "\n", "The analysis class makes it very convenient to view the results. Let's use the `ModeId.plot()` method to get an overview of the results." - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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OXMOVLU1jpmNGD9+fP0TTzyxE+DUqVP07t07NHz48GPr16/f3t6y+vXrN6yysnJrUVFRu/pubmlp4TOf+Uy/J598siArK8vNnDnzjVj9OLdFibKIiIhIJ5HIJLm988vNzW3Ztm1bbmNjo11++eVuzZo1+X369DmVyDhi+d73vtdz9+7dXV555ZUt2dnZhJ/kFw81vRARERGRDlVWVnZ41apVVwIsX768cOLEifXhYXV1ddllZWUDi4uLh4RCoZKNGzfmAuzbty977NixNw4aNGjo5MmT+0c+JG/x4sWFw4YNG1xSUjJk6tSp/Zubzz3J/PDDD/desGDB3uzsbAD69evX7qcIhilRFhEREZEONX369PoVK1YUNDU12datW3uMGTPmWHjYnDlz+oZCoaaampqXFyxYUDtjxozrAebOndt3zJgxjdu3b39pwoQJDXv37u0KsHnz5u6rV68urKysrK6urn45KyvLLVmypGd0ma+//nq3H//4xwU33XTT4Pe85z03vvjii93ijVuJsoiIiIh0qNLS0uO7d+/utnTp0sKysrLDkcM2bdqUN2vWrIMA48ePP9rQ0JBTX1+ftWHDhryZM2ceBJgyZcrh/Pz80wDr1q3L27JlS49QKDS4pKRkyDPPPJO/Y8eOc5LgkydPWvfu3d2WLVu2zpo1640777xzQLxxq42yiIiIiHS48vLyhvnz51/71FNPbdu/f/8F56DOOZs0adLBRYsW1bY1Xp8+fU5+9KMfPQQwffr0hk996lMD4i1LZ5RFREREpMPNnj37wD333LNn1KhRxyM/Ly0tPbps2bKeAGvXrs0rKChoLiwsbBk9evTRioqKngArV67MP3LkSDZAeXn5kbVr1xaEb86rq6vLrqmp6Rpd3oc+9KGGdevW5QH88pe/zOvfv/+b8casM8oiIiIinURubs/mRHcP195xBw4ceCpW92wLFy7cM23atAHFxcVDcnNzWyoqKnYCPPDAA3smTpx4w6BBg4aOHDmysaio6CTAiBEjTsybN6923LhxxS0tLXTp0sU99NBDrxUXF5+MnO9Xv/rVfbfffvv1ixcv7tOjR4+WpUuX7op3+SzyDsK4J7aRDioveHrpeBdeuynmUUt2BOewqemzdt3T2k9Tgb13ZLJDOK9bFvwiKeXe3HJbQuc3/7702T+jpd63nVwYe845l/Sdvqqq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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "''" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "analysis.plot()" ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ ".. note:: Gray stripes in the plot correspond to gaps in measurements and not a third mode.\n", "\n", "When you are finished with the example you can go ahead and delete the source" - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "session.delete_source(\"heatpump\")" ] } - ] -} \ No newline at end of file + ], + "metadata": { + "interpreter": { + "hash": "ee585b89b750dc1146ba89a2fe8627247123d548cada017644b010d09cffe3df" + }, + "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.8.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/source/content/features/RMS.md b/docs/source/content/features/RMS.md deleted file mode 100644 index 441403b8..00000000 --- a/docs/source/content/features/RMS.md +++ /dev/null @@ -1,67 +0,0 @@ -# Root Mean Square (RMS) - -.. image:: ../img/rms_sales.png - -## What does RMS do? - -RMS calculates the Root Mean Square of vibration samples over the -vibration measurements under a source. - -## Use cases for the algorithm - -* Determining trends in the vibration level over time. An increasing - trend may indicate a developing failure. - -* Comparing similar assets in terms of their RMS value. - - -## How does RMS work? - -The samples of each measurement are processed according to the -following formula: - -.. math:: RMS = \sqrt{ \frac{1}{n} \left( x_1^2 + x_2^2 + \dots + x_n^2 \right) } - -The unit of the calculated value is the same as the unit of the -samples. -The plot below shows a series of acceleration samples and the -calculated RMS. - -.. image:: ../img/rms_plot.png - -## Using the algorithm via mvg - -1. Upload vibration time series data to a source. - -2. Request a RMS analysis for the source. - -3. Read the results(see below). - -## Analysis Parameters - -The RMS feature requires no parameters apart from sourceId (sid) and -feature ("RMS"). - -## Structure of the Results - -The result returned by the analysis call will be a dictionary -containing five lists: -``` -{ - 'timestamps': [... list of timestamps ...], - 'rms': [... list of RMS values ...] - 'rms_dc': [... list of RMS values without DC component ...], - 'dc': [... list of DC component values ...] - 'utilization': [... list with timestamp utilization ...], -} -``` - -## Notes - -1. The algorithm is agnostic to the scale of the measurements, but the - scale for all measurements needs to be consistent. - -2. The root mean square in this implementation is not filtered, -so it will neither remove a possible DC offset nor be selective of -special frequency bands. - diff --git a/docs/source/content/features/kpidemo.md b/docs/source/content/features/kpidemo.md new file mode 100644 index 00000000..be50600c --- /dev/null +++ b/docs/source/content/features/kpidemo.md @@ -0,0 +1,113 @@ +# KPI Demo + +.. image:: ../img/rms_sales.png + +## What does KPIDemo do? + +The KPIDemo feature calculates a set of Key Performance Indicators (KPIs) of vibration measurements. The calculated KPIs are + +- RMS - Estimate of vibration amplitude +- Peak - Maximum acceleration value +- Peak to peak - Difference between maximum and minimum acceleration value +- Variance - Variance of the vibration +- Crest factor - Ratio of the peak value of the waveform to its RMS value +- Utilization - Boolean value if vibration RMS is above a given utilization threshold, default to 0.1 +- DC component - Estimated value for the DC bias of the signal + +## Use cases for the feature + +- Determining trends in the vibration level over time. An increasing + trend may indicate a developing failure. + +- Comparing similar assets in terms of their RMS (or other KPI) value. + +- High level visualization of vibration measurements. + +## How the KPIs work + +Each KPI attempts to summarize some behaviour of the vibration measurement into a single number. Below are the formulas for each of the KPIs where $x \in \mathbb{R}^n$ is the vibration measurement vector. + +### RMS + +The most common KPI is the Root Mean Square (RMS) of the measurement. + +.. math:: \sqrt{ \frac{1}{n} \left( x_1^2 + x_2^2 + \dots + x_n^2 \right) } + +The plot below shows a series of acceleration samples and the +calculated RMS. + +.. image:: ../img/rms_plot.png + +### Peak + +The peak is the maximum value from a measurement. + +.. math:: Peak = \max(x) + +### Peak to peak + +The peak to peak is the difference between the maximum and the minimum value in the measurement. + +.. math:: \max(x) - \min(x) + +### Variance + +The statistical variance of the measurement values. + +.. math:: \frac{1}{n}\sum_{i=1}^{n}(x_i - \mu)^2 + +Where $n$ is the number of samples in the measurement and $\mu$ is the average measurement value. + +### Crest factor + +.. math:: \max(||x||) / \text{RMS}(x) + +### Utilization + +.. math:: \theta(\text{RMS(x)} - t) + +Where $t$ is the utilization threshold and $\theta$ is the heaviside step function. + +### DC component + +The DC bias of the signal is estimated as the mean value of the signal. + +.. math:: \frac{1}{n} \sum_{i=1}^{n}a_{i} = \frac {a_{1} + a_{2} + \dots + a_{n}}{n} + +## Using the algorithm via mvg + +1. Upload vibration time series data to a source. + +2. Request a KPIDemo analysis for the source. + +3. Read the results(see below). + +## Analysis Parameters + +The KPIDemo feature requires no parameters apart from sourceId (sid). + +## Structure of the Results + +The result returned by the analysis call will be a dictionary +containing eight lists: +``` +{ + 'timestamps': [... list of timestamps ...], + 'rms': {"channel": [... list of floats ...]}, + 'peak': {"channel": [... list of floats ...]}, + 'peak2peak': {"channel": [... list of floats ...]}, + 'variance': {"channel": [... list of floats ...]}, + 'crest_factor': {"channel": [... list of floats ...]}, + 'utilization': {"channel": [... list of ints ...]}, + 'dc_component': {"channel": [... list of floats ...]}, +} +``` + +## Notes + +1. The feature is agnostic to the scale of the measurements, but the + scale for all measurements needs to be consistent. + +2. The measurements are trimmed of DC offset. + +3. Neither of the KPIs are selective of frequency bands. diff --git a/mvg/analysis_classes.py b/mvg/analysis_classes.py index 4c22e55e..d6ca1299 100644 --- a/mvg/analysis_classes.py +++ b/mvg/analysis_classes.py @@ -15,7 +15,6 @@ """ # Import feature classes -from mvg.features.rms import RMS from mvg.features.modeid import ModeId from mvg.features.blacksheep import BlackSheep from mvg.features.kpidemo import KPIDemo @@ -23,7 +22,6 @@ FEATURES = { - RMS.__name__: RMS, ModeId.__name__: ModeId, BlackSheep.__name__: BlackSheep, KPIDemo.__name__: KPIDemo, diff --git a/mvg/features/analysis.py b/mvg/features/analysis.py index 4271d0f6..6851ee11 100644 --- a/mvg/features/analysis.py +++ b/mvg/features/analysis.py @@ -133,7 +133,7 @@ def raw_results(self): raw_results: dict """ - return self._raw_results + return self._raw_results.copy() def request_id(self): """request_id from request @@ -163,7 +163,7 @@ def results(self): results: dict """ - return self._raw_results["results"] + return self._raw_results["results"].copy() def status(self): """status from request diff --git a/mvg/features/kpidemo.py b/mvg/features/kpidemo.py index 05511965..f1e7b05e 100644 --- a/mvg/features/kpidemo.py +++ b/mvg/features/kpidemo.py @@ -5,6 +5,17 @@ from mvg.features.analysis import Analysis +def unfold_result_to_df(result: dict) -> pd.DataFrame: + unfolded_result = {} + unfolded_result["timestamps"] = result.pop("timestamps") + + for channel, kpis in result.items(): + for kpi, kpi_values in kpis.items(): + unfolded_result[f"{kpi}_{channel}"] = kpi_values + + return pd.DataFrame.from_dict(unfolded_result) + + class KPIDemo(Analysis): """ Analysis class for KPIDemo feature.""" @@ -23,8 +34,8 @@ def __init__(self, results, t_zone=None, t_unit=None): time unit for conversion from epoch time [ms]. """ - Analysis.__init__(self, results, t_zone, t_unit) - self._results_df = pd.DataFrame.from_dict(self.results()) + super().__init__(results, t_zone, t_unit) + self._results_df = unfold_result_to_df(self.results()) self._add_datetime() def summary(self): @@ -37,12 +48,12 @@ def summary(self): super().summary() print() - tab = self._results_df.describe() + tab = self.to_df().describe() print(tabulate(tab, headers="keys", tablefmt="psql")) return tab def plot( - self, kpi="rms", interactive=True, time_format=None + self, kpi=None, interactive=True, time_format=None ): # pylint: disable=arguments-differ """ Generate a basic plot on KPIs. @@ -57,6 +68,7 @@ def plot( True: show plot, False: save plot time_format: str, optional + strftime format specifier for tick_x_lables. If not given only dates are shown. To show dates and time use %y%m%d-%H:%M:%S @@ -66,8 +78,12 @@ def plot( plot file name : str name of plot file (or emtpy string in case of interactive plot) """ + result_df = self.to_df() + + # Select the default column as the one after timestamps which is first + kpi = kpi if kpi is not None else result_df.columns[1] self.check_status() - self._results_df.plot(x=self.time_column, y=kpi) + result_df.plot(x=self.time_column, y=kpi) plt.title(f"{kpi} Summary plot for request {self.request_id()}") return self._render_plot(interactive) diff --git a/mvg/features/rms.py b/mvg/features/rms.py deleted file mode 100644 index 09912a01..00000000 --- a/mvg/features/rms.py +++ /dev/null @@ -1,82 +0,0 @@ -"""Analysis Class for RMS Feature""" -import copy -import pandas as pd -import matplotlib.pyplot as plt -from tabulate import tabulate -from mvg.features.analysis import Analysis - - -class RMS(Analysis): - """ Analysis class for RMS feature.""" - - def __init__(self, results, t_zone=None, t_unit=None): - """Constructor - - Parameters - ---------- - results: dict - Dictionary with the server response form a get_analysis_results call. - - t_zone: str - timezone, if None, times will remain in epoch time [UTC]. - - t_unit: str - time unit for conversion from epoch time [ms]. - """ - - rsl = copy.deepcopy(results) - # Handle multi-channel waveform data. - channels = [k for k in rsl["results"] if k != "timestamps"] - if len(channels) == 1: - rsl["results"].update(rsl["results"].pop(channels[0])) - else: - # Prefix the KPIs with channel name - for chan in channels: - rch = rsl["results"].pop(chan) - rsl["results"].update( - {chan + "_" + kpi: val for kpi, val in rch.items()} - ) - - Analysis.__init__(self, rsl, t_zone, t_unit) - - self._results_df = pd.DataFrame.from_dict(self.results()) - self._add_datetime() - - def summary(self): - """Print summary information on RMS. - - Returns - ------- - summary table: dataFrame - """ - - super().summary() - print() - tab = self._results_df.describe() - print(tabulate(tab, headers="keys", tablefmt="psql")) - return tab - - def plot(self, interactive=True, time_format=None): - """ - Generate a basic plot on RMS. - - Parameters - ---------- - interactive : bool - True: show plot, False: save plot - - time_format: str, optional - strftime format specifier for tick_x_lables. If not given - only dates are shown. To show dates and time use %y%m%d-%H:%M:%S - - - Returns - ------- - plot file name : str - name of plot file (or emtpy string in case of interactive plot) - """ - - self.check_status() - self._results_df.plot(x=self.time_column, y=["rms", "dc", "utilization"]) - plt.title(f"RMS Summary plot for request {self.request_id()}") - return self._render_plot(interactive) diff --git a/mvg/mvg.py b/mvg/mvg.py index 349dc46f..1cba8d80 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -53,7 +53,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.9.7") + self.mvg_version = self.parse_version("v0.10.0") self.tested_api_version = self.parse_version("v0.2.7") # Get API version diff --git a/requirements_dev.txt b/requirements_dev.txt index 45f985ac..a0a2b94e 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -17,3 +17,4 @@ m2r2 # for callback test server uvicorn fastapi +ipywidgets diff --git a/tests/test_analysis_classes.py b/tests/test_analysis_classes.py index 704c7ecf..8b4276cf 100644 --- a/tests/test_analysis_classes.py +++ b/tests/test_analysis_classes.py @@ -14,66 +14,6 @@ TZ = "Europe/Stockholm" -def test_RMS(): - # read dict - with open("./tests/test_data/RMS_results_dict.json") as json_file: - api_results = json.load(json_file) - - # get object - feat = parse_results(api_results, t_zone=TZ, t_unit=None) - - cols = feat.to_df().columns.tolist() - cols_without_datetime = cols.copy() # Datetime is not part of the original data - cols_without_datetime.remove("datetime") - - # Check dataframe conversion - columns - assert set(cols_without_datetime) == set( - api_results["results"]["acc"].keys() - ).union({"timestamps"}) - - # Check dataframe conversion - length - assert len(feat.to_df()["timestamps"]) == len(api_results["results"]["timestamps"]) - - # Test datetime conversion - feat = analysis_classes.RMS(api_results, t_zone="Europe/Stockholm", t_unit="s") - assert str(feat.to_df()["datetime"][0]) == "2019-10-04 13:01:00+02:00" - - # test save as pickle file - pkl_file = feat.save_pkl() - assert pkl_file == "2f6dc5ae055f9e82f6f5311c23250f07.pkl" - - assert os.path.exists(pkl_file) - os.remove(pkl_file) # Cleanup - - # Summary - assert set(feat.summary().index) == { - "mean", - "min", - "std", - "count", - "50%", - "75%", - "25%", - "max", - } - - # Plot (not tested at all) - plt_file = feat.plot(False) - assert plt_file is not None - assert os.path.exists(plt_file) - os.remove(plt_file) # Cleanup - - # Accessor functions (tested only in RMS) - ts_sum = 78615280200 - assert sum(feat.raw_results()["results"]["timestamps"]) == ts_sum - assert feat.request_id() == "2f6dc5ae055f9e82f6f5311c23250f07" - assert feat.feature() == "RMS" - assert sum(feat.inputs()["timestamps"]) == ts_sum - assert sum(feat.results()["timestamps"]) == ts_sum - assert feat.status() == "successful" - assert feat.sources() == ["u0001"] - - def test_KPIDemo(): # read dict with open("./tests/test_data/KPIDemo_results_dict.json") as json_file: @@ -87,7 +27,7 @@ def test_KPIDemo(): cols_without_datetime.remove("datetime") # Check dataframe conversion - columns - assert set(cols_without_datetime) == set(api_results["results"].keys()) + assert "peak2peak_acc" in set(cols_without_datetime) # Check dataframe conversion - length assert len(feat.to_df()["timestamps"]) == len(api_results["results"]["timestamps"]) @@ -96,13 +36,6 @@ def test_KPIDemo(): feat = analysis_classes.KPIDemo(api_results, t_zone=TZ, t_unit="s") assert str(feat.to_df()["datetime"][0]) == "2019-10-04 13:01:00+02:00" - # test save as pickle file - pkl_file = feat.save_pkl() - assert pkl_file == "45f202227d51402eb7e71efd58370415.pkl" - - assert os.path.exists(pkl_file) - os.remove(pkl_file) # Cleanup - # Summary assert set(feat.summary().index) == { "mean", @@ -116,15 +49,15 @@ def test_KPIDemo(): } # Plot (not tested at all) - plt_file = feat.plot("rms", False) + plt_file = feat.plot("rms_acc", False) assert plt_file is not None assert os.path.exists(plt_file) os.remove(plt_file) # Cleanup # Accessor functions (tested only in KPIDemo) - ts_sum = 73900313220 + ts_sum = 78615280200 assert sum(feat.raw_results()["results"]["timestamps"]) == ts_sum - assert feat.request_id() == "45f202227d51402eb7e71efd58370415" + assert feat.request_id() == "75fc046d1b6ca741cf442552f506f95b" assert feat.feature() == "KPIDemo" assert sum(feat.inputs()["timestamps"]) == ts_sum assert sum(feat.results()["timestamps"]) == ts_sum diff --git a/tests/test_data/KPIDemo_results_dict.json b/tests/test_data/KPIDemo_results_dict.json index 918b3405..d31ab3d4 100644 --- a/tests/test_data/KPIDemo_results_dict.json +++ b/tests/test_data/KPIDemo_results_dict.json @@ -1 +1 @@ -{"status": "successful", "request_id": "45f202227d51402eb7e71efd58370415", "feature": "KPIDemo", "results": {"rms": [0.48497628407602994, 0.485104194438231, 0.48523894309367505, 0.4852252991579007, 0.48508787202553527, 0.48516542579592475, 0.4846815166936295, 0.4849799968600429, 0.48498939544867825, 0.4849830115060323, 0.4849698030681608, 0.48483912669202184, 0.4848983240955706, 0.48505745431818587, 0.4849531064694613, 0.48450364796927325, 0.050380802685913585, 0.04995202862635084, 0.05008869586109123, 0.05004784024112636, 0.050035401663772495, 0.05007491426963441, 0.04983319737828671, 0.049916237749382114, 0.05014989647976351, 0.48454239584204783, 0.4846380742894278, 0.4851853213878597, 0.48572209495564217, 0.48527659116388505, 0.4851068489665009, 0.04990625600189168, 0.05002217898529818, 0.049841553845600205, 0.049921963219141934, 0.05008674638150191, 0.04974405242748695, 0.04973891498117285, 0.050157243554214574, 0.049947107962129894, 0.049850649911875426, 0.050114682604494594, 0.05021006939342469, 0.04981638392946701, 0.049787509774207324, 0.04962678305463757, 0.049989217544320994], "peak": [2.2600884735107423, 2.2876570281982422, 2.2433771072387696, 2.3320462219238283, 2.2858623611450195, 2.2854966049194334, 2.2489236541748046, 2.324025619506836, 2.2081935821533203, 2.280819128417969, 2.2443455993652344, 2.291765802001953, 2.2896646392822264, 2.338721389770508, 2.3394623260498046, 2.3949231719970703, 0.2010076141357422, 0.21032674713134766, 0.2039621627807617, 0.21377698669433592, 0.2360000549316406, 0.2182101119995117, 0.19662920837402345, 0.19484251098632813, 0.21842276306152345, 2.2504552261352537, 2.2689621261596677, 2.2985033889770508, 2.2847549743652342, 2.259278927612305, 2.252838851928711, 0.19189574279785157, 0.19086965637207032, 0.20983294982910156, 0.21430001373291016, 0.20134898681640626, 0.21388350830078126, 0.22838197784423828, 0.2046974838256836, 0.19288236694335936, 0.1881550231933594, 0.21139839782714845, 0.20220737609863282, 0.23049488830566406, 0.20258720245361328, 0.21609667358398438, 0.22204466705322265], "peak2peak": [4.586669921875, 4.59375, 4.52752685546875, 4.65423583984375, 4.6038818359375, 4.58233642578125, 4.53228759765625, 4.59423828125, 4.50537109375, 4.60797119140625, 4.61572265625, 4.54852294921875, 4.57501220703125, 4.64892578125, 4.60137939453125, 4.62646484375, 0.40155029296875, 0.410888671875, 0.41986083984375, 0.427001953125, 0.4420166015625, 0.429443359375, 0.39947509765625, 0.39959716796875, 0.42486572265625, 4.563720703125, 4.6824951171875, 4.518798828125, 4.62603759765625, 4.58734130859375, 4.57427978515625, 0.38385009765625, 0.38555908203125, 0.427490234375, 0.4193115234375, 0.41156005859375, 0.453125, 0.4244384765625, 0.41107177734375, 0.40087890625, 0.4078369140625, 0.40228271484375, 0.4046630859375, 0.4515380859375, 0.4215087890625, 0.423095703125, 0.43121337890625], "variance": [0.2352019961161941, 0.235326079461565, 0.23545683189466682, 0.2354435909428742, 0.2353102435862621, 0.23538549038774095, 0.23491617262443706, 0.2352055973543672, 0.2352147136976744, 0.23520852144946025, 0.23519570988797067, 0.2350689787714824, 0.235126384710693, 0.23528073398963897, 0.2351795154743807, 0.23474378489553346, 0.0025382252792769578, 0.002495205163887774, 0.0025088774530648977, 0.002504786312801307, 0.0025035414196550474, 0.0025074970391112355, 0.0024833475609432817, 0.0024916307910528403, 0.002515012116930997, 0.23478133336835177, 0.23487406305096492, 0.23540479609024068, 0.23592595352809786, 0.23549336993164044, 0.2353286549142075, 0.002490634388126349, 0.0025022183904372065, 0.0024841804897438643, 0.00249220241165336, 0.0025086821630848945, 0.0024744707519085704, 0.0024739596635043413, 0.0025157490809567997, 0.0024947135937806587, 0.002485087296636365, 0.002511481412549233, 0.0025210510684925227, 0.0024816721078080592, 0.0024787961295167898, 0.002462817596352063, 0.00249892187069345], "crest_factor": [4.797309734014784, 4.753809590272252, 4.707267998044887, 4.806110122392733, 4.778555821470752, 4.734137468872188, 4.711060489902641, 4.792003040441915, 4.736552042486396, 4.798419754460483, 4.8897416743934405, 4.726858200653682, 4.721947933214443, 4.821534787168457, 4.824100093061526, 4.94304466444173, 3.9897660104558774, 4.2105746836555, 4.310327377293483, 4.27145278726067, 4.716661545309698, 4.35767320188574, 4.0704971776627445, 4.101964935948251, 4.355398084414021, 4.774123991709137, 4.980073005131786, 4.737372067238644, 4.820210255217708, 4.797392710408371, 4.785421888339174, 3.846298445051107, 3.8920620734334683, 4.366984328381092, 4.292700044511462, 4.196940048295473, 4.809449170792158, 4.591615597780637, 4.1145461531393375, 4.1643359904710495, 4.4068009395562155, 4.218292660765828, 4.032173472068134, 4.62688919035176, 4.397118626774544, 4.354436461175985, 4.441851222343206], "utilization": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "dc_component": [-0.11482480163574219, -0.11450028991699218, -0.11520327911376953, -0.11476106567382813, -0.11459771270751953, -0.1146592025756836, -0.11458527526855469, -0.11455296325683594, -0.11468772277832032, -0.11486453857421874, -0.11458485717773438, -0.11500798950195312, -0.11492098693847656, -0.11508857727050781, -0.11491398620605468, -0.11434455871582032, -0.0002019500732421875, 0.00030557708740234374, 0.00020043487548828125, 0.0001512359619140625, 0.000205999755859375, -0.00013149871826171876, 0.0002702056884765625, 0.000103778076171875, -0.0002220794677734375, -0.11465200347900391, -0.11466525115966797, -0.11484860382080078, -0.11489413452148438, -0.11462560729980469, -0.11471629333496093, 0.0001818939208984375, 4.83123779296875e-05, -5.51177978515625e-05, -0.00043282623291015626, -0.00023814697265625, -0.00062667236328125, 1.157684326171875e-05, 1.443023681640625e-05, 0.000354937744140625, 0.000382574462890625, -9.46868896484375e-05, 2.0965576171875e-06, -0.0002702789306640625, 0.00047676239013671876, -3.2220458984375e-05, 0.00030640716552734375], "timestamps": [1570186860, 1570273260, 1570359660, 1570446060, 1570532460, 1570618860, 1570705260, 1570791660, 1570878060, 1570964460, 1571050860, 1571137260, 1571223660, 1571310060, 1571396460, 1571482860, 1571828460, 1571914860, 1572001260, 1572087660, 1572177660, 1572264060, 1572350460, 1572436860, 1572523260, 1572609660, 1572696060, 1572782460, 1572868860, 1572955260, 1573041660, 1573128060, 1573214460, 1573300860, 1573387260, 1573473660, 1573560060, 1573646460, 1573732860, 1573819260, 1573905660, 1573992060, 1574078460, 1574164860, 1574251260, 1574337660, 1574424060]}, "inputs": {"request_id": "45f202227d51402eb7e71efd58370415", "feature": "KPIDemo", "experiment": "KPIDemo", "sw-commit": {"api": "0.0.0-dev0", "feature": "1.0.0"}, "dataType": "waveform", "db_def": "vibium_app\\pipeline\\apfel\\strudel\\data\\strudelDb\\database.json", "UUID": "u0001", "timestamps": [1570186860, 1570273260, 1570359660, 1570446060, 1570532460, 1570618860, 1570705260, 1570791660, 1570878060, 1570964460, 1571050860, 1571137260, 1571223660, 1571310060, 1571396460, 1571482860, 1571828460, 1571914860, 1572001260, 1572087660, 1572177660, 1572264060, 1572350460, 1572436860, 1572523260, 1572609660, 1572696060, 1572782460, 1572868860, 1572955260, 1573041660, 1573128060, 1573214460, 1573300860, 1573387260, 1573473660, 1573560060, 1573646460, 1573732860, 1573819260, 1573905660, 1573992060, 1574078460, 1574164860, 1574251260, 1574337660, 1574424060], "params": {}}, "error_info": "", "debug_info": ""} \ No newline at end of file +{"status": "successful", "request_id": "75fc046d1b6ca741cf442552f506f95b", "feature": "KPIDemo", "results": {"acc": {"rms": [0.6470938808830744, 0.6471306969644414, 0.6466266944439302, 0.6468806720402722, 0.6466493957387159, 0.6467249872072451, 0.647100732403723, 0.6474297483216226, 0.6468977699997093, 0.6477017500152474, 0.6470887870500318, 0.647212859812641, 0.6467505833073381, 0.6473294495532388, 0.6474410190623384, 0.6476292704319382, 0.6471187716244126, 0.4848978443906459, 0.48484688004435844, 0.48475765388364805, 0.48456940607276594, 0.4850067490271975, 0.4850187365383283, 0.48525980138293656, 0.48516238436722653, 0.6279023656493041, 0.6281468737921598, 0.6283156705845551, 0.6280271420358873, 0.628026946860152, 0.6282908228344413, 0.6281600540558904, 0.6279733052109427, 0.6277421066711281, 0.6278769053426508, 0.6286883127970024, 0.6281343035247084, 0.6281292299681172, 0.6277872706078097, 0.6278531570472111, 0.6285441754422537, 0.6284047851367978, 0.6283140536346776, 0.6281499282360293, 0.6285481383470801, 0.6281251443487925, 0.6284361962847654, 0.6284482844164598, 0.6286081295548268, 0.6279703831408971], "peak": [2.686565033998897, 2.6917552104452027, 2.715255164704313, 2.6851505333043484, 2.7266109280295483, 2.6970042262531173, 2.711735134992144, 2.681259855287886, 2.667384142184121, 2.6787570888613037, 2.7229817204780704, 2.682739508062897, 2.682787559190933, 2.700802677842825, 2.7210068297972096, 2.738182747476402, 2.6924439987220383, 2.3720132599872614, 2.2734294797799635, 2.3565631117706656, 2.367473192872302, 2.2605627121879217, 2.3019645284833294, 2.260862113899039, 2.33652828167628, 3.0371081557922737, 3.0697912558897955, 3.1035036648621293, 3.032672310338032, 2.9693198781385552, 3.029719051997296, 3.136087697846743, 3.123363962089775, 3.0473913260795387, 3.1346266673634613, 3.0981306499825583, 3.069391137549435, 2.9618012255115946, 3.07212973445674, 3.0116547698238354, 2.978442280270874, 3.1067808753934667, 3.0939468951811686, 2.996531248730437, 3.012682780143234, 3.103924514311588, 3.0582901611724864, 3.0854686711406067, 3.049574684496507, 3.088072126729926], "peak2peak": [5.31329345703125, 5.36700439453125, 5.41485595703125, 5.3515625, 5.39532470703125, 5.31097412109375, 5.314697265625, 5.325927734375, 5.2713623046875, 5.379150390625, 5.4998779296875, 5.299072265625, 5.278564453125, 5.42462158203125, 5.3746337890625, 5.36669921875, 5.36260986328125, 4.60797119140625, 4.55438232421875, 4.66448974609375, 4.70159912109375, 4.65277099609375, 4.59197998046875, 4.6187744140625, 4.58441162109375, 5.60101318359375, 5.72088623046875, 5.7542724609375, 5.69451904296875, 5.6492919921875, 5.67547607421875, 5.7117919921875, 5.7236328125, 5.65484619140625, 5.79638671875, 5.69525146484375, 5.6915283203125, 5.5751953125, 5.696533203125, 5.71685791015625, 5.55279541015625, 5.70556640625, 5.68310546875, 5.58990478515625, 5.6024169921875, 5.71759033203125, 5.59027099609375, 5.76727294921875, 5.6591796875, 5.77734375], "variance": [0.41873049067631846, 0.41877813895368365, 0.4181260819674838, 0.41845460385927424, 0.4181554410092465, 0.41825320907821134, 0.41873935787743477, 0.4191652790117996, 0.4184767248305968, 0.4195175569728141, 0.4187238983258814, 0.41888448590685734, 0.4182863170083822, 0.41903541625889906, 0.4191798731644793, 0.41942367192020447, 0.41876270458868864, 0.23512591949469505, 0.2350764970887485, 0.2349899829987787, 0.23480750930171312, 0.2352315466019309, 0.2352431747932363, 0.23547707483820707, 0.23538253920489244, 0.3942613807879924, 0.3945684950548635, 0.3947805819021192, 0.3944180911337645, 0.39441784598248414, 0.3947493580579793, 0.39458505351149914, 0.3943504720575559, 0.3940601524879059, 0.3942294082626641, 0.39524899464754154, 0.3945527032644705, 0.3945463295403398, 0.39411685713720324, 0.3941995868141499, 0.39506778048238267, 0.394892573982825, 0.3947785499948405, 0.39457233234292877, 0.3950727622195802, 0.39454119696319145, 0.3949320528008642, 0.3949472461859916, 0.39514818054241796, 0.39434680210212514], "crest_factor": [4.151739204105287, 4.159523297336503, 4.199107751094795, 4.1509209493542905, 4.216521264842036, 4.17024899238794, 4.190591973090684, 4.141391189142457, 4.12334725189317, 4.169192536071003, 4.291368147281347, 4.145065209055815, 4.148102264510928, 4.207778444296482, 4.202709976173473, 4.228009561164774, 4.160664342904785, 4.891779345746705, 4.704480813056079, 4.861322132597601, 4.885725683880231, 4.932319578447107, 4.746135262552724, 4.85907197225831, 4.815971635401411, 4.8369114721389, 4.8870596734125, 4.939401976039809, 4.8288873320139665, 4.728013492070362, 4.822160282923067, 4.992497815799841, 4.973720914841443, 4.854527510094295, 4.992422305535833, 4.927927856967997, 4.886520478703161, 4.715273679688384, 4.893583986630332, 4.796750221003309, 4.738636354676574, 4.94391664238704, 4.924204507735062, 4.770407690955719, 4.793082019248064, 4.941570230450774, 4.866508611777468, 4.909662016192138, 4.851312830866793, 4.917544218063957], "utilization": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], "dc_component": [-0.14023935040514685, -0.14042464403895252, -0.1402429576730629, -0.14035072861684825, -0.1404292874045484, -0.14005842547186725, -0.14050710764839433, -0.1403663006003861, -0.140528673434121, -0.14048804589255356, -0.13985183766557055, -0.14032007446914688, -0.1403681255971829, -0.140316837999075, -0.1400742126097098, -0.14040442716390175, -0.14007583465953835, -0.1144449006122614, -0.11473807352996325, -0.11492492817691537, -0.11484868115355228, -0.11462765359417189, -0.11458659879582928, -0.11486602014903888, -0.11454341839503018, -0.10992309719852371, -0.11007445901479568, -0.10960718048712936, -0.10988178299428189, -0.10915142110730502, -0.10979717699729602, -0.10965947519049304, -0.1095089816210249, -0.1101965018607887, -0.10960225330096143, -0.10978836482630816, -0.10967434067443484, -0.11005562004284482, -0.10966635555049033, -0.10961619560508544, -0.10985097167712396, -0.10934435195596687, -0.1092667193999186, -0.10999560419918701, -0.11009488951823405, -0.10966181899908826, -0.10937658695373634, -0.10927238207810663, -0.10908396184025694, -0.10906822047992606]}, "timestamps": [1570186860, 1570273260, 1570359660, 1570446060, 1570532460, 1570618860, 1570705260, 1570791660, 1570878060, 1570964460, 1571050860, 1571137260, 1571223660, 1571310060, 1571396460, 1571482860, 1571569260, 1571655660, 1571742060, 1571828460, 1571914860, 1572001260, 1572087660, 1572177660, 1572264060, 1572350460, 1572436860, 1572523260, 1572609660, 1572696060, 1572782460, 1572868860, 1572955260, 1573041660, 1573128060, 1573214460, 1573300860, 1573387260, 1573473660, 1573560060, 1573646460, 1573732860, 1573819260, 1573905660, 1573992060, 1574078460, 1574164860, 1574251260, 1574337660, 1574424060]}, "inputs": {"request_id": "75fc046d1b6ca741cf442552f506f95b", "feature": "KPIDemo", "experiment": "KPIDemo", "sw-commit": {"api": "0.0.0-dev0", "feature": "1.0.0"}, "dataType": "waveform", "db_def": "vibium_app/pipeline/apfel/strudel/data/strudelDb/database.json", "UUID": "u0001", "timestamps": [1570186860, 1570273260, 1570359660, 1570446060, 1570532460, 1570618860, 1570705260, 1570791660, 1570878060, 1570964460, 1571050860, 1571137260, 1571223660, 1571310060, 1571396460, 1571482860, 1571569260, 1571655660, 1571742060, 1571828460, 1571914860, 1572001260, 1572087660, 1572177660, 1572264060, 1572350460, 1572436860, 1572523260, 1572609660, 1572696060, 1572782460, 1572868860, 1572955260, 1573041660, 1573128060, 1573214460, 1573300860, 1573387260, 1573473660, 1573560060, 1573646460, 1573732860, 1573819260, 1573905660, 1573992060, 1574078460, 1574164860, 1574251260, 1574337660, 1574424060], "params": {"utilization_threshold": 0.1}}, "error_info": "", "debug_info": ""} \ No newline at end of file diff --git a/tests/test_data/RMS_results_dict.json b/tests/test_data/RMS_results_dict.json deleted file mode 100644 index 70110b7b..00000000 --- a/tests/test_data/RMS_results_dict.json +++ /dev/null @@ -1,338 +0,0 @@ -{ - "status": "successful", - "request_id": "2f6dc5ae055f9e82f6f5311c23250f07", - "feature": "RMS", - "results": { - "timestamps": [ - 1570186860, - 1570273260, - 1570359660, - 1570446060, - 1570532460, - 1570618860, - 1570705260, - 1570791660, - 1570878060, - 1570964460, - 1571050860, - 1571137260, - 1571223660, - 1571310060, - 1571396460, - 1571482860, - 1571569260, - 1571655660, - 1571742060, - 1571828460, - 1571914860, - 1572001260, - 1572087660, - 1572177660, - 1572264060, - 1572350460, - 1572436860, - 1572523260, - 1572609660, - 1572696060, - 1572782460, - 1572868860, - 1572955260, - 1573041660, - 1573128060, - 1573214460, - 1573300860, - 1573387260, - 1573473660, - 1573560060, - 1573646460, - 1573732860, - 1573819260, - 1573905660, - 1573992060, - 1574078460, - 1574164860, - 1574251260, - 1574337660, - 1574424060 - ], - "acc": { - "rms": [ - 0.6470859724128016, - 0.6471233090087879, - 0.646619032857862, - 0.6468729279266723, - 0.6466425188145082, - 0.6467172058948399, - 0.647092780648743, - 0.6474220671843836, - 0.6468903895762841, - 0.647693834249824, - 0.6470808565115449, - 0.6472050737356421, - 0.6467427853732736, - 0.6473221821058892, - 0.6474336931665059, - 0.6476212217700601, - 0.6471112840086092, - 0.4848921153840439, - 0.4848409433332954, - 0.48475167234412849, - 0.4845635972925419, - 0.48500110983328195, - 0.4850127179498178, - 0.4852543654465155, - 0.48515672855335836, - 0.6278945984238401, - 0.6281390462008573, - 0.6283081249535378, - 0.6280197922186224, - 0.6280192424935522, - 0.628283207129633, - 0.6281522276066049, - 0.6279655163885232, - 0.6277353544965058, - 0.6278700835347184, - 0.6286806371261025, - 0.6281269536708373, - 0.6281217503270783, - 0.6277798778644154, - 0.6278461900382366, - 0.6285363191287583, - 0.6283971912344205, - 0.628306637724784, - 0.6281424042187251, - 0.6285404729543972, - 0.628117681739837, - 0.6284285531715674, - 0.6284407826182109, - 0.6286006002142908, - 0.6279629684369986 - ], - "rms_dc": [ - 0.6621077357581335, - 0.6621829958188445, - 0.6616518915968526, - 0.6619229399260815, - 0.6617138187667061, - 0.6617088713545417, - 0.6621712182715772, - 0.6624628340232414, - 0.661977447702136, - 0.6627544903873464, - 0.6620207993082551, - 0.662241081744421, - 0.661799506359354, - 0.6623544164712631, - 0.6624120892580125, - 0.6626660580828794, - 0.6620974380917977, - 0.498214159978348, - 0.49823204245121358, - 0.4981883248148897, - 0.49798748569938908, - 0.4983621583589863, - 0.4983645131550537, - 0.49866331698402158, - 0.49849425732991728, - 0.6374436148716767, - 0.6377106362522227, - 0.6377963245451337, - 0.6375594045830764, - 0.6374337096669657, - 0.6378045217930529, - 0.6376521190146351, - 0.637442235802496, - 0.6373332350391726, - 0.6373635157843435, - 0.6381945643264252, - 0.6376292497131597, - 0.6376899092541004, - 0.6372860080258722, - 0.6373424476924897, - 0.6380636089021572, - 0.637839000655549, - 0.6377363375921016, - 0.6376999348751861, - 0.6381092936591727, - 0.6376180440233918, - 0.6378754730392424, - 0.6378695336896755, - 0.6379947683984636, - 0.6373637582315667 - ], - "dc": [ - -0.1402369354248047, - -0.14041988067626955, - -0.14023926696777345, - -0.14034740295410157, - -0.14042304229736328, - -0.1400552963256836, - -0.1405050018310547, - -0.1403626495361328, - -0.14052389526367188, - -0.14048562774658203, - -0.13984957580566408, - -0.14031693725585937, - -0.14036508178710939, - -0.1403116729736328, - -0.14006922912597656, - -0.1404031967163086, - -0.14007142333984375, - -0.11444206237792969, - -0.11473634033203126, - -0.11492355346679688, - -0.11484622802734375, - -0.11462444915771485, - -0.11458556365966798, - -0.1148621109008789, - -0.11454026947021484, - -0.10992149658203125, - -0.11007358551025391, - -0.10960406799316407, - -0.10987781829833984, - -0.10914927978515625, - -0.10979444274902343, - -0.10965857849121094, - -0.10950759887695312, - -0.11019064025878907, - -0.10959657592773438, - -0.10978596649169922, - -0.10967037048339844, - -0.11005220184326171, - -0.10966257781982422, - -0.1096109359741211, - -0.10985110168457031, - -0.10934148712158204, - -0.10926300964355469, - -0.10999239501953125, - -0.11009243621826172, - -0.1096583236694336, - -0.10937400360107422, - -0.10926904754638672, - -0.10908074951171876, - -0.10906452484130859 - ], - "utilization": [ - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1, - 1 - ] - } - }, - "inputs": { - "request_id": "2f6dc5ae055f9e82f6f5311c23250f07", - "feature": "RMS", - "experiment": "RMS", - "sw-commit": { - "api": "0.0.0-dev0", - "feature": "0.0.2" - }, - "dataType": "vibration", - "db_def": "vibium_app\\pipeline\\wartenberg\\feature\\data\\featureDb\\database.json", - "UUID": "u0001", - "timestamps": [ - 1570186860, - 1570273260, - 1570359660, - 1570446060, - 1570532460, - 1570618860, - 1570705260, - 1570791660, - 1570878060, - 1570964460, - 1571050860, - 1571137260, - 1571223660, - 1571310060, - 1571396460, - 1571482860, - 1571569260, - 1571655660, - 1571742060, - 1571828460, - 1571914860, - 1572001260, - 1572087660, - 1572177660, - 1572264060, - 1572350460, - 1572436860, - 1572523260, - 1572609660, - 1572696060, - 1572782460, - 1572868860, - 1572955260, - 1573041660, - 1573128060, - 1573214460, - 1573300860, - 1573387260, - 1573473660, - 1573560060, - 1573646460, - 1573732860, - 1573819260, - 1573905660, - 1573992060, - 1574078460, - 1574164860, - 1574251260, - 1574337660, - 1574424060 - ], - "params": { - "utilization_threshold": 0.1 - } - }, - "error_info": "", - "debug_info": "" -} \ No newline at end of file From 6ddae1bd4743fb872e6cd49c52cd0c432a493c75 Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Mon, 15 Nov 2021 16:06:19 +0100 Subject: [PATCH 32/90] add KPIDemo to documentaton index (#99) --- docs/source/content/features/kpidemo.md | 2 +- docs/source/index.rst | 2 +- mvg/mvg.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/content/features/kpidemo.md b/docs/source/content/features/kpidemo.md index be50600c..86d17d89 100644 --- a/docs/source/content/features/kpidemo.md +++ b/docs/source/content/features/kpidemo.md @@ -72,7 +72,7 @@ Where $t$ is the utilization threshold and $\theta$ is the heaviside step functi The DC bias of the signal is estimated as the mean value of the signal. -.. math:: \frac{1}{n} \sum_{i=1}^{n}a_{i} = \frac {a_{1} + a_{2} + \dots + a_{n}}{n} +.. math:: \frac{1}{n} \sum_{i=1}^{n}x_{i} = \frac {x_{1} + x_{2} + \dots + x_{n}}{n} ## Using the algorithm via mvg diff --git a/docs/source/index.rst b/docs/source/index.rst index dffa006d..ea96ae98 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -25,8 +25,8 @@ :caption: Features content/features/general + content/features/kpidemo content/features/ModeId - content/features/RMS content/features/blacksheep .. toctree:: diff --git a/mvg/mvg.py b/mvg/mvg.py index 1cba8d80..12f54f1d 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -53,7 +53,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.10.0") + self.mvg_version = self.parse_version("v0.10.1") self.tested_api_version = self.parse_version("v0.2.7") # Get API version From 478f50dd23f52aded63397fd78aa0f3c36dd5704 Mon Sep 17 00:00:00 2001 From: Oskar Liew <43787643+OskarLiew@users.noreply.github.com> Date: Tue, 16 Nov 2021 18:53:55 +0100 Subject: [PATCH 33/90] Fixing inline maths and adding kpidemo api reference (#103) * Fixing inline maths and adding kpidemo api reference * Adjusting rendering and typos for modeId and Blacksheep Co-authored-by: SergioMDCB <61144290+SergioMDCB@users.noreply.github.com> --- docs/source/content/features/ModeId.md | 10 +++---- docs/source/content/features/blacksheep.md | 4 +-- docs/source/content/features/kpidemo.md | 26 +++++++++---------- .../utilities_reference/analysis_classes.rst | 2 +- 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/docs/source/content/features/ModeId.md b/docs/source/content/features/ModeId.md index 7b6f2aa3..d1f2ad9f 100644 --- a/docs/source/content/features/ModeId.md +++ b/docs/source/content/features/ModeId.md @@ -91,8 +91,8 @@ result, the optimizer can be disabled and a specific number of modes ## Structure of the Results The result returned by the analysis call will be a dictionary -containing four lists: the _timestamps_, the _label_ (aka operational -modes), the _mode_probability_ and _uncertain_ where a logical value of `True` indicates an +containing four lists: the *timestamps*, the *label* (aka operational +modes), the *mode_probability* and *uncertain* where a logical value of `True` indicates an uncertain assignment to the mode, which could be an indication of an anomaly. ``` { @@ -105,9 +105,9 @@ uncertain assignment to the mode, which could be an indication of an anomaly. In addition, the results returned by the analysis include an additional dictionary with the "Emerging Modes". "Emerging Modes" is an additional result output that describes the first appearance of each mode. -The dictionary contains four lists: the _modes_, the _emerging_time_ corresponding to the epoch of first appearance of -each mode , the _max_prob_time_ corresponding to the epoch with the largest mode probability and -_max_probability_ for each mode. +The dictionary contains four lists: the *modes*, the *emerging_time* corresponding to the epoch of first appearance of +each mode , the *max_prob_time* corresponding to the epoch with the largest mode probability and +*max_probability* for each mode. ``` { diff --git a/docs/source/content/features/blacksheep.md b/docs/source/content/features/blacksheep.md index 642f4aaa..4815c991 100644 --- a/docs/source/content/features/blacksheep.md +++ b/docs/source/content/features/blacksheep.md @@ -20,7 +20,7 @@ population. ### Illustrative Example -The figure below shows a population of 6 sources. I total 4 modes are +The figure below shows a population of 6 sources. In total 4 modes are identified over all sources. The "red" mode is the most uncommon mode, and the two sources which exhibit the uncommon mode are labeled as Black Sheep. @@ -33,7 +33,7 @@ Black Sheep. 2. Request an analysis for the population of sources. -3. Read the results(see below). +3. Read the results (see below). ## Analysis Parameters diff --git a/docs/source/content/features/kpidemo.md b/docs/source/content/features/kpidemo.md index 86d17d89..a904e70f 100644 --- a/docs/source/content/features/kpidemo.md +++ b/docs/source/content/features/kpidemo.md @@ -6,22 +6,20 @@ The KPIDemo feature calculates a set of Key Performance Indicators (KPIs) of vibration measurements. The calculated KPIs are -- RMS - Estimate of vibration amplitude -- Peak - Maximum acceleration value -- Peak to peak - Difference between maximum and minimum acceleration value -- Variance - Variance of the vibration -- Crest factor - Ratio of the peak value of the waveform to its RMS value -- Utilization - Boolean value if vibration RMS is above a given utilization threshold, default to 0.1 -- DC component - Estimated value for the DC bias of the signal +1. RMS - Estimate of vibration amplitude +2. Peak - Maximum acceleration value +3. Peak to peak - Difference between maximum and minimum acceleration value +4. Variance - Variance of the vibration +5. Crest factor - Ratio of the peak value of the waveform to its RMS value +6. Utilization - Boolean value if vibration RMS is above a given utilization threshold, default to 0.1 +7. DC component - Estimated value for the DC bias of the signal ## Use cases for the feature -- Determining trends in the vibration level over time. An increasing +1. Determining trends in the vibration level over time. An increasing trend may indicate a developing failure. - -- Comparing similar assets in terms of their RMS (or other KPI) value. - -- High level visualization of vibration measurements. +2. Comparing similar assets in terms of their RMS (or other KPI) value. +3. High level visualization of vibration measurements. ## How the KPIs work @@ -56,7 +54,7 @@ The statistical variance of the measurement values. .. math:: \frac{1}{n}\sum_{i=1}^{n}(x_i - \mu)^2 -Where $n$ is the number of samples in the measurement and $\mu$ is the average measurement value. +Where :math:`n` is the number of samples in the measurement and :math:`\mu` is the average measurement value. ### Crest factor @@ -66,7 +64,7 @@ Where $n$ is the number of samples in the measurement and $\mu$ is the average m .. math:: \theta(\text{RMS(x)} - t) -Where $t$ is the utilization threshold and $\theta$ is the heaviside step function. +Where :math:`t` is the utilization threshold and :math:`\theta` is the heaviside step function. ### DC component diff --git a/docs/source/content/utilities_reference/analysis_classes.rst b/docs/source/content/utilities_reference/analysis_classes.rst index 1e0dd5d0..48813a0f 100644 --- a/docs/source/content/utilities_reference/analysis_classes.rst +++ b/docs/source/content/utilities_reference/analysis_classes.rst @@ -23,7 +23,7 @@ MutliViz Analysis Classes :undoc-members: :show-inheritance: -.. automodule:: mvg.features.rms +.. automodule:: mvg.features.kpidemo :members: :undoc-members: :show-inheritance: From 35248b0c151c72ffa080bbfdaa9f69de39cc7c66 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Fri, 19 Nov 2021 10:31:56 +0100 Subject: [PATCH 34/90] Included selected_channels and selected_columns in request analysis method signature (#101) * Included selected_channels and selected_columns in request analysis method argument list * Code refactoring; Population analysis method signature should also have selected_channels and selected_columns * Bump MVG and Vibium versions --- mvg/mvg.py | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 12f54f1d..1a6f6a42 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -53,8 +53,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.10.1") - self.tested_api_version = self.parse_version("v0.2.7") + self.mvg_version = self.parse_version("v0.10.2") + self.tested_api_version = self.parse_version("v0.2.8") # Get API version try: @@ -671,6 +671,8 @@ def request_analysis( sid: str, feature: str, parameters: dict = None, + selected_channels: List[str] = None, + selected_columns: List[str] = None, start_timestamp: int = None, end_timestamp: int = None, callback_url: str = None, @@ -688,6 +690,14 @@ def request_analysis( parameters : dict name value pairs of parameters [optional]. + selected_channels : List[str] + Subset of Waveform Data channels for analysis. + This cannot be used in conjuction with selected_columns [optional]. + + selected_columns : List[str] + Subset of Tabular Data columns for analysis. + This cannot be used in conjuction with selected_channels [optional]. + start_timestamp : int start of analysis time window [optional]. @@ -713,6 +723,12 @@ def request_analysis( if parameters is None: parameters = dict() + # Update parameters with certain method parameters + if selected_channels: + parameters["selected_channels"] = selected_channels + if selected_columns: + parameters["selected_columns"] = selected_columns + # Package info for db to be submitted analysis_info = { "source_id": sid, @@ -735,6 +751,8 @@ def request_population_analysis( sids: List[str], feature: str, parameters: dict = None, + selected_channels: List[str] = None, + selected_columns: List[str] = None, start_timestamp: int = None, end_timestamp: int = None, callback_url: str = None, @@ -752,6 +770,14 @@ def request_population_analysis( parameters : dict name value pairs of parameters [optional]. + selected_channels : List[str] + Subset of Waveform Data channels for analysis. + This cannot be used in conjuction with selected_columns [optional]. + + selected_columns : List[str] + Subset of Tabular Data columns for analysis. + This cannot be used in conjuction with selected_channels [optional]. + start_timestamp : int start of analysis time window [optional]. @@ -777,6 +803,12 @@ def request_population_analysis( if parameters is None: parameters = dict() + # Update parameters with certain method parameters + if selected_channels: + parameters["selected_channels"] = selected_channels + if selected_columns: + parameters["selected_columns"] = selected_columns + # Package info for db to be submitted analysis_info = { "source_ids": sids, From 11bb008889fbc90e7fb337773bcdf6970da31c68 Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Sat, 20 Nov 2021 17:19:18 +0100 Subject: [PATCH 35/90] fix math rendering in kpidemo documentation (#106) * fix math rendering in kpidemo documentation * bump MVG and backend versions --- docs/source/content/features/kpidemo.md | 2 +- mvg/mvg.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/content/features/kpidemo.md b/docs/source/content/features/kpidemo.md index a904e70f..027a6a9b 100644 --- a/docs/source/content/features/kpidemo.md +++ b/docs/source/content/features/kpidemo.md @@ -23,7 +23,7 @@ The KPIDemo feature calculates a set of Key Performance Indicators (KPIs) of vib ## How the KPIs work -Each KPI attempts to summarize some behaviour of the vibration measurement into a single number. Below are the formulas for each of the KPIs where $x \in \mathbb{R}^n$ is the vibration measurement vector. +Each KPI attempts to summarize some behaviour of the vibration measurement into a single number. Below are the formulas for each of the KPIs where :math:`x \in \mathbb{R}^n` is the vibration measurement vector. ### RMS diff --git a/mvg/mvg.py b/mvg/mvg.py index 1a6f6a42..1129d17f 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -53,8 +53,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.10.2") - self.tested_api_version = self.parse_version("v0.2.8") + self.mvg_version = self.parse_version("v0.10.3") + self.tested_api_version = self.parse_version("v0.2.9") # Get API version try: From 769c65b6b923e88f830dcbfc3fdb5cb8fef33696 Mon Sep 17 00:00:00 2001 From: Oskar Liew <43787643+OskarLiew@users.noreply.github.com> Date: Mon, 22 Nov 2021 13:15:18 +0100 Subject: [PATCH 36/90] Adding PR template (#110) --- .github/pull_request_template.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..d1026a4d --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,26 @@ +# Description + +Include a summary of this pull request + +New dependencies: (Added to requirements_*.txt) + +Fixes # (potential issues that are fixed by this PR) + +## Type of Change + +- [ ] Bug fix (non-breaking change which fixes an issue -> bump patch) +- [ ] New feature (non-breaking change which adds functionality -> bump minor version) +- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected -> bump major version) +- [ ] Documentation Update + +## Checklist + +- [ ] I have added tests that prove that my fix/feature works +- [ ] Linters pass locally and I have followed PEP8 code style +- [ ] New and existing tests pass locally +- [ ] I have updated the documentation if needed +- [ ] I have commented hard-to-understand areas in the code + +## Requirements + +- [ ] I have updated the MVG version From 2a9f9cbf35364b7f9eaae3576dbec22036e8fcff Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Mon, 22 Nov 2021 13:33:09 +0100 Subject: [PATCH 37/90] add link to documentation page (#111) --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9fbb7489..3597ac46 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# MVG: MultiViz Analytics Engine Library +# MVG: MultiViz Analytics Engine Client Library A Python library to interface the the **M**ulti**V**iz Analytics En**G**ine ('MVG') @@ -6,6 +6,9 @@ A Python library to interface the the **M**ulti**V**iz Analytics En**G**ine ('MV * interface the services by means of API calls. [API documentation](https://api.beta.multiviz.com/docs). +## Documentation + +Usage of the library and several examples can be found [here](https://vikinganalytics.github.io/mvg/). ## Obtaining the library ``` From d14c4f93b829f620f03de7c1b0037cf42634eb82 Mon Sep 17 00:00:00 2001 From: Oskar Liew <43787643+OskarLiew@users.noreply.github.com> Date: Mon, 22 Nov 2021 13:34:12 +0100 Subject: [PATCH 38/90] Adding mode probabilities to modeid class (#109) * Adding mode probabilities to modeid class * Adding key * Bumped mvg version --- mvg/features/modeid.py | 2 ++ mvg/mvg.py | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/mvg/features/modeid.py b/mvg/features/modeid.py index e4a7ecb7..0206e39b 100644 --- a/mvg/features/modeid.py +++ b/mvg/features/modeid.py @@ -28,7 +28,9 @@ def __init__(self, results, t_zone=None, t_unit=None): else: dict_for_df = self.results().copy() dict_for_emerging = dict_for_df.pop("mode_info") + dict_for_mode_proba = dict_for_df.pop("mode_probabilities", {}) self.emerging_df = pd.DataFrame.from_dict(dict_for_emerging) + self.probabilities = pd.DataFrame.from_dict(dict_for_mode_proba) self._results_df = pd.DataFrame.from_dict(dict_for_df) self._add_datetime() self.emerging_df = self._add_datetime_df(self.emerging_df, "emerging_time") diff --git a/mvg/mvg.py b/mvg/mvg.py index 1129d17f..4ac08963 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -53,7 +53,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.10.3") + self.mvg_version = self.parse_version("v0.10.4") self.tested_api_version = self.parse_version("v0.2.9") # Get API version From 87caf0e5b9a004dae4c0c141c279065993435951 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Fri, 26 Nov 2021 09:10:07 +0100 Subject: [PATCH 39/90] Pytest conftest refactor and test cases for selected channels and selected columns (#113) * Added pytest initial configuration and fixtures for multiaxial waveform, tabular * Utility methods * Replace own token with token from env * Code refactorings * Test cases for selected_channels and selected_columns (ModeId) * Done linting * Create multiaxial sources via dynamic fixtures * Bug: Blacksheep feature at the backend doesn't allow selected_channels and selected_columns * Done linting * Bump MVG version * Bug: Blacksheep feature at the backend doesn't allow selected_channels and selected_columns --- mvg/mvg.py | 18 +--- tests/conftest.py | 92 ++++++++++++++++---- tests/helpers.py | 101 ++++++++++++++++++++++ tests/test_api_analyses.py | 39 +++++++++ tests/test_api_general.py | 4 +- tests/test_api_sources.py | 173 +++++++++++++++++-------------------- 6 files changed, 294 insertions(+), 133 deletions(-) create mode 100644 tests/helpers.py diff --git a/mvg/mvg.py b/mvg/mvg.py index 4ac08963..2e5c85d2 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -53,7 +53,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.10.4") + self.mvg_version = self.parse_version("v0.10.5") self.tested_api_version = self.parse_version("v0.2.9") # Get API version @@ -751,8 +751,6 @@ def request_population_analysis( sids: List[str], feature: str, parameters: dict = None, - selected_channels: List[str] = None, - selected_columns: List[str] = None, start_timestamp: int = None, end_timestamp: int = None, callback_url: str = None, @@ -770,14 +768,6 @@ def request_population_analysis( parameters : dict name value pairs of parameters [optional]. - selected_channels : List[str] - Subset of Waveform Data channels for analysis. - This cannot be used in conjuction with selected_columns [optional]. - - selected_columns : List[str] - Subset of Tabular Data columns for analysis. - This cannot be used in conjuction with selected_channels [optional]. - start_timestamp : int start of analysis time window [optional]. @@ -803,12 +793,6 @@ def request_population_analysis( if parameters is None: parameters = dict() - # Update parameters with certain method parameters - if selected_channels: - parameters["selected_channels"] = selected_channels - if selected_columns: - parameters["selected_columns"] = selected_columns - # Package info for db to be submitted analysis_info = { "source_ids": sids, diff --git a/tests/conftest.py b/tests/conftest.py index 0f5033e6..d72e4466 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -12,6 +12,12 @@ import sys from requests import HTTPError +from tests.helpers import ( + generate_sources_patterns, + stub_multiaxial_data, + upload_measurements, +) + # This version of conftest.py adds some really ugly code to # run the tests as integration tests by running like # > pytest -s tests --host http://127.0.0.1:8000 @@ -41,11 +47,12 @@ def pytest_addoption(parser): version_session = MVG("https://api.beta.multiviz.com", "NO TOKEN") VIBIUM_VERSION = "v" + str(version_session.tested_api_version) -VALID_TOKEN = os.environ["TEST_TOKEN"] - -# Test data and session setup -REF_DB_PATH = Path.cwd() / "tests" / "test_data" / "mini_charlie" -SOURCE_ID_WAVEFORM = uuid.uuid1().hex # generate a unique source per testrun +# Pytest initial configuration +def pytest_configure(): + pytest.SOURCE_ID_WAVEFORM = uuid.uuid1().hex + pytest.REF_DB_PATH = Path.cwd() / "tests" / "test_data" / "mini_charlie" + pytest.SOURCE_ID_TABULAR = uuid.uuid1().hex + pytest.VALID_TOKEN = os.environ["TEST_TOKEN"] def is_responsive(url): @@ -94,23 +101,24 @@ def vibium(): @pytest.fixture(scope="session") -def session(vibium): +def session(vibium) -> MVG: url = vibium print("Overriding vibium function with url %s", url) - session = MVG(url, VALID_TOKEN) + session = MVG(url, pytest.VALID_TOKEN) # To make sure we start from a clean slate # we delete our resource in case it exists # All information including measurements # will be removed # TO DO delete all so, currently we only # handle resource SOURCE_ID + source = pytest.SOURCE_ID_WAVEFORM try: - session.get_source(SOURCE_ID_WAVEFORM) - print(f"Deleting {SOURCE_ID_WAVEFORM}") - session.delete_source(SOURCE_ID_WAVEFORM) + session.get_source(source) + print(f"Deleting {source}") + session.delete_source(source) except HTTPError: - print(f"Source {SOURCE_ID_WAVEFORM} does not exist") + print(f"Source {source} does not exist") return session @@ -118,20 +126,21 @@ def session(vibium): @pytest.fixture() def waveform_source(session): try: - m_file_name = REF_DB_PATH / "u0001" / "meta.json" + source = pytest.SOURCE_ID_WAVEFORM + m_file_name = pytest.REF_DB_PATH / "u0001" / "meta.json" with open(m_file_name, "r") as json_file: meta = json.load(json_file) # create_source happy case - session.create_source(SOURCE_ID_WAVEFORM, meta=meta, channels=["acc"]) - yield SOURCE_ID_WAVEFORM + session.create_source(source, meta=meta, channels=["acc"]) + yield source finally: - session.delete_source(SOURCE_ID_WAVEFORM) + session.delete_source(source) @pytest.fixture() def waveform_source_with_measurements(session, waveform_source): # get list of measurements - src_path = REF_DB_PATH / "u0001" + src_path = pytest.REF_DB_PATH / "u0001" meas = {f.split(".")[0] for f in os.listdir(src_path)} meas.remove("meta") meas = [int(m) for m in meas] @@ -141,7 +150,7 @@ def waveform_source_with_measurements(session, waveform_source): for ts_m in meas: # samples file for one measurement ts_meas = str(ts_m) + ".csv" # filename - ts_meas = REF_DB_PATH / "u0001" / ts_meas # path to file + ts_meas = src_path / ts_meas # path to file ts_df = pd.read_csv( ts_meas, names=["acc"], float_precision="round_trip" ) # read csv into df @@ -150,7 +159,7 @@ def waveform_source_with_measurements(session, waveform_source): # meta information file for one measurement ts_meta = str(ts_m) + ".json" # filename - ts_meta = REF_DB_PATH / "u0001" / ts_meta # path + ts_meta = src_path / ts_meta # path with open(ts_meta, "r") as json_file: # read json meas_info = json.load(json_file) # into dict print(f"Read meta:{meas_info}") @@ -182,3 +191,50 @@ def waveform_source_with_measurements(session, waveform_source): ) yield waveform_source + + +def waveform_source_multiaxial_fixture_creator(source_id, pattern): + @pytest.fixture + def fixture(session): + try: + timestamps, data, _ = stub_multiaxial_data(pattern=pattern) + session.create_source( + source_id, meta={"type": "pump"}, channels=list(pattern.keys()) + ) + upload_measurements(session, source_id, data) + yield source_id, timestamps + finally: + session.delete_source(source_id) + + return fixture + + +""" +Create multiaxial sources with generated measurements based on a pattern +""" +sources_pattern = generate_sources_patterns() +waveform_source_multiaxial_001 = waveform_source_multiaxial_fixture_creator( + *sources_pattern[0] +) + + +@pytest.fixture() +def tabular_source(session): + source_id = pytest.SOURCE_ID_TABULAR + try: + tabular_df = pd.read_csv( + pytest.REF_DB_PATH.parent / "tabular_data.csv", float_precision="round_trip" + ) + columns = tabular_df.columns.tolist() + meta = {"extra": "information"} + session.create_tabular_source(source_id, meta, columns) + yield source_id, tabular_df.to_dict("list") + finally: + session.delete_source(source_id) + + +@pytest.fixture() +def tabular_source_with_measurements(session, tabular_source): + source_id, tabular_dict = tabular_source + session.create_tabular_measurement(source_id, tabular_dict) + yield tabular_source diff --git a/tests/helpers.py b/tests/helpers.py new file mode 100644 index 00000000..97e0c2a4 --- /dev/null +++ b/tests/helpers.py @@ -0,0 +1,101 @@ +import numpy as np +from itertools import cycle + +from mvg.mvg import MVG + + +def upload_measurements(session: MVG, sid: str, data: list): + """Upload measurements for a source""" + timestamps = list(data.keys()) + for ts in timestamps: + ts_data = data[ts] + session.create_measurement( + sid, ts_data["meta"]["duration"], ts, ts_data["data"], ts_data["meta"] + ) + + +def stub_multiaxial_data(samp_freq=3000, duration=3.0, pattern={}): + """Create measurements based on cosine signals (with added noise) for a multiaxial source. + + Parameters + ---------- + samp_freq + Sampling frequency of the signal + duration + Duration of each measurement + pattern + Dictionary of axis with each axis pointing to a list of patterns. Length of every pattern must be equal. + + Returns + ------- + timestamps + List of timestamps, one for each measurement + data + Dictionary of timestamps, with each timestamp pointing to a dictionary containing measurements for each axis and metadata + duration + Duration of the measurements + + Examples + -------- + >>> pattern = {'acc_x': [0] * 1 + [1] * 1, 'acc_x': [0] * 2, 'acc_z': [1] * 2} + >>> timestamps, data, duration = stub_multiaxial_data() + >>> print(data) + {0: {"data": {"acc_x": [...], "acc_y": [...], "acc_z": [...]}, "meta": {}}, 3600000: {"data": {"acc_x": [...], "acc_y": [...], "acc_z": [...]}, "meta": {}}} + """ + + # Collect list of axis and number of measurements from pattern + axes = list(pattern.keys()) + assert len(axes) > 0 and len(axes) <= 3 + n_meas = len(list(pattern.values())[0]) + assert all(len(p) == n_meas for p in pattern.values()) + + timestamps = [k * 3600 * 1000 for k in range(n_meas)] + n_samples = int(samp_freq * duration) + T = np.linspace(0.0, duration, n_samples + 1) + f_peak = 300.0 + np.random.seed(0) + + # Find unique modes from the pattern + unique_modes = set() + for value_list in list(pattern.values()): + unique_modes.update(value_list) + + # Define signal for each unique mode + signals = [] + for k in unique_modes: + signals.append(np.cos(2 * np.pi * (f_peak + (k * 200)) * T)) + + # Generate data dict + # Iterate through a zip of (timestamp, list of axis, list of pattern for the timestamp) + data = {} + pattern_by_meas = zip(*pattern.values()) + for timestamp, axes_list, ptn_list in zip( + timestamps, cycle([axes]), pattern_by_meas + ): + data[timestamp] = { + "data": { + axis: list(signals[ptn] + np.random.normal(0, 0.05, len(T))) + for (axis, ptn) in zip(axes_list, ptn_list) + }, + "meta": { + "duration": duration, + "sampling_rate": samp_freq, + }, + } + + return timestamps, data, duration + + +def generate_sources_patterns(): + """Generate a list of multiaxial sources with axis-based patterns""" + sources_patterns = [ + ( + "multiaxial_source_001", + { + "acc_x": [0] * 6 + [1] * 14 + [0] * 5, + "acc_y": [0] * 6 + [1] * 14 + [0] * 5, + "acc_z": [0] * 6 + [1] * 14 + [0] * 5, + }, + ) + ] + return sources_patterns diff --git a/tests/test_api_analyses.py b/tests/test_api_analyses.py index 5f056d08..23fb2739 100644 --- a/tests/test_api_analyses.py +++ b/tests/test_api_analyses.py @@ -91,3 +91,42 @@ def test_callback_server_failure( ) session.wait_for_analyses([req["request_id"]]) assert "400 Bad Request" in LOG_FILE.read_text() + + +def test_modeid_analysis_selected_columns(session, tabular_source_with_measurements): + source_id, tabular_dict = tabular_source_with_measurements + columns = list(tabular_dict.keys()) + + def assert_results(selected_columns): + req = session.request_analysis( + source_id, "ModeId", selected_columns=selected_columns + ) + session.wait_for_analyses([req["request_id"]]) + results = session.get_analysis_results(req["request_id"]) + assert results["inputs"]["selected_columns"] == (selected_columns or []) + + # Test with defined selected_columns + assert_results(columns[1:3]) + + # Test with defined selected_columns + assert_results(None) + + +def test_modeid_analysis_selected_channels(session, waveform_source_multiaxial_001): + source_id, _ = waveform_source_multiaxial_001 + source_info = session.get_source(source_id) + channels = source_info["properties"]["channels"] + + def assert_results(selected_channels): + req = session.request_analysis( + source_id, "ModeId", selected_channels=selected_channels + ) + session.wait_for_analyses([req["request_id"]]) + results = session.get_analysis_results(req["request_id"]) + assert results["inputs"]["selected_channels"] == (selected_channels or []) + + # Test with defined selected_channels + assert_results(channels[:2]) + + # Test with defined selected_channels + assert_results(None) diff --git a/tests/test_api_general.py b/tests/test_api_general.py index 3080fb00..15cc9f4a 100644 --- a/tests/test_api_general.py +++ b/tests/test_api_general.py @@ -11,8 +11,8 @@ import requests from mvg import MVG -VALID_TOKEN = os.environ["TEST_TOKEN"] - +# MVG Token +VALID_TOKEN = pytest.VALID_TOKEN # API / def test_say_hello(vibium): diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index 051db701..ea4d112c 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -7,44 +7,12 @@ -p no:randomly """ from datetime import datetime, timedelta -from pathlib import Path - import os import json -import uuid +import numpy as np import pandas as pd from requests import HTTPError import pytest -import numpy as np - -# Test data and session setup -REF_DB_PATH = Path.cwd() / "tests" / "test_data" / "mini_charlie" -SOURCE_ID_WAVEFORM = uuid.uuid1().hex # generate a unique source per test - -SOURCE_ID_TABULAR = uuid.uuid1().hex - -tabular_df = pd.read_csv( - REF_DB_PATH.parent / "tabular_data.csv", float_precision="round_trip" -) -tabular_dict = tabular_df.to_dict("list") - - -@pytest.fixture() -def tabular_source(session): - try: - columns = tabular_df.columns.tolist() - meta = {"extra": "information"} - session.create_tabular_source(SOURCE_ID_TABULAR, meta, columns) - yield SOURCE_ID_TABULAR - finally: - session.delete_source(SOURCE_ID_TABULAR) - - -@pytest.fixture() -def tabular_source_with_measurements(session, tabular_source): - session.create_tabular_measurement(SOURCE_ID_TABULAR, tabular_dict) - yield tabular_source - # Just to check if API is live def test_say_hello(session): @@ -62,21 +30,22 @@ def test_say_hello(session): # API GET /sources/{source_id} # API PUT /sources/{source_id} def test_sources_cru(session): - m_file_name = REF_DB_PATH / "u0001" / "meta.json" + source = pytest.SOURCE_ID_WAVEFORM + m_file_name = pytest.REF_DB_PATH / "u0001" / "meta.json" with open(m_file_name, "r") as json_file: meta = json.load(json_file) # create_source happy case - session.create_source(SOURCE_ID_WAVEFORM, meta=meta, channels=["acc"]) + session.create_source(source, meta=meta, channels=["acc"]) # list_source happy case - src = session.get_source(SOURCE_ID_WAVEFORM) - assert src["source_id"] == SOURCE_ID_WAVEFORM + src = session.get_source(source) + assert src["source_id"] == source assert src["meta"] == meta # update source meta["updated"] = "YES!" - session.update_source(SOURCE_ID_WAVEFORM, meta) - src = session.get_source(SOURCE_ID_WAVEFORM) - assert src["source_id"] == SOURCE_ID_WAVEFORM + session.update_source(source, meta) + src = session.get_source(source) + assert src["source_id"] == source assert src["meta"] == meta @@ -84,7 +53,7 @@ def test_sources_cru(session): def test_list_sources(session): sources = session.list_sources() print(sources) - assert False in [SOURCE_ID_WAVEFORM != s["source_id"] for s in sources] + assert False in [pytest.SOURCE_ID_WAVEFORM != s["source_id"] for s in sources] # API GET /sources/{source_id}/measurements @@ -93,9 +62,9 @@ def test_list_sources(session): # API PUT /sources/{source_id}/measurements/{timestamp} # API DELETE /sources/{source_id}/measurements/{timestamp} def test_measurements_crud(session): - + source = pytest.SOURCE_ID_WAVEFORM # get list of measurements - src_path = REF_DB_PATH / "u0001" + src_path = pytest.REF_DB_PATH / "u0001" meas = {f.split(".")[0] for f in os.listdir(src_path)} meas.remove("meta") meas = [int(m) for m in meas] @@ -106,7 +75,7 @@ def test_measurements_crud(session): # samples file for one measurement ts_meas = str(ts_m) + ".csv" # filename - ts_meas = REF_DB_PATH / "u0001" / ts_meas # path to file + ts_meas = src_path / ts_meas # path to file ts_df = pd.read_csv( ts_meas, names=["acc"], float_precision="round_trip" ) # read csv into df @@ -115,7 +84,7 @@ def test_measurements_crud(session): # meta information file for one measurement ts_meta = str(ts_m) + ".json" # filename - ts_meta = REF_DB_PATH / "u0001" / ts_meta # path + ts_meta = src_path / ts_meta # path with open(ts_meta, "r") as json_file: # read json meas_info = json.load(json_file) # into dict print(f"Read meta:{meas_info}") @@ -129,7 +98,7 @@ def test_measurements_crud(session): # create session.create_measurement( - sid=SOURCE_ID_WAVEFORM, + sid=source, duration=duration, timestamp=ts_m, data={"acc": accs}, @@ -138,7 +107,7 @@ def test_measurements_crud(session): # create again (ignore error) session.create_measurement( - sid=SOURCE_ID_WAVEFORM, + sid=source, duration=duration, timestamp=ts_m, data={"acc": accs}, @@ -147,26 +116,26 @@ def test_measurements_crud(session): ) # read back and check - m_back = session.read_single_measurement(SOURCE_ID_WAVEFORM, ts_m) + m_back = session.read_single_measurement(source, ts_m) assert m_back["data"] == {"acc": accs} assert m_back["meta"] == meta_info assert m_back["duration"] == duration # update meta_info["updated"] = "YES!" - session.update_measurement(SOURCE_ID_WAVEFORM, ts_m, meta_info) + session.update_measurement(source, ts_m, meta_info) # read back and check - m_back = session.read_single_measurement(SOURCE_ID_WAVEFORM, ts_m) + m_back = session.read_single_measurement(source, ts_m) assert m_back["data"] == {"acc": accs} assert m_back["meta"] == meta_info assert m_back["duration"] == duration # delete - session.delete_measurement(SOURCE_ID_WAVEFORM, ts_m) + session.delete_measurement(source, ts_m) # check if empty - m_left = session.list_measurements(SOURCE_ID_WAVEFORM) + m_left = session.list_measurements(source) assert len(m_left) == 0 @@ -185,7 +154,7 @@ def test_failure_create_measurement(session): def test_failure_get_measurement(session): with pytest.raises(HTTPError) as exc: - session.delete_measurement(SOURCE_ID_WAVEFORM, 314152) + session.delete_measurement(pytest.SOURCE_ID_WAVEFORM, 314152) assert exc.value.response.status_code == 404 @@ -219,9 +188,9 @@ def test_failure_create_source(session): # API DELETE /sources/{source_id} def test_sources_d(session): - session.delete_source(SOURCE_ID_WAVEFORM) + session.delete_source(pytest.SOURCE_ID_WAVEFORM) with pytest.raises(HTTPError) as exc: - session.get_source(sid=SOURCE_ID_WAVEFORM) + session.get_source(sid=pytest.SOURCE_ID_WAVEFORM) assert exc.value.response.status_code == 404 print("Finishing") @@ -234,84 +203,93 @@ def test_sources_d(session): # API POST /sources/{source_id} - source exists, ignored # API POST /sources/{source_id} - source exists, not ignored def test_sources_cru_existing(session): - m_file_name = REF_DB_PATH / "u0001" / "meta.json" + source = pytest.SOURCE_ID_WAVEFORM + m_file_name = pytest.REF_DB_PATH / "u0001" / "meta.json" with open(m_file_name, "r") as json_file: meta = json.load(json_file) # create_source happy case - session.create_source(SOURCE_ID_WAVEFORM, meta=meta, channels=["acc"]) + session.create_source(source, meta=meta, channels=["acc"]) # list_source happy case - src = session.get_source(SOURCE_ID_WAVEFORM) - assert src["source_id"] == SOURCE_ID_WAVEFORM + src = session.get_source(source) + assert src["source_id"] == source assert src["meta"] == meta # create_source again (409 ignored) - session.create_source( - SOURCE_ID_WAVEFORM, meta=meta, channels=["acc"], exist_ok=True - ) + session.create_source(source, meta=meta, channels=["acc"], exist_ok=True) # create_source again (409 not ignored) with pytest.raises(HTTPError): - session.create_source(SOURCE_ID_WAVEFORM, meta=meta, channels=["acc"]) + session.create_source(source, meta=meta, channels=["acc"]) def test_tabular_sources(session, tabular_source): - columns = tabular_df.columns.tolist() + source_id, tabular_dict = tabular_source + columns = list(tabular_dict.keys()) meta = {"extra": "information"} # create source again (409 ignored) - session.create_tabular_source(tabular_source, meta, columns, exist_ok=True) + session.create_tabular_source(source_id, meta, columns, exist_ok=True) # create source again (409 not ignored) with pytest.raises(HTTPError) as exc: - session.create_tabular_source(tabular_source, meta, columns) + session.create_tabular_source(source_id, meta, columns) assert exc.value.response.status_code == 409 columns.remove("timestamp") - src = session.get_source(tabular_source) - assert src["source_id"] == tabular_source + src = session.get_source(source_id) + assert src["source_id"] == source_id assert src["meta"] == meta assert src["properties"]["columns"] == columns def test_tabular_measurements_float_timestamps(session, tabular_source): with pytest.raises(HTTPError) as exc: + source_id, tabular_dict = tabular_source tabular_dict_float = tabular_dict.copy() tabular_dict_float["timestamp"] = [ts + 0.1 for ts in tabular_dict["timestamp"]] - session.create_tabular_measurement(tabular_source, tabular_dict_float) + session.create_tabular_measurement(source_id, tabular_dict_float) assert exc.value.response.status_code == 422 def test_tabular_measurements(session, tabular_source): - columns = tabular_df.columns.tolist() + source_id, tabular_dict = tabular_source + columns = list(tabular_dict.keys()) columns.remove("timestamp") - session.create_tabular_measurement(tabular_source, tabular_dict) + tabular_df = pd.DataFrame(tabular_dict) + + # Create tabular measurement + session.create_tabular_measurement(source_id, tabular_dict) # create measurements again (409 ignored) - session.create_tabular_measurement(tabular_source, tabular_dict, exist_ok=True) + session.create_tabular_measurement(source_id, tabular_dict, exist_ok=True) # create measurements again (409 not ignored) with pytest.raises(HTTPError) as exc: - session.create_tabular_measurement(tabular_source, tabular_dict) + session.create_tabular_measurement(source_id, tabular_dict) assert exc.value.response.status_code == 409 + # Validate read single measruement ts0 = tabular_dict["timestamp"][0] - meas = session.read_single_measurement(tabular_source, ts0) + meas = session.read_single_measurement(source_id, ts0) assert meas["meta"] == {} assert all(np.array(meas["data"]) == tabular_df.drop("timestamp", axis=1).iloc[0]) assert meas["columns"] == columns - session.update_measurement(tabular_source, ts0, {"new": "meta"}) - meas = session.read_single_measurement(tabular_source, ts0) + # Validate update measurement + session.update_measurement(source_id, ts0, {"new": "meta"}) + meas = session.read_single_measurement(source_id, ts0) assert meas["meta"] == {"new": "meta"} - session.delete_measurement(tabular_source, ts0) + # Validate delete measurement + session.delete_measurement(source_id, ts0) with pytest.raises(HTTPError) as exc: - session.read_single_measurement(tabular_source, ts0) + session.read_single_measurement(source_id, ts0) assert exc.value.response.status_code == 404 def test_list_tabular_measurements(session, tabular_source): - columns = tabular_df.columns.tolist() + source_id, tabular_dict = tabular_source + columns = list(tabular_dict.keys()) ts_0 = tabular_dict["timestamp"][0] ts_1 = tabular_dict["timestamp"][1] @@ -324,10 +302,10 @@ def test_list_tabular_measurements(session, tabular_source): } # Create all measurements - session.create_tabular_measurement(tabular_source, tabular_dict, meta) + session.create_tabular_measurement(source_id, tabular_dict, meta) # Retrieve data for a segment (1..n) - response = session.list_tabular_measurements(tabular_source, ts_1, ts_n) + response = session.list_tabular_measurements(source_id, ts_1, ts_n) assert all( tabular_dict[column][1:] == response["data"][column] for column in columns ) @@ -335,7 +313,7 @@ def test_list_tabular_measurements(session, tabular_source): assert response["meta"][f"{ts_1}"] == meta[f"{ts_1}"] # Retrieve entire data (0..n) - response = session.list_tabular_measurements(tabular_source, None, None) + response = session.list_tabular_measurements(source_id, None, None) assert all(tabular_dict[column] == response["data"][column] for column in columns) assert len(response["meta"].keys()) == 2 assert response["meta"][f"{ts_0}"] == meta[f"{ts_0}"] @@ -343,32 +321,33 @@ def test_list_tabular_measurements(session, tabular_source): # Retrieve data that is beyond the range of the dataset timestamps with pytest.raises(HTTPError) as exc: - session.list_tabular_measurements(tabular_source, ts_n + 1, ts_n + 2) + session.list_tabular_measurements(source_id, ts_n + 1, ts_n + 2) assert exc.value.response.status_code == 404 # Call API with negative timestamp with pytest.raises(HTTPError) as exc: - session.list_tabular_measurements(tabular_source, -1) + session.list_tabular_measurements(source_id, -1) assert exc.value.response.status_code == 422 # Call API with negative timestamp with pytest.raises(HTTPError) as exc: - session.list_tabular_measurements(tabular_source, None, -1) + session.list_tabular_measurements(source_id, None, -1) assert exc.value.response.status_code == 422 def test_create_label(session, tabular_source_with_measurements): + source_id, tabular_dict = tabular_source_with_measurements timestamps = tabular_dict["timestamp"] label1 = {"label": "normal", "severity": 0, "notes": ""} label2 = {"label": "failure", "severity": 100, "notes": "This is really bad!"} - session.create_label(tabular_source_with_measurements, timestamps[0], **label1) - session.create_label(tabular_source_with_measurements, timestamps[1], **label2) + session.create_label(source_id, timestamps[0], **label1) + session.create_label(source_id, timestamps[1], **label2) - label1_response = session.get_label(tabular_source_with_measurements, timestamps[0]) - label2_response = session.get_label(tabular_source_with_measurements, timestamps[1]) + label1_response = session.get_label(source_id, timestamps[0]) + label2_response = session.get_label(source_id, timestamps[1]) - labels = session.list_labels(tabular_source_with_measurements) + labels = session.list_labels(source_id) # Remove timestamps for label in labels: @@ -393,14 +372,15 @@ def test_create_label(session, tabular_source_with_measurements): def test_update_label(session, tabular_source_with_measurements): + source_id, tabular_dict = tabular_source_with_measurements timestamps = tabular_dict["timestamp"] label_pre = {"label": "failure", "severity": 100, "notes": "This is really bad!"} - session.create_label(tabular_source_with_measurements, timestamps[0], **label_pre) + session.create_label(source_id, timestamps[0], **label_pre) label_post = {"label": "normal", "severity": 0, "notes": "It wasn't so bad"} - session.update_label(tabular_source_with_measurements, timestamps[0], **label_post) + session.update_label(source_id, timestamps[0], **label_post) - label_response = session.get_label(tabular_source_with_measurements, timestamps[0]) + label_response = session.get_label(source_id, timestamps[0]) label_timestamp = label_response.pop("label_timestamp") dtdiff = datetime.utcnow() - datetime.strptime(label_timestamp, "%Y-%m-%d %H:%M:%S") @@ -409,18 +389,19 @@ def test_update_label(session, tabular_source_with_measurements): def test_delete_label(session, tabular_source_with_measurements): + source_id, tabular_dict = tabular_source_with_measurements timestamps = tabular_dict["timestamp"] session.create_label( - tabular_source_with_measurements, + source_id, timestamps[0], "failure", 100, "This is really bad!", ) - session.delete_label(tabular_source_with_measurements, timestamps[0]) + session.delete_label(source_id, timestamps[0]) with pytest.raises(HTTPError) as exc: - session.get_label(tabular_source_with_measurements, timestamps[0]) + session.get_label(source_id, timestamps[0]) assert exc.value.response.status_code == 404 From 750b902bd490a98ee906dbf1bfd719e9845c59c5 Mon Sep 17 00:00:00 2001 From: Oskar Liew <43787643+OskarLiew@users.noreply.github.com> Date: Fri, 26 Nov 2021 09:23:01 +0100 Subject: [PATCH 40/90] Added page about API callback (#114) * Added page about API callback * Bumped mvg patch version --- docs/source/content/advanced/callback.md | 5 +++++ docs/source/index.rst | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100644 docs/source/content/advanced/callback.md diff --git a/docs/source/content/advanced/callback.md b/docs/source/content/advanced/callback.md new file mode 100644 index 00000000..ca2d42f9 --- /dev/null +++ b/docs/source/content/advanced/callback.md @@ -0,0 +1,5 @@ +# Callback on Analysis Completion + +The MVG API has support for OpenAPI callbacks, meaning that you could create an API on your own and have MVG trigger a request to it when an analysis is completed. + +The request analysis methods of the MVG object have a keyword argument for a `callback_url` to an HTTP server with an `{$callback_url}/analysis` endpoint. The endpoint should have a POST method with two JSON body arguments, a string `request_status` and a string `request_id`. The format of the endpoint you need to implement is documented in the [MVG API documentation](https://api.beta.multiviz.com/docs#//request_notification__callback_url__analyses_post) under the Callbacks tab of the POST `analyses/requests` methods. diff --git a/docs/source/index.rst b/docs/source/index.rst index ea96ae98..396151f3 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -29,6 +29,12 @@ content/features/ModeId content/features/blacksheep +.. toctree:: + :maxdepth: 2 + :caption: Advanced usage + + content/advanced/callback + .. toctree:: :maxdepth: 2 :caption: API Reference From cea03f3391b706394825008ac9c5b73772efc663 Mon Sep 17 00:00:00 2001 From: Oskar Liew <43787643+OskarLiew@users.noreply.github.com> Date: Tue, 7 Dec 2021 09:07:51 +0100 Subject: [PATCH 41/90] Added MVG errors with better error messages (#115) * Added MVG errors with better error messages * Bump version * fixing docstring * Removing unused test helper * Review comment changes * Linters --- analysis_classes_examples/tabular.py | 7 +- .../content/examples/brief_overview.ipynb | 166 +++++++++--------- .../content/examples/error_handling.ipynb | 84 +++------ .../examples/sources_and_measurements.ipynb | 76 ++++---- mvg/exceptions.py | 36 ++++ mvg/mvg.py | 10 +- tests/conftest.py | 4 +- tests/test_api_general.py | 10 +- tests/test_api_sources.py | 33 ++-- tests/test_errors.py | 51 ++++++ tests/test_mvg.py | 14 -- 11 files changed, 273 insertions(+), 218 deletions(-) create mode 100644 mvg/exceptions.py create mode 100644 tests/test_errors.py delete mode 100644 tests/test_mvg.py diff --git a/analysis_classes_examples/tabular.py b/analysis_classes_examples/tabular.py index 6d12d6dc..13b22371 100644 --- a/analysis_classes_examples/tabular.py +++ b/analysis_classes_examples/tabular.py @@ -2,10 +2,9 @@ # the server side import os -from requests import HTTPError from mvg import MVG -from mvg import analysis_classes from mvg.analysis_classes import parse_results +from mvg.exceptions import MVGAPIError ## Preprartions import pandas as pd @@ -40,10 +39,8 @@ ana_res = ses.get_analysis_results(REQ_ID) print(ana_res) -except HTTPError as exc: +except MVGAPIError as exc: print(exc) - print("Details on error") - print(exc.response.json()) ana = parse_results(ana_res, t_zone="Europe/Stockholm", t_unit="s") ana.plot() diff --git a/docs/source/content/examples/brief_overview.ipynb b/docs/source/content/examples/brief_overview.ipynb index 902c92bc..eb65fd94 100644 --- a/docs/source/content/examples/brief_overview.ipynb +++ b/docs/source/content/examples/brief_overview.ipynb @@ -69,9 +69,7 @@ "import sys\n", "from pathlib import Path\n", "\n", - "from tqdm.notebook import tqdm\n", - "import pandas as pd\n", - "from requests import HTTPError" + "import pandas as pd" ] }, { @@ -121,7 +119,8 @@ }, "outputs": [], "source": [ - "from mvg import MVG" + "from mvg import MVG\n", + "from mvg.exceptions import MVGAPIError" ] }, { @@ -196,8 +195,8 @@ "data": { "text/plain": [ "{'api': {'name': 'MultiViz Engine API',\n", - " 'version': 'v0.2.7',\n", - " 'swagger': 'http://api.beta.multiviz.com/docs'}}" + " 'version': '0.0.0-dev0',\n", + " 'swagger': 'http://localhost:8000/docs'}}" ] }, "execution_count": 5, @@ -235,7 +234,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "Deleting u0001\n" + "Deleting 625d56104ea711ec943c00155da2e1da\n", + "Deleting string\n", + "Deleting test_source_1\n", + "Deleting test_tab_1\n", + "Deleting u0001\n", + "Deleting zeros\n" ] } ], @@ -646,8 +650,8 @@ " timestamp=int(m), \n", " data={\"acc\": accs}, \n", " meta=meta_info)\n", - " except HTTPError as exc:\n", - " print(exc.response.text)" + " except MVGAPIError as exc:\n", + " print(str(exc))" ] }, { @@ -659,7 +663,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.187529Z", @@ -694,7 +698,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.319506Z", @@ -714,7 +718,7 @@ " 'LabelPropagation': '0.1.0'}" ] }, - "execution_count": 15, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -738,7 +742,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.439918Z", @@ -755,7 +759,7 @@ "{'request_id': '75fc046d1b6ca741cf442552f506f95b', 'request_status': 'queued'}" ] }, - "execution_count": 16, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -789,7 +793,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.571418Z", @@ -829,7 +833,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.716298Z", @@ -846,7 +850,7 @@ "{'request_id': '09fa086e2bcf4d25b2ad39a442d2c5ad', 'request_status': 'queued'}" ] }, - "execution_count": 18, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -865,7 +869,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.881788Z", @@ -914,7 +918,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:17.505749Z", @@ -931,7 +935,7 @@ "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" ] }, - "execution_count": 21, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -959,7 +963,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 20, "metadata": { "pycharm": { "name": "#%%\n" @@ -984,7 +988,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 21, "metadata": { "pycharm": { "name": "#%%\n" @@ -1008,7 +1012,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 22, "metadata": { "pycharm": { "name": "#%%\n" @@ -1135,7 +1139,7 @@ "4 1970-01-19 04:15:32.460000+00:00 " ] }, - "execution_count": 25, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -1161,7 +1165,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 23, "metadata": { "pycharm": { "name": "#%%\n" @@ -1336,7 +1340,7 @@ "max 4.992498 1.0 -0.109068 " ] }, - "execution_count": 37, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -1358,7 +1362,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 24, "metadata": { "pycharm": { "name": "#%%\n" @@ -1383,7 +1387,7 @@ "''" ] }, - "execution_count": 27, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -1411,7 +1415,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 25, "metadata": { "pycharm": { "name": "#%%\n" @@ -1435,7 +1439,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 26, "metadata": { "pycharm": { "name": "#%%\n" @@ -1474,7 +1478,7 @@ " \n", " 0\n", " 1570186860\n", - " 0\n", + " 2\n", " False\n", " 0.939155\n", " 2019-10-04 11:01:00+00:00\n", @@ -1482,7 +1486,7 @@ " \n", " 1\n", " 1570273260\n", - " 0\n", + " 2\n", " False\n", " 0.872610\n", " 2019-10-05 11:01:00+00:00\n", @@ -1490,7 +1494,7 @@ " \n", " 2\n", " 1570359660\n", - " 0\n", + " 2\n", " False\n", " 0.982989\n", " 2019-10-06 11:01:00+00:00\n", @@ -1498,7 +1502,7 @@ " \n", " 3\n", " 1570446060\n", - " 0\n", + " 2\n", " False\n", " 0.996053\n", " 2019-10-07 11:01:00+00:00\n", @@ -1506,7 +1510,7 @@ " \n", " 4\n", " 1570532460\n", - " 0\n", + " 2\n", " False\n", " 0.921091\n", " 2019-10-08 11:01:00+00:00\n", @@ -1517,14 +1521,14 @@ ], "text/plain": [ " timestamps labels uncertain mode_probability datetime\n", - "0 1570186860 0 False 0.939155 2019-10-04 11:01:00+00:00\n", - "1 1570273260 0 False 0.872610 2019-10-05 11:01:00+00:00\n", - "2 1570359660 0 False 0.982989 2019-10-06 11:01:00+00:00\n", - "3 1570446060 0 False 0.996053 2019-10-07 11:01:00+00:00\n", - "4 1570532460 0 False 0.921091 2019-10-08 11:01:00+00:00" + "0 1570186860 2 False 0.939155 2019-10-04 11:01:00+00:00\n", + "1 1570273260 2 False 0.872610 2019-10-05 11:01:00+00:00\n", + "2 1570359660 2 False 0.982989 2019-10-06 11:01:00+00:00\n", + "3 1570446060 2 False 0.996053 2019-10-07 11:01:00+00:00\n", + "4 1570532460 2 False 0.921091 2019-10-08 11:01:00+00:00" ] }, - "execution_count": 29, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -1547,7 +1551,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 27, "metadata": { "pycharm": { "name": "#%%\n" @@ -1566,27 +1570,27 @@ "+----------+----------+-----------+--------------------+------------+\n", "| labels | counts | portion | mode_probability | datetime |\n", "|----------+----------+-----------+--------------------+------------|\n", - "| 0 | 17 | 34 | 17 | 17 |\n", - "| 1 | 8 | 16 | 8 | 8 |\n", - "| 2 | 25 | 50 | 25 | 25 |\n", + "| 0 | 8 | 16 | 8 | 8 |\n", + "| 1 | 25 | 50 | 25 | 25 |\n", + "| 2 | 17 | 34 | 17 | 17 |\n", "+----------+----------+-----------+--------------------+------------+\n", "\n", "Lables & uncertain labels\n", "+------------+-----------+--------------------+------------+----------+\n", "| | portion | mode_probability | datetime | counts |\n", "|------------+-----------+--------------------+------------+----------|\n", - "| (0, False) | 34 | 17 | 17 | 17 |\n", - "| (1, False) | 16 | 8 | 8 | 8 |\n", - "| (2, False) | 50 | 25 | 25 | 25 |\n", + "| (0, False) | 16 | 8 | 8 | 8 |\n", + "| (1, False) | 50 | 25 | 25 | 25 |\n", + "| (2, False) | 34 | 17 | 17 | 17 |\n", "+------------+-----------+--------------------+------------+----------+\n", "\n", "Emerging Modes\n", "+----+---------+-----------------+-----------------+-------------------+---------------------------+\n", "| | modes | emerging_time | max_prob_time | max_probability | datetime |\n", "|----+---------+-----------------+-----------------+-------------------+---------------------------|\n", - "| 0 | 0 | 1570186860 | 1570446060 | 0.996053 | 2019-10-04 11:01:00+00:00 |\n", - "| 1 | 1 | 1571655660 | 1572264060 | 0.997885 | 2019-10-21 11:01:00+00:00 |\n", - "| 2 | 2 | 1572350460 | 1573646460 | 0.989592 | 2019-10-29 12:01:00+00:00 |\n", + "| 0 | 2 | 1570186860 | 1570446060 | 0.996053 | 2019-10-04 11:01:00+00:00 |\n", + "| 1 | 0 | 1571655660 | 1572264060 | 0.997885 | 2019-10-21 11:01:00+00:00 |\n", + "| 2 | 1 | 1572350460 | 1573646460 | 0.989592 | 2019-10-29 12:01:00+00:00 |\n", "+----+---------+-----------------+-----------------+-------------------+---------------------------+\n" ] }, @@ -1595,18 +1599,18 @@ "text/plain": [ "[ counts portion mode_probability datetime\n", " labels \n", - " 0 17 34.0 17 17\n", - " 1 8 16.0 8 8\n", - " 2 25 50.0 25 25,\n", + " 0 8 16.0 8 8\n", + " 1 25 50.0 25 25\n", + " 2 17 34.0 17 17,\n", " portion mode_probability datetime counts\n", " labels uncertain \n", - " 0 False 34.0 17 17 17\n", - " 1 False 16.0 8 8 8\n", - " 2 False 50.0 25 25 25,\n", + " 0 False 16.0 8 8 8\n", + " 1 False 50.0 25 25 25\n", + " 2 False 34.0 17 17 17,\n", " modes emerging_time max_prob_time max_probability \\\n", - " 0 0 1570186860 1570446060 0.996053 \n", - " 1 1 1571655660 1572264060 0.997885 \n", - " 2 2 1572350460 1573646460 0.989592 \n", + " 0 2 1570186860 1570446060 0.996053 \n", + " 1 0 1571655660 1572264060 0.997885 \n", + " 2 1 1572350460 1573646460 0.989592 \n", " \n", " datetime \n", " 0 2019-10-04 11:01:00+00:00 \n", @@ -1614,7 +1618,7 @@ " 2 2019-10-29 12:01:00+00:00 ]" ] }, - "execution_count": 30, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -1639,7 +1643,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 28, "metadata": { "pycharm": { "name": "#%%\n" @@ -1648,7 +1652,7 @@ "outputs": [ { "data": { - "image/png": "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SZLUrurr67feeeedxwLcfvvt/adNm7apVLZ27dpu9fX1I2tra8fU1dWNfuyxx3oCrFmzptuZZ575llGjRp0yffr04Snt6Qy+6aab+o8dO/bk0aNHj7n44ouHNzTs3cnc2NjIr371q94f+tCHNgNcdtllG3/yk58c29q4TZQlSZLUri699NJNc+fO7bdr16549tlne02ePHlnqWzmzJlD6+rqdi1duvSZa665ZtWMGTNOArjqqquGTp48eceyZcuevuCCC7asXr36CIAnn3zyqLvuuqv//PnzFy9evPiZmpqadPPNNw8oX9/atWu79+7d+/UePXoAMGLEiNfWrl17RGvjNlGWJElSu5o4ceLLK1euPPKWW27pX19fv7W87PHHH+99+eWXbwSYOnXq9i1btnTftGlTzaOPPtr7sssu2whw0UUXbe3Tp8/rAPfff3/vRYsW9aqrqzt59OjRYx5++OE+y5cvP7I94vZkPkmSJLW7KVOmbLn66qtPeOCBB5asW7fugHPQlFJceOGFG2+88cZV+3rN4MGDG7Zv395t9+7d9OjRg+eff/6IwYMHv9baddmjLEmSpHZ3xRVXbLjyyitfOuOMM14unz5x4sTts2fPHgAwb9683v369Wvo379/46RJk7bPmTNnAMAdd9zRZ9u2bd0ApkyZsm3evHn9Vq1a1R3yGOelS5fuNayipqaGSZMmbZ89e3Y/gB/84AcDzj///C2tjdlEWZIk6TAxYAAturRaeyxv5MiRu2fNmrWu6fTrr7/+pQULFvSqra0d87nPfW7YnDlzngO47rrrXnrkkUeOGTVq1Cl33313vyFDhrwGMH78+FdmzZq16txzz62tra0dc84559SuWLGiR9Plfv3rX195ww03HH/iiSeeunnz5u6f+MQnNrR2+6L8DMLWmjBhQpo/f/4Bzy9JktQVRcQTKaUJ1Y5j4cKFz9fV1bU6QTycLFy4cGBdXd2ISmX2KEuSJEkVmChLkiRJFZgoS5IkSRWYKEuSJEkVHFSivLvd79ItSZIkVcdB3XDkqacgoq1CkbquA7+2jNrEj9xRSZJaz6EXkiRJh4uB1BGMb7PHQOqaW2VEjH/Pe95zUun/3bt3069fv7o/+IM/GNWa0IcNGzZ29erVLe7k/fKXvzzoxBNPPDUixrdmvnImypIkSYeLjQc3muBAltezZ8/GJUuW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", + "image/png": "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SVK7qq+v33rnnXceA3D77bcPmD59+qZS2dq1a7vV19ePqq2tHVtXVzfmscce6wWwZs2abmeeeeZbR48efcqMGTNGpLSnM/imm24aMG7cuJPHjBkz9uKLLx7R0PDmTuYZM2ZsrampoaamhokTJ+5cuXJlz9bGbaIsSZKkdnXppZdumjdvXv9du3bFc88913vKlCk7S2WzZs0aVldXt2vp0qXPXnPNNatmzpx5IsBVV101bMqUKTuWLVv2zAUXXLBl9erVPQGefPLJI++6664BCxYsWLx48eJna2pq0s033zxwX+t+7bXXYt68eQPPO++8ra2N20RZkiRJ7WrSpEmvrFy58ohbbrllQH19/V4J6+OPP97n8ssv3wgwbdq07Vu2bOm+adOmmkcffbTPZZddthHgoosu2tq3b983AO6///4+ixYt6l1XV3fymDFjxj788MN9ly9ffsS+1j1z5swTJk+evGPq1Kk7Whu3J/NJkiSp3U2dOnXL1VdfffwDDzywZN26dQecg6aU4sILL9x44403rmrutZ/5zGeGbtiwofvPfvaz3x3IuuxRliRJUru74oorNlx55ZUvn3HGGa+UT580adL2OXPmDASYP39+n/79+zcMGDCgcfLkydvnzp07EOCOO+7ou23btm4AU6dO3TZ//vz+q1at6g55jPPSpUvfNP74m9/85qCf//zn/e69997l3bp1O6CY7VGWJEk6XPQc2NDml4droVGjRu2ePXv2uqbTr7/++pcvueSSkbW1tWN79erVOHfu3OcBrrvuupenT59+0ujRo0+ZOHHijqFDh74OMGHChFdnz5696txzz61tbGykR48e6bvf/e5LtbW1r5cvd9asWSOGDh362sSJE08GOP/88zd//etfX92azYvyMwhba+LEiWnBggUHPL8kSVJXFBFPpJQmVjuOhQsXvlBXV7eh2nEcyhYuXDiorq5uZKUyh15IkiRJFZgoS5IkSRWYKEuSJEkVmChLkiRJFRxcotzY7rfpliRJkqri4C4PsuVpuC3aKBSp64pLDvzqMjp41r4k6UB4HWVJkqTDxKBB1G3c2Hb538CBNGzYwML9vSYiJkybNm3Tfffd9zzA7t27OfbYY+vGjx+/86GHHlrW0nUNHz583IIFC54bOnRoi67dvHjx4p7vf//7T9qyZUv3cePG7fqnf/qn54888shW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", "text/plain": [ "
" ] @@ -1664,7 +1668,7 @@ "''" ] }, - "execution_count": 31, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -1688,7 +1692,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 29, "metadata": { "pycharm": { "name": "#%%\n" @@ -1743,7 +1747,7 @@ " 1\n", " -0.140239\n", " 1970-01-19 04:09:46.860000+00:00\n", - " 0\n", + " 2\n", " False\n", " 0.939155\n", " 2019-10-04 11:01:00+00:00\n", @@ -1759,7 +1763,7 @@ " 1\n", " -0.140425\n", " 1970-01-19 04:11:13.260000+00:00\n", - " 0\n", + " 2\n", " False\n", " 0.872610\n", " 2019-10-05 11:01:00+00:00\n", @@ -1775,7 +1779,7 @@ " 1\n", " -0.140243\n", " 1970-01-19 04:12:39.660000+00:00\n", - " 0\n", + " 2\n", " False\n", " 0.982989\n", " 2019-10-06 11:01:00+00:00\n", @@ -1791,7 +1795,7 @@ " 1\n", " -0.140351\n", " 1970-01-19 04:14:06.060000+00:00\n", - " 0\n", + " 2\n", " False\n", " 0.996053\n", " 2019-10-07 11:01:00+00:00\n", @@ -1807,7 +1811,7 @@ " 1\n", " -0.140429\n", " 1970-01-19 04:15:32.460000+00:00\n", - " 0\n", + " 2\n", " False\n", " 0.921091\n", " 2019-10-08 11:01:00+00:00\n", @@ -1832,11 +1836,11 @@ "4 4.216521 1 -0.140429 \n", "\n", " datetime_x labels uncertain mode_probability \\\n", - "0 1970-01-19 04:09:46.860000+00:00 0 False 0.939155 \n", - "1 1970-01-19 04:11:13.260000+00:00 0 False 0.872610 \n", - "2 1970-01-19 04:12:39.660000+00:00 0 False 0.982989 \n", - "3 1970-01-19 04:14:06.060000+00:00 0 False 0.996053 \n", - "4 1970-01-19 04:15:32.460000+00:00 0 False 0.921091 \n", + "0 1970-01-19 04:09:46.860000+00:00 2 False 0.939155 \n", + "1 1970-01-19 04:11:13.260000+00:00 2 False 0.872610 \n", + "2 1970-01-19 04:12:39.660000+00:00 2 False 0.982989 \n", + "3 1970-01-19 04:14:06.060000+00:00 2 False 0.996053 \n", + "4 1970-01-19 04:15:32.460000+00:00 2 False 0.921091 \n", "\n", " datetime_y \n", "0 2019-10-04 11:01:00+00:00 \n", @@ -1846,7 +1850,7 @@ "4 2019-10-08 11:01:00+00:00 " ] }, - "execution_count": 32, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -1870,7 +1874,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 30, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:17.670019Z", @@ -1898,7 +1902,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 31, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:17.902871Z", @@ -1923,13 +1927,13 @@ "" ] }, - "execution_count": 36, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1968,7 +1972,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.8.5" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/error_handling.ipynb b/docs/source/content/examples/error_handling.ipynb index 24262660..d5c43582 100644 --- a/docs/source/content/examples/error_handling.ipynb +++ b/docs/source/content/examples/error_handling.ipynb @@ -30,10 +30,10 @@ "import os\n", "import sys\n", "import logging\n", - "from requests import HTTPError\n", "\n", "# import mvg library with python bindings to mvg-API\n", - "from mvg import MVG" + "from mvg import MVG\n", + "from mvg.exceptions import MVGAPIError" ] }, { @@ -68,7 +68,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:43.998630Z", @@ -97,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.004007Z", @@ -118,7 +118,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.140140Z", @@ -145,7 +145,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.272280Z", @@ -157,8 +157,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.2.7\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}\n" - ] + "{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.2.7\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}\n" ] } ], "source": [ @@ -177,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.395787Z", @@ -203,7 +202,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.549088Z", @@ -217,8 +216,7 @@ "text": [ ">>> Provoke Unathorized call\n", "OUCH\n", - "401 Client Error: Unauthorized for url: https://api.beta.multiviz.com/sources/\n", - "{\"detail\":\"Unauthorized\"}\n" + "401 - Unauthorized: Unauthorized\n" ] } ], @@ -226,17 +224,11 @@ "try:\n", " print(\">>> Provoke Unathorized call\")\n", " sources = unauth_session.list_sources()\n", - "except HTTPError as exc:\n", + "except MVGAPIError as exc:\n", " # As we have rouge token\n", " # We'll end up here\n", " print(\"OUCH\")\n", - " # The exception will be risen by\n", - " # raise_for_status from the requests\n", - " # We'll print it and see that it\n", - " # states an authorization error (401)\n", - " print(exc)\n", - " # Get more info about the error from the response attribute\n", - " print(exc.response.text)" + " print(exc)" ] }, { @@ -252,7 +244,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.686993Z", @@ -267,8 +259,7 @@ "text": [ ">>> Provoke illegal source Id name\n", "OUCH\n", - "422 Client Error: Unprocessable Entity for url: https://api.beta.multiviz.com/sources/\n", - "{\"detail\":[{\"loc\":[\"body\",\"source_id\"],\"msg\":\"can only contain letters, numbers and underscores\",\"type\":\"value_error\"}]}\n" + "422 - Unprocessable Entity: [{'loc': ['body', 'source_id'], 'msg': 'string does not match regex \"^[\\\\w-]+$\"', 'type': 'value_error.str.regex', 'ctx': {'pattern': '^[\\\\w-]+$'}}]\n" ] } ], @@ -276,17 +267,11 @@ "try:\n", " print(\">>> Provoke illegal source Id name\")\n", " session.create_source(\"illegal%name\", {}, channels=[\"acc\"])\n", - "except HTTPError as exc:\n", + "except MVGAPIError as exc:\n", " # As we have rouge token\n", " # We'll end up here\n", " print(\"OUCH\")\n", - " # The exception will be risen by\n", - " # raise_for_status from the requests\n", - " # We'll print it and see that it\n", - " # states an authorization error (401)\n", - " print(exc)\n", - " # Get more info about the error from the response attribute\n", - " print(exc.response.text)" + " print(exc)" ] }, { @@ -302,7 +287,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.829817Z", @@ -315,9 +300,7 @@ "output_type": "stream", "text": [ ">>> Non existing source\n", - "404 Client Error: Not Found for url: https://api.beta.multiviz.com/sources//measurements\n", - "Details on error\n", - "{\"detail\":\"Not Found\"}\n" + "404 - Not Found: Not Found\n" ] } ], @@ -330,11 +313,8 @@ " timestamp=-5,\n", " data=d,\n", " meta={})\n", - "except HTTPError as exc:\n", - " print(exc)\n", - " print(\"Details on error\")\n", - " # Get more info about the error from the response attribute\n", - " print(exc.response.text)" + "except MVGAPIError as exc:\n", + " print(exc)" ] }, { @@ -352,7 +332,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.968553Z", @@ -365,9 +345,7 @@ "output_type": "stream", "text": [ ">>> Parameter value out of range\n", - "422 Client Error: Unprocessable Entity for url: https://api.beta.multiviz.com/sources/u0001/measurements\n", - "Details on error\n", - "{\"detail\":[{\"loc\":[\"body\",0,\"timestamp\"],\"msg\":\"ensure this value is greater than or equal to 0\",\"type\":\"value_error.number.not_ge\",\"ctx\":{\"limit_value\":0}}]}\n" + "422 - Unprocessable Entity: [{'loc': ['body', 0, 'duration'], 'msg': 'ensure this value is greater than 0.0', 'type': 'value_error.number.not_gt', 'ctx': {'limit_value': 0.0}}, {'loc': ['body', 0, 'timestamp'], 'msg': 'ensure this value is greater than or equal to 0', 'type': 'value_error.number.not_ge', 'ctx': {'limit_value': 0}}]\n" ] } ], @@ -380,12 +358,8 @@ " timestamp=-5,\n", " data=d,\n", " meta={})\n", - "except HTTPError as exc:\n", - " print(exc)\n", - " # Retrieve details\n", - " print(\"Details on error\")\n", - " # Get more info about the error from the response attribute\n", - " print(exc.response.text)" + "except MVGAPIError as exc:\n", + " print(exc)" ] }, { @@ -394,12 +368,12 @@ "source": [ "## Missing Parameter\n", "\n", - "In this case we have an error on the client side. This means that the data is never sent to the server so we do not get an `HTTPError`, but a `TypeError` instead. Only the `HTTPError` contains any details from the server, so to be on the safe side we should catch them separately." + "In this case we have an error on the client side. This means that the data is never sent to the server so we do not get an `MVGAPIError`, but a `TypeError` instead. Only the `MVGAPIError` contains any details from the server, so to be on the safe side we should catch them separately." ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.972731Z", @@ -424,10 +398,8 @@ " duration=-3,\n", " timestamp=-5,\n", " meta={})\n", - "except HTTPError as exc:\n", + "except MVGAPIError as exc:\n", " print(exc)\n", - " print(\"Details on error\")\n", - " print(exc.response.json())\n", "except Exception as exc:\n", " print(f\"{type(exc).__name__}: {exc}\")\n", " print(\"No details from server available\")" @@ -450,7 +422,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.8.5" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/sources_and_measurements.ipynb b/docs/source/content/examples/sources_and_measurements.ipynb index 2d54732a..3235113c 100644 --- a/docs/source/content/examples/sources_and_measurements.ipynb +++ b/docs/source/content/examples/sources_and_measurements.ipynb @@ -26,10 +26,10 @@ "\n", "from tqdm.notebook import tqdm\n", "import pandas as pd\n", - "from requests import HTTPError\n", "\n", "# import mvg library with python bindings to mvg-API\n", - "from mvg import MVG" + "from mvg import MVG\n", + "from mvg.exceptions import MVGAPIError" ] }, { @@ -190,7 +190,17 @@ "start_time": "2021-03-18T09:54:17.113206Z" } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Source info retrieved:\n", + "{'source_id': 'u0001', 'meta': {'assetId': 'assetJ', 'measPoint': 'mloc01', 'location': 'cancun', 'timezone': 'Europe/Stockholm'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", + "\n" + ] + } + ], "source": [ "sources = session.list_sources()\n", "\n", @@ -211,7 +221,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.250783Z", @@ -232,7 +242,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.408675Z", @@ -244,7 +254,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Source u0001 does not exist\n" + "Source u0001 deleted\n" ] } ], @@ -253,7 +263,7 @@ " source = session.get_source(SOURCE_ID)\n", " session.delete_source(SOURCE_ID)\n", " print(f\"Source {SOURCE_ID} deleted\")\n", - "except HTTPError:\n", + "except MVGAPIError:\n", " print(f\"Source {SOURCE_ID} does not exist\")" ] }, @@ -268,7 +278,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.413080Z", @@ -303,7 +313,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.688070Z", @@ -336,7 +346,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.983670Z", @@ -375,7 +385,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.986967Z", @@ -396,7 +406,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:15.657580Z", @@ -414,7 +424,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b490d8ad7129476db88072eb28e25f45", + "model_id": "600687e54afd458da0bc60e74475cf6f", "version_major": 2, "version_minor": 0 }, @@ -459,10 +469,8 @@ " timestamp=int(m),\n", " data={\"acc\": accs},\n", " meta=meta_info)\n", - " except HTTPError as exc:\n", - " print(\"OUCH\")\n", - " print(exc)\n", - " print(exc.response.text)" + " except MVGAPIError as exc:\n", + " print(exc)" ] }, { @@ -481,7 +489,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:41.728688Z", @@ -512,7 +520,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:42.225546Z", @@ -552,7 +560,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:42.870908Z", @@ -596,7 +604,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:43.023114Z", @@ -617,7 +625,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:43.153589Z", @@ -636,7 +644,7 @@ "source": [ "try:\n", " meas_0 = session.read_single_measurement(SOURCE_ID, ts_0)\n", - "except HTTPError:\n", + "except MVGAPIError:\n", " print(\"Previously deleted measurement does not exist\")" ] }, @@ -659,7 +667,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:56:43.305948Z", @@ -680,7 +688,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e0cfd4c096aa4dc89ef1d5337e40fa6e", + "model_id": "2f87a5d6866b4f6ab023567577daa6af", "version_major": 2, "version_minor": 0 }, @@ -702,7 +710,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "1eb1ec1c0a9642d292cc3fbcf881fae4", + "model_id": "a89062e4edb747dfa73d8a97ca9b87f2", "version_major": 2, "version_minor": 0 }, @@ -724,7 +732,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9eca3d68182a416ab88f257444879b60", + "model_id": "6ec67787de634b46b65cfa2f81f74cd1", "version_major": 2, "version_minor": 0 }, @@ -746,7 +754,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "45dda982b5084eb9ae46f6767facf91a", + "model_id": "25ad9979ad244110a2c82f99b555d04b", "version_major": 2, "version_minor": 0 }, @@ -768,7 +776,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "157ae65bbbd9496c9ed9dbb7efe347b7", + "model_id": "c35a320df1b145b0909ec1ff5c78255c", "version_major": 2, "version_minor": 0 }, @@ -790,7 +798,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c2ef4e4f10d04298ad14bd243a9d2012", + "model_id": "48f5ac69394f480db5f1236a3d315734", "version_major": 2, "version_minor": 0 }, @@ -810,7 +818,7 @@ "\n", " try:\n", " session.delete_source(source_id)\n", - " except HTTPError as exc:\n", + " except MVGAPIError as exc:\n", " pass # Source didnt exist\n", "\n", " print(f\"Creating source {source_id}\")\n", @@ -848,8 +856,8 @@ " timestamp=int(m),\n", " data={\"acc\": accs},\n", " meta=meta_info)\n", - " except HTTPError as exc:\n", - " print(exc.response.text)\n", + " except MVGAPIError as exc:\n", + " print(exc)\n", " raise" ] } @@ -870,7 +878,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.8.5" }, "toc": { "base_numbering": 1, diff --git a/mvg/exceptions.py b/mvg/exceptions.py new file mode 100644 index 00000000..8d5c95b1 --- /dev/null +++ b/mvg/exceptions.py @@ -0,0 +1,36 @@ +from json.decoder import JSONDecodeError +from requests import HTTPError, Response + + +class MVGError(Exception): + """Base class for MVG Exceptions""" + + +class MVGConnectionError(MVGError): + """Raised on failure to connect to API""" + + +class MVGAPIError(MVGError): + """Raised then there has been an error with a request""" + + def __init__(self, response: Response): + self.response = response + self.msg = self._get_error_message() + super().__init__( + f"{self.response.status_code} - {self.response.reason}: {self.msg}" + ) + + def _get_error_message(self): + default_error_msg = "No error detail" + try: + response_body = self.response.json() + return response_body.get("detail", default_error_msg) + except (JSONDecodeError, AttributeError): + return default_error_msg + + +def raise_for_status(response: Response): + try: + response.raise_for_status() + except HTTPError: + raise MVGAPIError(response) diff --git a/mvg/mvg.py b/mvg/mvg.py index 2e5c85d2..6673bf13 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -19,6 +19,8 @@ import semver +from mvg.exceptions import MVGConnectionError, raise_for_status + logger = logging.getLogger(__name__) @@ -45,7 +47,7 @@ def __init__(self, endpoint: str, token: str): Raises ------ - ConnectionError + MVGConnectionError If a connection to the API cannot be established. """ @@ -53,14 +55,14 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.10.5") + self.mvg_version = self.parse_version("v0.11.0") self.tested_api_version = self.parse_version("v0.2.9") # Get API version try: response = self._request("get", "") except RequestException: - raise requests.ConnectionError("Could not connect to the API.") + raise MVGConnectionError("Could not connect to the API.") api_vstr = response.json()["message"]["api"]["version"] self.api_version = self.parse_version(api_vstr) @@ -103,7 +105,7 @@ def _request(self, method, path, do_not_raise=None, **kwargs) -> requests.Respon if response.status_code in do_not_raise: logger.info(f"Ignoring error {response.status_code} - {response.text}") else: - response.raise_for_status() + raise_for_status(response) return response diff --git a/tests/conftest.py b/tests/conftest.py index d72e4466..b687641c 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -7,10 +7,10 @@ import json import pandas as pd from mvg import MVG +from mvg.exceptions import MVGAPIError import argparse import sys -from requests import HTTPError from tests.helpers import ( generate_sources_patterns, @@ -117,7 +117,7 @@ def session(vibium) -> MVG: session.get_source(source) print(f"Deleting {source}") session.delete_source(source) - except HTTPError: + except MVGAPIError: print(f"Source {source} does not exist") return session diff --git a/tests/test_api_general.py b/tests/test_api_general.py index 15cc9f4a..8957180d 100644 --- a/tests/test_api_general.py +++ b/tests/test_api_general.py @@ -4,12 +4,10 @@ Tests in this file shall test general API functionality """ -import os import pytest import semver -from requests import HTTPError -import requests from mvg import MVG +from mvg.exceptions import MVGAPIError, MVGConnectionError # MVG Token VALID_TOKEN = pytest.VALID_TOKEN @@ -67,12 +65,12 @@ def test_supported_features(vibium): def test_failure_authorization(vibium): unauth_session = MVG(vibium, "NO TOKEN") - with pytest.raises(HTTPError) as exc: + with pytest.raises(MVGAPIError) as exc: unauth_session.supported_features() assert exc.value.response.status_code == 401 -def test_create_session_invalid_url(): - with pytest.raises(requests.ConnectionError): +def test_invalid_url_connection_error(): + with pytest.raises(MVGConnectionError): MVG("invalidurl", "NO TOKEN") diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index ea4d112c..e8787967 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -11,9 +11,10 @@ import json import numpy as np import pandas as pd -from requests import HTTPError import pytest +from mvg.exceptions import MVGAPIError + # Just to check if API is live def test_say_hello(session): hello = session.say_hello() @@ -142,7 +143,7 @@ def test_measurements_crud(session): # API POST /sources/{source_id}/measurements [non-existing source] def test_failure_create_measurement(session): - with pytest.raises(HTTPError) as exc: + with pytest.raises(MVGAPIError) as exc: data = [1, 2, 3] session.create_measurement( sid="", duration=-3, timestamp=-5, data=data, meta={} @@ -153,7 +154,7 @@ def test_failure_create_measurement(session): # API GET /sources/{source_id}//measurements/{timestamp} [non-existing meas] def test_failure_get_measurement(session): - with pytest.raises(HTTPError) as exc: + with pytest.raises(MVGAPIError) as exc: session.delete_measurement(pytest.SOURCE_ID_WAVEFORM, 314152) assert exc.value.response.status_code == 404 @@ -162,7 +163,7 @@ def test_failure_get_measurement(session): # API GET /sources/{source_id} [non-existing source] def test_failure_get_source(session): - with pytest.raises(HTTPError) as exc: + with pytest.raises(MVGAPIError) as exc: session.get_source(sid="THE_VOID") assert exc.value.response.status_code == 404 @@ -171,7 +172,7 @@ def test_failure_get_source(session): # API DELETE /sources/{source_id} [non-existing source] def test_failure_delete_source(session): - with pytest.raises(HTTPError) as exc: + with pytest.raises(MVGAPIError) as exc: session.delete_source(sid="THE_VOID") assert exc.value.response.status_code == 404 @@ -179,7 +180,7 @@ def test_failure_delete_source(session): # API POST /sources/ [incorrect source name] def test_failure_create_source(session): - with pytest.raises(HTTPError) as exc: + with pytest.raises(MVGAPIError) as exc: session.create_source("unacceptable&name", meta={}, channels=["acc"]) assert exc.value.response.status_code == 422 @@ -189,7 +190,7 @@ def test_failure_create_source(session): def test_sources_d(session): session.delete_source(pytest.SOURCE_ID_WAVEFORM) - with pytest.raises(HTTPError) as exc: + with pytest.raises(MVGAPIError) as exc: session.get_source(sid=pytest.SOURCE_ID_WAVEFORM) assert exc.value.response.status_code == 404 @@ -218,7 +219,7 @@ def test_sources_cru_existing(session): session.create_source(source, meta=meta, channels=["acc"], exist_ok=True) # create_source again (409 not ignored) - with pytest.raises(HTTPError): + with pytest.raises(MVGAPIError): session.create_source(source, meta=meta, channels=["acc"]) @@ -231,7 +232,7 @@ def test_tabular_sources(session, tabular_source): session.create_tabular_source(source_id, meta, columns, exist_ok=True) # create source again (409 not ignored) - with pytest.raises(HTTPError) as exc: + with pytest.raises(MVGAPIError) as exc: session.create_tabular_source(source_id, meta, columns) assert exc.value.response.status_code == 409 @@ -243,7 +244,7 @@ def test_tabular_sources(session, tabular_source): def test_tabular_measurements_float_timestamps(session, tabular_source): - with pytest.raises(HTTPError) as exc: + with pytest.raises(MVGAPIError) as exc: source_id, tabular_dict = tabular_source tabular_dict_float = tabular_dict.copy() tabular_dict_float["timestamp"] = [ts + 0.1 for ts in tabular_dict["timestamp"]] @@ -264,7 +265,7 @@ def test_tabular_measurements(session, tabular_source): session.create_tabular_measurement(source_id, tabular_dict, exist_ok=True) # create measurements again (409 not ignored) - with pytest.raises(HTTPError) as exc: + with pytest.raises(MVGAPIError) as exc: session.create_tabular_measurement(source_id, tabular_dict) assert exc.value.response.status_code == 409 @@ -282,7 +283,7 @@ def test_tabular_measurements(session, tabular_source): # Validate delete measurement session.delete_measurement(source_id, ts0) - with pytest.raises(HTTPError) as exc: + with pytest.raises(MVGAPIError) as exc: session.read_single_measurement(source_id, ts0) assert exc.value.response.status_code == 404 @@ -320,17 +321,17 @@ def test_list_tabular_measurements(session, tabular_source): assert response["meta"][f"{ts_1}"] == meta[f"{ts_1}"] # Retrieve data that is beyond the range of the dataset timestamps - with pytest.raises(HTTPError) as exc: + with pytest.raises(MVGAPIError) as exc: session.list_tabular_measurements(source_id, ts_n + 1, ts_n + 2) assert exc.value.response.status_code == 404 # Call API with negative timestamp - with pytest.raises(HTTPError) as exc: + with pytest.raises(MVGAPIError) as exc: session.list_tabular_measurements(source_id, -1) assert exc.value.response.status_code == 422 # Call API with negative timestamp - with pytest.raises(HTTPError) as exc: + with pytest.raises(MVGAPIError) as exc: session.list_tabular_measurements(source_id, None, -1) assert exc.value.response.status_code == 422 @@ -400,7 +401,7 @@ def test_delete_label(session, tabular_source_with_measurements): ) session.delete_label(source_id, timestamps[0]) - with pytest.raises(HTTPError) as exc: + with pytest.raises(MVGAPIError) as exc: session.get_label(source_id, timestamps[0]) assert exc.value.response.status_code == 404 diff --git a/tests/test_errors.py b/tests/test_errors.py new file mode 100644 index 00000000..cae16905 --- /dev/null +++ b/tests/test_errors.py @@ -0,0 +1,51 @@ +""" +Tests in this file shall test functionlity +not relying on access to vibium-cloud API +""" + +import pytest +import requests +from mvg.exceptions import MVGAPIError, raise_for_status + + +class MockResponse: + def __init__(self, status_code, reason, json_body): + self.status_code = status_code + self.reason = reason + self.json_body = json_body + + def json(self): + return self.json_body + + def raise_for_status(self): + if 400 <= self.status_code < 600: + raise requests.HTTPError() + + +def test_raise_for_status_not_raises(): + response = MockResponse(200, "OK", {}) + raise_for_status(response) + + +def test_raise_for_status_raises(): + response = MockResponse(400, "Bad Request", {}) + with pytest.raises(MVGAPIError): + raise_for_status(response) + + +def test_mvg_api_error_with_detail(): + response = MockResponse(400, "Bad Request", {"detail": "Client Error"}) + exc = MVGAPIError(response) + assert str(exc) == "400 - Bad Request: Client Error" + + +def test_mvg_api_error_without_detail(): + response = MockResponse(400, "Bad Request", {}) + exc = MVGAPIError(response) + assert str(exc) == "400 - Bad Request: No error detail" + + +def test_mvg_api_error_not_dict_response(): + response = MockResponse(400, "Bad Request", ["list", "data"]) + exc = MVGAPIError(response) + assert str(exc) == "400 - Bad Request: No error detail" diff --git a/tests/test_mvg.py b/tests/test_mvg.py deleted file mode 100644 index be8e8d62..00000000 --- a/tests/test_mvg.py +++ /dev/null @@ -1,14 +0,0 @@ -""" -Tests in this file shall test functionlity -not relying on access to vibium-cloud API -""" - -import pytest -import requests -from mvg import MVG - - -def test_create_session_without_server(): - """We should get an HTTPError because we cannot connect to localhost:8000""" - with pytest.raises(requests.ConnectionError): - MVG("localhost:8000", "NO TOKEN") From 9293e137d063268c2aee86adf2f38c6b3dc44f8c Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Wed, 8 Dec 2021 09:05:45 +0100 Subject: [PATCH 42/90] Cancel pipeline run for old commits in PR (#119) --- .github/workflows/ci-checks.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/ci-checks.yml b/.github/workflows/ci-checks.yml index f75a0bf1..8e8528d8 100644 --- a/.github/workflows/ci-checks.yml +++ b/.github/workflows/ci-checks.yml @@ -6,6 +6,10 @@ on: pull_request: branches: [ master ] +concurrency: + group: ${{ github.ref }} + cancel-in-progress: true + jobs: black: runs-on: [ ubuntu-latest ] From 8cd81466f4ed780278b2350a5e1fcf462732db40 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Wed, 8 Dec 2021 09:21:42 +0100 Subject: [PATCH 43/90] Capability to save plots with a user-defined filename (or location) (#120) * Capability to save plots with a user-defined filename (or location) * Bump mvg and vibium cloud versions * Spelling correctio * Spelling correction --- mvg/features/analysis.py | 11 +++++++---- mvg/features/blacksheep.py | 10 +++++++--- mvg/features/kpidemo.py | 11 +++++++---- mvg/features/label_propagation.py | 13 ++++++++++--- mvg/features/modeid.py | 13 +++++++++---- mvg/mvg.py | 4 ++-- mvg/plotting.py | 4 ++-- 7 files changed, 44 insertions(+), 22 deletions(-) diff --git a/mvg/features/analysis.py b/mvg/features/analysis.py index 6851ee11..8a1e10cc 100644 --- a/mvg/features/analysis.py +++ b/mvg/features/analysis.py @@ -42,7 +42,7 @@ def __init__(self, results, t_zone=None, t_unit=None): self.time_column = None - def _render_plot(self, interactive, filename=""): + def _render_plot(self, interactive, filename=None): """Render plot to screen (interactive) or file. Parameters @@ -61,7 +61,7 @@ def _render_plot(self, interactive, filename=""): plot_file = "" plt.show() else: - if filename == "" or filename is None: + if not filename: if len(self.sources()) > 1: srcstr = self.sources()[0] + "_to_" + self.sources()[-1] + "_" else: @@ -231,7 +231,7 @@ def summary(self): # Default method def plot( - self, interactive=True, time_format=None + self, interactive=True, time_format=None, filename=None ): # pylint: disable=unused-argument """Pro forma ancestor function. @@ -241,9 +241,12 @@ def plot( True: show plot, False: save plot time_format: str, optional - strftime format specifier for tick_x_lables. If not given + strftime format specifier for tick_x_labels. If not given only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + filename: str, optional + filename for the plot. + Returns ------- plot file name: str diff --git a/mvg/features/blacksheep.py b/mvg/features/blacksheep.py index 0438c21c..7eb6fde4 100644 --- a/mvg/features/blacksheep.py +++ b/mvg/features/blacksheep.py @@ -92,7 +92,7 @@ def summary(self): return [self.typicality, tbl] # pylint: disable=too-many-locals - def plot(self, interactive=True, time_format=None): + def plot(self, interactive=True, time_format=None, filename=None): """Generate a (not so) basic plot for BlackSheep Will show per atypical asset changes to and from atypical modes @@ -103,9 +103,13 @@ def plot(self, interactive=True, time_format=None): True: show plot, False: save plot time_format: str, optional - strftime format specifier for tick_x_lables. If not given + strftime format specifier for tick_x_labels. If not given only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + filename: str, optional + filename for the plot. If interactive is True, filename will be + ignored. If interactive is False, default filename will be of the format + "{source_1_name}_to_{source_n_name}_{analysis_request_id}.png". Returns ------- @@ -178,4 +182,4 @@ def plot(self, interactive=True, time_format=None): bsd_plt.imshow(plotmx, aspect="auto", cmap=mcm) # Display plot - return self._render_plot(interactive) + return self._render_plot(interactive, filename) diff --git a/mvg/features/kpidemo.py b/mvg/features/kpidemo.py index f1e7b05e..13499f03 100644 --- a/mvg/features/kpidemo.py +++ b/mvg/features/kpidemo.py @@ -53,7 +53,7 @@ def summary(self): return tab def plot( - self, kpi=None, interactive=True, time_format=None + self, kpi=None, interactive=True, time_format=None, filename=None ): # pylint: disable=arguments-differ """ Generate a basic plot on KPIs. @@ -68,10 +68,13 @@ def plot( True: show plot, False: save plot time_format: str, optional - - strftime format specifier for tick_x_lables. If not given + strftime format specifier for tick_x_labels. If not given only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + filename: str, optional + filename for the plot. If interactive is True, filename will be + ignored. If interactive is False, default filename will be of the + format "{source_name}_{analysis_request_id}.png". Returns ------- @@ -86,4 +89,4 @@ def plot( self.check_status() result_df.plot(x=self.time_column, y=kpi) plt.title(f"{kpi} Summary plot for request {self.request_id()}") - return self._render_plot(interactive) + return self._render_plot(interactive, filename) diff --git a/mvg/features/label_propagation.py b/mvg/features/label_propagation.py index 35392bfe..d5205f32 100644 --- a/mvg/features/label_propagation.py +++ b/mvg/features/label_propagation.py @@ -40,7 +40,7 @@ def summary(self): tbl["count"] = result_df.groupby("label").count()["severity"] print(tabulate(tbl, headers="keys", tablefmt="psql")) - def plot(self, interactive=True, time_format=None): + def plot(self, interactive=True, time_format=None, filename=None): """ Generate a label plot for the propagated labels @@ -50,9 +50,16 @@ def plot(self, interactive=True, time_format=None): True: show plot, False: save plot time_format: str, optional - strftime format specifier for tick_x_lables. If not given + strftime format specifier for tick_x_labels. If not given only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + filename: str, optional + filename for the plot. If interactive is True, filename will be + ignored. If interactive is False, default filename will be of the + format "{source_1_name}_to_{source_n_name}_{analysis_request_id}.png" + for multiple sources, and "{source_name}_{analysis_request_id}.png" + for a single source. + Returns ------- plot file name : str @@ -62,4 +69,4 @@ def plot(self, interactive=True, time_format=None): sources = ", ".join(self.sources()) plotting.plot_labels_over_time(self.results(), sources, time_format=time_format) - return self._render_plot(interactive) + return self._render_plot(interactive, filename) diff --git a/mvg/features/modeid.py b/mvg/features/modeid.py index 0206e39b..f5959557 100644 --- a/mvg/features/modeid.py +++ b/mvg/features/modeid.py @@ -63,7 +63,7 @@ def summary(self): tbl2 = tbl2.rename(columns={"timestamps": "portion"}) tbl2["portion"] = tbl2["portion"] / sum(tbl2["portion"]) * 100 print() - print("Lables & uncertain labels") + print("Labels & uncertain labels") print(tabulate(tbl2, headers="keys", tablefmt="psql")) # Emerging @@ -73,7 +73,7 @@ def summary(self): return [tbl, tbl2, self.emerging_df] - def plot(self, interactive=True, time_format=None): + def plot(self, interactive=True, time_format=None, filename=None): """ Generate a basic plot on ModeId. @@ -83,9 +83,14 @@ def plot(self, interactive=True, time_format=None): True: show plot, False: save plot time_format: str, optional - strftime format specifier for tick_x_lables. If not given + strftime format specifier for tick_x_labels. If not given only dates are shown. To show dates and time use %y%m%d-%H:%M:%S + filename: str, optional + filename for the plot. If interactive is True, filename will be + ignored. If interactive is False, default filename will be of the + format "{source_name}_{analysis_request_id}.png". + Returns ------- plot file name : str @@ -100,7 +105,7 @@ def plot(self, interactive=True, time_format=None): time_format=time_format, ) - return self._render_plot(interactive) + return self._render_plot(interactive, filename) def mode_table(self, show_uncertain=False): """ diff --git a/mvg/mvg.py b/mvg/mvg.py index 6673bf13..8127e398 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -55,8 +55,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.11.0") - self.tested_api_version = self.parse_version("v0.2.9") + self.mvg_version = self.parse_version("v0.11.2") + self.tested_api_version = self.parse_version("v0.2.10") # Get API version try: diff --git a/mvg/plotting.py b/mvg/plotting.py index 6016913d..1486a803 100644 --- a/mvg/plotting.py +++ b/mvg/plotting.py @@ -194,7 +194,7 @@ def modes_over_time( the angle of time tick texts. time_format: str, optional - strftime format specifier for tick_x_lables. If not given + strftime format specifier for tick_x_labels. If not given only dates are shown. To show dates and time use %y%m%d-%H:%M:%S Returns @@ -451,7 +451,7 @@ def plot_labels_over_time( the angle of time tick texts. time_format: str, optional - strftime format specifier for tick_x_lables. If not given + strftime format specifier for tick_x_labels. If not given only dates are shown. To show dates and time use %y%m%d-%H:%M:%S Returns From 041b91c000e8d2e05d991cd6b86c23f46d424ccb Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Thu, 9 Dec 2021 14:16:38 +0100 Subject: [PATCH 44/90] Plot depicting change of mode probabilities over time (#117) * Plot depicting change of mode probabilities over time * Done linting * Bump mvg and server versions * Plot updated to scatter plot * Save mode probability to a user-defined filename * Delete files committed by mistake * Delete files committed by mistake --- mvg/features/modeid.py | 52 ++++++++++++++++++++++ mvg/plotting.py | 97 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+) diff --git a/mvg/features/modeid.py b/mvg/features/modeid.py index f5959557..019d9515 100644 --- a/mvg/features/modeid.py +++ b/mvg/features/modeid.py @@ -107,6 +107,58 @@ def plot(self, interactive=True, time_format=None, filename=None): return self._render_plot(interactive, filename) + def plot_probabilities( + self, selected_modes=None, interactive=True, time_format=None, filename=None + ): + """ + Generate a basic plot on mode probabilites over time. + + Parameters + ---------- + interactive : bool + True: show plot, False: save plot + + selected_modes : List[int] + Plot the mode probabilities for a list of modes. + By default, the probability of all modes will be plotted. + + time_format: str, optional + strftime format specifier for x-axis tick labels. + If not given, dates will be shown in locale format. + To show dates and time use %y%m%d-%H:%M:%S. + + filename: str, optional + filename for the plot. If interactive is True, filename will be + ignored. If interactive is False, default filename will be of the + format "{source_name}_{analysis_request_id}.png". + + Returns + ------- + plot file name : str + name of plot file (or emtpy string in case of interactive plot) + """ + + self.check_status() + # Append timestamps column taken from results + data = self.probabilities.assign(timestamps=self._results_df.timestamps.values) + data.set_index("timestamps", inplace=True) + # Replace 0 values with NAN + data.replace(to_replace=0, value=np.NAN, inplace=True, method="pad") + + # Dataframe should only contain data for the requested modes + if selected_modes: + modes_list = [f"mode {n}" for n in selected_modes] + data = data[modes_list] + + plotting.modes_probabilities_over_time( + data=data, + title=f"Probability of modes over time for {self.request_id()}", + timeunit=self._t_unit, + time_format=time_format, + ) + + return self._render_plot(interactive, filename) + def mode_table(self, show_uncertain=False): """ Show mode table which gives start time for each consecutive period of diff --git a/mvg/plotting.py b/mvg/plotting.py index 1486a803..ba813a81 100644 --- a/mvg/plotting.py +++ b/mvg/plotting.py @@ -314,6 +314,103 @@ def _plot_row(row_data, is_uncert_data, y_pos=0): return image +def modes_probabilities_over_time( + data, + title, + colors=None, + height=12, + width=4, + timeticks_interval=None, + timeunit="ms", + axes=None, + timetick_angle=45, + time_format=None, +): + """Creates a line chart depecting the change of mode probability over time. + + Parameters + ---------- + data: dataframe + a dataframe with timestamps as the index column and an + additional column (named as "mode {mode number}") for every mode. + + title: string + plot title + + colors: dictionary, optional + color code for each mode. + the dictionary keys should be of the form "mode {mode number}". + + height: int, optional + height of plot used in figsize. + + width: int, optional + width of plot used in figsize. + + timeticks_interval: int, optional + time interval (in days) to separate the X-ticks. + + timeunit: str, optional + unit of time corresponding to the timestamp epoch + + axes: object of class matplotlib.axes, optional + the axes to be used by plot. + + timetick_angle: float, optional + the angle of time tick texts. + + time_format: str, optional + strftime format specifier for tick_x_labels. If not given, dates will be shown + in locale format. To show dates and time use %y%m%d-%H:%M:%S + + Returns + ---------- + image: object of class matplotlib.axes + + """ + + # Colors for the line chart + colors = colors or { + f"mode {x}": MODE_COLOR_CODES[x] for x in MODE_COLOR_CODES.keys() + } + + # Create figure with blank plot + if axes is None: + fig = plt.figure(figsize=(height, width)) + axes = fig.add_subplot(111) + image = axes.plot() + + # Set timetick interval + if not timeticks_interval: + timeticks_interval = round(len(data) / 10) + + # Format the timestamps based on timeunit and time_format + if time_format: + data_index_formatted = [ + pd.to_datetime(dt, unit=timeunit).strftime(time_format) for dt in data.index + ] + else: + data_index_formatted = [ + str(pd.to_datetime(dt, unit=timeunit)) for dt in data.index + ] + + # Form and set the tick positions and the tick labels + tick_positions = list(range(0, len(data), timeticks_interval)) + tick_x_labels = [data_index_formatted[t] for t in tick_positions] + axes.set_xticks(tick_positions) + axes.set_xticklabels(tick_x_labels, rotation=timetick_angle, ha="right") + + # Plot line chart for each mode + for col in data.columns: + axes.scatter(data_index_formatted, data[col], label=col, c=colors[col], s=10) + + axes.legend(bbox_to_anchor=(1.05, 1), loc="upper left", markerscale=3) + axes.set_title(title) + plt.tight_layout() + + return image + + def modes_over_time_group(dfs, request_ids, days=1, tol=2, timeunit="ms"): """Creates a rectangular timeline of modes for a set of sources. From 84a25814f2484abdd07e65abc153e5b5eba51163 Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Wed, 5 Jan 2022 09:15:57 +0100 Subject: [PATCH 45/90] update licence, python versions. add badges (#124) --- README.md | 4 ++++ setup.py | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3597ac46..042324ef 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,8 @@ # MVG: MultiViz Analytics Engine Client Library + + Package version + +PyPI - Python Version A Python library to interface the the **M**ulti**V**iz Analytics En**G**ine ('MVG') diff --git a/setup.py b/setup.py index 12aca6d6..37b2191e 100644 --- a/setup.py +++ b/setup.py @@ -32,8 +32,13 @@ packages=setuptools.find_packages(where=".", include=["mvg", "mvg.*"]), license="LICENSE", classifiers=[ - "Programming Language :: Python :: 3", + "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", ], python_requires=">=3.6", install_requires=required, From 24492bfb22e97d53aef096d92e318631cbb58809 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Thu, 20 Jan 2022 15:11:32 +0100 Subject: [PATCH 46/90] Pipeline should test the examples (#128) * Fixes in examples * Validate examples in the pipeline * Split up requirements into development and documentation requriements * Script to run the examples in the pipeline and also locally * Rename examples (add a number to define the order of execution) * Updated the filename of the referred example * Ensure order of retrieved files (in asc order of number in the filename) * Keep uvicorn at v0.16.0 * update MVG and API versions Co-authored-by: Mohsen Nosratinia --- .github/workflows/ci-checks.yml | 12 +++++++- README.md | 2 +- ...ck_version.ipynb => 0-check_version.ipynb} | 0 ..._overview.ipynb => 1-brief_overview.ipynb} | 0 ...ipynb => 2-sources_and_measurements.ipynb} | 0 ..._example.ipynb => 3-tabular_example.ipynb} | 3 +- ..._handling.ipynb => 4-error_handling.ipynb} | 0 ...classes.ipynb => 5-analysis_classes.ipynb} | 0 ...s_visual.ipynb => 6-analysis_visual.ipynb} | 4 ++- .../{labeling.ipynb => 7-labeling.ipynb} | 0 mvg/mvg.py | 4 +-- regenerate-examples.sh | 28 +++++++++++++++++++ requirements_dev.txt | 10 ++----- requirements_docs.txt | 7 +++++ 14 files changed, 56 insertions(+), 14 deletions(-) rename docs/source/content/examples/{check_version.ipynb => 0-check_version.ipynb} (100%) rename docs/source/content/examples/{brief_overview.ipynb => 1-brief_overview.ipynb} (100%) rename docs/source/content/examples/{sources_and_measurements.ipynb => 2-sources_and_measurements.ipynb} (100%) rename docs/source/content/examples/{tabular_example.ipynb => 3-tabular_example.ipynb} (99%) rename docs/source/content/examples/{error_handling.ipynb => 4-error_handling.ipynb} (100%) rename docs/source/content/examples/{analysis_classes.ipynb => 5-analysis_classes.ipynb} (100%) rename docs/source/content/examples/{analysis_visual.ipynb => 6-analysis_visual.ipynb} (99%) rename docs/source/content/examples/{labeling.ipynb => 7-labeling.ipynb} (100%) create mode 100644 regenerate-examples.sh create mode 100644 requirements_docs.txt diff --git a/.github/workflows/ci-checks.yml b/.github/workflows/ci-checks.yml index 8e8528d8..0ae7c788 100644 --- a/.github/workflows/ci-checks.yml +++ b/.github/workflows/ci-checks.yml @@ -66,7 +66,7 @@ jobs: python-version: "${{ matrix.python-version }}" - name: "Install dependencies" run: | - pip install -r requirements.txt + pip install -r requirements.txt pip install -r requirements_dev.txt - name: Login to GHCR uses: docker/login-action@v1 @@ -78,3 +78,13 @@ jobs: env: TEST_TOKEN: ${{ secrets.TEST_TOKEN }} run: "python -m pytest --verbose tests/" + validate-documentation-examples: + runs-on: [ ubuntu-latest ] + needs: [black, pylint, flake8] + name: "Validate examples in documentation" + steps: + - uses: actions/checkout@v2 + - name: "Run all examples" + env: + TEST_TOKEN: ${{ secrets.TEST_TOKEN }} + run: sh ./regenerate-examples.sh \ No newline at end of file diff --git a/README.md b/README.md index 042324ef..ac28e97f 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ v{MAJOR}.{MINOR}.{PATCH}. An increase of MAJOR means an incompatible change which requires an upgrade of mvg, an increase in MINOR does not require an upgrade of mvg, but may then not allow to access new features of the API. See mvg -documentation and examples/check_version.py for details. +documentation and examples/0-check_version.ipynb for details. ## Additional Documentation diff --git a/docs/source/content/examples/check_version.ipynb b/docs/source/content/examples/0-check_version.ipynb similarity index 100% rename from docs/source/content/examples/check_version.ipynb rename to docs/source/content/examples/0-check_version.ipynb diff --git a/docs/source/content/examples/brief_overview.ipynb b/docs/source/content/examples/1-brief_overview.ipynb similarity index 100% rename from docs/source/content/examples/brief_overview.ipynb rename to docs/source/content/examples/1-brief_overview.ipynb diff --git a/docs/source/content/examples/sources_and_measurements.ipynb b/docs/source/content/examples/2-sources_and_measurements.ipynb similarity index 100% rename from docs/source/content/examples/sources_and_measurements.ipynb rename to docs/source/content/examples/2-sources_and_measurements.ipynb diff --git a/docs/source/content/examples/tabular_example.ipynb b/docs/source/content/examples/3-tabular_example.ipynb similarity index 99% rename from docs/source/content/examples/tabular_example.ipynb rename to docs/source/content/examples/3-tabular_example.ipynb index f12f5be7..d1f03679 100644 --- a/docs/source/content/examples/tabular_example.ipynb +++ b/docs/source/content/examples/3-tabular_example.ipynb @@ -21,6 +21,7 @@ "metadata": {}, "outputs": [], "source": [ + "import os\n", "from pprint import pprint\n", "from pathlib import Path\n", "\n", @@ -46,7 +47,7 @@ "outputs": [], "source": [ "ENDPOINT = \"http://api.beta.multiviz.com\"\n", - "TOKEN = \"\"\n", + "TOKEN = os.environ['TEST_TOKEN']\n", "session = MVG(ENDPOINT, TOKEN)" ] }, diff --git a/docs/source/content/examples/error_handling.ipynb b/docs/source/content/examples/4-error_handling.ipynb similarity index 100% rename from docs/source/content/examples/error_handling.ipynb rename to docs/source/content/examples/4-error_handling.ipynb diff --git a/docs/source/content/examples/analysis_classes.ipynb b/docs/source/content/examples/5-analysis_classes.ipynb similarity index 100% rename from docs/source/content/examples/analysis_classes.ipynb rename to docs/source/content/examples/5-analysis_classes.ipynb diff --git a/docs/source/content/examples/analysis_visual.ipynb b/docs/source/content/examples/6-analysis_visual.ipynb similarity index 99% rename from docs/source/content/examples/analysis_visual.ipynb rename to docs/source/content/examples/6-analysis_visual.ipynb index 31b5ed3c..381fafd2 100644 --- a/docs/source/content/examples/analysis_visual.ipynb +++ b/docs/source/content/examples/6-analysis_visual.ipynb @@ -878,6 +878,7 @@ ], "source": [ "mode_all1 = mode_output1[\"results\"].copy()\n", + "mode_probabilities1 = mode_all1.pop(\"mode_probabilities\")\n", "mode_emerging1 = mode_all1.pop(\"mode_info\")\n", "\n", "# Conversion to dataframe of the full mode labels table\n", @@ -1317,6 +1318,7 @@ "df_rms5['Date'] = pd.to_datetime(df_rms5['timestamps'], unit=\"s\")\n", "#MODE_ID (full)\n", "mode_all5 = mode_output5[\"results\"].copy()\n", + "mode_probabilities5 = mode_all5.pop(\"mode_probabilities\")\n", "mode_emerging5 = mode_all5.pop(\"mode_info\")\n", "df_mode5 = pd.DataFrame(mode_all5)\n", "df_mode5['Date'] = pd.to_datetime(df_mode5['timestamps'], unit=\"s\")\n", @@ -1731,7 +1733,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.8.10" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/labeling.ipynb b/docs/source/content/examples/7-labeling.ipynb similarity index 100% rename from docs/source/content/examples/labeling.ipynb rename to docs/source/content/examples/7-labeling.ipynb diff --git a/mvg/mvg.py b/mvg/mvg.py index 8127e398..359866ce 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -55,8 +55,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.11.2") - self.tested_api_version = self.parse_version("v0.2.10") + self.mvg_version = self.parse_version("v0.11.3") + self.tested_api_version = self.parse_version("v0.2.13") # Get API version try: diff --git a/regenerate-examples.sh b/regenerate-examples.sh new file mode 100644 index 00000000..ee0bf287 --- /dev/null +++ b/regenerate-examples.sh @@ -0,0 +1,28 @@ +#!/bin/bash +set -e + +# Setup requirements for executing jupyter notebooks +python -m pip install -r requirements.txt +python -m pip install -r requirements_docs.txt + +# Cleanup +do_cleanup() { + echo "Performing cleanup of temporary resources" + rm -rf ./va-data-charlie +} + +# Execute notebooks containing examples +exec_examples() { + echo "Running notebooks containing examples" + local _d="./docs/source/content/examples" + for file in `ls -v $_d/*.ipynb`; do + papermill "$file" "$file" + done + echo "Finished executing examples" +} + +# Setup SIGINT, EXIT trap to finish the script with cleanup +trap do_cleanup INT EXIT + +# Execute main function +exec_examples \ No newline at end of file diff --git a/requirements_dev.txt b/requirements_dev.txt index a0a2b94e..9c153111 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,5 +1,5 @@ -packaging setuptools +packaging wheel twine black==20.8b1 @@ -8,13 +8,7 @@ darglint pylint==2.8.3 pytest pytest-docker -notebook -sphinx -sphinx-rtd-theme -nbsphinx -sphinx-copybutton m2r2 # for callback test server -uvicorn +uvicorn==0.16.0 fastapi -ipywidgets diff --git a/requirements_docs.txt b/requirements_docs.txt new file mode 100644 index 00000000..5a46aaef --- /dev/null +++ b/requirements_docs.txt @@ -0,0 +1,7 @@ +papermill +ipywidgets +tqdm +sphinx +sphinx-rtd-theme +nbsphinx +sphinx-copybutton \ No newline at end of file From eb7257cbaafc0f5950ce3692ea82113c64cc17de Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Sat, 29 Jan 2022 20:51:57 +0100 Subject: [PATCH 47/90] example for applymodel (#132) * example for applymodel * tested against latest version of API * Update to Inference example to fix typos on the main text * Incorporating recommendation on request_id line into example * Insert ApplyModel feature as an example Co-authored-by: SergioMDCB <61144290+SergioMDCB@users.noreply.github.com> Co-authored-by: Vishnu Nadhan --- .../source/content/examples/8-inference.ipynb | 352 ++++++++++++++++++ docs/source/index.rst | 1 + mvg/mvg.py | 2 +- requirements_docs.txt | 3 +- 4 files changed, 356 insertions(+), 2 deletions(-) create mode 100644 docs/source/content/examples/8-inference.ipynb diff --git a/docs/source/content/examples/8-inference.ipynb b/docs/source/content/examples/8-inference.ipynb new file mode 100644 index 00000000..a193ff16 --- /dev/null +++ b/docs/source/content/examples/8-inference.ipynb @@ -0,0 +1,352 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Model Inference for New Data\n", + "\n", + "After training a model on historical data, most common next step is inferering the outcome for the new data. MultiViz Analytics Engine (MVG) supports this by providing a feature called `ApplyModel`. To invoke this feature a successful analysis is required. Then, the `request_id` of that anaysis is used to refer to the model and apply it on any range of data on the same source or any source that has the same columns (or channels). \n", + "\n", + "This example using data from the Iris dataset illustrates how this process can be achieved." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Setup the connection" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from mvg import MVG, plotting\n", + "from sklearn.datasets import load_iris\n", + "import pandas as pd\n", + "\n", + "ENDPOINT = \"http://api.beta.multiviz.com\"\n", + "\n", + "# Replace by your own Token\n", + "TOKEN = os.environ[\"TEST_TOKEN\"]\n", + "session = MVG(ENDPOINT, TOKEN)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load the data\n", + "The data from Iris dataset needs to be wrangled to conform to the format used by MVG. The data is in the form of a 2D numpy array which needs to be converted to a dictionary where each key holds the name of a column (in this case features of the plants) and the corresponding values." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['sepal length (cm)',\n", + " 'sepal width (cm)',\n", + " 'petal length (cm)',\n", + " 'petal width (cm)']" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset = load_iris()\n", + "column_names = dataset[\"feature_names\"]\n", + "column_names" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "data = {}\n", + "for idx, name in enumerate(column_names):\n", + " data[name] = list((dataset[\"data\"][:,idx]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that this dataset is not a timeseries dataset. It is chosen because of its availability in the common python packages like sklearn. However, it is sufficient for demonstration purposes of the `ApplyModel` feature. MVG requires timestamps for each datapoint to be provided as well. We use dummy timestamps from 0 to 149." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "data[\"timestamp\"] = list(range(len(dataset[\"data\"])))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create source and measurements\n", + "A tabular source with these measurements needs to be created for the model to be built." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "session.create_tabular_source(sid=\"iris\", columns=column_names, meta={}, exist_ok=True)\n", + "session.create_tabular_measurement(sid=\"iris\", data=data, meta={}, exist_ok=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The three classes in the data are indicated in `dataset[\"target\"]`. Data is divided into three equal parts, each with 50 samples for each class." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", + " 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", + " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", + " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", + " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset[\"target\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Build the model\n", + "To demonstrate `ApplyModel` as a feature, we train a model on the middle 100 samples and then apply the trained model on the entire data." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "request_data = session.request_analysis(\n", + " sid=\"iris\", \n", + " feature=\"ModeId\",\n", + " start_timestamp=25, \n", + " end_timestamp=124)\n", + "request_id = request_data[\"request_id\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Helper function `wait_for_analysis` allows the possibility of waiting for the termination a group of analyses jobs." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "session.wait_for_analyses(request_id_list=[request_id])" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "mode_output = session.get_analysis_results(request_id=request_id)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Review the results\n", + "We can plot the result of the analysis that shows the three distinct modes." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "mode_output[\"results\"].pop(\"mode_info\", None)\n", + "mode_output[\"results\"].pop(\"mode_probabilities\", None)\n", + "plotting.modes_over_time(pd.DataFrame(mode_output[\"results\"]), request_id)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Comparing the resulting labels with the ground-truth in the original iris dataset shows that the borders are identified precisely. Note that `ModeId` feature sorts the ID of modes in a way that the ID for the first encountered mode is reported as 0, the second mode as 1, and so on. This happens to be the case in the iris dataset as well but for other datasets sorting of modes needs to be done before comparison." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all(mode_output[\"results\"][\"labels\"] == dataset[\"target\"][25:125])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Apply the model on the whole dataset\n", + "Now, we apply the model on the entire dataset. To that end, we need to call `ApplyModel` feature and provide the `request_id` of the analysis that contains the model. Note that running `ApplyModel` is much faster than `ModeId`." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "request_data_am = session.request_analysis(\n", + " sid=\"iris\", \n", + " feature=\"ApplyModel\",\n", + " parameters={\"model_ref\": request_id}\n", + ")\n", + "request_id_am = request_data_am[\"request_id\"]\n", + "session.wait_for_analyses(request_id_list=[request_id_am])" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "am_output = session.get_analysis_results(request_id=request_id_am)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Review the results of the inference\n", + "Comparing the results, show that the first 25 and last 25 elements of the data that was excluded while building the model in earlier steps are now correctly classified." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all(am_output[\"results\"][\"labels\"]==dataset[\"target\"])" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" + }, + "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.8.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/source/index.rst b/docs/source/index.rst index 396151f3..5565a66e 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -19,6 +19,7 @@ content/examples/analysis_classes content/examples/tabular_example content/examples/labeling + content/examples/8-inference .. toctree:: :maxdepth: 2 diff --git a/mvg/mvg.py b/mvg/mvg.py index 359866ce..c402e3b9 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -56,7 +56,7 @@ def __init__(self, endpoint: str, token: str): self.token = token self.mvg_version = self.parse_version("v0.11.3") - self.tested_api_version = self.parse_version("v0.2.13") + self.tested_api_version = self.parse_version("v0.3.0") # Get API version try: diff --git a/requirements_docs.txt b/requirements_docs.txt index 5a46aaef..bdbf291b 100644 --- a/requirements_docs.txt +++ b/requirements_docs.txt @@ -4,4 +4,5 @@ tqdm sphinx sphinx-rtd-theme nbsphinx -sphinx-copybutton \ No newline at end of file +sphinx-copybutton +sklearn \ No newline at end of file From e83a01d5a35056ddef2afe5a20dfb9b219a0719b Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Sat, 29 Jan 2022 23:40:36 +0100 Subject: [PATCH 48/90] Update all references of outdated filenames of examples (#134) * Updated filename of examples * Updated year to 2022 --- LICENSE | 2 +- docs/source/conf.py | 2 +- .../content/examples/1-brief_overview.ipynb | 2 +- .../content/examples/5-analysis_classes.ipynb | 2 +- .../content/examples/6-analysis_visual.ipynb | 10 +++++----- docs/source/content/examples/7-labeling.ipynb | 2 +- docs/source/content/features/general.md | 2 +- docs/source/index.rst | 16 ++++++++-------- 8 files changed, 19 insertions(+), 19 deletions(-) diff --git a/LICENSE b/LICENSE index 7000c2cd..4fef282b 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2021 Viking Analytics AB + Copyright 2022 Viking Analytics AB Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/docs/source/conf.py b/docs/source/conf.py index 7093ec0a..a3a7812e 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -20,7 +20,7 @@ # -- Project information ----------------------------------------------------- project = "MultiViz Analytics Engine Library" -copyright = "2021, Viking Analytics AB" +copyright = "2022, Viking Analytics AB" author = "Viking Analytics AB" diff --git a/docs/source/content/examples/1-brief_overview.ipynb b/docs/source/content/examples/1-brief_overview.ipynb index eb65fd94..4620b8b6 100644 --- a/docs/source/content/examples/1-brief_overview.ipynb +++ b/docs/source/content/examples/1-brief_overview.ipynb @@ -734,7 +734,7 @@ "source": [ "In this example, we will show how to request the KPIDemo and ModeId features to be applied to the previously defined SOURCE_ID.\n", "The BlackSheep feature is aimed to population analytics.\n", - "You can read about how to use it in the [\"Analysis and Results Visualization\"](analysis_visual.ipynb) example.\n", + "You can read about how to use it in the [\"Analysis and Results Visualization\"](6-analysis_visual.ipynb) example.\n", "\n", "We will begin with the 'KPIDemo' feature, which provides KPIs, such as RMS, for each vibration measurement.\n", "We proceed to request the analysis to the MVG service." diff --git a/docs/source/content/examples/5-analysis_classes.ipynb b/docs/source/content/examples/5-analysis_classes.ipynb index 40ed1417..e2aabbd0 100644 --- a/docs/source/content/examples/5-analysis_classes.ipynb +++ b/docs/source/content/examples/5-analysis_classes.ipynb @@ -30,7 +30,7 @@ "\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\"](sources_and_measurements.ipynb) example." + "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." ] }, { diff --git a/docs/source/content/examples/6-analysis_visual.ipynb b/docs/source/content/examples/6-analysis_visual.ipynb index 381fafd2..464bb879 100644 --- a/docs/source/content/examples/6-analysis_visual.ipynb +++ b/docs/source/content/examples/6-analysis_visual.ipynb @@ -11,7 +11,7 @@ "In addition, it presents some examples of how to visualize the results available for the mode identification feature.\n", "\n", "In this example, we will describe how to access and manipulate the analysis results directly.\n", - "The [\"Analysis Classes\"](analysis_classes.ipynb) example provides a simplified and unified interface to access these results as a pandas dataframe, along with some basic visualization of the results.\n", + "The [\"Analysis Classes\"](5-analysis_classes.ipynb) example provides a simplified and unified interface to access these results as a pandas dataframe, along with some basic visualization of the results.\n", "\n", "## Preliminaries\n", "\n", @@ -99,7 +99,7 @@ "source": [ "## Asset Analysis\n", "\n", - "In this example, we will use the sources uploaded by the [\"Sources and Measurement\"](sources_and_measurements.ipynb) example.\n", + "In this example, we will use the sources uploaded by the [\"Sources and Measurement\"](2-sources_and_measurements.ipynb) example.\n", "We start by looking if the sources are available in the database.\n", "At least, sources, \"u0001\" and \"u0005\", should appear as available." ] @@ -612,7 +612,7 @@ "\n", "These lists can be converted into a dataframe for ease of manipulation.\n", "In this example, we will show how to access the dictionary results information and convert it into a Pandas dataframe.\n", - "Please check the [\"Analysis Classes\"](analysis_classes.ipynb) example for directly getting a results Pandas dataframe.\n", + "Please check the [\"Analysis Classes\"](5-analysis_classes.ipynb) example for directly getting a results Pandas dataframe.\n", "In addition, the \"timestamp\" column is converted to a timestamp object in a column called \"Date\"." ] }, @@ -774,7 +774,7 @@ "\n", "We pass all the lists to a dataframe for ease of manipulation.\n", "Similarly to the RMS feature, we will show how to access the dictionary results information and convert it into a Pandas dataframe.\n", - "Please check the [\"Analysis Classes\"](analysis_classes.ipynb) example for directly getting a results Pandas dataframe.\n", + "Please check the [\"Analysis Classes\"](5-analysis_classes.ipynb) example for directly getting a results Pandas dataframe.\n", "In addition, the \"timestamp\" column is converted to a timestamp object in a column called \"Date\"." ] }, @@ -1713,7 +1713,7 @@ } }, "source": [ - "Please check the [\"Analysis Classes\"](analysis_classes.ipynb) example for some of the visualization options of the blacksheep results.\n" + "Please check the [\"Analysis Classes\"](5-analysis_classes.ipynb) example for some of the visualization options of the blacksheep results.\n" ] } ], diff --git a/docs/source/content/examples/7-labeling.ipynb b/docs/source/content/examples/7-labeling.ipynb index b52ab1f8..a7e3190a 100644 --- a/docs/source/content/examples/7-labeling.ipynb +++ b/docs/source/content/examples/7-labeling.ipynb @@ -20,7 +20,7 @@ "\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\"](sources_and_measurements.ipynb) example." + "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." ] }, { diff --git a/docs/source/content/features/general.md b/docs/source/content/features/general.md index a00996aa..792aa3dd 100644 --- a/docs/source/content/features/general.md +++ b/docs/source/content/features/general.md @@ -5,7 +5,7 @@ vibration data. The documentation in the FEATURES section focuses mostly on description of the features, for detailed information on how to invoke the features via the API, consult the [API Reference](../api_reference/mvg.html) or -the [Examples](../examples/analysis_visual.html). +the [Examples](../examples/6-analysis_visual.html). ## How to use features via MVG diff --git a/docs/source/index.rst b/docs/source/index.rst index 5565a66e..7c526a79 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -11,14 +11,14 @@ :maxdepth: 2 :caption: Examples - content/examples/brief_overview - content/examples/check_version - content/examples/error_handling - content/examples/sources_and_measurements - content/examples/analysis_visual - content/examples/analysis_classes - content/examples/tabular_example - content/examples/labeling + content/examples/1-brief_overview + content/examples/0-check_version + content/examples/4-error_handling + content/examples/2-sources_and_measurements + content/examples/6-analysis_visual + content/examples/5-analysis_classes + content/examples/3-tabular_example + content/examples/7-labeling content/examples/8-inference .. toctree:: From 512d68b825b715e2f744f5cb7b9cc300a58b2eb9 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Mon, 31 Jan 2022 13:34:13 +0100 Subject: [PATCH 49/90] Included plot depicting mode probabilities over time (#136) * Included plot depicting mode probabilities over time * Minor text update --- .../content/examples/6-analysis_visual.ipynb | 476 +++++++++--------- 1 file changed, 247 insertions(+), 229 deletions(-) diff --git a/docs/source/content/examples/6-analysis_visual.ipynb b/docs/source/content/examples/6-analysis_visual.ipynb index 464bb879..bc301f84 100644 --- a/docs/source/content/examples/6-analysis_visual.ipynb +++ b/docs/source/content/examples/6-analysis_visual.ipynb @@ -34,7 +34,7 @@ "import pandas as pd\n", "\n", "# import mvg library with python bindings to mvg-API\n", - "from mvg import MVG, plotting" + "from mvg import MVG, plotting, analysis_classes" ] }, { @@ -46,9 +46,10 @@ } }, "source": [ - "Note that the `TOKEN` is used both for authorization and authentication. Thus, each unique token represents a unique user and each user has their own unique database on the VA vibration service.\n", + "Note that the `TOKEN` is used both for authorization and authentication.\n", + "Thus, each unique token represents a unique user and each user has their own unique database on the VA service.\n", "\n", - "**You need to insert your token received from Viking Analytics here:" + "**You need to insert your token received from Viking Analytics here:**" ] }, { @@ -76,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:30.395676Z", @@ -106,7 +107,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": { "pycharm": { "name": "#%%\n" @@ -164,7 +165,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:32.804304Z", @@ -181,7 +182,7 @@ "['u0001', 'u0005']" ] }, - "execution_count": 7, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -205,7 +206,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:36.152571Z", @@ -223,10 +224,11 @@ " 'ModeId': '0.1.1',\n", " 'BlackSheep': '1.0.0',\n", " 'KPIDemo': '1.0.0',\n", + " 'ApplyModel': '0.1.0',\n", " 'LabelPropagation': '0.1.0'}" ] }, - "execution_count": 8, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -256,7 +258,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:37.584243Z", @@ -270,10 +272,10 @@ { "data": { "text/plain": [ - "{'request_id': '6ca83f696c2c9c7852db61292b7b9c76', 'request_status': 'queued'}" + "{'request_id': 'a1f7c778b0f2f6e3dc2321e766b9c3e0', 'request_status': 'queued'}" ] }, - "execution_count": 13, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -297,7 +299,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:38.637859Z", @@ -311,10 +313,10 @@ { "data": { "text/plain": [ - "{'request_id': '3e829b8c4e3b402167ef87348e989547', 'request_status': 'queued'}" + "{'request_id': '68dc4501640c972be4b9a9f69e7c5fed', 'request_status': 'queued'}" ] }, - "execution_count": 10, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -344,7 +346,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:43.435603Z", @@ -360,7 +362,7 @@ "output_type": "stream", "text": [ "KPI Analysis: successful\n", - "ModeId Analysis: queued\n" + "ModeId Analysis: successful\n" ] } ], @@ -385,7 +387,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:44.400481Z", @@ -399,10 +401,10 @@ { "data": { "text/plain": [ - "{'request_id': 'b73db2c38cdcb47ac016bfae13c8bb40', 'request_status': 'queued'}" + "{'request_id': 'fec5c4423df3c9136eeae131d6eaebb6', 'request_status': 'queued'}" ] }, - "execution_count": 15, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -415,7 +417,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:44.815607Z", @@ -429,10 +431,10 @@ { "data": { "text/plain": [ - "{'request_id': 'ddcca4899be38bf493286201b1c358a2', 'request_status': 'queued'}" + "{'request_id': 'c5141fa6ce9b0bc15929edf637939954', 'request_status': 'queued'}" ] }, - "execution_count": 16, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -456,7 +458,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:48.331542Z", @@ -472,7 +474,7 @@ "output_type": "stream", "text": [ "KPI Analysis: successful\n", - "ModeId Analysis: queued\n" + "ModeId Analysis: successful\n" ] } ], @@ -497,7 +499,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:51.412234Z", @@ -512,10 +514,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "The KPI analysis of u0001 has request_id ['6ca83f696c2c9c7852db61292b7b9c76'].\n", - "The KPI analysis of u0005 has request_id ['b73db2c38cdcb47ac016bfae13c8bb40'].\n", - "The ModeId analysis of u0001 has request_id ['d64f5db936eaad21bccc87b0cb3c8cc1', '3e829b8c4e3b402167ef87348e989547'].\n", - "The ModeId analysis of u0005 has request_id ['ddcca4899be38bf493286201b1c358a2'].\n" + "The KPI analysis of u0001 has request_id ['0f7b41f637ad4ff100f5d48fda039c9b', 'a1f7c778b0f2f6e3dc2321e766b9c3e0'].\n", + "The KPI analysis of u0005 has request_id ['fec5c4423df3c9136eeae131d6eaebb6'].\n", + "The ModeId analysis of u0001 has request_id ['e1a139e0e118ad412f0323ddffdf65a3', '7a9b9b15c680ccc78208f9a10191f29d', '68dc4501640c972be4b9a9f69e7c5fed'].\n", + "The ModeId analysis of u0005 has request_id ['c5141fa6ce9b0bc15929edf637939954'].\n" ] } ], @@ -545,7 +547,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:53.012148Z", @@ -559,7 +561,7 @@ "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" ] }, - "execution_count": 29, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -618,7 +620,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:55.411186Z", @@ -664,61 +666,61 @@ " \n", " \n", " 0\n", - " 0.647131\n", - " 2.691755\n", + " 0.647123\n", + " 2.691750\n", " 5.367004\n", - " 0.418778\n", - " 4.159523\n", + " 0.418769\n", + " 4.159563\n", " 1\n", - " -0.140425\n", + " -0.140420\n", " 1570273260\n", " 2019-10-05 11:01:00\n", " \n", " \n", " 1\n", - " 0.646627\n", - " 2.715255\n", + " 0.646619\n", + " 2.715251\n", " 5.414856\n", - " 0.418126\n", - " 4.199108\n", + " 0.418116\n", + " 4.199152\n", " 1\n", - " -0.140243\n", + " -0.140239\n", " 1570359660\n", " 2019-10-06 11:01:00\n", " \n", " \n", " 2\n", - " 0.646881\n", - " 2.685151\n", + " 0.646873\n", + " 2.685147\n", " 5.351562\n", - " 0.418455\n", - " 4.150921\n", + " 0.418445\n", + " 4.150966\n", " 1\n", - " -0.140351\n", + " -0.140347\n", " 1570446060\n", " 2019-10-07 11:01:00\n", " \n", " \n", " 3\n", - " 0.646649\n", - " 2.726611\n", + " 0.646643\n", + " 2.726605\n", " 5.395325\n", - " 0.418155\n", - " 4.216521\n", + " 0.418147\n", + " 4.216556\n", " 1\n", - " -0.140429\n", + " -0.140423\n", " 1570532460\n", " 2019-10-08 11:01:00\n", " \n", " \n", " 4\n", - " 0.646725\n", - " 2.697004\n", + " 0.646717\n", + " 2.697001\n", " 5.310974\n", - " 0.418253\n", - " 4.170249\n", + " 0.418243\n", + " 4.170294\n", " 1\n", - " -0.140058\n", + " -0.140055\n", " 1570618860\n", " 2019-10-09 11:01:00\n", " \n", @@ -728,21 +730,21 @@ ], "text/plain": [ " rms peak peak2peak variance crest_factor utilization \\\n", - "0 0.647131 2.691755 5.367004 0.418778 4.159523 1 \n", - "1 0.646627 2.715255 5.414856 0.418126 4.199108 1 \n", - "2 0.646881 2.685151 5.351562 0.418455 4.150921 1 \n", - "3 0.646649 2.726611 5.395325 0.418155 4.216521 1 \n", - "4 0.646725 2.697004 5.310974 0.418253 4.170249 1 \n", + "0 0.647123 2.691750 5.367004 0.418769 4.159563 1 \n", + "1 0.646619 2.715251 5.414856 0.418116 4.199152 1 \n", + "2 0.646873 2.685147 5.351562 0.418445 4.150966 1 \n", + "3 0.646643 2.726605 5.395325 0.418147 4.216556 1 \n", + "4 0.646717 2.697001 5.310974 0.418243 4.170294 1 \n", "\n", " dc_component timestamps Date \n", - "0 -0.140425 1570273260 2019-10-05 11:01:00 \n", - "1 -0.140243 1570359660 2019-10-06 11:01:00 \n", - "2 -0.140351 1570446060 2019-10-07 11:01:00 \n", - "3 -0.140429 1570532460 2019-10-08 11:01:00 \n", - "4 -0.140058 1570618860 2019-10-09 11:01:00 " + "0 -0.140420 1570273260 2019-10-05 11:01:00 \n", + "1 -0.140239 1570359660 2019-10-06 11:01:00 \n", + "2 -0.140347 1570446060 2019-10-07 11:01:00 \n", + "3 -0.140423 1570532460 2019-10-08 11:01:00 \n", + "4 -0.140055 1570618860 2019-10-09 11:01:00 " ] }, - "execution_count": 30, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -780,7 +782,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:57.673176Z", @@ -823,7 +825,7 @@ " 1570273260\n", " 0\n", " False\n", - " 0.900327\n", + " 0.966994\n", " 2019-10-05 11:01:00\n", " \n", " \n", @@ -831,7 +833,7 @@ " 1570359660\n", " 0\n", " False\n", - " 0.987532\n", + " 0.931219\n", " 2019-10-06 11:01:00\n", " \n", " \n", @@ -839,7 +841,7 @@ " 1570446060\n", " 0\n", " False\n", - " 0.993737\n", + " 0.999575\n", " 2019-10-07 11:01:00\n", " \n", " \n", @@ -847,7 +849,7 @@ " 1570532460\n", " 0\n", " False\n", - " 0.939948\n", + " 0.979806\n", " 2019-10-08 11:01:00\n", " \n", " \n", @@ -855,7 +857,7 @@ " 1570618860\n", " 0\n", " False\n", - " 0.791743\n", + " 0.885940\n", " 2019-10-09 11:01:00\n", " \n", " \n", @@ -864,14 +866,14 @@ ], "text/plain": [ " timestamps labels uncertain mode_probability Date\n", - "0 1570273260 0 False 0.900327 2019-10-05 11:01:00\n", - "1 1570359660 0 False 0.987532 2019-10-06 11:01:00\n", - "2 1570446060 0 False 0.993737 2019-10-07 11:01:00\n", - "3 1570532460 0 False 0.939948 2019-10-08 11:01:00\n", - "4 1570618860 0 False 0.791743 2019-10-09 11:01:00" + "0 1570273260 0 False 0.966994 2019-10-05 11:01:00\n", + "1 1570359660 0 False 0.931219 2019-10-06 11:01:00\n", + "2 1570446060 0 False 0.999575 2019-10-07 11:01:00\n", + "3 1570532460 0 False 0.979806 2019-10-08 11:01:00\n", + "4 1570618860 0 False 0.885940 2019-10-09 11:01:00" ] }, - "execution_count": 31, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -889,7 +891,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 17, "metadata": { "pycharm": { "name": "#%%\n" @@ -930,23 +932,23 @@ " 0\n", " 1570273260\n", " 1570446060\n", - " 0.993737\n", + " 0.999575\n", " 2019-10-05 11:01:00\n", " \n", " \n", " 1\n", " 1\n", " 1571655660\n", - " 1572264060\n", - " 0.997227\n", + " 1571742060\n", + " 0.996703\n", " 2019-10-21 11:01:00\n", " \n", " \n", " 2\n", " 2\n", " 1572350460\n", - " 1573646460\n", - " 0.997645\n", + " 1573041660\n", + " 0.999899\n", " 2019-10-29 12:01:00\n", " \n", " \n", @@ -955,12 +957,12 @@ ], "text/plain": [ " modes emerging_time max_prob_time max_probability emerging_Date\n", - "0 0 1570273260 1570446060 0.993737 2019-10-05 11:01:00\n", - "1 1 1571655660 1572264060 0.997227 2019-10-21 11:01:00\n", - "2 2 1572350460 1573646460 0.997645 2019-10-29 12:01:00" + "0 0 1570273260 1570446060 0.999575 2019-10-05 11:01:00\n", + "1 1 1571655660 1571742060 0.996703 2019-10-21 11:01:00\n", + "2 2 1572350460 1573041660 0.999899 2019-10-29 12:01:00" ] }, - "execution_count": 32, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -985,7 +987,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:58.990587Z", @@ -1034,78 +1036,78 @@ " \n", " \n", " 0\n", - " 0.647131\n", - " 2.691755\n", + " 0.647123\n", + " 2.691750\n", " 5.367004\n", - " 0.418778\n", - " 4.159523\n", + " 0.418769\n", + " 4.159563\n", " 1\n", - " -0.140425\n", + " -0.140420\n", " 1570273260\n", " 2019-10-05 11:01:00\n", " 0\n", " False\n", - " 0.900327\n", + " 0.966994\n", " \n", " \n", " 1\n", - " 0.646627\n", - " 2.715255\n", + " 0.646619\n", + " 2.715251\n", " 5.414856\n", - " 0.418126\n", - " 4.199108\n", + " 0.418116\n", + " 4.199152\n", " 1\n", - " -0.140243\n", + " -0.140239\n", " 1570359660\n", " 2019-10-06 11:01:00\n", " 0\n", " False\n", - " 0.987532\n", + " 0.931219\n", " \n", " \n", " 2\n", - " 0.646881\n", - " 2.685151\n", + " 0.646873\n", + " 2.685147\n", " 5.351562\n", - " 0.418455\n", - " 4.150921\n", + " 0.418445\n", + " 4.150966\n", " 1\n", - " -0.140351\n", + " -0.140347\n", " 1570446060\n", " 2019-10-07 11:01:00\n", " 0\n", " False\n", - " 0.993737\n", + " 0.999575\n", " \n", " \n", " 3\n", - " 0.646649\n", - " 2.726611\n", + " 0.646643\n", + " 2.726605\n", " 5.395325\n", - " 0.418155\n", - " 4.216521\n", + " 0.418147\n", + " 4.216556\n", " 1\n", - " -0.140429\n", + " -0.140423\n", " 1570532460\n", " 2019-10-08 11:01:00\n", " 0\n", " False\n", - " 0.939948\n", + " 0.979806\n", " \n", " \n", " 4\n", - " 0.646725\n", - " 2.697004\n", + " 0.646717\n", + " 2.697001\n", " 5.310974\n", - " 0.418253\n", - " 4.170249\n", + " 0.418243\n", + " 4.170294\n", " 1\n", - " -0.140058\n", + " -0.140055\n", " 1570618860\n", " 2019-10-09 11:01:00\n", " 0\n", " False\n", - " 0.791743\n", + " 0.885940\n", " \n", " \n", "\n", @@ -1113,28 +1115,28 @@ ], "text/plain": [ " rms peak peak2peak variance crest_factor utilization \\\n", - "0 0.647131 2.691755 5.367004 0.418778 4.159523 1 \n", - "1 0.646627 2.715255 5.414856 0.418126 4.199108 1 \n", - "2 0.646881 2.685151 5.351562 0.418455 4.150921 1 \n", - "3 0.646649 2.726611 5.395325 0.418155 4.216521 1 \n", - "4 0.646725 2.697004 5.310974 0.418253 4.170249 1 \n", + "0 0.647123 2.691750 5.367004 0.418769 4.159563 1 \n", + "1 0.646619 2.715251 5.414856 0.418116 4.199152 1 \n", + "2 0.646873 2.685147 5.351562 0.418445 4.150966 1 \n", + "3 0.646643 2.726605 5.395325 0.418147 4.216556 1 \n", + "4 0.646717 2.697001 5.310974 0.418243 4.170294 1 \n", "\n", " dc_component timestamps Date labels uncertain \\\n", - "0 -0.140425 1570273260 2019-10-05 11:01:00 0 False \n", - "1 -0.140243 1570359660 2019-10-06 11:01:00 0 False \n", - "2 -0.140351 1570446060 2019-10-07 11:01:00 0 False \n", - "3 -0.140429 1570532460 2019-10-08 11:01:00 0 False \n", - "4 -0.140058 1570618860 2019-10-09 11:01:00 0 False \n", + "0 -0.140420 1570273260 2019-10-05 11:01:00 0 False \n", + "1 -0.140239 1570359660 2019-10-06 11:01:00 0 False \n", + "2 -0.140347 1570446060 2019-10-07 11:01:00 0 False \n", + "3 -0.140423 1570532460 2019-10-08 11:01:00 0 False \n", + "4 -0.140055 1570618860 2019-10-09 11:01:00 0 False \n", "\n", " mode_probability \n", - "0 0.900327 \n", - "1 0.987532 \n", - "2 0.993737 \n", - "3 0.939948 \n", - "4 0.791743 " + "0 0.966994 \n", + "1 0.931219 \n", + "2 0.999575 \n", + "3 0.979806 \n", + "4 0.885940 " ] }, - "execution_count": 33, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -1157,7 +1159,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:01.536419Z", @@ -1206,78 +1208,78 @@ " \n", " \n", " 0\n", - " 0.646894\n", - " 2.753410\n", + " 0.646887\n", + " 2.753406\n", " 5.352417\n", - " 0.418472\n", - " 4.256353\n", + " 0.418462\n", + " 4.256397\n", " 1\n", - " -0.140495\n", + " -0.140491\n", " 1570186860\n", " 2019-10-04 11:01:00\n", " 0\n", " False\n", - " 0.952959\n", + " 0.989035\n", " \n", " \n", " 1\n", - " 0.646971\n", - " 2.784287\n", + " 0.646963\n", + " 2.784282\n", " 5.446289\n", - " 0.418571\n", - " 4.303575\n", + " 0.418562\n", + " 4.303615\n", " 1\n", - " -0.140061\n", + " -0.140056\n", " 1570273260\n", " 2019-10-05 11:01:00\n", " 0\n", " False\n", - " 0.811580\n", + " 0.973626\n", " \n", " \n", " 2\n", - " 0.646912\n", - " 2.767691\n", + " 0.646905\n", + " 2.767685\n", " 5.388000\n", - " 0.418495\n", - " 4.278314\n", + " 0.418485\n", + " 4.278352\n", " 1\n", - " -0.140249\n", + " -0.140244\n", " 1570359660\n", " 2019-10-06 11:01:00\n", " 0\n", " False\n", - " 0.921701\n", + " 0.981236\n", " \n", " \n", " 3\n", - " 0.647403\n", - " 2.838855\n", + " 0.647395\n", + " 2.838854\n", " 5.481140\n", - " 0.419130\n", - " 4.384991\n", + " 0.419120\n", + " 4.385044\n", " 1\n", - " -0.140125\n", + " -0.140124\n", " 1570446060\n", " 2019-10-07 11:01:00\n", " 0\n", " False\n", - " 0.963872\n", + " 0.997068\n", " \n", " \n", " 4\n", - " 0.647064\n", - " 2.748447\n", + " 0.647057\n", + " 2.748442\n", " 5.371582\n", - " 0.418692\n", - " 4.247562\n", + " 0.418683\n", + " 4.247603\n", " 1\n", - " -0.140170\n", + " -0.140165\n", " 1570532460\n", " 2019-10-08 11:01:00\n", " 0\n", " False\n", - " 0.930680\n", + " 0.990411\n", " \n", " \n", "\n", @@ -1285,28 +1287,28 @@ ], "text/plain": [ " rms peak peak2peak variance crest_factor utilization \\\n", - "0 0.646894 2.753410 5.352417 0.418472 4.256353 1 \n", - "1 0.646971 2.784287 5.446289 0.418571 4.303575 1 \n", - "2 0.646912 2.767691 5.388000 0.418495 4.278314 1 \n", - "3 0.647403 2.838855 5.481140 0.419130 4.384991 1 \n", - "4 0.647064 2.748447 5.371582 0.418692 4.247562 1 \n", + "0 0.646887 2.753406 5.352417 0.418462 4.256397 1 \n", + "1 0.646963 2.784282 5.446289 0.418562 4.303615 1 \n", + "2 0.646905 2.767685 5.388000 0.418485 4.278352 1 \n", + "3 0.647395 2.838854 5.481140 0.419120 4.385044 1 \n", + "4 0.647057 2.748442 5.371582 0.418683 4.247603 1 \n", "\n", " dc_component timestamps Date labels uncertain \\\n", - "0 -0.140495 1570186860 2019-10-04 11:01:00 0 False \n", - "1 -0.140061 1570273260 2019-10-05 11:01:00 0 False \n", - "2 -0.140249 1570359660 2019-10-06 11:01:00 0 False \n", - "3 -0.140125 1570446060 2019-10-07 11:01:00 0 False \n", - "4 -0.140170 1570532460 2019-10-08 11:01:00 0 False \n", + "0 -0.140491 1570186860 2019-10-04 11:01:00 0 False \n", + "1 -0.140056 1570273260 2019-10-05 11:01:00 0 False \n", + "2 -0.140244 1570359660 2019-10-06 11:01:00 0 False \n", + "3 -0.140124 1570446060 2019-10-07 11:01:00 0 False \n", + "4 -0.140165 1570532460 2019-10-08 11:01:00 0 False \n", "\n", " mode_probability \n", - "0 0.952959 \n", - "1 0.811580 \n", - "2 0.921701 \n", - "3 0.963872 \n", - "4 0.930680 " + "0 0.989035 \n", + "1 0.973626 \n", + "2 0.981236 \n", + "3 0.997068 \n", + "4 0.990411 " ] }, - "execution_count": 34, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -1337,7 +1339,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:07.727375Z", @@ -1345,17 +1347,9 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/oskar/viking_unix/mvg/env/lib/python3.8/site-packages/pandas/core/arrays/categorical.py:2630: FutureWarning: The `inplace` parameter in pandas.Categorical.set_categories is deprecated and will be removed in a future version. Removing unused categories will always return a new Categorical object.\n", - " res = method(*args, **kwargs)\n" - ] - }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1379,7 +1373,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 21, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:11.059225Z", @@ -1388,19 +1382,9 @@ "scrolled": true }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/oskar/viking_unix/mvg/env/lib/python3.8/site-packages/pandas/core/arrays/categorical.py:2630: FutureWarning: The `inplace` parameter in pandas.Categorical.set_categories is deprecated and will be removed in a future version. Removing unused categories will always return a new Categorical object.\n", - " res = method(*args, **kwargs)\n", - "/home/oskar/viking_unix/mvg/env/lib/python3.8/site-packages/pandas/core/arrays/categorical.py:2630: FutureWarning: The `inplace` parameter in pandas.Categorical.set_categories is deprecated and will be removed in a future version. Removing unused categories will always return a new Categorical object.\n", - " res = method(*args, **kwargs)\n" - ] - }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1425,7 +1409,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 22, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:16.615916Z", @@ -1435,7 +1419,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsoAAADQCAYAAAAeREeUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAf90lEQVR4nO3de3xV5Z3v8e8vCZcgCYZwMaBcJEYuMpspVKDMtKeSadPR4rGMQnEsFdqeY1+e1mk91FYcOtVafFV70aPjFE/hdFopl3oZmRnFntpxsEUbYOJBgRzKRQgQLuEWEEnM7/yxVg7buDB7h2z2Ivvzfr14kaxnrb1+Ow/Pwy/PftbzmLsLAAAAwHvlZTsAAAAAII5IlAEAAIAIJMoAAABABBJlAAAAIAKJMgAAABCBRBkAAACIQKIMdGFmNszM3MwKsh1LppjZv5rZ7PN0r/vM7KCZ7Tsf9wMAZBeJMhATZrbDzE6bWb82xzeEye6wLIUWG2b2bTP7efIxd/+Uu/+v83DvIZK+Lmm0u1+S6fuF95xlZjvN7ISZPWNmfZPK+prZ02HZTjOblca1t5tZtZm9Y2ZLzsd7AYALEYkyEC/bJX229RszGyupV/bCyZ4YjoIPkXTI3fene2FH3ouZjZH0D5JukTRQ0klJjyWd8qik02HZzZL+PrwmlWv3SLpP0k/TjQsAcgmJMhAv/yjpc0nfz5b0s+QTzKyPmf3MzA6EI4bzzSwvLMs3swfD6QHbJF0bce3/NLO9ZlYXTiXID8vKzezfzOxoeP2yswVpZtPM7A0zO2JmvzWzUeHxb5jZyjbn/tjMHk7h/p83s1fM7IdmdkjSt9u8TpWkb0maYWaNZlYTHv+tmX0h4jWOmNk2M/tIeHyXme1PnqZhZj3Cn9dbZlZvZo+bWWHE+62U9KKkQeG9l3zQzyEs2xH+PF6XdKJtshw1LSb5vShIfp9z95fdvVHSPZI+Y2ZFZnaRpOmS7nH3RndfI+mfFCTGH3itJLn7U+7+jKRDZ6tjAACJMhA3ayUVm9moMIGcKennbc55RFIfSZdL+piCxPrWsOyLkq6T9KeSJkj6qzbXLpHULKk8POcTkloTs3slrZZUIunS8D7vY2YVkpZKukNSf0n/Iuk5M+su6ZeS/rI1IQvfw02Snkzh/pI0UdI2BaOg302+r7s/L+l+Scvcvbe7J6LiC1/jdUml4X1/KenD4T3/WtL/MLPe4bkLJVVIGheWD5b0t21f0N1/LelTkvaE9/58Oz+HVp9V8MvKxe7efJZ4z2aMpJqkGP6oYAS5IvzT7O61SefXhNe0dy0AIEUkykD8tI4q/4WkTZLqWguSkudvuvtxd98h6SGdGUm8SdKP3H2XuzdI+l7StQMl/aWkO9z9RDiF4Ifh60lSk6Shkga5+6lwlDLKDEn/7O4vunuTpAclFUr6iLvvlLRe0g3huddIOunua1O4vxQkoo+4e7O7v53WT+2M7e6+2N3flbRM0mWSvuPu77j7agUJY7mZmaQvSfobd29w9+MKEvGZZ33lFH8OSec8HNZFR95Lb0lH2xw7KqkoLDt2lrL2rgUApChucwABBInyy5KGq820C0n9JHWTtDPp2E4FI6GSNEjSrjZlrYaG1+4NckRJwS/LrefPUzCq/JqZHZb0kLtHzWEdlPy67t5iZruSYnhSwUjqzyTN0pnR5PburzZfd1R90tdvhzG2PdZbwShwL0nrkuIxSfkp3qe9n4N0bu+nUVJxm2PFko5LavmAsvauBQCkiEQZiBl332lm2xWMvs5tU3xQZ0Z+3wyPDdGZUee9CkZQlVTWapekdyT1i5oG4O77FEzdkJn9maRfm9nL7r61zal7JI1t/SYcmb0sKYYVkh4ys0sVjCxPTuX+rWGc5Xiq5ek4qCBpHuPude2dHKG9n4P0wfGeCP/upTOjw8mrabwh6f9PLzGzyyX1kFSrIFEuMLMr3P3/hqckwmvauxYAkCKmXgDxNFfSNe5+IvlgOJ1guaTvhg91DZX0NZ2Zx7xc0lfM7FIzK5F0V9K1exXMQX7IzIrNLM/MRpjZxyTJzG4Mk1tJOqwgyWuJiG25pGvNbKqZdVOwZNo7kn4X3ueApN9KWqxgGsSmVO6fonpJw1ofXjwX7t4iaZGkH5rZAEkys8Fm9skUX+IDfw4p3P+AgqT6ry14CHOOpBFJp/xC0qfN7M/Dh/e+I+mpcMrNCUlPSfqOmV1kZlMkXa/g04gPvDZ8nwVm1lPB6Hm+mfVs+7AhAIBEGYgld/+ju1efpfi/KRiN3CZpjYKpDa1TJBZJekHBg1zrFSRTyT4nqbuC0ejDklZKKgvLPizpVTNrVLCCwlfdfVtEbFsUPBT3iIJR2U9L+rS7n0467UlJlToz7SKV+6diRfj3ITNbn8Z1Z/MNSVslrTWzY5J+LenKVC5M8efQni9K+u8KVp8Yo6Qk293fkPRfFSS9+xXML/5y0rVfVjAner+ChwpvC69J5dr5CkbT7wrfw9vhMQBAEnPvzE8yAQAAgK6BEWUAAAAgAokyAAAAEIFEGQAAAIhAogwAAABEOKflgEpL+/nw4cM6KRQAAICuYd26dQfdvX+248C5OadEefjwYaquPtsKVgAAALnJzHa2fxbijqkXAAAAQAQSZQAAACACiTIAAAAQ4ZzmKAMAACC+1q1bN6CgoOAJSVeJAdK2WiRtbG5u/sL48eP3R51AogwAANBFFRQUPHHJJZeM6t+//+G8vDzPdjxx0tLSYgcOHBi9b9++JyRNizqH3ywAAAC6rqv69+9/jCT5/fLy8rx///5HFYy2R59zHuMBAADA+ZVHknx24c/mrPkwiTIAAAAQgTnKAAAAOaJfPyUOHeq8/K+0VM0HD6rmg84xs/HTpk1rePbZZ7dLUlNTkwYMGJAYN27ciZdeemlrqvcaPHjw2Orq6k1lZWXNqZy/efPm7jfddNPlR44cKRg7duzJX/3qV9t79uyZ1ug6I8oAAAA5ojOT5FRfr7CwsGXLli2FjY2NJklPP/108cCBA5s6M44oX/va1y69/fbb6996662Nffr0af7xj3/cL93XIFEGAABARlVWVh5dsWLFxZK0dOnSvtOnT29oLauvr8+vrKwcUVFRMTqRSIx89dVXCyVp3759+VOmTLmivLx8zIwZM4a6nxkMfuyxx/qOHTt21MiRI0fPmjVraHPzeweZW1pa9Pvf/77o1ltvPSxJc+bMOfTcc89dnG7cJMoAAADIqFtuuaVh2bJlJSdPnrRNmzb1mjx58onWsnnz5g1KJBIna2tr37z33nvrZs+ePVyS7rrrrkGTJ09u3Lp16xs33HDDkb1793aXpPXr1/dcuXJl3+rq6s2bN29+My8vzx9//PHS5PvV19cXFBUVvdutWzdJ0rBhw07X19d3TzduEmUAAABk1MSJE9/evXt3j0WLFvWtrKw8mlz22muvFc2dO/eQJE2bNu34kSNHChoaGvLWrl1bNGfOnEOSNHPmzKPFxcXvStLzzz9ftHHjxl6JRGLUyJEjR69Zs6Z427ZtPTIRNw/zAQAAIOOqqqqOLFiw4LLVq1dv2b9/f4dzUHe3G2+88dCjjz5ad7ZzBg4c2Hz8+PH8pqYmdevWTTt27Og+cODA0+neixFlAAAAZNxtt9128M4779xz9dVXv518fOLEiccXL15cKkmrVq0qKikpae7bt2/LpEmTji9ZsqRUkpYvX1587NixfEmqqqo6tmrVqpK6uroCKZjjXFtb+55pFXl5eZo0adLxxYsXl0jST3/609LrrrvuSLoxkygDAADkiNJSpbS0WiZeb8SIEU3z58/f3/b4Aw88sGfDhg29KioqRt99992DlyxZsl2SFi5cuOeVV17pXV5ePuapp54qKSsrOy1J48ePPzV//vy6qVOnVlRUVIy+5pprKnbt2tWt7es+9NBDux955JFLhgwZctXhw4cLvvrVrx5M9/1Z8hOE6ZowYYJXV1d3+HoAAICuyMzWufuEbMdRU1OzI5FIpJ0g5pKampp+iURiWFQZI8oAAABABBJlAAAAIAKJMgAAABCBRBkAAACIcE6JclPGd+kGAAAAsuOcNhx5/XXJrLNCAS5cHV87Bp3qF3RIAIDOw9QLAACAXNFPCZnGd9qffkq0d0szG3/99dcPb/2+qalJJSUliY9//OPl6YQ+ePDgsXv37k15kPf+++/vP2TIkKvMbHw61yUjUQYAAMgVh85tNkFHXq+wsLBly5YthY2NjSZJTz/9dPHAgQMzPoH3Yx/7WOOLL75YO2jQoLS3rm5FogwAAICMqqysPLpixYqLJWnp0qV9p0+f3tBaVl9fn19ZWTmioqJidCKRGPnqq68WStK+ffvyp0yZckV5efmYGTNmDE3eJO+xxx7rO3bs2FEjR44cPWvWrKHNze/fIHDKlClvX3nllR1OkiUSZQAAAGTYLbfc0rBs2bKSkydP2qZNm3pNnjz5RGvZvHnzBiUSiZO1tbVv3nvvvXWzZ88eLkl33XXXoMmTJzdu3br1jRtuuOHI3r17u0vS+vXre65cubJvdXX15s2bN7+Zl5fnjz/+eGkm4iZRBgAAQEZNnDjx7d27d/dYtGhR38rKyqPJZa+99lrR3LlzD0nStGnTjh85cqSgoaEhb+3atUVz5sw5JEkzZ848Wlxc/K4kPf/880UbN27slUgkRo0cOXL0mjVrirdt29YjE3F37jwVAAAAIEJVVdWRBQsWXLZ69eot+/fv73AO6u524403Hnr00UfrOjO+KIwoAwAAIONuu+22g3feeeeeq6+++u3k4xMnTjy+ePHiUklatWpVUUlJSXPfvn1bJk2adHzJkiWlkrR8+fLiY8eO5UtSVVXVsVWrVpXU1dUVSMEc59ra2u6ZiJlEGQAAIFeU6v1PvZ2n1xsxYkTT/Pnz97c9/sADD+zZsGFDr4qKitF333334CVLlmyXpIULF+555ZVXepeXl4956qmnSsrKyk5L0vjx40/Nnz+/burUqRUVFRWjr7nmmopdu3Z1a/u6991334CBAwf+SX19ffdEIjF6xowZQ9N9e5b8BGHaF9sEl6o7fD3QVbDhSEyw4QiAmLCbtc7dJ2Q7jpqamh2JROJgtuOIs5qamn6JRGJYVBkjygAAAEAEEmUAAAAgAokyAAAAEIFEGQAAAIhAogwAAABEIFEGAAAAIrAzHwAAQK5Y2S+h04c6L//rXtqsvzpY80GnmNn4adOmNTz77LPbJampqUkDBgxIjBs37sRLL720NdVbDR48eGx1dfWmsrKylNZunjZt2vDXX3/9om7duvm4ceNO/PznP9/Zo0ePtFZ0ZUQZAAAgV3Rmkpzi6xUWFrZs2bKlsLGx0STp6aefLh44cGBTp8YR4eabb27Ytm3bxi1btrxx6tQp+9GPftQv3dcgUQYAAEBGVVZWHl2xYsXFkrR06dK+06dPb2gtq6+vz6+srBxRUVExOpFIjHz11VcLJWnfvn35U6ZMuaK8vHzMjBkzhiZvkvfYY4/1HTt27KiRI0eOnjVr1tDm5vcPMs+YMeNoXl6e8vLyNGHChBO7d+9Oe5trEmUAAABk1C233NKwbNmykpMnT9qmTZt6TZ48+URr2bx58wYlEomTtbW1b9577711s2fPHi5Jd91116DJkyc3bt269Y0bbrjhyN69e7tL0vr163uuXLmyb3V19ebNmze/mZeX548//njp2e79zjvv2LJly0qvvfbao+nGTaIMAACAjJo4ceLbu3fv7rFo0aK+lZWV70lYX3vttaK5c+cekqRp06YdP3LkSEFDQ0Pe2rVri+bMmXNIkmbOnHm0uLj4XUl6/vnnizZu3NgrkUiMGjly5Og1a9YUb9u2rcfZ7j179uwhkyZNaqyqqmpMN24e5gMAAEDGVVVVHVmwYMFlq1ev3rJ///4O56DubjfeeOOhRx99tK69c7/+9a+XHTx4sOCFF174Y0fuxYgyAAAAMu622247eOedd+65+uqr304+PnHixOOLFy8ulaRVq1YVlZSUNPft27dl0qRJx5csWVIqScuXLy8+duxYviRVVVUdW7VqVUldXV2BFMxxrq2tfd/84x/84Af9fvOb3/R55plntuXn53coZkaUAQAAckX30uZOXx4uRSNGjGiaP3/+/rbHH3jggT0333zzsIqKitGFhYUtS5Ys2S5JCxcu3DN9+vTLy8vLx0yYMKGxrKzstCSNHz/+1Pz58+umTp1a0dLSom7duvnDDz/8VkVFxenk1503b97QsrKydyZMmDBKkq677rrDDz744N503p4lP0GYLrMJLlV3+Hqgq+h4K0Kn+oVlOwIAkCTZzVrn7hOyHUdNTc2ORCJxMNtxxFlNTU2/RCIxLKqMqRcAAABABBJlAAAAIAKJMgAAQNfV0tLSwry0swh/Ni1nKydRBgAA6Lo2HjhwoA/J8vu1tLTYgQMH+kjaeLZzWPUCAACgi2pubv7Cvn37nti3b99VYoC0rRZJG5ubm79wthNIlAEAALqo8ePH75c0LdtxXKj4zQIAAACIQKIMAAAARCBRBgAAACKQKAMAAAARSJQBAACACCTKAAAAQAQSZQAAACACiTIAAAAQgUQZAAAAiECiDAAAAEQgUQYAAAAikCgDAAAAEUiUAQAAgAgkygAAAEAEEmUAAAAgAokyAAAAEIFEGQAAAIhAogwAAABEIFEGAAAAIpAoAwAAABFIlAEAAIAIJMoAAABABBJlAAAAIAKJMgAAABCBRBkAAACIQKIMAAAARCBRBgAAACKQKAMAAAARSJQBAACACCTKAAAAQAQSZQAAACACiTIAAAAQgUQZAAAAiECiDAAAAEQgUQYAAAAikCgDAAAAEUiUAQAAgAgkygAAAEAEEmUAAAAgAokyAAAAEIFEGQAAAIhAogwAAABEIFEGAAAAIpAoAwAAABFIlAEAAIAIJMoAAABABBJlAAAAIAKJMgAAABCBRBkAAACIQKIMAAAARCBRBgAAACKQKAMAAAARSJQBAACACCTKAAAAQAQSZQAAACACiTIAAAAQgUQZAAAAiECiDAAAAEQwd+/4xWbHJW3pvHCAC1Y/SQezHQSoBwCxcaW7F2U7CJybgnO8fou7T+iUSIALmJlV0xayj3oAEBdmVp3tGHDumHoBAAAARCBRBgAAACKca6L8k06JArjw0RbigXoAEBf0R13AOT3MBwAAAHRVTL0AAAAAIpAoAwAAABFIlAFc8MzMsh0DAEj0R10Nc5SBDmrtDJ1GBABAl5RWomxm+ZLK3X1L0rFLJZ1w98MZiA+4IJmZkUCfH2ZWJGm6pF6S8iXVStro7nVZDQxAzjGzwZJmSjokaa27b04q6+XuJ7MWHDok3UR5qKT57v5FMyuUVCXp25IulfTvkj7n7scyESgQJ2bWXdIYSU2SGiWdlHTK3Y+Z2XBJy9z96mzGmAvMrL+keZJ6Sxok6cOS6iT1kfSMu8/LYngAcoiZDZD0PUkDJHWXdELSfe6+PsyffuLun8xmjEhfultYD5FUFn49QtKXJc10901m9i1J90u6vRPjA+LqTyQ9JulFST0UJMxNZnZY0pUKRjaReWMk/am7V0qSmf25pE+4+z1m9oCZ/Z27L8huiAByxEhJw9x9qiSZ2a2SfmJm10sqFf8vXJDSTZQHSxpkZpdIukHSAXffFJb9H0lXdWZwQIyNlDRQ0r9JKlEwotlbUrOCdrI7e6HllN6S3jGzYkmnJI2SdEVYVi3ppmwFBiDnlCmYciEz6+7ui83slKQnFAyq7MpmcOiYdBPlI5L2SfqapKsl/T6pbJCko50TFhB7GyXdI+nFtnORw2kZTLs4P9ZJ+g9J9yn4mPMySU+GZZdJOp6dsADkoD2S1pvZRe5+wswK3H2pmbVIWqrgU0hcYNKdo1ysYO7Nu5J6Sjrq7nvCslslNbr7ikwECsSJmeVJynP35qTv3d3dzPpI6uXue7MaZI4IP+G6TsHI/j+7+5tmVqBgdLk56VMvAMiY8Nmt3u5+IOlYnru3mNlMBc+xPJO1ANEhKSfKrU/xm1kPSR+S1E3BCPNBSfvdvTn87ak5Y9ECMZDUFi5WMFd/h7sfynJYOSepHnpJ6u/uO7MdE4DclNQfXargl/Q/uvu2bMeFc5fuiPLHJX1awaT0fgpGcJol/UHSQ62jy0BXZ2aTFSwB1FNSg6RfuntNWHarpN8lL6OIzAjr4bOSLlIwN/BJd/+PsIx6AHDemNmnJF0vqVDBVLBfuvvLYdk8SS+0/j+BC0e6O/N9U9IOSd9S8FHnn+nMeoFPmNllnRodEF/fkFQv6WcKlgFaaGYfCstmKkjckHnfUPDcxE8VPFH+PeoBQJZ8RVKNpL+VtEnSd82sMiyrVPrPhSEG0q20oQoeXmpdyN8VTF6/38xqJLFtI3LFFe7+n8OvXzGzL0l62Mw+rWCU+WDWIsst1AOAuLhM0hPu3iTpETPbIun7ZvYZBcuIHvjAqxFL6SbK35f0N2b2pqTNCkZyjih4wt/FPwLkjuNmNt7d15lZvrv/xMxc0j8p6Cz3Zzm+XEE9AIiLXQqWyd0Q9kerzUySnpZ0ieiPLkhpzVGWJDObK+laScUKdr8qlbRG0nfcfWunRwjEjAU933+SVO/ub7YpmytpkbunO60JaaIeAMSJmU1QsPrX5jbHPyHpH9x9eHYiw7lIO1EG8H7h8nC93L3RzHq4+zvZjikXUQ8A4iLsj4rc/Wi4AcnpbMeE9KU92mJm+WbWLfx6lJk9EX7N/GTkjLADTFYu6SFJIjk7f6gHAHERkQeNVvDAt0iSL1wd+VgyeQh6qIJl4jr6WsAFKVxAPq/1l0ZJlyvY0lpmlp+9yHIL9QAgLlp3aU1KmAdKOh0eoz+6QKW9VIm7t0hqCb89rPduYw3kDNpCPFAPAGLqhKTfZDsInJt0Nxwpk3SNgl35DkiqlbTb3d/OTHhAPNEW4oF6AABkUjpbWP+Fgl35iiT1V/CRQpGknZIecHd+a0JOoC3EA/UAIC7C6V/5Cj7dag6nhXV399NmNl/Sdnf/RXajREekM/XiS5J+7+4/SD5oZh+V9Hdm1uTu/96p0QHxRFuIB+oBQFwskDRM0nYF67s3hH+/IalK0uNZjA3nIJ1EubekY20PuvvLZtas4DcpIBfQFuKBegAQF5+RtEHBcxKDJY2UdLGCEeaPSPpm1iLDOUknUf6epM+a2XCF8wAlHZc0WcFWsds7PzwglmgL8UA9AIiLX0j6F3ff0LbAzF6X1HD+Q0JnSPdhvskKfmtKKJgT+K6k30r6gbvvyUSAQBzRFuKBegAQB2ZWquBTrAadWYWndQnLaZJeYG33C1M6D/MVuHtzhuMBYo+2EA/UA4C4SdoEyT2dkUjEVsqbhJztPyQzKzCzz3daREDM0RbigXoAEDfu3hL+ad18JJ/+6MKW0oiymfWX9A1JRyXtk1Qvab+COYCDJf2ju4/JYJxALNAW4oF6ABAX9EddW6oP841TsBTTjyR9VMGTnH0ULPI/XNK2zg8NiKVxoi3EwThRDwDiYZzoj7qsVBPlnpJelPTtcLtYJS2k/V8kXZupAIGYoS3EA/UAIC7oj7qwVBPlVyTVSbpIwQLa5u6nw7K9kl7ORHBADNEW4oF6ABAX9EddWFrLw73nQrNCBds0NnVuSMCFhbYQD9QDgLigP+o6Ul71olXS0iczFczLAXISbSEeqAcAcUF/1PWknSjrzHSNz0rqJ0lmZp0WEXDhoC3EA/UAIC7oj7qYlBLl5EpOmnezVdLOTAQFxBVtIR6oBwBxQX/UtaW7hXVCkks6JamRLWKRq2gL8UA9AIgL+qOuKdUNRz4q6TMK/gF8WFKtpLckrXD3NzIaIRAjtIV4oB4AxAX9UdfW7tQLM+sl6R5Jf5D0nIJlUJoV7EDzpJl9PKMRAjFBW4gH6gFAXNAfdX3tjiib2QhJT7l7Ivy+m6TfuvsUMxstabG7T8x8qEB20RbigXoAEBf0R11fKhuOnJK01czukfSmpA9J2hyW9Q7LgVxAW4gH6gFAXNAfdXHtTr1w9zpJD0kaIOmTCvYv/3ZYfImkLZkKDogT2kI8UA8A4oL+qOtLedULM7tYUq/WpzjNLK91T3Mgl9AW4oF6ABAX9EddV4e3sJYkMyuR9I67n+y8kIALD20hHqgHAHFBf9Q1pPIw3yhJQySdkNQo6bik0+6+y8yelLTB3b+f8UiBLKMtxAP1ACAu6I+6vlQe5puvYEL6Zkk9FCx70mJm9ZKmSHomY9EB8UJbiAfqAUBc0B91cakkyuWSXlCwPmCJpCIFk9VPhl+z8wxyBW0hHqgHAHFBf9TFpZIof0fSjqjdZczsq5IOdHpUQDzRFuKBegAQF/RHXVwqc5TP+uSmmV3k7icyEhkQM7SFeKAeAMQF/VHXl9KqF2Z2o6SEgsnquyVtlbTZ3Q9nNjwgXmgL8UA9AIgL+qOu7QMTZTPrLel+SfkK/gEMUrCodk9Jr0la6O4Hz0OcQFbRFuKBegAQF/RHuaG9RHmspCWSPpz80UK4l/k3JSXcfXqmgwSyjbYQD9QDgLigP8oN7W1h3UfBUif9kg+6e5Ok30m6ODNhAbFDW4gH6gFAXNAf5YD2Vr3YIGmxpAfNbL+CpzffklQoaaqk/53Z8IDYoC3EA/UAIC7oj3JAKqteFEj6nKQxCtYEHC5pr6TF7v5SxiMEYoK2EA/UA4C4oD/q+tqbozxU0u0Kdp15S9KT7r4zLJss6YS7v34+AgWyibYQD9QDgLigP8oN7c1RviM85wVJF0n6ezP7VFj2JUnjMhYZEC93iLYQB3eIegAQD3eI/qjLa2+O8lWS5rn7BknPmNkXJH3FzDYq2NN8b6YDBGKCthAP1AOAuKA/ygHtjSgXSCqTJDPLd/cnJP2rpO9KmqLgowYgF9AW4oF6ABAX9Ec5oL1EeYGkXZLk7u+aWYG7PyzpDwoW1T6a4fiAuKAtxAP1ACAu6I9yQCqrXpgnndT6vZld7u7bMh4hEBO0hXigHgDEBf1R19duogwAAADkovamXgAAAAA5iUQZAAAAiECiDAAAAEQgUQYAAAAikCgDAAAAEf4f82jqJt0i1c4AAAAASUVORK5CYII=", + "image/png": "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", "text/plain": [ "
" ] @@ -1462,7 +1446,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 23, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:17.917436Z", @@ -1475,7 +1459,7 @@ "outputs": [ { "data": { - "image/png": "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1hZsl8hXJe2VtMnMTkn6jaQbktkwyRya8zlJX1FwNe5IxZVH59wOSX+noMwdUXD+3hfitv2CgnMOjyi4GGVOuE0y285XMPs5L/wczoXPAUCHMOfa8ggPAAAAOjtmAAEAADxDAQQAAPAMBRAAAMAzFEAAAADPXNRtCK644grXp0+fZte7+uqrlZJC1wQA4HKxZcuWY865/h09DrTORRXAPn366POf/3yz6y1YsOBidgMAADoZM3uz+bXQWTEtBwAA4BkKIAAAgGcogAAAAJ7hvSgBAECXsWXLlqvS0tKelXSjmMiKUi9pe11d3WfHjBlzpPFCCiAAAOgy0tLSnr366quH9+/f/0RKSgrvZ5tAfX29HT16dERFRcWzkoobL6c5AwCAruTG/v37n6L8RUtJSXH9+/c/qWCm9L3LL/F4AAAALkYK5S85YU5Ndj0KIAAAgGcogAAAoMu65pprYmY2pq0e11xzTay5fZrZmM997nPXNHz8jW98I+f+++8f2NrPITc3d1R5eXnkdRnz5s27urWv3xQKIAAA6LLKysrSnHNqq0dZWVmzF8h2797d/epXv8pqrrS1paeeempAW74eBRAAAKAFUlNT3ac//emjjz76aE7jZbt37+4+fvz4/Pz8/BGFhYX5f/rTn7o3XqeioiJ1woQJ1+fl5Y2cNm3aYOcunNJYVFQ0bOTIkcPz8vJGPv744/0k6Qtf+ELuO++8k1JQUDCiuLh4aKL1WoICCAAA0EJf+cpXjqxZsya7qqoqNf75OXPmDLrrrruq9uzZ88a0adOq5syZc23jbefNmzewsLCwZu/evTsmT55cXV5e/ueS+Nxzzx3YsWPHzv/8z/9844c//GFORUVF6qJFi8p69OhRv2vXrjd++ctf7k+0XkvGTwEEAABooezs7PqpU6dWLVy48Kr457dt23bFvffee1yS5syZc3zLli29G2+7adOmjFmzZlVJ0vTp009mZma+27Dssccey7nhhhtGjBkzZnhFRUW3HTt29Gxq/8mulwgFEAAAoBW+9rWvVT7//PP9zpw50yZ9au3atRm/+93vMkpKSnbt3r37jeHDh587d+7ce1472fWiUAABAABaIScn593bb7/9xPPPP//nc/De//73n3n22WezJOmHP/xh9tixY2sabzd+/PjTy5Yt6ytJK1euzDx16lSqJFVXV6f26dPn3YyMjPpt27b1LC0tvaJhm7S0NPfOO+9Yc+sliwIIAAC6rNzc3DozU1s9cnNz61qy/wcffLCiurr6z1cDL168+K2f/vSn/fLz80csX76876JFiw423mbhwoWHN27c2DsvL2/kmjVrsgYMGHBekqZMmXKyrq7OrrvuupFf+cpXcmOx2JmGbe66666jw4cPH1FcXDw0ar1kWfyVJy01cOBA9/nPf77Z9RYsWNDqfQAAgM7HzLY458Ze6v2WlpYeiMVixy71fruq0tLSfrFYbEjj55kBBAAA8AwFEAAAwDMUQAAAAM9QAAEAADxDAQQAAPAMBRAAAMAzac2vAgAA0Dn166dYVVXb9Zm+fVV37JhKo9YxszHFxcXHX3rppf2SVFtbq6uuuio2evToM6+++ureZPeVm5s7qqSkZOeAAQOSuvfgrl27ut95553XVVdXp40aNersL37xi/09e/Zs1f38mAEEAABdVluWv2RfLz09vX737t3pNTU1JkkvvPBCZk5OTm1bjqMp999//zVf/OIXK996663tffr0qfvBD37Qr/mtmkYBBAAAaKGioqKTq1atulKSli9fnj1lypTjDcsqKytTi4qKhuXn54+IxWIFmzdvTpekioqK1AkTJlyfl5c3ctq0aYPj34xj0aJF2aNGjRpeUFAwYsaMGYPr6v5yUrC+vl5//OMfM+65554TkjRr1qyql19++crWjp8CCAAA0EJ333338RUrVmSdPXvWdu7c2auwsPDPb8c2d+7cgbFY7OyePXveePjhh8tmzpw5VJLmzZs3sLCwsGbv3r07Jk+eXF1eXt5dkrZu3dpz9erV2SUlJbt27dr1RkpKilu8eHHf+P1VVlamZWRkvNutWzdJ0pAhQ85XVlZ2b+34KYAAAAAtNG7cuHOHDh3qsWTJkuyioqKT8ctee+21jNmzZ1dJUnFx8enq6uq048ePp2zatClj1qxZVZI0ffr0k5mZme9K0rp16zK2b9/eKxaLDS8oKBixYcOGzH379vVoz/Ff1HHz1NTUpNY7deqMMjOvuJhdAQAAdCqTJk2qXrBgwbXr16/ffeTIkVZ3KuecTZ06teqZZ54pS7ROTk5O3enTp1Nra2vVrVs3HThwoHtOTs751u7zogpgTk6OFixY0Ox6ZhezF6BttepyKbTec/wAAHB5mjNnzrErr7zy3Ztuuunc2rVrMxqeHzdu3OmlS5f2/e53v1u+du3ajKysrLrs7Oz68ePHn162bFnff/qnfypfuXJl5qlTp1IladKkSac+/vGP533961+vzM3NrausrEw9efJkan5+/p8LXkpKisaPH3966dKlWffee++JH//4x31vu+226taOnUPAAACgy+rbV0ndQqU9Xm/YsGG18+fPP9L4+ccee+zwtm3beuXn54948MEHc5ctW7ZfkhYuXHh448aNvfPy8kauWbMma8CAAeclacyYMW/Pnz+/bOLEifn5+fkjbrnllvyDBw92a/y6TzzxxKGnn3766kGDBt144sSJtC996UvHWvt5WvwVKC01duxYV1JS0vxOmABAJ8IM4CXGDCBwWbK7tMU5N/ZS77e0tPRALBZrdfHxTWlpab9YLDak8fPMAAIAAHiGAggAAOAZCiAAAIBnKIAAAACeoQACAAB4hgIIAADgGQogAADouvopJtOYNnv0U6y5XZrZmDvuuGNow8e1tbXKysqKffjDH85rydBzc3NHlZeXJ/2mHI8++mj/QYMG3WhmY1qyXVMogAAAoOuqurh3NWvN66Wnp9fv3r07vaamxiTphRdeyMzJyalt03E04eabb6555ZVX9gwcOLDVbwHXgAIIAADQQkVFRSdXrVp1pSQtX748e8qUKccbllVWVqYWFRUNy8/PHxGLxQo2b96cLkkVFRWpEyZMuD4vL2/ktGnTBse/GceiRYuyR40aNbygoGDEjBkzBtfVvfcNSSZMmHDuhhtuuOjyJ1EAAQAAWuzuu+8+vmLFiqyzZ8/azp07exUWFp5pWDZ37tyBsVjs7J49e954+OGHy2bOnDlUkubNmzewsLCwZu/evTsmT55cXV5e3l2Stm7d2nP16tXZJSUlu3bt2vVGSkqKW7x4cd/2HD8FEAAAoIXGjRt37tChQz2WLFmSXVRUdDJ+2WuvvZYxe/bsKkkqLi4+XV1dnXb8+PGUTZs2ZcyaNatKkqZPn34yMzPzXUlat25dxvbt23vFYrHhBQUFIzZs2JC5b9++Hu05/rY9bg4AAOCJSZMmVS9YsODa9evX7z5y5EirO5VzzqZOnVr1zDPPlLXl+KIwAwgAANAKc+bMOfbAAw8cvummm87FPz9u3LjTS5cu7StJa9euzcjKyqrLzs6uHz9+/Olly5b1laSVK1dmnjp1KlWSJk2adGrt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", + "image/png": "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", "text/plain": [ "
" ] @@ -1490,6 +1474,48 @@ "plotting.modes_over_time_group([df_u0001, df_u0005], SOURCE_IDS, timeunit=\"s\")" ] }, + { + "cell_type": "markdown", + "id": "e4ed39d7", + "metadata": {}, + "source": [ + "Apart from visualization of modes over time, we can also visualize the probability of occurrence of every mode over time. The plot can be generated using the `\"plot_probabilities\"` method of the \"ModeId\" feature class. As a first step, the raw mode results needs to be parsed into a python object representing the \"ModeId\" feature class. The method `\"plot_probabilities\"` makes use of the instance variable, `\"probabilities\"` which in turn is a matrix of probability of occurrence of each mode for over each timestamp. For a more focused plot, one can use the method's `\"selected_modes\"` parameter to only consider a subset of modes." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "3bee115a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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R16XoR4skQ7oSG9MZ1fQU4+PiJRkhT8RkbdqOd04jDpW0JPMBYfnAQ/Qlwt5jXtZyCC2lLeQHXfooYduPO64416eMGHCPp15vXqwRIokafOpRKREMiv8PTMt/FzWxVe7EZFkagYOo44l9Hojucpooool9OJQ6jrTk7VgwYIew4YN2++4446rra2t3b+hoWHY7bff3mf06NEjhw4duv/dd99dA7B69erqSZMm7V1XVzeqvr5+5EMPPdQbYNWqVdXjx48fMXz48P2mTp061N3f+NtXX311vwMOOGDfkSNHjjr55JOHbtmyff43fvz4V/fZZ5/XO17yQAmWtJsuGNsxWkFPRDpFK/yJSFfwR/qygp5swfI+vwVjBT25jb6d+fNLly7tdf75569etGjRvEWLFvW68cYbd21sbJx/2WWXLbvssssGApx33nmD6uvrmxYuXPjUpZdeuvzUU08dBnDBBRcMOuSQQzY+++yzTx577LHrVq5c2QPgscce63XLLbf0a2xsnD9//vynqqqq/Jprrtm1kzXQIiVY0i5JWz68FDSfSkQ6RSv8dc6yWfDIuerxEymVa+m/Xc9VriaquIb+nfnzgwcPfu2ggw56tbq6mrq6ulcnTJiwvqqqitGjRzctW7asJ8DDDz/c54wzzngRoKGhYcO6deu6rV27turBBx/sc/rpp78IcOKJJ77ct2/fZoA777yzz7x582rq6+v3HTly5Kj77ruv7+LFi3t2pnyt0RwsaRddMLZzNJ9KRDpMK/x1XCkvnCwiwWq6F3S7HD169HhjXF9VVRW9evVygOrqapqbm/P3mrXB3e2EE054cdq0acs78/r2Ug+WtIuGu4mIlJBW+OsYDasUKb0BbC7odp1w8MEHb5g+ffquALNnz+6zyy67bOnXr9/WcePGbZgxY8auADNnzuy7fv36aoApU6asnz179i7Lly/vBmEO18KFC3sUulxKsKRdNNxNREQqdhiehlWKlN6ZrKGGra1uU8NWzmJNsYpwxRVXrHj88cdr6urqRl144YWDZ8yY8RzA5ZdfvuL+++/fcfjw4fvdeuutuwwcOPB1gDFjxmy66KKLlk+cOLGurq5u1IQJE+qWLl26XQ/bt7/97bcNGDDgwNWrV/eor68fNXXq1KEdKZdlr6qRZGPHjvXGxsZyF0NERKRryh6GV11TecPwtLS9dDFm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RERERES6KiVYIiIiIiIiBaIES0REREREpECUYImIiIiIiBSIEiwREREREZECUYIlIiIiIiJSIEqwRERERERECkQJloiIiIiISIEowRIRERERESkQJVgiIiIiIiIFogRLRERERESkQJRgiYiIiIiIFIgSLBERERERkQJRgiUiIiIiIlIgSrBEREREREQKRAmWiIiIiIhIgSjBEhERERERKRAlWCIiIiIiIgWiBEtERERERKRAlGCJiIiIiIgUiBIsERERERGRAlGCJSIiIiIiUiBKsERERERERApECZaIiIiIFM+yWfDIueGnSAoowRIRERGR4lg2C+4/CZ6ZFn4qyZIUUIIlIiIiIsWxcg40N4Xfm5vCfZGEU4IlIiIiIsUxcDJU14Tfq2vCfZGE61buAoiIiIhIQg1pgPE3hZ6rgZPDfZGEU4IlIiIiIsUzpEGJlaRKRQ4RNLMpZrbAzJ41swta2e44M3MzG1vK8omIiIiIiORTcQmWmVUD04APAKOAk8xsVJ7t+gCfAx4qbQlFRERERETyq7gECzgIeNbdF7v768DNwDF5trsUuALYVMrCiYiIiIiItKQSE6zBwNKs+8viY28ws9HAHu7+59b+kJmdaWaNZta4Zs2awpdUREREREQkSyUmWK0ysyrgR8CX2trW3a9197HuPrZ///7FL5yIiIiIiKRaJSZYy4E9su4PiY9l9AH2B+4xsyXAOGCWFroQEREREZFyq8QE6xFghJkNM7MewInArMyT7v6yu+/m7rXuXgs8CDS4e2N5iisiIiIiIhJUXILl7luAc4G7gKeBme7+pJldYma6iIKIiIiIiFSsirzQsLv/BfhLzmPfaGHbw0pRJhERERERkbZUXA+WiIiIiIhIV6UES0REREREpECUYImIiIiIiBSIEiwREREREZECUYIlIiIiIiJSIEqwRERERERECkQJloiIiIiISIEowRIRERERESkQJVgiIiIiIiIFogRLRERERESkQJRgiYiIiIiIFIgSLBERERERkQJRgiUiIiIiIlIgSrBEREREREQKRAmWiIiIiIhIgSjBEhERERERKRAlWCIiIiIiIgWiBEtERERERKRAlGCJiIiIiIgUiBIsERERERGRAlGCJSIiIiIiUiBKsERERERERApECZaIiIiIiEiBKMESEREREREpECVYIiIiIlI5ls2CR84N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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "''" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mode_results_parsed = analysis_classes.parse_results(mode_output1, t_unit=\"s\")\n", + "mode_results_parsed.plot_probabilities()" + ] + }, { "cell_type": "markdown", "metadata": { @@ -1507,7 +1533,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 25, "metadata": { "pycharm": { "name": "#%%\n" @@ -1520,7 +1546,7 @@ "['u0001', 'u0002', 'u0003', 'u0004', 'u0005', 'u0006']" ] }, - "execution_count": 41, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -1546,7 +1572,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 26, "metadata": { "pycharm": { "name": "#%%\n" @@ -1556,10 +1582,10 @@ { "data": { "text/plain": [ - "{'request_id': '7117a1dbe2a1a5dc67ffa494552b0a18', 'request_status': 'queued'}" + "{'request_id': '2c14b13fca19fa900781e8207cf8d389', 'request_status': 'queued'}" ] }, - "execution_count": 42, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -1579,21 +1605,13 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 27, "metadata": { "pycharm": { "name": "#%%\n" } }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "BlackSheep Analysis: queued\n" - ] - } - ], + "outputs": [], "source": [ "REQUEST_ID_ALL = BS_ALL['request_id']\n", "status = session.get_analysis_status(REQUEST_ID_ALL)\n", @@ -1619,7 +1637,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": null, "metadata": { "pycharm": { "name": "#%%\n" @@ -1658,7 +1676,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": null, "metadata": { "pycharm": { "name": "#%%\n" @@ -1682,7 +1700,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": null, "metadata": { "pycharm": { "name": "#%%\n" From 03bbd824cb785ac5ac8ed1e8f442310680f7830a Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Wed, 2 Feb 2022 17:56:31 +0100 Subject: [PATCH 50/90] add req_docs to publish doc workflow (#138) * add req_docs to publish doc workflow * Remove tabspace that caused a malfunction in sphinx docs * m2r2 module used for documentation is moved to requirements_docs * Docs pipeline does not need modules from requirements_dev Co-authored-by: Vishnu Nadhan --- .github/workflows/docs.yml | 2 +- README.md | 2 +- requirements_dev.txt | 1 - requirements_docs.txt | 3 ++- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 8a30aa3d..9a371766 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -21,7 +21,7 @@ jobs: - name: "Install dependencies" run: | pip install -r requirements.txt - pip install -r requirements_dev.txt + pip install -r requirements_docs.txt wget https://github.com/jgm/pandoc/releases/download/2.11.4/pandoc-2.11.4-1-amd64.deb sudo dpkg -i pandoc-2.11.4-1-amd64.deb rm pandoc-2.11.4-1-amd64.deb diff --git a/README.md b/README.md index ac28e97f..a5a98f1e 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # MVG: MultiViz Analytics Engine Client Library - Package version +Package version PyPI - Python Version diff --git a/requirements_dev.txt b/requirements_dev.txt index 9c153111..995e4cf6 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -8,7 +8,6 @@ darglint pylint==2.8.3 pytest pytest-docker -m2r2 # for callback test server uvicorn==0.16.0 fastapi diff --git a/requirements_docs.txt b/requirements_docs.txt index bdbf291b..81f1a661 100644 --- a/requirements_docs.txt +++ b/requirements_docs.txt @@ -5,4 +5,5 @@ sphinx sphinx-rtd-theme nbsphinx sphinx-copybutton -sklearn \ No newline at end of file +m2r2 +sklearn From aa70009c50e861f9d4f7916572307c9bcc440988 Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Thu, 3 Feb 2022 15:41:43 +0100 Subject: [PATCH 51/90] bump mvg version (#139) --- mvg/mvg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index c402e3b9..b760c125 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -55,7 +55,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.11.3") + self.mvg_version = self.parse_version("v0.11.4") self.tested_api_version = self.parse_version("v0.3.0") # Get API version From 7689c0d825787dde76321593225b8aecb1620a08 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Wed, 9 Feb 2022 12:53:05 +0100 Subject: [PATCH 52/90] Using latest python environment installs the latest version of Pygments package (#141) --- .github/workflows/ci-checks.yml | 4 ++++ mvg/mvg.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-checks.yml b/.github/workflows/ci-checks.yml index 0ae7c788..c49e0d73 100644 --- a/.github/workflows/ci-checks.yml +++ b/.github/workflows/ci-checks.yml @@ -84,6 +84,10 @@ jobs: name: "Validate examples in documentation" steps: - uses: actions/checkout@v2 + - name: "Set up Python 3" + uses: actions/setup-python@v2 + with: + python-version: '3.x' - name: "Run all examples" env: TEST_TOKEN: ${{ secrets.TEST_TOKEN }} diff --git a/mvg/mvg.py b/mvg/mvg.py index b760c125..dbb9fa19 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -55,7 +55,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.11.4") + self.mvg_version = self.parse_version("v0.11.5") self.tested_api_version = self.parse_version("v0.3.0") # Get API version From ba1d8d7452846b1c0a447de816f2511795d43a88 Mon Sep 17 00:00:00 2001 From: Sergio Martin-del-Campo <61144290+SergioMDCB@users.noreply.github.com> Date: Mon, 14 Feb 2022 21:24:26 +0100 Subject: [PATCH 53/90] Label prop doc (#143) * adding label propgation figure and updatinf kpidemo figure * Label propagation feature description * Update of labelPropagation documentation * Final version of the label propagation notebook documentation * Adding md file and figure for label propagation documentation * add req_docs to publish doc workflow (#138) * add req_docs to publish doc workflow * Remove tabspace that caused a malfunction in sphinx docs * m2r2 module used for documentation is moved to requirements_docs * Docs pipeline does not need modules from requirements_dev Co-authored-by: Vishnu Nadhan * bump mvg version (#139) * Update mvg version * adding label propgation figure and updatinf kpidemo figure * Label propagation feature description * Update of labelPropagation documentation * Final version of the label propagation notebook documentation * Adding md file and figure for label propagation documentation * Update mvg version * Fixing black typo * Fixing the plotting error on analysis_classes for labelpropagation * Fixing lynting issues * Fixing lynting issue * Update the version of mvg * Adding feature description into index file * fix qutotation around feature name * Updating label_propagation feature description to fix typos and update version * Updating text in notebook to avoid misunderstandings Co-authored-by: Mohsen Nosratinia Co-authored-by: Vishnu Nadhan --- docs/source/content/examples/7-labeling.ipynb | 679 ++++++++++++++---- docs/source/content/features/kpidemo.md | 2 +- .../content/features/label_propagation.md | 74 ++ docs/source/content/img/kpidemo_sales.png | Bin 0 -> 30395 bytes .../content/img/label-propagation_sales.png | Bin 0 -> 31712 bytes .../content/img/labelpropagation_plots.png | Bin 0 -> 47076 bytes docs/source/index.rst | 1 + mvg/features/label_propagation.py | 4 +- mvg/mvg.py | 2 +- 9 files changed, 627 insertions(+), 135 deletions(-) create mode 100644 docs/source/content/features/label_propagation.md create mode 100644 docs/source/content/img/kpidemo_sales.png create mode 100644 docs/source/content/img/label-propagation_sales.png create mode 100644 docs/source/content/img/labelpropagation_plots.png diff --git a/docs/source/content/examples/7-labeling.ipynb b/docs/source/content/examples/7-labeling.ipynb index a7e3190a..cc259308 100644 --- a/docs/source/content/examples/7-labeling.ipynb +++ b/docs/source/content/examples/7-labeling.ipynb @@ -4,15 +4,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Labeling Measurements\n", + "# 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. There are multiple reasons why you would want to label measurements and some of the benefits include\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", - "This example will go through how what a label is in MVG and how the labeling API functions. \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", @@ -20,7 +23,8 @@ "\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." + "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." ] }, { @@ -33,13 +37,19 @@ { "cell_type": "code", "execution_count": 1, - "metadata": {}, "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" - ] + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } }, { "cell_type": "markdown", @@ -59,11 +69,7 @@ "outputs": [ { "data": { - "text/plain": [ - "{'api_version': '0.2.7',\n", - " 'mvg_highest_tested_version': '0.2.7',\n", - " 'mvg_version': '0.9.7'}" - ] + "text/plain": "{'api_version': '0.3.0',\n 'mvg_highest_tested_version': '0.3.0',\n 'mvg_version': '0.11.5'}" }, "execution_count": 2, "metadata": {}, @@ -80,38 +86,24 @@ }, { "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. Each measurement can only have one label. The label itself has three components\n", - "\n", - "1. A label identification string\n", - "2. A severity level number\n", - "3. And 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.\n", + "### 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." - ] + ], + "metadata": { + "collapsed": false + } }, { "cell_type": "code", - "execution_count": 7, - "metadata": {}, + "execution_count": 3, "outputs": [ { "data": { - "text/plain": [ - "{'source_id': 'u0001',\n", - " 'meta': {'assetId': 'assetJ',\n", - " 'measPoint': 'mloc01',\n", - " 'location': 'cancun',\n", - " 'timezone': 'Europe/Stockholm'},\n", - " 'properties': {'data_class': 'waveform', 'channels': ['acc']}}" - ] + "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": 7, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -119,61 +111,212 @@ "source": [ "SOURCE_ID = \"u0001\"\n", "session.get_source(SOURCE_ID)" - ] + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } }, { "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." - ] + "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." + ], + "metadata": { + "collapsed": false + } }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, + "execution_count": 4, + "outputs": [ + { + "data": { + "text/plain": " timestamps labels uncertain mode_probability datetime\n0 1570273260 0 False 0.966994 2019-10-05 13:01:00+02:00\n1 1570359660 0 False 0.931219 2019-10-06 13:01:00+02:00\n2 1570446060 0 False 0.999575 2019-10-07 13:01:00+02:00\n3 1570532460 0 False 0.979806 2019-10-08 13:01:00+02:00\n4 1570618860 0 False 0.885940 2019-10-09 13:01:00+02:00", + "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
timestampslabelsuncertainmode_probabilitydatetime
015702732600False0.9669942019-10-05 13:01:00+02:00
115703596600False0.9312192019-10-06 13:01:00+02:00
215704460600False0.9995752019-10-07 13:01:00+02:00
315705324600False0.9798062019-10-08 13:01:00+02:00
415706188600False0.8859402019-10-09 13:01:00+02:00
\n
" + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ModeId_request_id = \"5649faa234642e7207fd9800481bcb6e\"\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()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 5, "outputs": [ { "data": { - "text/plain": [ - "[{'timestamp': 1570186860, 'meta': {}, 'duration': 2.8672073400507907},\n", - " {'timestamp': 1570273260, 'meta': {}, 'duration': 2.8672073400507907},\n", - " {'timestamp': 1570359660, 'meta': {}, 'duration': 2.8672073400507907}]" - ] + "text/plain": "
", + "image/png": "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ko9//ONHfvjDH17z7LPPLho4cGDDl770paFtXYaJsiRJkjrUtGnTttxxxx2HA9x2222DTz/99I1NZWvWrOkxffr0cbW1tXX19fXjH3nkkb4Aq1ev7jF16tTXT5gwoW7WrFljUtrdGXz99dcPPu644yaMHz++btasWWMaGvbsZG5sbORXv/pV//e///2bAM4///wN99xzz+FtjdtEWZIkSR3q3HPP3Th37txBO3fujMWLF/ebMmXKjqaySy65ZFR9ff3OZcuWPXHVVVetnD179tEAl1566agpU6ZsX7x48RMzZ87cvGrVqt4ACxYs6HPnnXcOnj9//pIlS5Y8UVNTk2644YYhpetbs2ZNz/79+7/Sq1cvAMaOHfvymjVrerc1bhNlSZIkdaiTTz75hRUrVhxy4403Dp4+ffqW0rJHH320/wUXXLABYObMmds2b97cc8OGDT0efvjh/ueff/4GgLPPPnvLgAEDXgG49957+y9atKhffX39hPHjx9c9+OCDA5YvX35I6TJLe5+bRESbr/7hyXySJEnqcDNmzNh85ZVXvub+++9funbt2j/koPtKamtq9u7TTSnFGWecseG6665b2dy6jjjiiIZt27b12LVrF7169eKZZ57pPXz48DaPi7ZHWZIkSR3uoosuWn/xxRc/f9JJJ71QOn3y5Mnb5syZMwRg3rx5/QcNGtQwePDgxsmTJ2+76aabhgDcfvvtA7Zu3doDYMaMGVvnzZs3aOXKlT0hj3FetmzZHsMqampqmpY7COCmm24a8s53vnNzW2M2UZYkSeomhgyhVZdW64jljRs3btcVV1yxtnz6Nddc8/yCBQv61dbW1l122WWjb7755qcBrr766ucfeuihw+rq6ibcd999A0eOHPkywMSJE1+8/PLLV06bNq22tra27tRTT6197rnnepUv93Of+9yKr3zlK0ccddRRx27atKnnRz/60fVt3b6o1N3dWpMmTUrz58/f7/klSZK6ooh4LKU0qbPjWLhw4TP19fVtThC7k4ULFw6tr68fW6nMHmVJkiSpAhNlSZIkqQITZUmSJKkCE2VJkiSpggNKlHd1+F26JUmSpM5xQDccefxxiGivUKSD1/5fO0bt6jsekCRJ7cehF5IkSd3FUOoJJrbbYyj1La0yIia+5z3vObrp9a5duxg0aFD9W9/61te1JfTRo0cft2rVqlZ38n7mM58ZdtRRRx0bERPbMl8pE2VJkqTuYsOBjSbYn+X17du3cenSpX23b98eAHfdddeAESNGdPgA3re85S3bf/KTnywbNWrUy/u7DBNlSZIkdahp06ZtueOOOw4HuO222waffvrpG5vK1qxZ02P69Onjamtr6+rr68c/8sgjfQFWr17dY+rUqa+fMGFC3axZs8aU3iTv+uuvH3zcccdNGD9+fN2sWbPGNDTsfYPAqVOnvnDMMcfsd5IMJsqSJEnqYOeee+7GuXPnDtq5c2csXry435QpU3Y0lV1yySWj6uvrdy5btuyJq666auXs2bOPBrj00ktHTZkyZfvixYufmDlz5uZVq1b1BliwYEGfO++8c/D8+fOXLFmy5Imampp0ww03DOmIuE2UJUmS1KFOPvnkF1asWHHIjTfeOHj69OlbSsseffTR/hdccMEGgJkzZ27bvHlzzw0bNvR4+OGH+59//vkbAM4+++wtAwYMeAXg3nvv7b9o0aJ+9fX1E8aPH1/34IMPDli+fPkhHRF3+45TkSRJkiqYMWPG5iuvvPI1999//9K1a9f+IQctHVLRJCISQE3N3n26KaU444wzNlx33XUrOzJesEdZkiRJr4KLLrpo/cUXX/z8SSed9ELp9MmTJ2+bM2fOEIB58+b1HzRoUMPgwYMbJ0+evO2mm24aAnD77bcP2Lp1aw+AGTNmbJ03b96glStX9oQ8xnnZsmW9OyJmE2VJkqTuYgh7n/X2Ki1v3Lhxu6644oq15dOvueaa5xcsWNCvtra27rLLLht98803Pw1w9dVXP//QQw8dVldXN+G+++4bOHLkyJcBJk6c+OLll1++ctq0abW1tbV1p556au1zzz3Xq3y5n/70p4ePGDHi+DVr1vSur6+vO+uss8a0dfOiUnd3q2eOSQnm7/f8UlfhDUeqhDcckVQl4hweSylN6uw4Fi5c+Ex9ff36zo6jmi1cuHBofX392Epl9ihLkiRJFZgoS5IkSRWYKEuSJEkVmChLkiRJFZgoS5IkSRWYKEuSJEkVeGc+SZKk7uLOofW8vKH98r/eQxr4y/UL9/WWiJj47ne/e+Pdd9/9NMCuXbsYPnx4/QknnLDjgQceeLK1qxo9evRx8+fPXzxy5MhWXbt55syZRz/++OOH9urVK51wwgk7brnllmcPOeSQNl3R1R5lSZKk7qI9k+RWLq9v376NS5cu7bt9+/YAuOuuuwaMGDFiV7vGUcE555yzcfny5YuWLl362xdffDG++MUvDm3rMkyUJUmS1KGmTZu25Y477jgc4Lbbbht8+umnb2wqW7NmTY/p06ePq62trauvrx//yCOP9AVYvXp1j6lTp75+woQJdbNmzRpTepO866+/fvBxxx03Yfz48XWzZs0a09CwdyfzWWedtaWmpoaamhomTZq0Y8WKFW2+zbWJsiRJkjrUueeeu3Hu3LmDdu7cGYsXL+43ZcqUHU1ll1xyyaj6+vqdy5Yte+Kqq65aOXv27KMBLr300lFTpkzZvnjx4idmzpy5edWqVb0BFixY0OfOO+8cPH/+/CVLlix5oqamJt1www1Dmlv3Sy+9FHPnzh1y2mmnbWlr3CbKkiRJ6lAnn3zyCytWrDjkxhtvHDx9+vQ9EtZHH320/wUXXLABYObMmds2b97cc8OGDT0efvjh/ueff/4GgLPPPnvLgAEDXgG49957+y9atKhffX39hPHjx9c9+OCDA5YvX35Ic+uePXv2UZMnT94+Y8aM7W2N25P5JEmS1OFmzJix+corr3zN/fffv3Tt2rV/yEFLh1Q0iYgEUFOzd59uSinOOOOMDdddd93KltZ58cUXj1y/fn3P++6776n9idkeZUmSJHW4iy66aP3FF1/8/EknnfRC6fTJkydvmzNnzhCAefPm9R80aFDD4MGDGydPnrztpptuGgJw++23D9i6dWsPgBkzZmydN2/eoJUrV/aEPMZ52bJle40//vznPz/05z//+cC77757eY8ePfYrZnuUJUmSuoveQxra/fJwrTRu3LhdV1xxxdry6ddcc83zs2bNGltbW1vXt2/fxptvvvlpgKuvvvr5008//bV1dXUTpkyZsn3kyJEvA0ycOPHFyy+/fOW0adNqGxsb6dWrV/ryl7/8+9ra2pdLl3vJJZeMGTly5EuTJk2aAPDOd75z07XXXruqLZsXlbq7Wz1zTEowf7/nl7qK/W9Falffic6OQJIAiHN4LKU0qbPjWLhw4TP19fXrOzuOarZw4cKh9fX1YyuVOfRCkiRJqsBEWZIkSarARFmSJKnramxsbHRcWjOKfdPYXLmJsiRJUte1aN26dQNNlvfW2NgY69atGwgsau49XvVCkiSpi2poaLhw9erV31i9evWx2EFarhFY1NDQ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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "text/plain": "''" }, - "execution_count": 8, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "measurements = session.list_measurements(SOURCE_ID)\n", - "measurements[:3]" + "result.plot()\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\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. Each measurement can only have one label. The label itself has three components\n", + "\n", + "1. A label identification string\n", + "2. A severity level number\n", + "3. And 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 few measurements, so we will add some labels to the afflicted measurements. To do so we use the `MVG.create_label()` method." + "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": 9, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ - "for measurement in measurements[:3]:\n", - " session.create_label(\n", - " sid=SOURCE_ID,\n", - " timestamp=measurement[\"timestamp\"],\n", - " label=\"bearing_failure\",\n", - " severity=3,\n", - " notes=\"Imaginary bearing failure\"\n", - " )" + "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", + "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." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 7, + "outputs": [ + { + "data": { + "text/plain": " timestamps labels uncertain mode_probability datetime\n2 1570446060 0 False 0.999575 2019-10-07 13:01:00+02:00\n7 1570878060 0 False 0.996115 2019-10-12 13:01:00+02:00\n8 1570964460 0 False 0.980702 2019-10-13 13:01:00+02:00\n17 1571742060 1 False 0.996703 2019-10-22 13:01:00+02:00\n22 1572177660 1 False 0.996604 2019-10-27 13:01:00+01:00\n23 1572264060 1 False 0.996323 2019-10-28 13:01:00+01:00\n32 1573041660 2 False 0.999899 2019-11-06 13:01:00+01:00\n36 1573387260 2 False 0.999897 2019-11-10 13:01:00+01:00\n39 1573646460 2 False 0.999187 2019-11-13 13:01:00+01:00", + "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
timestampslabelsuncertainmode_probabilitydatetime
215704460600False0.9995752019-10-07 13:01:00+02:00
715708780600False0.9961152019-10-12 13:01:00+02:00
815709644600False0.9807022019-10-13 13:01:00+02:00
1715717420601False0.9967032019-10-22 13:01:00+02:00
2215721776601False0.9966042019-10-27 13:01:00+01:00
2315722640601False0.9963232019-10-28 13:01:00+01:00
3215730416602False0.9998992019-11-06 13:01:00+01:00
3615733872602False0.9998972019-11-10 13:01:00+01:00
3915736464602False0.9991872019-11-13 13:01:00+01:00
\n
" + }, + "execution_count": 7, + "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" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "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\"." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 8, + "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" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, { "cell_type": "markdown", "metadata": {}, @@ -185,30 +328,14 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { - "text/plain": [ - "[{'timestamp': 1570186860,\n", - " 'label': 'bearing_failure',\n", - " 'severity': 3,\n", - " 'notes': 'Imaginary bearing failure',\n", - " 'label_timestamp': '2021-11-11 15:56:50'},\n", - " {'timestamp': 1570273260,\n", - " 'label': 'bearing_failure',\n", - " 'severity': 3,\n", - " 'notes': 'Imaginary bearing failure',\n", - " 'label_timestamp': '2021-11-11 15:56:50'},\n", - " {'timestamp': 1570359660,\n", - " 'label': 'bearing_failure',\n", - " 'severity': 3,\n", - " 'notes': 'Imaginary bearing failure',\n", - " 'label_timestamp': '2021-11-11 15:56:50'}]" - ] + "text/plain": "[{'timestamp': 1570273260,\n 'label': 'bearing_failure',\n 'severity': 3,\n 'notes': 'Imaginary bearing failure',\n 'label_timestamp': '2022-02-09 14:08:51'},\n {'timestamp': 1570446060,\n 'label': 'Healthy',\n 'severity': 1,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1570878060,\n 'label': 'Healthy',\n 'severity': 1,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1570964460,\n 'label': 'Healthy',\n 'severity': 1,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1571742060,\n 'label': 'Transition',\n 'severity': 2,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1572177660,\n 'label': 'Transition',\n 'severity': 2,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1572264060,\n 'label': 'Transition',\n 'severity': 2,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1573041660,\n 'label': 'Faulty',\n 'severity': 3,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:07'},\n {'timestamp': 1573387260,\n 'label': 'Faulty',\n 'severity': 3,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:07'},\n {'timestamp': 1573646460,\n 'label': 'Faulty',\n 'severity': 3,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:07'}]" }, - "execution_count": 10, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -221,30 +348,25 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As you can see the measurements that we just added labels too show up. To inspect the label of a specific measurement we use `MVG.get_label()`" + "As you can see, the measurements that we just added labels show up. To inspect the label of a specific measurement we use `MVG.get_label()`" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { - "text/plain": [ - "{'label': 'bearing_failure',\n", - " 'severity': 3,\n", - " 'notes': 'Imaginary bearing failure',\n", - " 'label_timestamp': '2021-11-11 15:56:50'}" - ] + "text/plain": "{'label': 'bearing_failure',\n 'severity': 3,\n 'notes': 'Imaginary bearing failure',\n 'label_timestamp': '2022-02-09 14:08:51'}" }, - "execution_count": 11, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "session.get_label(SOURCE_ID, measurements[0][\"timestamp\"])" + "session.get_label(SOURCE_ID, first_measurement)" ] }, { @@ -253,48 +375,33 @@ "source": [ "## Updating labels\n", "\n", - "Maybe we realized that the problem did not actually occur until the third timestamp and we want to change the labels for the first two. Then we use the `session.update_label()` method." + "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, + "execution_count": 11, "metadata": {}, "outputs": [ { "data": { - "text/plain": [ - "[{'timestamp': 1570186860,\n", - " 'label': 'OK',\n", - " 'severity': 0,\n", - " 'notes': 'This was an OK measurement',\n", - " 'label_timestamp': '2021-11-11 15:56:50'},\n", - " {'timestamp': 1570273260,\n", - " 'label': 'OK',\n", - " 'severity': 0,\n", - " 'notes': 'This was an OK measurement',\n", - " 'label_timestamp': '2021-11-11 15:56:50'},\n", - " {'timestamp': 1570359660,\n", - " 'label': 'bearing_failure',\n", - " 'severity': 3,\n", - " 'notes': 'Imaginary bearing failure',\n", - " 'label_timestamp': '2021-11-11 15:56:50'}]" - ] + "text/plain": "[{'timestamp': 1570273260,\n 'label': 'healthy',\n 'severity': 0,\n 'notes': 'This was an OK measurement',\n 'label_timestamp': '2022-02-09 14:08:51'},\n {'timestamp': 1570446060,\n 'label': 'Healthy',\n 'severity': 1,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1570878060,\n 'label': 'Healthy',\n 'severity': 1,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1570964460,\n 'label': 'Healthy',\n 'severity': 1,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1571742060,\n 'label': 'Transition',\n 'severity': 2,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1572177660,\n 'label': 'Transition',\n 'severity': 2,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1572264060,\n 'label': 'Transition',\n 'severity': 2,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1573041660,\n 'label': 'Faulty',\n 'severity': 3,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:07'},\n {'timestamp': 1573387260,\n 'label': 'Faulty',\n 'severity': 3,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:07'},\n {'timestamp': 1573646460,\n 'label': 'Faulty',\n 'severity': 3,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:07'}]" }, - "execution_count": 12, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "for measurement in measurements[:2]:\n", - " session.update_label(\n", - " sid=SOURCE_ID,\n", - " timestamp=measurement[\"timestamp\"],\n", - " label=\"OK\",\n", - " severity=0,\n", - " notes=\"This was an OK measurement\"\n", - " )\n", + "\n", + "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", @@ -307,30 +414,30 @@ "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. The `plotting` module of `mvg` contains the function `plot_labels_over_time` that does just that. The plot is very similar to that of the ModeId plots, so it is easy to compare results. We can add the `include_unlabeled=True` keyword to plot the unlabeled measurements as well." + "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, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { - "text/plain": [ - "[]" - ] + "text/plain": "[]" }, - "execution_count": 13, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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Z61398zq1asX5Mdefvnlq2655ZYVHofgyZMnN+bDZPuA/KlPfeq9tra2TCaTeW3o0KGt7p554IEH3j7ppJMa29raMsuXL8/269evraOAnPfkt2/bti3T0NAw390zq1atyg4dOrQ1l8uVFZAl+c9//vO33T0zb96816ZMmdLY2to6z90z55133tp77713afteqj4gh56c+PHjx48fP/4wfgJyFCIHDx68Nf/9H/7wh8UTJ05s6tu3b662tra5tra2efTo0c0nnHDCRnfPPPXUU4uOPvroTaNHj26uqanZOn369PdD8D333LM072kfkH/yk5/U5bftu+++OXfPfPnLX15z9913vz/mE5/4xIauBuTW1tZ5559//trRo0c319bWNu+99947li9fnvUyAnLv3r09H+xvvfXW5QcddNC2/HsfPnx46xVXXLGqfS9VH5BDT078+PHjx48ffxg/ATkKkYcccsjfBeSpU6duGD9+/OZi+9fU1Gx9+eWXX/c4dJ5xxhnrvV14df/HgFy4LR9gKwnIM2fOXHraaae9lz/TW1NTs3XRokWvFvoLA/J9991Xd955570fkCdOnNhUuMQi//ott9yy4utf//rqzj63qg/IoScnfvz48ePHjz+MP3UBOcBt3vJLLJ577rk33D1zzjnnrLvuuuveHTp0aGv+tdbW1nmvvPLKa+6eGTBgwPZ3330329raOm/ixIkbKwnIv/zlL9+ePHlyY1tbW2bFihXZ/v37d3mJxU033bTiggsuWOPumdmzZy+W5DsLyM8888yiCRMmbG5ra8u89dZbC/v27ZsrFpAzmcxrw4YNa3333Xez7p6pr69fsHjx4lfb91L1ATn05MSPHz9+/Pjxh/GnLiAHqPxFeqeffnrDyJEjW/IX3r300kuvH3PMMZvGjBnTPGrUqJY77rhjmbtnbrvttuU1NTVbjzrqqC0XXHDBmkoCcltbW2b69OnvX6Q3ceLEpieeeOLNjnot9KxatSo7fvz4zaNHj24+88wz148cObJlZwE5l8tlpk2b1jBixIiWqVOnbjj22GM3FQvI7tGa6/zSkrFjx255/vnn32jfS9UH5NCTEz9+/Pjx48cfxk9ADl+NjY3z3aOL/w499NDW/DritFfVB+TQkxM/fvz48ePHH8ZPQA5fxx577Kba2trmww47rGXmzJlLQ/fT1ar6gOxe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", - "text/plain": [ - "
" - ] + "text/plain": "
", + "image/png": "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\n" }, "metadata": { "needs_background": "light" @@ -347,7 +454,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As you can see we only labeled a small subset of the data. 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. " + "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." ] }, { @@ -356,28 +464,335 @@ "source": [ "## Deleting labels\n", "\n", - "To delete labels we use the `MVG.delete_label()` method. Let's use that to remove our example labels to get back to a clean slate." + "Now, we check the total number of existing labels in our source." ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Removed 3 labels\n" + "Currently, there are 10 labels\n" ] } ], "source": [ "labels = session.list_labels(SOURCE_ID)\n", - "for label in labels:\n", - " session.delete_label(SOURCE_ID, label[\"timestamp\"])\n", - "print(f\"Removed {len(labels)} labels\")" + "print(f\"Currently, there are {len(labels)} labels\")" ] + }, + { + "cell_type": "markdown", + "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." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 14, + "outputs": [], + "source": [ + "session.delete_label(SOURCE_ID, first_measurement)" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 15, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Currently, there are 9 labels\n" + ] + } + ], + "source": [ + "labels = session.list_labels(SOURCE_ID)\n", + "print(f\"Currently, there are {len(labels)} labels\")" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "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" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 16, + "outputs": [ + { + "data": { + "text/plain": "{'request_id': 'a36badb8f2788c247ae193acb3eaeb3e', 'request_status': 'queued'}" + }, + "execution_count": 16, + "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" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "We check the status of the analysis to ensure the analysis is finished." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 17, + "outputs": [ + { + "data": { + "text/plain": "'successful'" + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "out_status = session.get_analysis_status(labelProp_request_id)\n", + "out_status" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "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." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 18, + "outputs": [ + { + "data": { + "text/plain": "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "labelprop_output = session.get_analysis_results(request_id=labelProp_request_id)\n", + "labelprop_output.keys()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "The output is a dictionary that contains seven key elements.\n", + "These elements are:\n", + "- `\"status\"` indicates if the analysis was successful.\n", + "- `\"request_id\"` is the identifier of the requested analysis.\n", + "- `\"feature\"` is the name of the request feature.\n", + "- `\"results\"` includes the numeric results.\n", + "- `\"inputs\"` includes the input information for the request analysis.\n", + "- `\"error_info\"` includes the error information in case the analysis fails and it is empty if the analysis is successful.\n", + "- `\"debug_info\"` includes debugging (log) information related to the failed analysis." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "markdown", + "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." + ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 19, + "outputs": [], + "source": [ + "labelprop_results = parse_results(labelprop_output, \"Europe/Stockholm\", \"s\")\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "Once we had parsed the results, we can export them to a dataframe for ease of manipulation" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 20, + "outputs": [ + { + "data": { + "text/plain": " label severity notes label_timestamp \\\n0 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n1 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n2 Healthy 1 This is a demo. 2022-02-09 14:09:06 \n3 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n4 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n5 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n6 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n7 Healthy 1 This is a demo. 2022-02-09 14:09:06 \n8 Healthy 1 This is a demo. 2022-02-09 14:09:06 \n9 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n10 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n11 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n12 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n13 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n14 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n15 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n16 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n17 Transition 2 This is a demo. 2022-02-09 14:09:06 \n18 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n19 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n20 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n21 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n22 Transition 2 This is a demo. 2022-02-09 14:09:06 \n23 Transition 2 This is a demo. 2022-02-09 14:09:06 \n24 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n25 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n26 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n27 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n28 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n29 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n30 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n31 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n32 Faulty 3 This is a demo. 2022-02-09 14:09:07 \n33 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n34 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n35 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n36 Faulty 3 This is a demo. 2022-02-09 14:09:07 \n37 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n38 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n39 Faulty 3 This is a demo. 2022-02-09 14:09:07 \n40 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n41 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n42 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n43 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n44 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n45 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n46 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n47 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n48 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n\n timestamp datetime \n0 1570273260 2019-10-05 13:01:00+02:00 \n1 1570359660 2019-10-06 13:01:00+02:00 \n2 1570446060 2019-10-07 13:01:00+02:00 \n3 1570532460 2019-10-08 13:01:00+02:00 \n4 1570618860 2019-10-09 13:01:00+02:00 \n5 1570705260 2019-10-10 13:01:00+02:00 \n6 1570791660 2019-10-11 13:01:00+02:00 \n7 1570878060 2019-10-12 13:01:00+02:00 \n8 1570964460 2019-10-13 13:01:00+02:00 \n9 1571050860 2019-10-14 13:01:00+02:00 \n10 1571137260 2019-10-15 13:01:00+02:00 \n11 1571223660 2019-10-16 13:01:00+02:00 \n12 1571310060 2019-10-17 13:01:00+02:00 \n13 1571396460 2019-10-18 13:01:00+02:00 \n14 1571482860 2019-10-19 13:01:00+02:00 \n15 1571569260 2019-10-20 13:01:00+02:00 \n16 1571655660 2019-10-21 13:01:00+02:00 \n17 1571742060 2019-10-22 13:01:00+02:00 \n18 1571828460 2019-10-23 13:01:00+02:00 \n19 1571914860 2019-10-24 13:01:00+02:00 \n20 1572001260 2019-10-25 13:01:00+02:00 \n21 1572087660 2019-10-26 13:01:00+02:00 \n22 1572177660 2019-10-27 13:01:00+01:00 \n23 1572264060 2019-10-28 13:01:00+01:00 \n24 1572350460 2019-10-29 13:01:00+01:00 \n25 1572436860 2019-10-30 13:01:00+01:00 \n26 1572523260 2019-10-31 13:01:00+01:00 \n27 1572609660 2019-11-01 13:01:00+01:00 \n28 1572696060 2019-11-02 13:01:00+01:00 \n29 1572782460 2019-11-03 13:01:00+01:00 \n30 1572868860 2019-11-04 13:01:00+01:00 \n31 1572955260 2019-11-05 13:01:00+01:00 \n32 1573041660 2019-11-06 13:01:00+01:00 \n33 1573128060 2019-11-07 13:01:00+01:00 \n34 1573214460 2019-11-08 13:01:00+01:00 \n35 1573300860 2019-11-09 13:01:00+01:00 \n36 1573387260 2019-11-10 13:01:00+01:00 \n37 1573473660 2019-11-11 13:01:00+01:00 \n38 1573560060 2019-11-12 13:01:00+01:00 \n39 1573646460 2019-11-13 13:01:00+01:00 \n40 1573732860 2019-11-14 13:01:00+01:00 \n41 1573819260 2019-11-15 13:01:00+01:00 \n42 1573905660 2019-11-16 13:01:00+01:00 \n43 1573992060 2019-11-17 13:01:00+01:00 \n44 1574078460 2019-11-18 13:01:00+01:00 \n45 1574164860 2019-11-19 13:01:00+01:00 \n46 1574251260 2019-11-20 13:01:00+01:00 \n47 1574337660 2019-11-21 13:01:00+01:00 \n48 1574424060 2019-11-22 13:01:00+01:00 ", + "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
labelseveritynoteslabel_timestamptimestampdatetime
0Healthy-1Added by label propagation2022-02-09 14:09:5215702732602019-10-05 13:01:00+02:00
1Healthy-1Added by label propagation2022-02-09 14:09:5215703596602019-10-06 13:01:00+02:00
2Healthy1This is a demo.2022-02-09 14:09:0615704460602019-10-07 13:01:00+02:00
3Healthy-1Added by label propagation2022-02-09 14:09:5215705324602019-10-08 13:01:00+02:00
4Healthy-1Added by label propagation2022-02-09 14:09:5215706188602019-10-09 13:01:00+02:00
5Healthy-1Added by label propagation2022-02-09 14:09:5215707052602019-10-10 13:01:00+02:00
6Healthy-1Added by label propagation2022-02-09 14:09:5215707916602019-10-11 13:01:00+02:00
7Healthy1This is a demo.2022-02-09 14:09:0615708780602019-10-12 13:01:00+02:00
8Healthy1This is a demo.2022-02-09 14:09:0615709644602019-10-13 13:01:00+02:00
9Healthy-1Added by label propagation2022-02-09 14:09:5215710508602019-10-14 13:01:00+02:00
10Healthy-1Added by label propagation2022-02-09 14:09:5215711372602019-10-15 13:01:00+02:00
11Healthy-1Added by label propagation2022-02-09 14:09:5215712236602019-10-16 13:01:00+02:00
12Healthy-1Added by label propagation2022-02-09 14:09:5215713100602019-10-17 13:01:00+02:00
13Healthy-1Added by label propagation2022-02-09 14:09:5215713964602019-10-18 13:01:00+02:00
14Healthy-1Added by label propagation2022-02-09 14:09:5215714828602019-10-19 13:01:00+02:00
15Healthy-1Added by label propagation2022-02-09 14:09:5215715692602019-10-20 13:01:00+02:00
16Transition-1Added by label propagation2022-02-09 14:09:5215716556602019-10-21 13:01:00+02:00
17Transition2This is a demo.2022-02-09 14:09:0615717420602019-10-22 13:01:00+02:00
18Transition-1Added by label propagation2022-02-09 14:09:5215718284602019-10-23 13:01:00+02:00
19Transition-1Added by label propagation2022-02-09 14:09:5215719148602019-10-24 13:01:00+02:00
20Transition-1Added by label propagation2022-02-09 14:09:5215720012602019-10-25 13:01:00+02:00
21Transition-1Added by label propagation2022-02-09 14:09:5215720876602019-10-26 13:01:00+02:00
22Transition2This is a demo.2022-02-09 14:09:0615721776602019-10-27 13:01:00+01:00
23Transition2This is a demo.2022-02-09 14:09:0615722640602019-10-28 13:01:00+01:00
24Faulty-1Added by label propagation2022-02-09 14:09:5215723504602019-10-29 13:01:00+01:00
25Faulty-1Added by label propagation2022-02-09 14:09:5215724368602019-10-30 13:01:00+01:00
26Faulty-1Added by label propagation2022-02-09 14:09:5215725232602019-10-31 13:01:00+01:00
27Faulty-1Added by label propagation2022-02-09 14:09:5215726096602019-11-01 13:01:00+01:00
28Faulty-1Added by label propagation2022-02-09 14:09:5215726960602019-11-02 13:01:00+01:00
29Faulty-1Added by label propagation2022-02-09 14:09:5215727824602019-11-03 13:01:00+01:00
30Faulty-1Added by label propagation2022-02-09 14:09:5215728688602019-11-04 13:01:00+01:00
31Faulty-1Added by label propagation2022-02-09 14:09:5215729552602019-11-05 13:01:00+01:00
32Faulty3This is a demo.2022-02-09 14:09:0715730416602019-11-06 13:01:00+01:00
33Faulty-1Added by label propagation2022-02-09 14:09:5215731280602019-11-07 13:01:00+01:00
34Faulty-1Added by label propagation2022-02-09 14:09:5215732144602019-11-08 13:01:00+01:00
35Faulty-1Added by label propagation2022-02-09 14:09:5215733008602019-11-09 13:01:00+01:00
36Faulty3This is a demo.2022-02-09 14:09:0715733872602019-11-10 13:01:00+01:00
37Faulty-1Added by label propagation2022-02-09 14:09:5215734736602019-11-11 13:01:00+01:00
38Faulty-1Added by label propagation2022-02-09 14:09:5215735600602019-11-12 13:01:00+01:00
39Faulty3This is a demo.2022-02-09 14:09:0715736464602019-11-13 13:01:00+01:00
40Faulty-1Added by label propagation2022-02-09 14:09:5215737328602019-11-14 13:01:00+01:00
41Faulty-1Added by label propagation2022-02-09 14:09:5215738192602019-11-15 13:01:00+01:00
42Faulty-1Added by label propagation2022-02-09 14:09:5215739056602019-11-16 13:01:00+01:00
43Faulty-1Added by label propagation2022-02-09 14:09:5215739920602019-11-17 13:01:00+01:00
44Faulty-1Added by label propagation2022-02-09 14:09:5215740784602019-11-18 13:01:00+01:00
45Faulty-1Added by label propagation2022-02-09 14:09:5215741648602019-11-19 13:01:00+01:00
46Faulty-1Added by label propagation2022-02-09 14:09:5215742512602019-11-20 13:01:00+01:00
47Faulty-1Added by label propagation2022-02-09 14:09:5215743376602019-11-21 13:01:00+01:00
48Faulty-1Added by label propagation2022-02-09 14:09:5215744240602019-11-22 13:01:00+01:00
\n
" + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "labelprop_results.to_df()\n" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "source": [ + "We can also display the results and visualize the labels given to the different measurements." + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } + }, + { + "cell_type": "code", + "execution_count": 21, + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAskAAADQCAYAAAD1c/yXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3deXhV5bn38d+dgRAICDIEEQQKhGQHjYgFD3WqrcWWSkFardZyREV77Gn1pa329G2PvlqtrbT6Ui+VimKp2kFp0Yq10kqdexSsgTDJIIhDhCAzCCS5zx9rbd0sg0lg771C8v1cVy6y95ru/eTx8ZeVZ61l7i4AAAAAH8qJuwAAAACgpSEkAwAAABGEZAAAACCCkAwAAABEEJIBAACACEIyAAAAEEFIBg4DZvYPM7s029u2FGb2FzP79ywd68dmVmNm1dk4HgCgZSIkA1lkZmvN7LNx19GSmdl1ZnZ/6nvu/nl3/3UWjt1X0nckJdy9V6aPFx7zAjNbZ2Y7zWyOmR2ZsqzAzO41s21mVm1mUyLbHm9mC81sV/jv8SnLhprZX8PAzw3xAaCZCMkAYmNmeXHXENFP0iZ339DcDQ/ms5hZuaTpkr4uqVjSLkl3pKxynaTBYV2flnS1mZ0VbttO0iOS7pfUVdKvJT0Svi9J+yT9QdIlza0LAEBIBloEM+tqZo+Z2UYz2xx+3yey2kAze8nMtprZI5EzjieZ2QtmtsXMKs3s9AMcZ5CZPR3uo8bMfv8xNY01syXhPv9hZmXh+983s4cj6/5/M5sWfn+Emd1jZu+Y2Vvh9IXccNlFZva8md1qZu8pCIGp+zlL0g8knWdmO8ysMnz/gykjkX1sMbM1ZjYqfH+9mW1InZoRno2damZvmNm7ZnaXmRU28Hk/K2mepN7hse/7uHYIl601s2vMbJGkndGgbGb9zcxT349Mf/mapD+7+zPuvkPSjySdY2adwuUTJd3g7pvdfZmkuyVdFC47XVKepNvcfY+7T5Nkks6QJHdf4e73SFry0Z8uAKAxhGSgZciRNFPBGcNjJO2WdHtknYmSLpbUW1KtpGQoPVrSXEk/lnSkpO9Kmm1mPRo4zg2SnlRw5rGPpF82VIyZlUj6raSrJPWQ9LikP4dnKX8r6Qtm1jlcN1fSuZIeDDf/dVjfIEnDJH1OUuqc6JGS1kjqKenG1OO6+xOSbpL0e3cvcveKhuoL97FIUrfwuL+T9MnwmBdKut3MisJ1fyqpRNLx4fKjJf13dIfu/jdJn5f0dnjsixpph6TzJY2R1MXdaw9Q74GUS6pMqWG1pL2SSsysq4KfdWXK+pXhNsltF7l76lSKRSnLAQCHgJAMtADuvsndZ7v7LnffriA8nhZZ7TfuXuXuOxWccTw3DKgXSnrc3R9393p3nydpgaQvNHCofQqCeG93f9/dnztASedJmuvu89x9n6SpkgoljXL3dZJekTQuXPcMSbvc/Z9mVqwgaF7l7jvDaQu3Svpqyr7fdvdfunutu+9uTjuleN3dZ7p7naTfS+or6frwjOqTCoLmIDMzSZMl/R93fy9s25si9XycA7ZDyjrT3H39QX6WIklbI+9tldQpXKbI8uSyxrYFABwiQjLQAphZBzObHl7AtU3SM5K6JKcphNanfL9OUr6k7gpC71fC6QBbzGyLpJMlHdXAoa5W8Cf5l8IpBBcfoKTe4TEkSe5eHx7/6PCtBxWcQZWkC/ThWeR+YV3vpNQyXcFZ44Y+x8F6N+X73WGN0feKFJz97SBpYUo9T4TvN0Vj7SAd2ufZIalz5L3OkraHyxRZnlzW2LYAgENESAZahu9IGiJppLt3lnRq+L6lrNM35ftjFJwVrlEQ0n7j7l1Svjq6+83Rg7h7tbtPdvfeki6XdIeZDWqgnrcVBN6giOCMbF9Jb4VvPSTp9HDe9Hh9GJLXS9ojqXtKLZ3dPXUKQGN3WkjnnRhqFATm8pR6jnD3osY2DDXWDtLH17sz/LdDynupd81YIumDKSVm9glJBZJec/fNkt5JXR5+vyRl2+PCmpKOE3OQASAtCMlA9uWbWfuUrzwFfyLfLWlLeEHetQ1sd6GZJcysg6TrJT0cTje4X9LZZjbazHLDfSYD7H7M7Csp729WEPDqGjjWHySNMbPPmFm+ghC/R9ILkuTuGyX9Q8E86tfDi8rk7u8omPP8czPrbGY5ZjbQzKJTRz7Ou5L6m9khj0/hmd+7Jd1qZj2lYA63mY1u4i4+th2acPyNCgL1heHP5mJJA1NWeUDBz+4UM+uo4Of6x3BaiCTNkvRDCy7sLFUwdeS+cNk/FPzsvh1enPif4ftPhZ/TzKy9pHbh6/ZmVtDEzw0AbR4hGci+xxUE4uTXdZJuUzDXtUbSPxVMCYj6jYKAVC2pvaRvS5K7r5f0JQV3hdio4Gzu99Twf9+flPQ/ZrZD0qOSrnT316MrufsKBXOdfxnWdLaks919b8pqD0r6rD48i5w0UUEwW6ogiD+shqd+HMhD4b+bzOyVZmx3INdIWiXpn+FUlr8pOGvfqCa2Q2MmK/h5bFJwUd0HAdvdl0j6hoKwvEHBL0tXpGx7raTVCqZ8PC3plvDiRoU1jFPQ3lsUXNQ5LqW2fgr6V/LM8m5JK5pRNwC0abb/hdEAAAAAOJMMAAAARBCSAQAAgAhCMgAAABBBSAYAAAAi8g5l4+4FOd6/gAv/0MZ07Cwd+t3JcJBq89rvf/doAMiwyjeqa9y9qQ8hQitxSCG5f4FrwUnpKgU4TIw6I+4K2rQNxYm4SwDQxhRfcdO6xtdCa8PpMAAAACCCkAwAAABEEJIBAACAiEOakwwAAIDMW7hwYc+8vLwZkoaKk5zpUC+pqra29tLhw4dvaGgFQjIAAEALl5eXN6NXr15lPXr02JyTk8OtxQ5RfX29bdy4MVFdXT1D0tiG1uE3EQAAgJZvaI8ePbYRkNMjJyfHe/TosVXBmfmG18liPQAAADg4OQTk9Arb84BZmJAMAAAARDAnGQAA4HDz5e4V2rYpfTmuc7daPVxT+XGrdOjQYdiuXbv+lXw9bdq0bgsWLOg4a9asN5p7uMcee6zTz3/+8+L58+eveuyxxzoVFBTUn3nmmTslacKECf2/+MUvbp00adLm5n+Q9OFMMgAAwOEmnQE5E/trhqeeeqrTs88+WxTX8Q+EkAwAAIBD8vbbb+eNHj164NChQ8uGDh1a9uSTT3aUpPnz53cYNmxYaVlZWWLYsGGllZWVBanbrVixot2sWbN63HXXXcWlpaWJJ554okiSnn766aJhw4aV9unT59iZM2d2laRx48YNuP/++7sktx07duyABx544IhMfSamWwAAAKBRe/bsySktLU0kX2/dujX3zDPP3CpJl19+ed8pU6a8O3r06B0rV65sN3r06MFr1qxZUlFR8f5LL720PD8/X3PmzOl09dVX9/nrX/+6OrmPIUOG7J04ceLGoqKiuuuvv/5dSbr77ru7v/vuu/kLFixY/uqrr7YfP378oEmTJm2ePHnyxltvvbX4wgsv3LJp06bchQsXFs2ePfv1TH1eQjIAAAAaVVBQUL98+fKlydfJOcmS9Pzzz3deuXJlYXLZjh07cjdv3pzz3nvv5Z533nkD1q5d297MfN++fdaUY40dO3ZLbm6uhg8f/v6mTZvyJWnMmDE7rrrqqn5vvfVW3gMPPNB1zJgxm/Pz89P9MT9ASAYAAMAhcXctWLBgWVFR0X63qbv00kuPOe2007bPmzdv9YoVK9qdccYZQ5qyv/bt23+wH/cPd3nuuedumjFjxpGzZ88+8t57712brvobwpxkAAAAHJKTTz55209/+tOeydcvvPBCoSRt27Ytt0+fPnslafr06d0b2rZTp05127dvz23Kcb7xjW/UTJ8+vViSTjzxxPcPvfIDIyQDAAAcbjp3q21J+/vVr361/pVXXulYUlKSGDhwYPntt9/eQ5Kuueaa6uuuu67PCSecUFpXV9fgthMmTNgyd+7cLqkX7h1I3759awcOHPj+hRdeuOlQ6m0KSz2F3VwndjZfcFIaqwEOB6PGxV1Bm7ahONH4SgCQRsVX3LTQ3U+Ms4bKysq1FRUVNXHW0BJs3749J5FIJF599dVl3bp1azh1N0NlZWX3ioqK/g0t40wyAAAAWrw5c+Z0KikpKZ88efKGdATkxnDhHgAAAFq8cePGbR83btzibB2PM8kAAABABCEZAAAAiCAkAwAAABGEZAAAACCCC/cAAAAONz+dWKHd29OX4wo71eqaWZUHWlxdXZ17+umnD5Gkmpqa/JycHD/yyCNrJenVV19dlvqEvHRYtWpV/pVXXtl37ty5a5577rkO1dXVeV/+8pe3SdKsWbO6rFy5suCGG254N53HjCIkAwAAHG7SGZCbsL9evXrVLV++fKkkTZkypXdRUVHd9ddfv19Ira+vl7srN7dJD8/7WIMGDdo3d+7cNZL00ksvdaiqqipMhuSJEyduOeQDNAHTLQAAAHBQqqqqCgYPHlx+wQUXHFNeXp5444038s8///x+Q4cOLRs0aFD5d7/73aOS6xYXFx83ZcqU3mVlZYmSkpLEokWLCiTp0Ucf7TRkyJBEaWlpIpFIlG3bti2nqqqqoLS0NLFjxw675ZZbjvrTn/50ZGlpaWLmzJldf/GLX3S/+OKL+0rS8uXL240cObKkpKQkMWrUqMGrV6/Ol6QvfelLAyZNmtR32LBhpX369Dl21qxZXZr72QjJAAAAOGirV69uf/nll9csW7Zs6YABA/bddtttb1ZVVS1btmzZkvnz53deuHBh++S6xcXF+5YtW7Z04sSJNTfffHOxJE2dOrXXnXfeuW758uVLX3zxxRUdOnSoT65fVFTk3/ve994ZP378e8uXL186adKkzanHvuyyy/pddNFFNa+99trSc845Z/M3v/nNvsllNTU1eQsXLlw+e/bsVddee+3Rzf1chGQAAAActL59++457bTTdiVf33vvvUcmEomy8vLyxJo1a9ovWrSoMLnsggsu2CxJI0aM2Ll+/foCSTrppJN2TJkype+NN97Yc/Pmzbl5eU2fSVJZWdlx8uTJ70nSFVdcsenll1/ulFw2duzYLTk5ORo5cuTuDRs2tGvu5yIkAwAA4KAVFhZ+cOZ38eLFBdOnTy9+5plnXnvttdeWnnrqqdt2795tKeu6JOXm5qqurs4k6Wc/+9k706dPX7djx46cESNGlC1evLggHXWlXkzo3vzrCgnJAAAASIstW7bkduzYsa5r165169aty3/mmWc6N7bNkiVLCkaOHLn7Jz/5SXV5efmuqqqq9qnLO3XqVLdjx44GM+vxxx+/45577jlSku66665uI0aM2J6eT0JIBgAAOPwUdqptifv71Kc+tWvw4MHvl5SUlF900UX9hg8fvqOxbW666abiwYMHl5eUlCQ6d+5cN378+G2py8eMGbN96dKlHcrKyhIzZ87smrrszjvvfOPee+/tXlJSknj44Ye73n777evT8TkkyQ7m9HPSiZ3NF5yUrlKAw8SocXFX0KZtKE7EXQKANqb4ipsWuvuJcdZQWVm5tqKioibOGlqjysrK7hUVFf0bWsaZZAAAACCCkAwAAABEEJIBAACACEIyAAAAEEFIBgAAACIIyQAAAEBE05/7BwAAgBZh4703VvieXWnLcVbQobbHxf+38uPWyc3NHT548ODdydePPPLIqiFDhuxt7rFGjBgxZOrUqetPPfXUXd///vd73XzzzdUHU3OmEZIBAAAOM+kMyE3dX0FBQf3y5cuXpvO406ZNO6qlhmSmWwAAAOCgrFixot3w4cOHJBKJskQiUTZv3ryOkvTYY491+vSnPz0oud7EiROPmTZtWrfUba+44oqj9+zZk1NaWpoYO3bsgCuvvLL3DTfc0DO5/Fvf+tbRP/7xj3sqJpxJBgAAQKOSgVaS+vbtu2fevHmre/fuXfvss8++1qFDB1+8eHHB+eef/4mq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\n" + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + }, + { + "data": { + "text/plain": "''" + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "labelprop_results.plot()" + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } + }, + { + "cell_type": "markdown", + "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. " + ], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%% md\n" + } + } } ], "metadata": { @@ -404,4 +819,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/docs/source/content/features/kpidemo.md b/docs/source/content/features/kpidemo.md index 027a6a9b..2a177524 100644 --- a/docs/source/content/features/kpidemo.md +++ b/docs/source/content/features/kpidemo.md @@ -1,6 +1,6 @@ # KPI Demo -.. image:: ../img/rms_sales.png +.. image:: ../img/kpidemo_sales.png ## What does KPIDemo do? diff --git a/docs/source/content/features/label_propagation.md b/docs/source/content/features/label_propagation.md new file mode 100644 index 00000000..36edb995 --- /dev/null +++ b/docs/source/content/features/label_propagation.md @@ -0,0 +1,74 @@ +# Label Propagation + +.. image:: ../img/label-propagation_sales.png + +## What does Label Propagation do? + +The label propagation feature spreads existing ground truth labels to unlabelled measurements. + +## Use case for the algorithm + +Associate labels to all individual measurements without +an expert having to manually provide with a label to every single measurement. + + +## How does Label Propagation work? + +Label propagation uses a semi-supervised algorithm for the spreading of the labels. +It uses the results from the ModeId, such as mode assigment and mode probability of each individual measurement, +along with the ground truth labels provided by the expert. +Therefore, the provided labels will be propagated to all measurements. +Ideally, the expert should had provided at least one label per each mode segment. +However, the more labels had been provided the better is the performance of the algorithm. +The end result is a label attached to each individual measurement. + +### Illustrative Example + +The figure below shows the results of a ModeId analysis where a total of three operational modes has been identified. +This is followed by a plot showing the initial labeled measurements, which correspond to three measurements per mode. +Finally, it shows how all the labels had been propagated to all the measurements after using the LabelPropagation feature. + +.. image:: ../img/labelpropagation_plots.png + +## Using the algorithm via mvg + +For code example see the ["Labeling and Label Propagation"](../examples/7-labeling.ipynb) example. + +1. Identify the `request_id` of a successful ModeId analysis. + +2. Request an analysis for the source and pass the `request_id` as an analysis parameter. + +3. Read the results (see below). + +## Analysis Parameters + +The LabelPropagation feature requires to know the source id (`sid`) of the asset to analyze and the `request_id` of a successful "ModeId" analysis. + +By default, LabelPropagation will not require any additional, algorithmic input parameters, +given that the optimal parameters had been thoroughly tested and are used as the default settings. + + +## Structure of the Results + +The results returned by the analysis call will be a dictionary called `propagated_labels`, +which contains a list equal to the number of measurements in the source. +Each item on this list is a dictionary with five elements, the keys of these elements are: *label*, *severity*, *notes*, *label_timestamp*, and *timestamp*. +This final item refers to the timestamp of the measurement. + + +``` +{ + 'propagated_labels': [... list of measurement results ...], +} +``` + +## Notes + +1. 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. + +2. The propagated severity level is used to indicate whether the label was added by the user or propagated by the algorithm. A value of -1 means that the label was propagated by the algorithm. + +3. The notes exist for the end user to add extra information to a certain label and is not used by MVG in any way. + + + \ No newline at end of file diff --git a/docs/source/content/img/kpidemo_sales.png b/docs/source/content/img/kpidemo_sales.png new file mode 100644 index 0000000000000000000000000000000000000000..04c9f9669bc94283909942961099453aa889f807 GIT binary patch literal 30395 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 literal 0 HcmV?d00001 diff --git a/docs/source/content/img/label-propagation_sales.png b/docs/source/content/img/label-propagation_sales.png new file mode 100644 index 0000000000000000000000000000000000000000..55bac1103b0119708c30b1cb3fd30f90ecf0c22e GIT binary patch literal 31712 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 literal 0 HcmV?d00001 diff --git a/docs/source/content/img/labelpropagation_plots.png b/docs/source/content/img/labelpropagation_plots.png new file mode 100644 index 0000000000000000000000000000000000000000..f7dba861a2dd5e990e0a9f1b0d1a2897ab21460e GIT binary patch literal 47076 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 xQ_g$t|6$G#?te%t Date: Fri, 18 Feb 2022 10:38:43 +0100 Subject: [PATCH 54/90] paremeterize endpoint variable in jupyter notebooks (#147) * add parameters tag to notebook 0 * replace the ENDPOINT variable with localhost * move notebook test to tests * update request_id for modeid in labelling notebook * move notebook tests to a separate job in ci workflow * update api verion --- .github/workflows/ci-checks.yml | 29 +- .../content/examples/0-check_version.ipynb | 39 +- .../content/examples/1-brief_overview.ipynb | 8 +- .../examples/2-sources_and_measurements.ipynb | 52 +- .../content/examples/3-tabular_example.ipynb | 19 +- .../content/examples/4-error_handling.ipynb | 15 +- .../content/examples/5-analysis_classes.ipynb | 45 +- .../content/examples/6-analysis_visual.ipynb | 67 +- docs/source/content/examples/7-labeling.ipynb | 1278 ++++++++++++++--- .../source/content/examples/8-inference.ipynb | 31 +- mvg/mvg.py | 4 +- regenerate-examples.sh | 28 - tests/test_notebooks.py | 10 + 13 files changed, 1354 insertions(+), 271 deletions(-) delete mode 100644 regenerate-examples.sh create mode 100644 tests/test_notebooks.py diff --git a/.github/workflows/ci-checks.yml b/.github/workflows/ci-checks.yml index c49e0d73..8115056d 100644 --- a/.github/workflows/ci-checks.yml +++ b/.github/workflows/ci-checks.yml @@ -77,18 +77,31 @@ jobs: - name: "Running tests with pytest" env: TEST_TOKEN: ${{ secrets.TEST_TOKEN }} - run: "python -m pytest --verbose tests/" - validate-documentation-examples: + run: "python -m pytest --verbose tests/ --ignore=tests/test_notebooks.py" + test-notebooks: runs-on: [ ubuntu-latest ] needs: [black, pylint, flake8] - name: "Validate examples in documentation" - steps: + strategy: + matrix: + python-version: [3.6,3.7,3.8,3.9,"3.10"] + steps: - uses: actions/checkout@v2 - - name: "Set up Python 3" + - name: "Set up Python ${{ matrix.python-version }}" uses: actions/setup-python@v2 with: - python-version: '3.x' - - name: "Run all examples" + python-version: "${{ matrix.python-version }}" + - name: "Install dependencies" + run: | + pip install -r requirements.txt + pip install -r requirements_dev.txt + pip install -r requirements_docs.txt + - name: Login to GHCR + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: vagrinder + password: ${{ secrets.VAGRINDER_GITHUB_PKG_TOKEN }} + - name: "Running tests with pytest" env: TEST_TOKEN: ${{ secrets.TEST_TOKEN }} - run: sh ./regenerate-examples.sh \ No newline at end of file + run: "python -m pytest --verbose tests/test_notebooks.py" diff --git a/docs/source/content/examples/0-check_version.ipynb b/docs/source/content/examples/0-check_version.ipynb index 45b578d3..5f02d3ac 100644 --- a/docs/source/content/examples/0-check_version.ipynb +++ b/docs/source/content/examples/0-check_version.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "invalid-silence", "metadata": {}, "source": [ "# Check Version Example\n", @@ -12,6 +13,7 @@ { "cell_type": "code", "execution_count": 1, + "id": "great-friday", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:06.090370Z", @@ -30,6 +32,7 @@ { "cell_type": "code", "execution_count": 2, + "id": "nutritional-substance", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:06.093950Z", @@ -47,21 +50,35 @@ { "cell_type": "code", "execution_count": 3, + "id": "marine-nurse", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:06.382877Z", "start_time": "2021-03-18T10:13:06.095307Z" - } + }, + "tags": [ + "parameters" + ] }, "outputs": [], "source": [ "TOKEN = \"NO TOKEN\"\n", - "ENDPOINT = \"https://api.beta.multiviz.com\"\n", + "ENDPOINT = \"https://api.beta.multiviz.com\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "sexual-joining", + "metadata": {}, + "outputs": [], + "source": [ "session = MVG(ENDPOINT, TOKEN)" ] }, { "cell_type": "markdown", + "id": "cheap-tender", "metadata": {}, "source": [ "It is advised to always check the version of the API against the MVG version. The `check_version` method will return a dictionary with the server API version, the mvg version and the API version the MVG version it has been tested against. If there is mismatch or incompatibility it will raise an exception and if there is a newer compatible version running on the server it will raise a warning. In the latter case, you should upgrade the MVG version (but you are not required to do so)." @@ -69,7 +86,8 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, + "id": "loved-moment", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:06.387884Z", @@ -85,19 +103,19 @@ "output_type": "stream", "text": [ "Checking versions for:https://api.beta.multiviz.com\n", - "mvg version: 0.9.7\n", - "Highest tested API version: 0.2.7\n" + "mvg version: 0.11.6\n", + "Highest tested API version: 0.3.0\n" ] }, { "data": { "text/plain": [ - "{'api_version': '0.2.7',\n", - " 'mvg_highest_tested_version': '0.2.7',\n", - " 'mvg_version': '0.9.7'}" + "{'api_version': '0.3.0',\n", + " 'mvg_highest_tested_version': '0.3.0',\n", + " 'mvg_version': '0.11.6'}" ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -108,6 +126,7 @@ } ], "metadata": { + "celltoolbar": "Tags", "kernelspec": { "display_name": "Python 3", "language": "python", @@ -123,7 +142,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.8.10" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/1-brief_overview.ipynb b/docs/source/content/examples/1-brief_overview.ipynb index 4620b8b6..d5b7e827 100644 --- a/docs/source/content/examples/1-brief_overview.ipynb +++ b/docs/source/content/examples/1-brief_overview.ipynb @@ -144,7 +144,10 @@ }, "pycharm": { "name": "#%%\n" - } + }, + "tags": [ + "parameters" + ] }, "outputs": [], "source": [ @@ -1957,6 +1960,7 @@ } ], "metadata": { + "celltoolbar": "Tags", "kernelspec": { "display_name": "Python 3", "language": "python", @@ -1972,7 +1976,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.8.10" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/2-sources_and_measurements.ipynb b/docs/source/content/examples/2-sources_and_measurements.ipynb index 3235113c..a63b0d26 100644 --- a/docs/source/content/examples/2-sources_and_measurements.ipynb +++ b/docs/source/content/examples/2-sources_and_measurements.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "global-alert", "metadata": {}, "source": [ "# Sources and Measurements Example\n", @@ -12,6 +13,7 @@ { "cell_type": "code", "execution_count": 1, + "id": "medical-platform", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.678492Z", @@ -34,6 +36,7 @@ }, { "cell_type": "markdown", + "id": "commercial-confidentiality", "metadata": { "ExecuteTime": { "end_time": "2021-03-04T14:04:45.710183Z", @@ -50,20 +53,26 @@ { "cell_type": "code", "execution_count": 2, + "id": "finished-emphasis", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.681622Z", "start_time": "2021-03-18T09:54:16.679684Z" - } + }, + "tags": [ + "parameters" + ] }, "outputs": [], "source": [ + "ENDPOINT = \"https://api.beta.multiviz.com\"\n", "# Replace by your own Token\n", "VALID_TOKEN = os.environ['TEST_TOKEN']" ] }, { "cell_type": "markdown", + "id": "prompt-concentrate", "metadata": {}, "source": [ "## Downloading the Data\n", @@ -75,6 +84,7 @@ { "cell_type": "code", "execution_count": null, + "id": "cutting-entry", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.800754Z", @@ -88,6 +98,7 @@ }, { "cell_type": "markdown", + "id": "prostate-condition", "metadata": {}, "source": [ "We are going to use six of the sources from the charlie dataset with IDs `u0001` to `u0006`." @@ -96,6 +107,7 @@ { "cell_type": "code", "execution_count": 3, + "id": "tracked-citizenship", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.804606Z", @@ -110,6 +122,7 @@ }, { "cell_type": "markdown", + "id": "third-cable", "metadata": {}, "source": [ "## Connect to the API\n", @@ -121,6 +134,7 @@ { "cell_type": "code", "execution_count": 4, + "id": "humanitarian-listing", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:16.957584Z", @@ -129,12 +143,12 @@ }, "outputs": [], "source": [ - "ENDPOINT = \"https://api.beta.multiviz.com\"\n", "session = MVG(ENDPOINT, VALID_TOKEN)" ] }, { "cell_type": "markdown", + "id": "secret-turning", "metadata": {}, "source": [ "We now check if the server is alive. The hello message contains, amongst others the API version." @@ -143,6 +157,7 @@ { "cell_type": "code", "execution_count": 5, + "id": "legitimate-nothing", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.111625Z", @@ -169,6 +184,7 @@ }, { "cell_type": "markdown", + "id": "immune-appreciation", "metadata": {}, "source": [ "## Check Database\n", @@ -184,6 +200,7 @@ { "cell_type": "code", "execution_count": 6, + "id": "judicial-mineral", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.247583Z", @@ -214,6 +231,7 @@ }, { "cell_type": "markdown", + "id": "collectible-shame", "metadata": {}, "source": [ "The example below revolves around a source with source id u0001" @@ -222,6 +240,7 @@ { "cell_type": "code", "execution_count": 8, + "id": "annoying-president", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.250783Z", @@ -235,6 +254,7 @@ }, { "cell_type": "markdown", + "id": "voluntary-traveler", "metadata": {}, "source": [ "To make sure we start from a clean slate we delete our resource in case it exists." @@ -243,6 +263,7 @@ { "cell_type": "code", "execution_count": 9, + "id": "pharmaceutical-producer", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.408675Z", @@ -269,6 +290,7 @@ }, { "cell_type": "markdown", + "id": "operating-identifier", "metadata": {}, "source": [ "## Build measurements\n", @@ -279,6 +301,7 @@ { "cell_type": "code", "execution_count": 10, + "id": "distant-institute", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.413080Z", @@ -306,6 +329,7 @@ }, { "cell_type": "markdown", + "id": "shaped-enough", "metadata": {}, "source": [ "Create the source and check for it" @@ -314,6 +338,7 @@ { "cell_type": "code", "execution_count": 11, + "id": "charitable-gnome", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.688070Z", @@ -339,6 +364,7 @@ }, { "cell_type": "markdown", + "id": "macro-supplier", "metadata": {}, "source": [ "Update the source" @@ -347,6 +373,7 @@ { "cell_type": "code", "execution_count": 12, + "id": "consolidated-adventure", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.983670Z", @@ -373,6 +400,7 @@ }, { "cell_type": "markdown", + "id": "dense-handling", "metadata": {}, "source": [ "Upload measurements to source. Measurements are tied to sources, they consist of\n", @@ -386,6 +414,7 @@ { "cell_type": "code", "execution_count": 13, + "id": "parliamentary-disco", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:54:17.986967Z", @@ -399,6 +428,7 @@ }, { "cell_type": "markdown", + "id": "tender-barrier", "metadata": {}, "source": [ "`meas` now contains a list of timestamps representing the measurements in our repo we upload from iterate over all of them." @@ -407,6 +437,7 @@ { "cell_type": "code", "execution_count": 14, + "id": "racial-dance", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:15.657580Z", @@ -475,6 +506,7 @@ }, { "cell_type": "markdown", + "id": "historic-variance", "metadata": {}, "source": [ "## Read the Measurements" @@ -482,6 +514,7 @@ }, { "cell_type": "markdown", + "id": "ahead-marketplace", "metadata": {}, "source": [ "Check if we actually created the measurements by reading them" @@ -490,6 +523,7 @@ { "cell_type": "code", "execution_count": 15, + "id": "restricted-detroit", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:41.728688Z", @@ -512,6 +546,7 @@ }, { "cell_type": "markdown", + "id": "paperback-yugoslavia", "metadata": {}, "source": [ "It is also possible to read a specific measurement at a single timestamp.\n", @@ -521,6 +556,7 @@ { "cell_type": "code", "execution_count": 16, + "id": "digital-stevens", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:42.225546Z", @@ -553,6 +589,7 @@ }, { "cell_type": "markdown", + "id": "mechanical-alfred", "metadata": {}, "source": [ "We can update the meta information for a measurement at a single timestamp let's get the timestamp of the first measurement" @@ -561,6 +598,7 @@ { "cell_type": "code", "execution_count": 17, + "id": "impressed-brown", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:42.870908Z", @@ -597,6 +635,7 @@ }, { "cell_type": "markdown", + "id": "ethical-amplifier", "metadata": {}, "source": [ "Finally we delete the measurement" @@ -605,6 +644,7 @@ { "cell_type": "code", "execution_count": 18, + "id": "respective-thread", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:43.023114Z", @@ -618,6 +658,7 @@ }, { "cell_type": "markdown", + "id": "royal-gambling", "metadata": {}, "source": [ "We check if it's actually deleted" @@ -626,6 +667,7 @@ { "cell_type": "code", "execution_count": 19, + "id": "czech-spread", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:55:43.153589Z", @@ -650,6 +692,7 @@ }, { "cell_type": "markdown", + "id": "aggressive-copying", "metadata": {}, "source": [ "If all went well we end up here now.\n", @@ -658,6 +701,7 @@ }, { "cell_type": "markdown", + "id": "animal-background", "metadata": {}, "source": [ "## Uploading additional sources\n", @@ -668,6 +712,7 @@ { "cell_type": "code", "execution_count": 20, + "id": "working-content", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T09:56:43.305948Z", @@ -863,6 +908,7 @@ } ], "metadata": { + "celltoolbar": "Tags", "kernelspec": { "display_name": "Python 3", "language": "python", @@ -878,7 +924,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.8.10" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/3-tabular_example.ipynb b/docs/source/content/examples/3-tabular_example.ipynb index d1f03679..00a66459 100644 --- a/docs/source/content/examples/3-tabular_example.ipynb +++ b/docs/source/content/examples/3-tabular_example.ipynb @@ -43,11 +43,23 @@ { "cell_type": "code", "execution_count": 13, - "metadata": {}, + "metadata": { + "tags": [ + "parameters" + ] + }, "outputs": [], "source": [ "ENDPOINT = \"http://api.beta.multiviz.com\"\n", - "TOKEN = os.environ['TEST_TOKEN']\n", + "TOKEN = os.environ['TEST_TOKEN']" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ "session = MVG(ENDPOINT, TOKEN)" ] }, @@ -543,6 +555,7 @@ } ], "metadata": { + "celltoolbar": "Tags", "interpreter": { "hash": "ee585b89b750dc1146ba89a2fe8627247123d548cada017644b010d09cffe3df" }, @@ -561,7 +574,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.8.10" } }, "nbformat": 4, diff --git a/docs/source/content/examples/4-error_handling.ipynb b/docs/source/content/examples/4-error_handling.ipynb index d5c43582..330aa0b5 100644 --- a/docs/source/content/examples/4-error_handling.ipynb +++ b/docs/source/content/examples/4-error_handling.ipynb @@ -52,11 +52,15 @@ "ExecuteTime": { "end_time": "2021-03-18T10:13:43.992485Z", "start_time": "2021-03-18T10:13:43.990383Z" - } + }, + "tags": [ + "parameters" + ] }, "outputs": [], "source": [ - "TOKEN = os.environ[\"TEST_TOKEN\"] # replace with your token" + "TOKEN = os.environ[\"TEST_TOKEN\"] # replace with your token\n", + "ENDPOINT = \"https://api.beta.multiviz.com\"" ] }, { @@ -127,7 +131,6 @@ }, "outputs": [], "source": [ - "ENDPOINT = \"https://api.beta.multiviz.com\"\n", "session = MVG(ENDPOINT, TOKEN)" ] }, @@ -157,7 +160,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.2.7\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}\n" ] + "{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.2.7\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}\n" + ] } ], "source": [ @@ -407,6 +411,7 @@ } ], "metadata": { + "celltoolbar": "Tags", "kernelspec": { "display_name": "Python 3", "language": "python", @@ -422,7 +427,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.8.10" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/5-analysis_classes.ipynb b/docs/source/content/examples/5-analysis_classes.ipynb index e2aabbd0..8353a641 100644 --- a/docs/source/content/examples/5-analysis_classes.ipynb +++ b/docs/source/content/examples/5-analysis_classes.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "skilled-premium", "metadata": {}, "source": [ "# Analysis Classes - a Unified Interface to Analysis Results\n", @@ -35,6 +36,7 @@ }, { "cell_type": "markdown", + "id": "concerned-vienna", "metadata": {}, "source": [ "## Example flow\n", @@ -45,6 +47,7 @@ { "cell_type": "code", "execution_count": 1, + "id": "disturbed-friendly", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:28.735704Z", @@ -61,6 +64,7 @@ }, { "cell_type": "markdown", + "id": "accomplished-mechanics", "metadata": { "ExecuteTime": { "end_time": "2021-03-04T10:59:02.619313Z", @@ -75,9 +79,26 @@ "**You need to insert your token received from Viking Analytics here:**" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "honey-growing", + "metadata": { + "tags": [ + "parameters" + ] + }, + "outputs": [], + "source": [ + "# Replace by your own Token\n", + "TOKEN = os.environ[\"TEST_TOKEN\"] # use our own token\n", + "ENDPOINT = \"https://api.beta.multiviz.com\"" + ] + }, { "cell_type": "code", "execution_count": 2, + "id": "persistent-dublin", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:29.472021Z", @@ -99,15 +120,13 @@ } ], "source": [ - "# Replace by your own Token\n", - "TOKEN = os.environ[\"TEST_TOKEN\"] # use our own token\n", - "ENDPOINT = \"https://api.beta.multiviz.com\"\n", "session = MVG(ENDPOINT, TOKEN)\n", "session.check_version() # Check if API is accessible" ] }, { "cell_type": "markdown", + "id": "neural-anniversary", "metadata": { "pycharm": { "name": "#%% md\n" @@ -122,6 +141,7 @@ { "cell_type": "code", "execution_count": 3, + "id": "universal-trace", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:32.804304Z", @@ -155,6 +175,7 @@ }, { "cell_type": "markdown", + "id": "relative-niagara", "metadata": { "pycharm": { "name": "#%% md\n" @@ -171,6 +192,7 @@ { "cell_type": "code", "execution_count": 4, + "id": "accompanied-basement", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:37.584243Z", @@ -669,6 +691,7 @@ }, { "cell_type": "markdown", + "id": "suited-journal", "metadata": { "pycharm": { "name": "#%% md\n" @@ -689,6 +712,7 @@ { "cell_type": "code", "execution_count": 5, + "id": "creative-elevation", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:38.637859Z", @@ -733,6 +757,7 @@ }, { "cell_type": "markdown", + "id": "global-prediction", "metadata": {}, "source": [ "### Plotting\n", @@ -744,6 +769,7 @@ { "cell_type": "code", "execution_count": 6, + "id": "joint-dryer", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:43.435603Z", @@ -784,6 +810,7 @@ }, { "cell_type": "markdown", + "id": "alone-array", "metadata": { "pycharm": { "name": "#%% md\n" @@ -797,6 +824,7 @@ { "cell_type": "code", "execution_count": 7, + "id": "improved-carroll", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:44.400481Z", @@ -1598,6 +1626,7 @@ }, { "cell_type": "markdown", + "id": "accredited-council", "metadata": { "pycharm": { "name": "#%% md\n" @@ -1611,6 +1640,7 @@ { "cell_type": "code", "execution_count": 8, + "id": "retained-halloween", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:48.331542Z", @@ -2029,6 +2059,7 @@ }, { "cell_type": "markdown", + "id": "rural-consistency", "metadata": {}, "source": [ "## Black Sheep Analysis example\n", @@ -2039,6 +2070,7 @@ { "cell_type": "code", "execution_count": 9, + "id": "structural-acting", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:51.412234Z", @@ -4694,6 +4726,7 @@ }, { "cell_type": "markdown", + "id": "stunning-device", "metadata": { "pycharm": { "name": "#%% md\n" @@ -4707,6 +4740,7 @@ { "cell_type": "code", "execution_count": 12, + "id": "departmental-letters", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:53.012148Z", @@ -4779,6 +4813,7 @@ }, { "cell_type": "markdown", + "id": "convinced-louis", "metadata": {}, "source": [ "### Serializing\n", @@ -4788,6 +4823,7 @@ { "cell_type": "code", "execution_count": 13, + "id": "foster-disaster", "metadata": { "pycharm": { "name": "#%%\n" @@ -4818,6 +4854,7 @@ } ], "metadata": { + "celltoolbar": "Tags", "interpreter": { "hash": "3e082f03f9b308c2eff9c6e1d6622ba5a80b88607e08f1bd210e546296deb595" }, @@ -4836,7 +4873,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.8.10" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/6-analysis_visual.ipynb b/docs/source/content/examples/6-analysis_visual.ipynb index bc301f84..7b34af74 100644 --- a/docs/source/content/examples/6-analysis_visual.ipynb +++ b/docs/source/content/examples/6-analysis_visual.ipynb @@ -2,6 +2,7 @@ "cells": [ { "cell_type": "markdown", + "id": "marine-feelings", "metadata": {}, "source": [ "# Analysis and Results Visualization\n", @@ -22,6 +23,7 @@ { "cell_type": "code", "execution_count": 1, + "id": "sized-agency", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:28.735704Z", @@ -39,6 +41,7 @@ }, { "cell_type": "markdown", + "id": "incomplete-radar", "metadata": { "ExecuteTime": { "end_time": "2021-03-04T10:59:02.619313Z", @@ -55,20 +58,26 @@ { "cell_type": "code", "execution_count": 2, + "id": "prescription-diesel", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:29.472021Z", "start_time": "2021-03-18T10:00:29.469799Z" - } + }, + "tags": [ + "parameters" + ] }, "outputs": [], "source": [ "# Replace by your own Token\n", - "VALID_TOKEN = os.environ['TEST_TOKEN']" + "VALID_TOKEN = os.environ['TEST_TOKEN']\n", + "ENDPOINT = \"https://api.beta.multiviz.com\"" ] }, { "cell_type": "markdown", + "id": "unable-medicine", "metadata": {}, "source": [ "Instantiate a session object with MVG library.\n", @@ -78,6 +87,7 @@ { "cell_type": "code", "execution_count": 3, + "id": "funded-catalog", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:30.395676Z", @@ -86,12 +96,12 @@ }, "outputs": [], "source": [ - "ENDPOINT = \"https://api.beta.multiviz.com\"\n", "session = MVG(ENDPOINT, VALID_TOKEN)" ] }, { "cell_type": "markdown", + "id": "selective-kitchen", "metadata": { "pycharm": { "name": "#%% md\n" @@ -108,6 +118,7 @@ { "cell_type": "code", "execution_count": 4, + "id": "thermal-mentor", "metadata": { "pycharm": { "name": "#%%\n" @@ -158,6 +169,7 @@ }, { "cell_type": "markdown", + "id": "vulnerable-loading", "metadata": {}, "source": [ "During our example, we will utilize sources, \"u0001\" and \"u0005\", which were previously uploaded to our database." @@ -166,6 +178,7 @@ { "cell_type": "code", "execution_count": 5, + "id": "attractive-annual", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:32.804304Z", @@ -194,6 +207,7 @@ }, { "cell_type": "markdown", + "id": "loose-windows", "metadata": { "pycharm": { "name": "#%% md\n" @@ -207,6 +221,7 @@ { "cell_type": "code", "execution_count": 6, + "id": "angry-toronto", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:36.152571Z", @@ -240,6 +255,7 @@ }, { "cell_type": "markdown", + "id": "olympic-information", "metadata": { "pycharm": { "name": "#%% md\n" @@ -259,6 +275,7 @@ { "cell_type": "code", "execution_count": 7, + "id": "supposed-blood", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:37.584243Z", @@ -288,6 +305,7 @@ }, { "cell_type": "markdown", + "id": "elder-difficulty", "metadata": { "pycharm": { "name": "#%% md\n" @@ -300,6 +318,7 @@ { "cell_type": "code", "execution_count": 8, + "id": "primary-copying", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:38.637859Z", @@ -328,6 +347,7 @@ }, { "cell_type": "markdown", + "id": "institutional-exposure", "metadata": { "pycharm": { "name": "#%% md\n" @@ -347,6 +367,7 @@ { "cell_type": "code", "execution_count": 9, + "id": "sporting-proposal", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:43.435603Z", @@ -376,6 +397,7 @@ }, { "cell_type": "markdown", + "id": "prerequisite-integral", "metadata": { "pycharm": { "name": "#%% md\n" @@ -388,6 +410,7 @@ { "cell_type": "code", "execution_count": 10, + "id": "amateur-chuck", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:44.400481Z", @@ -418,6 +441,7 @@ { "cell_type": "code", "execution_count": 11, + "id": "coastal-consequence", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:44.815607Z", @@ -447,6 +471,7 @@ }, { "cell_type": "markdown", + "id": "sound-parcel", "metadata": { "pycharm": { "name": "#%% md\n" @@ -459,6 +484,7 @@ { "cell_type": "code", "execution_count": 12, + "id": "otherwise-awareness", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:48.331542Z", @@ -488,6 +514,7 @@ }, { "cell_type": "markdown", + "id": "synthetic-italic", "metadata": {}, "source": [ "## Visualization\n", @@ -500,6 +527,7 @@ { "cell_type": "code", "execution_count": 13, + "id": "coordinated-invasion", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:51.412234Z", @@ -532,6 +560,7 @@ }, { "cell_type": "markdown", + "id": "unauthorized-youth", "metadata": { "pycharm": { "name": "#%% md\n" @@ -548,6 +577,7 @@ { "cell_type": "code", "execution_count": 14, + "id": "naval-patrol", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:53.012148Z", @@ -579,6 +609,7 @@ }, { "cell_type": "markdown", + "id": "certified-hybrid", "metadata": {}, "source": [ "Each dictionary contains seven key elements.\n", @@ -594,6 +625,7 @@ }, { "cell_type": "markdown", + "id": "private-things", "metadata": { "pycharm": { "name": "#%% md\n" @@ -621,6 +653,7 @@ { "cell_type": "code", "execution_count": 15, + "id": "imposed-variety", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:55.411186Z", @@ -758,6 +791,7 @@ }, { "cell_type": "markdown", + "id": "chicken-appliance", "metadata": { "pycharm": { "name": "#%% md\n" @@ -783,6 +817,7 @@ { "cell_type": "code", "execution_count": 16, + "id": "talented-characteristic", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:57.673176Z", @@ -892,6 +927,7 @@ { "cell_type": "code", "execution_count": 17, + "id": "proud-chuck", "metadata": { "pycharm": { "name": "#%%\n" @@ -976,6 +1012,7 @@ }, { "cell_type": "markdown", + "id": "touched-giant", "metadata": { "pycharm": { "name": "#%% md\n" @@ -988,6 +1025,7 @@ { "cell_type": "code", "execution_count": 18, + "id": "defined-utilization", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:58.990587Z", @@ -1148,6 +1186,7 @@ }, { "cell_type": "markdown", + "id": "handmade-stretch", "metadata": { "pycharm": { "name": "#%% md\n" @@ -1160,6 +1199,7 @@ { "cell_type": "code", "execution_count": 19, + "id": "grave-accounting", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:01.536419Z", @@ -1331,6 +1371,7 @@ }, { "cell_type": "markdown", + "id": "injured-student", "metadata": {}, "source": [ "We can call the individual boxplot for one source and display the boxplot of the \"RMS\" for each one of the operating modes.\n", @@ -1340,6 +1381,7 @@ { "cell_type": "code", "execution_count": 20, + "id": "first-influence", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:07.727375Z", @@ -1366,6 +1408,7 @@ }, { "cell_type": "markdown", + "id": "desperate-consultancy", "metadata": {}, "source": [ "We create a list with all the sources dataframes for the \"ModeId\" feature and display the \"RMS\" boxplot across the different modes." @@ -1374,6 +1417,7 @@ { "cell_type": "code", "execution_count": 21, + "id": "israeli-sympathy", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:11.059225Z", @@ -1401,6 +1445,7 @@ }, { "cell_type": "markdown", + "id": "paperback-persian", "metadata": {}, "source": [ "We call the display over time of an individual source and identify all its operating modes.\n", @@ -1410,6 +1455,7 @@ { "cell_type": "code", "execution_count": 22, + "id": "polished-recycling", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:16.615916Z", @@ -1436,6 +1482,7 @@ }, { "cell_type": "markdown", + "id": "sustainable-invention", "metadata": {}, "source": [ "Uncertain areas appear as a gray rectangle above the corresponding periods in the modes plot.\n", @@ -1447,6 +1494,7 @@ { "cell_type": "code", "execution_count": 23, + "id": "orange-consciousness", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:01:17.917436Z", @@ -1518,6 +1566,7 @@ }, { "cell_type": "markdown", + "id": "south-acting", "metadata": { "pycharm": { "name": "#%% md\n" @@ -1534,6 +1583,7 @@ { "cell_type": "code", "execution_count": 25, + "id": "compressed-mexico", "metadata": { "pycharm": { "name": "#%%\n" @@ -1558,6 +1608,7 @@ }, { "cell_type": "markdown", + "id": "joined-russia", "metadata": {}, "source": [ "Similar to single asset feature, the requested population analysis will return a dictionary object with two elements.\n", @@ -1573,6 +1624,7 @@ { "cell_type": "code", "execution_count": 26, + "id": "chemical-helmet", "metadata": { "pycharm": { "name": "#%%\n" @@ -1598,6 +1650,7 @@ }, { "cell_type": "markdown", + "id": "great-gender", "metadata": {}, "source": [ "Similarly, we can query for the status of our requested analysis, where the different status options remain the same." @@ -1606,6 +1659,7 @@ { "cell_type": "code", "execution_count": 27, + "id": "hourly-homework", "metadata": { "pycharm": { "name": "#%%\n" @@ -1620,6 +1674,7 @@ }, { "cell_type": "markdown", + "id": "voluntary-regression", "metadata": {}, "source": [ "The next step is to retrieve the results by calling the \"request_id\".\n", @@ -1638,6 +1693,7 @@ { "cell_type": "code", "execution_count": null, + "id": "innocent-dictionary", "metadata": { "pycharm": { "name": "#%%\n" @@ -1663,6 +1719,7 @@ }, { "cell_type": "markdown", + "id": "related-probe", "metadata": {}, "source": [ "The `\"results\"` of the \"BlackSheep\" indicates the atypical assets.\n", @@ -1677,6 +1734,7 @@ { "cell_type": "code", "execution_count": null, + "id": "clean-agreement", "metadata": { "pycharm": { "name": "#%%\n" @@ -1701,6 +1759,7 @@ { "cell_type": "code", "execution_count": null, + "id": "eight-cargo", "metadata": { "pycharm": { "name": "#%%\n" @@ -1725,6 +1784,7 @@ }, { "cell_type": "markdown", + "id": "swiss-owner", "metadata": { "pycharm": { "name": "#%% md\n" @@ -1736,6 +1796,7 @@ } ], "metadata": { + "celltoolbar": "Tags", "kernelspec": { "display_name": "Python 3", "language": "python", diff --git a/docs/source/content/examples/7-labeling.ipynb b/docs/source/content/examples/7-labeling.ipynb index cc259308..4cad2cfa 100644 --- a/docs/source/content/examples/7-labeling.ipynb +++ b/docs/source/content/examples/7-labeling.ipynb @@ -37,19 +37,18 @@ { "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" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", @@ -62,6 +61,20 @@ "**You need to insert your token received from Viking Analytics here:**" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "parameters" + ] + }, + "outputs": [], + "source": [ + "TOKEN = os.environ[\"TEST_TOKEN\"]\n", + "ENDPOINT = \"https://api.beta.multiviz.com\"" + ] + }, { "cell_type": "code", "execution_count": 2, @@ -69,7 +82,11 @@ "outputs": [ { "data": { - "text/plain": "{'api_version': '0.3.0',\n 'mvg_highest_tested_version': '0.3.0',\n 'mvg_version': '0.11.5'}" + "text/plain": [ + "{'api_version': '0.3.0',\n", + " 'mvg_highest_tested_version': '0.3.0',\n", + " 'mvg_version': '0.11.5'}" + ] }, "execution_count": 2, "metadata": {}, @@ -77,31 +94,39 @@ } ], "source": [ - "TOKEN = os.environ[\"TEST_TOKEN\"]\n", - "URL = \"https://api.beta.multiviz.com\"\n", - "session = MVG(URL, TOKEN)\n", + "session = MVG(ENDPOINT, TOKEN)\n", "\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." - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 3, + "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']}}" + "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": 3, "metadata": {}, @@ -111,34 +136,108 @@ "source": [ "SOURCE_ID = \"u0001\"\n", "session.get_source(SOURCE_ID)" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "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." - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 4, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { - "text/plain": " timestamps labels uncertain mode_probability datetime\n0 1570273260 0 False 0.966994 2019-10-05 13:01:00+02:00\n1 1570359660 0 False 0.931219 2019-10-06 13:01:00+02:00\n2 1570446060 0 False 0.999575 2019-10-07 13:01:00+02:00\n3 1570532460 0 False 0.979806 2019-10-08 13:01:00+02:00\n4 1570618860 0 False 0.885940 2019-10-09 13:01:00+02:00", - "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
timestampslabelsuncertainmode_probabilitydatetime
015702732600False0.9669942019-10-05 13:01:00+02:00
115703596600False0.9312192019-10-06 13:01:00+02:00
215704460600False0.9995752019-10-07 13:01:00+02:00
315705324600False0.9798062019-10-08 13:01:00+02:00
415706188600False0.8859402019-10-09 13:01:00+02:00
\n
" + "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", + "
timestampslabelsuncertainmode_probabilitydatetime
015702732600False0.9669942019-10-05 13:01:00+02:00
115703596600False0.9312192019-10-06 13:01:00+02:00
215704460600False0.9995752019-10-07 13:01:00+02:00
315705324600False0.9798062019-10-08 13:01:00+02:00
415706188600False0.8859402019-10-09 13:01:00+02:00
\n", + "
" + ], + "text/plain": [ + " timestamps labels uncertain mode_probability datetime\n", + "0 1570273260 0 False 0.966994 2019-10-05 13:01:00+02:00\n", + "1 1570359660 0 False 0.931219 2019-10-06 13:01:00+02:00\n", + "2 1570446060 0 False 0.999575 2019-10-07 13:01:00+02:00\n", + "3 1570532460 0 False 0.979806 2019-10-08 13:01:00+02:00\n", + "4 1570618860 0 False 0.885940 2019-10-09 13:01:00+02:00" + ] }, "execution_count": 4, "metadata": {}, @@ -146,27 +245,28 @@ } ], "source": [ - "ModeId_request_id = \"5649faa234642e7207fd9800481bcb6e\"\n", + "ModeId_request_id = session.list_analyses(sid=SOURCE_ID, feature=\"ModeId\")[0]\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()" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "code", "execution_count": 5, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { - "text/plain": "
", - "image/png": "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ko9//ONHfvjDH17z7LPPLho4cGDDl770paFtXYaJsiRJkjrUtGnTttxxxx2HA9x2222DTz/99I1NZWvWrOkxffr0cbW1tXX19fXjH3nkkb4Aq1ev7jF16tTXT5gwoW7WrFljUtrdGXz99dcPPu644yaMHz++btasWWMaGvbsZG5sbORXv/pV//e///2bAM4///wN99xzz+FtjdtEWZIkSR3q3HPP3Th37txBO3fujMWLF/ebMmXKjqaySy65ZFR9ff3OZcuWPXHVVVetnD179tEAl1566agpU6ZsX7x48RMzZ87cvGrVqt4ACxYs6HPnnXcOnj9//pIlS5Y8UVNTk2644YYhpetbs2ZNz/79+7/Sq1cvAMaOHfvymjVrerc1bhNlSZIkdaiTTz75hRUrVhxy4403Dp4+ffqW0rJHH320/wUXXLABYObMmds2b97cc8OGDT0efvjh/ueff/4GgLPPPnvLgAEDXgG49957+y9atKhffX39hPHjx9c9+OCDA5YvX35I6TJLe5+bRESbr/7hyXySJEnqcDNmzNh85ZVXvub+++9funbt2j/koPtKamtq9u7TTSnFGWecseG6665b2dy6jjjiiIZt27b12LVrF7169eKZZ57pPXz48DaPi7ZHWZIkSR3uoosuWn/xxRc/f9JJJ71QOn3y5Mnb5syZMwRg3rx5/QcNGtQwePDgxsmTJ2+76aabhgDcfvvtA7Zu3doDYMaMGVvnzZs3aOXKlT0hj3FetmzZHsMqampqmpY7COCmm24a8s53vnNzW2M2UZYkSeomhgyhVZdW64jljRs3btcVV1yxtnz6Nddc8/yCBQv61dbW1l122WWjb7755qcBrr766ucfeuihw+rq6ibcd999A0eOHPkywMSJE1+8/PLLV06bNq22tra27tRTT6197rnnepUv93Of+9yKr3zlK0ccddRRx27atKnnRz/60fVt3b6o1N3dWpMmTUrz58/f7/klSZK6ooh4LKU0qbPjWLhw4TP19fVtThC7k4ULFw6tr68fW6nMHmVJkiSpAhNlSZIkqQITZUmSJKkCE2VJkiSpggNKlHd1+F26JUmSpM5xQDccefxxiGivUKSD1/5fO0bt6jsekCRJ7cehF5IkSd3FUOoJJrbbYyj1La0yIia+5z3vObrp9a5duxg0aFD9W9/61te1JfTRo0cft2rVqlZ38n7mM58ZdtRRRx0bERPbMl8pE2VJkqTuYsOBjSbYn+X17du3cenSpX23b98eAHfdddeAESNGdPgA3re85S3bf/KTnywbNWrUy/u7DBNlSZIkdahp06ZtueOOOw4HuO222waffvrpG5vK1qxZ02P69Onjamtr6+rr68c/8sgjfQFWr17dY+rUqa+fMGFC3axZs8aU3iTv+uuvH3zcccdNGD9+fN2sWbPGNDTsfYPAqVOnvnDMMcfsd5IMJsqSJEnqYOeee+7GuXPnDtq5c2csXry435QpU3Y0lV1yySWj6uvrdy5btuyJq666auXs2bOPBrj00ktHTZkyZfvixYufmDlz5uZVq1b1BliwYEGfO++8c/D8+fOXLFmy5Imampp0ww03DOmIuE2UJUmS1KFOPvnkF1asWHHIjTfeOHj69OlbSsseffTR/hdccMEGgJkzZ27bvHlzzw0bNvR4+OGH+59//vkbAM4+++wtAwYMeAXg3nvv7b9o0aJ+9fX1E8aPH1/34IMPDli+fPkhHRF3+45TkSRJkiqYMWPG5iuvvPI1999//9K1a9f+IQctHVLRJCISQE3N3n26KaU444wzNlx33XUrOzJesEdZkiRJr4KLLrpo/cUXX/z8SSed9ELp9MmTJ2+bM2fOEIB58+b1HzRoUMPgwYMbJ0+evO2mm24aAnD77bcP2Lp1aw+AGTNmbJ03b96glStX9oQ8xnnZsmW9OyJmE2VJkqTuYgh7n/X2Ki1v3Lhxu6644oq15dOvueaa5xcsWNCvtra27rLLLht98803Pw1w9dVXP//QQw8dVldXN+G+++4bOHLkyJcBJk6c+OLll1++ctq0abW1tbV1p556au1zzz3Xq3y5n/70p4ePGDHi+DVr1vSur6+vO+uss8a0dfOiUnd3q2eOSQnm7/f8UlfhDUeqhDcckVQl4hweSylN6uw4Fi5c+Ex9ff36zo6jmi1cuHBofX392Epl9ihLkiRJFZgoS5IkSRWYKEuSJEkVmChLkiRJFZgoS5IkSRWYKEuSJEkVeGc+SZKk7uLOofW8vKH98r/eQxr4y/UL9/WWiJj47ne/e+Pdd9/9NMCuXbsYPnx4/QknnLDjgQceeLK1qxo9evRx8+fPXzxy5MhWXbt55syZRz/++OOH9urVK51wwgk7brnllmcPOeSQNl3R1R5lSZKk7qI9k+RWLq9v376NS5cu7bt9+/YAuOuuuwaMGDFiV7vGUcE555yzcfny5YuWLl362xdffDG++MUvDm3rMkyUJUmS1KGmTZu25Y477jgc4Lbbbht8+umnb2wqW7NmTY/p06ePq62trauvrx//yCOP9AVYvXp1j6lTp75+woQJdbNmzRpTepO866+/fvBxxx03Yfz48XWzZs0a09CwdyfzWWedtaWmpoaamhomTZq0Y8WKFW2+zbWJsiRJkjrUueeeu3Hu3LmDdu7cGYsXL+43ZcqUHU1ll1xyyaj6+vqdy5Yte+Kqq65aOXv27KMBLr300lFTpkzZvnjx4idmzpy5edWqVb0BFixY0OfOO+8cPH/+/CVLlix5oqamJt1www1Dmlv3Sy+9FHPnzh1y2mmnbWlr3CbKkiRJ6lAnn3zyCytWrDjkxhtvHDx9+vQ9EtZHH320/wUXXLABYObMmds2b97cc8OGDT0efvjh/ueff/4GgLPPPnvLgAEDXgG49957+y9atKhffX39hPHjx9c9+OCDA5YvX35Ic+uePXv2UZMnT94+Y8aM7W2N25P5JEmS1OFmzJix+corr3zN/fffv3Tt2rV/yEFLh1Q0iYgEUFOzd59uSinOOOOMDdddd93KltZ58cUXj1y/fn3P++6776n9idkeZUmSJHW4iy66aP3FF1/8/EknnfRC6fTJkydvmzNnzhCAefPm9R80aFDD4MGDGydPnrztpptuGgJw++23D9i6dWsPgBkzZmydN2/eoJUrV/aEPMZ52bJle40//vznPz/05z//+cC77757eY8ePfYrZnuUJUmSuoveQxra/fJwrTRu3LhdV1xxxdry6ddcc83zs2bNGltbW1vXt2/fxptvvvlpgKuvvvr5008//bV1dXUTpkyZsn3kyJEvA0ycOPHFyy+/fOW0adNqGxsb6dWrV/ryl7/8+9ra2pdLl3vJJZeMGTly5EuTJk2aAPDOd75z07XXXruqLZsXlbq7Wz1zTEowf7/nl7qK/W9Falffic6OQJIAiHN4LKU0qbPjWLhw4TP19fXrOzuOarZw4cKh9fX1YyuVOfRCkiRJqsBEWZIkSarARFmSJKnramxsbHRcWjOKfdPYXLmJsiRJUte1aN26dQNNlvfW2NgY69atGwgsau49XvVCkiSpi2poaLhw9erV31i9evWx2EFarhFY1NDQ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\n" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsoAAADQCAYAAAAeREeUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3de5hdVXn48e87uZAEkpA7SZAEo0MyAkNJhKSpiiTaWDTaUi6GHwYBrbQ+aqWlVKBosRYs3gWpKMGKYAAFS1TAC7ZCBQyxoZFchACSkPv9wiXDrN8fa485OTmTmUlmmJOZ7+d5zjPn7HX23u/e66x93lln7b0jpYQkSZKkPdV0dgCSJElSNTJRliRJkiowUZYkSZIqMFGWJEmSKjBRliRJkiowUZYkSZIqMFFWu4uIsRGRIqJnZ8fSUSLixxEx+1Va16cjYn1ErH411tdRIpsTEZsi4tHOjke7RUTfiLgnIrZExB0VyrtDmz4vIh7cj/lOiYgVHRGTpM5notzNRcQzEfFyRAwtm/6/xRfj2M6JrHpExCcj4pbSaSmld6SUvvUqrPs1wMVAXUrpiHZa5jMR8UJEbC8e95eVD4uIWyNic5HUfqfCMgZHxLryxCIi3hURi4rl/k9E1JUU/wnwNuDIlNJJB7gNkyPiJxGxsYjjjogYWVL+sYhYHhFbI+L5iPhCpSQvIt5SfM4/3R77ICJqI+IHxfSNEXFfRBzTym16U0mdND1SRJxelM+OiMeKbVoREZ8t3aYinrsiYkdEPBsRs0rKzilb7s5i2ROLt/wlMAIYklI6oxWxji62c2MRy4fKyk+NiAVFrMsj4oNl5X8bEauLxPymiDikNdtRtowri22YXjLtkIi4ISLWFLHdExGjS8qvioj/i4iGiPhkS9vZXiLixIj472Lfr4mIj75a65Z0YEyUBfA08N6mFxFxHNC388LpPFXYYzYG2JBSWtvWGVvYlnellA4rHm8vK/s+sLpY93Dg2grzXwMsLlvf64HvAB8CDgfuAf6zJI4xwDMppR1t3ZYKBgFfB8YWy90GzCkpvwc4MaU0ADgWqAc+UhZvL+BLwCMVlr9f+4C83f8JHENOPB8FftCaDUop/bKkTg4D3glsB+4t3tIP+BgwFDgZmAb8XckirgNeLtZ7DvC1iHhDsezvlC37r4HlwIJi3jHAspRSQ2tiBW4hHzdGAKcBn4mIt8If9utdwL8DA4GzgM9HRH1R/qfApUX8Y4HXAp9qzXY0iYhx5OR+VVlcHwWmAMcDo4DNwFdKyp8ELgF+2MrtPGCROyHuJe+PIcDrgPv3OZOk6pFS8tGNH8AzwOXAr0umXQtcBiRgbDFtIPAfwDrg2WKemqKsRzHPevKX798U8/Ysmfeb5C+1lcCngR5F2euA/wK2FPPP3UesM4Hfkr/8fgFMKKZfCtxZ9t4vAV9uxfrPAx4CvgBsBD5dtpwZ5C/tXeSkZWEx/RfAhRWWsbnYB39cTH8OWAvMLlnmIcX++j2wBrgB6Fthe6cDLwCNxbpv3td+KKnPfwAeB15qqoMKdT69mX389qK8xz7qYQrwK+D9wIMl0z8M/LDkdU0R/zTgAuBF4JViWz5FTnbnkT9Tm4rnR5bM/35yIrqt2Kd/tY+YTgS2NVM2BPgpcH3Z9EuBzwI3l9b7geyDCu8bTG4LQ0r2yaXAU8AG4HZgcDPzzgHm7GPZHwfuKZ4fWnxOa0vKvw1c3cy8DwBXFs8/xZ6f8QvYR5sGDiueDytZ3teBbxfPRxTl/UrKfw28t3h+K/CZkrJpwOq2bAfwY+DPKPssA18DPlvy+jRgaYXtvwX4ZNm088jt+Cvk49ESYFpZXc4Bni8+r3cX008BVgCfKPbXM8A5JfN9pmnfNFMX44GfkI8/S4Ezm3uvDx8+Xv2HPcoCeBgYEBETIqIHuQfolrL3fIWccL4WeAvwPnKSAPABcu/XHwGTyD09pb4FNJCT4j8iJyIXFmVXkXtXBgFHsmfvzx9ERC1wG7lHbRjwI+CeiOhdTP+ziBhQvLcHcCb5C7ml9UPunVtO7jn8l9L1ppTuJX/RzU25N66+UnzFMh4nJ2W3At8F3lis8/8BX42Iw4r3XgPUAicU5aOBfypfYErpp8A7gOeLdZ/Xwn5o8l5ygnB4ar6H8DvF8ID7m3r6CpPJX9bfiogNEfHriHhLU2Gxb68jJ8WpbJlRPMpfH5tS+ia5p/lXxbZcSU4a55B7M48iJ9VfLZl/LflzNYD8WftCRJzYzPa8mfzPw+6VR8yKiK3k5KWe3KPXVDYGOB/45wrLOpB9UCmu1SmlDcXrjwDvIbehUeSE67rymSKiH7kd7Wt4T+k21wKvpJSWlZQvBN5QPlOx7W8m/+NLUReln/Fvsu82HWV/m54fWyxvDfkz+v6I6BERU8h13DRE5Q1FbKVxjoiIIa3Zjog4A3g5pfSjCvvkm8DUiBhV7MNzyEl1azUdC4YCVwLfj4jBRdm3yb36byAfK75QMt8RxTyjgdnA10uG3EwGNkYeirS2GA5yVLEth5KT5FuLZb4XuL68B11SJ+rsTN1H5z4oemTIPcT/Su5B/Qm55yiRfxrtQe6drCuZ76+AXxTPfw58qKTs7ezufRpRzNu3pPy9wAPF8/8g90Yd2UKcVwC3l7yuIfcOn1K8fhB4X/H8bcBTxfOW1n8e8PsW1v1J4Jayab9gzx7l35WUHVds/4iSaRvIiXEAO4BxJWVTgKebWfcpwIo27IdngPNb2J6p5KE1/YB/JA8xOLwo+3oR+wVAL+Bscs/10KL8b4GvlWx3aY/y+GLbTgF6F7E2Av9Y6f0V4joB2LSP8ruBj1aYfjy5N+5Nzcz3evI/ZEeUTPsBcFbx/Gb27FHe731Qtt4ji7p5b8m0xezZSzmS3JPbs2zec8lDG6KZZb+f3IvZFNObKHplS97zAYo2WqEt/aJs2icp+YyzjzZd0t6+AvQh9+ZvpKTnFngX+deShuLxgZKyp4AZJa97sftYs8/tIPdm/w44uuTzXtqjPICcpKdivb+hQo89zfcoP1+6z8lDZ84t6qkRGNRMG20ADi2ZdjtwRfF8WfH5eWOxv74MPFSUnQX8smx5/07R2+/Dh4/Of9ijrCbfBmaRvyz+o6xsKDnxebZk2rPk3hPIPWPPlZU1GUP+IlwV+cSozeQvguFF+SXk5PHRiPhtRJzfTHyjSpebUmos1tkUw63sHmc9i929yS2tn7LY99eakucvFDGWTzuM3AvcD3isJJ57i+mt0dJ+gBa2J6X0UErphZTSzpTSv5K/xN9UEuczKaVvppR2pZS+WyxvakSMIveIXtbMcpeQe9O+Sh7mMhR4gpzQ7SUi+kXEvxcnbG0F/hs4vOixJSLeEREPFydlbSb/1F5+0unryD2GH00p/bKZuH5H7nm9vpjnXUD/lNLcZnbRfu+DkriGkX8puT6ldFtJ0RjgrpK6X0wejjKibBGzgf9IKe3VYx0R7wGuBt6RUlpfTN5OThJLDSAPWyn3PvbdUw37btOQe2qPLt7zNfLY9BVFfOOBucV6epN7YC+JiNOaibXp+bZWbMenyMMYnm4m7q+Rk9Eh5GEc36dtPcory/b5s+R98RpgY0ppUzPzbUp7jr1vmg/y5+mulNKvU0ovFtvwxxExkPx5OLnp81B8Js4h91BLqgLVduKSOklK6dmIeJqcjFxQVrye3Os1hpz4QP6pfGXxfBX5i4SSsibPkXt0h6YKwwBSSqvJPUZExJ8AP42I/04pPVn21ufJPbUU741inU0x3AF8LiKOBP6c3Evb4vqbwmhmemvL22I9+YvzDSmllS29uYKW9gO0Pd7E7p/RHyf3BlZyErln7Ym8WvoCfSNftm50SumVlNKdwJ1FbIeThzf8upnlXUw+6e3klNLqiDiB3AMYxVUQvkdOtn6QUtoVEXeXxNk0hOCnwFUppW+3sI09gXHF82nApNh9ub2BwCsRcVxK6d0Hug8iYhA5Sf7PlNK/lM3/HLnH/6HmAo18pZNTyL/alJfNAG4ETksp/V9J0TKgZ0S8vvjHAPJwk/LhKFPJCdydza2/sK82TUrpWfLQjKbl3krufYU8BGNpSum+4vXSiPgheRjRD4uY6sm9rk1xrkkpbYiIF1vYjmnAkRHx18XrYcDtEXFNSuma4r2XpZQ2FnF9BfjniBha8k/FvoyOiChJlo8in5z5HDA4Ig5PKW2uMN+giDi0JFk+ClhUPH+cPdtk0/MolvtfKaW3tSI2SZ2hs7u0fXTug5KfLsmJxKTi+R+GXhSvbyGfyd6fnDAvYffQg4vICfSR5LHGP2PPn2l/QD65bgB5qMA44C1F2RkUwy7IPU8vUPysWhbnMeSf9aeRe4j/jjyWsHfJe35MHjbym7J597X+89jHcIDiPR8i/9RcUzLtF+w59KJ0CMLrctPaYxkrgD8pnn+JnCQML16PBv60mXWfwp5DL/a5H9jHiXpF+VHkoRe9yT1vf08+ma7pZLPB5HGzs8lDbv6S/LP6UPJJiEeUPD5KvmJE6ZCGicV8w8i9ireWlJXvp88WddanWO9d7B6y05/c0/oWckLxDmAnxRCJYp89Bfx9M9t5Ycn+rSMnWp8vXvcv24655PGmgw90H5A/Y48CX20mrr8tPjtjitfDgHeXvecTwH9XmPdU8hCeNzez7O+Shx0cWtTxFvI/ZKXv+Tq5p7p83k+y59CLltr0hGI/9iaPwV9PcXIfuX1tL+KN4vWTFMMvyMO7Vhf1Mog8zOPq1mwHuae4dP8/Rz6GHFaUzyH/gzWQ3D4+Qe4lblp2L/Ln7VbySb192PPE3oaiTnsVy93K7rbxw2K+QUX5m0vaaAP55Mfe5F9ndgDjS+ptE3loUS/yZ+2XJZ/FZ8nDO3oVjzdScoKuDx8+OvfR6QH46OQPQDOJFXsnyoPIyfK64svpn9h91YuexcF/A3lcZaWrXnyNnCxuIfcanl2UfZbcG7qdnPh8cB+x/jn5y3sL+UoZ5UnAucV6/75s+r7Wfx4tJ8pDyInyJmBBMe0X7H+i3Id88tTy4ot4MfCRZtZ9CiWJckv7obn6LCl/A7mHa0dRXz+j+Oeo5D1vAv6vqJP5ND/2d699V+ynbeTE8t/Zc9xm+X4aVezH7eQe0b8q+9z8DXlIy2by0KDvsjtRvrJ47/bSR8my5xTz7ij2yb8BfZrZjpvZ+2on+7UPyMl1KtZbGttRRXkN+WoVS4v99BQlV4Ao3rMEuKDCuh4gJ2Sly/1xSflg8jjuHeQrqswqm79PsS+nVVj2J9kzUW6pTX+MfCzYUdR5+WfoTHKP6jbyZ/8a9vxH8+NF/Wwt6uqQ1m7Hvo5f5Lb6HfKJoJuL2E4qq+tU9jivpC4fIg8d2kL+TL69LK5vFXFvAr5f2kbJw3HWFzGfWxbnReTj3CbypQtfU1J2DDkJX1fs758DJ+zrmOTDh49X7xEpJSRJkiTtyZP5JEmSpApMlCVJkqQKTJQlSZKkCkyUJUmSpAoO6DrKQ4YMTUcfPbZdApEkSeoqHnvssfUppdbeTEpV6oAS5aOPHsv8+fPbJxJJkqQuIiLK72ipg5BDLyRJkqQKTJQlSZKkCkyUJUmSpAoOaIyyJEmSqtdjjz02vGfPnt8AjsUO0nKNwKKGhoYLJ06cuLbSG0yUJUmSuqiePXt+44gjjpgwbNiwTTU1Namz46kmjY2NsW7durrVq1d/A5hZ6T3+ZyFJktR1HTts2LCtJsl7q6mpScOGDdtC7m2v/J5XMR5JkiS9umpMkptX7Jtm82ETZUmSJKkCxyhLkiR1E0OHUr9hQ/vlf0OG0LB+PQv39Z6ImPjud79749133/00wK5duxg+fHj9CSecsOOBBx54srXrGj169HHz589fPHLkyIbWvH/JkiW9zzzzzNdu2bKl57HHHrvze9/73tN9+vRpU++6PcqSJEndRHsmya1dXt++fRuXLl3ad/v27QFw1113DRgxYsSu9oyjko9//ONHfvjDH17z7LPPLho4cGDDl770paFtXYaJsiRJkjrUtGnTttxxxx2HA9x2222DTz/99I1NZWvWrOkxffr0cbW1tXX19fXjH3nkkb4Aq1ev7jF16tTXT5gwoW7WrFljUtrdGXz99dcPPu644yaMHz++btasWWMaGvbsZG5sbORXv/pV//e///2bAM4///wN99xzz+FtjdtEWZIkSR3q3HPP3Th37txBO3fujMWLF/ebMmXKjqaySy65ZFR9ff3OZcuWPXHVVVetnD179tEAl1566agpU6ZsX7x48RMzZ87cvGrVqt4ACxYs6HPnnXcOnj9//pIlS5Y8UVNTk2644YYhpetbs2ZNz/79+7/Sq1cvAMaOHfvymjVrerc1bhNlSZIkdaiTTz75hRUrVhxy4403Dp4+ffqW0rJHH320/wUXXLABYObMmds2b97cc8OGDT0efvjh/ueff/4GgLPPPnvLgAEDXgG49957+y9atKhffX39hPHjx9c9+OCDA5YvX35I6TJLe5+bRESbr/7hyXySJEnqcDNmzNh85ZVXvub+++9funbt2j/koPtKamtq9u7TTSnFGWecseG6665b2dy6jjjiiIZt27b12LVrF7169eKZZ57pPXz48DaPi7ZHWZIkSR3uoosuWn/xxRc/f9JJJ71QOn3y5Mnb5syZMwRg3rx5/QcNGtQwePDgxsmTJ2+76aabhgDcfvvtA7Zu3doDYMaMGVvnzZs3aOXKlT0hj3FetmzZHsMqampqmpY7COCmm24a8s53vnNzW2M2UZYkSeomhgyhVZdW64jljRs3btcVV1yxtnz6Nddc8/yCBQv61dbW1l122WWjb7755qcBrr766ucfeuihw+rq6ibcd999A0eOHPkywMSJE1+8/PLLV06bNq22tra27tRTT6197rnnepUv93Of+9yKr3zlK0ccddRRx27atKnnRz/60fVt3b6o1N3dWpMmTUrz58/f7/klSZK6ooh4LKU0qbPjWLhw4TP19fVtThC7k4ULFw6tr68fW6nMHmVJkiSpAhNlSZIkqQITZUmSJKkCE2VJkiSpggNKlHd1+F26JUmSpM5xQDccefxxiGivUKSD1/5fO0bt6jsekCRJ7cehF5IkSd3FUOoJJrbbYyj1La0yIia+5z3vObrp9a5duxg0aFD9W9/61te1JfTRo0cft2rVqlZ38n7mM58ZdtRRRx0bERPbMl8pE2VJkqTuYsOBjSbYn+X17du3cenSpX23b98eAHfdddeAESNGdPgA3re85S3bf/KTnywbNWrUy/u7DBNlSZIkdahp06ZtueOOOw4HuO222waffvrpG5vK1qxZ02P69Onjamtr6+rr68c/8sgjfQFWr17dY+rUqa+fMGFC3axZs8aU3iTv+uuvH3zcccdNGD9+fN2sWbPGNDTsfYPAqVOnvnDMMcfsd5IMJsqSJEnqYOeee+7GuXPnDtq5c2csXry435QpU3Y0lV1yySWj6uvrdy5btuyJq666auXs2bOPBrj00ktHTZkyZfvixYufmDlz5uZVq1b1BliwYEGfO++8c/D8+fOXLFmy5Imampp0ww03DOmIuE2UJUmS1KFOPvnkF1asWHHIjTfeOHj69OlbSsseffTR/hdccMEGgJkzZ27bvHlzzw0bNvR4+OGH+59//vkbAM4+++wtAwYMeAXg3nvv7b9o0aJ+9fX1E8aPH1/34IMPDli+fPkhHRF3+45TkSRJkiqYMWPG5iuvvPI1999//9K1a9f+IQctHVLRJCISQE3N3n26KaU444wzNlx33XUrOzJesEdZkiRJr4KLLrpo/cUXX/z8SSed9ELp9MmTJ2+bM2fOEIB58+b1HzRoUMPgwYMbJ0+evO2mm24aAnD77bcP2Lp1aw+AGTNmbJ03b96glStX9oQ8xnnZsmW9OyJmE2VJkqTuYgh7n/X2Ki1v3Lhxu6644oq15dOvueaa5xcsWNCvtra27rLLLht98803Pw1w9dVXP//QQw8dVldXN+G+++4bOHLkyJcBJk6c+OLll1++ctq0abW1tbV1p556au1zzz3Xq3y5n/70p4ePGDHi+DVr1vSur6+vO+uss8a0dfOiUnd3q2eOSQnm7/f8UlfhDUeqhDcckVQl4hweSylN6uw4Fi5c+Ex9ff36zo6jmi1cuHBofX392Epl9ihLkiRJFZgoS5IkSRWYKEuSJEkVmChLkiRJFZgoS5IkSRWYKEuSJEkVeGc+SZKk7uLOofW8vKH98r/eQxr4y/UL9/WWiJj47ne/e+Pdd9/9NMCuXbsYPnx4/QknnLDjgQceeLK1qxo9evRx8+fPXzxy5MhWXbt55syZRz/++OOH9urVK51wwgk7brnllmcPOeSQNl3R1R5lSZKk7qI9k+RWLq9v376NS5cu7bt9+/YAuOuuuwaMGDFiV7vGUcE555yzcfny5YuWLl362xdffDG++MUvDm3rMkyUJUmS1KGmTZu25Y477jgc4Lbbbht8+umnb2wqW7NmTY/p06ePq62trauvrx//yCOP9AVYvXp1j6lTp75+woQJdbNmzRpTepO866+/fvBxxx03Yfz48XWzZs0a09CwdyfzWWedtaWmpoaamhomTZq0Y8WKFW2+zbWJsiRJkjrUueeeu3Hu3LmDdu7cGYsXL+43ZcqUHU1ll1xyyaj6+vqdy5Yte+Kqq65aOXv27KMBLr300lFTpkzZvnjx4idmzpy5edWqVb0BFixY0OfOO+8cPH/+/CVLlix5oqamJt1www1Dmlv3Sy+9FHPnzh1y2mmnbWlr3CbKkiRJ6lAnn3zyCytWrDjkxhtvHDx9+vQ9EtZHH320/wUXXLABYObMmds2b97cc8OGDT0efvjh/ueff/4GgLPPPnvLgAEDXgG49957+y9atKhffX39hPHjx9c9+OCDA5YvX35Ic+uePXv2UZMnT94+Y8aM7W2N25P5JEmS1OFmzJix+corr3zN/fffv3Tt2rV/yEFLh1Q0iYgEUFOzd59uSinOOOOMDdddd93KltZ58cUXj1y/fn3P++6776n9idkeZUmSJHW4iy66aP3FF1/8/EknnfRC6fTJkydvmzNnzhCAefPm9R80aFDD4MGDGydPnrztpptuGgJw++23D9i6dWsPgBkzZmydN2/eoJUrV/aEPMZ52bJle40//vznPz/05z//+cC77757eY8ePfYrZnuUJUmSuoveQxra/fJwrTRu3LhdV1xxxdry6ddcc83zs2bNGltbW1vXt2/fxptvvvlpgKuvvvr5008//bV1dXUTpkyZsn3kyJEvA0ycOPHFyy+/fOW0adNqGxsb6dWrV/ryl7/8+9ra2pdLl3vJJZeMGTly5EuTJk2aAPDOd75z07XXXruqLZsXlbq7Wz1zTEowf7/nl7qK/W9Falffic6OQJIAiHN4LKU0qbPjWLhw4TP19fXrOzuOarZw4cKh9fX1YyuVOfRCkiRJqsBEWZIkSarARFmSJKnramxsbHRcWjOKfdPYXLmJsiRJUte1aN26dQNNlvfW2NgY69atGwgsau49XvVCkiSpi2poaLhw9erV31i9evWx2EFarhFY1NDQ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\n", + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" @@ -175,7 +275,9 @@ }, { "data": { - "text/plain": "''" + "text/plain": [ + "''" + ] }, "execution_count": 5, "metadata": {}, @@ -184,13 +286,7 @@ ], "source": [ "result.plot()\n" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", @@ -232,28 +328,145 @@ }, { "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." - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } + ] }, { "cell_type": "code", "execution_count": 7, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { - "text/plain": " timestamps labels uncertain mode_probability datetime\n2 1570446060 0 False 0.999575 2019-10-07 13:01:00+02:00\n7 1570878060 0 False 0.996115 2019-10-12 13:01:00+02:00\n8 1570964460 0 False 0.980702 2019-10-13 13:01:00+02:00\n17 1571742060 1 False 0.996703 2019-10-22 13:01:00+02:00\n22 1572177660 1 False 0.996604 2019-10-27 13:01:00+01:00\n23 1572264060 1 False 0.996323 2019-10-28 13:01:00+01:00\n32 1573041660 2 False 0.999899 2019-11-06 13:01:00+01:00\n36 1573387260 2 False 0.999897 2019-11-10 13:01:00+01:00\n39 1573646460 2 False 0.999187 2019-11-13 13:01:00+01:00", - "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
timestampslabelsuncertainmode_probabilitydatetime
215704460600False0.9995752019-10-07 13:01:00+02:00
715708780600False0.9961152019-10-12 13:01:00+02:00
815709644600False0.9807022019-10-13 13:01:00+02:00
1715717420601False0.9967032019-10-22 13:01:00+02:00
2215721776601False0.9966042019-10-27 13:01:00+01:00
2315722640601False0.9963232019-10-28 13:01:00+01:00
3215730416602False0.9998992019-11-06 13:01:00+01:00
3615733872602False0.9998972019-11-10 13:01:00+01:00
3915736464602False0.9991872019-11-13 13:01:00+01:00
\n
" + "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", + "
timestampslabelsuncertainmode_probabilitydatetime
215704460600False0.9995752019-10-07 13:01:00+02:00
715708780600False0.9961152019-10-12 13:01:00+02:00
815709644600False0.9807022019-10-13 13:01:00+02:00
1715717420601False0.9967032019-10-22 13:01:00+02:00
2215721776601False0.9966042019-10-27 13:01:00+01:00
2315722640601False0.9963232019-10-28 13:01:00+01:00
3215730416602False0.9998992019-11-06 13:01:00+01:00
3615733872602False0.9998972019-11-10 13:01:00+01:00
3915736464602False0.9991872019-11-13 13:01:00+01:00
\n", + "
" + ], + "text/plain": [ + " timestamps labels uncertain mode_probability datetime\n", + "2 1570446060 0 False 0.999575 2019-10-07 13:01:00+02:00\n", + "7 1570878060 0 False 0.996115 2019-10-12 13:01:00+02:00\n", + "8 1570964460 0 False 0.980702 2019-10-13 13:01:00+02:00\n", + "17 1571742060 1 False 0.996703 2019-10-22 13:01:00+02:00\n", + "22 1572177660 1 False 0.996604 2019-10-27 13:01:00+01:00\n", + "23 1572264060 1 False 0.996323 2019-10-28 13:01:00+01:00\n", + "32 1573041660 2 False 0.999899 2019-11-06 13:01:00+01:00\n", + "36 1573387260 2 False 0.999897 2019-11-10 13:01:00+01:00\n", + "39 1573646460 2 False 0.999187 2019-11-13 13:01:00+01:00" + ] }, "execution_count": 7, "metadata": {}, @@ -263,30 +476,28 @@ "source": [ "Top3meas_df = u0001_df[u0001_df.groupby('labels')['mode_probability'].rank(method='dense', ascending=False) <= 3]\n", "Top3meas_df" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", - "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\"." - ], "metadata": { - "collapsed": false, "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": 8, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [], "source": [ "modes = Top3meas_df['labels'].unique()\n", @@ -309,13 +520,7 @@ " severity=int(mode)+1,\n", " notes=\"This is a demo.\"\n", " )\n" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", @@ -333,7 +538,58 @@ "outputs": [ { "data": { - "text/plain": "[{'timestamp': 1570273260,\n 'label': 'bearing_failure',\n 'severity': 3,\n 'notes': 'Imaginary bearing failure',\n 'label_timestamp': '2022-02-09 14:08:51'},\n {'timestamp': 1570446060,\n 'label': 'Healthy',\n 'severity': 1,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1570878060,\n 'label': 'Healthy',\n 'severity': 1,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1570964460,\n 'label': 'Healthy',\n 'severity': 1,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1571742060,\n 'label': 'Transition',\n 'severity': 2,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1572177660,\n 'label': 'Transition',\n 'severity': 2,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1572264060,\n 'label': 'Transition',\n 'severity': 2,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1573041660,\n 'label': 'Faulty',\n 'severity': 3,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:07'},\n {'timestamp': 1573387260,\n 'label': 'Faulty',\n 'severity': 3,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:07'},\n {'timestamp': 1573646460,\n 'label': 'Faulty',\n 'severity': 3,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:07'}]" + "text/plain": [ + "[{'timestamp': 1570273260,\n", + " 'label': 'bearing_failure',\n", + " 'severity': 3,\n", + " 'notes': 'Imaginary bearing failure',\n", + " 'label_timestamp': '2022-02-09 14:08:51'},\n", + " {'timestamp': 1570446060,\n", + " 'label': 'Healthy',\n", + " 'severity': 1,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " {'timestamp': 1570878060,\n", + " 'label': 'Healthy',\n", + " 'severity': 1,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " {'timestamp': 1570964460,\n", + " 'label': 'Healthy',\n", + " 'severity': 1,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " {'timestamp': 1571742060,\n", + " 'label': 'Transition',\n", + " 'severity': 2,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " {'timestamp': 1572177660,\n", + " 'label': 'Transition',\n", + " 'severity': 2,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " {'timestamp': 1572264060,\n", + " 'label': 'Transition',\n", + " 'severity': 2,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " {'timestamp': 1573041660,\n", + " 'label': 'Faulty',\n", + " 'severity': 3,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:07'},\n", + " {'timestamp': 1573387260,\n", + " 'label': 'Faulty',\n", + " 'severity': 3,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:07'},\n", + " {'timestamp': 1573646460,\n", + " 'label': 'Faulty',\n", + " 'severity': 3,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:07'}]" + ] }, "execution_count": 9, "metadata": {}, @@ -358,7 +614,12 @@ "outputs": [ { "data": { - "text/plain": "{'label': 'bearing_failure',\n 'severity': 3,\n 'notes': 'Imaginary bearing failure',\n 'label_timestamp': '2022-02-09 14:08:51'}" + "text/plain": [ + "{'label': 'bearing_failure',\n", + " 'severity': 3,\n", + " 'notes': 'Imaginary bearing failure',\n", + " 'label_timestamp': '2022-02-09 14:08:51'}" + ] }, "execution_count": 10, "metadata": {}, @@ -386,7 +647,58 @@ "outputs": [ { "data": { - "text/plain": "[{'timestamp': 1570273260,\n 'label': 'healthy',\n 'severity': 0,\n 'notes': 'This was an OK measurement',\n 'label_timestamp': '2022-02-09 14:08:51'},\n {'timestamp': 1570446060,\n 'label': 'Healthy',\n 'severity': 1,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1570878060,\n 'label': 'Healthy',\n 'severity': 1,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1570964460,\n 'label': 'Healthy',\n 'severity': 1,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1571742060,\n 'label': 'Transition',\n 'severity': 2,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1572177660,\n 'label': 'Transition',\n 'severity': 2,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1572264060,\n 'label': 'Transition',\n 'severity': 2,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:06'},\n {'timestamp': 1573041660,\n 'label': 'Faulty',\n 'severity': 3,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:07'},\n {'timestamp': 1573387260,\n 'label': 'Faulty',\n 'severity': 3,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:07'},\n {'timestamp': 1573646460,\n 'label': 'Faulty',\n 'severity': 3,\n 'notes': 'This is a demo.',\n 'label_timestamp': '2022-02-09 14:09:07'}]" + "text/plain": [ + "[{'timestamp': 1570273260,\n", + " 'label': 'healthy',\n", + " 'severity': 0,\n", + " 'notes': 'This was an OK measurement',\n", + " 'label_timestamp': '2022-02-09 14:08:51'},\n", + " {'timestamp': 1570446060,\n", + " 'label': 'Healthy',\n", + " 'severity': 1,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " {'timestamp': 1570878060,\n", + " 'label': 'Healthy',\n", + " 'severity': 1,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " {'timestamp': 1570964460,\n", + " 'label': 'Healthy',\n", + " 'severity': 1,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " {'timestamp': 1571742060,\n", + " 'label': 'Transition',\n", + " 'severity': 2,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " {'timestamp': 1572177660,\n", + " 'label': 'Transition',\n", + " 'severity': 2,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " {'timestamp': 1572264060,\n", + " 'label': 'Transition',\n", + " 'severity': 2,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " {'timestamp': 1573041660,\n", + " 'label': 'Faulty',\n", + " 'severity': 3,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:07'},\n", + " {'timestamp': 1573387260,\n", + " 'label': 'Faulty',\n", + " 'severity': 3,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:07'},\n", + " {'timestamp': 1573646460,\n", + " 'label': 'Faulty',\n", + " 'severity': 3,\n", + " 'notes': 'This is a demo.',\n", + " 'label_timestamp': '2022-02-09 14:09:07'}]" + ] }, "execution_count": 11, "metadata": {}, @@ -428,7 +740,9 @@ "outputs": [ { "data": { - "text/plain": "[]" + "text/plain": [ + "[]" + ] }, "execution_count": 12, "metadata": {}, @@ -436,8 +750,10 @@ }, { "data": { - "text/plain": "
", - "image/png": "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\n" + "image/png": "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\n", + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" @@ -487,34 +803,37 @@ }, { "cell_type": "markdown", - "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." - ], "metadata": { - "collapsed": false, "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": 14, - "outputs": [], - "source": [ - "session.delete_label(SOURCE_ID, first_measurement)" - ], "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } - } + }, + "outputs": [], + "source": [ + "session.delete_label(SOURCE_ID, first_measurement)" + ] }, { "cell_type": "code", "execution_count": 15, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "name": "stdout", @@ -527,16 +846,15 @@ "source": [ "labels = session.list_labels(SOURCE_ID)\n", "print(f\"Currently, there are {len(labels)} labels\")" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, "source": [ "## Label Propagation\n", "\n", @@ -548,21 +866,22 @@ "\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" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } + ] }, { "cell_type": "code", "execution_count": 16, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { - "text/plain": "{'request_id': 'a36badb8f2788c247ae193acb3eaeb3e', 'request_status': 'queued'}" + "text/plain": [ + "{'request_id': 'a36badb8f2788c247ae193acb3eaeb3e', 'request_status': 'queued'}" + ] }, "execution_count": 16, "metadata": {}, @@ -574,33 +893,33 @@ "labelProp_u0001 = session.request_analysis(SOURCE_ID, \"LabelPropagation\", params)\n", "labelProp_request_id = labelProp_u0001[\"request_id\"]\n", "labelProp_u0001" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", - "source": [ - "We check the status of the analysis to ensure the analysis is finished." - ], "metadata": { - "collapsed": false, "pycharm": { "name": "#%% md\n" } - } + }, + "source": [ + "We check the status of the analysis to ensure the analysis is finished." + ] }, { "cell_type": "code", "execution_count": 17, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { - "text/plain": "'successful'" + "text/plain": [ + "'successful'" + ] }, "execution_count": 17, "metadata": {}, @@ -608,37 +927,38 @@ } ], "source": [ + "session.wait_for_analyses([labelProp_request_id])\n", "out_status = session.get_analysis_status(labelProp_request_id)\n", "out_status" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", - "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." - ], "metadata": { - "collapsed": false, "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": 18, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { - "text/plain": "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" + "text/plain": [ + "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" + ] }, "execution_count": 18, "metadata": {}, @@ -648,16 +968,15 @@ "source": [ "labelprop_output = session.get_analysis_results(request_id=labelProp_request_id)\n", "labelprop_output.keys()" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", + "metadata": { + "pycharm": { + "name": "#%% md\n" + } + }, "source": [ "The output is a dictionary that contains seven key elements.\n", "These elements are:\n", @@ -668,59 +987,628 @@ "- `\"inputs\"` includes the input information for the request analysis.\n", "- `\"error_info\"` includes the error information in case the analysis fails and it is empty if the analysis is successful.\n", "- `\"debug_info\"` includes debugging (log) information related to the failed analysis." - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%% md\n" - } - } + ] }, { "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." - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 19, - "outputs": [], - "source": [ - "labelprop_results = parse_results(labelprop_output, \"Europe/Stockholm\", \"s\")\n" - ], "metadata": { - "collapsed": false, "pycharm": { "name": "#%%\n" } - } + }, + "outputs": [], + "source": [ + "labelprop_results = parse_results(labelprop_output, \"Europe/Stockholm\", \"s\")\n" + ] }, { "cell_type": "markdown", - "source": [ - "Once we had parsed the results, we can export them to a dataframe for ease of manipulation" - ], "metadata": { - "collapsed": false, "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": 20, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { - "text/plain": " label severity notes label_timestamp \\\n0 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n1 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n2 Healthy 1 This is a demo. 2022-02-09 14:09:06 \n3 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n4 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n5 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n6 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n7 Healthy 1 This is a demo. 2022-02-09 14:09:06 \n8 Healthy 1 This is a demo. 2022-02-09 14:09:06 \n9 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n10 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n11 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n12 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n13 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n14 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n15 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n16 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n17 Transition 2 This is a demo. 2022-02-09 14:09:06 \n18 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n19 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n20 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n21 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n22 Transition 2 This is a demo. 2022-02-09 14:09:06 \n23 Transition 2 This is a demo. 2022-02-09 14:09:06 \n24 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n25 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n26 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n27 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n28 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n29 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n30 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n31 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n32 Faulty 3 This is a demo. 2022-02-09 14:09:07 \n33 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n34 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n35 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n36 Faulty 3 This is a demo. 2022-02-09 14:09:07 \n37 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n38 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n39 Faulty 3 This is a demo. 2022-02-09 14:09:07 \n40 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n41 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n42 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n43 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n44 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n45 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n46 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n47 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n48 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n\n timestamp datetime \n0 1570273260 2019-10-05 13:01:00+02:00 \n1 1570359660 2019-10-06 13:01:00+02:00 \n2 1570446060 2019-10-07 13:01:00+02:00 \n3 1570532460 2019-10-08 13:01:00+02:00 \n4 1570618860 2019-10-09 13:01:00+02:00 \n5 1570705260 2019-10-10 13:01:00+02:00 \n6 1570791660 2019-10-11 13:01:00+02:00 \n7 1570878060 2019-10-12 13:01:00+02:00 \n8 1570964460 2019-10-13 13:01:00+02:00 \n9 1571050860 2019-10-14 13:01:00+02:00 \n10 1571137260 2019-10-15 13:01:00+02:00 \n11 1571223660 2019-10-16 13:01:00+02:00 \n12 1571310060 2019-10-17 13:01:00+02:00 \n13 1571396460 2019-10-18 13:01:00+02:00 \n14 1571482860 2019-10-19 13:01:00+02:00 \n15 1571569260 2019-10-20 13:01:00+02:00 \n16 1571655660 2019-10-21 13:01:00+02:00 \n17 1571742060 2019-10-22 13:01:00+02:00 \n18 1571828460 2019-10-23 13:01:00+02:00 \n19 1571914860 2019-10-24 13:01:00+02:00 \n20 1572001260 2019-10-25 13:01:00+02:00 \n21 1572087660 2019-10-26 13:01:00+02:00 \n22 1572177660 2019-10-27 13:01:00+01:00 \n23 1572264060 2019-10-28 13:01:00+01:00 \n24 1572350460 2019-10-29 13:01:00+01:00 \n25 1572436860 2019-10-30 13:01:00+01:00 \n26 1572523260 2019-10-31 13:01:00+01:00 \n27 1572609660 2019-11-01 13:01:00+01:00 \n28 1572696060 2019-11-02 13:01:00+01:00 \n29 1572782460 2019-11-03 13:01:00+01:00 \n30 1572868860 2019-11-04 13:01:00+01:00 \n31 1572955260 2019-11-05 13:01:00+01:00 \n32 1573041660 2019-11-06 13:01:00+01:00 \n33 1573128060 2019-11-07 13:01:00+01:00 \n34 1573214460 2019-11-08 13:01:00+01:00 \n35 1573300860 2019-11-09 13:01:00+01:00 \n36 1573387260 2019-11-10 13:01:00+01:00 \n37 1573473660 2019-11-11 13:01:00+01:00 \n38 1573560060 2019-11-12 13:01:00+01:00 \n39 1573646460 2019-11-13 13:01:00+01:00 \n40 1573732860 2019-11-14 13:01:00+01:00 \n41 1573819260 2019-11-15 13:01:00+01:00 \n42 1573905660 2019-11-16 13:01:00+01:00 \n43 1573992060 2019-11-17 13:01:00+01:00 \n44 1574078460 2019-11-18 13:01:00+01:00 \n45 1574164860 2019-11-19 13:01:00+01:00 \n46 1574251260 2019-11-20 13:01:00+01:00 \n47 1574337660 2019-11-21 13:01:00+01:00 \n48 1574424060 2019-11-22 13:01:00+01:00 ", - "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
labelseveritynoteslabel_timestamptimestampdatetime
0Healthy-1Added by label propagation2022-02-09 14:09:5215702732602019-10-05 13:01:00+02:00
1Healthy-1Added by label propagation2022-02-09 14:09:5215703596602019-10-06 13:01:00+02:00
2Healthy1This is a demo.2022-02-09 14:09:0615704460602019-10-07 13:01:00+02:00
3Healthy-1Added by label propagation2022-02-09 14:09:5215705324602019-10-08 13:01:00+02:00
4Healthy-1Added by label propagation2022-02-09 14:09:5215706188602019-10-09 13:01:00+02:00
5Healthy-1Added by label propagation2022-02-09 14:09:5215707052602019-10-10 13:01:00+02:00
6Healthy-1Added by label propagation2022-02-09 14:09:5215707916602019-10-11 13:01:00+02:00
7Healthy1This is a demo.2022-02-09 14:09:0615708780602019-10-12 13:01:00+02:00
8Healthy1This is a demo.2022-02-09 14:09:0615709644602019-10-13 13:01:00+02:00
9Healthy-1Added by label propagation2022-02-09 14:09:5215710508602019-10-14 13:01:00+02:00
10Healthy-1Added by label propagation2022-02-09 14:09:5215711372602019-10-15 13:01:00+02:00
11Healthy-1Added by label propagation2022-02-09 14:09:5215712236602019-10-16 13:01:00+02:00
12Healthy-1Added by label propagation2022-02-09 14:09:5215713100602019-10-17 13:01:00+02:00
13Healthy-1Added by label propagation2022-02-09 14:09:5215713964602019-10-18 13:01:00+02:00
14Healthy-1Added by label propagation2022-02-09 14:09:5215714828602019-10-19 13:01:00+02:00
15Healthy-1Added by label propagation2022-02-09 14:09:5215715692602019-10-20 13:01:00+02:00
16Transition-1Added by label propagation2022-02-09 14:09:5215716556602019-10-21 13:01:00+02:00
17Transition2This is a demo.2022-02-09 14:09:0615717420602019-10-22 13:01:00+02:00
18Transition-1Added by label propagation2022-02-09 14:09:5215718284602019-10-23 13:01:00+02:00
19Transition-1Added by label propagation2022-02-09 14:09:5215719148602019-10-24 13:01:00+02:00
20Transition-1Added by label propagation2022-02-09 14:09:5215720012602019-10-25 13:01:00+02:00
21Transition-1Added by label propagation2022-02-09 14:09:5215720876602019-10-26 13:01:00+02:00
22Transition2This is a demo.2022-02-09 14:09:0615721776602019-10-27 13:01:00+01:00
23Transition2This is a demo.2022-02-09 14:09:0615722640602019-10-28 13:01:00+01:00
24Faulty-1Added by label propagation2022-02-09 14:09:5215723504602019-10-29 13:01:00+01:00
25Faulty-1Added by label propagation2022-02-09 14:09:5215724368602019-10-30 13:01:00+01:00
26Faulty-1Added by label propagation2022-02-09 14:09:5215725232602019-10-31 13:01:00+01:00
27Faulty-1Added by label propagation2022-02-09 14:09:5215726096602019-11-01 13:01:00+01:00
28Faulty-1Added by label propagation2022-02-09 14:09:5215726960602019-11-02 13:01:00+01:00
29Faulty-1Added by label propagation2022-02-09 14:09:5215727824602019-11-03 13:01:00+01:00
30Faulty-1Added by label propagation2022-02-09 14:09:5215728688602019-11-04 13:01:00+01:00
31Faulty-1Added by label propagation2022-02-09 14:09:5215729552602019-11-05 13:01:00+01:00
32Faulty3This is a demo.2022-02-09 14:09:0715730416602019-11-06 13:01:00+01:00
33Faulty-1Added by label propagation2022-02-09 14:09:5215731280602019-11-07 13:01:00+01:00
34Faulty-1Added by label propagation2022-02-09 14:09:5215732144602019-11-08 13:01:00+01:00
35Faulty-1Added by label propagation2022-02-09 14:09:5215733008602019-11-09 13:01:00+01:00
36Faulty3This is a demo.2022-02-09 14:09:0715733872602019-11-10 13:01:00+01:00
37Faulty-1Added by label propagation2022-02-09 14:09:5215734736602019-11-11 13:01:00+01:00
38Faulty-1Added by label propagation2022-02-09 14:09:5215735600602019-11-12 13:01:00+01:00
39Faulty3This is a demo.2022-02-09 14:09:0715736464602019-11-13 13:01:00+01:00
40Faulty-1Added by label propagation2022-02-09 14:09:5215737328602019-11-14 13:01:00+01:00
41Faulty-1Added by label propagation2022-02-09 14:09:5215738192602019-11-15 13:01:00+01:00
42Faulty-1Added by label propagation2022-02-09 14:09:5215739056602019-11-16 13:01:00+01:00
43Faulty-1Added by label propagation2022-02-09 14:09:5215739920602019-11-17 13:01:00+01:00
44Faulty-1Added by label propagation2022-02-09 14:09:5215740784602019-11-18 13:01:00+01:00
45Faulty-1Added by label propagation2022-02-09 14:09:5215741648602019-11-19 13:01:00+01:00
46Faulty-1Added by label propagation2022-02-09 14:09:5215742512602019-11-20 13:01:00+01:00
47Faulty-1Added by label propagation2022-02-09 14:09:5215743376602019-11-21 13:01:00+01:00
48Faulty-1Added by label propagation2022-02-09 14:09:5215744240602019-11-22 13:01:00+01:00
\n
" + "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", + "
labelseveritynoteslabel_timestamptimestampdatetime
0Healthy-1Added by label propagation2022-02-09 14:09:5215702732602019-10-05 13:01:00+02:00
1Healthy-1Added by label propagation2022-02-09 14:09:5215703596602019-10-06 13:01:00+02:00
2Healthy1This is a demo.2022-02-09 14:09:0615704460602019-10-07 13:01:00+02:00
3Healthy-1Added by label propagation2022-02-09 14:09:5215705324602019-10-08 13:01:00+02:00
4Healthy-1Added by label propagation2022-02-09 14:09:5215706188602019-10-09 13:01:00+02:00
5Healthy-1Added by label propagation2022-02-09 14:09:5215707052602019-10-10 13:01:00+02:00
6Healthy-1Added by label propagation2022-02-09 14:09:5215707916602019-10-11 13:01:00+02:00
7Healthy1This is a demo.2022-02-09 14:09:0615708780602019-10-12 13:01:00+02:00
8Healthy1This is a demo.2022-02-09 14:09:0615709644602019-10-13 13:01:00+02:00
9Healthy-1Added by label propagation2022-02-09 14:09:5215710508602019-10-14 13:01:00+02:00
10Healthy-1Added by label propagation2022-02-09 14:09:5215711372602019-10-15 13:01:00+02:00
11Healthy-1Added by label propagation2022-02-09 14:09:5215712236602019-10-16 13:01:00+02:00
12Healthy-1Added by label propagation2022-02-09 14:09:5215713100602019-10-17 13:01:00+02:00
13Healthy-1Added by label propagation2022-02-09 14:09:5215713964602019-10-18 13:01:00+02:00
14Healthy-1Added by label propagation2022-02-09 14:09:5215714828602019-10-19 13:01:00+02:00
15Healthy-1Added by label propagation2022-02-09 14:09:5215715692602019-10-20 13:01:00+02:00
16Transition-1Added by label propagation2022-02-09 14:09:5215716556602019-10-21 13:01:00+02:00
17Transition2This is a demo.2022-02-09 14:09:0615717420602019-10-22 13:01:00+02:00
18Transition-1Added by label propagation2022-02-09 14:09:5215718284602019-10-23 13:01:00+02:00
19Transition-1Added by label propagation2022-02-09 14:09:5215719148602019-10-24 13:01:00+02:00
20Transition-1Added by label propagation2022-02-09 14:09:5215720012602019-10-25 13:01:00+02:00
21Transition-1Added by label propagation2022-02-09 14:09:5215720876602019-10-26 13:01:00+02:00
22Transition2This is a demo.2022-02-09 14:09:0615721776602019-10-27 13:01:00+01:00
23Transition2This is a demo.2022-02-09 14:09:0615722640602019-10-28 13:01:00+01:00
24Faulty-1Added by label propagation2022-02-09 14:09:5215723504602019-10-29 13:01:00+01:00
25Faulty-1Added by label propagation2022-02-09 14:09:5215724368602019-10-30 13:01:00+01:00
26Faulty-1Added by label propagation2022-02-09 14:09:5215725232602019-10-31 13:01:00+01:00
27Faulty-1Added by label propagation2022-02-09 14:09:5215726096602019-11-01 13:01:00+01:00
28Faulty-1Added by label propagation2022-02-09 14:09:5215726960602019-11-02 13:01:00+01:00
29Faulty-1Added by label propagation2022-02-09 14:09:5215727824602019-11-03 13:01:00+01:00
30Faulty-1Added by label propagation2022-02-09 14:09:5215728688602019-11-04 13:01:00+01:00
31Faulty-1Added by label propagation2022-02-09 14:09:5215729552602019-11-05 13:01:00+01:00
32Faulty3This is a demo.2022-02-09 14:09:0715730416602019-11-06 13:01:00+01:00
33Faulty-1Added by label propagation2022-02-09 14:09:5215731280602019-11-07 13:01:00+01:00
34Faulty-1Added by label propagation2022-02-09 14:09:5215732144602019-11-08 13:01:00+01:00
35Faulty-1Added by label propagation2022-02-09 14:09:5215733008602019-11-09 13:01:00+01:00
36Faulty3This is a demo.2022-02-09 14:09:0715733872602019-11-10 13:01:00+01:00
37Faulty-1Added by label propagation2022-02-09 14:09:5215734736602019-11-11 13:01:00+01:00
38Faulty-1Added by label propagation2022-02-09 14:09:5215735600602019-11-12 13:01:00+01:00
39Faulty3This is a demo.2022-02-09 14:09:0715736464602019-11-13 13:01:00+01:00
40Faulty-1Added by label propagation2022-02-09 14:09:5215737328602019-11-14 13:01:00+01:00
41Faulty-1Added by label propagation2022-02-09 14:09:5215738192602019-11-15 13:01:00+01:00
42Faulty-1Added by label propagation2022-02-09 14:09:5215739056602019-11-16 13:01:00+01:00
43Faulty-1Added by label propagation2022-02-09 14:09:5215739920602019-11-17 13:01:00+01:00
44Faulty-1Added by label propagation2022-02-09 14:09:5215740784602019-11-18 13:01:00+01:00
45Faulty-1Added by label propagation2022-02-09 14:09:5215741648602019-11-19 13:01:00+01:00
46Faulty-1Added by label propagation2022-02-09 14:09:5215742512602019-11-20 13:01:00+01:00
47Faulty-1Added by label propagation2022-02-09 14:09:5215743376602019-11-21 13:01:00+01:00
48Faulty-1Added by label propagation2022-02-09 14:09:5215744240602019-11-22 13:01:00+01:00
\n", + "
" + ], + "text/plain": [ + " label severity notes label_timestamp \\\n", + "0 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", + "1 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", + "2 Healthy 1 This is a demo. 2022-02-09 14:09:06 \n", + "3 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", + "4 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", + "5 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", + "6 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", + "7 Healthy 1 This is a demo. 2022-02-09 14:09:06 \n", + "8 Healthy 1 This is a demo. 2022-02-09 14:09:06 \n", + "9 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", + "10 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", + "11 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", + "12 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", + "13 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", + "14 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", + "15 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", + "16 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n", + "17 Transition 2 This is a demo. 2022-02-09 14:09:06 \n", + "18 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n", + "19 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n", + "20 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n", + "21 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n", + "22 Transition 2 This is a demo. 2022-02-09 14:09:06 \n", + "23 Transition 2 This is a demo. 2022-02-09 14:09:06 \n", + "24 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "25 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "26 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "27 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "28 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "29 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "30 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "31 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "32 Faulty 3 This is a demo. 2022-02-09 14:09:07 \n", + "33 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "34 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "35 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "36 Faulty 3 This is a demo. 2022-02-09 14:09:07 \n", + "37 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "38 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "39 Faulty 3 This is a demo. 2022-02-09 14:09:07 \n", + "40 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "41 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "42 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "43 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "44 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "45 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "46 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "47 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "48 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "\n", + " timestamp datetime \n", + "0 1570273260 2019-10-05 13:01:00+02:00 \n", + "1 1570359660 2019-10-06 13:01:00+02:00 \n", + "2 1570446060 2019-10-07 13:01:00+02:00 \n", + "3 1570532460 2019-10-08 13:01:00+02:00 \n", + "4 1570618860 2019-10-09 13:01:00+02:00 \n", + "5 1570705260 2019-10-10 13:01:00+02:00 \n", + "6 1570791660 2019-10-11 13:01:00+02:00 \n", + "7 1570878060 2019-10-12 13:01:00+02:00 \n", + "8 1570964460 2019-10-13 13:01:00+02:00 \n", + "9 1571050860 2019-10-14 13:01:00+02:00 \n", + "10 1571137260 2019-10-15 13:01:00+02:00 \n", + "11 1571223660 2019-10-16 13:01:00+02:00 \n", + "12 1571310060 2019-10-17 13:01:00+02:00 \n", + "13 1571396460 2019-10-18 13:01:00+02:00 \n", + "14 1571482860 2019-10-19 13:01:00+02:00 \n", + "15 1571569260 2019-10-20 13:01:00+02:00 \n", + "16 1571655660 2019-10-21 13:01:00+02:00 \n", + "17 1571742060 2019-10-22 13:01:00+02:00 \n", + "18 1571828460 2019-10-23 13:01:00+02:00 \n", + "19 1571914860 2019-10-24 13:01:00+02:00 \n", + "20 1572001260 2019-10-25 13:01:00+02:00 \n", + "21 1572087660 2019-10-26 13:01:00+02:00 \n", + "22 1572177660 2019-10-27 13:01:00+01:00 \n", + "23 1572264060 2019-10-28 13:01:00+01:00 \n", + "24 1572350460 2019-10-29 13:01:00+01:00 \n", + "25 1572436860 2019-10-30 13:01:00+01:00 \n", + "26 1572523260 2019-10-31 13:01:00+01:00 \n", + "27 1572609660 2019-11-01 13:01:00+01:00 \n", + "28 1572696060 2019-11-02 13:01:00+01:00 \n", + "29 1572782460 2019-11-03 13:01:00+01:00 \n", + "30 1572868860 2019-11-04 13:01:00+01:00 \n", + "31 1572955260 2019-11-05 13:01:00+01:00 \n", + "32 1573041660 2019-11-06 13:01:00+01:00 \n", + "33 1573128060 2019-11-07 13:01:00+01:00 \n", + "34 1573214460 2019-11-08 13:01:00+01:00 \n", + "35 1573300860 2019-11-09 13:01:00+01:00 \n", + "36 1573387260 2019-11-10 13:01:00+01:00 \n", + "37 1573473660 2019-11-11 13:01:00+01:00 \n", + "38 1573560060 2019-11-12 13:01:00+01:00 \n", + "39 1573646460 2019-11-13 13:01:00+01:00 \n", + "40 1573732860 2019-11-14 13:01:00+01:00 \n", + "41 1573819260 2019-11-15 13:01:00+01:00 \n", + "42 1573905660 2019-11-16 13:01:00+01:00 \n", + "43 1573992060 2019-11-17 13:01:00+01:00 \n", + "44 1574078460 2019-11-18 13:01:00+01:00 \n", + "45 1574164860 2019-11-19 13:01:00+01:00 \n", + "46 1574251260 2019-11-20 13:01:00+01:00 \n", + "47 1574337660 2019-11-21 13:01:00+01:00 \n", + "48 1574424060 2019-11-22 13:01:00+01:00 " + ] }, "execution_count": 20, "metadata": {}, @@ -729,34 +1617,34 @@ ], "source": [ "labelprop_results.to_df()\n" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", - "source": [ - "We can also display the results and visualize the labels given to the different measurements." - ], "metadata": { - "collapsed": false, "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": 21, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { - "text/plain": "
", - "image/png": "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tmzZkvnz53deuHBh++S6xcXF+5YtW7Z04sSJNTfffHOxJE2dOrXXnXfeuW758uVLX3zxxRUdOnSoT65fVFTk3/ve994ZP378e8uXL186adKkzanHvuyyy/pddNFFNa+99trSc845Z/M3v/nNvsllNTU1eQsXLlw+e/bsVddee+3Rzf1chGQAAAActL59++457bTTdiVf33vvvUcmEomy8vLyxJo1a9ovWrSoMLnsggsu2CxJI0aM2Ll+/foCSTrppJN2TJkype+NN97Yc/Pmzbl5eU2fSVJZWdlx8uTJ70nSFVdcsenll1/ulFw2duzYLTk5ORo5cuTuDRs2tGvu5yIkAwAA4KAVFhZ+cOZ38eLFBdOnTy9+5plnXnvttdeWnnrqqdt2795tKeu6JOXm5qqurs4k6Wc/+9k706dPX7djx46cESNGlC1evLggHXWlXkzo3vzrCgnJAAAASIstW7bkduzYsa5r165169aty3/mmWc6N7bNkiVLCkaOHLn7Jz/5SXV5efmuqqqq9qnLO3XqVLdjx44GM+vxxx+/45577jlSku66665uI0aM2J6eT0JIBgAAOPwUdqptifv71Kc+tWvw4MHvl5SUlF900UX9hg8fvqOxbW666abiwYMHl5eUlCQ6d+5cN378+G2py8eMGbN96dKlHcrKyhIzZ87smrrszjvvfOPee+/tXlJSknj44Ye73n777evT8TkkyQ7m9HPSiZ3NF5yUrlKAw8SocXFX0KZtKE7EXQKANqb4ipsWuvuJcdZQWVm5tqKioibOGlqjysrK7hUVFf0bWsaZZAAAACCCkAwAAABEEJIBAACACEIyAAAAEEFIBgAAACIIyQAAAEBE05/7BwAAgBZh4703VvieXWnLcVbQobbHxf+38uPWyc3NHT548ODdydePPPLIqiFDhuxt7rFGjBgxZOrUqetPPfXUXd///vd73XzzzdUHU3OmEZIBAAAOM+kMyE3dX0FBQf3y5cuXpvO406ZNO6qlhmSmWwAAAOCgrFixot3w4cOHJBKJskQiUTZv3ryOkvTYY491+vSnPz0oud7EiROPmTZtWrfUba+44oqj9+zZk1NaWpoYO3bsgCuvvLL3DTfc0DO5/Fvf+tbRP/7xj3sqJpxJBgAAQKOSgVaS+vbtu2fevHmre/fuXfvss8++1qFDB1+8eHHB+eef/4mqqqplTdnfHXfc8dZ9993XM3l2esWKFe3Gjx8/8Ec/+tGGuro6zZkzp+vLL7/cpH1lAiEZAAAAjWpousXevXvtkksu6bd06dLCnJwcrVu3ruBg9z9kyJC9Xbp0qX3++ecL33nnnfzy8vJdvXr1qjv0yg8OIRkAAAAH5cYbbyzu2bPnvtmzZ79eX1+vwsLC4ZKUn5/v9fX1H6y3Z88ea8r+Jk2aVDNjxozuGzZsyJ80adKmDJXdJMxJBgAAwEHZunVr7lFHHbUvNzdXd9xxR7e6uuDE78CBA/esWrWqcPfu3bZp06bc5557rnND2+fl5XlqgP7617++Zf78+UdUVlZ2nDBhwtYsfYwGcSYZAADgMGMFHWrTfQu4g9nuqquu2jBhwoSBc+bM6XryySdvLywsrJekQYMG7Tv77LM3l5WVlQ8YMOD98vLyXQ1t/7WvfW1jWVlZYujQobseffTR19u3b++jRo3a1qVLl7q8vHhjqrn7QW98YmfzBSelsRrgcDBqXNwVtGkbihNxlwCgjSm+4qaF7n5inDVUVlauraioqImzhmyoq6tTeXl54qGHHlp97LHH7sn08SorK7tXVFT0b2gZ0y0AAAAQu4ULF7bv16/fsaeccsq2bATkxjDdAgAAALEbPnz4+2+++ebiuOtI4kwyAABAy1dfX1/fpDtEoGnC9qw/0HJCMgAAQMtXtXHjxiMIyulRX19vGzduPEJS1YHWYboFAABAC1dbW3tpdXX1jOrq6qHiJGc61Euqqq2tvfRAKxCSAQAAWrjhw4dvkDQ27jraEn4TAQAAACIIyQAAAEAEIRkAAACIICQDAAAAEYRkAAAAIIKQDAAAAEQQkgEAAIAIQjIAAAAQQUgGAAAAIgjJAAAAQAQhGQAAAIggJAMAAAARhGQAAAAggpAMAAAARBCSAQAAgAhCMgAAABBBSAYAAAAiCMkAAABABCEZAAAAiCAkAwAAABGEZAAAACCCkAwAAABEEJIBAACACEIyAAAAEEFIBgAAACIIyQAAAEAEIRkAAACIICQDAAAAEYRkAAAAIIKQDAAAAEQQkgEAAIAIQjIAAAAQQUgGAAAAIgjJAAAAQAQhGQAAAIggJAMAAAARhGQAAAAggpAMAAAARBCSAQAAgAhCMgAAABBBSAYAAAAiCMkAAABABCEZAAAAiCAkAwAAABGEZAAAACCCkAwAAABEEJIBAACACEIyAAAAEEFIBgAAACIIyQAAAEAEIRkAAACIICQDAAAAEYRkAAAAIIKQDAAAAEQQkgEAAIAIQjIAAAAQQUgGAAAAIgjJAAAAQIS5+8FvbLZd0or0lQMcFrpLqom7iDaM9geQbUPcvVPcRSC78g5x+xXufmJaKgEOE2a2gH4fH9ofQLaZ2YK4a0D2Md0CAAAAiCAkAwAAABGHGpJ/lZYqgMML/T5etD+AbGPcaYMO6cI9AAAAoDViugUAAAAQQUgGAAAAIpodks3MMlEIAAAA0FKkZU6ymeW4e30a6gFaJDNL/kLpzkT+2JhZN0l1kmol7eRnAQDIlGaFZDNrL2msu/8hfN1Z0qcUPAHrRXdflZEqgRbKzHIljXD3F+OupTUzs1JJYyR1lXS0pFWSqtz9kVgLA9BqmVmZpK9K2qgg4ywM3zdJn3D31XHWh8xrbkgukXSfu48ys+6SvivpLEkLJI2U9G13n5+RSoGYmFknSeMk7VTwOORNkrZIeltSf0mz3f2E2Aps5cyst6SfS1qnoO3HSHpdUkdJR0ka5+6b4qsQQGtjZkdJuk3SPkn1Csb6/+fufzezfpJmuPuZMZaILGjuY6m7S1obft9L0nHufrwkmdnnJV0liZCM1qZC0s8k/V5SsaQCSe0UDJ7HKPjzPzKnTFJ3dz9fkszscUk/cPdzzewiBQH6ovjKA9AKDZHU1d0/J0lmdoakqWZ2iYLQzPVZbUBzQ/JASePN7KuSPitpV2RfuxrcCji89Zb0poKgbJLaKziLuVtBOKuIrbK2Ya+kfWZ2soI/e35R0p5w2XZJHeIqDECr1VPBXw9lZgXu/pSZXS3pZkmLJK2JszhkR3ND8kJJMyVNkDRA0tyUZf0kbU1TXUBL8j+SrlNwodh+fdzMVkoqiqOoNuQVSU9I+kb42hWcPZakwWLcAZB+ayQ9ZWZHuPtWM8t397+ZmUuaJ+memOtDFqTtiXtmdpykfe6+LC07BA4TZlbo7rvjrqO1M7NBCn4hWeLu+8I7jrST1M7dt8VbHYDWJLwoO8/d96S+5+51Znaqgvz0dHwVIhuaHZLN7CRJwxX8qblawW9br6d2JKC1MbMRCs5aLnX3f8VdT1tjZidI6ivpNX4RB5ANZlYhKSFphbu/Enc9yL7m3t1ioj685Vth+NVfwRX/33f3v2egRiBWZnaepNEK+nu9ggv4HnP3ejObquDuFtwCLkPC9j9LwTzwOkm/k/Rn2h9ApoTXXn1OwTUPddp/3L9F0h8Zd1q/5j5x7ypJD7n7BHf/grt/2t0HSLpU0g3hvUyB1uYyBXNiv6YgoP1A0lfCZccpuMsFMucySX9RcL/SByX9l2h/AJk1WcG4f4E+Ou5XiHGnTWjuhXvbJHU3s47unrzqM9/dK82sSMEUDKC1KZb0l/Cpkn82s1WSHjKz1QrudPFurNW1frQ/gGxj3EGzQ/INCs7mlJjZWkkbJOWa2RhJbyiYowy0NpWSBkn6V/gI9mVmdq6kPyh4+ltNrNW1frQ/gGxj3MFBXbh3goKnjyUkdVEQlP8m6Xfuzn2S0eqY2RBJddHHrod3dJnm7qfHUlgbQfsDyDbGHUhpuAVcON2CuTloM8JbAx3h7u+ZWZ6718ZdU1tC+wPINsadtqm5F+7JAvnh9yMkPR9+3+x9AYcDM7PUfxVctPG4JDFQZh7tDyDbGHcgHURIVvBY3uTp5yJ9+GhGnmOOVsndPfwlMDd8q4uktdIHZxeQQbQ/gGzzj/6Z/QhJr0uMO21Jcy/cU3ilZ334cr2CW6NIHwZnoNWh38eL9gcQs02S5sRdBLKruQ8TSUg6U9JeBR1mpaTVPBIWrRn9Pl60PwAgDk0OyWY2XsFTxzoqeAJNe0mfUPAkmp+4+wOZKhKIC/0+XrQ/gGwzs26SOkvak/KV4+7bzOxWSSvd/Y44a0R2NGe6xSWS/uTu96S+aWa9JD1oZhvd/cm0VgfEj34fL9ofQLb9UFJvSasl1UraIen98EEin5G0MMbakEXNuXBvp4Kn7XVOvmFm7dy9WsFcQW4Dh9aIfh8v2h9Atn1G0mZJVZLek1Qoqb+kUySVKHh4GtqA5ky3OF7SxQr+7LBG0kZJ7yvoTKWSLnX3tzJUJxAL+n28aH8A2WZm/yHpRXd/tYFliySd7+5Lsl8Zsq25F+4NknS2gvsF9pC0S9JTku539+0ZqRCIGf0+XrQ/gGwysw6S8hVMs0iGJA9vR3mCpMU8RK1taM6Z5HbuvjfD9QAtCv0+XrQ/gGxLeYBIjoKQ7A3cNxltQJPnJB/of1Rmlm9mP0xfSUDLQb+PF+0PINv8Q3XuXp8MyIw7bU+TziSbWW9JUxVMYH9L0pvhv6skFUu6z93LM1gnkHX0+3jR/gCyrQnjzq/dPRFfhcimpt4C7jhJ50m6SdIwSWdJ6i6pk6Q+kv6ZkeqAeNHv40X7A8g2xh18oKkhuVbSHe7+o+gCMxsraXJaqwJaBvp9vGh/ANnGuIMPNDUkvyTpHTPr6u6bzSxfUp2710vaLml2xioE4kO/jxftDyDbGHfwgWbdAm6/Dc2KJO1z9z3pLQlouej38aL9AWQb407b1Zwn7kmSzCy5zWRJo9JbDtAy0e/jRfsDyDbGHTQrJIf3DkxO0ThLUvuU94FWiX4fL9ofQLYx7kBqYkhOdorwvoHJ+5YulfR6pgoD4ka/jxftDyDbGHeQqjlP3Osq6ZOS9ih4VOMKd9+RwdqA2NHv40X7A8g2xh0kNfVhIudIOkWSSTpdwc2135T0O0lP87hGtEb0+3jR/gCyjXEHqRqdbmFmHSVNkfS4pLslzZS0UtJfJN0s6SuZLBCIA/0+XrQ/gGxj3EFUo2eSzWygpD+5+3Hh60JJz7r7iWbWL1x2QuZLBbKHfh8v2h9AtjHuIKopDxPZKukVM7tdUpWkUknPh8uKJW3LUG1AnOj38aL9AWQb4w720+h0C3evkfQLSe9LGi5pr6T/Dhd3lvRsxqoDYkK/jxftDyDbGHcQ1awn7plZnrvXht8bE9jRFtDv40X7A8g2xh1Ih/BYakkys/4KHtX4VroKAlo6+n28aH8A2ca40zY15cK9f5OUUDBXZ4ukzZJ2ufsyM/utpFfc/ZaMVwpkEf0+XrQ/gGxj3EFUUy7c+46kXAVPnOkSfp9nZlskfU7SHzNXHhAb+n28aH8A2ca4g/00JST3VHCPwN9J6iipg6ROCq7y/Kqk6oxVB8SHfh8v2h9AtjHuYD9NCcnXSHrP3T/y3HIzWy3p3bRXBcSPfh8v2h9AtjHuYD+HdOEeAAAA0Bo15UyyzOxcScdJ2qngGearJC13980ZrA2IFf0+XrQ/gGxj3EGqjz2TbGZFkm5SMHl9p6SjFDx1pr2klyTdHN58G2g16Pfxov0BZBvjDhrS2JnkAZI+JemT7l6ffNPM8iX9l6RfSTonc+UBsaDfx4v2B5BtjDv4iMYeS32EpFpJ3VPfdPd9kl4IlwOtDf0+XrQ/gGxj3MFHNHYm+V+SZkqaamYbJG2U9IakQkmfkfT3zJYHxIJ+Hy/aH0C2Me7gI5ryxL08SRMllSu4X+AASe9Imunu8zNeIRAD+n28aH8A2ca4g6jGLtzrJ+k/JRUp+I3qQXdfFy77N0k73X1RNgoFsoV+Hy/aH0C2Me6gIY3NSb4qXOevCp4+c6eZfT5cdpmk4zNYGxAX+n28aH8A2ca4g49obE7ysZK+5+7/kjTHzC6V9G0zq5JUoODPEEBrQ7+PF+0PINsYd/ARjZ1JzlVwr0CZWa67z1DwXPMbFdwq5Y3MlgfEgn4fL9ofQLYx7uAjGgvJ10paL0nuXmdmee4+TdLLknpK2prh+oA40O/jRfsDyDbGHXxEU+5uYZ6yUvK1mX3C3ddkvEIgBvT7eNH+ALKNcQdRjWm2MOwAAAAxSURBVIZkAAAAoK1pbLoFAAAA0OYQkgEAAIAIQjIAAAAQQUgGAAAAIgjJAAAAQMT/AhZ59FZatzXpAAAAAElFTkSuQmCC\n" + "image/png": "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tmzZkvnz53deuHBh++S6xcXF+5YtW7Z04sSJNTfffHOxJE2dOrXXnXfeuW758uVLX3zxxRUdOnSoT65fVFTk3/ve994ZP378e8uXL186adKkzanHvuyyy/pddNFFNa+99trSc845Z/M3v/nNvsllNTU1eQsXLlw+e/bsVddee+3Rzf1chGQAAAActL59++457bTTdiVf33vvvUcmEomy8vLyxJo1a9ovWrSoMLnsggsu2CxJI0aM2Ll+/foCSTrppJN2TJkype+NN97Yc/Pmzbl5eU2fSVJZWdlx8uTJ70nSFVdcsenll1/ulFw2duzYLTk5ORo5cuTuDRs2tGvu5yIkAwAA4KAVFhZ+cOZ38eLFBdOnTy9+5plnXnvttdeWnnrqqdt2795tKeu6JOXm5qqurs4k6Wc/+9k706dPX7djx46cESNGlC1evLggHXWlXkzo3vzrCgnJAAAASIstW7bkduzYsa5r165169aty3/mmWc6N7bNkiVLCkaOHLn7Jz/5SXV5efmuqqqq9qnLO3XqVLdjx44GM+vxxx+/45577jlSku66665uI0aM2J6eT0JIBgAAOPwUdqptifv71Kc+tWvw4MHvl5SUlF900UX9hg8fvqOxbW666abiwYMHl5eUlCQ6d+5cN378+G2py8eMGbN96dKlHcrKyhIzZ87smrrszjvvfOPee+/tXlJSknj44Ye73n777evT8TkkyQ7m9HPSiZ3NF5yUrlKAw8SocXFX0KZtKE7EXQKANqb4ipsWuvuJcdZQWVm5tqKioibOGlqjysrK7hUVFf0bWsaZZAAAACCCkAwAAABEEJIBAACACEIyAAAAEEFIBgAAACIIyQAAAEBE05/7BwAAgBZh4703VvieXWnLcVbQobbHxf+38uPWyc3NHT548ODdydePPPLIqiFDhuxt7rFGjBgxZOrUqetPPfXUXd///vd73XzzzdUHU3OmEZIBAAAOM+kMyE3dX0FBQf3y5cuXpvO406ZNO6qlhmSmWwAAAOCgrFixot3w4cOHJBKJskQiUTZv3ryOkvTYY491+vSnPz0oud7EiROPmTZtWrfUba+44oqj9+zZk1NaWpoYO3bsgCuvvLL3DTfc0DO5/Fvf+tbRP/7xj3sqJpxJBgAAQKOSgVaS+vbtu2fevHmre/fuXfvss8++1qFDB1+8eHHB+eef/4mq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\n", + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" @@ -765,7 +1653,9 @@ }, { "data": { - "text/plain": "''" + "text/plain": [ + "''" + ] }, "execution_count": 21, "metadata": {}, @@ -774,28 +1664,22 @@ ], "source": [ "labelprop_results.plot()" - ], - "metadata": { - "collapsed": false, - "pycharm": { - "name": "#%%\n" - } - } + ] }, { "cell_type": "markdown", - "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. " - ], "metadata": { - "collapsed": false, "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. " + ] } ], "metadata": { + "celltoolbar": "Tags", "interpreter": { "hash": "a44fa91c5dfe8381243a89b49ad51245e1b4984ebdbff837585626a5fdba33e0" }, @@ -814,9 +1698,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 2 -} \ No newline at end of file +} diff --git a/docs/source/content/examples/8-inference.ipynb b/docs/source/content/examples/8-inference.ipynb index a193ff16..c8d576b2 100644 --- a/docs/source/content/examples/8-inference.ipynb +++ b/docs/source/content/examples/8-inference.ipynb @@ -20,19 +20,37 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import os\n", "from mvg import MVG, plotting\n", "from sklearn.datasets import load_iris\n", - "import pandas as pd\n", - "\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "tags": [ + "parameters" + ] + }, + "outputs": [], + "source": [ "ENDPOINT = \"http://api.beta.multiviz.com\"\n", - "\n", "# Replace by your own Token\n", - "TOKEN = os.environ[\"TEST_TOKEN\"]\n", + "TOKEN = os.environ[\"TEST_TOKEN\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ "session = MVG(ENDPOINT, TOKEN)" ] }, @@ -326,6 +344,7 @@ } ], "metadata": { + "celltoolbar": "Tags", "interpreter": { "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" }, @@ -344,7 +363,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.2" + "version": "3.8.10" } }, "nbformat": 4, diff --git a/mvg/mvg.py b/mvg/mvg.py index 49728156..bb8be963 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -55,8 +55,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.11.6") - self.tested_api_version = self.parse_version("v0.3.0") + self.mvg_version = self.parse_version("v0.11.7") + self.tested_api_version = self.parse_version("v0.3.1") # Get API version try: diff --git a/regenerate-examples.sh b/regenerate-examples.sh deleted file mode 100644 index ee0bf287..00000000 --- a/regenerate-examples.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -set -e - -# Setup requirements for executing jupyter notebooks -python -m pip install -r requirements.txt -python -m pip install -r requirements_docs.txt - -# Cleanup -do_cleanup() { - echo "Performing cleanup of temporary resources" - rm -rf ./va-data-charlie -} - -# Execute notebooks containing examples -exec_examples() { - echo "Running notebooks containing examples" - local _d="./docs/source/content/examples" - for file in `ls -v $_d/*.ipynb`; do - papermill "$file" "$file" - done - echo "Finished executing examples" -} - -# Setup SIGINT, EXIT trap to finish the script with cleanup -trap do_cleanup INT EXIT - -# Execute main function -exec_examples \ No newline at end of file diff --git a/tests/test_notebooks.py b/tests/test_notebooks.py new file mode 100644 index 00000000..2ff20b1b --- /dev/null +++ b/tests/test_notebooks.py @@ -0,0 +1,10 @@ +from pathlib import Path +import papermill as pm + + +def test_notebooks(vibium): + notebooks_path = ( + Path(__file__).parents[1] / "docs" / "source" / "content" / "examples" + ) + for nbook in sorted([f for f in notebooks_path.glob("*.ipynb") if f.is_file()]): + pm.execute_notebook(nbook, nbook, parameters={"ENDPOINT": vibium}) From fe15f9691d459cf422f43b4e61c4f4ed727a1f31 Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Fri, 18 Feb 2022 14:14:30 +0100 Subject: [PATCH 55/90] use latest versions of black and pylint (#149) --- mvg/features/analysis.py | 2 +- mvg/features/blacksheep.py | 4 +++- mvg/features/kpidemo.py | 2 +- mvg/mvg.py | 6 +++--- mvg/plotting.py | 14 +++++++------- requirements_dev.txt | 4 ++-- tests/conftest.py | 1 - 7 files changed, 17 insertions(+), 16 deletions(-) diff --git a/mvg/features/analysis.py b/mvg/features/analysis.py index 8a1e10cc..884334f1 100644 --- a/mvg/features/analysis.py +++ b/mvg/features/analysis.py @@ -349,7 +349,7 @@ def save_json(self, file_name=None, raw=False): else: s_dict = self.results() - with open(file_name, "w") as json_file: + with open(file_name, "w", encoding="utf-8") as json_file: json.dump(s_dict, json_file, indent=4) return file_name diff --git a/mvg/features/blacksheep.py b/mvg/features/blacksheep.py index 7eb6fde4..69170d92 100644 --- a/mvg/features/blacksheep.py +++ b/mvg/features/blacksheep.py @@ -169,7 +169,9 @@ def plot(self, interactive=True, time_format=None, filename=None): # Colors for plot and legend cmap = {0: mcm(0), 1: mcm(1)} labels = {0: "normal", 1: "atypical"} - patches = [mpatches.Patch(color=cmap[i], label=labels[i]) for i in cmap] + patches = [ + mpatches.Patch(color=color, label=labels[i]) for i, color in cmap.items() + ] plt.legend(handles=patches, loc=4, borderaxespad=0.0) # The plot (need to remove na) diff --git a/mvg/features/kpidemo.py b/mvg/features/kpidemo.py index 13499f03..325fb900 100644 --- a/mvg/features/kpidemo.py +++ b/mvg/features/kpidemo.py @@ -17,7 +17,7 @@ def unfold_result_to_df(result: dict) -> pd.DataFrame: class KPIDemo(Analysis): - """ Analysis class for KPIDemo feature.""" + """Analysis class for KPIDemo feature.""" def __init__(self, results, t_zone=None, t_unit=None): """Constructor diff --git a/mvg/mvg.py b/mvg/mvg.py index bb8be963..9ff0179a 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -55,7 +55,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.11.7") + self.mvg_version = self.parse_version("v0.11.8") self.tested_api_version = self.parse_version("v0.3.1") # Get API version @@ -723,7 +723,7 @@ def request_analysis( logger.info("from %s to %s ", start_timestamp, end_timestamp) if parameters is None: - parameters = dict() + parameters = {} # Update parameters with certain method parameters if selected_channels: @@ -793,7 +793,7 @@ def request_population_analysis( logger.info("from %s to %s ", start_timestamp, end_timestamp) if parameters is None: - parameters = dict() + parameters = {} # Package info for db to be submitted analysis_info = { diff --git a/mvg/plotting.py b/mvg/plotting.py index ba813a81..3fe81c92 100644 --- a/mvg/plotting.py +++ b/mvg/plotting.py @@ -8,7 +8,7 @@ import logging import pandas as pd import matplotlib.pyplot as plt -import matplotlib.patches as patches +from matplotlib import patches logger = logging.getLogger(__name__) @@ -86,7 +86,7 @@ def modes_boxplot(data, feature, request_id, total_modes=None, axes=None): # Plot and format figure image = data.boxplot(column=feature, by="Modes", ax=axes) image.get_figure().suptitle("") - image.get_figure().gca().set_title("Boxplot for {}".format(request_id)) + image.get_figure().gca().set_title(f"Boxplot for {request_id}") image.get_figure().gca().set_ylabel(feature) return image @@ -130,7 +130,7 @@ def modes_group_boxplot(dfs, feature, request_ids): total_modes=max_no_modes, axes=axes[count], ) - axp.set_title("Boxplot for {}".format(request_ids[count])) + axp.set_title(f"Boxplot for {request_ids[count]}") axp.set_ylabel(feature) if count + 1 != len(dfs): axp.set_xlabel("") @@ -303,12 +303,12 @@ def _plot_row(row_data, is_uncert_data, y_pos=0): legend_labels = [ patches.Patch(facecolor=colors[i], edgecolor="black", label="No data") if i == -1 - else patches.Patch(color=colors[i], label="Mode {}".format(int(i))) + else patches.Patch(color=colors[i], label=f"Mode {int(i)}") for i in list(data["labels"].unique()) ] axes.legend(handles=legend_labels, bbox_to_anchor=(1.05, 1), loc="upper left") - axes.set_title("Modes over time for {}".format(request_id)) + axes.set_title(f"Modes over time for {request_id}") plt.tight_layout() return image @@ -371,7 +371,7 @@ def modes_probabilities_over_time( # Colors for the line chart colors = colors or { - f"mode {x}": MODE_COLOR_CODES[x] for x in MODE_COLOR_CODES.keys() + f"mode {mode}": color for mode, color in MODE_COLOR_CODES.items() } # Create figure with blank plot @@ -664,7 +664,7 @@ def _plot_row(row_data, y_pos=0): ] axes.legend(handles=legend_labels, bbox_to_anchor=(1.05, 1), loc="upper left") - axes.set_title("Labels over time for {}".format(source_id)) + axes.set_title(f"Labels over time for {source_id}") plt.tight_layout() return image diff --git a/requirements_dev.txt b/requirements_dev.txt index 995e4cf6..8ed88eff 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -2,10 +2,10 @@ setuptools packaging wheel twine -black==20.8b1 +black flake8 darglint -pylint==2.8.3 +pylint pytest pytest-docker # for callback test server diff --git a/tests/conftest.py b/tests/conftest.py index b687641c..1aca4d5a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -90,7 +90,6 @@ def vibium(docker_ip, docker_services): ) return url - else: @pytest.fixture(scope="session") From 826483fc1a39a7085af81aaaac454a9571712f5c Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Mon, 21 Feb 2022 09:12:58 +0100 Subject: [PATCH 56/90] Pipeline concurrency enabled only for PR runs (#150) --- .github/workflows/ci-checks.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-checks.yml b/.github/workflows/ci-checks.yml index 8115056d..f559f6ec 100644 --- a/.github/workflows/ci-checks.yml +++ b/.github/workflows/ci-checks.yml @@ -7,7 +7,7 @@ on: branches: [ master ] concurrency: - group: ${{ github.ref }} + group: ${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: From d9441c95415f81ede76e313d00c9b717e962227f Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Mon, 21 Feb 2022 09:13:55 +0100 Subject: [PATCH 57/90] Meta fields are optional for create source and create measurement (#148) * Meta fields are optional for create source and create measurement * replace position of meta and channel/columns args * bump minor version Co-authored-by: Mohsen Nosratinia --- .../examples/2-sources_and_measurements.ipynb | 4 +- .../content/examples/4-error_handling.ipynb | 2 +- mvg/mvg.py | 46 +++++++++++++------ tests/conftest.py | 4 +- tests/test_api_sources.py | 4 +- 5 files changed, 39 insertions(+), 21 deletions(-) diff --git a/docs/source/content/examples/2-sources_and_measurements.ipynb b/docs/source/content/examples/2-sources_and_measurements.ipynb index a63b0d26..e8dfba12 100644 --- a/docs/source/content/examples/2-sources_and_measurements.ipynb +++ b/docs/source/content/examples/2-sources_and_measurements.ipynb @@ -356,7 +356,7 @@ } ], "source": [ - "session.create_source(SOURCE_ID, meta, channels=[\"acc\"]) # create\n", + "session.create_source(SOURCE_ID, channels=[\"acc\"], meta=meta) # create\n", "source = session.get_source(SOURCE_ID)\n", "print(\"Recreated source info:\")\n", "print(source)" @@ -871,7 +871,7 @@ " m_file_name = REF_DB_PATH / source_id / \"meta.json\"\n", " with open(m_file_name, \"r\") as json_file:\n", " meta = json.load(json_file)\n", - " session.create_source(source_id, meta, channels=[\"acc\"]) # create\n", + " session.create_source(source_id, channels=[\"acc\"], meta=meta) # create\n", "\n", " meas = [f.stem for f in Path(src_path).glob(\"*.csv\")]\n", "\n", diff --git a/docs/source/content/examples/4-error_handling.ipynb b/docs/source/content/examples/4-error_handling.ipynb index 330aa0b5..3f433885 100644 --- a/docs/source/content/examples/4-error_handling.ipynb +++ b/docs/source/content/examples/4-error_handling.ipynb @@ -270,7 +270,7 @@ "source": [ "try:\n", " print(\">>> Provoke illegal source Id name\")\n", - " session.create_source(\"illegal%name\", {}, channels=[\"acc\"])\n", + " session.create_source(\"illegal%name\", channels=[\"acc\"])\n", "except MVGAPIError as exc:\n", " # As we have rouge token\n", " # We'll end up here\n", diff --git a/mvg/mvg.py b/mvg/mvg.py index 9ff0179a..837f9f65 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -55,7 +55,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.11.8") + self.mvg_version = self.parse_version("v0.12.0") self.tested_api_version = self.parse_version("v0.3.1") # Get API version @@ -237,7 +237,11 @@ def say_hello(self) -> dict: return response.json()["message"] def create_source( - self, sid: str, meta: dict, channels: List[str], exist_ok: bool = False + self, + sid: str, + channels: List[str], + meta: dict = None, + exist_ok: bool = False, ): """ Creates a source on the server side. @@ -245,24 +249,28 @@ def create_source( Parameters ---------- sid : str - source Id - - meta : dict - meta information + Source ID channels : List[str] Channels of waveform Data. For instance axial, vertical and horizontal - measurments for the source. + measurements for the source. Cannot be updated after creating source. + meta : dict + Meta information of source [optional]. + exist_ok : bool Set to true to prevent exceptions for 409 Conflict errors - caused by trying to create an existing source. Defaults to False + caused by trying to create an existing source. Defaults to False. """ logger.info("endpoint %s", self.endpoint) logger.info("creating source with source id=%s", sid) logger.info("metadata: %s", meta) + logger.info("channels: %s", channels) + + if meta is None: + meta = {} do_not_raise = [] if exist_ok: @@ -273,7 +281,11 @@ def create_source( self._request("post", "/sources/", do_not_raise, json=source_info) def create_tabular_source( - self, sid: str, meta: dict, columns: List[str], exist_ok: bool = False + self, + sid: str, + columns: List[str], + meta: dict = None, + exist_ok: bool = False, ): """ Creates a tabular source on the server side. @@ -283,16 +295,16 @@ def create_tabular_source( sid : str Source ID - meta : dict - Meta information of source - columns : List[str] Data variables. Currently supports numerical data. Cannot be updated after creating source. + meta : dict + Meta information of source [optional]. + exist_ok : bool Set to true to prevent exceptions for 409 Conflict errors - caused by trying to create an existing source. Defaults to False + caused by trying to create an existing source. Defaults to False. """ logger.info("endpoint %s", self.endpoint) @@ -300,6 +312,9 @@ def create_tabular_source( logger.info("metadata: %s", meta) logger.info("columns: %s", columns) + if meta is None: + meta = {} + do_not_raise = [] if exist_ok: do_not_raise.append(requests.codes["conflict"]) # 409 @@ -393,7 +408,7 @@ def create_measurement( duration: float, timestamp: int, data: Dict[str, List[float]], - meta: dict, + meta: dict = None, exist_ok: bool = False, ): """Stores a measurement on the server side. @@ -434,6 +449,9 @@ def create_measurement( logger.info(" timestamp: %s", timestamp) logger.info(" meta data: %s", meta) + if meta is None: + meta = {} + do_not_raise = [] if exist_ok: do_not_raise.append(requests.codes["conflict"]) # 409 diff --git a/tests/conftest.py b/tests/conftest.py index 1aca4d5a..56591cde 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -130,7 +130,7 @@ def waveform_source(session): with open(m_file_name, "r") as json_file: meta = json.load(json_file) # create_source happy case - session.create_source(source, meta=meta, channels=["acc"]) + session.create_source(source, channels=["acc"], meta=meta) yield source finally: session.delete_source(source) @@ -226,7 +226,7 @@ def tabular_source(session): ) columns = tabular_df.columns.tolist() meta = {"extra": "information"} - session.create_tabular_source(source_id, meta, columns) + session.create_tabular_source(source_id, columns=columns, meta=meta) yield source_id, tabular_df.to_dict("list") finally: session.delete_source(source_id) diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index e8787967..7f8c0d3d 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -229,11 +229,11 @@ def test_tabular_sources(session, tabular_source): meta = {"extra": "information"} # create source again (409 ignored) - session.create_tabular_source(source_id, meta, columns, exist_ok=True) + session.create_tabular_source(source_id, columns, meta, exist_ok=True) # create source again (409 not ignored) with pytest.raises(MVGAPIError) as exc: - session.create_tabular_source(source_id, meta, columns) + session.create_tabular_source(source_id, columns, meta) assert exc.value.response.status_code == 409 columns.remove("timestamp") From 57551ae99e7cf82d8b7904c6ea5eb7b6681e66fd Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Mon, 21 Feb 2022 13:56:27 +0100 Subject: [PATCH 58/90] Test all notebooks in a time limit of 120 minutes (#151) Test all notebooks in a time limit of 120 minutes --- .github/workflows/ci-checks.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-checks.yml b/.github/workflows/ci-checks.yml index f559f6ec..4a66af1c 100644 --- a/.github/workflows/ci-checks.yml +++ b/.github/workflows/ci-checks.yml @@ -84,7 +84,7 @@ jobs: strategy: matrix: python-version: [3.6,3.7,3.8,3.9,"3.10"] - steps: + steps: - uses: actions/checkout@v2 - name: "Set up Python ${{ matrix.python-version }}" uses: actions/setup-python@v2 @@ -102,6 +102,7 @@ jobs: username: vagrinder password: ${{ secrets.VAGRINDER_GITHUB_PKG_TOKEN }} - name: "Running tests with pytest" + timeout-minutes: 120 env: TEST_TOKEN: ${{ secrets.TEST_TOKEN }} run: "python -m pytest --verbose tests/test_notebooks.py" From 048a802bb0141cfb9ccdaf8a29c703b1386875de Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Mon, 21 Feb 2022 15:35:49 +0100 Subject: [PATCH 59/90] fix references to the API (#152) --- docs/source/content/examples/3-tabular_example.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/source/content/examples/3-tabular_example.ipynb b/docs/source/content/examples/3-tabular_example.ipynb index 00a66459..085131ef 100644 --- a/docs/source/content/examples/3-tabular_example.ipynb +++ b/docs/source/content/examples/3-tabular_example.ipynb @@ -6,7 +6,7 @@ "source": [ "# Working with Tabular Data\n", "\n", - "Although Vibium was designed with vibration waveform data in mind, it still works wonderfully well with non-vibration or KPI data. We refer to this as tabular timeseries data. Each measurement consists of one or more variables captured at the same time. This is different from the vibration waveform data, where each measurement is a short measurement sample from one vibration sensor.\n", + "Although MVG has been designed with vibration waveform data in mind, it still works wonderfully well with non-vibration or KPI data. We refer to this as tabular timeseries data. Each measurement consists of one or more variables captured at the same time. This is different from the vibration waveform data, where each measurement is a short measurement sample from one vibration sensor.\n", "\n", "In this example, we will show how to work with tabular sources and measurements, and how to create an analysis. If you have seen any of the previous examples, much of this one will be familiar to you.\n", "\n", @@ -35,7 +35,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "After importing we create the `MVG` session that let us communicate with the Vibium server. For that we need an endpoint URL and a valid token. If you do not have a token, you can get one [here](https://vikinganalytics.se/multiviz-vibration-api/).\n", + "After importing we create the `MVG` session that let us communicate with the MVG server. For that we need an endpoint URL and a valid token. If you do not have a token, you can get one [here](https://vikinganalytics.se/multiviz-vibration-api/).\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 vibration' service." ] @@ -220,7 +220,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We loaded the `.csv` file into a dataframe object and printed out the first five rows. The timestamp was read as string timestamps, but for the Vibium API we need the timestamps to be in milliseconds since EPOCH. So we need to do some data wrangling in order to get it to the correct data type.\n", + "We loaded the `.csv` file into a dataframe object and printed out the first five rows. The timestamp was read as string timestamps, but for the MVG API we need the timestamps to be in milliseconds since EPOCH. So we need to do some data wrangling in order to get it to the correct data type.\n", "\n", "We can use the function `pandas.to_datetime()` to convert a column into datetime objects. Then we can convert the timestamps into integers, which will automatically get converted to nanoseconds since EPOCH. By dividing by 1e6 we get the same time in milliseconds. We can see that the conversion was successful by printing the first five rows again." ] From 83c1b623cbf330372d88adcd7298a1ff7a9201a3 Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Mon, 21 Feb 2022 18:04:56 +0100 Subject: [PATCH 60/90] ensure tested API version is the production version (#155) --- mvg/mvg.py | 2 +- tests/conftest.py | 10 +++++++++- tests/test_api_general.py | 6 ++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 837f9f65..31896de8 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -56,7 +56,7 @@ def __init__(self, endpoint: str, token: str): self.token = token self.mvg_version = self.parse_version("v0.12.0") - self.tested_api_version = self.parse_version("v0.3.1") + self.tested_api_version = self.parse_version("v0.3.2") # Get API version try: diff --git a/tests/conftest.py b/tests/conftest.py index 56591cde..24e667d4 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -18,6 +18,9 @@ upload_measurements, ) +VIBIUM_PROD_URL = "https://api.beta.multiviz.com/" + + # This version of conftest.py adds some really ugly code to # run the tests as integration tests by running like # > pytest -s tests --host http://127.0.0.1:8000 @@ -70,6 +73,11 @@ def docker_compose_file(pytestconfig): return pytestconfig.rootdir / "tests" / "docker-compose.yml" +@pytest.fixture() +def vibium_prod(): + return VIBIUM_PROD_URL + + # ugly vibium fixture configuration # Here we need to switch between vibium fixture # for docker-run (--host not set) @@ -84,7 +92,7 @@ def vibium(docker_ip, docker_services): """Ensure that HTTP service is up and responsive.""" # `port_for` takes a container port and returns the corresponding host port port = docker_services.port_for("vibium", 8000) - url = "http://{}:{}".format(docker_ip, port) + url = f"http://{docker_ip}:{port}" docker_services.wait_until_responsive( timeout=30.0, pause=0.1, check=lambda: is_responsive(url) ) diff --git a/tests/test_api_general.py b/tests/test_api_general.py index 8957180d..9e5bd631 100644 --- a/tests/test_api_general.py +++ b/tests/test_api_general.py @@ -20,6 +20,12 @@ def test_say_hello(vibium): assert session.say_hello() is not None +# Ensure tested version is the production version +def test_check_prod_version(vibium_prod): + session = MVG(vibium_prod, "") + assert session.api_version == session.tested_api_version + + # API / # Test version handling def test_check_version(vibium): From 3ee9ba000267cc0e9db2a5b048e4e9c1507d8227 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Tue, 22 Feb 2022 17:55:25 +0100 Subject: [PATCH 61/90] Type of PR can be CI/CD (#156) --- .github/pull_request_template.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index d1026a4d..d7729f06 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -12,6 +12,7 @@ Fixes # (potential issues that are fixed by this PR) - [ ] New feature (non-breaking change which adds functionality -> bump minor version) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected -> bump major version) - [ ] Documentation Update +- [ ] CI/CD workflows Update ## Checklist From 20839b6e2ae12139d797d0b765042bc7b5c8ce29 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Thu, 24 Feb 2022 12:24:30 +0100 Subject: [PATCH 62/90] Testcase to validate color scheme (#158) --- mvg/mvg.py | 4 +++- tests/test_api_general.py | 11 +++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 31896de8..bf819de9 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -64,8 +64,10 @@ def __init__(self, endpoint: str, token: str): except RequestException: raise MVGConnectionError("Could not connect to the API.") - api_vstr = response.json()["message"]["api"]["version"] + api_root = response.json()["message"] + api_vstr = api_root["api"]["version"] self.api_version = self.parse_version(api_vstr) + self.api_content = api_root["content"] def _request(self, method, path, do_not_raise=None, **kwargs) -> requests.Response: """Helper function for removing duplicate code on API requests. diff --git a/tests/test_api_general.py b/tests/test_api_general.py index 9e5bd631..1d76fa77 100644 --- a/tests/test_api_general.py +++ b/tests/test_api_general.py @@ -8,6 +8,7 @@ import semver from mvg import MVG from mvg.exceptions import MVGAPIError, MVGConnectionError +from mvg.plotting import MODE_COLOR_CODES, LABEL_COLOR_CODES # MVG Token VALID_TOKEN = pytest.VALID_TOKEN @@ -67,6 +68,16 @@ def test_supported_features(vibium): assert resp["ModeId"] +def test_color_scheme(vibium): + # Get current API version for testing + session = MVG(vibium, "NO TOKEN") + color_scheme = session.api_content["color_scheme"] + + # Verify if the same color scheme is exposed by both the API and MVG package + assert MODE_COLOR_CODES == {int(k): v for k, v in color_scheme["modes"].items()} + assert LABEL_COLOR_CODES == {int(k): v for k, v in color_scheme["labels"].items()} + + # API GET /analyses [unauthorized] def test_failure_authorization(vibium): unauth_session = MVG(vibium, "NO TOKEN") From 02ad66f68b4047037972fc7cfbd88cbea1e4f0d5 Mon Sep 17 00:00:00 2001 From: Sergio Martin-del-Campo <61144290+SergioMDCB@users.noreply.github.com> Date: Mon, 14 Mar 2022 09:51:38 +0100 Subject: [PATCH 63/90] Rerun notebooks (#160) * Update of the first two notebooks * Update sources/measurements notebook * Update tabular example * Update errors notebook * Update to analysis classes * Black and version update * Update to results visualization notebook * Update of labelling notebook * Update of the model inference notebook * Adding clarification of where to setup the token * Fixing pylint issue * Fixing flake issue * Update api version * Update to description of results dictionary for modeId * Updating notebook and analysis to enable to see the settingwithcoppywarning * Fix for SettingWithCopyWarning error * Minor fixes * KPIDemo parse_results should use time unit as "seconds" Co-authored-by: Vishnu Nadhan --- .gitignore | 3 +- .../content/examples/0-check_version.ipynb | 31 +- .../content/examples/1-brief_overview.ipynb | 833 +-- .../examples/2-sources_and_measurements.ipynb | 160 +- .../content/examples/3-tabular_example.ipynb | 352 +- .../content/examples/4-error_handling.ipynb | 54 +- .../content/examples/5-analysis_classes.ipynb | 4481 +---------------- .../content/examples/6-analysis_visual.ipynb | 429 +- docs/source/content/examples/7-labeling.ipynb | 710 +-- .../source/content/examples/8-inference.ipynb | 116 +- docs/source/index.rst | 2 +- mvg/features/analysis.py | 7 +- mvg/features/kpidemo.py | 1 + mvg/mvg.py | 6 +- 14 files changed, 1374 insertions(+), 5811 deletions(-) diff --git a/.gitignore b/.gitignore index ee3644e4..42a11333 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,7 @@ mca/test_output # doc/*html .ipynb_checkpoints/ -# Data +# Data +tabular-example-data/ va-data-charlie/ analysis_classes_examples/*.pkl \ No newline at end of file diff --git a/docs/source/content/examples/0-check_version.ipynb b/docs/source/content/examples/0-check_version.ipynb index 5f02d3ac..90a13ffc 100644 --- a/docs/source/content/examples/0-check_version.ipynb +++ b/docs/source/content/examples/0-check_version.ipynb @@ -5,7 +5,7 @@ "id": "invalid-silence", "metadata": {}, "source": [ - "# Check Version Example\n", + "# Check Version\n", "\n", "This script shows how to check for version compatibility with server side" ] @@ -81,7 +81,10 @@ "id": "cheap-tender", "metadata": {}, "source": [ - "It is advised to always check the version of the API against the MVG version. The `check_version` method will return a dictionary with the server API version, the mvg version and the API version the MVG version it has been tested against. If there is mismatch or incompatibility it will raise an exception and if there is a newer compatible version running on the server it will raise a warning. In the latter case, you should upgrade the MVG version (but you are not required to do so)." + "It is advised to always check the version of the API against the MVG version.\n", + "The `check_version` method will return a dictionary with the server API version, the MVG version, and the API version the MVG version it has been tested against.\n", + "If there is mismatch or incompatibility it will raise an exception and if there is a newer compatible version running on the server it will raise a warning.\n", + "In the latter case, you should upgrade the MVG version (but you are not required to do so)." ] }, { @@ -103,17 +106,13 @@ "output_type": "stream", "text": [ "Checking versions for:https://api.beta.multiviz.com\n", - "mvg version: 0.11.6\n", - "Highest tested API version: 0.3.0\n" + "mvg version: 0.12.2\n", + "Highest tested API version: 0.3.2\n" ] }, { "data": { - "text/plain": [ - "{'api_version': '0.3.0',\n", - " 'mvg_highest_tested_version': '0.3.0',\n", - " 'mvg_version': '0.11.6'}" - ] + "text/plain": "{'api_version': '0.3.2',\n 'mvg_highest_tested_version': '0.3.2',\n 'mvg_version': '0.12.2'}" }, "execution_count": 5, "metadata": {}, @@ -123,6 +122,18 @@ "source": [ "session.check_version()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "pycharm": { + "name": "#%%\n" + } + } } ], "metadata": { @@ -189,4 +200,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/docs/source/content/examples/1-brief_overview.ipynb b/docs/source/content/examples/1-brief_overview.ipynb index d5b7e827..5eb8262f 100644 --- a/docs/source/content/examples/1-brief_overview.ipynb +++ b/docs/source/content/examples/1-brief_overview.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Brief Overview on How to Use the MultiViz Analytics Engine (MVG) Library" + "# Brief Overview - How to use the MVG library" ] }, { @@ -40,7 +40,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Imports" + "### Imports" ] }, { @@ -130,8 +130,11 @@ "We begin by instantiating a \"session\" object with the MVG library.\n", "A session object basically caches the endpoint and the token, to simplify the calls to the MVG library.\n", "\n", - "NOTE: Each TOKEN is used for Authorization AND Authentication.\n", - "Thus, each unique token represents a unique user, each user has it own, unique database on the VA-MVG' service." + ".. note:: Each TOKEN is used for Authorization AND Authentication.\n", + "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." ] }, { @@ -153,7 +156,7 @@ "source": [ "ENDPOINT = \"https://api.beta.multiviz.com\"\n", "# Replace by your own Token\n", - "VALID_TOKEN = os.environ['TEST_TOKEN']" + "VALID_TOKEN = \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE2MTA0NTY3NTQsImV4cCI6MTg5MzQ1NjAwMCwiY2xpZW50X2lkIjoiYXBmZWwiLCJzaXRlX2lkIjoic3RydWRlbCJ9.m7LYLLbTW0voLzEOTYY8nf5dKl_XPp2c5YOyF_66M6mnPICdqBVzF2JcaN7hUlQEWBzxysma5tw6QfU1NspwPeDGT87_sZKAWWqnBmgjP7OYUNYvt1fg-o5lylsHSriradI6SBJv0vcHYU3y_Mey_OmV9Vu12OnQWRBam14qqT0\"" ] }, { @@ -197,9 +200,9 @@ { "data": { "text/plain": [ - "{'api': {'name': 'MultiViz Engine API',\n", - " 'version': '0.0.0-dev0',\n", - " 'swagger': 'http://localhost:8000/docs'}}" + "{'name': 'MultiViz Engine API',\n", + " 'version': 'v0.3.2',\n", + " 'swagger': 'http://api.beta.multiviz.com/docs'}" ] }, "execution_count": 5, @@ -222,7 +225,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:49.715201Z", @@ -237,12 +240,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "Deleting 625d56104ea711ec943c00155da2e1da\n", - "Deleting string\n", - "Deleting test_source_1\n", - "Deleting test_tab_1\n", + "Deleting iris\n", "Deleting u0001\n", - "Deleting zeros\n" + "Deleting u0002\n", + "Deleting u0003\n", + "Deleting u0004\n", + "Deleting u0005\n", + "Deleting u0006\n" ] } ], @@ -262,7 +266,7 @@ } }, "source": [ - "The example below revolves around a sources with source_id \"u0001\".\n", + "The example below revolves around a source with source_id \"u0001\".\n", "\n", "For convenience, this source and its measurements are available with the package distribution.\n", "\n", @@ -288,7 +292,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:49.830068Z", @@ -298,25 +302,12 @@ "name": "#%%\n" } }, - "outputs": [ - { - "data": { - "text/plain": [ - "'u0001'" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "# Path to the source folder\n", "REF_DB_PATH = Path.cwd() / \"va-data-charlie\" / \"charlieDb\" / \"acc\"\n", - "REF_DB_PATH\n", "# Definition of the source_id\n", - "SOURCE_ID = \"u0001\"\n", - "SOURCE_ID\n" + "SOURCE_ID = \"u0001\"" ] }, { @@ -328,10 +319,14 @@ "A source represents a vibration data source, typically a vibration sensor.\n", "Internally, in the analytics engine and data storage, all vibration data is stored under its source. \n", "In essence, a source is an identifier formed by\n", - " - the source ID\n", - " - metadata with required fields\n", - " - optional arbitrary customer specific 'free form' data belonging to the source.\n", - " - channel definition as a list\n", + "\n", + "* the source ID\n", + "\n", + "* metadata with required fields\n", + "\n", + "* optional arbitrary customer specific 'free form' data belonging to the source\n", + "\n", + "* channel definition as a list\n", " \n", "The vibration service will only rely on the required fields.\n", "The free form data is a possibility for the client side to keep together source information, measurements and metadata which may be interesting for the analytics built-in features in the service.\n", @@ -341,7 +336,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:50.251327Z", @@ -363,7 +358,7 @@ " 'properties': {'data_class': 'waveform', 'channels': ['acc']}}" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -378,7 +373,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "List sources\n", + "### List sources\n", "\n", "We can now check if our source actually has been created, by listing all the sources in the database.\n", "This function provides all the existing information about the source. Notice how in the source properties, one can see that the type of data to be uploaded for the source will be a waveform given that when one passes a channel definition to the source. The server interprets this as expecting for each measurement to be waveform data with the names of channels listed by the channel variable." @@ -386,7 +381,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:50.666517Z", @@ -408,7 +403,7 @@ " 'properties': {'data_class': 'waveform', 'channels': ['acc']}}]" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -425,18 +420,23 @@ "\n", "Now that we have created a source, we can upload vibration measurements related to the source. \n", "The information needed to create a measurement consists of\n", - "- sid: name of the source ID to associate the measurement with a source.\n", - "- duration: float value that represent the duration, in seconds, of the measurement to estimate the sampling frequency.\n", - "- timestamp: integer representing the milliseconds since EPOCH of when the measurement was taken.\n", - "- data: list of floating point values representing the raw data of the vibration measurement.\n", - "- meta: additional meta information for later use by the client but not to be processed by the analytics engine.\n", + "\n", + "* sid: name of the source ID to associate the measurement with a source.\n", + "\n", + "* duration: float value that represent the duration, in seconds, of the measurement to estimate the sampling frequency.\n", + "\n", + "* timestamp: integer representing the milliseconds since EPOCH of when the measurement was taken.\n", + "\n", + "* data: list of floating point values representing the raw data of the vibration measurement.\n", + "\n", + "* meta: additional meta information for later use by the client but not to be processed by the analytics engine.\n", "\n", "In this example, all the measurement data is stored as csv and json files, where the timestamp is the name of each of these files. On the csv file, the header of the colum of data corresponds to the channel name." ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:20:50.670011Z", @@ -455,7 +455,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:21:50.347959Z", @@ -470,156 +470,156 @@ "name": "stdout", "output_type": "stream", "text": [ - "Read 39999 samples\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573646460.csv\n", - "Read 39999 samples\n", + "Uploading 1570186860.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570273260.csv\n", - "Read 39999 samples\n", + "Uploading 1570273260.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571482860.csv\n", - "Read 39999 samples\n", + "Uploading 1570359660.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574251260.csv\n", - "Read 39999 samples\n", + "Uploading 1570446060.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571050860.csv\n", - "Read 39999 samples\n", + "Uploading 1570532460.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574164860.csv\n", - "Read 39999 samples\n", + "Uploading 1570618860.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573387260.csv\n", - "Read 39999 samples\n", + "Uploading 1570705260.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570446060.csv\n", - "Read 39999 samples\n", + "Uploading 1570791660.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572350460.csv\n", - "Read 39999 samples\n", + "Uploading 1570878060.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573041660.csv\n", - "Read 39999 samples\n", + "Uploading 1570964460.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573905660.csv\n", - "Read 39999 samples\n", + "Uploading 1571050860.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570964460.csv\n", - "Read 39999 samples\n", + "Uploading 1571137260.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573819260.csv\n", - "Read 39999 samples\n", + "Uploading 1571223660.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573128060.csv\n", - "Read 39999 samples\n", + "Uploading 1571310060.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573300860.csv\n", - "Read 39999 samples\n", + "Uploading 1571396460.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573732860.csv\n", - "Read 39999 samples\n", + "Uploading 1571482860.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571310060.csv\n", - "Read 39999 samples\n", + "Uploading 1571569260.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570878060.csv\n", - "Read 39999 samples\n", + "Uploading 1571655660.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573560060.csv\n", - "Read 39999 samples\n", + "Uploading 1571742060.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572696060.csv\n", - "Read 39999 samples\n", + "Uploading 1571828460.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572782460.csv\n", - "Read 39999 samples\n", + "Uploading 1571914860.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574078460.csv\n", - "Read 39999 samples\n", + "Uploading 1572001260.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571655660.csv\n", - "Read 39999 samples\n", + "Uploading 1572087660.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572001260.csv\n", - "Read 39999 samples\n", + "Uploading 1572177660.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571569260.csv\n", - "Read 39999 samples\n", + "Uploading 1572264060.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571223660.csv\n", - "Read 39999 samples\n", + "Uploading 1572350460.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570618860.csv\n", - "Read 39999 samples\n", + "Uploading 1572436860.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570186860.csv\n", - "Read 39999 samples\n", + "Uploading 1572523260.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571914860.csv\n", - "Read 39999 samples\n", + "Uploading 1572609660.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570532460.csv\n", - "Read 39999 samples\n", + "Uploading 1572696060.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574337660.csv\n", - "Read 39999 samples\n", + "Uploading 1572782460.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570791660.csv\n", - "Read 39999 samples\n", + "Uploading 1572868860.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572609660.csv\n", - "Read 39999 samples\n", + "Uploading 1572955260.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572177660.csv\n", - "Read 39999 samples\n", + "Uploading 1573041660.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572264060.csv\n", - "Read 39999 samples\n", + "Uploading 1573128060.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572868860.csv\n", - "Read 39999 samples\n", + "Uploading 1573214460.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572955260.csv\n", - "Read 39999 samples\n", + "Uploading 1573300860.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571828460.csv\n", - "Read 39999 samples\n", + "Uploading 1573387260.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572523260.csv\n", - "Read 39999 samples\n", + "Uploading 1573473660.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570705260.csv\n", - "Read 39999 samples\n", + "Uploading 1573560060.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571742060.csv\n", - "Read 39999 samples\n", + "Uploading 1573646460.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571137260.csv\n", - "Read 39999 samples\n", + "Uploading 1573732860.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1570359660.csv\n", - "Read 39999 samples\n", + "Uploading 1573819260.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1574424060.csv\n", - "Read 39999 samples\n", + "Uploading 1573905660.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572436860.csv\n", - "Read 39999 samples\n", + "Uploading 1573992060.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573473660.csv\n", - "Read 39999 samples\n", + "Uploading 1574078460.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1571396460.csv\n", - "Read 39999 samples\n", + "Uploading 1574164860.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573992060.csv\n", - "Read 39999 samples\n", + "Uploading 1574251260.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1572087660.csv\n", - "Read 39999 samples\n", + "Uploading 1574337660.csv\n", + "Read 40000 samples\n", "Read meta:{'duration': 2.8672073400507907, 'meta': {}}\n", - "Uploading /home/oskar/viking_unix/mvg/docs/source/content/examples/va-data-charlie/charlieDb/acc/u0001/1573214460.csv\n" + "Uploading 1574424060.csv\n" ] } ], @@ -628,15 +628,15 @@ "for m in meas:\n", "\n", " # raw data per measurement\n", - " TS_MEAS = str(m) + \".csv\" # filename\n", - " TS_MEAS = REF_DB_PATH / SOURCE_ID / TS_MEAS # path to file\n", + " TS_MEAS_FILE = str(m) + \".csv\" # filename\n", + " TS_MEAS = REF_DB_PATH / SOURCE_ID / TS_MEAS_FILE # path to file\n", " ts_df = pd.read_csv(TS_MEAS) # read csv into df\n", " accs = ts_df.iloc[:, 0].tolist() # convert to list\n", " print(f\"Read {len(ts_df)} samples\")\n", "\n", " # meta information file per measurement\n", - " TS_META = str(m) + \".json\" # filename\n", - " TS_META = REF_DB_PATH / SOURCE_ID / TS_META # path\n", + " TS_META_FILE = str(m) + \".json\" # filename\n", + " TS_META = REF_DB_PATH / SOURCE_ID / TS_META_FILE # path\n", " with open(TS_META, \"r\") as json_file: # read json\n", " meas_info = json.load(json_file) # into dict\n", " print(f\"Read meta:{meas_info}\")\n", @@ -646,7 +646,7 @@ " meta_info = meas_info['meta']\n", "\n", " # Upload measurements\n", - " print(f\"Uploading {TS_MEAS}\")\n", + " print(f\"Uploading {TS_MEAS_FILE}\")\n", " try:\n", " session.create_measurement(sid=SOURCE_ID, \n", " duration=duration, \n", @@ -666,7 +666,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.187529Z", @@ -715,9 +715,11 @@ { "data": { "text/plain": [ - "{'ModeId': '0.1.1',\n", + "{'RMS': '1.0.0',\n", + " 'ModeId': '0.1.1',\n", " 'BlackSheep': '1.0.0',\n", " 'KPIDemo': '1.0.0',\n", + " 'ApplyModel': '0.1.0',\n", " 'LabelPropagation': '0.1.0'}" ] }, @@ -739,13 +741,13 @@ "The BlackSheep feature is aimed to population analytics.\n", "You can read about how to use it in the [\"Analysis and Results Visualization\"](6-analysis_visual.ipynb) example.\n", "\n", - "We will begin with the 'KPIDemo' feature, which provides KPIs, such as RMS, for each vibration measurement.\n", + "We will begin with the **KPIDemo** feature, which provides KPIs, such as RMS, for each vibration measurement.\n", "We proceed to request the analysis to the MVG service." ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 46, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.439918Z", @@ -759,10 +761,10 @@ { "data": { "text/plain": [ - "{'request_id': '75fc046d1b6ca741cf442552f506f95b', 'request_status': 'queued'}" + "{'request_id': '9fa506fd651f10b05401840edf9f33cb', 'request_status': 'queued'}" ] }, - "execution_count": 15, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } @@ -788,15 +790,19 @@ "\n", "We can query for the status of our requested analysis.\n", "The possible status are:\n", - "- Queued: The analysis has not started in the remote server and it is in the queue to begin.\n", - "- Ongoing: The analysis is been processed at this time.\n", - "- Failed: The analysis is complete and failed to produce a result.\n", - "- Successful: The analysis is complete and it successfully produced a result." + "\n", + "* Queued: The analysis has not started in the remote server and it is in the queue to begin.\n", + "\n", + "* Ongoing: The analysis is been processed at this time.\n", + "\n", + "* Failed: The analysis is complete and failed to produce a result.\n", + "\n", + "* Successful: The analysis is complete and it produced a successful result." ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.571418Z", @@ -829,14 +835,14 @@ } }, "source": [ - "The next feature is 'ModeId'.\n", + "The next feature is **ModeId**.\n", "The 'ModeId' feature displays all the operating modes over time of an individual asset. \n", "The similar procedure is repeated to request the analysis of the \"ModeId\" feature for our source \"u0001\"." ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 29, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.716298Z", @@ -850,10 +856,10 @@ { "data": { "text/plain": [ - "{'request_id': '09fa086e2bcf4d25b2ad39a442d2c5ad', 'request_status': 'queued'}" + "{'request_id': 'c2d48d6d59c317c39469d3eaade7de96', 'request_status': 'queued'}" ] }, - "execution_count": 17, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -872,7 +878,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:16.881788Z", @@ -887,7 +893,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "ModeId Analysis: queued\n" + "ModeId Analysis: successful\n" ] } ], @@ -907,21 +913,28 @@ "source": [ "We can proceed to get the results by calling the corresponding requestIds for the feature of each source.\n", "\n", - "The output of the get_analysis_results function is a dictionary and we show the keys of one those dictionaries.\n", + "The output of the `\"get_analysis_results\"` function is a dictionary and we show the keys of one those dictionaries.\n", "The keys are the same for all features and contains seven elements.\n", "These elements are:\n", - "- `\"status\"` indicates if the analysis was successful.\n", - "- `\"request_id\"` is the identifier of the requested analysis.\n", - "- `\"feature\"` is the name of the requested feature.\n", - "- `\"results\"` includes the numeric results.\n", - "- `\"inputs\"` includes the input information for the request analysis.\n", - "- `\"error_info\"` includes the error information in case the analysis fails and it is empty if the analysis is successful.\n", - "- `\"debug_info\"` includes debuging (log) information related to the failed analysis." + "\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 requested 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 debuging (log) information related to the failed analysis." ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 31, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:17.505749Z", @@ -955,7 +968,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Visualization\n", + "## Visualization\n", "\n", "The MVG Library incorporates a module that facilitates the handling of the results and its visualization.\n", "Using this module, it becomes easier to convert the results into a Pandas dataframe for ease of manipulation.\n", @@ -966,7 +979,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 9, "metadata": { "pycharm": { "name": "#%%\n" @@ -991,7 +1004,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 10, "metadata": { "pycharm": { "name": "#%%\n" @@ -1015,7 +1028,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 11, "metadata": { "pycharm": { "name": "#%%\n" @@ -1058,62 +1071,62 @@ " \n", " 0\n", " 1570186860\n", - " 0.647094\n", - " 2.686565\n", + " 0.647086\n", + " 2.686563\n", " 5.313293\n", - " 0.418730\n", - " 4.151739\n", + " 0.418720\n", + " 4.151786\n", " 1\n", - " -0.140239\n", - " 1970-01-19 04:09:46.860000+00:00\n", + " -0.140237\n", + " 2019-10-04 11:01:00+00:00\n", " \n", " \n", " 1\n", " 1570273260\n", - " 0.647131\n", - " 2.691755\n", + " 0.647123\n", + " 2.691750\n", " 5.367004\n", - " 0.418778\n", - " 4.159523\n", + " 0.418769\n", + " 4.159563\n", " 1\n", - " -0.140425\n", - " 1970-01-19 04:11:13.260000+00:00\n", + " -0.140420\n", + " 2019-10-05 11:01:00+00:00\n", " \n", " \n", " 2\n", " 1570359660\n", - " 0.646627\n", - " 2.715255\n", + " 0.646619\n", + " 2.715251\n", " 5.414856\n", - " 0.418126\n", - " 4.199108\n", + " 0.418116\n", + " 4.199152\n", " 1\n", - " -0.140243\n", - " 1970-01-19 04:12:39.660000+00:00\n", + " -0.140239\n", + " 2019-10-06 11:01:00+00:00\n", " \n", " \n", " 3\n", " 1570446060\n", - " 0.646881\n", - " 2.685151\n", + " 0.646873\n", + " 2.685147\n", " 5.351562\n", - " 0.418455\n", - " 4.150921\n", + " 0.418445\n", + " 4.150966\n", " 1\n", - " -0.140351\n", - " 1970-01-19 04:14:06.060000+00:00\n", + " -0.140347\n", + " 2019-10-07 11:01:00+00:00\n", " \n", " \n", " 4\n", " 1570532460\n", - " 0.646649\n", - " 2.726611\n", + " 0.646643\n", + " 2.726605\n", " 5.395325\n", - " 0.418155\n", - " 4.216521\n", + " 0.418147\n", + " 4.216556\n", " 1\n", - " -0.140429\n", - " 1970-01-19 04:15:32.460000+00:00\n", + " -0.140423\n", + " 2019-10-08 11:01:00+00:00\n", " \n", " \n", "\n", @@ -1121,28 +1134,28 @@ ], "text/plain": [ " timestamps rms_acc peak_acc peak2peak_acc variance_acc \\\n", - "0 1570186860 0.647094 2.686565 5.313293 0.418730 \n", - "1 1570273260 0.647131 2.691755 5.367004 0.418778 \n", - "2 1570359660 0.646627 2.715255 5.414856 0.418126 \n", - "3 1570446060 0.646881 2.685151 5.351562 0.418455 \n", - "4 1570532460 0.646649 2.726611 5.395325 0.418155 \n", + "0 1570186860 0.647086 2.686563 5.313293 0.418720 \n", + "1 1570273260 0.647123 2.691750 5.367004 0.418769 \n", + "2 1570359660 0.646619 2.715251 5.414856 0.418116 \n", + "3 1570446060 0.646873 2.685147 5.351562 0.418445 \n", + "4 1570532460 0.646643 2.726605 5.395325 0.418147 \n", "\n", " crest_factor_acc utilization_acc dc_component_acc \\\n", - "0 4.151739 1 -0.140239 \n", - "1 4.159523 1 -0.140425 \n", - "2 4.199108 1 -0.140243 \n", - "3 4.150921 1 -0.140351 \n", - "4 4.216521 1 -0.140429 \n", + "0 4.151786 1 -0.140237 \n", + "1 4.159563 1 -0.140420 \n", + "2 4.199152 1 -0.140239 \n", + "3 4.150966 1 -0.140347 \n", + "4 4.216556 1 -0.140423 \n", "\n", - " datetime \n", - "0 1970-01-19 04:09:46.860000+00:00 \n", - "1 1970-01-19 04:11:13.260000+00:00 \n", - "2 1970-01-19 04:12:39.660000+00:00 \n", - "3 1970-01-19 04:14:06.060000+00:00 \n", - "4 1970-01-19 04:15:32.460000+00:00 " + " datetime \n", + "0 2019-10-04 11:01:00+00:00 \n", + "1 2019-10-05 11:01:00+00:00 \n", + "2 2019-10-06 11:01:00+00:00 \n", + "3 2019-10-07 11:01:00+00:00 \n", + "4 2019-10-08 11:01:00+00:00 " ] }, - "execution_count": 22, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -1168,7 +1181,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 12, "metadata": { "pycharm": { "name": "#%%\n" @@ -1180,21 +1193,21 @@ "output_type": "stream", "text": [ "=== KPIDemo ===\n", - "request_id 75fc046d1b6ca741cf442552f506f95b\n", - "from 19700119-04:09.46 to 19700119-05:20.24\n", + "request_id 9fa506fd651f10b05401840edf9f33cb\n", + "from 20191004-11:01.00 to 20191122-12:01.00\n", "\n", - "+-------+--------------+-----------+------------+-----------------+----------------+--------------------+-------------------+--------------------+\n", - "| | timestamps | rms_acc | peak_acc | peak2peak_acc | variance_acc | crest_factor_acc | utilization_acc | dc_component_acc |\n", - "|-------+--------------+-----------+------------+-----------------+----------------+--------------------+-------------------+--------------------|\n", - "| count | 50 | 50 | 50 | 50 | 50 | 50 | 50 | 50 |\n", - "| mean | 1.57231e+09 | 0.611699 | 2.81764 | 5.40059 | 0.377308 | 4.62971 | 1 | -0.120877 |\n", - "| std | 1.26105e+06 | 0.056542 | 0.278079 | 0.378225 | 0.0636187 | 0.333362 | 0 | 0.0141939 |\n", - "| min | 1.57019e+09 | 0.484569 | 2.26056 | 4.55438 | 0.234808 | 4.12335 | 1 | -0.140529 |\n", - "| 25% | 1.57125e+09 | 0.627919 | 2.68338 | 5.31364 | 0.394283 | 4.20398 | 1 | -0.140198 |\n", - "| 50% | 1.57231e+09 | 0.628315 | 2.84999 | 5.52634 | 0.39478 | 4.80636 | 1 | -0.112321 |\n", - "| 75% | 1.57337e+09 | 0.646848 | 3.06662 | 5.69377 | 0.418413 | 4.8906 | 1 | -0.109663 |\n", - "| max | 1.57442e+09 | 0.647702 | 3.13609 | 5.79639 | 0.419518 | 4.9925 | 1 | -0.109068 |\n", - "+-------+--------------+-----------+------------+-----------------+----------------+--------------------+-------------------+--------------------+\n" + "+-------+--------------+------------+------------+-----------------+----------------+--------------------+-------------------+--------------------+\n", + "| | timestamps | rms_acc | peak_acc | peak2peak_acc | variance_acc | crest_factor_acc | utilization_acc | dc_component_acc |\n", + "|-------+--------------+------------+------------+-----------------+----------------+--------------------+-------------------+--------------------|\n", + "| count | 50 | 50 | 50 | 50 | 50 | 50 | 50 | 50 |\n", + "| mean | 1.57231e+09 | 0.611691 | 2.81764 | 5.40059 | 0.377299 | 4.62976 | 1 | -0.120874 |\n", + "| std | 1.26105e+06 | 0.0565414 | 0.278079 | 0.378225 | 0.0636172 | 0.333367 | 0 | 0.0141936 |\n", + "| min | 1.57019e+09 | 0.484564 | 2.26056 | 4.55438 | 0.234802 | 4.12339 | 1 | -0.140524 |\n", + "| 25% | 1.57125e+09 | 0.627912 | 2.68338 | 5.31364 | 0.394273 | 4.20402 | 1 | -0.140196 |\n", + "| 50% | 1.57231e+09 | 0.628307 | 2.84999 | 5.52634 | 0.39477 | 4.80641 | 1 | -0.112316 |\n", + "| 75% | 1.57337e+09 | 0.64684 | 3.06661 | 5.69377 | 0.418402 | 4.89065 | 1 | -0.10966 |\n", + "| max | 1.57442e+09 | 0.647694 | 3.13609 | 5.79639 | 0.419507 | 4.99256 | 1 | -0.109065 |\n", + "+-------+--------------+------------+------------+-----------------+----------------+--------------------+-------------------+--------------------+\n" ] }, { @@ -1243,79 +1256,79 @@ " \n", " mean\n", " 1.572306e+09\n", - " 0.611699\n", - " 2.817644\n", + " 0.611691\n", + " 2.817641\n", " 5.400591\n", - " 0.377308\n", - " 4.629712\n", + " 0.377299\n", + " 4.629763\n", " 1.0\n", - " -0.120877\n", + " -0.120874\n", " \n", " \n", " std\n", " 1.261051e+06\n", - " 0.056542\n", + " 0.056541\n", " 0.278079\n", " 0.378225\n", - " 0.063619\n", - " 0.333362\n", + " 0.063617\n", + " 0.333367\n", " 0.0\n", " 0.014194\n", " \n", " \n", " min\n", " 1.570187e+09\n", - " 0.484569\n", - " 2.260563\n", + " 0.484564\n", + " 2.260560\n", " 4.554382\n", - " 0.234808\n", - " 4.123347\n", + " 0.234802\n", + " 4.123387\n", " 1.0\n", - " -0.140529\n", + " -0.140524\n", " \n", " \n", " 25%\n", " 1.571245e+09\n", - " 0.627919\n", - " 2.683378\n", + " 0.627912\n", + " 2.683375\n", " 5.313644\n", - " 0.394283\n", - " 4.203977\n", + " 0.394273\n", + " 4.204021\n", " 1.0\n", - " -0.140198\n", + " -0.140196\n", " \n", " \n", " 50%\n", " 1.572307e+09\n", - " 0.628315\n", - " 2.849992\n", + " 0.628307\n", + " 2.849990\n", " 5.526337\n", - " 0.394780\n", - " 4.806361\n", + " 0.394770\n", + " 4.806408\n", " 1.0\n", - " -0.112321\n", + " -0.112316\n", " \n", " \n", " 75%\n", " 1.573366e+09\n", - " 0.646848\n", - " 3.066616\n", + " 0.646840\n", + " 3.066612\n", " 5.693771\n", - " 0.418413\n", - " 4.890599\n", + " 0.418402\n", + " 4.890653\n", " 1.0\n", - " -0.109663\n", + " -0.109660\n", " \n", " \n", " max\n", " 1.574424e+09\n", - " 0.647702\n", - " 3.136088\n", + " 0.647694\n", + " 3.136087\n", " 5.796387\n", - " 0.419518\n", - " 4.992498\n", + " 0.419507\n", + " 4.992559\n", " 1.0\n", - " -0.109068\n", + " -0.109065\n", " \n", " \n", "\n", @@ -1324,26 +1337,26 @@ "text/plain": [ " timestamps rms_acc peak_acc peak2peak_acc variance_acc \\\n", "count 5.000000e+01 50.000000 50.000000 50.000000 50.000000 \n", - "mean 1.572306e+09 0.611699 2.817644 5.400591 0.377308 \n", - "std 1.261051e+06 0.056542 0.278079 0.378225 0.063619 \n", - "min 1.570187e+09 0.484569 2.260563 4.554382 0.234808 \n", - "25% 1.571245e+09 0.627919 2.683378 5.313644 0.394283 \n", - "50% 1.572307e+09 0.628315 2.849992 5.526337 0.394780 \n", - "75% 1.573366e+09 0.646848 3.066616 5.693771 0.418413 \n", - "max 1.574424e+09 0.647702 3.136088 5.796387 0.419518 \n", + "mean 1.572306e+09 0.611691 2.817641 5.400591 0.377299 \n", + "std 1.261051e+06 0.056541 0.278079 0.378225 0.063617 \n", + "min 1.570187e+09 0.484564 2.260560 4.554382 0.234802 \n", + "25% 1.571245e+09 0.627912 2.683375 5.313644 0.394273 \n", + "50% 1.572307e+09 0.628307 2.849990 5.526337 0.394770 \n", + "75% 1.573366e+09 0.646840 3.066612 5.693771 0.418402 \n", + "max 1.574424e+09 0.647694 3.136087 5.796387 0.419507 \n", "\n", " crest_factor_acc utilization_acc dc_component_acc \n", "count 50.000000 50.0 50.000000 \n", - "mean 4.629712 1.0 -0.120877 \n", - "std 0.333362 0.0 0.014194 \n", - "min 4.123347 1.0 -0.140529 \n", - "25% 4.203977 1.0 -0.140198 \n", - "50% 4.806361 1.0 -0.112321 \n", - "75% 4.890599 1.0 -0.109663 \n", - "max 4.992498 1.0 -0.109068 " + "mean 4.629763 1.0 -0.120874 \n", + "std 0.333367 0.0 0.014194 \n", + "min 4.123387 1.0 -0.140524 \n", + "25% 4.204021 1.0 -0.140196 \n", + "50% 4.806408 1.0 -0.112316 \n", + "75% 4.890653 1.0 -0.109660 \n", + "max 4.992559 1.0 -0.109065 " ] }, - "execution_count": 23, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -1360,12 +1373,14 @@ } }, "source": [ - "Finally, we can generate a plot that displays these results. When plotting the results for the KPIDemo feature, one selects the KPI to be displayed by passing the parameter `\"kpi\"`. If this parameter is not included, the plot function will display the results of the first KPI after the timestamps, which is the RMS value." + "Finally, we can generate a plot that displays these results.\n", + "When plotting the results for the KPIDemo feature, one selects the KPI to be displayed by passing the parameter `\"kpi\"`.\n", + "If this parameter is not included, the plot function will display the results of the first column in the summary dataframe after the timestamps, which is the RMS value." ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 14, "metadata": { "pycharm": { "name": "#%%\n" @@ -1374,7 +1389,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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n/dtu+KKK5g3bx777rsvp5xyCgBPPPEEr3/969l3333Zd999uf3224f/AmQIrxk6maJUzG3lVnac7fHJ65ay7LENQ3rMF0ybwCdet/d20z3wwANcfvnlXHDBBey555586EMf4tJLL+WAAw7gyiuv5A9/+AMLFy7k05/+NNdeey1f+MIXuOiiizj44INpb2+nVCr1e9xSqcQ111zDhAkTeOqppzjooIM49thjWbZsGRdeeCG33347U6ZMYc2aNQCcccYZHHrooVxzzTVUKhXa23342CSp1gwlHSPpPknLJZ09QJoTJC2TtFTSlXXbJkhaIenrI6PYSZtSMe9uUidT7LHHHhx00EEAzJ49m7lz55LL5dh777054ogjkMTcuXN55JFHADj44IM588wz+drXvsa6desoFPqvs5gZH/3oR5k3bx5HHnkkK1eu5IknnuDmm2/mzW9+M1OmTAFg5513BuDmm2/m/e9/PwD5fJ6JEycOc86zRWo1Q0l54CLgKGAFsEjSQjNblkgzBzgHONjM1krape4wnwJuHSnNTvqEmqEbQ2fHGEwNbrgYN25zm3dra2vffC6X61vO5XL09obAu7PPPpvXvOY1XH/99Rx88MHccMMNPO95z9vquD/4wQ9YtWoVS5YsoVgsMmvWrFHdT/CZkmbN8EBguZk9ZGY9wFXAcXVp3gNcZGZrAczsydoGSfsDuwI3jpBepwEoFfLuJnWamgcffJC5c+fykY98hAMOOIC///3v/aZbv349u+yyC8VikVtuuYV//COMtHT44Yfzk5/8hNWrVwP0uUmPOOIIvvnNbwJQqVRYv379COQmO6RpDKcDjyaWV8R1SfYC9pJ0m6Q7JB0DICkHfBH48IgodRqGUjFPlwfQOE3MV77yFfbZZx/mzZtHsVjkVa96Vb/pTj75ZBYvXszcuXO54oor+mqPe++9N+eeey6HHnoo++67L2eeeSYAX/3qV7nllluYO3cu+++/P8uWLev3uKMVmfXTm3okTiy9CTjGzE6Ny6cALzaz0xNpfgGUgROAGQSX6FzgbcBYM/u8pAXA/OR+if1PA04D2H333fevvTk52eXUyxexcl0Xv/rgIWlLcRqce++9l+c///lpy8gU/V0zSUvMbH5KkkaMNKNJVwIzE8sz4rokK4A7zawMPCzpfmAO8BLgEEkfAMYDLZLazWyLIBwz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", "text/plain": [ "
" ] @@ -1390,7 +1405,7 @@ "''" ] }, - "execution_count": 24, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -1412,13 +1427,13 @@ "\n", "We begin by parsing the results.\n", "In this particular case, we need to define the unit of time to perform the epoch conversion to datetime.\n", - "The default unit is milliseconds, but we need seconds now.\n", + "The default unit is milliseconds, but we use seconds here as the timestamps for this source is based on seconds.\n", "The timezone can also be defined, to increase the precision of these results." ] }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 38, "metadata": { "pycharm": { "name": "#%%\n" @@ -1442,7 +1457,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 39, "metadata": { "pycharm": { "name": "#%%\n" @@ -1481,41 +1496,41 @@ " \n", " 0\n", " 1570186860\n", - " 2\n", + " 0\n", " False\n", - " 0.939155\n", + " 0.912743\n", " 2019-10-04 11:01:00+00:00\n", " \n", " \n", " 1\n", " 1570273260\n", - " 2\n", + " 0\n", " False\n", - " 0.872610\n", + " 0.972841\n", " 2019-10-05 11:01:00+00:00\n", " \n", " \n", " 2\n", " 1570359660\n", - " 2\n", + " 0\n", " False\n", - " 0.982989\n", + " 0.929741\n", " 2019-10-06 11:01:00+00:00\n", " \n", " \n", " 3\n", " 1570446060\n", - " 2\n", + " 0\n", " False\n", - " 0.996053\n", + " 0.999620\n", " 2019-10-07 11:01:00+00:00\n", " \n", " \n", " 4\n", " 1570532460\n", - " 2\n", + " 0\n", " False\n", - " 0.921091\n", + " 0.978940\n", " 2019-10-08 11:01:00+00:00\n", " \n", " \n", @@ -1524,14 +1539,14 @@ ], "text/plain": [ " timestamps labels uncertain mode_probability datetime\n", - "0 1570186860 2 False 0.939155 2019-10-04 11:01:00+00:00\n", - "1 1570273260 2 False 0.872610 2019-10-05 11:01:00+00:00\n", - "2 1570359660 2 False 0.982989 2019-10-06 11:01:00+00:00\n", - "3 1570446060 2 False 0.996053 2019-10-07 11:01:00+00:00\n", - "4 1570532460 2 False 0.921091 2019-10-08 11:01:00+00:00" + "0 1570186860 0 False 0.912743 2019-10-04 11:01:00+00:00\n", + "1 1570273260 0 False 0.972841 2019-10-05 11:01:00+00:00\n", + "2 1570359660 0 False 0.929741 2019-10-06 11:01:00+00:00\n", + "3 1570446060 0 False 0.999620 2019-10-07 11:01:00+00:00\n", + "4 1570532460 0 False 0.978940 2019-10-08 11:01:00+00:00" ] }, - "execution_count": 26, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -1554,7 +1569,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 40, "metadata": { "pycharm": { "name": "#%%\n" @@ -1566,34 +1581,34 @@ "output_type": "stream", "text": [ "=== ModeId ===\n", - "request_id 09fa086e2bcf4d25b2ad39a442d2c5ad\n", + "request_id c2d48d6d59c317c39469d3eaade7de96\n", "from 20191004-11:01.00 to 20191122-12:01.00\n", "\n", "Labels\n", "+----------+----------+-----------+--------------------+------------+\n", "| labels | counts | portion | mode_probability | datetime |\n", "|----------+----------+-----------+--------------------+------------|\n", - "| 0 | 8 | 16 | 8 | 8 |\n", - "| 1 | 25 | 50 | 25 | 25 |\n", - "| 2 | 17 | 34 | 17 | 17 |\n", + "| 0 | 17 | 34 | 17 | 17 |\n", + "| 1 | 8 | 16 | 8 | 8 |\n", + "| 2 | 25 | 50 | 25 | 25 |\n", "+----------+----------+-----------+--------------------+------------+\n", "\n", - "Lables & uncertain labels\n", + "Labels & uncertain labels\n", "+------------+-----------+--------------------+------------+----------+\n", "| | portion | mode_probability | datetime | counts |\n", "|------------+-----------+--------------------+------------+----------|\n", - "| (0, False) | 16 | 8 | 8 | 8 |\n", - "| (1, False) | 50 | 25 | 25 | 25 |\n", - "| (2, False) | 34 | 17 | 17 | 17 |\n", + "| (0, False) | 34 | 17 | 17 | 17 |\n", + "| (1, False) | 16 | 8 | 8 | 8 |\n", + "| (2, False) | 50 | 25 | 25 | 25 |\n", "+------------+-----------+--------------------+------------+----------+\n", "\n", "Emerging Modes\n", "+----+---------+-----------------+-----------------+-------------------+---------------------------+\n", "| | modes | emerging_time | max_prob_time | max_probability | datetime |\n", "|----+---------+-----------------+-----------------+-------------------+---------------------------|\n", - "| 0 | 2 | 1570186860 | 1570446060 | 0.996053 | 2019-10-04 11:01:00+00:00 |\n", - "| 1 | 0 | 1571655660 | 1572264060 | 0.997885 | 2019-10-21 11:01:00+00:00 |\n", - "| 2 | 1 | 1572350460 | 1573646460 | 0.989592 | 2019-10-29 12:01:00+00:00 |\n", + "| 0 | 0 | 1570186860 | 1570446060 | 0.99962 | 2019-10-04 11:01:00+00:00 |\n", + "| 1 | 1 | 1571655660 | 1571742060 | 0.997126 | 2019-10-21 11:01:00+00:00 |\n", + "| 2 | 2 | 1572350460 | 1573041660 | 0.999948 | 2019-10-29 12:01:00+00:00 |\n", "+----+---------+-----------------+-----------------+-------------------+---------------------------+\n" ] }, @@ -1602,18 +1617,18 @@ "text/plain": [ "[ counts portion mode_probability datetime\n", " labels \n", - " 0 8 16.0 8 8\n", - " 1 25 50.0 25 25\n", - " 2 17 34.0 17 17,\n", + " 0 17 34.0 17.0 17\n", + " 1 8 16.0 8.0 8\n", + " 2 25 50.0 25.0 25,\n", " portion mode_probability datetime counts\n", " labels uncertain \n", - " 0 False 16.0 8 8 8\n", - " 1 False 50.0 25 25 25\n", - " 2 False 34.0 17 17 17,\n", + " 0 False 34.0 17.0 17 17\n", + " 1 False 16.0 8.0 8 8\n", + " 2 False 50.0 25.0 25 25,\n", " modes emerging_time max_prob_time max_probability \\\n", - " 0 2 1570186860 1570446060 0.996053 \n", - " 1 0 1571655660 1572264060 0.997885 \n", - " 2 1 1572350460 1573646460 0.989592 \n", + " 0 0 1570186860 1570446060 0.999620 \n", + " 1 1 1571655660 1571742060 0.997126 \n", + " 2 2 1572350460 1573041660 0.999948 \n", " \n", " datetime \n", " 0 2019-10-04 11:01:00+00:00 \n", @@ -1621,7 +1636,7 @@ " 2 2019-10-29 12:01:00+00:00 ]" ] }, - "execution_count": 27, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -1646,7 +1661,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 47, "metadata": { "pycharm": { "name": "#%%\n" @@ -1655,7 +1670,7 @@ "outputs": [ { "data": { - "image/png": "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SVK7qq+v33rnnXceA3D77bcPmD59+qZS2dq1a7vV19ePqq2tHVtXVzfmscce6wWwZs2abmeeeeZbR48efcqMGTNGpLSnM/imm24aMG7cuJPHjBkz9uKLLx7R0PDmTuYZM2ZsrampoaamhokTJ+5cuXJlz9bGbaIsSZKkdnXppZdumjdvXv9du3bFc88913vKlCk7S2WzZs0aVldXt2vp0qXPXnPNNatmzpx5IsBVV101bMqUKTuWLVv2zAUXXLBl9erVPQGefPLJI++6664BCxYsWLx48eJna2pq0s033zxwX+t+7bXXYt68eQPPO++8ra2N20RZkiRJ7WrSpEmvrFy58ohbbrllQH19/V4J6+OPP97n8ssv3wgwbdq07Vu2bOm+adOmmkcffbTPZZddthHgoosu2tq3b983AO6///4+ixYt6l1XV3fymDFjxj788MN9ly9ffsS+1j1z5swTJk+evGPq1Kk7Whu3J/NJkiSp3U2dOnXL1VdfffwDDzywZN26dQecg6aU4sILL9x44403rmrutZ/5zGeGbtiwofvPfvaz3x3IuuxRliRJUru74oorNlx55ZUvn3HGGa+UT580adL2OXPmDASYP39+n/79+zcMGDCgcfLkydvnzp07EOCOO+7ou23btm4AU6dO3TZ//vz+q1at6g55jPPSpUvfNP74m9/85qCf//zn/e69997l3bp1O6CY7VGWJEk6XPQc2NDml4droVGjRu2ePXv2uqbTr7/++pcvueSSkbW1tWN79erVOHfu3OcBrrvuupenT59+0ujRo0+ZOHHijqFDh74OMGHChFdnz5696txzz61tbGykR48e6bvf/e5LtbW1r5cvd9asWSOGDh362sSJE08GOP/88zd//etfX92azYvyMwhba+LEiWnBggUHPL8kSVJXFBFPpJQmVjuOhQsXvlBXV7eh2nEcyhYuXDiorq5uZKUyh15IkiRJFZgoS5IkSRWYKEuSJEkVmChLkiRJFRxcotzY7rfpliRJkqri4C4PsuVpuC3aKBSp64pLDvzqMjp41r4k6UB4HWVJkqTDxKBB1G3c2Hb538CBNGzYwML9vSYiJkybNm3Tfffd9zzA7t27OfbYY+vGjx+/86GHHlrW0nUNHz583IIFC54bOnRoi67dvHjx4p7vf//7T9qyZUv3cePG7fqnf/qn54888shW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", + "image/png": "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HlJVVTUik8kMe+GFFyoAtmzZ0m7ixIlnDR06dOS0adMGuh/tDL799tt7jBo1aviwYcNGXHLJJQNra4/tZK6rq+MPf/hD10996lO7AWbOnLnzV7/61alNjVuJsoiIiIjk1WWXXbZr/vz5lQcPHrQVK1Z0njBhwoFs2axZs/plMpmDq1evfvmGG27YOGPGjMEA11xzTb8JEybsX7NmzUsXXXRRzebNmzsALF68uNODDz7YY+HChStXrlz5cllZmd9xxx09k8vbunVredeuXd9s3749AIMGDTq8devWDk2NW4myiIiIiOTVuHHjXt+wYUPHu+66q0d1dfWeZNmLL77Y9fLLL98JMGXKlH01NTXlu3btKnv++ee7zpw5cyfA9OnT93Tr1u1NgMcee6zr8uXLO2cymeHDhg0b8eyzz3Zbu3Ztx3zErZP5RERERCTvJk+eXHPddded8cQTT6zatm1bs3NQd7eLL75452233bbxeO/p06dP7b59+9odOXKE9u3bs27dug59+vQ53NRlqUdZRERERPLuiiuu2HHVVVdtOuecc15Pvj5u3Lh9c+bM6QmwYMGCrpWVlbU9evSoGz9+/L65c+f2BLj//vu77d27tx3A5MmT9y5YsKBy48aN5RDGOK9evfqYYRVlZWWMHz9+35w5cyoBfvKTn/S88MILa5oasxJlERERkTaiZ08adWm1fMxvyJAhR2bPnr0t9/Wbb75505IlSzpXVVWNuPbaa/vPnTv3FYCbbrpp03PPPddl6NChIx966KHKvn37HgYYM2bModmzZ2+cNGlSVVVV1Yjzzz+/av369e1z5/ud73xnww9/+MPTBwwYcPbu3bvLv/jFL+5o6uez5BmETTV27FhfuHBhs6cXERERKUVmtsjdxxY7jqVLl67LZDJNThDbkqVLl/bKZDKD0srUoywiIiIikkKJsoiIiIhICiXKIiIiIiIplCiLiIiIiKQ4oUT5SN7v0i0iIiIiUhwndMORZcvArKVCESldzb+2jLSIe7WhEhGRptPQCxEREZG2ohcZjDEt9uhFpqFFmtmYj3zkI4Oz/x85coTKysrM+9///qFNCb1///6jNm/e3OhO3m9+85u9BwwYcLaZjWnKdElKlEVERETaip0nNpqgOfOrqKioW7VqVcX+/fsN4OGHH+7Wp0+fvA/gPffcc/c/+eSTq/v169fkW1dnKVEWERERkbyqrq7e88ADD5wKMG/evB5Tp07dlS3bunVru+rq6iFVVVUjMpnMsBdeeKECYMuWLe0mTpx41tChQ0dOmzZtYPImebfffnuPUaNGDR82bNiISy65ZGBt7VtvEDhx4sTX3/72tzc7SQYlyiIiIiKSZ5dddtmu+fPnVx48eNBWrFjRecKECQeyZbNmzeqXyWQOrl69+uUbbrhh44wZMwYDXHPNNf0mTJiwf82aNS9ddNFFNZs3b+4AsHjx4k4PPvhgj4ULF65cuXLly2VlZX7HHXf0zEfcSpRFREREJK/GjRv3+oYNGzreddddPaqrq/cky1588cWul19++U6AKVOm7KupqSnftWtX2fPPP9915syZOwGmT5++p1u3bm8CPPbYY12XL1/eOZPJDB82bNiIZ599ttvatWs75iPulh2nIiIiIiKSYvLkyTXXXXfdGU888cSqbdu2NTsHdXe7+OKLd952220bWzK+NOpRFhEREZG8u+KKK3ZcddVVm84555zXk6+PGzdu35w5c3oCLFiwoGtlZWVtjx496saPH79v7ty5PQHuv//+bnv37m0HMHny5L0LFiyo3LhxYzmEMc6rV6/ukI+YlSiLiIiItBU9eetZbwWa35AhQ47Mnj17W+7rN99886YlS5Z0rqqqGnHttdf2nzt37isAN91006bnnnuuy9ChQ0c+9NBDlX379j0MMGbMmEOzZ8/eOGnSpKqqqqoR559/ftX69evb5873xhtvPK1Pnz7v2Lp1a4dMJjNi2rRpA5v68Sx5BmGTJ7axDgubPb1IW6EbjhSZbjgiIgVml7LI3ccWO46lS5euy2QyO4odx8ls6dKlvTKZzKC0MvUoi4iIiIikUKIsIiIiIpJCibKIiIiISAolyiIiIiIiKZQoi4iIiIikUKIsIiIiIpJCd+YTERERaSse7JXh8M6Wy/869Kzl73Ysre8tZjZmypQpux599NFXAI4cOcJpp52WGT169IGnnnpqTWMX1b9//1ELFy5c0bdv30Zdu3nKlCmDly1bdkr79u199OjRB+65555XO3bs2KQrtqpHWURERKStaMkkuZHzq6ioqFu1alXF/v37DeDhhx/u1qdPnyMtGkeKSy+9dNfatWuXr1q16qVDhw7Z97///V5NnYcSZRERERHJq+rq6j0PPPDAqQDz5s3rMXXq1F3Z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", "text/plain": [ "
" ] @@ -1671,7 +1686,7 @@ "''" ] }, - "execution_count": 28, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -1695,7 +1710,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 48, "metadata": { "pycharm": { "name": "#%%\n" @@ -1742,81 +1757,81 @@ " \n", " 0\n", " 1570186860\n", - " 0.647094\n", - " 2.686565\n", + " 0.647086\n", + " 2.686563\n", " 5.313293\n", - " 0.418730\n", - " 4.151739\n", + " 0.418720\n", + " 4.151786\n", " 1\n", - " -0.140239\n", - " 1970-01-19 04:09:46.860000+00:00\n", - " 2\n", + " -0.140237\n", + " 2019-10-04 11:01:00+00:00\n", + " 0\n", " False\n", - " 0.939155\n", + " 0.912743\n", " 2019-10-04 11:01:00+00:00\n", " \n", " \n", " 1\n", " 1570273260\n", - " 0.647131\n", - " 2.691755\n", + " 0.647123\n", + " 2.691750\n", " 5.367004\n", - " 0.418778\n", - " 4.159523\n", + " 0.418769\n", + " 4.159563\n", " 1\n", - " -0.140425\n", - " 1970-01-19 04:11:13.260000+00:00\n", - " 2\n", + " -0.140420\n", + " 2019-10-05 11:01:00+00:00\n", + " 0\n", " False\n", - " 0.872610\n", + " 0.972841\n", " 2019-10-05 11:01:00+00:00\n", " \n", " \n", " 2\n", " 1570359660\n", - " 0.646627\n", - " 2.715255\n", + " 0.646619\n", + " 2.715251\n", " 5.414856\n", - " 0.418126\n", - " 4.199108\n", + " 0.418116\n", + " 4.199152\n", " 1\n", - " -0.140243\n", - " 1970-01-19 04:12:39.660000+00:00\n", - " 2\n", + " -0.140239\n", + " 2019-10-06 11:01:00+00:00\n", + " 0\n", " False\n", - " 0.982989\n", + " 0.929741\n", " 2019-10-06 11:01:00+00:00\n", " \n", " \n", " 3\n", " 1570446060\n", - " 0.646881\n", - " 2.685151\n", + " 0.646873\n", + " 2.685147\n", " 5.351562\n", - " 0.418455\n", - " 4.150921\n", + " 0.418445\n", + " 4.150966\n", " 1\n", - " -0.140351\n", - " 1970-01-19 04:14:06.060000+00:00\n", - " 2\n", + " -0.140347\n", + " 2019-10-07 11:01:00+00:00\n", + " 0\n", " False\n", - " 0.996053\n", + " 0.999620\n", " 2019-10-07 11:01:00+00:00\n", " \n", " \n", " 4\n", " 1570532460\n", - " 0.646649\n", - " 2.726611\n", + " 0.646643\n", + " 2.726605\n", " 5.395325\n", - " 0.418155\n", - " 4.216521\n", + " 0.418147\n", + " 4.216556\n", " 1\n", - " -0.140429\n", - " 1970-01-19 04:15:32.460000+00:00\n", - " 2\n", + " -0.140423\n", + " 2019-10-08 11:01:00+00:00\n", + " 0\n", " False\n", - " 0.921091\n", + " 0.978940\n", " 2019-10-08 11:01:00+00:00\n", " \n", " \n", @@ -1825,25 +1840,25 @@ ], "text/plain": [ " timestamps rms_acc peak_acc peak2peak_acc variance_acc \\\n", - "0 1570186860 0.647094 2.686565 5.313293 0.418730 \n", - "1 1570273260 0.647131 2.691755 5.367004 0.418778 \n", - "2 1570359660 0.646627 2.715255 5.414856 0.418126 \n", - "3 1570446060 0.646881 2.685151 5.351562 0.418455 \n", - "4 1570532460 0.646649 2.726611 5.395325 0.418155 \n", + "0 1570186860 0.647086 2.686563 5.313293 0.418720 \n", + "1 1570273260 0.647123 2.691750 5.367004 0.418769 \n", + "2 1570359660 0.646619 2.715251 5.414856 0.418116 \n", + "3 1570446060 0.646873 2.685147 5.351562 0.418445 \n", + "4 1570532460 0.646643 2.726605 5.395325 0.418147 \n", "\n", " crest_factor_acc utilization_acc dc_component_acc \\\n", - "0 4.151739 1 -0.140239 \n", - "1 4.159523 1 -0.140425 \n", - "2 4.199108 1 -0.140243 \n", - "3 4.150921 1 -0.140351 \n", - "4 4.216521 1 -0.140429 \n", + "0 4.151786 1 -0.140237 \n", + "1 4.159563 1 -0.140420 \n", + "2 4.199152 1 -0.140239 \n", + "3 4.150966 1 -0.140347 \n", + "4 4.216556 1 -0.140423 \n", "\n", - " datetime_x labels uncertain mode_probability \\\n", - "0 1970-01-19 04:09:46.860000+00:00 2 False 0.939155 \n", - "1 1970-01-19 04:11:13.260000+00:00 2 False 0.872610 \n", - "2 1970-01-19 04:12:39.660000+00:00 2 False 0.982989 \n", - "3 1970-01-19 04:14:06.060000+00:00 2 False 0.996053 \n", - "4 1970-01-19 04:15:32.460000+00:00 2 False 0.921091 \n", + " datetime_x labels uncertain mode_probability \\\n", + "0 2019-10-04 11:01:00+00:00 0 False 0.912743 \n", + "1 2019-10-05 11:01:00+00:00 0 False 0.972841 \n", + "2 2019-10-06 11:01:00+00:00 0 False 0.929741 \n", + "3 2019-10-07 11:01:00+00:00 0 False 0.999620 \n", + "4 2019-10-08 11:01:00+00:00 0 False 0.978940 \n", "\n", " datetime_y \n", "0 2019-10-04 11:01:00+00:00 \n", @@ -1853,7 +1868,7 @@ "4 2019-10-08 11:01:00+00:00 " ] }, - "execution_count": 29, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -1872,12 +1887,12 @@ }, "source": [ "The MVG library provides additional visualization functions that can help towards this goal.\n", - "Thus, we import the visualization module" + "Thus, we import the visualization module." ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 49, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:17.670019Z", @@ -1900,12 +1915,12 @@ } }, "source": [ - "Now, we can proceed to plot the boxplot." + "Now, we can proceed to plot the boxplot for the requested kpi." ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 50, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:22:17.902871Z", @@ -1916,27 +1931,19 @@ } }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/oskar/viking_unix/mvg/env/lib/python3.8/site-packages/pandas/core/arrays/categorical.py:2630: FutureWarning: The `inplace` parameter in pandas.Categorical.set_categories is deprecated and will be removed in a future version. Removing unused categories will always return a new Categorical object.\n", - " res = method(*args, **kwargs)\n" - ] - }, { "data": { "text/plain": [ "" ] }, - "execution_count": 31, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAADGCAYAAADIUGp/AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAUTElEQVR4nO3dfbRddX3n8feHAE0LYkMjkQISnAmt5UEcM6jFZVMtD9NZgks6FqUa6lTqmqG2dZYzYBlQGNeydjpj66JTUxqBVQXr44olLVDNhbGKk+AgMaFoCCJJtQQSHy4wPH7nj7NvPBwuuefGu++5O/f9WuusnP3bv9/e33uzIZ/120+pKiRJkrpov1EXIEmStLcMMpIkqbMMMpIkqbMMMpIkqbMMMpIkqbMMMpIkqbMMMpJak6SS/MsZ2taSJLck+WGSP56JbUrqPoOMNA8k+VaSR5KMJ9mV5PokR426rglJzkvyxSm6nQ88ABxSVf9pFmr6iSSrk/wgyXeTvHNg/WuS/GOSh5OsS3L0MGOTHJjkk83fSSVZ0fbPIu3LDDLS/PHaqjoYOBz4Z+BDI65nuo4GNtdePMUzyf57sb/3AMua/f4y8J+TnNFsbzHwaeC/AocCG4CPDzO28UXgN4Dv7kVdkvoYZKR5pqr+H/BJ4Bcm2pI8N8k1SXYkuTfJxUn2S3Jokm1JXtv0OzjJliRvaZavSvLnSW5qTvnc3D8z0W8P+3gR8OfAK5oZo+9NMvYqYCW9QDCe5FeaWY8PJvmn5vPBJD/R9F/R1P1fknwX+Mgk23xPkr/qW17azJBMhJ6VwOVVtauq7gT+AjivWfd6YFNVfaL5fb4HeHGSn59qbFU9VlUfrKovAk/u4a9K0hAMMtI8k+SngF8Hbu1r/hDwXOCFwC8BbwF+s6p2Am8F/iLJYcD/BG6vqmv6xp4LXA4sBm4HPvosu362fdwJvB34clUdXFU/PTiwqs5rtvuBps/fA38AvBw4CXgxcDJwcd+w59ObLTma3mmpoSVZRG/m6mt9zV8Djmu+H9e/rqoeAu4GjhtirKQZtDfTrZK66bNJngAOAnYApwMkWQCcA5xUVT8EJi6mfTPwl1V1Y5JPAJ+nFwxOHNju9VV1S7OtPwC+n+SoqrpvosNU+9jLn+dc4Heq6v5mH+8FPkzvdA/AU8ClVfXoXmz74ObP7/e1fR94Tt/6HQNjJtZPNVbSDHJGRpo/XtfMdiwELgBuTvJ8ejMpBwD39vW9Fziib3kVcDxwVVU9OLDd3YGlqsaBncDPDvQZZh/T9bOTbK9/vzua0z57Y7z585C+tkOAH/atP4Snm1g/1VhJM8ggI80zVfVkVX2a3vUZr6R3J9Dj9E7BTHgBsB12z6asAq4B/sMkt1PvvvspycH0Zm3+aaDPHvcBTPsC3mYfg9vr3+9U23wI+Km+5efvHli1C/gOvVNWE14MbGq+b+pfl+Qg4F/Qu25mqrGSZpBBRppn0nMWsAi4s6qeBP4aeF+S5zQX674TmLgQ9t30QsFbgT8CrmnCzYRfTfLKJAfSu1bm1v7TStALT1Ps45+BI5ttDOta4OIkz2vuIrqkb3vDuB14VZIXJHkucNHA+mua7S9qLuJ9G3BVs+4zwPFJzk6ysNn3HVX1j0OMnbg9e2GzeGCShUkyjdolNQwy0vzxuSTjwA+A9wErq2piluB36M1QbKV3a/DHgNVJXkovcLylCSN/SC/UXNi33Y8Bl9I7pfRSercVT2bSfTTrvkBvxuK7SR4Y8uf5b/Rue74D2Ah8tWkbSlXdRO+W6TuA24C/GehyKb0LeO8Fbgb+qKr+rhm7Azib3u9xF/AyetcATTm2cRfwCL1Tazc03ye920vSnmUvHskgScDu26K3VdXFU/WVpDY4IyNJkjrLICNJkjrLU0uSJKmznJGRJEmdZZCRJEmdtc+8omDx4sW1dOnSUZexT3nooYc46KCDRl2GNCmPT81lHp8z67bbbnugqp432bpWg0zz2vo/ARYAV1bV+yfp8wZ6b44t4GtV9aam/Ul6z4YA+HZVnbmnfS1dupQNGzbMYPUaGxtjxYoVoy5DmpTHp+Yyj8+ZleTeZ1vXWpBpnvx5BXAqsA1Yn2RNVW3u67OM3tM0T6mqXc3bdSc8UlUntVWfJEnqvjavkTkZ2FJVW6vqMeA64KyBPm8DrmjeTcLEW2wlSZKG0WaQOYK+t+LSm5UZfNPtscCxSf4hya3NqagJC5NsaNpf12KdkiSpo0Z9se/+wDJgBXAkcEuSE6rqe8DRVbU9yQuBLyTZWFV39w9Ocj5wPsCSJUsYGxubzdr3eePj4/5ONWd5fGou8/icPW0Gme3AUX3LRzZt/bYBX6mqx4F7knyDXrBZX1XbAapqa5Ix4CX0XsK2W1WtAlYBLF++vLywamZ5sZrmMo9PzZbZfDG5D6mdvjaDzHpgWZJj6AWYc4A3DfT5LPBG4CNJFtM71bQ1ySLg4ap6tGk/BfhAi7VKkuaJE64+YVr9j7/q+JYqeabp1rZx5capO+3jWgsyVfVEkgvovaJ+AbC6qjYluQzYUFVrmnWnJdkMPAm8q6oeTPKLwIeTPEXvOp7399/tJEnS3pqNf/ydMZw9rV4jU1VrgbUDbZf0fS/gnc2nv8+XgOnFUkmSNO/4igJJktRZBhlJktRZBhlJktRZBhlJktRZBhlJktRZBhlJktRZBhlJktRZBhlJktRZBhlJktRZBhlJktRZBhlJktRZrb5rSdL8NN03+O61q9vfhW8XluY2g4ykGTfdf/yTtFTJ0/XeUytpX+KpJUkjV1XT/qxbt27aYyTtewwykiSpswwykiSpswwykiSpswwykiSpswwykiSpswwykiSpswwykiSpswwykiSpswwykiSpswwykiSpswwykiSpswwykiSpswwykiSpswwykiSpswwykiSps1oNMknOSHJXki1JLnyWPm9IsjnJpiQf62tfmeSbzWdlm3VKkqRu2r+tDSdZAFwBnApsA9YnWVNVm/v6LAMuAk6pql1JDmvaDwUuBZYDBdzWjN3VVr2SJKl72pyRORnYUlVbq+ox4DrgrIE+bwOumAgoVXV/0346cFNV7WzW3QSc0WKtkiSpg9oMMkcA9/Utb2va+h0LHJvkH5LcmuSMaYyVJEnzXGunlqax/2XACuBI4JYkJww7OMn5wPkAS5YsYWxsrIUS56/x8XF/p5qzPD41l3l8zp42g8x24Ki+5SObtn7bgK9U1ePAPUm+QS/YbKcXbvrHjg3uoKpWAasAli9fXitWrBjsoh/D2NgY/k41V3l8ai7z+Jw9bZ5aWg8sS3JMkgOBc4A1A30+SxNYkiymd6ppK3ADcFqSRUkWAac1bZIkSbu1NiNTVU8kuYBeAFkArK6qTUkuAzZU1Rp+FFg2A08C76qqBwGSXE4vDAFcVlU726pVkiR1U6vXyFTVWmDtQNslfd8LeGfzGRy7GljdZn2SJKnbfLKvJEnqLIOMJEnqrCmDTJKXJ3lO3/IhSV7WblmSJElTG2ZG5n8B433L402bJEnSSA0TZNJclAtAVT3F6B+kJ0mSNFSQ2ZrkHUkOaD6/S+9ZL5IkSSM1TJB5O/CL9J62uw14Gc1rASRJkkZpylNEzRupz5mFWiRJkqZlmLuWrk7y033Li5L4oDpJkjRyw5xaOrGqvjexUFW7gJe0VpEkSdKQhgky+zUvbgQgyaF415IkSZoDhgkkfwx8OckngAC/Bryv1aokSZKGMMzFvtckuQ345abp9VW1ud2yJEmSpjbUKaKq2pRkB7AQIMkLqurbrVYmSZI0hWHuWjozyTeBe4CbgW8Bf9tyXZIkSVMa5mLfy4GXA9+oqmOA1wC3tlqVJEnSEIYJMo9X1YP07l7ar6rWActbrkuSJGlKw1wj870kBwO3AB9Ncj/wULtlSZIkTW2YGZmzgIeB3wf+DrgbeG2bRUmSJA1jmNuvJ2ZfngKuHlyf5MtV9YqZLkySJGkqw8zITGXhDGxDkiRp2mYiyNQMbEOSJGnaZiLISJIkjcRMBJnMwDYkSZKmbZgn+x6UZL/m+7HNk34P6Ovy5taqkyRJ2oNhZmRuARYmOQK4kV5wuWpiZVV9vZ3SJEmS9myYIJOqehh4PfBnVfXvgOPaLUuSJGlqQwWZJK8AzgWub9oWtFeSJEnScIYJMr8HXAR8pqo2JXkhsK7VqiRJkoYwZZCpqpur6syq+sNmeWtVvWOYjSc5I8ldSbYkuXCS9ecl2ZHk9ubzW33rnuxrXzOdH0qSJM0PU76iIMly4N3A0v7+VXXiFOMWAFcApwLbgPVJ1lTV5oGuH6+qCybZxCNVddJU9UmSpPlrmLdffxR4F7CR3vuWhnUysKWqtgIkuY7eCygHg4wkSdJeGeYamR1Vtaaq7qmqeyc+Q4w7Arivb3lb0zbo7CR3JPlkkqP62hcm2ZDk1iSvG2J/kiRpnhlmRubSJFcCnwcenWisqk/PwP4/B1xbVY8m+W16b9d+dbPu6Kra3lxc/IUkG6vq7v7BSc4HzgdYsmQJY2NjM1CSJoyPj/s71Zzl8am5zONz9gwTZH4T+HngAH50aqmAqYLMdqB/huXIpm23qnqwb/FK4AN967Y3f25NMga8BLh7YPwqYBXA8uXLa8WKFUP8OBrW2NgY/k41V3l8ai7z+Jw9wwSZf11VP7cX214PLEtyDL0Acw7wpv4OSQ6vqu80i2cCdzbti4CHm5maxcAp9IUcSZIkGC7IfCnJL0xyt9EeVdUTSS4AbqD3AL3VzXNoLgM2VNUa4B1JzgSeAHYC5zXDXwR8OMlT9K7jef909y9JkvZ9ewwySQL8EnBuknvoXSMToKa6/Zpep7XA2oG2S/q+X0TvYXuD474EnDDMDyBJkuavPQaZqqokhwHLZqkeSZKkoQ1zaulTwGFVtb7tYiRJkqZjmCDzMnqnlu4FHmIap5YkSZLaNEyQOb31KiRJkvbClEFmyKf4SpIkzbphXlEgSZI0JxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZxlkJElSZ7UaZJKckeSuJFuSXDjJ+vOS7Ehye/P5rb51K5N8s/msbLNOSZLUTfu3teEkC4ArgFOBbcD6JGuqavNA149X1QUDYw8FLgWWAwXc1ozd1Va9kiSpe9qckTkZ2FJVW6vqMeA64Kwhx54O3FRVO5vwchNwRkt1SpKkjmozyBwB3Ne3vK1pG3R2kjuSfDLJUdMcK0mS5rHWTi0N6XPAtVX1aJLfBq4GXj3s4CTnA+cDLFmyhLGxsVaKnK/Gx8f9nWrO8vjUXObxOXvaDDLbgaP6lo9s2narqgf7Fq8EPtA3dsXA2LHBHVTVKmAVwPLly2vFihWDXfRjGBsbw9+p5iqPT81lHp+zp81TS+uBZUmOSXIgcA6wpr9DksP7Fs8E7my+3wCclmRRkkXAaU2bJEnSbq3NyFTVE0kuoBdAFgCrq2pTksuADVW1BnhHkjOBJ4CdwHnN2J1JLqcXhgAuq6qdbdUqSZK6qdVrZKpqLbB2oO2Svu8XARc9y9jVwOo265MkSd3mk30lSVJnGWQkSVJnGWQkSVJnGWQkSVJnGWQkSVJnGWQkSVJnjfoVBdoLJ1x9wuzt7Or2d7Fx5cb2dyJJ2icZZDpob/7hT9JCJc9UVbOyH0mSwFNL80ZVTfuzbt26aY+RJGk2GWQkSVJnGWQkSVJnGWQkSVJnGWQkSVJnZV+5QDPJDuDeUdexj1kMPDDqIqRn4fGpuczjc2YdXVXPm2zFPhNkNPOSbKiq5aOuQ5qMx6fmMo/P2eOpJUmS1FkGGUmS1FkGGe3JqlEXIO2Bx6fmMo/PWeI1MpIkqbOckZEkSZ1lkNEzJDkjyV1JtiS5cNT1SP2SrE5yf5Kvj7oWaVCSo5KsS7I5yaYkvzvqmvZ1nlrS0yRZAHwDOBXYBqwH3lhVm0damNRI8ipgHLimqo4fdT1SvySHA4dX1VeTPAe4DXid/w9tjzMyGnQysKWqtlbVY8B1wFkjrknarapuAXaOug5pMlX1nar6avP9h8CdwBGjrWrfZpDRoCOA+/qWt+F/hJI0bUmWAi8BvjLiUvZpBhlJkmZYkoOBTwG/V1U/GHU9+zKDjAZtB47qWz6yaZMkDSHJAfRCzEer6tOjrmdfZ5DRoPXAsiTHJDkQOAdYM+KaJKkTkgT4S+DOqvofo65nPjDI6Gmq6gngAuAGehep/XVVbRptVdKPJLkW+DLwc0m2Jfn3o65J6nMK8Gbg1Ulubz6/Ouqi9mXefi1JkjrLGRlJktRZBhlJktRZBhlJktRZBhlJktRZBhlJktRZBhlJI5OkkvxV3/L+SXYk+ZtpbudbSRbPfIWS5jqDjKRRegg4PslPNsun4pOkJU2DQUbSqK0F/m3z/Y3AtRMrkhya5LNJ7khya5ITm/afSXJjkk1JrgTSN+Y3kvyf5kFkH06yoPlcleTrSTYm+f3Z/AEltccgI2nUrgPOSbIQOJGnvyn4vcD/raoTgXcD1zTtlwJfrKrjgM8ALwBI8iLg14FTquok4EngXOAk4IiqOr6qTgA+0vYPJWl27D/qAiTNb1V1R5Kl9GZj1g6sfiVwdtPvC81MzCHAq4DXN+3XJ9nV9H8N8FJgfe+VN/wkcD/wOeCFST4EXA/c2OoPJWnWGGQkzQVrgP8OrAB+5sfYToCrq+qiZ6xIXgycDrwdeAPw1h9jP5LmCE8tSZoLVgPvraqNA+3/m96pIZKsAB6oqh8AtwBvatr/DbCo6f954NeSHNasOzTJ0c0dTftV1aeAi4F/1e6PI2m2OCMjaeSqahvwp5Oseg+wOskdwMPAyqb9vcC1STYBXwK+3Wxnc5KLgRuT7Ac8DvxH4BHgI00bwDNmbCR1k2+/liRJneWpJUmS1FkGGUmS1FkGGUmS1FkGGUmS1FkGGUmS1FkGGUmS1FkGGUmS1FkGGUmS1Fn/H3Igs5lWSdUgAAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "
" ] @@ -1976,7 +1983,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.7.11" }, "toc": { "base_numbering": 1, diff --git a/docs/source/content/examples/2-sources_and_measurements.ipynb b/docs/source/content/examples/2-sources_and_measurements.ipynb index e8dfba12..c30622e0 100644 --- a/docs/source/content/examples/2-sources_and_measurements.ipynb +++ b/docs/source/content/examples/2-sources_and_measurements.ipynb @@ -44,10 +44,11 @@ } }, "source": [ - "Note that the `TOKEN` is used both for authorization and authentication.\n", - "Thus, each unique token represents a unique user and each user has their own unique database on the VA service.\n", + ".. note:: Each `TOKEN` is used both for authorization and authentication.\n", + "Thus, each unique token represents a unique user and each user has their own unique database on the VA-MVG' service.\n", "\n", - "**You need to insert your token received from Viking Analytics here:**" + "**You need to insert your token received from Viking Analytics here:**\n", + "Just replace `\"os.environ['TEST_TOKEN']\"` by your token as a string." ] }, { @@ -75,7 +76,7 @@ "id": "prompt-concentrate", "metadata": {}, "source": [ - "## Downloading the Data\n", + "### Downloading the Data\n", "\n", "We pick the data from one source from our public charlie repo https://github.com/vikinganalytics/va-data-charlie.git for convenience.\n", "Clone that repository to get access to the data." @@ -127,7 +128,8 @@ "source": [ "## Connect to the API\n", "\n", - "Instantiate a session object with mvg library a session object basically caches the endpoint and the token,\n", + "Instantiate a session object with MVG library.\n", + "A session object basically catches the endpoint and the token,\n", "to simplify the calls to the MVG library." ] }, @@ -167,11 +169,7 @@ "outputs": [ { "data": { - "text/plain": [ - "{'api': {'name': 'MultiViz Engine API',\n", - " 'version': 'v0.2.7',\n", - " 'swagger': 'http://api.beta.multiviz.com/docs'}}" - ] + "text/plain": "{'name': 'MultiViz Engine API',\n 'version': 'v0.3.2',\n 'swagger': 'http://api.beta.multiviz.com/docs'}" }, "execution_count": 5, "metadata": {}, @@ -190,9 +188,8 @@ "## Check Database\n", "\n", "We start by seeing if there are any sources in the database.\n", - "A source represents a measurement source e.g. one specific channel of a measurement sensor.\n", - "Note that sources cannot be used to represent a sensor with several channels.\n", - "If this is required, the client side needs to take care of it.\n", + "A source represents a measurement source e.g. a measurement sensor.\n", + "Note that sources can be used to represent a sensor with several channels.\n", "\n", "Because we want to start at a clean slate we will list all sources (potentially none) and delete all of them" ] @@ -239,7 +236,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "annoying-president", "metadata": { "ExecuteTime": { @@ -257,12 +254,12 @@ "id": "voluntary-traveler", "metadata": {}, "source": [ - "To make sure we start from a clean slate we delete our resource in case it exists." + "To make sure we start from a clean slate we delete our source in case it exists." ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "pharmaceutical-producer", "metadata": { "ExecuteTime": { @@ -295,12 +292,13 @@ "source": [ "## Build measurements\n", "\n", - "Now we want to (re) build the source and the attached measurements from scratch. In this example, we have a json file with all the information needed to create each source." + "Now we want to (re) build the source and the attached measurements from scratch.\n", + "In this example, we have a json file with all the information needed to create each source." ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "id": "distant-institute", "metadata": { "ExecuteTime": { @@ -332,12 +330,12 @@ "id": "shaped-enough", "metadata": {}, "source": [ - "Create the source and check for it" + "Create the source and check for it." ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "id": "charitable-gnome", "metadata": { "ExecuteTime": { @@ -367,12 +365,12 @@ "id": "macro-supplier", "metadata": {}, "source": [ - "Update the source" + "**Update** the source in case it is necessary." ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "id": "consolidated-adventure", "metadata": { "ExecuteTime": { @@ -413,7 +411,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "id": "parliamentary-disco", "metadata": { "ExecuteTime": { @@ -431,12 +429,13 @@ "id": "tender-barrier", "metadata": {}, "source": [ - "`meas` now contains a list of timestamps representing the measurements in our repo we upload from iterate over all of them." + "`meas` now contains a list of timestamps representing the measurements in our repo we upload from.\n", + "We proceed to iterate over all of them." ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "id": "racial-dance", "metadata": { "ExecuteTime": { @@ -454,14 +453,12 @@ }, { "data": { + "text/plain": " 0%| | 0/50 [00:00\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
timestampT_outT_downT_kitchenWATTT_upT_brine_inT_brine_outT_cellar
02018-02-01T00:00:00Z1.97605338.36718120.5121052.78016740.0280183.6900002.06851410.965206
12018-02-01T01:40:00Z2.38000036.94000020.1900003.04533339.0600003.5600001.99148610.924431
22018-02-01T03:25:00Z2.21122337.71592020.1900003.06000039.8402403.5983921.96160810.982982
32018-02-01T05:10:00Z1.96495637.94000020.2500003.15157940.0237893.6113302.06867010.888049
42018-02-01T06:55:00Z0.34913437.55129320.4064573.25716739.8568603.6900002.12000010.941380
\n", - "" - ], - "text/plain": [ - " timestamp T_out T_down T_kitchen WATT T_up \\\n", - "0 2018-02-01T00:00:00Z 1.976053 38.367181 20.512105 2.780167 40.028018 \n", - "1 2018-02-01T01:40:00Z 2.380000 36.940000 20.190000 3.045333 39.060000 \n", - "2 2018-02-01T03:25:00Z 2.211223 37.715920 20.190000 3.060000 39.840240 \n", - "3 2018-02-01T05:10:00Z 1.964956 37.940000 20.250000 3.151579 40.023789 \n", - "4 2018-02-01T06:55:00Z 0.349134 37.551293 20.406457 3.257167 39.856860 \n", - "\n", - " T_brine_in T_brine_out T_cellar \n", - "0 3.690000 2.068514 10.965206 \n", - "1 3.560000 1.991486 10.924431 \n", - "2 3.598392 1.961608 10.982982 \n", - "3 3.611330 2.068670 10.888049 \n", - "4 3.690000 2.120000 10.941380 " - ] + "text/plain": " timestamp T_out T_down T_kitchen WATT T_up \\\n0 2018-02-01T00:00:00Z 1.976053 38.367181 20.512105 2.780167 40.028018 \n1 2018-02-01T01:40:00Z 2.380000 36.940000 20.190000 3.045333 39.060000 \n2 2018-02-01T03:25:00Z 2.211223 37.715920 20.190000 3.060000 39.840240 \n3 2018-02-01T05:10:00Z 1.964956 37.940000 20.250000 3.151579 40.023789 \n4 2018-02-01T06:55:00Z 0.349134 37.551293 20.406457 3.257167 39.856860 \n\n T_brine_in T_brine_out T_cellar \n0 3.690000 2.068514 10.965206 \n1 3.560000 1.991486 10.924431 \n2 3.598392 1.961608 10.982982 \n3 3.611330 2.068670 10.888049 \n4 3.690000 2.120000 10.941380 ", + "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
timestampT_outT_downT_kitchenWATTT_upT_brine_inT_brine_outT_cellar
02018-02-01T00:00:00Z1.97605338.36718120.5121052.78016740.0280183.6900002.06851410.965206
12018-02-01T01:40:00Z2.38000036.94000020.1900003.04533339.0600003.5600001.99148610.924431
22018-02-01T03:25:00Z2.21122337.71592020.1900003.06000039.8402403.5983921.96160810.982982
32018-02-01T05:10:00Z1.96495637.94000020.2500003.15157940.0237893.6113302.06867010.888049
42018-02-01T06:55:00Z0.34913437.55129320.4064573.25716739.8568603.6900002.12000010.941380
\n
" }, - "execution_count": 15, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -220,138 +123,27 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We loaded the `.csv` file into a dataframe object and printed out the first five rows. The timestamp was read as string timestamps, but for the MVG API we need the timestamps to be in milliseconds since EPOCH. So we need to do some data wrangling in order to get it to the correct data type.\n", + "We loaded the `.csv` file into a dataframe object and printed out the first five rows.\n", + "The timestamp was read as string timestamps, but for the MVG API we need the timestamps to be in milliseconds since EPOCH.\n", + "So we need to do some data wrangling in order to get it to the correct data type.\n", "\n", - "We can use the function `pandas.to_datetime()` to convert a column into datetime objects. Then we can convert the timestamps into integers, which will automatically get converted to nanoseconds since EPOCH. By dividing by 1e6 we get the same time in milliseconds. We can see that the conversion was successful by printing the first five rows again." + "We can use the function `pandas.to_datetime()` to convert a column into datetime objects.\n", + "Then we can convert the timestamps into integers, which will automatically get converted to nanoseconds since EPOCH.\n", + "Then, when dividing by 1e6 we get the same time in milliseconds.\n", + "We can see that the conversion was successful by printing the first five rows again." ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 6, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - ":1: FutureWarning: casting datetime64[ns, UTC] values to int64 with .astype(...) is deprecated and will raise in a future version. Use .view(...) instead.\n", - " data_df[\"timestamp\"] = pd.to_datetime(data_df[\"timestamp\"]).astype(\"int64\") // 1000000\n" - ] - }, { "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", - "
timestampT_outT_downT_kitchenWATTT_upT_brine_inT_brine_outT_cellar
015174432000001.97605338.36718120.5121052.78016740.0280183.6900002.06851410.965206
115174492000002.38000036.94000020.1900003.04533339.0600003.5600001.99148610.924431
215174555000002.21122337.71592020.1900003.06000039.8402403.5983921.96160810.982982
315174618000001.96495637.94000020.2500003.15157940.0237893.6113302.06867010.888049
415174681000000.34913437.55129320.4064573.25716739.8568603.6900002.12000010.941380
\n", - "
" - ], - "text/plain": [ - " timestamp T_out T_down T_kitchen WATT T_up \\\n", - "0 1517443200000 1.976053 38.367181 20.512105 2.780167 40.028018 \n", - "1 1517449200000 2.380000 36.940000 20.190000 3.045333 39.060000 \n", - "2 1517455500000 2.211223 37.715920 20.190000 3.060000 39.840240 \n", - "3 1517461800000 1.964956 37.940000 20.250000 3.151579 40.023789 \n", - "4 1517468100000 0.349134 37.551293 20.406457 3.257167 39.856860 \n", - "\n", - " T_brine_in T_brine_out T_cellar \n", - "0 3.690000 2.068514 10.965206 \n", - "1 3.560000 1.991486 10.924431 \n", - "2 3.598392 1.961608 10.982982 \n", - "3 3.611330 2.068670 10.888049 \n", - "4 3.690000 2.120000 10.941380 " - ] + "text/plain": " timestamp T_out T_down T_kitchen WATT T_up \\\n0 1517443200000 1.976053 38.367181 20.512105 2.780167 40.028018 \n1 1517449200000 2.380000 36.940000 20.190000 3.045333 39.060000 \n2 1517455500000 2.211223 37.715920 20.190000 3.060000 39.840240 \n3 1517461800000 1.964956 37.940000 20.250000 3.151579 40.023789 \n4 1517468100000 0.349134 37.551293 20.406457 3.257167 39.856860 \n\n T_brine_in T_brine_out T_cellar \n0 3.690000 2.068514 10.965206 \n1 3.560000 1.991486 10.924431 \n2 3.598392 1.961608 10.982982 \n3 3.611330 2.068670 10.888049 \n4 3.690000 2.120000 10.941380 ", + "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
timestampT_outT_downT_kitchenWATTT_upT_brine_inT_brine_outT_cellar
015174432000001.97605338.36718120.5121052.78016740.0280183.6900002.06851410.965206
115174492000002.38000036.94000020.1900003.04533339.0600003.5600001.99148610.924431
215174555000002.21122337.71592020.1900003.06000039.8402403.5983921.96160810.982982
315174618000001.96495637.94000020.2500003.15157940.0237893.6113302.06867010.888049
415174681000000.34913437.55129320.4064573.25716739.8568603.6900002.12000010.941380
\n
" }, - "execution_count": 16, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -365,14 +157,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "To upload the data to the API we need to convert the dataframe into a dictionary on the format {column: values}. Fortunately, dataframes have a method to do just that, called `to_dict()`. It has an argument for changing the orientation of the resulting dictionary. By using `to_dict(\"list\")` we will get it on the correct format. \n", + "To upload the data to the API we need to convert the dataframe into a dictionary on the format {column: values}.\n", + "Fortunately, dataframes have a method to do just that, called `to_dict()`.\n", + "It has an argument for changing the orientation of the resulting dictionary.\n", + "By using `to_dict(\"list\")` we will get it on the correct format.\n", "\n", ".. note:: The dictionary must have a `\"timestamp\"` key and at least one more column, corresponding to a tracked variable. The `to_dict(\"list\")` method will not include the index, so it is important to have the timestamp as a column in the data and not as an index." ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -383,12 +178,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now that the data has been converted to the correct format we are ready to create the source and upload some measurements. When creating a tabular source, you must define the columns that the data will contain ahead of time. This is to prevent arbitrary data to be uploaded to the source. Besides the columns argument, creating a tabular source works the exact same way as creating a waveform source." + "Now that the data has been converted to the correct format we are ready to create the source and upload some measurements.\n", + "When creating a tabular source, you must define the columns that the data will contain ahead of time.\n", + "This is to prevent arbitrary data to be uploaded to the source.\n", + "Besides the columns argument, creating a tabular source works the exact same way as creating a waveform source." ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -403,12 +201,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can check that the source was uploaded correctly by getting the source information." + "We can check that the source was created correctly by getting the source information." ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -443,7 +241,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -457,14 +255,18 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now that we have a source with measurements we can request an analysis of the data from the server. Requesting analyses for tabular data works the same way as it does for waveform data. Although not all features will work for tabular data. The KPIDemo feature for example will only work with waveform data. Another thing to keep in mind is that when requesting population analyses, all sources to be analyzed simultaneously must have the same data class.\n", + "Now that we have a source with measurements we can request an analysis of the data from the server.\n", + "Requesting analyses for tabular data works the same way as it does for waveform data.\n", + "Although not all features will work for tabular data.\n", + "The KPIDemo feature for example will only work with waveform data.\n", + "Another thing to keep in mind is that when requesting population analyses, all sources to be analyzed simultaneously must have the same data class.\n", "\n", - "For now we will simply run the mode identification algorithm" + "For now, we will simply run the mode identification algorithm." ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -479,12 +281,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "To make the results easier to work with we can load them into an analysis class. There exists one for each analysis feature. Once the analysis is finished and we have received the results, we can instatiate the analysis class with the results dictionary." + "To make the results easier to work with we can load them into an analysis class.\n", + "There exists one for each analysis feature.\n", + "Once the analysis is completed and we have received the results, we can instatiate the analysis class with the results dictionary." ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 12, "metadata": { "tags": [] }, @@ -499,21 +303,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", - "The analysis class makes it very convenient to view the results. Let's use the `ModeId.plot()` method to get an overview of the results." + "The analysis class makes it very convenient to view the results.\n", + "Let's use the `ModeId.plot()` method to get an overview of the results." ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 13, "metadata": {}, "outputs": [ { "data": { - "image/png": "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OXMOVLU1jpmNGD9+fP0TTzyxE+DUqVP07t07NHz48GPr16/f3t6y+vXrN6yysnJrUVFRu/pubmlp4TOf+Uy/J598siArK8vNnDnzjVj9OLdFibKIiIhIJ5HIJLm988vNzW3Ztm1bbmNjo11++eVuzZo1+X369DmVyDhi+d73vtdz9+7dXV555ZUt2dnZhJ/kFw81vRARERGRDlVWVnZ41apVVwIsX768cOLEifXhYXV1ddllZWUDi4uLh4RCoZKNGzfmAuzbty977NixNw4aNGjo5MmT+0c+JG/x4sWFw4YNG1xSUjJk6tSp/Zubzz3J/PDDD/desGDB3uzsbAD69evX7qcIhilRFhEREZEONX369PoVK1YUNDU12datW3uMGTPmWHjYnDlz+oZCoaaampqXFyxYUDtjxozrAebOndt3zJgxjdu3b39pwoQJDXv37u0KsHnz5u6rV68urKysrK6urn45KyvLLVmypGd0ma+//nq3H//4xwU33XTT4Pe85z03vvjii93ijVuJsoiIiIh0qNLS0uO7d+/utnTp0sKysrLDkcM2bdqUN2vWrIMA48ePP9rQ0JBTX1+ftWHDhryZM2ceBJgyZcrh/Pz80wDr1q3L27JlS49QKDS4pKRkyDPPPJO/Y8eOc5LgkydPWvfu3d2WLVu2zpo1640777xzQLxxq42yiIiIiHS48vLyhvnz51/71FNPbdu/f/8F56DOOZs0adLBRYsW1bY1Xp8+fU5+9KMfPQQwffr0hk996lMD4i1LZ5RFREREpMPNnj37wD333LNn1KhRxyM/Ly0tPbps2bKeAGvXrs0rKChoLiwsbBk9evTRioqKngArV67MP3LkSDZAeXn5kbVr1xaEb86rq6vLrqmp6Rpd3oc+9KGGdevW5QH88pe/zOvfv/+b8casM8oiIiIinURubs/mRHcP195xBw4ceCpW92wLFy7cM23atAHFxcVDcnNzWyoqKnYCPPDAA3smTpx4w6BBg4aOHDmysaio6CTAiBEjTsybN6923LhxxS0tLXTp0sU99NBDrxUXF5+MnO9Xv/rVfbfffvv1ixcv7tOjR4+WpUuX7op3+SzyDsK4J7aRDioveHrpeBdeuynmUUt2BOewqemzdt3T2k9Tgb13ZLJDOK9bFvwiKeXe3HJbQuc3/7702T+jpd63nVwYe845l/Sdvqqq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", - "text/plain": [ - "
" - ] + "text/plain": "
", + "image/png": "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\n" }, "metadata": { "needs_background": "light" @@ -522,11 +324,9 @@ }, { "data": { - "text/plain": [ - "''" - ] + "text/plain": "''" }, - "execution_count": 23, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -539,18 +339,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - ".. note:: Gray stripes in the plot correspond to gaps in measurements and not a third mode.\n", + "The different modes help to identify between idle and have high-usage conditions along all seasons of the year.\n", "\n", "When you are finished with the example you can go ahead and delete the source" ] }, { "cell_type": "code", - "execution_count": 24, - "metadata": {}, + "execution_count": 14, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [], "source": [ - "session.delete_source(\"heatpump\")" + "session.delete_source(\"heatpump\")\n" ] } ], @@ -579,4 +383,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/docs/source/content/examples/4-error_handling.ipynb b/docs/source/content/examples/4-error_handling.ipynb index 3f433885..d09883d0 100644 --- a/docs/source/content/examples/4-error_handling.ipynb +++ b/docs/source/content/examples/4-error_handling.ipynb @@ -10,9 +10,9 @@ "during API calls to the\n", "Vibration service\n", "\n", - "The mvg design principle is that\n", + "The MVG design principle is that\n", "the client application using the MVG\n", - "API is responsible for error handling" + "API is responsible for error handling." ] }, { @@ -40,7 +40,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that the `TOKEN` is used both for authorization and authentication. Thus, each unique token represents a unique user and each user has their own unique database on the VA vibration service.\n", + ".. note:: Each `TOKEN` is used both for authorization and authentication. Thus, each unique token represents a unique user and each user has their own unique database on the VA-MVG' service.\n", "\n", "**You need to insert your token received from Viking Analytics here:**" ] @@ -67,12 +67,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This is Viking Analytics default logging setup and can be adapted to suit your needs. Log messages are printed from `mvg` library, see the source code for details." + "This is Viking Analytics default logging setup and can be adapted to suit your needs.\n", + "Log messages are printed from `mvg` library, see the source code for details." ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:43.998630Z", @@ -95,13 +96,12 @@ "source": [ "As we are interested in error handling we set the logger level to `logging.DEBUG`. That will trace out the detailed information on exceptions provided by the server.\n", "\n", - "\n", "Set log level to `logging.ERROR` to just see the results of proper error handling in the code `root_logger.setLevel(logging.ERROR)`" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.004007Z", @@ -117,12 +117,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Instantiate a session object with mvg library a session object basically caches the endpoint and the token, to simplify the the calls to the mvg library." + "Instantiate a session object with MVG library.\n", + "A session object basically catches the endpoint and the token,\n", + "to simplify the calls to the MVG library." ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.140140Z", @@ -148,7 +150,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.272280Z", @@ -160,7 +162,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "{\"api\": {\"name\": \"MultiViz Engine API\", \"version\": \"v0.2.7\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}}\n" + "{\"name\": \"MultiViz Engine API\", \"version\": \"v0.3.2\", \"swagger\": \"http://api.beta.multiviz.com/docs\"}\n" ] } ], @@ -175,12 +177,12 @@ "source": [ "## Invalid Token\n", "\n", - "Lets provoke an error by creating a session with a non-valid token." + "Let's provoke an error by creating a session with a non-valid token." ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.395787Z", @@ -206,7 +208,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.549088Z", @@ -243,12 +245,12 @@ "\n", "## Illegal source_id\n", "\n", - "We provoke the service using an illegal string for the `source_id`" + "We provoke the service using an illegal string for the `source_id`." ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.686993Z", @@ -291,7 +293,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.829817Z", @@ -331,12 +333,13 @@ }, "source": [ "## Parameter Value Out of Range\n", - "Sometimes, it is possible to pass a value that it is out of range of the expected, as in this example where the values for the duration and timestamp parameters are negative values. " + "\n", + "Sometimes, it is possible to pass a value that it is out of range of the expected, as in this example where the values for the duration and timestamp parameters are negative values." ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.968553Z", @@ -372,16 +375,21 @@ "source": [ "## Missing Parameter\n", "\n", - "In this case we have an error on the client side. This means that the data is never sent to the server so we do not get an `MVGAPIError`, but a `TypeError` instead. Only the `MVGAPIError` contains any details from the server, so to be on the safe side we should catch them separately." + "In this case we have an error on the client side.\n", + "This means that the data is never sent to the server, so we do not get an `MVGAPIError`, but a `TypeError` instead.\n", + "Only the `MVGAPIError` contains any details from the server, so to be on the safe side we should catch them separately." ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:13:44.972731Z", "start_time": "2021-03-18T10:13:44.969677Z" + }, + "pycharm": { + "name": "#%%\n" } }, "outputs": [ @@ -406,7 +414,7 @@ " print(exc)\n", "except Exception as exc:\n", " print(f\"{type(exc).__name__}: {exc}\")\n", - " print(\"No details from server available\")" + " print(\"No details from server available\")\n" ] } ], @@ -474,4 +482,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/docs/source/content/examples/5-analysis_classes.ipynb b/docs/source/content/examples/5-analysis_classes.ipynb index 8353a641..d0e8e621 100644 --- a/docs/source/content/examples/5-analysis_classes.ipynb +++ b/docs/source/content/examples/5-analysis_classes.ipynb @@ -5,9 +5,10 @@ "id": "skilled-premium", "metadata": {}, "source": [ - "# Analysis Classes - a Unified Interface to Analysis Results\n", + "# Analysis Classes - Unified Interface to Analysis Results\n", "\n", - "MVG comes with a set of analysis classes which provide a unified interface to analysis results *irrespective of the specific feature*. Note that the analysis classes are helper classes, as such the mvg class does *not* depend on them.\n", + "MVG comes with a set of analysis classes which provide a unified interface to analysis results *irrespective of the specific feature*.\n", + "Note that the analysis classes are helper classes, as such the mvg class does *not* depend on them.\n", "\n", "Except for step (1) requesting the specific feature analysis, the following generic workflow holds:\n", "\n", @@ -17,7 +18,7 @@ "\n", "One application is to use the analysis classes interactively from a Python REPL session.\n", "\n", - "#### Or in (pseudo) code\n", + "### Or in (pseudo) code\n", "```python\n", "result = parse_results(session.get_analysis_results(request_id)) # call API to get results\n", "result.plot() # plot results\n", @@ -39,7 +40,6 @@ "id": "concerned-vienna", "metadata": {}, "source": [ - "## Example flow\n", "\n", "### Importing the required packages, classes and functions" ] @@ -74,14 +74,15 @@ "source": [ "### Create a Session and test API access\n", "\n", - "Note that the `TOKEN` is used both for authorization and authentication. Thus, each unique token represents a unique user and each user has their own unique database on the Viking Analytics MultiViz Vibration service.\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:**" + "**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": null, + "execution_count": 2, "id": "honey-growing", "metadata": { "tags": [ @@ -97,7 +98,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "persistent-dublin", "metadata": { "ExecuteTime": { @@ -108,13 +109,9 @@ "outputs": [ { "data": { - "text/plain": [ - "{'api_version': '0.2.7',\n", - " 'mvg_highest_tested_version': '0.2.7',\n", - " 'mvg_version': '0.9.7'}" - ] + "text/plain": "{'api_version': '0.3.3',\n 'mvg_highest_tested_version': '0.3.3',\n 'mvg_version': '0.12.2'}" }, - "execution_count": 2, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } @@ -133,14 +130,14 @@ } }, "source": [ - "### Running the Analyses\n", + "## Request an analysis\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": 3, + "execution_count": 4, "id": "universal-trace", "metadata": { "ExecuteTime": { @@ -154,16 +151,9 @@ "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']}}" - ] + "text/plain": "{'source_id': 'u0001',\n 'meta': {'assetId': 'assetJ',\n 'measPoint': 'mloc01',\n 'location': 'cancun',\n 'timezone': 'Europe/Stockholm'},\n 'properties': {'data_class': 'waveform', 'channels': ['acc']}}" }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -182,8 +172,6 @@ } }, "source": [ - "### Requsting the Analysis\n", - "\n", "We will now request an analysis (first two lines, uncomment one of them) and wait for the results to become available. \n", "\n", "The results as returned will be stored in a dictionary named `raw_result`. The raw results are shown in the results cell, mainly to show that they are not optimized for readability or interpretation." @@ -191,7 +179,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "id": "accompanied-basement", "metadata": { "ExecuteTime": { @@ -207,475 +195,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "Waiting for {'request_id': '6ca83f696c2c9c7852db61292b7b9c76', 'request_status': 'queued'}\n" + "Waiting for {'request_id': '9fa506fd651f10b05401840edf9f33cb', 'request_status': 'queued'}\n" ] - }, - { - "data": { - "text/plain": [ - "{'status': 'successful',\n", - " 'request_id': '6ca83f696c2c9c7852db61292b7b9c76',\n", - " 'feature': 'KPIDemo',\n", - " 'results': {'acc': {'rms': [0.6471306969644414,\n", - " 0.6466266944439302,\n", - " 0.6468806720402722,\n", - " 0.6466493957387159,\n", - " 0.6467249872072451,\n", - " 0.647100732403723,\n", - " 0.6474297483216226,\n", - " 0.6468977699997093,\n", - " 0.6477017500152474,\n", - " 0.6470887870500318,\n", - " 0.647212859812641,\n", - " 0.6467505833073381,\n", - " 0.6473294495532388,\n", - " 0.6474410190623384,\n", - " 0.6476292704319382,\n", - " 0.6471187716244126,\n", - " 0.4848978443906459,\n", - " 0.48484688004435844,\n", - " 0.48475765388364805,\n", - " 0.48456940607276594,\n", - " 0.4850067490271975,\n", - " 0.4850187365383283,\n", - " 0.48525980138293656,\n", - " 0.48516238436722653,\n", - " 0.6279023656493041,\n", - " 0.6281468737921598,\n", - " 0.6283156705845551,\n", - " 0.6280271420358873,\n", - " 0.628026946860152,\n", - " 0.6282908228344413,\n", - " 0.6281600540558904,\n", - " 0.6279733052109427,\n", - " 0.6277421066711281,\n", - " 0.6278769053426508,\n", - " 0.6286883127970024,\n", - " 0.6281343035247084,\n", - " 0.6281292299681172,\n", - " 0.6277872706078097,\n", - " 0.6278531570472111,\n", - " 0.6285441754422537,\n", - " 0.6284047851367978,\n", - " 0.6283140536346776,\n", - " 0.6281499282360293,\n", - " 0.6285481383470801,\n", - " 0.6281251443487925,\n", - " 0.6284361962847654,\n", - " 0.6284482844164598,\n", - " 0.6286081295548268,\n", - " 0.6279703831408971],\n", - " 'peak': [2.6917552104452027,\n", - " 2.715255164704313,\n", - " 2.6851505333043484,\n", - " 2.7266109280295483,\n", - " 2.6970042262531173,\n", - " 2.711735134992144,\n", - " 2.681259855287886,\n", - " 2.667384142184121,\n", - " 2.6787570888613037,\n", - " 2.7229817204780704,\n", - " 2.682739508062897,\n", - " 2.682787559190933,\n", - " 2.700802677842825,\n", - " 2.7210068297972096,\n", - " 2.738182747476402,\n", - " 2.6924439987220383,\n", - " 2.3720132599872614,\n", - " 2.2734294797799635,\n", - " 2.3565631117706656,\n", - " 2.367473192872302,\n", - " 2.2605627121879217,\n", - " 2.3019645284833294,\n", - " 2.260862113899039,\n", - " 2.33652828167628,\n", - " 3.0371081557922737,\n", - " 3.0697912558897955,\n", - " 3.1035036648621293,\n", - " 3.032672310338032,\n", - " 2.9693198781385552,\n", - " 3.029719051997296,\n", - " 3.136087697846743,\n", - " 3.123363962089775,\n", - " 3.0473913260795387,\n", - " 3.1346266673634613,\n", - " 3.0981306499825583,\n", - " 3.069391137549435,\n", - " 2.9618012255115946,\n", - " 3.07212973445674,\n", - " 3.0116547698238354,\n", - " 2.978442280270874,\n", - " 3.1067808753934667,\n", - " 3.0939468951811686,\n", - " 2.996531248730437,\n", - " 3.012682780143234,\n", - " 3.103924514311588,\n", - " 3.0582901611724864,\n", - " 3.0854686711406067,\n", - " 3.049574684496507,\n", - " 3.088072126729926],\n", - " 'peak2peak': [5.36700439453125,\n", - " 5.41485595703125,\n", - " 5.3515625,\n", - " 5.39532470703125,\n", - " 5.31097412109375,\n", - " 5.314697265625,\n", - " 5.325927734375,\n", - " 5.2713623046875,\n", - " 5.379150390625,\n", - " 5.4998779296875,\n", - " 5.299072265625,\n", - " 5.278564453125,\n", - " 5.42462158203125,\n", - " 5.3746337890625,\n", - " 5.36669921875,\n", - " 5.36260986328125,\n", - " 4.60797119140625,\n", - " 4.55438232421875,\n", - " 4.66448974609375,\n", - " 4.70159912109375,\n", - " 4.65277099609375,\n", - " 4.59197998046875,\n", - " 4.6187744140625,\n", - " 4.58441162109375,\n", - " 5.60101318359375,\n", - " 5.72088623046875,\n", - " 5.7542724609375,\n", - " 5.69451904296875,\n", - " 5.6492919921875,\n", - " 5.67547607421875,\n", - " 5.7117919921875,\n", - " 5.7236328125,\n", - " 5.65484619140625,\n", - " 5.79638671875,\n", - " 5.69525146484375,\n", - " 5.6915283203125,\n", - " 5.5751953125,\n", - " 5.696533203125,\n", - " 5.71685791015625,\n", - " 5.55279541015625,\n", - " 5.70556640625,\n", - " 5.68310546875,\n", - " 5.58990478515625,\n", - " 5.6024169921875,\n", - " 5.71759033203125,\n", - " 5.59027099609375,\n", - " 5.76727294921875,\n", - " 5.6591796875,\n", - " 5.77734375],\n", - " 'variance': [0.41877813895368365,\n", - " 0.4181260819674838,\n", - " 0.41845460385927424,\n", - " 0.4181554410092465,\n", - " 0.41825320907821134,\n", - " 0.41873935787743477,\n", - " 0.4191652790117996,\n", - " 0.4184767248305968,\n", - " 0.4195175569728141,\n", - " 0.4187238983258814,\n", - " 0.41888448590685734,\n", - " 0.4182863170083822,\n", - " 0.41903541625889906,\n", - " 0.4191798731644793,\n", - " 0.41942367192020447,\n", - " 0.41876270458868864,\n", - " 0.23512591949469505,\n", - " 0.2350764970887485,\n", - " 0.2349899829987787,\n", - " 0.23480750930171312,\n", - " 0.2352315466019309,\n", - " 0.2352431747932363,\n", - " 0.23547707483820707,\n", - " 0.23538253920489244,\n", - " 0.3942613807879924,\n", - " 0.3945684950548635,\n", - " 0.3947805819021192,\n", - " 0.3944180911337645,\n", - " 0.39441784598248414,\n", - " 0.3947493580579793,\n", - " 0.39458505351149914,\n", - " 0.3943504720575559,\n", - " 0.3940601524879059,\n", - " 0.3942294082626641,\n", - " 0.39524899464754154,\n", - " 0.3945527032644705,\n", - " 0.3945463295403398,\n", - " 0.39411685713720324,\n", - " 0.3941995868141499,\n", - " 0.39506778048238267,\n", - " 0.394892573982825,\n", - " 0.3947785499948405,\n", - " 0.39457233234292877,\n", - " 0.3950727622195802,\n", - " 0.39454119696319145,\n", - " 0.3949320528008642,\n", - " 0.3949472461859916,\n", - " 0.39514818054241796,\n", - " 0.39434680210212514],\n", - " 'crest_factor': [4.159523297336503,\n", - " 4.199107751094795,\n", - " 4.1509209493542905,\n", - " 4.216521264842036,\n", - " 4.17024899238794,\n", - " 4.190591973090684,\n", - " 4.141391189142457,\n", - " 4.12334725189317,\n", - " 4.169192536071003,\n", - " 4.291368147281347,\n", - " 4.145065209055815,\n", - " 4.148102264510928,\n", - " 4.207778444296482,\n", - " 4.202709976173473,\n", - " 4.228009561164774,\n", - " 4.160664342904785,\n", - " 4.891779345746705,\n", - " 4.704480813056079,\n", - " 4.861322132597601,\n", - " 4.885725683880231,\n", - " 4.932319578447107,\n", - " 4.746135262552724,\n", - " 4.85907197225831,\n", - " 4.815971635401411,\n", - " 4.8369114721389,\n", - " 4.8870596734125,\n", - " 4.939401976039809,\n", - " 4.8288873320139665,\n", - " 4.728013492070362,\n", - " 4.822160282923067,\n", - " 4.992497815799841,\n", - " 4.973720914841443,\n", - " 4.854527510094295,\n", - " 4.992422305535833,\n", - " 4.927927856967997,\n", - " 4.886520478703161,\n", - " 4.715273679688384,\n", - " 4.893583986630332,\n", - " 4.796750221003309,\n", - " 4.738636354676574,\n", - " 4.94391664238704,\n", - " 4.924204507735062,\n", - " 4.770407690955719,\n", - " 4.793082019248064,\n", - " 4.941570230450774,\n", - " 4.866508611777468,\n", - " 4.909662016192138,\n", - " 4.851312830866793,\n", - " 4.917544218063957],\n", - " 'utilization': [1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1],\n", - " 'dc_component': [-0.14042464403895252,\n", - " -0.1402429576730629,\n", - " -0.14035072861684825,\n", - " -0.1404292874045484,\n", - " -0.14005842547186725,\n", - " -0.14050710764839433,\n", - " -0.1403663006003861,\n", - " -0.140528673434121,\n", - " -0.14048804589255356,\n", - " -0.13985183766557055,\n", - " -0.14032007446914688,\n", - " -0.1403681255971829,\n", - " -0.140316837999075,\n", - " -0.1400742126097098,\n", - " -0.14040442716390175,\n", - " -0.14007583465953835,\n", - " -0.1144449006122614,\n", - " -0.11473807352996325,\n", - " -0.11492492817691537,\n", - " -0.11484868115355228,\n", - " -0.11462765359417189,\n", - " -0.11458659879582928,\n", - " -0.11486602014903888,\n", - " -0.11454341839503018,\n", - " -0.10992309719852371,\n", - " -0.11007445901479568,\n", - " -0.10960718048712936,\n", - " -0.10988178299428189,\n", - " -0.10915142110730502,\n", - " -0.10979717699729602,\n", - " -0.10965947519049304,\n", - " -0.1095089816210249,\n", - " -0.1101965018607887,\n", - " -0.10960225330096143,\n", - " -0.10978836482630816,\n", - " -0.10967434067443484,\n", - " -0.11005562004284482,\n", - " -0.10966635555049033,\n", - " -0.10961619560508544,\n", - " -0.10985097167712396,\n", - " -0.10934435195596687,\n", - " -0.1092667193999186,\n", - " -0.10999560419918701,\n", - " -0.11009488951823405,\n", - " -0.10966181899908826,\n", - " -0.10937658695373634,\n", - " -0.10927238207810663,\n", - " -0.10908396184025694,\n", - " -0.10906822047992606]},\n", - " 'timestamps': [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060]},\n", - " 'inputs': {'request_id': '6ca83f696c2c9c7852db61292b7b9c76',\n", - " 'feature': 'KPIDemo',\n", - " 'experiment': 'KPIDemo',\n", - " 'sw-commit': {'api': '0.0.0-dev0', 'feature': '1.0.0'},\n", - " 'dataType': 'waveform',\n", - " 'db_def': 'vibium_app/pipeline/apfel/strudel/data/strudelDb/database.json',\n", - " 'UUID': 'u0001',\n", - " 'timestamps': [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " 'params': {'utilization_threshold': 0.1}},\n", - " 'error_info': '',\n", - " 'debug_info': ''}" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ - "# Specifc part : Select one of two anlysis here by un/commenting\n", + "# Specifc part : Select one of two analysis here by un/commenting\n", "selected_feature = \"KPIDemo\"\n", "# selected_feature = \"ModeId\"\n", "\n", @@ -684,9 +209,8 @@ "print(f\"Waiting for {analysis_request}\")\n", "session.wait_for_analyses([analysis_request[\"request_id\"]])\n", "\n", - "# Generic Part: Displaying unparsed results\n", - "raw_result = session.get_analysis_results(analysis_request[\"request_id\"])\n", - "raw_result" + "# Generic Part: Retrieve unparsed results\n", + "raw_result = session.get_analysis_results(analysis_request[\"request_id\"])\n" ] }, { @@ -698,20 +222,28 @@ } }, "source": [ + "## Parse Results\n", + "\n", "### Showing and Browsing the results using analysis_classes\n", - "To make the results more accessible, we'll use the analysis_classes. 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 summarising, plotting and exporting. For the full list of provided methods check __[the documentation](https://vikinganalytics.github.io/mvg/content/utilities_reference/analysis_classes.html)__.\n", + "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 summarising, plotting and exporting.\n", + "For the full list of provided methods check __[the documentation](https://vikinganalytics.github.io/mvg/content/utilities_reference/analysis_classes.html)__.\n", "\n", "The parse function will automatically determine the kind (feature) of analysis based on the raw_results.\n", - "Once the results are parsed, we can summarize them using the summary() method *irrespective of which analysis them stem from*. To verify this you can rerun the cell above by selecting another feature for the analysis.\n", + "Once the results are parsed, we can summarize them using the summary() method *irrespective of which analysis they stem from*.\n", + "To verify this you can rerun the cell above by selecting another feature for the analysis.\n", "\n", - "#### Timestamps\n", - "The Vibration API requires timestamps to be represented in EPOCH time. To display human interpertable timestamps a timezone and a time unit (specifying if the timestamps are seconds 's' or milliseconds 'ms' from EPOCH). This information can be given in the parse_results calls 2nd and 3rd argument). If they are left blank EPOCH times are kept.\n", + "### Timestamps\n", + "The Vibration API requires timestamps to be represented in EPOCH time.\n", + "To display human interpertable timestamps, one needs a timezone and a time unit (specifying if the timestamps are seconds 's' or milliseconds 'ms' from EPOCH).\n", + "This information can be given in the parse_results calls (2nd and 3rd argument).\n", + "If they are left blank EPOCH times are kept.\n", "When exporting the results to a DataFrame, a column called \"datetime\" will be appended to show the human interpretable times." ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "creative-elevation", "metadata": { "ExecuteTime": { @@ -729,20 +261,20 @@ "output_type": "stream", "text": [ "=== KPIDemo ===\n", - "request_id 6ca83f696c2c9c7852db61292b7b9c76\n", - "from 20191005-13:01.00 to 20191122-13:01.00\n", + "request_id 9fa506fd651f10b05401840edf9f33cb\n", + "from 20191004-13:01.00 to 20191122-13:01.00\n", "\n", "+-------+--------------+------------+------------+-----------------+----------------+--------------------+-------------------+--------------------+\n", "| | timestamps | rms_acc | peak_acc | peak2peak_acc | variance_acc | crest_factor_acc | utilization_acc | dc_component_acc |\n", "|-------+--------------+------------+------------+-----------------+----------------+--------------------+-------------------+--------------------|\n", - "| count | 49 | 49 | 49 | 49 | 49 | 49 | 49 | 49 |\n", - "| mean | 1.57235e+09 | 0.610976 | 2.82032 | 5.40237 | 0.376463 | 4.63947 | 1 | -0.120482 |\n", - "| std | 1.2361e+06 | 0.0568944 | 0.28031 | 0.381933 | 0.0639936 | 0.329529 | 0 | 0.0140604 |\n", - "| min | 1.57027e+09 | 0.484569 | 2.26056 | 4.55438 | 0.234808 | 4.12335 | 1 | -0.140529 |\n", - "| 25% | 1.57131e+09 | 0.627902 | 2.68279 | 5.3147 | 0.394261 | 4.20778 | 1 | -0.140076 |\n", - "| 50% | 1.57235e+09 | 0.628314 | 2.9618 | 5.5528 | 0.394779 | 4.81597 | 1 | -0.110197 |\n", - "| 75% | 1.57339e+09 | 0.646751 | 3.06939 | 5.69452 | 0.418286 | 4.89178 | 1 | -0.109662 |\n", - "| max | 1.57442e+09 | 0.647702 | 3.13609 | 5.79639 | 0.419518 | 4.9925 | 1 | -0.109068 |\n", + "| count | 50 | 50 | 50 | 50 | 50 | 50 | 50 | 50 |\n", + "| mean | 1.57231e+09 | 0.611691 | 2.81764 | 5.40059 | 0.377299 | 4.62976 | 1 | -0.120874 |\n", + "| std | 1.26105e+06 | 0.0565414 | 0.278079 | 0.378225 | 0.0636172 | 0.333367 | 0 | 0.0141936 |\n", + "| min | 1.57019e+09 | 0.484564 | 2.26056 | 4.55438 | 0.234802 | 4.12339 | 1 | -0.140524 |\n", + "| 25% | 1.57125e+09 | 0.627912 | 2.68338 | 5.31364 | 0.394273 | 4.20402 | 1 | -0.140196 |\n", + "| 50% | 1.57231e+09 | 0.628307 | 2.84999 | 5.52634 | 0.39477 | 4.80641 | 1 | -0.112316 |\n", + "| 75% | 1.57337e+09 | 0.64684 | 3.06661 | 5.69377 | 0.418402 | 4.89065 | 1 | -0.10966 |\n", + "| max | 1.57442e+09 | 0.647694 | 3.13609 | 5.79639 | 0.419507 | 4.99256 | 1 | -0.109065 |\n", "+-------+--------------+------------+------------+-----------------+----------------+--------------------+-------------------+--------------------+\n" ] } @@ -760,15 +292,18 @@ "id": "global-prediction", "metadata": {}, "source": [ + "## Use Generic Methods\n", + "\n", "### Plotting\n", - "For visual representation of the results there is the 'plot' method:\n", + "For visual representation of the results, there is the 'plot' method.\n", "\n", - "Please not that when plotting the results for the KPIDemo feature, one selects the KPI to be displayed by passing the parameter `\"kpi\"`. If this parameter is not included, the plot function will display the results of the first KPI after the timestamps, which is the RMS value." + "Please not that when plotting the results for the KPIDemo feature, one selects the KPI to be displayed by passing the parameter `\"kpi\"`.\n", + "If this parameter is not included, the plot function will display the results of the first column after the timestamps, which is the RMS value of the first channel." ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "joint-dryer", "metadata": { "ExecuteTime": { @@ -783,10 +318,8 @@ "outputs": [ { "data": { - "image/png": "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", - "text/plain": [ - "
" - ] + "text/plain": "
", + "image/png": "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\n" }, "metadata": { "needs_background": "light" @@ -795,11 +328,9 @@ }, { "data": { - "text/plain": [ - "''" - ] + "text/plain": "''" }, - "execution_count": 6, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -818,12 +349,13 @@ }, "source": [ "### Export results to DataFrame\n", - "The to_df() method will export results to a DataFrame. Note that the format of the DataFrame depends on the specific analysis and that not all of the results can be represented as a data frame." + "The to_df() method will export results to a DataFrame.\n", + "Note that the format of the DataFrame depends on the specific analysis and that not all of the results can be represented as a data frame." ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "id": "improved-carroll", "metadata": { "ExecuteTime": { @@ -837,785 +369,10 @@ "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", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
timestampsrms_accpeak_accpeak2peak_accvariance_acccrest_factor_accutilization_accdc_component_accdatetime
015702732600.6471312.6917555.3670040.4187784.1595231-0.1404252019-10-05 13:01:00+02:00
115703596600.6466272.7152555.4148560.4181264.1991081-0.1402432019-10-06 13:01:00+02:00
215704460600.6468812.6851515.3515620.4184554.1509211-0.1403512019-10-07 13:01:00+02:00
315705324600.6466492.7266115.3953250.4181554.2165211-0.1404292019-10-08 13:01:00+02:00
415706188600.6467252.6970045.3109740.4182534.1702491-0.1400582019-10-09 13:01:00+02:00
515707052600.6471012.7117355.3146970.4187394.1905921-0.1405072019-10-10 13:01:00+02:00
615707916600.6474302.6812605.3259280.4191654.1413911-0.1403662019-10-11 13:01:00+02:00
715708780600.6468982.6673845.2713620.4184774.1233471-0.1405292019-10-12 13:01:00+02:00
815709644600.6477022.6787575.3791500.4195184.1691931-0.1404882019-10-13 13:01:00+02:00
915710508600.6470892.7229825.4998780.4187244.2913681-0.1398522019-10-14 13:01:00+02:00
1015711372600.6472132.6827405.2990720.4188844.1450651-0.1403202019-10-15 13:01:00+02:00
1115712236600.6467512.6827885.2785640.4182864.1481021-0.1403682019-10-16 13:01:00+02:00
1215713100600.6473292.7008035.4246220.4190354.2077781-0.1403172019-10-17 13:01:00+02:00
1315713964600.6474412.7210075.3746340.4191804.2027101-0.1400742019-10-18 13:01:00+02:00
1415714828600.6476292.7381835.3666990.4194244.2280101-0.1404042019-10-19 13:01:00+02:00
1515715692600.6471192.6924445.3626100.4187634.1606641-0.1400762019-10-20 13:01:00+02:00
1615716556600.4848982.3720134.6079710.2351264.8917791-0.1144452019-10-21 13:01:00+02:00
1715717420600.4848472.2734294.5543820.2350764.7044811-0.1147382019-10-22 13:01:00+02:00
1815718284600.4847582.3565634.6644900.2349904.8613221-0.1149252019-10-23 13:01:00+02:00
1915719148600.4845692.3674734.7015990.2348084.8857261-0.1148492019-10-24 13:01:00+02:00
2015720012600.4850072.2605634.6527710.2352324.9323201-0.1146282019-10-25 13:01:00+02:00
2115720876600.4850192.3019654.5919800.2352434.7461351-0.1145872019-10-26 13:01:00+02:00
2215721776600.4852602.2608624.6187740.2354774.8590721-0.1148662019-10-27 13:01:00+01:00
2315722640600.4851622.3365284.5844120.2353834.8159721-0.1145432019-10-28 13:01:00+01:00
2415723504600.6279023.0371085.6010130.3942614.8369111-0.1099232019-10-29 13:01:00+01:00
2515724368600.6281473.0697915.7208860.3945684.8870601-0.1100742019-10-30 13:01:00+01:00
2615725232600.6283163.1035045.7542720.3947814.9394021-0.1096072019-10-31 13:01:00+01:00
2715726096600.6280273.0326725.6945190.3944184.8288871-0.1098822019-11-01 13:01:00+01:00
2815726960600.6280272.9693205.6492920.3944184.7280131-0.1091512019-11-02 13:01:00+01:00
2915727824600.6282913.0297195.6754760.3947494.8221601-0.1097972019-11-03 13:01:00+01:00
3015728688600.6281603.1360885.7117920.3945854.9924981-0.1096592019-11-04 13:01:00+01:00
3115729552600.6279733.1233645.7236330.3943504.9737211-0.1095092019-11-05 13:01:00+01:00
3215730416600.6277423.0473915.6548460.3940604.8545281-0.1101972019-11-06 13:01:00+01:00
3315731280600.6278773.1346275.7963870.3942294.9924221-0.1096022019-11-07 13:01:00+01:00
3415732144600.6286883.0981315.6952510.3952494.9279281-0.1097882019-11-08 13:01:00+01:00
3515733008600.6281343.0693915.6915280.3945534.8865201-0.1096742019-11-09 13:01:00+01:00
3615733872600.6281292.9618015.5751950.3945464.7152741-0.1100562019-11-10 13:01:00+01:00
3715734736600.6277873.0721305.6965330.3941174.8935841-0.1096662019-11-11 13:01:00+01:00
3815735600600.6278533.0116555.7168580.3942004.7967501-0.1096162019-11-12 13:01:00+01:00
3915736464600.6285442.9784425.5527950.3950684.7386361-0.1098512019-11-13 13:01:00+01:00
4015737328600.6284053.1067815.7055660.3948934.9439171-0.1093442019-11-14 13:01:00+01:00
4115738192600.6283143.0939475.6831050.3947794.9242051-0.1092672019-11-15 13:01:00+01:00
4215739056600.6281502.9965315.5899050.3945724.7704081-0.1099962019-11-16 13:01:00+01:00
4315739920600.6285483.0126835.6024170.3950734.7930821-0.1100952019-11-17 13:01:00+01:00
4415740784600.6281253.1039255.7175900.3945414.9415701-0.1096622019-11-18 13:01:00+01:00
4515741648600.6284363.0582905.5902710.3949324.8665091-0.1093772019-11-19 13:01:00+01:00
4615742512600.6284483.0854695.7672730.3949474.9096621-0.1092722019-11-20 13:01:00+01:00
4715743376600.6286083.0495755.6591800.3951484.8513131-0.1090842019-11-21 13:01:00+01:00
4815744240600.6279703.0880725.7773440.3943474.9175441-0.1090682019-11-22 13:01:00+01:00
\n", - "
" - ], - "text/plain": [ - " timestamps rms_acc peak_acc peak2peak_acc variance_acc \\\n", - "0 1570273260 0.647131 2.691755 5.367004 0.418778 \n", - "1 1570359660 0.646627 2.715255 5.414856 0.418126 \n", - "2 1570446060 0.646881 2.685151 5.351562 0.418455 \n", - "3 1570532460 0.646649 2.726611 5.395325 0.418155 \n", - "4 1570618860 0.646725 2.697004 5.310974 0.418253 \n", - "5 1570705260 0.647101 2.711735 5.314697 0.418739 \n", - "6 1570791660 0.647430 2.681260 5.325928 0.419165 \n", - "7 1570878060 0.646898 2.667384 5.271362 0.418477 \n", - "8 1570964460 0.647702 2.678757 5.379150 0.419518 \n", - "9 1571050860 0.647089 2.722982 5.499878 0.418724 \n", - "10 1571137260 0.647213 2.682740 5.299072 0.418884 \n", - "11 1571223660 0.646751 2.682788 5.278564 0.418286 \n", - "12 1571310060 0.647329 2.700803 5.424622 0.419035 \n", - "13 1571396460 0.647441 2.721007 5.374634 0.419180 \n", - "14 1571482860 0.647629 2.738183 5.366699 0.419424 \n", - "15 1571569260 0.647119 2.692444 5.362610 0.418763 \n", - "16 1571655660 0.484898 2.372013 4.607971 0.235126 \n", - "17 1571742060 0.484847 2.273429 4.554382 0.235076 \n", - "18 1571828460 0.484758 2.356563 4.664490 0.234990 \n", - "19 1571914860 0.484569 2.367473 4.701599 0.234808 \n", - "20 1572001260 0.485007 2.260563 4.652771 0.235232 \n", - "21 1572087660 0.485019 2.301965 4.591980 0.235243 \n", - "22 1572177660 0.485260 2.260862 4.618774 0.235477 \n", - "23 1572264060 0.485162 2.336528 4.584412 0.235383 \n", - "24 1572350460 0.627902 3.037108 5.601013 0.394261 \n", - "25 1572436860 0.628147 3.069791 5.720886 0.394568 \n", - "26 1572523260 0.628316 3.103504 5.754272 0.394781 \n", - "27 1572609660 0.628027 3.032672 5.694519 0.394418 \n", - "28 1572696060 0.628027 2.969320 5.649292 0.394418 \n", - "29 1572782460 0.628291 3.029719 5.675476 0.394749 \n", - "30 1572868860 0.628160 3.136088 5.711792 0.394585 \n", - "31 1572955260 0.627973 3.123364 5.723633 0.394350 \n", - "32 1573041660 0.627742 3.047391 5.654846 0.394060 \n", - "33 1573128060 0.627877 3.134627 5.796387 0.394229 \n", - "34 1573214460 0.628688 3.098131 5.695251 0.395249 \n", - "35 1573300860 0.628134 3.069391 5.691528 0.394553 \n", - "36 1573387260 0.628129 2.961801 5.575195 0.394546 \n", - "37 1573473660 0.627787 3.072130 5.696533 0.394117 \n", - "38 1573560060 0.627853 3.011655 5.716858 0.394200 \n", - "39 1573646460 0.628544 2.978442 5.552795 0.395068 \n", - "40 1573732860 0.628405 3.106781 5.705566 0.394893 \n", - "41 1573819260 0.628314 3.093947 5.683105 0.394779 \n", - "42 1573905660 0.628150 2.996531 5.589905 0.394572 \n", - "43 1573992060 0.628548 3.012683 5.602417 0.395073 \n", - "44 1574078460 0.628125 3.103925 5.717590 0.394541 \n", - "45 1574164860 0.628436 3.058290 5.590271 0.394932 \n", - "46 1574251260 0.628448 3.085469 5.767273 0.394947 \n", - "47 1574337660 0.628608 3.049575 5.659180 0.395148 \n", - "48 1574424060 0.627970 3.088072 5.777344 0.394347 \n", - "\n", - " crest_factor_acc utilization_acc dc_component_acc \\\n", - "0 4.159523 1 -0.140425 \n", - "1 4.199108 1 -0.140243 \n", - "2 4.150921 1 -0.140351 \n", - "3 4.216521 1 -0.140429 \n", - "4 4.170249 1 -0.140058 \n", - "5 4.190592 1 -0.140507 \n", - "6 4.141391 1 -0.140366 \n", - "7 4.123347 1 -0.140529 \n", - "8 4.169193 1 -0.140488 \n", - "9 4.291368 1 -0.139852 \n", - "10 4.145065 1 -0.140320 \n", - "11 4.148102 1 -0.140368 \n", - "12 4.207778 1 -0.140317 \n", - "13 4.202710 1 -0.140074 \n", - "14 4.228010 1 -0.140404 \n", - "15 4.160664 1 -0.140076 \n", - "16 4.891779 1 -0.114445 \n", - "17 4.704481 1 -0.114738 \n", - "18 4.861322 1 -0.114925 \n", - "19 4.885726 1 -0.114849 \n", - "20 4.932320 1 -0.114628 \n", - "21 4.746135 1 -0.114587 \n", - "22 4.859072 1 -0.114866 \n", - "23 4.815972 1 -0.114543 \n", - "24 4.836911 1 -0.109923 \n", - "25 4.887060 1 -0.110074 \n", - "26 4.939402 1 -0.109607 \n", - "27 4.828887 1 -0.109882 \n", - "28 4.728013 1 -0.109151 \n", - "29 4.822160 1 -0.109797 \n", - "30 4.992498 1 -0.109659 \n", - "31 4.973721 1 -0.109509 \n", - "32 4.854528 1 -0.110197 \n", - "33 4.992422 1 -0.109602 \n", - "34 4.927928 1 -0.109788 \n", - "35 4.886520 1 -0.109674 \n", - "36 4.715274 1 -0.110056 \n", - "37 4.893584 1 -0.109666 \n", - "38 4.796750 1 -0.109616 \n", - "39 4.738636 1 -0.109851 \n", - "40 4.943917 1 -0.109344 \n", - "41 4.924205 1 -0.109267 \n", - "42 4.770408 1 -0.109996 \n", - "43 4.793082 1 -0.110095 \n", - "44 4.941570 1 -0.109662 \n", - "45 4.866509 1 -0.109377 \n", - "46 4.909662 1 -0.109272 \n", - "47 4.851313 1 -0.109084 \n", - "48 4.917544 1 -0.109068 \n", - "\n", - " datetime \n", - "0 2019-10-05 13:01:00+02:00 \n", - "1 2019-10-06 13:01:00+02:00 \n", - "2 2019-10-07 13:01:00+02:00 \n", - "3 2019-10-08 13:01:00+02:00 \n", - "4 2019-10-09 13:01:00+02:00 \n", - "5 2019-10-10 13:01:00+02:00 \n", - "6 2019-10-11 13:01:00+02:00 \n", - "7 2019-10-12 13:01:00+02:00 \n", - "8 2019-10-13 13:01:00+02:00 \n", - "9 2019-10-14 13:01:00+02:00 \n", - "10 2019-10-15 13:01:00+02:00 \n", - "11 2019-10-16 13:01:00+02:00 \n", - "12 2019-10-17 13:01:00+02:00 \n", - "13 2019-10-18 13:01:00+02:00 \n", - "14 2019-10-19 13:01:00+02:00 \n", - "15 2019-10-20 13:01:00+02:00 \n", - "16 2019-10-21 13:01:00+02:00 \n", - "17 2019-10-22 13:01:00+02:00 \n", - "18 2019-10-23 13:01:00+02:00 \n", - "19 2019-10-24 13:01:00+02:00 \n", - "20 2019-10-25 13:01:00+02:00 \n", - "21 2019-10-26 13:01:00+02:00 \n", - "22 2019-10-27 13:01:00+01:00 \n", - "23 2019-10-28 13:01:00+01:00 \n", - "24 2019-10-29 13:01:00+01:00 \n", - "25 2019-10-30 13:01:00+01:00 \n", - "26 2019-10-31 13:01:00+01:00 \n", - "27 2019-11-01 13:01:00+01:00 \n", - "28 2019-11-02 13:01:00+01:00 \n", - "29 2019-11-03 13:01:00+01:00 \n", - "30 2019-11-04 13:01:00+01:00 \n", - "31 2019-11-05 13:01:00+01:00 \n", - "32 2019-11-06 13:01:00+01:00 \n", - "33 2019-11-07 13:01:00+01:00 \n", - "34 2019-11-08 13:01:00+01:00 \n", - "35 2019-11-09 13:01:00+01:00 \n", - "36 2019-11-10 13:01:00+01:00 \n", - "37 2019-11-11 13:01:00+01:00 \n", - "38 2019-11-12 13:01:00+01:00 \n", - "39 2019-11-13 13:01:00+01:00 \n", - "40 2019-11-14 13:01:00+01:00 \n", - "41 2019-11-15 13:01:00+01:00 \n", - "42 2019-11-16 13:01:00+01:00 \n", - "43 2019-11-17 13:01:00+01:00 \n", - "44 2019-11-18 13:01:00+01:00 \n", - "45 2019-11-19 13:01:00+01:00 \n", - "46 2019-11-20 13:01:00+01:00 \n", - "47 2019-11-21 13:01:00+01:00 \n", - "48 2019-11-22 13:01:00+01:00 " - ] + "text/plain": " timestamps rms_acc peak_acc peak2peak_acc variance_acc \\\n0 1570186860 0.647086 2.686563 5.313293 0.418720 \n1 1570273260 0.647123 2.691750 5.367004 0.418769 \n2 1570359660 0.646619 2.715251 5.414856 0.418116 \n3 1570446060 0.646873 2.685147 5.351562 0.418445 \n4 1570532460 0.646643 2.726605 5.395325 0.418147 \n5 1570618860 0.646717 2.697001 5.310974 0.418243 \n6 1570705260 0.647093 2.711733 5.314697 0.418729 \n7 1570791660 0.647422 2.681256 5.325928 0.419155 \n8 1570878060 0.646890 2.667379 5.271362 0.418467 \n9 1570964460 0.647694 2.678755 5.379150 0.419507 \n10 1571050860 0.647081 2.722979 5.499878 0.418714 \n11 1571137260 0.647205 2.682736 5.299072 0.418874 \n12 1571223660 0.646743 2.682785 5.278564 0.418276 \n13 1571310060 0.647322 2.700798 5.424622 0.419026 \n14 1571396460 0.647434 2.721002 5.374634 0.419170 \n15 1571482860 0.647621 2.738182 5.366699 0.419413 \n16 1571569260 0.647111 2.692440 5.362610 0.418753 \n17 1571655660 0.484892 2.372010 4.607971 0.235120 \n18 1571742060 0.484841 2.273428 4.554382 0.235071 \n19 1571828460 0.484752 2.356562 4.664490 0.234984 \n20 1571914860 0.484564 2.367471 4.701599 0.234802 \n21 1572001260 0.485001 2.260560 4.652771 0.235226 \n22 1572087660 0.485013 2.301963 4.591980 0.235237 \n23 1572177660 0.485254 2.260858 4.618774 0.235472 \n24 1572264060 0.485157 2.336525 4.584412 0.235377 \n25 1572350460 0.627895 3.037107 5.601013 0.394252 \n26 1572436860 0.628139 3.069790 5.720886 0.394559 \n27 1572523260 0.628308 3.103501 5.754272 0.394771 \n28 1572609660 0.628020 3.032668 5.694519 0.394409 \n29 1572696060 0.628019 2.969318 5.649292 0.394408 \n30 1572782460 0.628283 3.029716 5.675476 0.394740 \n31 1572868860 0.628152 3.136087 5.711792 0.394575 \n32 1572955260 0.627966 3.123363 5.723633 0.394341 \n33 1573041660 0.627735 3.047385 5.654846 0.394052 \n34 1573128060 0.627870 3.134621 5.796387 0.394221 \n35 1573214460 0.628681 3.098128 5.695251 0.395239 \n36 1573300860 0.628127 3.069387 5.691528 0.394543 \n37 1573387260 0.628122 2.961798 5.575195 0.394537 \n38 1573473660 0.627780 3.072126 5.696533 0.394108 \n39 1573560060 0.627846 3.011650 5.716858 0.394191 \n40 1573646460 0.628536 2.978442 5.552795 0.395058 \n41 1573732860 0.628397 3.106778 5.705566 0.394883 \n42 1573819260 0.628307 3.093943 5.683105 0.394769 \n43 1573905660 0.628142 2.996528 5.589905 0.394563 \n44 1573992060 0.628540 3.012680 5.602417 0.395063 \n45 1574078460 0.628118 3.103921 5.717590 0.394532 \n46 1574164860 0.628429 3.058288 5.590271 0.394922 \n47 1574251260 0.628441 3.085465 5.767273 0.394938 \n48 1574337660 0.628601 3.049571 5.659180 0.395139 \n49 1574424060 0.627963 3.088068 5.777344 0.394337 \n\n crest_factor_acc utilization_acc dc_component_acc \\\n0 4.151786 1 -0.140237 \n1 4.159563 1 -0.140420 \n2 4.199152 1 -0.140239 \n3 4.150966 1 -0.140347 \n4 4.216556 1 -0.140423 \n5 4.170294 1 -0.140055 \n6 4.190640 1 -0.140505 \n7 4.141435 1 -0.140363 \n8 4.123387 1 -0.140524 \n9 4.169247 1 -0.140486 \n10 4.291424 1 -0.139850 \n11 4.145110 1 -0.140317 \n12 4.148148 1 -0.140365 \n13 4.207834 1 -0.140312 \n14 4.202750 1 -0.140069 \n15 4.228060 1 -0.140403 \n16 4.160706 1 -0.140071 \n17 4.891831 1 -0.114442 \n18 4.704542 1 -0.114736 \n19 4.861379 1 -0.114924 \n20 4.885779 1 -0.114846 \n21 4.932384 1 -0.114624 \n22 4.746192 1 -0.114586 \n23 4.859134 1 -0.114862 \n24 4.816021 1 -0.114540 \n25 4.836969 1 -0.109921 \n26 4.887119 1 -0.110074 \n27 4.939456 1 -0.109604 \n28 4.828938 1 -0.109878 \n29 4.728068 1 -0.109149 \n30 4.822214 1 -0.109794 \n31 4.992559 1 -0.109659 \n32 4.973780 1 -0.109508 \n33 4.854570 1 -0.110191 \n34 4.992468 1 -0.109597 \n35 4.927984 1 -0.109786 \n36 4.886571 1 -0.109670 \n37 4.715324 1 -0.110052 \n38 4.893636 1 -0.109663 \n39 4.796795 1 -0.109611 \n40 4.738696 1 -0.109851 \n41 4.943972 1 -0.109341 \n42 4.924257 1 -0.109263 \n43 4.770460 1 -0.109992 \n44 4.793137 1 -0.110092 \n45 4.941623 1 -0.109658 \n46 4.866564 1 -0.109374 \n47 4.909715 1 -0.109269 \n48 4.851366 1 -0.109081 \n49 4.917596 1 -0.109065 \n\n datetime \n0 2019-10-04 13:01:00+02:00 \n1 2019-10-05 13:01:00+02:00 \n2 2019-10-06 13:01:00+02:00 \n3 2019-10-07 13:01:00+02:00 \n4 2019-10-08 13:01:00+02:00 \n5 2019-10-09 13:01:00+02:00 \n6 2019-10-10 13:01:00+02:00 \n7 2019-10-11 13:01:00+02:00 \n8 2019-10-12 13:01:00+02:00 \n9 2019-10-13 13:01:00+02:00 \n10 2019-10-14 13:01:00+02:00 \n11 2019-10-15 13:01:00+02:00 \n12 2019-10-16 13:01:00+02:00 \n13 2019-10-17 13:01:00+02:00 \n14 2019-10-18 13:01:00+02:00 \n15 2019-10-19 13:01:00+02:00 \n16 2019-10-20 13:01:00+02:00 \n17 2019-10-21 13:01:00+02:00 \n18 2019-10-22 13:01:00+02:00 \n19 2019-10-23 13:01:00+02:00 \n20 2019-10-24 13:01:00+02:00 \n21 2019-10-25 13:01:00+02:00 \n22 2019-10-26 13:01:00+02:00 \n23 2019-10-27 13:01:00+01:00 \n24 2019-10-28 13:01:00+01:00 \n25 2019-10-29 13:01:00+01:00 \n26 2019-10-30 13:01:00+01:00 \n27 2019-10-31 13:01:00+01:00 \n28 2019-11-01 13:01:00+01:00 \n29 2019-11-02 13:01:00+01:00 \n30 2019-11-03 13:01:00+01:00 \n31 2019-11-04 13:01:00+01:00 \n32 2019-11-05 13:01:00+01:00 \n33 2019-11-06 13:01:00+01:00 \n34 2019-11-07 13:01:00+01:00 \n35 2019-11-08 13:01:00+01:00 \n36 2019-11-09 13:01:00+01:00 \n37 2019-11-10 13:01:00+01:00 \n38 2019-11-11 13:01:00+01:00 \n39 2019-11-12 13:01:00+01:00 \n40 2019-11-13 13:01:00+01:00 \n41 2019-11-14 13:01:00+01:00 \n42 2019-11-15 13:01:00+01:00 \n43 2019-11-16 13:01:00+01:00 \n44 2019-11-17 13:01:00+01:00 \n45 2019-11-18 13:01:00+01:00 \n46 2019-11-19 13:01:00+01:00 \n47 2019-11-20 13:01:00+01:00 \n48 2019-11-21 13:01:00+01:00 \n49 2019-11-22 13:01:00+01:00 ", + "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 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
timestampsrms_accpeak_accpeak2peak_accvariance_acccrest_factor_accutilization_accdc_component_accdatetime
015701868600.6470862.6865635.3132930.4187204.1517861-0.1402372019-10-04 13:01:00+02:00
115702732600.6471232.6917505.3670040.4187694.1595631-0.1404202019-10-05 13:01:00+02:00
215703596600.6466192.7152515.4148560.4181164.1991521-0.1402392019-10-06 13:01:00+02:00
315704460600.6468732.6851475.3515620.4184454.1509661-0.1403472019-10-07 13:01:00+02:00
415705324600.6466432.7266055.3953250.4181474.2165561-0.1404232019-10-08 13:01:00+02:00
515706188600.6467172.6970015.3109740.4182434.1702941-0.1400552019-10-09 13:01:00+02:00
615707052600.6470932.7117335.3146970.4187294.1906401-0.1405052019-10-10 13:01:00+02:00
715707916600.6474222.6812565.3259280.4191554.1414351-0.1403632019-10-11 13:01:00+02:00
815708780600.6468902.6673795.2713620.4184674.1233871-0.1405242019-10-12 13:01:00+02:00
915709644600.6476942.6787555.3791500.4195074.1692471-0.1404862019-10-13 13:01:00+02:00
1015710508600.6470812.7229795.4998780.4187144.2914241-0.1398502019-10-14 13:01:00+02:00
1115711372600.6472052.6827365.2990720.4188744.1451101-0.1403172019-10-15 13:01:00+02:00
1215712236600.6467432.6827855.2785640.4182764.1481481-0.1403652019-10-16 13:01:00+02:00
1315713100600.6473222.7007985.4246220.4190264.2078341-0.1403122019-10-17 13:01:00+02:00
1415713964600.6474342.7210025.3746340.4191704.2027501-0.1400692019-10-18 13:01:00+02:00
1515714828600.6476212.7381825.3666990.4194134.2280601-0.1404032019-10-19 13:01:00+02:00
1615715692600.6471112.6924405.3626100.4187534.1607061-0.1400712019-10-20 13:01:00+02:00
1715716556600.4848922.3720104.6079710.2351204.8918311-0.1144422019-10-21 13:01:00+02:00
1815717420600.4848412.2734284.5543820.2350714.7045421-0.1147362019-10-22 13:01:00+02:00
1915718284600.4847522.3565624.6644900.2349844.8613791-0.1149242019-10-23 13:01:00+02:00
2015719148600.4845642.3674714.7015990.2348024.8857791-0.1148462019-10-24 13:01:00+02:00
2115720012600.4850012.2605604.6527710.2352264.9323841-0.1146242019-10-25 13:01:00+02:00
2215720876600.4850132.3019634.5919800.2352374.7461921-0.1145862019-10-26 13:01:00+02:00
2315721776600.4852542.2608584.6187740.2354724.8591341-0.1148622019-10-27 13:01:00+01:00
2415722640600.4851572.3365254.5844120.2353774.8160211-0.1145402019-10-28 13:01:00+01:00
2515723504600.6278953.0371075.6010130.3942524.8369691-0.1099212019-10-29 13:01:00+01:00
2615724368600.6281393.0697905.7208860.3945594.8871191-0.1100742019-10-30 13:01:00+01:00
2715725232600.6283083.1035015.7542720.3947714.9394561-0.1096042019-10-31 13:01:00+01:00
2815726096600.6280203.0326685.6945190.3944094.8289381-0.1098782019-11-01 13:01:00+01:00
2915726960600.6280192.9693185.6492920.3944084.7280681-0.1091492019-11-02 13:01:00+01:00
3015727824600.6282833.0297165.6754760.3947404.8222141-0.1097942019-11-03 13:01:00+01:00
3115728688600.6281523.1360875.7117920.3945754.9925591-0.1096592019-11-04 13:01:00+01:00
3215729552600.6279663.1233635.7236330.3943414.9737801-0.1095082019-11-05 13:01:00+01:00
3315730416600.6277353.0473855.6548460.3940524.8545701-0.1101912019-11-06 13:01:00+01:00
3415731280600.6278703.1346215.7963870.3942214.9924681-0.1095972019-11-07 13:01:00+01:00
3515732144600.6286813.0981285.6952510.3952394.9279841-0.1097862019-11-08 13:01:00+01:00
3615733008600.6281273.0693875.6915280.3945434.8865711-0.1096702019-11-09 13:01:00+01:00
3715733872600.6281222.9617985.5751950.3945374.7153241-0.1100522019-11-10 13:01:00+01:00
3815734736600.6277803.0721265.6965330.3941084.8936361-0.1096632019-11-11 13:01:00+01:00
3915735600600.6278463.0116505.7168580.3941914.7967951-0.1096112019-11-12 13:01:00+01:00
4015736464600.6285362.9784425.5527950.3950584.7386961-0.1098512019-11-13 13:01:00+01:00
4115737328600.6283973.1067785.7055660.3948834.9439721-0.1093412019-11-14 13:01:00+01:00
4215738192600.6283073.0939435.6831050.3947694.9242571-0.1092632019-11-15 13:01:00+01:00
4315739056600.6281422.9965285.5899050.3945634.7704601-0.1099922019-11-16 13:01:00+01:00
4415739920600.6285403.0126805.6024170.3950634.7931371-0.1100922019-11-17 13:01:00+01:00
4515740784600.6281183.1039215.7175900.3945324.9416231-0.1096582019-11-18 13:01:00+01:00
4615741648600.6284293.0582885.5902710.3949224.8665641-0.1093742019-11-19 13:01:00+01:00
4715742512600.6284413.0854655.7672730.3949384.9097151-0.1092692019-11-20 13:01:00+01:00
4815743376600.6286013.0495715.6591800.3951394.8513661-0.1090812019-11-21 13:01:00+01:00
4915744240600.6279633.0880685.7773440.3943374.9175961-0.1090652019-11-22 13:01:00+01:00
\n
" }, - "execution_count": 7, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -1634,12 +391,12 @@ }, "source": [ "### Full results\n", - "In case the full server results are needed in the form they were returned, we can obtain them with the results() method:" + "In case the full server results are needed in the raw form they were returned, we can obtain them with the results() method:" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "id": "retained-halloween", "metadata": { "ExecuteTime": { @@ -1650,411 +407,9 @@ "name": "#%%\n" } }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'acc': {'rms': [0.6471306969644414,\n", - " 0.6466266944439302,\n", - " 0.6468806720402722,\n", - " 0.6466493957387159,\n", - " 0.6467249872072451,\n", - " 0.647100732403723,\n", - " 0.6474297483216226,\n", - " 0.6468977699997093,\n", - " 0.6477017500152474,\n", - " 0.6470887870500318,\n", - " 0.647212859812641,\n", - " 0.6467505833073381,\n", - " 0.6473294495532388,\n", - " 0.6474410190623384,\n", - " 0.6476292704319382,\n", - " 0.6471187716244126,\n", - " 0.4848978443906459,\n", - " 0.48484688004435844,\n", - " 0.48475765388364805,\n", - " 0.48456940607276594,\n", - " 0.4850067490271975,\n", - " 0.4850187365383283,\n", - " 0.48525980138293656,\n", - " 0.48516238436722653,\n", - " 0.6279023656493041,\n", - " 0.6281468737921598,\n", - " 0.6283156705845551,\n", - " 0.6280271420358873,\n", - " 0.628026946860152,\n", - " 0.6282908228344413,\n", - " 0.6281600540558904,\n", - " 0.6279733052109427,\n", - " 0.6277421066711281,\n", - " 0.6278769053426508,\n", - " 0.6286883127970024,\n", - " 0.6281343035247084,\n", - " 0.6281292299681172,\n", - " 0.6277872706078097,\n", - " 0.6278531570472111,\n", - " 0.6285441754422537,\n", - " 0.6284047851367978,\n", - " 0.6283140536346776,\n", - " 0.6281499282360293,\n", - " 0.6285481383470801,\n", - " 0.6281251443487925,\n", - " 0.6284361962847654,\n", - " 0.6284482844164598,\n", - " 0.6286081295548268,\n", - " 0.6279703831408971],\n", - " 'peak': [2.6917552104452027,\n", - " 2.715255164704313,\n", - " 2.6851505333043484,\n", - " 2.7266109280295483,\n", - " 2.6970042262531173,\n", - " 2.711735134992144,\n", - " 2.681259855287886,\n", - " 2.667384142184121,\n", - " 2.6787570888613037,\n", - " 2.7229817204780704,\n", - " 2.682739508062897,\n", - " 2.682787559190933,\n", - " 2.700802677842825,\n", - " 2.7210068297972096,\n", - " 2.738182747476402,\n", - " 2.6924439987220383,\n", - " 2.3720132599872614,\n", - " 2.2734294797799635,\n", - " 2.3565631117706656,\n", - " 2.367473192872302,\n", - " 2.2605627121879217,\n", - " 2.3019645284833294,\n", - " 2.260862113899039,\n", - " 2.33652828167628,\n", - " 3.0371081557922737,\n", - " 3.0697912558897955,\n", - " 3.1035036648621293,\n", - " 3.032672310338032,\n", - " 2.9693198781385552,\n", - " 3.029719051997296,\n", - " 3.136087697846743,\n", - " 3.123363962089775,\n", - " 3.0473913260795387,\n", - " 3.1346266673634613,\n", - " 3.0981306499825583,\n", - " 3.069391137549435,\n", - " 2.9618012255115946,\n", - " 3.07212973445674,\n", - " 3.0116547698238354,\n", - " 2.978442280270874,\n", - " 3.1067808753934667,\n", - " 3.0939468951811686,\n", - " 2.996531248730437,\n", - " 3.012682780143234,\n", - " 3.103924514311588,\n", - " 3.0582901611724864,\n", - " 3.0854686711406067,\n", - " 3.049574684496507,\n", - " 3.088072126729926],\n", - " 'peak2peak': [5.36700439453125,\n", - " 5.41485595703125,\n", - " 5.3515625,\n", - " 5.39532470703125,\n", - " 5.31097412109375,\n", - " 5.314697265625,\n", - " 5.325927734375,\n", - " 5.2713623046875,\n", - " 5.379150390625,\n", - " 5.4998779296875,\n", - " 5.299072265625,\n", - " 5.278564453125,\n", - " 5.42462158203125,\n", - " 5.3746337890625,\n", - " 5.36669921875,\n", - " 5.36260986328125,\n", - " 4.60797119140625,\n", - " 4.55438232421875,\n", - " 4.66448974609375,\n", - " 4.70159912109375,\n", - " 4.65277099609375,\n", - " 4.59197998046875,\n", - " 4.6187744140625,\n", - " 4.58441162109375,\n", - " 5.60101318359375,\n", - " 5.72088623046875,\n", - " 5.7542724609375,\n", - " 5.69451904296875,\n", - " 5.6492919921875,\n", - " 5.67547607421875,\n", - " 5.7117919921875,\n", - " 5.7236328125,\n", - " 5.65484619140625,\n", - " 5.79638671875,\n", - " 5.69525146484375,\n", - " 5.6915283203125,\n", - " 5.5751953125,\n", - " 5.696533203125,\n", - " 5.71685791015625,\n", - " 5.55279541015625,\n", - " 5.70556640625,\n", - " 5.68310546875,\n", - " 5.58990478515625,\n", - " 5.6024169921875,\n", - " 5.71759033203125,\n", - " 5.59027099609375,\n", - " 5.76727294921875,\n", - " 5.6591796875,\n", - " 5.77734375],\n", - " 'variance': [0.41877813895368365,\n", - " 0.4181260819674838,\n", - " 0.41845460385927424,\n", - " 0.4181554410092465,\n", - " 0.41825320907821134,\n", - " 0.41873935787743477,\n", - " 0.4191652790117996,\n", - " 0.4184767248305968,\n", - " 0.4195175569728141,\n", - " 0.4187238983258814,\n", - " 0.41888448590685734,\n", - " 0.4182863170083822,\n", - " 0.41903541625889906,\n", - " 0.4191798731644793,\n", - " 0.41942367192020447,\n", - " 0.41876270458868864,\n", - " 0.23512591949469505,\n", - " 0.2350764970887485,\n", - " 0.2349899829987787,\n", - " 0.23480750930171312,\n", - " 0.2352315466019309,\n", - " 0.2352431747932363,\n", - " 0.23547707483820707,\n", - " 0.23538253920489244,\n", - " 0.3942613807879924,\n", - " 0.3945684950548635,\n", - " 0.3947805819021192,\n", - " 0.3944180911337645,\n", - " 0.39441784598248414,\n", - " 0.3947493580579793,\n", - " 0.39458505351149914,\n", - " 0.3943504720575559,\n", - " 0.3940601524879059,\n", - " 0.3942294082626641,\n", - " 0.39524899464754154,\n", - " 0.3945527032644705,\n", - " 0.3945463295403398,\n", - " 0.39411685713720324,\n", - " 0.3941995868141499,\n", - " 0.39506778048238267,\n", - " 0.394892573982825,\n", - " 0.3947785499948405,\n", - " 0.39457233234292877,\n", - " 0.3950727622195802,\n", - " 0.39454119696319145,\n", - " 0.3949320528008642,\n", - " 0.3949472461859916,\n", - " 0.39514818054241796,\n", - " 0.39434680210212514],\n", - " 'crest_factor': [4.159523297336503,\n", - " 4.199107751094795,\n", - " 4.1509209493542905,\n", - " 4.216521264842036,\n", - " 4.17024899238794,\n", - " 4.190591973090684,\n", - " 4.141391189142457,\n", - " 4.12334725189317,\n", - " 4.169192536071003,\n", - " 4.291368147281347,\n", - " 4.145065209055815,\n", - " 4.148102264510928,\n", - " 4.207778444296482,\n", - " 4.202709976173473,\n", - " 4.228009561164774,\n", - " 4.160664342904785,\n", - " 4.891779345746705,\n", - " 4.704480813056079,\n", - " 4.861322132597601,\n", - " 4.885725683880231,\n", - " 4.932319578447107,\n", - " 4.746135262552724,\n", - " 4.85907197225831,\n", - " 4.815971635401411,\n", - " 4.8369114721389,\n", - " 4.8870596734125,\n", - " 4.939401976039809,\n", - " 4.8288873320139665,\n", - " 4.728013492070362,\n", - " 4.822160282923067,\n", - " 4.992497815799841,\n", - " 4.973720914841443,\n", - " 4.854527510094295,\n", - " 4.992422305535833,\n", - " 4.927927856967997,\n", - " 4.886520478703161,\n", - " 4.715273679688384,\n", - " 4.893583986630332,\n", - " 4.796750221003309,\n", - " 4.738636354676574,\n", - " 4.94391664238704,\n", - " 4.924204507735062,\n", - " 4.770407690955719,\n", - " 4.793082019248064,\n", - " 4.941570230450774,\n", - " 4.866508611777468,\n", - " 4.909662016192138,\n", - " 4.851312830866793,\n", - " 4.917544218063957],\n", - " 'utilization': [1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1],\n", - " 'dc_component': [-0.14042464403895252,\n", - " -0.1402429576730629,\n", - " -0.14035072861684825,\n", - " -0.1404292874045484,\n", - " -0.14005842547186725,\n", - " -0.14050710764839433,\n", - " -0.1403663006003861,\n", - " -0.140528673434121,\n", - " -0.14048804589255356,\n", - " -0.13985183766557055,\n", - " -0.14032007446914688,\n", - " -0.1403681255971829,\n", - " -0.140316837999075,\n", - " -0.1400742126097098,\n", - " -0.14040442716390175,\n", - " -0.14007583465953835,\n", - " -0.1144449006122614,\n", - " -0.11473807352996325,\n", - " -0.11492492817691537,\n", - " -0.11484868115355228,\n", - " -0.11462765359417189,\n", - " -0.11458659879582928,\n", - " -0.11486602014903888,\n", - " -0.11454341839503018,\n", - " -0.10992309719852371,\n", - " -0.11007445901479568,\n", - " -0.10960718048712936,\n", - " -0.10988178299428189,\n", - " -0.10915142110730502,\n", - " -0.10979717699729602,\n", - " -0.10965947519049304,\n", - " -0.1095089816210249,\n", - " -0.1101965018607887,\n", - " -0.10960225330096143,\n", - " -0.10978836482630816,\n", - " -0.10967434067443484,\n", - " -0.11005562004284482,\n", - " -0.10966635555049033,\n", - " -0.10961619560508544,\n", - " -0.10985097167712396,\n", - " -0.10934435195596687,\n", - " -0.1092667193999186,\n", - " -0.10999560419918701,\n", - " -0.11009488951823405,\n", - " -0.10966181899908826,\n", - " -0.10937658695373634,\n", - " -0.10927238207810663,\n", - " -0.10908396184025694,\n", - " -0.10906822047992606]},\n", - " 'timestamps': [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060]}" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "result.results()" + "result.results();" ] }, { @@ -2069,7 +424,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "structural-acting", "metadata": { "ExecuteTime": { @@ -2077,7 +432,8 @@ "start_time": "2021-03-18T10:00:50.909661Z" }, "pycharm": { - "name": "#%%\n" + "name": "#%%\n", + "is_executing": true } }, "outputs": [ @@ -2085,2630 +441,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "Waiting for {'request_id': '023d673646aaa34407bc9cbcc4f078c8', 'request_status': 'queued'}\n" + "Waiting for {'request_id': 'e6a0938e5dd9128550f710ad0180d015', 'request_status': 'queued'}\n" ] - }, - { - "data": { - "text/plain": [ - "{'status': 'successful',\n", - " 'request_id': '023d673646aaa34407bc9cbcc4f078c8',\n", - " 'feature': 'BlackSheep',\n", - " 'results': {'atypical_assets': [{'timestamps': [1570186860,\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " 'labels': [10,\n", - " 10,\n", - " 10,\n", - " 10,\n", - " 0,\n", - " 10,\n", - " 9,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 4,\n", - " 3,\n", - " 6,\n", - " 3,\n", - " 8,\n", - " 7,\n", - " 8,\n", - " 8,\n", - " 7,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 7,\n", - " 8,\n", - " 8,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 7,\n", - " 8,\n", - " 3,\n", - " 11],\n", - " 'atypical': [False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False],\n", - " 'source_id': 'u0004'},\n", - " {'timestamps': [1570186860,\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " 'labels': [5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 5,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 6,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 10,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 10],\n", - " 'atypical': [True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False],\n", - " 'source_id': 'u0002'},\n", - " {'timestamps': [1570186860,\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " 'labels': [8,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 2,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1],\n", - " 'atypical': [False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False],\n", - " 'source_id': 'u0003'},\n", - " {'timestamps': [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " 'labels': [9,\n", - " 0,\n", - " 10,\n", - " 0,\n", - " 0,\n", - " 9,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 9,\n", - " 0,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 11,\n", - " 3,\n", - " 7,\n", - " 3,\n", - " 3,\n", - " 11],\n", - " 'atypical': [False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False],\n", - " 'source_id': 'u0001'},\n", - " {'timestamps': [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " 'labels': [9,\n", - " 0,\n", - " 10,\n", - " 0,\n", - " 0,\n", - " 9,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 9,\n", - " 0,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 11,\n", - " 3,\n", - " 7,\n", - " 3,\n", - " 3,\n", - " 11],\n", - " 'atypical': [False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False],\n", - " 'source_id': 'u0001'},\n", - " {'timestamps': [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " 'labels': [9,\n", - " 0,\n", - " 10,\n", - " 0,\n", - " 0,\n", - " 9,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 9,\n", - " 0,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 11,\n", - " 3,\n", - " 7,\n", - " 3,\n", - " 3,\n", - " 11],\n", - " 'atypical': [False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False],\n", - " 'source_id': 'u0001'},\n", - " {'timestamps': [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " 'labels': [9,\n", - " 0,\n", - " 10,\n", - " 0,\n", - " 0,\n", - " 9,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 9,\n", - " 0,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 11,\n", - " 3,\n", - " 7,\n", - " 3,\n", - " 3,\n", - " 11],\n", - " 'atypical': [False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False],\n", - " 'source_id': 'u0001'},\n", - " {'timestamps': [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " 'labels': [9,\n", - " 0,\n", - " 10,\n", - " 0,\n", - " 0,\n", - " 9,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 9,\n", - " 0,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 11,\n", - " 3,\n", - " 7,\n", - " 3,\n", - " 3,\n", - " 11],\n", - " 'atypical': [False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False],\n", - " 'source_id': 'u0001'},\n", - " {'timestamps': [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " 'labels': [9,\n", - " 0,\n", - " 10,\n", - " 0,\n", - " 0,\n", - " 9,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 9,\n", - " 0,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 11,\n", - " 3,\n", - " 7,\n", - " 3,\n", - " 3,\n", - " 11],\n", - " 'atypical': [False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False],\n", - " 'source_id': 'u0001'},\n", - " {'timestamps': [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " 'labels': [9,\n", - " 0,\n", - " 10,\n", - " 0,\n", - " 0,\n", - " 9,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 9,\n", - " 0,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 11,\n", - " 3,\n", - " 7,\n", - " 3,\n", - " 3,\n", - " 11],\n", - " 'atypical': [False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False],\n", - " 'source_id': 'u0001'},\n", - " {'timestamps': [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " 'labels': [9,\n", - " 0,\n", - " 10,\n", - " 0,\n", - " 0,\n", - " 9,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 9,\n", - " 0,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 11,\n", - " 3,\n", - " 7,\n", - " 3,\n", - " 3,\n", - " 11],\n", - " 'atypical': [False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False],\n", - " 'source_id': 'u0001'},\n", - " {'timestamps': [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " 'labels': [9,\n", - " 0,\n", - " 10,\n", - " 0,\n", - " 0,\n", - " 9,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 9,\n", - " 0,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 11,\n", - " 3,\n", - " 7,\n", - " 3,\n", - " 3,\n", - " 11],\n", - " 'atypical': [False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False],\n", - " 'source_id': 'u0001'},\n", - " {'timestamps': [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " 'labels': [9,\n", - " 0,\n", - " 10,\n", - " 0,\n", - " 0,\n", - " 9,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 10,\n", - " 10,\n", - " 9,\n", - " 9,\n", - " 0,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 1,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 7,\n", - " 6,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 11,\n", - " 8,\n", - " 8,\n", - " 8,\n", - " 3,\n", - " 11,\n", - " 3,\n", - " 7,\n", - " 3,\n", - " 3,\n", - " 11],\n", - " 'atypical': [False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " True,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False,\n", - " False],\n", - " 'source_id': 'u0001'}]},\n", - " 'inputs': {'experiment': 'BlackSheep',\n", - " 'feature': 'BlackSheep',\n", - " 'dataType': 'waveform',\n", - " 'UUID': ['u0001',\n", - " 'u0001',\n", - " 'u0001',\n", - " 'u0001',\n", - " 'u0001',\n", - " 'u0001',\n", - " 'u0001',\n", - " 'u0001',\n", - " 'u0001',\n", - " 'u0004',\n", - " 'u0002',\n", - " 'u0003',\n", - " 'u0001'],\n", - " 'black_sheep': True,\n", - " 'data-commit': '',\n", - " 'force_create_model': True,\n", - " 'load_model': '',\n", - " 'save': False,\n", - " 'complex': False,\n", - " 'preprocessor_functions': ['downselect'],\n", - " 'preproc_params': {'MINIMUM_REQUIRED_ROWS': 20,\n", - " 'DFT_FREQ_RESOLUTION': 0.2,\n", - " 'CORRELATION_THRESHOLD': 0.5,\n", - " 'DOWNSELECTION_BAND_WIDTH': 50,\n", - " 'window_func': 'hanning'},\n", - " 'timestamps': [[1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " [1570186860,\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " [1570186860,\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " [1570186860,\n", - " 1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060],\n", - " [1570273260,\n", - " 1570359660,\n", - " 1570446060,\n", - " 1570532460,\n", - " 1570618860,\n", - " 1570705260,\n", - " 1570791660,\n", - " 1570878060,\n", - " 1570964460,\n", - " 1571050860,\n", - " 1571137260,\n", - " 1571223660,\n", - " 1571310060,\n", - " 1571396460,\n", - " 1571482860,\n", - " 1571569260,\n", - " 1571655660,\n", - " 1571742060,\n", - " 1571828460,\n", - " 1571914860,\n", - " 1572001260,\n", - " 1572087660,\n", - " 1572177660,\n", - " 1572264060,\n", - " 1572350460,\n", - " 1572436860,\n", - " 1572523260,\n", - " 1572609660,\n", - " 1572696060,\n", - " 1572782460,\n", - " 1572868860,\n", - " 1572955260,\n", - " 1573041660,\n", - " 1573128060,\n", - " 1573214460,\n", - " 1573300860,\n", - " 1573387260,\n", - " 1573473660,\n", - " 1573560060,\n", - " 1573646460,\n", - " 1573732860,\n", - " 1573819260,\n", - " 1573905660,\n", - " 1573992060,\n", - " 1574078460,\n", - " 1574164860,\n", - " 1574251260,\n", - " 1574337660,\n", - " 1574424060]],\n", - " 'n_trials': 12,\n", - " 'algo_params': {'look_back': 1,\n", - " 'number_of_modes': [2, 12],\n", - " 'model_sparsity_factor': 0.11,\n", - " 'smoothening_factor': 1,\n", - " 'max_iterations': 20,\n", - " 'threshold': 0}},\n", - " 'error_info': '',\n", - " 'debug_info': ''}" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" } ], "source": [ @@ -4716,12 +450,10 @@ "POPULATION_SOURCES = [\"u0001\",\"u0001\",\"u0001\",\"u0001\",\"u0001\",\"u0001\",\"u0001\",\"u0001\",\"u0001\",\"u0004\",\"u0002\",\"u0003\",\"u0001\"]\n", "analysis_request = session.request_population_analysis(POPULATION_SOURCES, \"BlackSheep\", parameters={\"atypical_threshold\": 0.15})\n", "\n", - "# Generic part, same as above\n", + "# Generic part to request analysis, same as above\n", "print(f\"Waiting for {analysis_request}\")\n", "session.wait_for_analyses([analysis_request[\"request_id\"]])\n", - "raw_result = session.get_analysis_results(analysis_request[\"request_id\"])\n", - "raw_result\n", - " " + "raw_result = session.get_analysis_results(analysis_request[\"request_id\"])" ] }, { @@ -4739,70 +471,18 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "id": "departmental-letters", "metadata": { "ExecuteTime": { "end_time": "2021-03-18T10:00:53.012148Z", "start_time": "2021-03-18T10:00:52.486345Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "=== BlackSheep ===\n", - "request_id 023d673646aaa34407bc9cbcc4f078c8\n", - "\n", - "+----+----------+------------+\n", - "| | source | atypical |\n", - "|----+----------+------------|\n", - "| 0 | u0001 | True |\n", - "| 1 | u0001 | True |\n", - "| 2 | u0001 | True |\n", - "| 3 | u0001 | True |\n", - "| 4 | u0001 | True |\n", - "| 5 | u0001 | True |\n", - "| 6 | u0001 | True |\n", - "| 7 | u0001 | True |\n", - "| 8 | u0001 | True |\n", - "| 9 | u0004 | True |\n", - "| 10 | u0002 | True |\n", - "| 11 | u0003 | True |\n", - "| 12 | u0001 | True |\n", - "+----+----------+------------+\n", - "\n", - "+------------+-----+\n", - "| atypical | N |\n", - "|------------+-----|\n", - "| True | 13 |\n", - "+------------+-----+\n" - ] - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" }, - { - "data": { - "text/plain": [ - "''" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" + "pycharm": { + "is_executing": true } - ], + }, + "outputs": [], "source": [ "# Parse\n", "blacksheep_result = analysis_classes.parse_results(raw_result, \"Europe/Stockholm\", \"s\")\n", @@ -4817,7 +497,8 @@ "metadata": {}, "source": [ "### Serializing\n", - "Finally, we can save the object including the results to pickle. If no name is given it is saved under the name `\".pkl\"`." + "Finally, we can save the object including the results to pickle.\n", + "If no name is given it is saved under the name `\".pkl\"`." ] }, { @@ -4834,14 +515,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "Saving BlackSheep object to 023d673646aaa34407bc9cbcc4f078c8.pkl\n" + "Saving BlackSheep object to 9895be09684f27257096bd9d517a9680.pkl\n" ] }, { "data": { - "text/plain": [ - "'023d673646aaa34407bc9cbcc4f078c8.pkl'" - ] + "text/plain": "'9895be09684f27257096bd9d517a9680.pkl'" }, "execution_count": 13, "metadata": {}, @@ -4849,7 +528,7 @@ } ], "source": [ - "blacksheep_result.save_pkl()" + "blacksheep_result.save_pkl()\n" ] } ], @@ -4920,4 +599,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/docs/source/content/examples/6-analysis_visual.ipynb b/docs/source/content/examples/6-analysis_visual.ipynb index 7b34af74..9cef45d1 100644 --- a/docs/source/content/examples/6-analysis_visual.ipynb +++ b/docs/source/content/examples/6-analysis_visual.ipynb @@ -9,14 +9,14 @@ "\n", "This script describes the procedure to request an analysis to the Viking Analytics' MultiViz Analytics Engine (MVG) service.\n", "It shows how to query for results of single-asset or asset-population analyses.\n", - "In addition, it presents some examples of how to visualize the results available for the mode identification feature.\n", + "In addition, it presents some examples of how to visualize the results available for the [\"mode identification\"](../features/ModeId.md) feature.\n", "\n", "In this example, we will describe how to access and manipulate the analysis results directly.\n", "The [\"Analysis Classes\"](5-analysis_classes.ipynb) example provides a simplified and unified interface to access these results as a pandas dataframe, along with some basic visualization of the results.\n", "\n", - "## Preliminaries\n", + "### Preliminaries\n", "\n", - "This procedure describes all the steps to request an analysis, get analysis results and plot those results using the functions in `plotting`.\n", + "This procedure describes all the steps to request an analysis, get analysis results, and plot those results using the functions in `plotting`.\n", "Local visualizations functions to create the figures are imported from `plotting`. " ] }, @@ -49,10 +49,10 @@ } }, "source": [ - "Note that the `TOKEN` is used both for authorization and authentication.\n", - "Thus, each unique token represents a unique user and each user has their own unique database on the VA service.\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:**" + "**You need to insert your token received from Viking Analytics here:**\n", + "Just replace `\"os.environ['TEST_TOKEN']\"` by your token as a string." ] }, { @@ -81,7 +81,7 @@ "metadata": {}, "source": [ "Instantiate a session object with MVG library.\n", - "A session object basically caches the endpoint and the token, to simplify the calls to the MVG library." + "A session object basically catches the endpoint and the token, which is used to simplify the calls to the MVG library." ] }, { @@ -129,15 +129,6 @@ "name": "stdout", "output_type": "stream", "text": [ - "Source info retrieved:\n", - "{'source_id': '68517664205311ec876c00155d413801', 'meta': {'assetId': 'assetJ', 'measPoint': 'mloc01', 'location': 'cancun'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", - "\n", - "Source info retrieved:\n", - "{'source_id': 'a8c39ff6205311ec85fd00155d413801', 'meta': {'assetId': 'assetJ', 'measPoint': 'mloc01', 'location': 'cancun'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", - "\n", - "Source info retrieved:\n", - "{'source_id': 'dba0b67a205311ecbc5e00155d413801', 'meta': {'assetId': 'assetJ', 'measPoint': 'mloc01', 'location': 'cancun'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", - "\n", "Source info retrieved:\n", "{'source_id': 'u0001', 'meta': {'assetId': 'assetA', 'measPoint': 'mloc01', 'location': 'paris', 'updated': 'YES! I have been updated'}, 'properties': {'data_class': 'waveform', 'channels': ['acc']}}\n", "\n", @@ -289,7 +280,7 @@ { "data": { "text/plain": [ - "{'request_id': 'a1f7c778b0f2f6e3dc2321e766b9c3e0', 'request_status': 'queued'}" + "{'request_id': '5b5b56f88631f4f37df5a6c970fe9662', 'request_status': 'queued'}" ] }, "execution_count": 7, @@ -332,7 +323,7 @@ { "data": { "text/plain": [ - "{'request_id': '68dc4501640c972be4b9a9f69e7c5fed', 'request_status': 'queued'}" + "{'request_id': 'eada01781126076501677ff842633110', 'request_status': 'queued'}" ] }, "execution_count": 8, @@ -358,10 +349,14 @@ "\n", "We can query for the status of our requested analyses.\n", "The possible status are:\n", - "- Queued: The analysis has not started in the remote server and it is in the queue to begin.\n", - "- Ongoing: The analysis is been processed at this time.\n", - "- Failed: The analysis is complete and failed to produce a result.\n", - "- Successful: The analysis is complete and it produced a successful result." + "\n", + "* Queued: The analysis has not started in the remote server and it is in the queue to begin.\n", + "\n", + "* Ongoing: The analysis is been processed at this time.\n", + "\n", + "* Failed: The analysis is complete and failed to produce a result.\n", + "\n", + "* Successful: The analysis is complete and it produced a successful result." ] }, { @@ -424,7 +419,7 @@ { "data": { "text/plain": [ - "{'request_id': 'fec5c4423df3c9136eeae131d6eaebb6', 'request_status': 'queued'}" + "{'request_id': '7a668b2c2a6412711bdc468ef24de17e', 'request_status': 'queued'}" ] }, "execution_count": 10, @@ -455,7 +450,7 @@ { "data": { "text/plain": [ - "{'request_id': 'c5141fa6ce9b0bc15929edf637939954', 'request_status': 'queued'}" + "{'request_id': '146406538759c7be71259fe57a2ca44b', 'request_status': 'queued'}" ] }, "execution_count": 11, @@ -526,7 +521,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "id": "coordinated-invasion", "metadata": { "ExecuteTime": { @@ -542,18 +537,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "The KPI analysis of u0001 has request_id ['0f7b41f637ad4ff100f5d48fda039c9b', 'a1f7c778b0f2f6e3dc2321e766b9c3e0'].\n", - "The KPI analysis of u0005 has request_id ['fec5c4423df3c9136eeae131d6eaebb6'].\n", - "The ModeId analysis of u0001 has request_id ['e1a139e0e118ad412f0323ddffdf65a3', '7a9b9b15c680ccc78208f9a10191f29d', '68dc4501640c972be4b9a9f69e7c5fed'].\n", - "The ModeId analysis of u0005 has request_id ['c5141fa6ce9b0bc15929edf637939954'].\n" + "The KPI analysis of u0001 has request_id 5b5b56f88631f4f37df5a6c970fe9662.\n", + "The KPI analysis of u0005 has request_id 7a668b2c2a6412711bdc468ef24de17e.\n", + "The ModeId analysis of u0001 has request_id eada01781126076501677ff842633110.\n", + "The ModeId analysis of u0005 has request_id 146406538759c7be71259fe57a2ca44b.\n" ] } ], "source": [ - "REQUEST_IDS_RMS = [session.list_analyses(SOURCE_IDS[0], \"KPIDemo\"), session.list_analyses(SOURCE_IDS[1], \"KPIDemo\")]\n", + "REQUEST_IDS_RMS = [session.list_analyses(SOURCE_IDS[0], \"KPIDemo\")[-1], session.list_analyses(SOURCE_IDS[1], \"KPIDemo\")[-1]]\n", "print(f\"The KPI analysis of {SOURCE_IDS[0]} has request_id {REQUEST_IDS_RMS[0]}.\")\n", "print(f\"The KPI analysis of {SOURCE_IDS[1]} has request_id {REQUEST_IDS_RMS[1]}.\")\n", - "REQUEST_IDS_MODEID = [session.list_analyses(SOURCE_IDS[0], \"ModeId\"), session.list_analyses(SOURCE_IDS[1], \"ModeId\")]\n", + "REQUEST_IDS_MODEID = [session.list_analyses(SOURCE_IDS[0], \"ModeId\")[-1], session.list_analyses(SOURCE_IDS[1], \"ModeId\")[-1]]\n", "print(f\"The ModeId analysis of {SOURCE_IDS[0]} has request_id {REQUEST_IDS_MODEID[0]}.\")\n", "print(f\"The ModeId analysis of {SOURCE_IDS[1]} has request_id {REQUEST_IDS_MODEID[1]}.\")" ] @@ -576,7 +571,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "id": "naval-patrol", "metadata": { "ExecuteTime": { @@ -591,7 +586,7 @@ "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" ] }, - "execution_count": 14, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -614,13 +609,20 @@ "source": [ "Each dictionary contains seven key elements.\n", "These elements are:\n", - "- `\"status\"` indicates if the analysis was successful.\n", - "- `\"request_id\"` is the identifier of the requested analysis.\n", - "- `\"feature\"` is the name of the request feature.\n", - "- `\"results\"` includes the numeric results.\n", - "- `\"inputs\"` includes the input information for the request analysis.\n", - "- `\"error_info\"` includes the error information in case the analysis fails and it is empty if the analysis is successful.\n", - "- `\"debug_info\"` includes debugging (log) information related to the failed analysis.\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.\n" ] }, { @@ -632,16 +634,24 @@ } }, "source": [ - "The `\"results\"` of the \"KPIDemo\" feature is a list per channel defined in the source. Each channel is formed by eight lists.\n", + "The `\"results\"` of the \"KPIDemo\" feature is a list per channel defined in the source.\n", + "Each channel is formed by eight lists.\n", "These lists are:\n", - "- rms: rms value for each measurement.\n", - "- peak: peak value for each measurement.\n", - "- peak2peak: peak-to-peak value for each measurement.\n", - "- variance: variance value for each measurement.\n", - "- crest_factor: crest factor value for each measurement.\n", - "- utilization: boolean indicating whether the measurement was used for the rms calculation.\n", - "- dc_component: DC component value for each measurement.\n", - "- timestamps: epoch (in seconds for this example) of the measurements.\n", + "* rms: rms value for each measurement.\n", + "\n", + "* peak: peak value for each measurement.\n", + "\n", + "* peak2peak: peak-to-peak value for each measurement.\n", + "\n", + "* variance: variance value for each measurement.\n", + "\n", + "* crest_factor: crest factor value for each measurement.\n", + "\n", + "* utilization: boolean indicating whether the measurement was used for the rms calculation.\n", + "\n", + "* dc_component: DC component value for each measurement.\n", + "\n", + "* timestamps: epoch (in seconds for this example) of the measurements.\n", "\n", "\n", "These lists can be converted into a dataframe for ease of manipulation.\n", @@ -652,7 +662,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "id": "imposed-variety", "metadata": { "ExecuteTime": { @@ -699,6 +709,18 @@ " \n", " \n", " 0\n", + " 0.647086\n", + " 2.686563\n", + " 5.313293\n", + " 0.418720\n", + " 4.151786\n", + " 1\n", + " -0.140237\n", + " 1570186860\n", + " 2019-10-04 11:01:00\n", + " \n", + " \n", + " 1\n", " 0.647123\n", " 2.691750\n", " 5.367004\n", @@ -710,7 +732,7 @@ " 2019-10-05 11:01:00\n", " \n", " \n", - " 1\n", + " 2\n", " 0.646619\n", " 2.715251\n", " 5.414856\n", @@ -722,7 +744,7 @@ " 2019-10-06 11:01:00\n", " \n", " \n", - " 2\n", + " 3\n", " 0.646873\n", " 2.685147\n", " 5.351562\n", @@ -734,7 +756,7 @@ " 2019-10-07 11:01:00\n", " \n", " \n", - " 3\n", + " 4\n", " 0.646643\n", " 2.726605\n", " 5.395325\n", @@ -745,39 +767,27 @@ " 1570532460\n", " 2019-10-08 11:01:00\n", " \n", - " \n", - " 4\n", - " 0.646717\n", - " 2.697001\n", - " 5.310974\n", - " 0.418243\n", - " 4.170294\n", - " 1\n", - " -0.140055\n", - " 1570618860\n", - " 2019-10-09 11:01:00\n", - " \n", " \n", "\n", "" ], "text/plain": [ " rms peak peak2peak variance crest_factor utilization \\\n", - "0 0.647123 2.691750 5.367004 0.418769 4.159563 1 \n", - "1 0.646619 2.715251 5.414856 0.418116 4.199152 1 \n", - "2 0.646873 2.685147 5.351562 0.418445 4.150966 1 \n", - "3 0.646643 2.726605 5.395325 0.418147 4.216556 1 \n", - "4 0.646717 2.697001 5.310974 0.418243 4.170294 1 \n", + "0 0.647086 2.686563 5.313293 0.418720 4.151786 1 \n", + "1 0.647123 2.691750 5.367004 0.418769 4.159563 1 \n", + "2 0.646619 2.715251 5.414856 0.418116 4.199152 1 \n", + "3 0.646873 2.685147 5.351562 0.418445 4.150966 1 \n", + "4 0.646643 2.726605 5.395325 0.418147 4.216556 1 \n", "\n", " dc_component timestamps Date \n", - "0 -0.140420 1570273260 2019-10-05 11:01:00 \n", - "1 -0.140239 1570359660 2019-10-06 11:01:00 \n", - "2 -0.140347 1570446060 2019-10-07 11:01:00 \n", - "3 -0.140423 1570532460 2019-10-08 11:01:00 \n", - "4 -0.140055 1570618860 2019-10-09 11:01:00 " + "0 -0.140237 1570186860 2019-10-04 11:01:00 \n", + "1 -0.140420 1570273260 2019-10-05 11:01:00 \n", + "2 -0.140239 1570359660 2019-10-06 11:01:00 \n", + "3 -0.140347 1570446060 2019-10-07 11:01:00 \n", + "4 -0.140423 1570532460 2019-10-08 11:01:00 " ] }, - "execution_count": 15, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -798,16 +808,24 @@ } }, "source": [ - "The `\"results\"` of the \"ModeId\" feature are four lists and one dictionary:\n", - "- The first list is the measurement epoch in the same unit as the measurement was uploaded, which is seconds for this example.\n", - "- The second list corresponds to the mode label given to the timestamp.\n", - "- The third list is a boolean to indicate the uncertainty of label.\n", - "- The fourth list corresponds to the mode probability of each mode label.\n", + "The `\"results\"` of the \"ModeId\" feature are four lists and two dictionaries:\n", + "\n", + "* The first list is the measurement epoch in the same unit as the measurement was uploaded, which is seconds for this example.\n", "\n", - "The dictionary, called 'model_info', contains the \"Emerging modes\" results.\n", + "* The second list corresponds to the mode label given to the timestamp.\n", "\n", + "* The third list is a boolean to indicate the uncertainty of label.\n", + "\n", + "* The fourth list corresponds to the mode probability of each mode label.\n", + "\n", + "The dictionaries are called 'mode_info' and 'mode_probabilities'.\n", + "\n", + "The dictionary 'mode_info' contains the \"Emerging modes\" results.\n", "\"Emerging modes\" is an additional output of the analysis results that describes the first appearance of each one of the identified modes.\n", "\n", + "The dictionary 'mode_probabilities' contains a dictionary per each mode identified.\n", + "Each of these dictionaries contains the mode probabilities as it was identified for each mode.\n", + "\n", "We pass all the lists to a dataframe for ease of manipulation.\n", "Similarly to the RMS feature, we will show how to access the dictionary results information and convert it into a Pandas dataframe.\n", "Please check the [\"Analysis Classes\"](5-analysis_classes.ipynb) example for directly getting a results Pandas dataframe.\n", @@ -816,7 +834,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "id": "talented-characteristic", "metadata": { "ExecuteTime": { @@ -857,43 +875,43 @@ " \n", " \n", " 0\n", - " 1570273260\n", + " 1570186860\n", " 0\n", " False\n", - " 0.966994\n", - " 2019-10-05 11:01:00\n", + " 0.912743\n", + " 2019-10-04 11:01:00\n", " \n", " \n", " 1\n", - " 1570359660\n", + " 1570273260\n", " 0\n", " False\n", - " 0.931219\n", - " 2019-10-06 11:01:00\n", + " 0.972841\n", + " 2019-10-05 11:01:00\n", " \n", " \n", " 2\n", - " 1570446060\n", + " 1570359660\n", " 0\n", " False\n", - " 0.999575\n", - " 2019-10-07 11:01:00\n", + " 0.929741\n", + " 2019-10-06 11:01:00\n", " \n", " \n", " 3\n", - " 1570532460\n", + " 1570446060\n", " 0\n", " False\n", - " 0.979806\n", - " 2019-10-08 11:01:00\n", + " 0.999620\n", + " 2019-10-07 11:01:00\n", " \n", " \n", " 4\n", - " 1570618860\n", + " 1570532460\n", " 0\n", " False\n", - " 0.885940\n", - " 2019-10-09 11:01:00\n", + " 0.978940\n", + " 2019-10-08 11:01:00\n", " \n", " \n", "\n", @@ -901,14 +919,14 @@ ], "text/plain": [ " timestamps labels uncertain mode_probability Date\n", - "0 1570273260 0 False 0.966994 2019-10-05 11:01:00\n", - "1 1570359660 0 False 0.931219 2019-10-06 11:01:00\n", - "2 1570446060 0 False 0.999575 2019-10-07 11:01:00\n", - "3 1570532460 0 False 0.979806 2019-10-08 11:01:00\n", - "4 1570618860 0 False 0.885940 2019-10-09 11:01:00" + "0 1570186860 0 False 0.912743 2019-10-04 11:01:00\n", + "1 1570273260 0 False 0.972841 2019-10-05 11:01:00\n", + "2 1570359660 0 False 0.929741 2019-10-06 11:01:00\n", + "3 1570446060 0 False 0.999620 2019-10-07 11:01:00\n", + "4 1570532460 0 False 0.978940 2019-10-08 11:01:00" ] }, - "execution_count": 16, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -926,7 +944,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "id": "proud-chuck", "metadata": { "pycharm": { @@ -966,17 +984,17 @@ " \n", " 0\n", " 0\n", - " 1570273260\n", + " 1570186860\n", " 1570446060\n", - " 0.999575\n", - " 2019-10-05 11:01:00\n", + " 0.999620\n", + " 2019-10-04 11:01:00\n", " \n", " \n", " 1\n", " 1\n", " 1571655660\n", " 1571742060\n", - " 0.996703\n", + " 0.997126\n", " 2019-10-21 11:01:00\n", " \n", " \n", @@ -984,7 +1002,7 @@ " 2\n", " 1572350460\n", " 1573041660\n", - " 0.999899\n", + " 0.999948\n", " 2019-10-29 12:01:00\n", " \n", " \n", @@ -993,12 +1011,12 @@ ], "text/plain": [ " modes emerging_time max_prob_time max_probability emerging_Date\n", - "0 0 1570273260 1570446060 0.999575 2019-10-05 11:01:00\n", - "1 1 1571655660 1571742060 0.996703 2019-10-21 11:01:00\n", - "2 2 1572350460 1573041660 0.999899 2019-10-29 12:01:00" + "0 0 1570186860 1570446060 0.999620 2019-10-04 11:01:00\n", + "1 1 1571655660 1571742060 0.997126 2019-10-21 11:01:00\n", + "2 2 1572350460 1573041660 0.999948 2019-10-29 12:01:00" ] }, - "execution_count": 17, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -1024,7 +1042,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "id": "defined-utilization", "metadata": { "ExecuteTime": { @@ -1074,6 +1092,21 @@ " \n", " \n", " 0\n", + " 0.647086\n", + " 2.686563\n", + " 5.313293\n", + " 0.418720\n", + " 4.151786\n", + " 1\n", + " -0.140237\n", + " 1570186860\n", + " 2019-10-04 11:01:00\n", + " 0\n", + " False\n", + " 0.912743\n", + " \n", + " \n", + " 1\n", " 0.647123\n", " 2.691750\n", " 5.367004\n", @@ -1085,10 +1118,10 @@ " 2019-10-05 11:01:00\n", " 0\n", " False\n", - " 0.966994\n", + " 0.972841\n", " \n", " \n", - " 1\n", + " 2\n", " 0.646619\n", " 2.715251\n", " 5.414856\n", @@ -1100,10 +1133,10 @@ " 2019-10-06 11:01:00\n", " 0\n", " False\n", - " 0.931219\n", + " 0.929741\n", " \n", " \n", - " 2\n", + " 3\n", " 0.646873\n", " 2.685147\n", " 5.351562\n", @@ -1115,10 +1148,10 @@ " 2019-10-07 11:01:00\n", " 0\n", " False\n", - " 0.999575\n", + " 0.999620\n", " \n", " \n", - " 3\n", + " 4\n", " 0.646643\n", " 2.726605\n", " 5.395325\n", @@ -1130,22 +1163,7 @@ " 2019-10-08 11:01:00\n", " 0\n", " False\n", - " 0.979806\n", - " \n", - " \n", - " 4\n", - " 0.646717\n", - " 2.697001\n", - " 5.310974\n", - " 0.418243\n", - " 4.170294\n", - " 1\n", - " -0.140055\n", - " 1570618860\n", - " 2019-10-09 11:01:00\n", - " 0\n", - " False\n", - " 0.885940\n", + " 0.978940\n", " \n", " \n", "\n", @@ -1153,28 +1171,28 @@ ], "text/plain": [ " rms peak peak2peak variance crest_factor utilization \\\n", - "0 0.647123 2.691750 5.367004 0.418769 4.159563 1 \n", - "1 0.646619 2.715251 5.414856 0.418116 4.199152 1 \n", - "2 0.646873 2.685147 5.351562 0.418445 4.150966 1 \n", - "3 0.646643 2.726605 5.395325 0.418147 4.216556 1 \n", - "4 0.646717 2.697001 5.310974 0.418243 4.170294 1 \n", + "0 0.647086 2.686563 5.313293 0.418720 4.151786 1 \n", + "1 0.647123 2.691750 5.367004 0.418769 4.159563 1 \n", + "2 0.646619 2.715251 5.414856 0.418116 4.199152 1 \n", + "3 0.646873 2.685147 5.351562 0.418445 4.150966 1 \n", + "4 0.646643 2.726605 5.395325 0.418147 4.216556 1 \n", "\n", " dc_component timestamps Date labels uncertain \\\n", - "0 -0.140420 1570273260 2019-10-05 11:01:00 0 False \n", - "1 -0.140239 1570359660 2019-10-06 11:01:00 0 False \n", - "2 -0.140347 1570446060 2019-10-07 11:01:00 0 False \n", - "3 -0.140423 1570532460 2019-10-08 11:01:00 0 False \n", - "4 -0.140055 1570618860 2019-10-09 11:01:00 0 False \n", + "0 -0.140237 1570186860 2019-10-04 11:01:00 0 False \n", + "1 -0.140420 1570273260 2019-10-05 11:01:00 0 False \n", + "2 -0.140239 1570359660 2019-10-06 11:01:00 0 False \n", + "3 -0.140347 1570446060 2019-10-07 11:01:00 0 False \n", + "4 -0.140423 1570532460 2019-10-08 11:01:00 0 False \n", "\n", " mode_probability \n", - "0 0.966994 \n", - "1 0.931219 \n", - "2 0.999575 \n", - "3 0.979806 \n", - "4 0.885940 " + "0 0.912743 \n", + "1 0.972841 \n", + "2 0.929741 \n", + "3 0.999620 \n", + "4 0.978940 " ] }, - "execution_count": 18, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -1198,7 +1216,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "id": "grave-accounting", "metadata": { "ExecuteTime": { @@ -1348,7 +1366,7 @@ "4 0.990411 " ] }, - "execution_count": 19, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -1380,7 +1398,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "id": "first-influence", "metadata": { "ExecuteTime": { @@ -1389,9 +1407,17 @@ } }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages\\numpy\\core\\_asarray.py:102: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n", + " return array(a, dtype, copy=False, order=order)\n" + ] + }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1416,7 +1442,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "id": "israeli-sympathy", "metadata": { "ExecuteTime": { @@ -1426,9 +1452,19 @@ "scrolled": true }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages\\numpy\\core\\_asarray.py:102: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n", + " return array(a, dtype, copy=False, order=order)\n", + "c:\\users\\sergio\\appdata\\local\\programs\\python\\python38\\lib\\site-packages\\numpy\\core\\_asarray.py:102: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n", + " return array(a, dtype, copy=False, order=order)\n" + ] + }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAGTCAYAAAB9D4auAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO3de5RlZX3n//fHbtoLoqBoK9ABVIxy0yQdXI6XFCL54W0wxhVpL0El6UUmYEwyMXhL1MgkLjKOBnE6PdIjRIVxAmqrHZEYCuKKJg2EW4M4nRak0nEQRaFaBuz2+/vj7DLHQyHVXXXO3nXq/VqrFmc/+/atB6hPPc/etXeqCkmSuuYhbRcgSdJsDChJUicZUJKkTjKgJEmdZEBJkjrJgJIkdZIBJS2QJB9N8t4FPN57k9yR5FsLdUxpMTGgNHaS3JLkniTTSe5M8vkkq9quq1+SSvKUn7J+FfD7wOFV9YQR1fTqJLcm2ZHk00ke07fuoUk2JLkrybeS/N7Avs9MclWSHzT/fGbfuiOTXNKErX94qTkzoDSuXlZVjwSeCPxf4OyW69ldBwPfqarbd3fHJMv3YJ8jgL8EXgesBH4AfLhvk3cBhzV1HQu8JckJzb4rgM8AHwP2A84DPtO0A/wQ+CRwyu7WpaXNgNJYq6r/B/w1cPhMW5JHJzk/ybebEcM7kjykWfffk/x137bvS/Kl9EwkmUrytmY0cEuS1zzQuZP8ZpKtSb6bZGOSA5r2K5pNrm1Gea8a2O+FwKXAAc36jzbt/zHJliTfSzKZ5Ol9+9yS5A+TXAfsGAypJIc0o7blfW2TSX6jWXwN8NmquqKqpoF3Aq9Isk+z/teBP6mqO6vqJuB/AK9v1k0Ay4EPVNW9VfUXQIAXNP8Obq6qc4EtD9RX0mwMKI21JI8AXgV8ta/5bODRwJOAX6L3w/cNzbrfB45O8vokz6P3W//J9e/PBHsCsD9wIHAysD7Jz85y3hcAfwr8Gr1R3K3AhQBV9fxms2dU1SOr6n/171tVfwu8CNjerH99kqcCFwBvBh4HbAI+2zdKAVgDvATYt6p27kY3ARwBXNtXw78A9wFPTbIfcED/+ubzEX37Xlc/+dy06/rWS3vEgNK4+nSS7wF3AccDZwEkWUYvsN5aVXdX1S3Af6U3tUVV/QB4LfB+elNWp1fV1MCx39mMFC4HPk8vhAa9BthQVVdX1b3AW4FnJzlkD7+fVwGfr6pLq+qHwJ8DDwf+Q982f1FVt1XVPXtw/EcC3x9o+z6wT7OOgfUz6x5sX2mPGVAaVy+vqn2BhwKnAZcnmRn9rKA3oplxK70REQBV9U/ANnrTVJ8cOO6dVbVjYN8DZjn/Af3naKbNvtN/nt00eLwfAbcNHO+2PTw2wDTwqIG2RwF3N+sYWD+z7sH2lfaYAaWxVlW7qupiYBfwXOAOehftD+7b7GeAf51ZSPLb9IJtO/CWgUPul2TvgX23z3Lq7f3naPZ5bP95dtPg8QKsGjjeT7tDbiZUH9HX1n934BbgGX3HfxK9Pvh6Vd0J/Fv/+ubzlr59j25qmnE0XnPSPBlQGmvNzQ0n0ru77Kaq2kVvVHRmkn2SHAz8Hr3pPJprPe+lN833Onp3qz1z4LDvTrKiuUb1UuB/z3LqTwBvaG6/fijwX4B/bKYUoXdn4ZN241v5JPCSJMcl2YvetbJ7gX+Yy85V9W16YfbaJMuSvBF4ct8mHwdeluR5TZi+B7i4qmZGQecD70iyX5KnAb8JfLRZN0nvF4A3Nbejn9a0/x38+N/Bw+iNXEnysKZPpJ/KgNK4+mySaXrXoM6kd6PDzG/0p9MbUWwDvkwvTDY0d7h9DHhfVV1bVf8HeBvwV30/UL8F3ElvRPNx4NSq+trgyavqS/TuhLuI3ujjycBJfZu8CzivuSNvtmtYg8e7mV5onk1vFPgyerfS3zfH/oBeqPwBvanGI+gLt6ZvTm2+p9vpXT/6T337/jHwL/SmGS8HzqqqLzT73ge8nN7NJt8D3khvinWmtoOBe/j3EdU9wM27UbeWqPjCQmlukkwAH6uqg9quRVoKHEFJkjrJgJIkdZJTfJKkTnIEJUnqJANKktRJu/3U4y7bf//965BDDmm7jN2yY8cO9t577wffUAvC/h4t+3u0Fmt/X3XVVXdU1eMG24caUM3j+D8ILAM+UlV/Nss2E8AHgL2AO6rql5r2W+g9KmUXsLOqVj/Y+Q455BCuvPLKBat/FCYnJ5mYmGi7jCXD/h4t+3u0Fmt/J7l1tvahBVTzUM5z6D2ocwrYnGRjVd3Yt82+9N45c0JVfTPJ4wcOc2xV3TGsGiVJ3TXMa1DHAFuralvzF+UXAicObPNqeo9T+SbAnrycTZI0noYZUAfyk09XnuL+T3J+Kr2Hb042r4n+9b51BXyxaV87xDolSR00zGtQmaVt8I+ulgO/ABxH7902X0ny1ar6OvCcqtreTPtdmuRrVXXFwP404bUWYOXKlUxOTi7k9zB009PTi67mxcz+Hi37e7TGrb+HGVBT9F4HMOMg7v9agil6N0bsoPea6ivoPcb/61W1HXrTfkk+RW/K8H4BVVXrgfUAq1evrsV2gXCxXtRcrOzv0bK/R2vc+nuYAbUZOCzJofQe838SvWtO/T4DfKh5ivQK4FnAf2se9/+Qqrq7+fzL9B7/37qjzjtq4Q963sIf8vqTr1/4g0rSCA0toKpqZ/NemEvo3Wa+oaq2JDm1Wb+uqm5K8gXgOuBH9G5Fv6F5WdqnmvefLQc+MfNo/7bN9Qf/T767beH4aCpJS8VQ/w6qqjYBmwba1g0snwWcNdC2jZ98e+eiM9cgGbchuSQtFB91JEnqJANKktRJBpQkqZMMKElSJxlQkqROMqAkSZ1kQEmSOsmAkiR1kgElSeokA0qS1EkGlCSpkwwoSVInGVCSpE4a6tPMJS0eQ3nXGfi+M+0xA0oSMJwf+r5ORvPhFJ8kqZMMKElSJxlQkqROMqAkSZ1kQEmSOsmAkiR1kgElSeokA0qS1EkGlCSpkwwoSVInGVCSpE4yoCRJnWRASZI6yYCSJHWSASVJ6iQDSpLUSQaUJKmTDChJUicNNaCSnJDk5iRbk5zxANtMJLkmyZYkl+/OvpKk8bV8WAdOsgw4BzgemAI2J9lYVTf2bbMv8GHghKr6ZpLHz3VfSdJ4G+YI6hhga1Vtq6r7gAuBEwe2eTVwcVV9E6Cqbt+NfSVJY2xoIyjgQOC2vuUp4FkD2zwV2CvJJLAP8MGqOn+O+wKQZC2wFmDlypVMTk4uRO0jMz09vehqXszs79Gyv0dr3Pp7mAGVWdpqlvP/AnAc8HDgK0m+Osd9e41V64H1AKtXr66JiYk9rbcVk5OTLLaaFzP7e7Ts79Eat/4eZkBNAav6lg8Cts+yzR1VtQPYkeQK4Blz3FeSNMaGeQ1qM3BYkkOTrABOAjYObPMZ4HlJlid5BL1pvJvmuK8kaYwNbQRVVTuTnAZcAiwDNlTVliSnNuvXVdVNSb4AXAf8CPhIVd0AMNu+w6pVktQ9w5zio6o2AZsG2tYNLJ8FnDWXfSVJS4dPkpAkdZIBJUnqJANKktRJBpQkqZMMKElSJxlQkqROMqAkSZ1kQEmSOsmAkiR1kgElSeokA0qS1EkGlCSpkwwoSVInGVCSpE4yoCRJnTSngEry5CQPbT5PJHlTkn2HW5okaSmb6wjqImBXkqcA5wKHAp8YWlWSpCVvrgH1o6raCfwK8IGq+l3gicMrS5K01M01oH6YZA1wMvC5pm2v4ZQkSdLcA+oNwLOBM6vqG0kOBT42vLIkSUvd8rlsVFU3Am/qW/4G8GfDKkqSpLnexffSJP+c5LtJ7kpyd5K7hl2cJGnpmtMICvgA8Arg+qqqIdYjSRIw92tQtwE3GE6SpFGZ6wjqLcCmJJcD9840VtX7h1KVJGnJm2tAnQlMAw8DVgyvHEmSeuYaUI+pql8eaiWSJPWZ6zWov01iQEmSRuZBAypJ6F2D+kKSe7zNXJI0Cg86xVdVleSaqvr5URQkSRLMfYrvK0l+caiVSJLUZ643SRwLnJrkFmAHEHqDq6OHVZgkaWmba0C9aE8OnuQE4IPAMuAjVfVnA+sngM8A32iaLq6q9zTrbgHuBnYBO6tq9Z7UIElanOb6sNhbd/fASZYB5wDHA1PA5iQbmwfP9vv7qnrpAxzm2Kq6Y3fPLUla/OZ6DWpPHANsraptVXUfcCFw4hDPJ0kaI8MMqAPpPcNvxlTTNujZSa5N8jdJjuhrL+CLSa5KsnaIdUqSOmiu16D2RGZpG3zY7NXAwVU1neTFwKeBw5p1z6mq7UkeD1ya5GtVdcX9TtILr7UAK1euZHJycsG+gVGYnp5edDUvZvb3aNnfozVu/T3MgJoCVvUtHwRs79+gqu7q+7wpyYeT7F9Vd1TV9qb99iSfojdleL+Aqqr1wHqA1atX18TExIJ/I8M0OTnJYqt5MbO/R8v+Hq1x6+9hTvFtBg5LcmiSFcBJwMb+DZI8oXlSBUmOaer5TpK9k+zTtO8N/DJwwxBrlSR1zNBGUFW1M8lpwCX0bjPfUFVbkpzarF8HvBL4rSQ7gXuAk5onV6wEPtVk13LgE1X1hWHVKknqnmFO8VFVm4BNA23r+j5/CPjQLPttA54xzNokSd02zCk+SZL2mAElSeokA0qS1EkGlCSpkwwoSVInGVCSpE4yoCRJnWRASZI6yYCSJHWSASVJ6iQDSpLUSQaUJKmTDChJUicZUJKkTjKgJEmdZEBJkjrJgJIkdZIBJUnqJANKktRJBpQkqZMMKElSJxlQkqROMqAkSZ1kQEmSOsmAkiR1kgElSeokA0qS1EkGlCSpkwwoSVInGVCSpE4yoCRJnWRASZI6yYCSJHXSUAMqyQlJbk6yNckZs6yfSPL9JNc0X380130lSeNt+bAOnGQZcA5wPDAFbE6ysapuHNj076vqpXu4ryRpTA1zBHUMsLWqtlXVfcCFwIkj2FeSNAaGNoICDgRu61ueAp41y3bPTnItsB34z1W1ZTf2JclaYC3AypUrmZycnH/lIzQ9Pb3oal7M7O/Rsr9Ha9z6e5gBlVnaamD5auDgqppO8mLg08Bhc9y311i1HlgPsHr16pqYmNjjgtswOTnJYqt5MbO/R8v+Hq1x6+9hTvFNAav6lg+iN0r6saq6q6qmm8+bgL2S7D+XfSVJ422YAbUZOCzJoUlWACcBG/s3SPKEJGk+H9PU85257CtJGm9Dm+Krqp1JTgMuAZYBG6pqS5JTm/XrgFcCv5VkJ3APcFJVFTDrvsOqVZLUPcO8BjUzbbdpoG1d3+cPAR+a676SpKXDJ0lIkjrJgJIkdZIBJUnqJANKktRJBpQkqZMMKElSJxlQkqROGurfQUnzddR5Ry38Qc9b+ENef/L1C39QaYkzoNRpC/2Df9wepimNM6f4JEmdZEBJkjrJgJIkdZIBJUnqJANKktRJ6b1+aTwk+TZwa9t17Kb9gTvaLmIJsb9Hy/4ercXa3wdX1eMGG8cqoBajJFdW1eq261gq7O/Rsr9Ha9z62yk+SVInGVCSpE4yoNq3vu0Clhj7e7Ts79Eaq/72GpQkqZMcQUmSOsmAalGSE5LcnGRrkjParmecJdmQ5PYkN7Rdy1KQZFWSy5LclGRLkt9pu6ZxleRhSf4pybVNX7+77ZoWilN8LUmyDPg6cDwwBWwG1lTVja0WNqaSPB+YBs6vqiPbrmfcJXki8MSqujrJPsBVwMv973vhJQmwd1VNJ9kL+DLwO1X11ZZLmzdHUO05BthaVduq6j7gQuDElmsaW1V1BfDdtutYKqrq36rq6ubz3cBNwIHtVjWeqme6Wdyr+RqLkYcB1Z4Dgdv6lqfwf2CNoSSHAD8H/GO7lYyvJMuSXAPcDlxaVWPR1wZUezJL21j81iPNSPJI4CLgzVV1V9v1jKuq2lVVzwQOAo5JMhbT2AZUe6aAVX3LBwHbW6pFWnDN9ZCLgI9X1cVt17MUVNX3gEnghJZLWRAGVHs2A4clOTTJCuAkYGPLNUkLorlwfy5wU1W9v+16xlmSxyXZt/n8cOCFwNfarWphGFAtqaqdwGnAJfQuIH+yqra0W9X4SnIB8BXgZ5NMJTml7ZrG3HOA1wEvSHJN8/XitosaU08ELktyHb1ffC+tqs+1XNOC8DZzSVInOYKSJHWSASVJ6iQDSpLUSQaUJKmTDChJUicZUJKkTjKgJEmdZEBJkjrJgJIkdZIBJUnqJANKktRJBpQkqZMMKGmBJPlokvcu4PHem+SOJN9aqGNKi4kBpbGT5JYk9ySZTnJnks8nWfXge45OkkrylJ+yfhXw+8DhVfWEEdX06iS3JtmR5NNJHtO37qFJNiS5K8m3kvzewL7PTHJVkh80/3xm37rXJ9nV/PuY+ZoYxfekxc2A0rh6WVU9kt67cv4vcHbL9eyug4HvVNXtu7tjkuV7sM8RwF/Se4fTSuAHwIf7NnkXcFhT17HAW5Kc0Oy7AvgM8DFgP+A84DNN+4yvVNUj+74md7dGLT0GlMZaVf0/4K+Bw2fakjw6yflJvt2MGN6R5CHNuv+e5K/7tn1fki+lZ6J52eHbmqm3W5K85oHOneQ3k2xN8t0kG5Mc0LRf0WxybTOaeNXAfi8ELgUOaNZ/tGn/j0m2JPlekskkT+/b55Ykf9i8tG7HYEglOaQZtS3va5tM8hvN4muAz1bVFVU1DbwTeEWSfZr1vw78SVXdWVU3Af8DeH2zbgJYDnygqu6tqr8AArzggfpGmgsDSmMtySOAVwFf7Ws+G3g08CTgl+j98H1Ds+73gaObaannAacAJ9e/v9nzCcD+wIHAycD6JD87y3lfAPwp8Gv0RnG3AhcCVNXzm82e0Ywm/lf/vlX1t8CLgO3N+tcneSpwAfBm4HHAJuCzA6OUNcBLgH2bNzbvjiOAa/tq+BfgPuCpSfYDDuhf33w+om/f6+on3356Xd96gJ9rQv3rSd65J6M8LT0GlMbVp5N8D7gLOB44CyDJMnqB9daquruqbgH+K72pLarqB8BrgffTm7I6vaqmBo79zmakcDnweXohNOg1wIaqurqq7gXeCjw7ySF7+P28Cvh8VV1aVT8E/hx4OPAf+rb5i6q6raru2YPjPxL4/kDb94F9mnUMrJ9Z92D7AlwBHAk8HvhVekH6B3tQo5YYA0rj6uVVtS/wUOA04PIkM6OfFfRGNDNupTciAqCq/gnYRm+a6pMDx72zqnYM7HvALOc/oP8czbTZd/rPs5sGj/cj4LaB4922h8cGmAYeNdD2KODuZh0D62fWPdi+VNW2qvpGVf2oqq4H3gO8ch61aokwoDTWqmpXVV0M7AKeC9wB/JDexf4ZPwP868xCkt+mF2zbgbcMHHK/JHsP7Lt9llNv7z9Hs89j+8+zmwaPF2DVwPFqcKc+M6H6iL62/rsDtwDP6Dv+k+j1wder6k7g3/rXN5+39O17dFPTjKP71g8qeuEv/VQGlMZac3PDifTuLrupqnbRGxWdmWSfJAcDv0dvOo/mWs976U3zvY7e3WrPHDjsu5OsaK5RvRT437Oc+hPAG5rbrx8K/BfgH5spRejdWfik3fhWPgm8JMlxSfaid63sXuAf5rJzVX2bXpi9NsmyJG8Enty3yceBlyV5XhOm7wEurqqZUdL5wDuS7JfkacBvAh9t1k3S+wXgTc3t6Kc17X8HkORFSVY2n59G7waMz+zG964lyoDSuPpskml616DOpHejw8xv9KfTG1FsA75ML0w2NBfuPwa8r6qurar/A7wN+KsmZAC+BdxJb0TzceDUqvra4Mmr6kv0fhBfRG/08WTgpL5N3gWc19yRN9s1rMHj3UwvNM+mNwp8Gb1b6e+bY39AL1T+gN5U4xH0hVvTN6c239Pt9K4f/ae+ff8Y+Bd604yXA2dV1Reafe8DXk7vZpPvAW+kN8U6U9txwHVJdtC7ueNieoEt/VT5yRtvJD2Q5o9LP1ZVB7Vdi7QUOIKSJHWSASVJ6iSn+CRJneQISpLUSQaUJKmTxup5WPvvv38dcsghbZexW3bs2MHee+/94BtqQdjfo2V/j9Zi7e+rrrrqjqp63GD7WAXUIYccwpVXXtl2GbtlcnKSiYmJtstYMuzv0bK/R2ux9neSW2drd4pPktRJBpQkqZMMKElSJxlQkqROMqAkSZ00VnfxjcJR5x218Ac9b+EPef3J1y/8QSVphAyo3bTQP/gX622hkjRsTvFJkjrJgJIkdZJTfJLUgqFcz4YFv6bd5vVsA0qSWjCMH/zjdk3bKT5JUie1ElBJTkhyc5KtSc54gG0mklyTZEuSy0ddoySpXSOf4kuyDDgHOB6YAjYn2VhVN/Ztsy/wYeCEqvpmksePuk5JUrvaGEEdA2ytqm1VdR9wIXDiwDavBi6uqm8CVNXtI65RktSyNm6SOBC4rW95CnjWwDZPBfZKMgnsA3ywqs6f7WBJ1gJrAVauXMnk5ORC1ztU09PTi67mxcz+Hi37e7TGrb/bCKjM0lYDy8uBXwCOAx4OfCXJV6vq6/fbsWo9sB5g9erVtdjuYBm3u266zv4eLft7tMatv9sIqClgVd/yQcD2Wba5o6p2ADuSXAE8A7hfQEmSxlMb16A2A4clOTTJCuAkYOPANp8BnpdkeZJH0JsCvGnEdUqSWjTyEVRV7UxyGnAJsAzYUFVbkpzarF9XVTcl+QJwHfAj4CNVdcOoa5UktaeVJ0lU1SZg00DbuoHls4CzRlmXJKk7fJKEJKmTDChJUicZUJKkTjKgJEmdZEBJkjrJgJIkdZIBJUnqJANKktRJBpQkqZMMKElSJxlQkqROMqAkSZ1kQEmSOqmVgEpyQpKbk2xNcsYs6yeSfD/JNc3XH7VRpySpPSN/3UaSZcA5wPH03py7OcnGqrpxYNO/r6qXjro+SVI3tDGCOgbYWlXbquo+4ELgxBbqkCR1WBsBdSBwW9/yVNM26NlJrk3yN0mOGE1pkqSuaOONupmlrQaWrwYOrqrpJC8GPg0cNuvBkrXAWoCVK1cyOTm5gKUO3/T09KKreTGzv0fL/h6tcevvNgJqCljVt3wQsL1/g6q6q+/zpiQfTrJ/Vd0xeLCqWg+sB1i9enVNTEwMpehhmZycZLHVvJjZ36Nlf4/WuPV3G1N8m4HDkhyaZAVwErCxf4MkT0iS5vMx9Or8zsgrlSS1ZuQjqKrameQ04BJgGbChqrYkObVZvw54JfBbSXYC9wAnVdXgNKCWgKPOO2rhD3rewh/y+pOvX/iDSktcG1N8VNUmYNNA27q+zx8CPjTqutQ9C/2Df9ymQKRx5pMkJEmdZEBJkjrJgJIkdZIBJUnqJANKktRJBpQkqZMMKElSJxlQkqROMqAkSZ1kQEmSOsmAkiR1kgElSeokA0qS1EkGlCSpk1oJqCQnJLk5ydYkZ/yU7X4xya4krxxlfZKk9o08oJIsA84BXgQcDqxJcvgDbPc+ei82lCQtMW2MoI4BtlbVtqq6D7gQOHGW7U4HLgJuH2VxkqRuaCOgDgRu61ueatp+LMmBwK8A65AkLUltvPI9s7TVwPIHgD+sql3JbJv3HSxZC6wFWLlyJZOTkwtR48hMT08vupoXM/t7tOzv0Rq3/m4joKaAVX3LBwHbB7ZZDVzYhNP+wIuT7KyqTw8erKrWA+sBVq9eXRMTE8OoeWgmJydZbDUvZvb3aNnfozVu/d1GQG0GDktyKPCvwEnAq/s3qKpDZz4n+SjwudnCSZI0vkYeUFW1M8lp9O7OWwZsqKotSU5t1nvdSZI0v4BK8mRgqqruTTIBHA2cX1Xf+2n7VdUmYNNA26zBVFWvn0+NkqTFab538V0E7EryFOBc4FDgE/OuSpK05M03oH5UVTvp3RL+gar6XeCJ8y9LkrTUzTegfphkDXAy8Lmmba95HlOSpHkH1BuAZwNnVtU3mjvzPjb/siRJS928bpKoqhuBN/UtfwP4s/kWJUnSvEZQSV6a5J+TfDfJXUnuTnLXQhUnSVq65vt3UB8AXgFcX1WDjyuSJGmPzfca1G3ADYaTJGmhzXcE9RZgU5LLgXtnGqvq/fM8riRpiZtvQJ0JTAMPA1bMvxxJknrmG1CPqapfXpBKJEnqM99rUH+bxICSJC24PQ6o9F7W9BbgC0nu8TZzSdJC2uMpvqqqJNdU1c8vZEGSJMH8p/i+kuQXd3enJCckuTnJ1iRnzLL+xCTXJbkmyZVJnjvPOiVJi8x8b5I4Fjg1yS3ADiD0BldHP9AOSZYB5wDH03v9++YkG5vHJs34ErCxGaUdDXwSeNo8a5UkLSLzDagX7cE+xwBbq2obQJILgROBHwdUVU33bb834B8CS9ISM9+Hxd66B7sdSO8JFDOmgGcNbpTkV4A/BR4PvOSBDpZkLbAWYOXKlUxOTu5BSe2Znp5edDUvZvb3aNnfozVu/T3fEdSeyCxt9xshVdWngE8leT7wJ8ALZztYVa0H1gOsXr26JiYmFq7SEZicnGSx1byY2d+jZX+P1rj193xvktgTU8CqvuWDgO0PtHFVXQE8Ocn+wy5MktQdbQTUZuCwJIcmWQGcBGzs3yDJU5q/syLJz9N7jNJ3Rl6pJKk1I5/iq6qdSU4DLgGWARuqakuSU5v164BfBX49yQ+Be4BX+cR0SVpa2rgGRVVtAjYNtK3r+/w+4H2jrkuS1B1tTPFJkvSgDChJUicZUJKkTjKgJEmdZEBJkjrJgJIkdZIBJUnqJANKktRJBpQkqZMMKElSJxlQkqROMqAkSZ1kQEmSOqmVgEpyQpKbk2xNcsYs61+T5Lrm6x+SPKONOiVJ7Rl5QCVZBpwDvAg4HFiT5PCBzb4B/FJVHU3vde/rR1ulJKltbYygjgG2VtW2qroPuBA4sX+DqvqHqrqzWfwqvdfCS5KWkDYC6kDgtr7lqabtgZwC/M1QK5IkdU4bb9TNLG2zvs49ybH0Auq5D3iwZC2wFmDlypVMTk4uQImjMz09vehqXszs79Gyv0dr3Pq7jYCaAlb1LR8EbB/cKMnRwEeAF1XVdx7oYFW1nuYa1erVq2tiYmJBix22yclJFlvNi5n9PVr292iNW3+3McW3GTgsyYEwUE8AAAbuSURBVKFJVgAnARv7N0jyM8DFwOuq6ust1ChJatnIR1BVtTPJacAlwDJgQ1VtSXJqs34d8EfAY4EPJwHYWVWrR12rJKk9bUzxUVWbgE0Dbev6Pv8G8BujrkuS1B0+SUKS1EkGlCSpkwwoSVInGVCSpE4yoCRJnWRASZI6yYCSJHWSASVJ6iQDSpLUSQaUJKmTDChJUicZUJKkTjKgJEmdZEBJkjqplYBKckKSm5NsTXLGLOufluQrSe5N8p/bqFGS1K6Rvw8qyTLgHOB4eq9/35xkY1Xd2LfZd4E3AS8fdX2SpG5oYwR1DLC1qrZV1X3AhcCJ/RtU1e1VtRn4YQv1SZI6oI2AOhC4rW95qmmTJOnH2njle2Zpqz0+WLIWWAuwcuVKJicn9/RQrZienl50NS9m9vdo2d+jNW793UZATQGr+pYPArbv6cGqaj2wHmD16tU1MTExr+JGbXJyksVW82Jmf4+W/T1a49bfbUzxbQYOS3JokhXAScDGFuqQJHXYyEdQVbUzyWnAJcAyYENVbUlyarN+XZInAFcCjwJ+lOTNwOFVddeo65UktaONKT6qahOwaaBtXd/nb9Gb+pMkLVE+SUKS1EkGlCSpkwwoSVInGVCSFtwFF1zAkUceyXHHHceRRx7JBRdc0HZJWoRauUlC0vi64IILePvb3865557Lrl27WLZsGaeccgoAa9asabk6LSaOoCQtqDPPPJNzzz2XY489luXLl3Psscdy7rnncuaZZ7ZdmhYZR1CSADjqvKMW5Dj5g/Cmb74Jzmsazvv39oU6x/UnX78gx1G3GVCSgIX7oX/kkUdy9tlnc+yxx/740TuXXXYZp59+OjfccMOCnENLg1N8khbU29/+dk455RQuu+wydu7cyWWXXcYpp5zC29/+9rZL0yLjCErSgpq5EeL000/npptu4ulPfzpnnnmmN0hotxlQkhbcmjVrWLNmzdg9XVuj5RSfJKmTDChJUielao9fZts5Sb4N3Np2Hbtpf+COtotYQuzv0bK/R2ux9vfBVfW4wcaxCqjFKMmVVbW67TqWCvt7tOzv0Rq3/naKT5LUSQaUJKmTDKj2rW+7gCXG/h4t+3u0xqq/vQYlSeokR1CSpE4yoFqU5IQkNyfZmuSMtusZZ0k2JLk9iU8rHYEkq5JcluSmJFuS/E7bNY2rJA9L8k9Jrm36+t1t17RQnOJrSZJlwNeB44EpYDOwpqpubLWwMZXk+cA0cH5VHdl2PeMuyROBJ1bV1Un2Aa4CXu5/3wsvSYC9q2o6yV7Al4HfqaqvtlzavDmCas8xwNaq2lZV9wEXAie2XNPYqqorgO+2XcdSUVX/VlVXN5/vBm4CDmy3qvFUPdPN4l7N11iMPAyo9hwI3Na3PIX/A2sMJTkE+DngH9utZHwlWZbkGuB24NKqGou+NqDak1naxuK3HmlGkkcCFwFvrqq72q5nXFXVrqp6JnAQcEySsZjGNqDaMwWs6ls+CNjeUi3Sgmuuh1wEfLyqLm67nqWgqr4HTAIntFzKgjCg2rMZOCzJoUlWACcBG1uuSVoQzYX7c4Gbqur9bdczzpI8Lsm+zeeHAy8EvtZuVQvDgGpJVe0ETgMuoXcB+ZNVtaXdqsZXkguArwA/m2QqySlt1zTmngO8DnhBkmuarxe3XdSYeiJwWZLr6P3ie2lVfa7lmhaEt5lLkjrJEZQkqZMMKElSJxlQkqROMqAkSZ1kQEmSOsmAkkYkSSX5q77l5Um+nWS3bglOckuS/Re+QqlbDChpdHYARzZ/TAm9J9n/a4v1SJ1mQEmj9TfAS5rPa4ALZlYkeUySTye5LslXkxzdtD82yReT/HOSv6TvOY5JXtu8C+iaJH/ZPDR0WZKPJrkhyfVJfneU36C0UAwoabQuBE5K8jDgaH7yCd/vBv65qo4G3gac37T/MfDlqvo5eo/D+hmAJE8HXgU8p3lQ6C7gNcAzgQOr6siqOgr4n8P/tqSFt7ztAqSlpKqua14/sQbYNLD6ucCvNtv9XTNyejTwfOAVTfvnk9zZbH8c8AvA5t6j73g4vdctfBZ4UpKzgc8DXxzm9yQNiwEljd5G4M+BCeCxfe0/7RUssz2TLMB5VfXW+61IngH8f8BvA78GvHEe9UqtcIpPGr0NwHuq6vqB9ivoTdGRZAK4o3mHUn/7i4D9mu2/BLwyyeObdY9JcnBzh99Dquoi4J3Azw/5+5GGwhGUNGJVNQV8cJZV7wL+Z/NU6h8AJzft7wYuSHI1cDnwzeY4NyZ5B/DFJA8BfkhvxHRPc5yZX0DvN8KSFgOfZi5J6iSn+CRJnWRASZI6yYCSJHWSASVJ6iQDSpLUSQaUJKmTDChJUicZUJKkTvr/Adt0neii/RirAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -1449,12 +1485,12 @@ "metadata": {}, "source": [ "We call the display over time of an individual source and identify all its operating modes.\n", - "We define the parameter \"timeunit\" given that the default unit in the function is milliseconds and the epochs in our data is seconds." + "We define the parameter \"timeunit\" given that the default unit in the function is milliseconds and the epochs in our data are seconds." ] }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "id": "polished-recycling", "metadata": { "ExecuteTime": { @@ -1465,7 +1501,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAsoAAADQCAYAAAAeREeUAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAf90lEQVR4nO3de3xV5Z3v8e8vCZcgCYZwMaBcJEYuMpspVKDMtKeSadPR4rGMQnEsFdqeY1+e1mk91FYcOtVafFV70aPjFE/hdFopl3oZmRnFntpxsEUbYOJBgRzKRQgQLuEWEEnM7/yxVg7buDB7h2z2Ivvzfr14kaxnrb1+Ow/Pwy/PftbzmLsLAAAAwHvlZTsAAAAAII5IlAEAAIAIJMoAAABABBJlAAAAIAKJMgAAABCBRBkAAACIQKIMdGFmNszM3MwKsh1LppjZv5rZ7PN0r/vM7KCZ7Tsf9wMAZBeJMhATZrbDzE6bWb82xzeEye6wLIUWG2b2bTP7efIxd/+Uu/+v83DvIZK+Lmm0u1+S6fuF95xlZjvN7ISZPWNmfZPK+prZ02HZTjOblca1t5tZtZm9Y2ZLzsd7AYALEYkyEC/bJX229RszGyupV/bCyZ4YjoIPkXTI3fene2FH3ouZjZH0D5JukTRQ0klJjyWd8qik02HZzZL+PrwmlWv3SLpP0k/TjQsAcgmJMhAv/yjpc0nfz5b0s+QTzKyPmf3MzA6EI4bzzSwvLMs3swfD6QHbJF0bce3/NLO9ZlYXTiXID8vKzezfzOxoeP2yswVpZtPM7A0zO2JmvzWzUeHxb5jZyjbn/tjMHk7h/p83s1fM7IdmdkjSt9u8TpWkb0maYWaNZlYTHv+tmX0h4jWOmNk2M/tIeHyXme1PnqZhZj3Cn9dbZlZvZo+bWWHE+62U9KKkQeG9l3zQzyEs2xH+PF6XdKJtshw1LSb5vShIfp9z95fdvVHSPZI+Y2ZFZnaRpOmS7nH3RndfI+mfFCTGH3itJLn7U+7+jKRDZ6tjAACJMhA3ayUVm9moMIGcKennbc55RFIfSZdL+piCxPrWsOyLkq6T9KeSJkj6qzbXLpHULKk8POcTkloTs3slrZZUIunS8D7vY2YVkpZKukNSf0n/Iuk5M+su6ZeS/rI1IQvfw02Snkzh/pI0UdI2BaOg302+r7s/L+l+Scvcvbe7J6LiC1/jdUml4X1/KenD4T3/WtL/MLPe4bkLJVVIGheWD5b0t21f0N1/LelTkvaE9/58Oz+HVp9V8MvKxe7efJZ4z2aMpJqkGP6oYAS5IvzT7O61SefXhNe0dy0AIEUkykD8tI4q/4WkTZLqWguSkudvuvtxd98h6SGdGUm8SdKP3H2XuzdI+l7StQMl/aWkO9z9RDiF4Ifh60lSk6Shkga5+6lwlDLKDEn/7O4vunuTpAclFUr6iLvvlLRe0g3huddIOunua1O4vxQkoo+4e7O7v53WT+2M7e6+2N3flbRM0mWSvuPu77j7agUJY7mZmaQvSfobd29w9+MKEvGZZ33lFH8OSec8HNZFR95Lb0lH2xw7KqkoLDt2lrL2rgUApChucwABBInyy5KGq820C0n9JHWTtDPp2E4FI6GSNEjSrjZlrYaG1+4NckRJwS/LrefPUzCq/JqZHZb0kLtHzWEdlPy67t5iZruSYnhSwUjqzyTN0pnR5PburzZfd1R90tdvhzG2PdZbwShwL0nrkuIxSfkp3qe9n4N0bu+nUVJxm2PFko5LavmAsvauBQCkiEQZiBl332lm2xWMvs5tU3xQZ0Z+3wyPDdGZUee9CkZQlVTWapekdyT1i5oG4O77FEzdkJn9maRfm9nL7r61zal7JI1t/SYcmb0sKYYVkh4ys0sVjCxPTuX+rWGc5Xiq5ek4qCBpHuPude2dHKG9n4P0wfGeCP/upTOjw8mrabwh6f9PLzGzyyX1kFSrIFEuMLMr3P3/hqckwmvauxYAkCKmXgDxNFfSNe5+IvlgOJ1guaTvhg91DZX0NZ2Zx7xc0lfM7FIzK5F0V9K1exXMQX7IzIrNLM/MRpjZxyTJzG4Mk1tJOqwgyWuJiG25pGvNbKqZdVOwZNo7kn4X3ueApN9KWqxgGsSmVO6fonpJw1ofXjwX7t4iaZGkH5rZAEkys8Fm9skUX+IDfw4p3P+AgqT6ry14CHOOpBFJp/xC0qfN7M/Dh/e+I+mpcMrNCUlPSfqOmV1kZlMkXa/g04gPvDZ8nwVm1lPB6Hm+mfVs+7AhAIBEGYgld/+ju1efpfi/KRiN3CZpjYKpDa1TJBZJekHBg1zrFSRTyT4nqbuC0ejDklZKKgvLPizpVTNrVLCCwlfdfVtEbFsUPBT3iIJR2U9L+rS7n0467UlJlToz7SKV+6diRfj3ITNbn8Z1Z/MNSVslrTWzY5J+LenKVC5M8efQni9K+u8KVp8Yo6Qk293fkPRfFSS9+xXML/5y0rVfVjAner+ChwpvC69J5dr5CkbT7wrfw9vhMQBAEnPvzE8yAQAAgK6BEWUAAAAgAokyAAAAEIFEGQAAAIhAogwAAABEOKflgEpL+/nw4cM6KRQAAICuYd26dQfdvX+248C5OadEefjwYaquPtsKVgAAALnJzHa2fxbijqkXAAAAQAQSZQAAACACiTIAAAAQ4ZzmKAMAACC+1q1bN6CgoOAJSVeJAdK2WiRtbG5u/sL48eP3R51AogwAANBFFRQUPHHJJZeM6t+//+G8vDzPdjxx0tLSYgcOHBi9b9++JyRNizqH3ywAAAC6rqv69+9/jCT5/fLy8rx///5HFYy2R59zHuMBAADA+ZVHknx24c/mrPkwiTIAAAAQgTnKAAAAOaJfPyUOHeq8/K+0VM0HD6rmg84xs/HTpk1rePbZZ7dLUlNTkwYMGJAYN27ciZdeemlrqvcaPHjw2Orq6k1lZWXNqZy/efPm7jfddNPlR44cKRg7duzJX/3qV9t79uyZ1ug6I8oAAAA5ojOT5FRfr7CwsGXLli2FjY2NJklPP/108cCBA5s6M44oX/va1y69/fbb6996662Nffr0af7xj3/cL93XIFEGAABARlVWVh5dsWLFxZK0dOnSvtOnT29oLauvr8+vrKwcUVFRMTqRSIx89dVXCyVp3759+VOmTLmivLx8zIwZM4a6nxkMfuyxx/qOHTt21MiRI0fPmjVraHPzeweZW1pa9Pvf/77o1ltvPSxJc+bMOfTcc89dnG7cJMoAAADIqFtuuaVh2bJlJSdPnrRNmzb1mjx58onWsnnz5g1KJBIna2tr37z33nvrZs+ePVyS7rrrrkGTJ09u3Lp16xs33HDDkb1793aXpPXr1/dcuXJl3+rq6s2bN29+My8vzx9//PHS5PvV19cXFBUVvdutWzdJ0rBhw07X19d3TzduEmUAAABk1MSJE9/evXt3j0WLFvWtrKw8mlz22muvFc2dO/eQJE2bNu34kSNHChoaGvLWrl1bNGfOnEOSNHPmzKPFxcXvStLzzz9ftHHjxl6JRGLUyJEjR69Zs6Z427ZtPTIRNw/zAQAAIOOqqqqOLFiw4LLVq1dv2b9/f4dzUHe3G2+88dCjjz5ad7ZzBg4c2Hz8+PH8pqYmdevWTTt27Og+cODA0+neixFlAAAAZNxtt9128M4779xz9dVXv518fOLEiccXL15cKkmrVq0qKikpae7bt2/LpEmTji9ZsqRUkpYvX1587NixfEmqqqo6tmrVqpK6uroCKZjjXFtb+55pFXl5eZo0adLxxYsXl0jST3/609LrrrvuSLoxkygDAADkiNJSpbS0WiZeb8SIEU3z58/f3/b4Aw88sGfDhg29KioqRt99992DlyxZsl2SFi5cuOeVV17pXV5ePuapp54qKSsrOy1J48ePPzV//vy6qVOnVlRUVIy+5pprKnbt2tWt7es+9NBDux955JFLhgwZctXhw4cLvvrVrx5M9/1Z8hOE6ZowYYJXV1d3+HoAAICuyMzWufuEbMdRU1OzI5FIpJ0g5pKampp+iURiWFQZI8oAAABABBJlAAAAIAKJMgAAABCBRBkAAACIcE6JclPGd+kGAAAAsuOcNhx5/XXJrLNCAS5cHV87Bp3qF3RIAIDOw9QLAACAXNFPCZnGd9qffkq0d0szG3/99dcPb/2+qalJJSUliY9//OPl6YQ+ePDgsXv37k15kPf+++/vP2TIkKvMbHw61yUjUQYAAMgVh85tNkFHXq+wsLBly5YthY2NjSZJTz/9dPHAgQMzPoH3Yx/7WOOLL75YO2jQoLS3rm5FogwAAICMqqysPLpixYqLJWnp0qV9p0+f3tBaVl9fn19ZWTmioqJidCKRGPnqq68WStK+ffvyp0yZckV5efmYGTNmDE3eJO+xxx7rO3bs2FEjR44cPWvWrKHNze/fIHDKlClvX3nllR1OkiUSZQAAAGTYLbfc0rBs2bKSkydP2qZNm3pNnjz5RGvZvHnzBiUSiZO1tbVv3nvvvXWzZ88eLkl33XXXoMmTJzdu3br1jRtuuOHI3r17u0vS+vXre65cubJvdXX15s2bN7+Zl5fnjz/+eGkm4iZRBgAAQEZNnDjx7d27d/dYtGhR38rKyqPJZa+99lrR3LlzD0nStGnTjh85cqSgoaEhb+3atUVz5sw5JEkzZ848Wlxc/K4kPf/880UbN27slUgkRo0cOXL0mjVrirdt29YjE3F37jwVAAAAIEJVVdWRBQsWXLZ69eot+/fv73AO6u524403Hnr00UfrOjO+KIwoAwAAIONuu+22g3feeeeeq6+++u3k4xMnTjy+ePHiUklatWpVUUlJSXPfvn1bJk2adHzJkiWlkrR8+fLiY8eO5UtSVVXVsVWrVpXU1dUVSMEc59ra2u6ZiJlEGQAAIFeU6v1PvZ2n1xsxYkTT/Pnz97c9/sADD+zZsGFDr4qKitF333334CVLlmyXpIULF+555ZVXepeXl4956qmnSsrKyk5L0vjx40/Nnz+/burUqRUVFRWjr7nmmopdu3Z1a/u6991334CBAwf+SX19ffdEIjF6xowZQ9N9e5b8BGHaF9sEl6o7fD3QVbDhSEyw4QiAmLCbtc7dJ2Q7jpqamh2JROJgtuOIs5qamn6JRGJYVBkjygAAAEAEEmUAAAAgAokyAAAAEIFEGQAAAIhAogwAAABEIFEGAAAAIrAzHwAAQK5Y2S+h04c6L//rXtqsvzpY80GnmNn4adOmNTz77LPbJampqUkDBgxIjBs37sRLL720NdVbDR48eGx1dfWmsrKylNZunjZt2vDXX3/9om7duvm4ceNO/PznP9/Zo0ePtFZ0ZUQZAAAgV3Rmkpzi6xUWFrZs2bKlsLGx0STp6aefLh44cGBTp8YR4eabb27Ytm3bxi1btrxx6tQp+9GPftQv3dcgUQYAAEBGVVZWHl2xYsXFkrR06dK+06dPb2gtq6+vz6+srBxRUVExOpFIjHz11VcLJWnfvn35U6ZMuaK8vHzMjBkzhiZvkvfYY4/1HTt27KiRI0eOnjVr1tDm5vcPMs+YMeNoXl6e8vLyNGHChBO7d+9Oe5trEmUAAABk1C233NKwbNmykpMnT9qmTZt6TZ48+URr2bx58wYlEomTtbW1b9577711s2fPHi5Jd91116DJkyc3bt269Y0bbrjhyN69e7tL0vr163uuXLmyb3V19ebNmze/mZeX548//njp2e79zjvv2LJly0qvvfbao+nGTaIMAACAjJo4ceLbu3fv7rFo0aK+lZWV70lYX3vttaK5c+cekqRp06YdP3LkSEFDQ0Pe2rVri+bMmXNIkmbOnHm0uLj4XUl6/vnnizZu3NgrkUiMGjly5Og1a9YUb9u2rcfZ7j179uwhkyZNaqyqqmpMN24e5gMAAEDGVVVVHVmwYMFlq1ev3rJ///4O56DubjfeeOOhRx99tK69c7/+9a+XHTx4sOCFF174Y0fuxYgyAAAAMu622247eOedd+65+uqr304+PnHixOOLFy8ulaRVq1YVlZSUNPft27dl0qRJx5csWVIqScuXLy8+duxYviRVVVUdW7VqVUldXV2BFMxxrq2tfd/84x/84Af9fvOb3/R55plntuXn53coZkaUAQAAckX30uZOXx4uRSNGjGiaP3/+/rbHH3jggT0333zzsIqKitGFhYUtS5Ys2S5JCxcu3DN9+vTLy8vLx0yYMKGxrKzstCSNHz/+1Pz58+umTp1a0dLSom7duvnDDz/8VkVFxenk1503b97QsrKydyZMmDBKkq677rrDDz744N503p4lP0GYLrMJLlV3+Hqgq+h4K0Kn+oVlOwIAkCTZzVrn7hOyHUdNTc2ORCJxMNtxxFlNTU2/RCIxLKqMqRcAAABABBJlAAAAIAKJMgAAQNfV0tLSwry0swh/Ni1nKydRBgAA6Lo2HjhwoA/J8vu1tLTYgQMH+kjaeLZzWPUCAACgi2pubv7Cvn37nti3b99VYoC0rRZJG5ubm79wthNIlAEAALqo8ePH75c0LdtxXKj4zQIAAACIQKIMAAAARCBRBgAAACKQKAMAAAARSJQBAACACCTKAAAAQAQSZQAAACACiTIAAAAQgUQZAAAAiECiDAAAAEQgUQYAAAAikCgDAAAAEUiUAQAAgAgkygAAAEAEEmUAAAAgAokyAAAAEIFEGQAAAIhAogwAAABEIFEGAAAAIpAoAwAAABFIlAEAAIAIJMoAAABABBJlAAAAIAKJMgAAABCBRBkAAACIQKIMAAAARCBRBgAAACKQKAMAAAARSJQBAACACCTKAAAAQAQSZQAAACACiTIAAAAQgUQZAAAAiECiDAAAAEQgUQYAAAAikCgDAAAAEUiUAQAAgAgkygAAAEAEEmUAAAAgAokyAAAAEIFEGQAAAIhAogwAAABEIFEGAAAAIpAoAwAAABFIlAEAAIAIJMoAAABABBJlAAAAIAKJMgAAABCBRBkAAACIQKIMAAAARCBRBgAAACKQKAMAAAARSJQBAACACCTKAAAAQAQSZQAAACACiTIAAAAQgUQZAAAAiECiDAAAAEQwd+/4xWbHJW3pvHCAC1Y/SQezHQSoBwCxcaW7F2U7CJybgnO8fou7T+iUSIALmJlV0xayj3oAEBdmVp3tGHDumHoBAAAARCBRBgAAACKca6L8k06JArjw0RbigXoAEBf0R13AOT3MBwAAAHRVTL0AAAAAIpAoAwAAABFIlAFc8MzMsh0DAEj0R10Nc5SBDmrtDJ1GBABAl5RWomxm+ZLK3X1L0rFLJZ1w98MZiA+4IJmZkUCfH2ZWJGm6pF6S8iXVStro7nVZDQxAzjGzwZJmSjokaa27b04q6+XuJ7MWHDok3UR5qKT57v5FMyuUVCXp25IulfTvkj7n7scyESgQJ2bWXdIYSU2SGiWdlHTK3Y+Z2XBJy9z96mzGmAvMrL+keZJ6Sxok6cOS6iT1kfSMu8/LYngAcoiZDZD0PUkDJHWXdELSfe6+PsyffuLun8xmjEhfultYD5FUFn49QtKXJc10901m9i1J90u6vRPjA+LqTyQ9JulFST0UJMxNZnZY0pUKRjaReWMk/am7V0qSmf25pE+4+z1m9oCZ/Z27L8huiAByxEhJw9x9qiSZ2a2SfmJm10sqFf8vXJDSTZQHSxpkZpdIukHSAXffFJb9H0lXdWZwQIyNlDRQ0r9JKlEwotlbUrOCdrI7e6HllN6S3jGzYkmnJI2SdEVYVi3ppmwFBiDnlCmYciEz6+7ui83slKQnFAyq7MpmcOiYdBPlI5L2SfqapKsl/T6pbJCko50TFhB7GyXdI+nFtnORw2kZTLs4P9ZJ+g9J9yn4mPMySU+GZZdJOp6dsADkoD2S1pvZRe5+wswK3H2pmbVIWqrgU0hcYNKdo1ysYO7Nu5J6Sjrq7nvCslslNbr7ikwECsSJmeVJynP35qTv3d3dzPpI6uXue7MaZI4IP+G6TsHI/j+7+5tmVqBgdLk56VMvAMiY8Nmt3u5+IOlYnru3mNlMBc+xPJO1ANEhKSfKrU/xm1kPSR+S1E3BCPNBSfvdvTn87ak5Y9ECMZDUFi5WMFd/h7sfynJYOSepHnpJ6u/uO7MdE4DclNQfXargl/Q/uvu2bMeFc5fuiPLHJX1awaT0fgpGcJol/UHSQ62jy0BXZ2aTFSwB1FNSg6RfuntNWHarpN8lL6OIzAjr4bOSLlIwN/BJd/+PsIx6AHDemNmnJF0vqVDBVLBfuvvLYdk8SS+0/j+BC0e6O/N9U9IOSd9S8FHnn+nMeoFPmNllnRodEF/fkFQv6WcKlgFaaGYfCstmKkjckHnfUPDcxE8VPFH+PeoBQJZ8RVKNpL+VtEnSd82sMiyrVPrPhSEG0q20oQoeXmpdyN8VTF6/38xqJLFtI3LFFe7+n8OvXzGzL0l62Mw+rWCU+WDWIsst1AOAuLhM0hPu3iTpETPbIun7ZvYZBcuIHvjAqxFL6SbK35f0N2b2pqTNCkZyjih4wt/FPwLkjuNmNt7d15lZvrv/xMxc0j8p6Cz3Zzm+XEE9AIiLXQqWyd0Q9kerzUySnpZ0ieiPLkhpzVGWJDObK+laScUKdr8qlbRG0nfcfWunRwjEjAU933+SVO/ub7YpmytpkbunO60JaaIeAMSJmU1QsPrX5jbHPyHpH9x9eHYiw7lIO1EG8H7h8nC93L3RzHq4+zvZjikXUQ8A4iLsj4rc/Wi4AcnpbMeE9KU92mJm+WbWLfx6lJk9EX7N/GTkjLADTFYu6SFJIjk7f6gHAHERkQeNVvDAt0iSL1wd+VgyeQh6qIJl4jr6WsAFKVxAPq/1l0ZJlyvY0lpmlp+9yHIL9QAgLlp3aU1KmAdKOh0eoz+6QKW9VIm7t0hqCb89rPduYw3kDNpCPFAPAGLqhKTfZDsInJt0Nxwpk3SNgl35DkiqlbTb3d/OTHhAPNEW4oF6AABkUjpbWP+Fgl35iiT1V/CRQpGknZIecHd+a0JOoC3EA/UAIC7C6V/5Cj7dag6nhXV399NmNl/Sdnf/RXajREekM/XiS5J+7+4/SD5oZh+V9Hdm1uTu/96p0QHxRFuIB+oBQFwskDRM0nYF67s3hH+/IalK0uNZjA3nIJ1EubekY20PuvvLZtas4DcpIBfQFuKBegAQF5+RtEHBcxKDJY2UdLGCEeaPSPpm1iLDOUknUf6epM+a2XCF8wAlHZc0WcFWsds7PzwglmgL8UA9AIiLX0j6F3ff0LbAzF6X1HD+Q0JnSPdhvskKfmtKKJgT+K6k30r6gbvvyUSAQBzRFuKBegAQB2ZWquBTrAadWYWndQnLaZJeYG33C1M6D/MVuHtzhuMBYo+2EA/UA4C4SdoEyT2dkUjEVsqbhJztPyQzKzCzz3daREDM0RbigXoAEDfu3hL+ad18JJ/+6MKW0oiymfWX9A1JRyXtk1Qvab+COYCDJf2ju4/JYJxALNAW4oF6ABAX9EddW6oP841TsBTTjyR9VMGTnH0ULPI/XNK2zg8NiKVxoi3EwThRDwDiYZzoj7qsVBPlnpJelPTtcLtYJS2k/V8kXZupAIGYoS3EA/UAIC7oj7qwVBPlVyTVSbpIwQLa5u6nw7K9kl7ORHBADNEW4oF6ABAX9EddWFrLw73nQrNCBds0NnVuSMCFhbYQD9QDgLigP+o6Ul71olXS0iczFczLAXISbSEeqAcAcUF/1PWknSjrzHSNz0rqJ0lmZp0WEXDhoC3EA/UAIC7oj7qYlBLl5EpOmnezVdLOTAQFxBVtIR6oBwBxQX/UtaW7hXVCkks6JamRLWKRq2gL8UA9AIgL+qOuKdUNRz4q6TMK/gF8WFKtpLckrXD3NzIaIRAjtIV4oB4AxAX9UdfW7tQLM+sl6R5Jf5D0nIJlUJoV7EDzpJl9PKMRAjFBW4gH6gFAXNAfdX3tjiib2QhJT7l7Ivy+m6TfuvsUMxstabG7T8x8qEB20RbigXoAEBf0R11fKhuOnJK01czukfSmpA9J2hyW9Q7LgVxAW4gH6gFAXNAfdXHtTr1w9zpJD0kaIOmTCvYv/3ZYfImkLZkKDogT2kI8UA8A4oL+qOtLedULM7tYUq/WpzjNLK91T3Mgl9AW4oF6ABAX9EddV4e3sJYkMyuR9I67n+y8kIALD20hHqgHAHFBf9Q1pPIw3yhJQySdkNQo6bik0+6+y8yelLTB3b+f8UiBLKMtxAP1ACAu6I+6vlQe5puvYEL6Zkk9FCx70mJm9ZKmSHomY9EB8UJbiAfqAUBc0B91cakkyuWSXlCwPmCJpCIFk9VPhl+z8wxyBW0hHqgHAHFBf9TFpZIof0fSjqjdZczsq5IOdHpUQDzRFuKBegAQF/RHXVwqc5TP+uSmmV3k7icyEhkQM7SFeKAeAMQF/VHXl9KqF2Z2o6SEgsnquyVtlbTZ3Q9nNjwgXmgL8UA9AIgL+qOu7QMTZTPrLel+SfkK/gEMUrCodk9Jr0la6O4Hz0OcQFbRFuKBegAQF/RHuaG9RHmspCWSPpz80UK4l/k3JSXcfXqmgwSyjbYQD9QDgLigP8oN7W1h3UfBUif9kg+6e5Ok30m6ODNhAbFDW4gH6gFAXNAf5YD2Vr3YIGmxpAfNbL+CpzffklQoaaqk/53Z8IDYoC3EA/UAIC7oj3JAKqteFEj6nKQxCtYEHC5pr6TF7v5SxiMEYoK2EA/UA4C4oD/q+tqbozxU0u0Kdp15S9KT7r4zLJss6YS7v34+AgWyibYQD9QDgLigP8oN7c1RviM85wVJF0n6ezP7VFj2JUnjMhYZEC93iLYQB3eIegAQD3eI/qjLa2+O8lWS5rn7BknPmNkXJH3FzDYq2NN8b6YDBGKCthAP1AOAuKA/ygHtjSgXSCqTJDPLd/cnJP2rpO9KmqLgowYgF9AW4oF6ABAX9Ec5oL1EeYGkXZLk7u+aWYG7PyzpDwoW1T6a4fiAuKAtxAP1ACAu6I9yQCqrXpgnndT6vZld7u7bMh4hEBO0hXigHgDEBf1R19duogwAAADkovamXgAAAAA5iUQZAAAAiECiDAAAAEQgUQYAAAAikCgDAAAAEf4f82jqJt0i1c4AAAAASUVORK5CYII=", + "image/png": "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vn1718bGxi5PP/10r5kzZzYCTJs2bUfv3r0PADz88MO9li9ffmKhUBg1cuTIhieeeKL3mjVrepQj7vadpyJJkiTlmDJlyvYbb7zx9EcffXTVpk2b3s5BS6dUtIiIBFBXd+iYbkopLr/88sY777xzXTnjBUeUJUmSVAHXXHPNltmzZ79+wQUXvFF6fPz48bvmzZvXH2DRokW9+vbt29SvX7/m8ePH75o7d25/gAULFvTeuXNnF4ApU6bsXLRoUd9169Z1hWyO8+rVq7uXI2YTZUmSpM6iP4e+9Vah+40YMWL/DTfcsOng47feeuvrS5cuPbG+vr7hS1/60tB77733ZYBbbrnl9SeffPLkhoaGUY888kifwYMH7wMYO3bsm9dff/26SZMm1dfX1zdcdNFF9a+99lq3g+/75S9/eeCgQYPO37hxY/dCodBw5ZVXDmvrjxd5w92tvjjGJVh81NdLnYUbjlSZG45IqrC4iiUppXHVjmPZsmWvFAqFLdWO43i2bNmyAYVCYXhemSPKkiRJUg4TZUmSJCmHibIkSZKUw0RZkiRJymGiLEmSJOUwUZYkSZJyuDOfJElSZ3H/gAL7Gtsv/+vev4k/3LLsvU6JiLEf//jHtz744IMvA+zfv5+BAwcWxowZs+fxxx9/sbWPGjp06OjFixevGDx4cKvWbp46deqZzz333EndunVLY8aM2fPd73731R49erRpxVZHlCVJkjqL9kySW3m/nj17Nq9atarn7t27A+CBBx7oPWjQoP3tGkeOq666auuaNWuWr1q16vk333wzvv71rw9o6z1MlCVJklRWkyZN2rFw4cJTAO67775+l1122daWso0bN3aZPHnyiPr6+oZCoTDymWee6QmwYcOGLhMnTnz/qFGjGqZPnz6sdJO8u+66q9/o0aNHjRw5smH69OnDmpoOHWS+8sord9TV1VFXV8e4ceP2rF27ts3bXJsoS5IkqayuvvrqrfPnz++7d+/eWLFixYkTJkzY01I2Z86cIYVCYe/q1atfuOmmm9bNmDHjTIDrrrtuyIQJE3avWLHihalTp25fv359d4ClS5eecP/99/dbvHjxypUrV75QV1eX7r777v6He/Zbb70V8+fP73/xxRfvaGvcJsqSJEkqqwsvvPCNtWvX9rjnnnv6TZ48+V0J67PPPttr1qxZjQBTp07dtX379q6N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", "text/plain": [ "
" ] @@ -1493,7 +1529,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "id": "orange-consciousness", "metadata": { "ExecuteTime": { @@ -1507,7 +1543,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -1527,18 +1563,22 @@ "id": "e4ed39d7", "metadata": {}, "source": [ - "Apart from visualization of modes over time, we can also visualize the probability of occurrence of every mode over time. The plot can be generated using the `\"plot_probabilities\"` method of the \"ModeId\" feature class. As a first step, the raw mode results needs to be parsed into a python object representing the \"ModeId\" feature class. The method `\"plot_probabilities\"` makes use of the instance variable, `\"probabilities\"` which in turn is a matrix of probability of occurrence of each mode for over each timestamp. For a more focused plot, one can use the method's `\"selected_modes\"` parameter to only consider a subset of modes." + "Apart from visualization of modes over time, we can also visualize the probability of occurrence of every mode over time.\n", + "The plot can be generated using the `\"plot_probabilities\"` method of the \"ModeId\" feature class.\n", + "As a first step, the raw mode results needs to be parsed into a python object representing the \"ModeId\" feature class.\n", + "The method `\"plot_probabilities\"` makes use of the instance variable, `\"probabilities\"`, which is a matrix of probability of occurrence of each mode for over each timestamp.\n", + "For a more focused plot, one can use the method's `\"selected_modes\"` parameter to only consider a subset of modes." ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "id": "3bee115a", "metadata": {}, "outputs": [ { "data": { - "image/png": "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R16XoR4skQ7oSG9MZ1fQU4+PiJRkhT8RkbdqOd04jDpW0JPMBYfnAQ/Qlwt5jXtZyCC2lLeQHXfooYduPO64416eMGHCPp15vXqwRIokafOpRKREMiv8PTMt/FzWxVe7EZFkagYOo44l9Hojucpooool9OJQ6jrTk7VgwYIew4YN2++4446rra2t3b+hoWHY7bff3mf06NEjhw4duv/dd99dA7B69erqSZMm7V1XVzeqvr5+5EMPPdQbYNWqVdXjx48fMXz48P2mTp061N3f+NtXX311vwMOOGDfkSNHjjr55JOHbtmyff43fvz4V/fZZ5/XO17yQAmWtJsuGNsxWkFPRDpFK/yJSFfwR/qygp5swfI+vwVjBT25jb6d+fNLly7tdf75569etGjRvEWLFvW68cYbd21sbJx/2WWXLbvssssGApx33nmD6uvrmxYuXPjUpZdeuvzUU08dBnDBBRcMOuSQQzY+++yzTx577LHrVq5c2QPgscce63XLLbf0a2xsnD9//vynqqqq/Jprrtm1kzXQIiVY0i5JWz68FDSfSkQ6RSv8dc6yWfDIuerxEymVa+m/Xc9VriaquIb+nfnzgwcPfu2ggw56tbq6mrq6ulcnTJiwvqqqitGjRzctW7asJ8DDDz/c54wzzngRoKGhYcO6deu6rV27turBBx/sc/rpp78IcOKJJ77ct2/fZoA777yzz7x582rq6+v3HTly5Kj77ruv7+LFi3t2pnyt0RwsaRddMLZzNJ9KRDpMK/x1XCkvnCwiwWq6F3S7HD169HhjXF9VVRW9evVygOrqapqbm/P3mrXB3e2EE054cdq0acs78/r2Ug+WtIuGu4mIlJBW+OsYDasUKb0BbC7odp1w8MEHb5g+ffquALNnz+6zyy67bOnXr9/WcePGbZgxY8auADNnzuy7fv36aoApU6asnz179i7Lly/vBmEO18KFC3sUulxKsKRdNNxNREQqdhiehlWKlN6ZrKGGra1uU8NWzmJNsYpwxRVXrHj88cdr6urqRl144YWDZ8yY8RzA5ZdfvuL+++/fcfjw4fvdeuutuwwcOPB1gDFjxmy66KKLlk+cOLGurq5u1IQJE+qWLl26XQ/bt7/97bcNGDDgwNWrV/eor68fNXXq1KEdKZdlr6qRZGPHjvXGxsZyF0NERKRryh6GV11TecPwtLS9dDFm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RERERES6KiVYIiIiIiIiBaIES0REREREpECUYImIiIiIiBSIEiwREREREZECUYIlIiIiIiJSIEqwRERERERECkQJloiIiIiISIEowRIRERERESkQJVgiIiIiIiIFogRLRERERESkQJRgiYiIiIiIFIgSLBERERERkQJRgiUiIiIiIlIgSrBEREREREQKRAmWiIiIiIhIgSjBEhERERERKRAlWCIiIiIiIgWiBEtERERERKRAlGCJiIiIiIgUiBIsERERERGRAlGCJSIiIiIiUiBKsERERERERApECZaIiIiIFM+yWfDIueGnSAoowRIRERGR4lg2C+4/CZ6ZFn4qyZIUUIIlIiIiIsWxcg40N4Xfm5vCfZGEU4IlIiIiIsUxcDJU14Tfq2vCfZGE61buAoiIiIhIQg1pgPE3hZ6rgZPDfZGEU4IlIiIiIsUzpEGJlaRKRQ4RNLMpZrbAzJ41swta2e44M3MzG1vK8omIiIiIiORTcQmWmVUD04APAKOAk8xsVJ7t+gCfAx4qbQlFRERERETyq7gECzgIeNbdF7v768DNwDF5trsUuALYVMrCiYiIiIiItKQSE6zBwNKs+8viY28ws9HAHu7+59b+kJmdaWaNZta4Zs2awpdUREREREQkSyUmWK0ysyrgR8CX2trW3a9197HuPrZ///7FL5yIiIiIiKRaJSZYy4E9su4PiY9l9AH2B+4xsyXAOGCWFroQEREREZFyq8QE6xFghJkNM7MewInArMyT7v6yu+/m7rXuXgs8CDS4e2N5iisiIiIiIhJUXILl7luAc4G7gKeBme7+pJldYma6iIKIiIiIiFSsirzQsLv/BfhLzmPfaGHbw0pRJhERERERkbZUXA+WiIiIiIhIV6UES0REREREpECUYImIiIiIiBSIEiwREREREZECUYIlIiIiIiJSIEqwRERERERECkQJloiIiIiISIEowRIRERERESkQJVgiIiIiIiIFogRLRERERESkQJRgiYiIiIiIFIgSLBERERERkQJRgiUiIiIiIlIgSrBEREREREQKRAmWiIiIiIhIgSjBEhERERERKRAlWCIiIiIiIgWiBEtERERERKRAlGCJiIiIiIgUiBIsERERERGRAlGCJSIiIiIiUiBKsERERERERApECZaIiIiIiEiBKMESEREREREpECVYIiIiIlI5ls2CR84N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", + "image/png": "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", "text/plain": [ "
" ] @@ -1554,7 +1594,7 @@ "''" ] }, - "execution_count": 24, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -1582,7 +1622,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "id": "compressed-mexico", "metadata": { "pycharm": { @@ -1596,7 +1636,7 @@ "['u0001', 'u0002', 'u0003', 'u0004', 'u0005', 'u0006']" ] }, - "execution_count": 25, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -1623,7 +1663,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "id": "chemical-helmet", "metadata": { "pycharm": { @@ -1634,10 +1674,10 @@ { "data": { "text/plain": [ - "{'request_id': '2c14b13fca19fa900781e8207cf8d389', 'request_status': 'queued'}" + "{'request_id': 'cdb27ac2ef5d4d635287de9421a2977a', 'request_status': 'queued'}" ] }, - "execution_count": 26, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } @@ -1658,14 +1698,22 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "id": "hourly-homework", "metadata": { "pycharm": { "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "BlackSheep Analysis: successful\n" + ] + } + ], "source": [ "REQUEST_ID_ALL = BS_ALL['request_id']\n", "status = session.get_analysis_status(REQUEST_ID_ALL)\n", @@ -1681,18 +1729,25 @@ "\n", "The output of the `\"get_analysis_results\"` function is similar to single asset features.\n", "These seven elements are:\n", - "- `\"status\"` indicates if the analysis was successful.\n", - "- `\"request_id\"` is the identifier of the requested analysis.\n", - "- `\"feature\"` is the name of the request feature.\n", - "- `\"results\"` includes the numeric results.\n", - "- `\"inputs\"` includes the input information for the request analysis.\n", - "- `\"error_info\"` includes the error information in case the analysis fails and it is empty if the analysis is successful.\n", - "- `\"debug_info\"` includes debugging (log) information related to the failed analysis." + "\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": "code", - "execution_count": null, + "execution_count": 29, "id": "innocent-dictionary", "metadata": { "pycharm": { @@ -1706,7 +1761,7 @@ "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" ] }, - "execution_count": 49, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -1726,14 +1781,14 @@ "`\"results\"` is a dictionary with a key element labelled `\"atypical_assets\"`.\n", "`\"atypical_assets\"` is a list and the length of the list indicates the number of atypical assets.\n", "Each element on this list is a dictionary.\n", - "The dictionary includes the source_id of the atypical assets, a list with all the measurement timestamps and the corresponding list with a boolean indicating whether the measurement is atypical.\n", + "The dictionary includes the source_id of the atypical assets, a list with all the measurement timestamps, and the corresponding list with a boolean indicating whether the measurement is atypical.\n", "\n", "Here, we show the number of atypical assets and the atypical order of these assets." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "id": "clean-agreement", "metadata": { "pycharm": { @@ -1758,7 +1813,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "id": "eight-cargo", "metadata": { "pycharm": { diff --git a/docs/source/content/examples/7-labeling.ipynb b/docs/source/content/examples/7-labeling.ipynb index 4cad2cfa..f2ad4677 100644 --- a/docs/source/content/examples/7-labeling.ipynb +++ b/docs/source/content/examples/7-labeling.ipynb @@ -7,11 +7,11 @@ "# 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", + "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", + "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", @@ -19,7 +19,7 @@ "\n", "### Prerequisites\n", "\n", - "To follow this example you need to have\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", @@ -31,7 +31,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Import the required packages and functions" + "### Import the required packages and functions" ] }, { @@ -54,16 +54,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Create a session for API access\n", + "### Create a session for API access\n", "\n", - "Note that the `TOKEN` is used both for authorization and authentication. Thus, each unique token represents a unique user and each user has their own unique database on the Viking Analytics MultiViz Vibration service.\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:**" + "**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": null, + "execution_count": 2, "metadata": { "tags": [ "parameters" @@ -77,25 +78,24 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{'api_version': '0.3.0',\n", - " 'mvg_highest_tested_version': '0.3.0',\n", - " 'mvg_version': '0.11.5'}" + "{'api_version': '0.3.2',\n", + " 'mvg_highest_tested_version': '0.3.2',\n", + " 'mvg_version': '0.12.2'}" ] }, - "execution_count": 2, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "session = MVG(ENDPOINT, TOKEN)\n", - "\n", "session.check_version()" ] }, @@ -103,14 +103,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Retrieve ModeId results\n", + "## 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": 3, + "execution_count": 4, "metadata": { "pycharm": { "name": "#%%\n" @@ -128,7 +128,7 @@ " 'properties': {'data_class': 'waveform', 'channels': ['acc']}}" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -150,7 +150,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": { "pycharm": { "name": "#%%\n" @@ -188,43 +188,43 @@ " \n", " \n", " 0\n", - " 1570273260\n", + " 1570186860\n", " 0\n", " False\n", - " 0.966994\n", - " 2019-10-05 13:01:00+02:00\n", + " 0.912743\n", + " 2019-10-04 13:01:00+02:00\n", " \n", " \n", " 1\n", - " 1570359660\n", + " 1570273260\n", " 0\n", " False\n", - " 0.931219\n", - " 2019-10-06 13:01:00+02:00\n", + " 0.972841\n", + " 2019-10-05 13:01:00+02:00\n", " \n", " \n", " 2\n", - " 1570446060\n", + " 1570359660\n", " 0\n", " False\n", - " 0.999575\n", - " 2019-10-07 13:01:00+02:00\n", + " 0.929741\n", + " 2019-10-06 13:01:00+02:00\n", " \n", " \n", " 3\n", - " 1570532460\n", + " 1570446060\n", " 0\n", " False\n", - " 0.979806\n", - " 2019-10-08 13:01:00+02:00\n", + " 0.999620\n", + " 2019-10-07 13:01:00+02:00\n", " \n", " \n", " 4\n", - " 1570618860\n", + " 1570532460\n", " 0\n", " False\n", - " 0.885940\n", - " 2019-10-09 13:01:00+02:00\n", + " 0.978940\n", + " 2019-10-08 13:01:00+02:00\n", " \n", " \n", "\n", @@ -232,20 +232,20 @@ ], "text/plain": [ " timestamps labels uncertain mode_probability datetime\n", - "0 1570273260 0 False 0.966994 2019-10-05 13:01:00+02:00\n", - "1 1570359660 0 False 0.931219 2019-10-06 13:01:00+02:00\n", - "2 1570446060 0 False 0.999575 2019-10-07 13:01:00+02:00\n", - "3 1570532460 0 False 0.979806 2019-10-08 13:01:00+02:00\n", - "4 1570618860 0 False 0.885940 2019-10-09 13:01:00+02:00" + "0 1570186860 0 False 0.912743 2019-10-04 13:01:00+02:00\n", + "1 1570273260 0 False 0.972841 2019-10-05 13:01:00+02:00\n", + "2 1570359660 0 False 0.929741 2019-10-06 13:01:00+02:00\n", + "3 1570446060 0 False 0.999620 2019-10-07 13:01:00+02:00\n", + "4 1570532460 0 False 0.978940 2019-10-08 13:01:00+02:00" ] }, - "execution_count": 4, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "ModeId_request_id = session.list_analyses(sid=SOURCE_ID, feature=\"ModeId\")[0]\n", + "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", @@ -254,7 +254,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": { "pycharm": { "name": "#%%\n" @@ -263,7 +263,7 @@ "outputs": [ { "data": { - "image/png": "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ko9//ONHfvjDH17z7LPPLho4cGDDl770paFtXYaJsiRJkjrUtGnTttxxxx2HA9x2222DTz/99I1NZWvWrOkxffr0cbW1tXX19fXjH3nkkb4Aq1ev7jF16tTXT5gwoW7WrFljUtrdGXz99dcPPu644yaMHz++btasWWMaGvbsZG5sbORXv/pV//e///2bAM4///wN99xzz+FtjdtEWZIkSR3q3HPP3Th37txBO3fujMWLF/ebMmXKjqaySy65ZFR9ff3OZcuWPXHVVVetnD179tEAl1566agpU6ZsX7x48RMzZ87cvGrVqt4ACxYs6HPnnXcOnj9//pIlS5Y8UVNTk2644YYhpetbs2ZNz/79+7/Sq1cvAMaOHfvymjVrerc1bhNlSZIkdaiTTz75hRUrVhxy4403Dp4+ffqW0rJHH320/wUXXLABYObMmds2b97cc8OGDT0efvjh/ueff/4GgLPPPnvLgAEDXgG49957+y9atKhffX39hPHjx9c9+OCDA5YvX35I6TJLe5+bRESbr/7hyXySJEnqcDNmzNh85ZVXvub+++9funbt2j/koPtKamtq9u7TTSnFGWecseG6665b2dy6jjjiiIZt27b12LVrF7169eKZZ57pPXz48DaPi7ZHWZIkSR3uoosuWn/xxRc/f9JJJ71QOn3y5Mnb5syZMwRg3rx5/QcNGtQwePDgxsmTJ2+76aabhgDcfvvtA7Zu3doDYMaMGVvnzZs3aOXKlT0hj3FetmzZHsMqampqmpY7COCmm24a8s53vnNzW2M2UZYkSeomhgyhVZdW64jljRs3btcVV1yxtnz6Nddc8/yCBQv61dbW1l122WWjb7755qcBrr766ucfeuihw+rq6ibcd999A0eOHPkywMSJE1+8/PLLV06bNq22tra27tRTT6197rnnepUv93Of+9yKr3zlK0ccddRRx27atKnnRz/60fVt3b6o1N3dWpMmTUrz58/f7/klSZK6ooh4LKU0qbPjWLhw4TP19fVtThC7k4ULFw6tr68fW6nMHmVJkiSpAhNlSZIkqQITZUmSJKkCE2VJkiSpggNKlHd1+F26JUmSpM5xQDccefxxiGivUKSD1/5fO0bt6jsekCRJ7cehF5IkSd3FUOoJJrbbYyj1La0yIia+5z3vObrp9a5duxg0aFD9W9/61te1JfTRo0cft2rVqlZ38n7mM58ZdtRRRx0bERPbMl8pE2VJkqTuYsOBjSbYn+X17du3cenSpX23b98eAHfdddeAESNGdPgA3re85S3bf/KTnywbNWrUy/u7DBNlSZIkdahp06ZtueOOOw4HuO222waffvrpG5vK1qxZ02P69Onjamtr6+rr68c/8sgjfQFWr17dY+rUqa+fMGFC3axZs8aU3iTv+uuvH3zcccdNGD9+fN2sWbPGNDTsfYPAqVOnvnDMMcfsd5IMJsqSJEnqYOeee+7GuXPnDtq5c2csXry435QpU3Y0lV1yySWj6uvrdy5btuyJq666auXs2bOPBrj00ktHTZkyZfvixYufmDlz5uZVq1b1BliwYEGfO++8c/D8+fOXLFmy5Imampp0ww03DOmIuE2UJUmS1KFOPvnkF1asWHHIjTfeOHj69OlbSsseffTR/hdccMEGgJkzZ27bvHlzzw0bNvR4+OGH+59//vkbAM4+++wtAwYMeAXg3nvv7b9o0aJ+9fX1E8aPH1/34IMPDli+fPkhHRF3+45TkSRJkiqYMWPG5iuvvPI1999//9K1a9f+IQctHVLRJCISQE3N3n26KaU444wzNlx33XUrOzJesEdZkiRJr4KLLrpo/cUXX/z8SSed9ELp9MmTJ2+bM2fOEIB58+b1HzRoUMPgwYMbJ0+evO2mm24aAnD77bcP2Lp1aw+AGTNmbJ03b96glStX9oQ8xnnZsmW9OyJmE2VJkqTuYgh7n/X2Ki1v3Lhxu6644oq15dOvueaa5xcsWNCvtra27rLLLht98803Pw1w9dVXP//QQw8dVldXN+G+++4bOHLkyJcBJk6c+OLll1++ctq0abW1tbV1p556au1zzz3Xq3y5n/70p4ePGDHi+DVr1vSur6+vO+uss8a0dfOiUnd3q2eOSQnm7/f8UlfhDUeqhDcckVQl4hweSylN6uw4Fi5c+Ex9ff36zo6jmi1cuHBofX392Epl9ihLkiRJFZgoS5IkSRWYKEuSJEkVmChLkiRJFZgoS5IkSRWYKEuSJEkVeGc+SZKk7uLOofW8vKH98r/eQxr4y/UL9/WWiJj47ne/e+Pdd9/9NMCuXbsYPnx4/QknnLDjgQceeLK1qxo9evRx8+fPXzxy5MhWXbt55syZRz/++OOH9urVK51wwgk7brnllmcPOeSQNl3R1R5lSZKk7qI9k+RWLq9v376NS5cu7bt9+/YAuOuuuwaMGDFiV7vGUcE555yzcfny5YuWLl362xdffDG++MUvDm3rMkyUJUmS1KGmTZu25Y477jgc4Lbbbht8+umnb2wqW7NmTY/p06ePq62trauvrx//yCOP9AVYvXp1j6lTp75+woQJdbNmzRpTepO866+/fvBxxx03Yfz48XWzZs0a09CwdyfzWWedtaWmpoaamhomTZq0Y8WKFW2+zbWJsiRJkjrUueeeu3Hu3LmDdu7cGYsXL+43ZcqUHU1ll1xyyaj6+vqdy5Yte+Kqq65aOXv27KMBLr300lFTpkzZvnjx4idmzpy5edWqVb0BFixY0OfOO+8cPH/+/CVLlix5oqamJt1www1Dmlv3Sy+9FHPnzh1y2mmnbWlr3CbKkiRJ6lAnn3zyCytWrDjkxhtvHDx9+vQ9EtZHH320/wUXXLABYObMmds2b97cc8OGDT0efvjh/ueff/4GgLPPPnvLgAEDXgG49957+y9atKhffX39hPHjx9c9+OCDA5YvX35Ic+uePXv2UZMnT94+Y8aM7W2N25P5JEmS1OFmzJix+corr3zN/fffv3Tt2rV/yEFLh1Q0iYgEUFOzd59uSinOOOOMDdddd93KltZ58cUXj1y/fn3P++6776n9idkeZUmSJHW4iy66aP3FF1/8/EknnfRC6fTJkydvmzNnzhCAefPm9R80aFDD4MGDGydPnrztpptuGgJw++23D9i6dWsPgBkzZmydN2/eoJUrV/aEPMZ52bJle40//vznPz/05z//+cC77757eY8ePfYrZnuUJUmSuoveQxra/fJwrTRu3LhdV1xxxdry6ddcc83zs2bNGltbW1vXt2/fxptvvvlpgKuvvvr5008//bV1dXUTpkyZsn3kyJEvA0ycOPHFyy+/fOW0adNqGxsb6dWrV/ryl7/8+9ra2pdLl3vJJZeMGTly5EuTJk2aAPDOd75z07XXXruqLZsXlbq7Wz1zTEowf7/nl7qK/W9Falffic6OQJIAiHN4LKU0qbPjWLhw4TP19fXrOzuOarZw4cKh9fX1YyuVOfRCkiRJqsBEWZIkSarARFmSJKnramxsbHRcWjOKfdPYXLmJsiRJUte1aN26dQNNlvfW2NgY69atGwgsau49XvVCkiSpi2poaLhw9erV31i9evWx2EFarhFY1NDQ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\n", + "image/png": "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T55c98QTTxzb0riVKIuIiIhIXl155ZVbZs2aVbVr1y6rra3tMmrUqJ3psmnTpvVNpVK7li1b9vott9yyZtKkSScDXHfddX1HjRpVX1tb+/r48eO3rlu3riPAwoULj3r44Ye7z58/f8mSJUteLysr83vuuadH5vY2bNhQ0bVr130dOnQAYMCAAXs2bNjQsaVxK1EWERERkbw6++yzd69evbrTvffe233s2LHbMsteeeWVrlOmTKkDGD9+/I6tW7dW1NXVlb/00ktdJ0+eXAcwYcKEbZWVlfsA5s2b13Xx4sVdUqnU4EGDBtU8//zzlcuXL++Uuc7M3uc0M2vx3T90MZ+IiIiI5N24ceO23nTTTSc+9dRTSzdu3PhuDnqwpLas7MA+XXe3Sy65pO7uu+9e09S2jj/++IYdO3aU7927lw4dOrBy5cqOvXr1avG4aPUoi4iIiEjeXX311ZunTp26dsSIEbszp48cOXLHjBkzegDMnTu3a1VVVUP37t0bR44cueP+++/vATB79uzK7du3lwOMGzdu+9y5c6vWrFlTAWGM87Jly/YbVlFWVpZebxXA/fff3+P888/f2tKYlSiLiIiItBM9epDTrdXysb6BAwfuvfHGGzdmT7/jjjvWLly4sEt1dXXN9ddf3++BBx5YAXD77bevfeGFF46pqakZ/OSTT3br06fPHoBhw4a9fcMNN6wZM2ZMdXV1dc25555bvWrVqg7Z6/3Wt761+vvf//7xJ5100plvvfVWxbXXXru5pftnSd3duRo+fLjPnz//kJcXERERKUVmtsDdhxc7jkWLFq1MpVItThDbk0WLFvVMpVIDksrUoywiIiIikkCJsoiIiIhIAiXKIiIiIiIJlCiLiIiIiCQ4rER5b96f0i0iIiIiUhyH9cCR114Ds9YKRaR0Hfq9ZaRV/IcaKhERaTkNvRARERFpL3qSwhjWaq+epJrbpJkNu/DCC09O/713716qqqpSH/3oR09tSej9+vUbsm7dupw7eW+77bbjTjrppDPNbFhLlsukRFlERESkvag7vNEEh7K+zp07Ny5durRzfX29ATz22GOVvXv3zvsA3nPOOaf+6aefXta3b989h7oOJcoiIiIikldjxozZNmfOnGMBZs6c2f3iiy/eki7bsGFD+dixYwdWV1fXpFKpQS+//HJngPXr15ePHj36tMGDB9dMnDixf+ZD8qZPn959yJAhgwcNGlQzceLE/g0NBz4gcPTo0btPP/30Q06SQYmyiIiIiOTZlVdeuWXWrFlVu3btstra2i6jRo3amS6bNm1a31QqtWvZsmWv33LLLWsmTZp0MsB1113Xd9SoUfW1tbWvjx8/fuu6des6AixcuPCohx9+uPv8+fOXLFmy5PWysjK/5557euQjbiXKIiIiIpJXZ5999u7Vq1d3uvfee7uPHTt2W2bZK6+80nXKlCl1AOPHj9+xdevWirq6uvKXXnqp6+TJk+sAJkyYsK2ysnIfwLx587ouXry4SyqVGjxo0KCa559/vnL58uWd8hF3645TERERERFJMG7cuK033XTTiU899dTSjRs3vpuDZg6pSDMzBygrO7BP193tkksuqbv77rvX5DNeUI+yiIiIiBTA1VdfvXnq1KlrR4wYsTtz+siRI3fMmDGjB8DcuXO7VlVVNXTv3r1x5MiRO+6///4eALNnz67cvn17OcC4ceO2z507t2rNmjUVEMY4L1u2rGM+YlaiLCIiItJe9ODAq94KtL6BAwfuvfHGGzdmT7/jjjvWLly4sEt1dXXN9ddf3++BBx5YAXD77bevfeGFF46pqakZ/OSTT3br06fPHoBhw4a9fcMNN6wZM2ZMdXV1dc25555bvWrVqg7Z67311lt79e7d+6wNGzZ0TKVSNZdddln/lu6eJXV357ywDXeYf8jLi7QXeuBIkemBIyJSYHYFC9x9eLHjWLRo0cpUKrW52HEcyRYtWtQzlUoNSCpTj7KIiIiISAIlyiIiIiIiCZQoi4iIiIgkUKIsIiIiIpJAibKIiIiISAIlyiIiIiIiCfRkPhEREZH24uGeKfbUtV7+17FHA5/avOhgs5jZsAsuuGDL448/vgJg79699OrVKzV06NCdzz777F9y3VS/fv2GzJ8/v7ZPnz453bt5/PjxJ7/22mtHd+jQwYcOHbrzwQcffLNTp04tumOrepRFRERE2ovWTJJzXF/nzp0bly5d2rm+vt4AHnvsscrevXvvbdU4ElxxxRVbli9fvnjp0qV/evvtt+273/1uz5auQ4myiIiIiOTVmDFjts2ZM+dYgJkzZ3a/+OKLt6TLNmzYUD527NiB1dXVNalUatDLL7/cGWD9+vXlo0ePPm3w4ME1EydO7J/5kLzp06d3HzJkyOBBgwbVTJw4sX9Dw4GdzJdddtm2srIyysrKGD58+M7Vq1e3+DHXSpRFREREJK+uvPLKLbNmzaratWuX1dbWdhk1atTOdNm0adP6plKpXcuWLXv9lltuWTNp0qSTAa677rq+o0aNqq+trX19/PjxW9etW9cRYOHChUc9/PDD3efPn79kyZIlr5eVlfk999zTo6ltv/POOzZr1qwe55133raWxq1EWURERETy6uyzz969evXqTvfee2/3sWPH7pewvvLKK12nTJlSBzB+/PgdW7durairqyt/6aWXuk6ePLkOYMKECdsqKyv3AcybN6/r4sWLu6RSqcGDBg2qef755yuXL1/eqaltT5o06aSRI0fWjxs3rr6lcetiPhERERHJu3Hjxm296aabTnzqqaeWbty48d0cNHNIRZqZOUBZ2YF9uu5ul1xySd3dd9+9prltTp06tc/mzZsrnnzyyTcOJWb1KIuIiIhI3l199dWbp06dunbEiBG7M6ePHDlyx4wZM3oAzJ07t2tVVVVD9+7dG0eOHLnj/vvv7wEwe/bsyu3bt5cDjBs3bvvcuXOr1qxZUwFhjPOyZcsOGH/87W9/u+czzzzT7fHHH19eXl5+SDGrR1lERESkvejYo6HVbw+Xo4EDB+698cYbN2ZPv+OOO9ZOnDhxQHV1dU3nzp0bH3jggRUAt99++9qLL774lJqamsGjRo2q79Onzx6AYcOGvX3DDTesGTNmTHVjYyMdOnTwu+6666/V1dV7Mtc7bdq0/n369Hln+PDhgwHOP//8t+688851Ldk9S+ruznlhG+4w/5CXF2kvDv0ok1bxH1bsCESknbErWODuw4sdx6JFi1amUqnNxY7jSLZo0aKeqVRqQFKZhl6IiIiIiCRQoiwiIiIikkCJsoiIiEjpamxsbNT4sybEumlsqlyJsoiIiEjpWrxp06ZuSpYP1NjYaJs2beoGLG5qHt31QkRERKRENTQ0XLV+/fr71q9ffybqIM3WCCxuaGi4qqkZlCiLiIiIlKhhw4ZtBMYXO462Sr8sREREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUlg7n7oC5vtAJa2XjgiJasnsLnYQbRjqn8RKbTT3b1rsYOQw1NxmMsvdffhrRKJSAkzs/k6VopH9S8ihWZm84sdgxw+Db0QEREREUmgRFlEREREJMHhJso/apUoREqfjpXiUv2LSKGp3SkBh3Uxn4iIiIhIqdLQCxERERGRBEqURUREREQStDhRNjPLRyAiIiIiIkeSVhmjbGYd3H1vK8QjUjLMLP1D1F0XAxSNmfUA9gENwE69FyIikqsWPXDEzCqADwPvAG8DmwAH/hm4ttWjE2nD3L0xabqZlQMj3P3FAofUrpjZIOA8oAroB/wFWAz8ZzHjEpHSZWaDgQmE/OhFd18Qpxtwiru/Ucz4pOVa1KNsZgOBl4HHga3AMUB3YCzwAFDn7t9o/TBF2hYz6wpcCOwkPDq5jnDMrAUGAI+4+/uLFmCJM7O+wLeANwl1fx6wAjga6ANc6O51xYtQREqNmfUBvgvsBRoJbf3N7v5rM+sP3OfuHytiiHIIWvoI663ATKASqAUWAGOAIcCLgMYviwQp4JvALKA30AnoSGhATyIMBZD8GQz0dPfLAczsF8BX3f1SM/sMIYn+TPHCE5ESdDpQ5e4fBzCzc4E7zWwKIXFWjtQGtShRdvc6M/sicDUwEHiC0EO21N3nmFmnPMQo0hb1BVYTkmUDjiL0Zu4mJGipokXWPuwB9prZhwinQM8nDBkD2AF0KVZgIlKyehHOImJmndz9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", "text/plain": [ "
" ] @@ -279,7 +279,7 @@ "''" ] }, - "execution_count": 5, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -294,11 +294,13 @@ "source": [ "## Adding labels\n", "\n", - "A label in MVG relates to a specific measurement, which are identifiable by the source ID and the timestamp. Each measurement can only have one label. The label itself has three components\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. And notes\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." ] @@ -312,7 +314,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -343,7 +345,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": { "pycharm": { "name": "#%%\n" @@ -380,75 +382,75 @@ " \n", " \n", " \n", - " 2\n", + " 3\n", " 1570446060\n", " 0\n", " False\n", - " 0.999575\n", + " 0.999620\n", " 2019-10-07 13:01:00+02:00\n", " \n", " \n", - " 7\n", + " 8\n", " 1570878060\n", " 0\n", " False\n", - " 0.996115\n", + " 0.996754\n", " 2019-10-12 13:01:00+02:00\n", " \n", " \n", - " 8\n", + " 9\n", " 1570964460\n", " 0\n", " False\n", - " 0.980702\n", + " 0.994076\n", " 2019-10-13 13:01:00+02:00\n", " \n", " \n", - " 17\n", + " 18\n", " 1571742060\n", " 1\n", " False\n", - " 0.996703\n", + " 0.997126\n", " 2019-10-22 13:01:00+02:00\n", " \n", " \n", - " 22\n", - " 1572177660\n", + " 20\n", + " 1571914860\n", " 1\n", " False\n", - " 0.996604\n", - " 2019-10-27 13:01:00+01:00\n", + " 0.995323\n", + " 2019-10-24 13:01:00+02:00\n", " \n", " \n", " 23\n", - " 1572264060\n", + " 1572177660\n", " 1\n", " False\n", - " 0.996323\n", - " 2019-10-28 13:01:00+01:00\n", + " 0.996432\n", + " 2019-10-27 13:01:00+01:00\n", " \n", " \n", - " 32\n", + " 33\n", " 1573041660\n", " 2\n", " False\n", - " 0.999899\n", + " 0.999948\n", " 2019-11-06 13:01:00+01:00\n", " \n", " \n", - " 36\n", + " 37\n", " 1573387260\n", " 2\n", " False\n", - " 0.999897\n", + " 0.999831\n", " 2019-11-10 13:01:00+01:00\n", " \n", " \n", - " 39\n", + " 40\n", " 1573646460\n", " 2\n", " False\n", - " 0.999187\n", + " 0.999388\n", " 2019-11-13 13:01:00+01:00\n", " \n", " \n", @@ -457,18 +459,18 @@ ], "text/plain": [ " timestamps labels uncertain mode_probability datetime\n", - "2 1570446060 0 False 0.999575 2019-10-07 13:01:00+02:00\n", - "7 1570878060 0 False 0.996115 2019-10-12 13:01:00+02:00\n", - "8 1570964460 0 False 0.980702 2019-10-13 13:01:00+02:00\n", - "17 1571742060 1 False 0.996703 2019-10-22 13:01:00+02:00\n", - "22 1572177660 1 False 0.996604 2019-10-27 13:01:00+01:00\n", - "23 1572264060 1 False 0.996323 2019-10-28 13:01:00+01:00\n", - "32 1573041660 2 False 0.999899 2019-11-06 13:01:00+01:00\n", - "36 1573387260 2 False 0.999897 2019-11-10 13:01:00+01:00\n", - "39 1573646460 2 False 0.999187 2019-11-13 13:01:00+01:00" + "3 1570446060 0 False 0.999620 2019-10-07 13:01:00+02:00\n", + "8 1570878060 0 False 0.996754 2019-10-12 13:01:00+02:00\n", + "9 1570964460 0 False 0.994076 2019-10-13 13:01:00+02:00\n", + "18 1571742060 1 False 0.997126 2019-10-22 13:01:00+02:00\n", + "20 1571914860 1 False 0.995323 2019-10-24 13:01:00+02:00\n", + "23 1572177660 1 False 0.996432 2019-10-27 13:01:00+01:00\n", + "33 1573041660 2 False 0.999948 2019-11-06 13:01:00+01:00\n", + "37 1573387260 2 False 0.999831 2019-11-10 13:01:00+01:00\n", + "40 1573646460 2 False 0.999388 2019-11-13 13:01:00+01:00" ] }, - "execution_count": 7, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -492,7 +494,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": { "pycharm": { "name": "#%%\n" @@ -526,14 +528,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Reading Labels\n", + "### 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": 9, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -543,55 +545,55 @@ " 'label': 'bearing_failure',\n", " 'severity': 3,\n", " 'notes': 'Imaginary bearing failure',\n", - " 'label_timestamp': '2022-02-09 14:08:51'},\n", + " 'label_timestamp': '2022-03-02 19:39:40'},\n", " {'timestamp': 1570446060,\n", " 'label': 'Healthy',\n", " 'severity': 1,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " 'label_timestamp': '2022-03-02 19:40:23'},\n", " {'timestamp': 1570878060,\n", " 'label': 'Healthy',\n", " 'severity': 1,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " 'label_timestamp': '2022-03-02 19:40:23'},\n", " {'timestamp': 1570964460,\n", " 'label': 'Healthy',\n", " 'severity': 1,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " 'label_timestamp': '2022-03-02 19:40:24'},\n", " {'timestamp': 1571742060,\n", " 'label': 'Transition',\n", " 'severity': 2,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:06'},\n", - " {'timestamp': 1572177660,\n", + " 'label_timestamp': '2022-03-02 19:40:24'},\n", + " {'timestamp': 1571914860,\n", " 'label': 'Transition',\n", " 'severity': 2,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:06'},\n", - " {'timestamp': 1572264060,\n", + " 'label_timestamp': '2022-03-02 19:40:24'},\n", + " {'timestamp': 1572177660,\n", " 'label': 'Transition',\n", " 'severity': 2,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " 'label_timestamp': '2022-03-02 19:40:24'},\n", " {'timestamp': 1573041660,\n", " 'label': 'Faulty',\n", " 'severity': 3,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:07'},\n", + " 'label_timestamp': '2022-03-02 19:40:24'},\n", " {'timestamp': 1573387260,\n", " 'label': 'Faulty',\n", " 'severity': 3,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:07'},\n", + " 'label_timestamp': '2022-03-02 19:40:25'},\n", " {'timestamp': 1573646460,\n", " 'label': 'Faulty',\n", " 'severity': 3,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:07'}]" + " 'label_timestamp': '2022-03-02 19:40:25'}]" ] }, - "execution_count": 9, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -604,12 +606,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "As you can see, the measurements that we just added labels show up. To inspect the label of a specific measurement we use `MVG.get_label()`" + "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": 10, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -618,10 +621,10 @@ "{'label': 'bearing_failure',\n", " 'severity': 3,\n", " 'notes': 'Imaginary bearing failure',\n", - " 'label_timestamp': '2022-02-09 14:08:51'}" + " 'label_timestamp': '2022-03-02 19:39:40'}" ] }, - "execution_count": 10, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -634,7 +637,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Updating labels\n", + "### 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." @@ -642,7 +645,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -652,61 +655,60 @@ " 'label': 'healthy',\n", " 'severity': 0,\n", " 'notes': 'This was an OK measurement',\n", - " 'label_timestamp': '2022-02-09 14:08:51'},\n", + " 'label_timestamp': '2022-03-02 19:39:40'},\n", " {'timestamp': 1570446060,\n", " 'label': 'Healthy',\n", " 'severity': 1,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " 'label_timestamp': '2022-03-02 19:40:23'},\n", " {'timestamp': 1570878060,\n", " 'label': 'Healthy',\n", " 'severity': 1,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " 'label_timestamp': '2022-03-02 19:40:23'},\n", " {'timestamp': 1570964460,\n", " 'label': 'Healthy',\n", " 'severity': 1,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " 'label_timestamp': '2022-03-02 19:40:24'},\n", " {'timestamp': 1571742060,\n", " 'label': 'Transition',\n", " 'severity': 2,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:06'},\n", - " {'timestamp': 1572177660,\n", + " 'label_timestamp': '2022-03-02 19:40:24'},\n", + " {'timestamp': 1571914860,\n", " 'label': 'Transition',\n", " 'severity': 2,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:06'},\n", - " {'timestamp': 1572264060,\n", + " 'label_timestamp': '2022-03-02 19:40:24'},\n", + " {'timestamp': 1572177660,\n", " 'label': 'Transition',\n", " 'severity': 2,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:06'},\n", + " 'label_timestamp': '2022-03-02 19:40:24'},\n", " {'timestamp': 1573041660,\n", " 'label': 'Faulty',\n", " 'severity': 3,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:07'},\n", + " 'label_timestamp': '2022-03-02 19:40:24'},\n", " {'timestamp': 1573387260,\n", " 'label': 'Faulty',\n", " 'severity': 3,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:07'},\n", + " 'label_timestamp': '2022-03-02 19:40:25'},\n", " {'timestamp': 1573646460,\n", " 'label': 'Faulty',\n", " 'severity': 3,\n", " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-02-09 14:09:07'}]" + " 'label_timestamp': '2022-03-02 19:40:25'}]" ] }, - "execution_count": 11, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "\n", "session.update_label(\n", " sid=SOURCE_ID,\n", " timestamp=first_measurement,\n", @@ -724,7 +726,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Plotting labels\n", + "### 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", @@ -735,7 +737,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -744,13 +746,13 @@ "[]" ] }, - "execution_count": 12, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAskAAADQCAYAAAD1c/yXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nO2de3xV1bXvfyOgAgKFCkJBisgjPFpLsfgqVTxaa+nRVr3a2lsVrShWb1u0lN7e2uexxx71Vi2+ehVrta2W9nhaWl9VUdtq7dkg74SHoCgQMLwSSHgkjPvHWitsd3aSNcfODHOsjO/nMz8k2XP99thjjjn5ZWWutYiZYRiGYRiGYRjGQcoOdQCGYRiGYRiGERpmkg3DMAzDMAyjADPJhmEYhmEYhlGAmWTDMAzDMAzDKMBMsmEYhmEYhmEUYCbZMAzDMAzDMAowk2wYCiCiF4noqo4+NhSI6CkiuryD3uvfiKiaiKo64v0MwzCMMDGTbBgdCBG9SURnHeo4QoaIvk9Ej+b/jJk/zcwPd8B7DwFwI4CxzDzQ9/vF7/lFInqLiHYT0X8R0fvzXjuCiOYQUQ0RVRHRDQXHjieiBURUF/87Pu+1DxHRM7HhtxviG4ZhOGIm2TCMQwYRdT3UMRQwFMBWZt7ieqDksxDROAD3A7gUwAAAdQDuyevyfQAj47jOAPBNIjonPvZwAH8A8CiAvgAeBvCH+OcAsB/AbwF82TUuwzAMw0yyYQQBEfUloj8R0btEtD3++piCbsOJ6J9EtJOI/lBwxvFkInqFiHYQ0WIimtzC+4wgopdijWoieryVmM4jouWx5otENCb++beI6HcFfe8korvir99HRA8S0SYi2hBvX+gSvzaViP5ORD8lom2ITGC+zjkAvg3g80S0i4gWxz9v2jJSoLGDiNYS0anxz98moi35WzPis7G3EdF6ItpMRPcRUfcin/csAH8BMCh+71+0lof4tTeJaBYRLQGwu9AoE9GxRMT5Py/Y/vI/Acxj5peZeReAmwBcQES94tcvA/AjZt7OzBUA/h+AqfFrkwF0BXAHM+9l5rsAEIB/AQBmXsnMDwJY3nx0DcMwjLYwk2wYYVAG4CFEZww/CKAewOyCPpcBuBLAIAANABJTOhjAnwH8G4D3A/gGgN8TUf8i7/MjAM8iOvN4DICfFQuGiEYB+A2ArwPoD+BJAPPis5S/ATCFiHrHfbsAuBjAr+PDH47jGwHgowDOBpC/J/okAGsBHA3g5vz3ZeanAfwYwOPM3JOZP1IsvlhjCYCj4vd9DMDE+D2/BGA2EfWM+/4EwCgA4+PXBwP4bqEgMz8H4NMANsbvPbWNPCRcAuAzAPowc0ML8bbEOACL82J4A8A+AKOIqC+isV6c139xfExy7BJmzt9KsSTvdcMwDKMEzCQbRgAw81Zm/j0z1zFzLSLzeHpBt0eYeRkz70Z0xvHi2KB+CcCTzPwkMx9g5r8AyAGYUuSt9iMy4oOYeQ8z/62FkD4P4M/M/Bdm3g/gNgDdAZzKzG8BWAjgc3HffwFQx8z/IKIBiIzm15l5d7xt4acAvpCnvZGZf8bMDcxc75KnPNYx80PM3AjgcQBDAPwwPqP6LCKjOYKICMA0ADOYeVuc2x8XxNMaLeYhr89dzPy28LP0BLCz4Gc7AfSKX0PB68lrbR1rGIZhlIiZZMMIACLqQUT3xxdw1QB4GUCfZJtCzNt5X78F4DAA/RCZ3ovi7QA7iGgHgEkAPlDkrb6J6E/y/4y3EFzZQkiD4vcAADDzgfj9B8c/+jWiM6gA8EUcPIs8NI5rU14s9yM6a1zsc0jZnPd1fRxj4c96Ijr72wPAgrx4no5/noa28gCU9nl2Aehd8LPeAGrj11DwevJaW8cahmEYJWIm2TDC4EYA5QBOYubeAE6Lf055fYbkff1BRGeFqxGZtEeYuU9eO5KZbyl8E2auYuZpzDwIwDUA7iGiEUXi2YjI8EZBRGdkhwDYEP9oLoDJ8b7p83HQJL8NYC+Afnmx9Gbm/C0Abd1poT3vxFCNyDCPy4vnfczcs60DY9rKA9B6vLvjf3vk/Sz/rhnLATRtKSGi4wAcAWAVM28HsCn/9fjr5XnHHh/HlHA8bA+yYRhGu2Am2TA6nsOIqFte64roT+T1AHbEF+R9r8hxXyKisUTUA8APAfwu3m7wKIBziehTRNQl1kwM7Hsgoovyfr4dkcFrLPJevwXwGSI6k4gOQ2Ti9wJ4BQCY+V0ALyLaR70uvqgMzLwJ0Z7n24moNxGVEdFwIircOtIamwEcS0Qlr0/xmd//B+CnRHQ0EO3hJqJPpZRoNQ8p3v9dRIb6S/HYXAlgeF6XXyEau08Q0ZGIxvU/420hAPBLAN+h6MLO0Yi2jvwifu1FRGP31fjixOvjn78Qf04iom4ADo+/70ZER6T83IZhGJ0eM8mG0fE8icgQJ+37AO5AtNe1GsA/EG0JKOQRRAapCkA3AF8FAGZ+G8BnEd0V4l1EZ3Nnovj8ngjgNSLaBeCPAL7GzOsKOzHzSkR7nX8Wx3QugHOZeV9et18DOAsHzyInXIbImK1AZMR/h+JbP1pibvzvViJa6HBcS8wCsAbAP+KtLM8hOmvfJinz0BbTEI3HVkQX1TUZbGZeDmA6IrO8BdEvS1/JO/Z7AN5AtOXjJQC3xhc3Io7hc4jyvQPRRZ2fy4ttKKL6Ss4s1wNY6RC3YRhGp4bee2G0YRiGYRiGYRh2JtkwDMMwDMMwCjCTbBiGYRiGYRgFmEk2DMMwDMMwjALMJBuGYRiGYRhGAV1LObisrIzTXvj3kV5ub7Z0N7DvQPr+HxnwPnQto7Y7Ali6pQb7Gh3EA8Llc7qyZPNO7D9gF3J2NOMGH42uXdL9vrp8wxY0ONSui7ZE3xWXeFZseBf7G4vdnc4IhcEoRxm6tN0xZiNWoxH7PUaUnpBiDykWo0WqmTntQ4iMrMDM4gaAGxsbmZl57dq1PHToUJ49ezYnzJ8/n/v168fz589n/iScGgCeNm1aev3vfS51A8CTJk1y04+ZPXs2Dx06lNeuXcvMzI2NjTxt2jSeNGkS19TUMDNzTU2NP32Hz+naonLwHL/pN9PffM+3U7dkjNLqu2hL9F3z4xpLFsY3y/qzsdSpAQgmfknsvvIviSUL9aNJH0COS/BL1nS20g6O/0NNVYACk+xU4I5mUNsETfR9m2StC5hmfYmJ9WHAJfqu+XGNJQvjm2V9ibkLJf6QDL4klizUjyZ9M8mds5V2cLzgpSlAiUlmTl/grmZQ2wRN9H2bZK0LmGZ9V+Poy4BL9F3z4xpLFsY3y/oScxdK/EEZfGEetdePJn0zyZ2zlXZw/Jt1mgKUmGSXApdsK9A0QRN93yZZ6wKmWd/VOPoy4BJ91/y4xpKF8c2yvvQMaAjxh2TwpYZde/1o0jeT3DlbSRfuAcDMmTNx3XXXAQBefPFFXHTRRZg7dy4mT54MALj77rtx66234rpR7tpnnHFGev2pH3XSXrdunZP+/PnzMWzYMBw4cADTp09HRUUFnnzySfTq1Qu1tbWYMmUKxowZg/vuuw9lZWXe9KOnDvvDd/ym31y/3nGMXPTrH73FuQZ85mesYyxZGN9M6+NPzvUVSvwSfOV/Jk53jiUT9aNIPwQWLFhwdNeuXR8A8CHY3cnagwMAljU0NFx1wgknbCnaoxSHDZeLfARnkp1+A3Q8Y6rpN9j36Hs+k+w9ftNvpi+9sC6NvnRPsq/8SM4kax/fLOtLzoAGE78gdl/5l8SShfrRpI8AziQvWrToj1VVVasbGxsXMHPOWmmtsbFxQVVV1ZpFixb9saWct4tJTlOA0j3JqfUdzaC2CZro+zbJWhcwzfoSE+vDgEv0XfMj2ZOsfXyzrC8xd6HEH5LBl2790F4/mvQDMclrzSC3v1FetGjR2pZyXrJJTluAUpOcWl9wxtRF/1BP0ETft0nWuoBp1nc1jr4MuETfNT+usWRhfLOsLzV3IcQfksGX5lF7/WjSD8Qkv8kBGMustTivfkxy2gKUmGSXApeYZE0TNNH3bZK1LmCa9V2Noy8DLtF3zY9rLFkY3yzrS41mCPGHZPAlsWShfjTpm0nObvNqktMWoMQkuxS4qxnUNkGb9D2bZO/xm34zfVfj6MuAS/Rd8yPZ+qF9fLOsL92yEEL8IRl8SSxZqB9N+kGa5AuP2u/qrVptFx61n9swlJWVlUtGjBhR31a/ttqdd9657tJLL93CzLlf/vKXa3K53LLktYkTJ9a+9NJLK0p9j7TNq0lOXYDCM8mp9R3NoLYJ2qTfASZZ4wKmWV9iHH0YcIm+a34khl37+GZZX2LuQok/JIMvPZOsvX406QdpktvTICftEJjkCy64oHrOnDlvJK9lziSnKcBSLtxLpS84k+yif6gnaBOeTbLWBUyzvmQLgg8DLtF3zY9k64f28c2yvsTchRJ/SAZfuvVDe/1o0jeTfNAkDxs2rP7zn//8u8OHD68/9dRTd9bW1i5YtmzZ0kmTJu0cO3bs7gkTJtQuXLhwGTPnfvWrX63+8Ic/vGv06NF1p5xySs369esXcZ5JfvbZZyt69+7dMGjQoL3l5eV1y5YtWzpx4sTa6dOnb/rQhz60e+jQoXueeuqpSmbOTZgwofbvf//78iSWj370o7v+8Y9/LG8r5raaV5OctgClJjm1vnBbgZYJmuj7NslaFzDN+q7G0ZcBl+i75sc1liyMb6b1heYuhPhDMvjSPKqvH0X6ZpIPmuQuXbpwYlY//elPb7v77rvXnnzyyTVLlixZysy5559/vuKkk06qYebcli1bXm9sbMwxc+72229/86qrrqriFGeSk36PPfbY6lNOOaWGmXN33XXXuiuuuGIzM+cWL168dNy4cbvbijdN82qS0xagxCS7FLjEJGuaoIl+R5xJ9hm/6TfXdzWOvgy4RN81P5KtH9rHN8v6EnMXTPwBGXxJLFmoH036ZpIPmuQPfvCDe5Lvv/3tb78zc+bMDUccccSB8vLyuqQNGzasnplzr7322vJTTz1158iRI+uGDh26Z9KkSTs5hUl+5plnKpg5t379+kVDhgzZw8y5mpqahUOGDNmzZ8+eBddee+2mm2+++a224k3TvJrktAUoMckuBe5qBrVN0CZ9zybZe/ym30zf1Tj6MuASfdf8SEyy9vHNsr7E3IUSf0gGX5pH7fWjSd9M8kGTnL8n+aabbnr7y1/+clW/fv32Fes/ceLE2kcffXQ1M+fmzZu3cuLEibWcwiQne5I3bty4aNCgQXuT1774xS9umTNnzhuDBw/eW1VV9Xpb8aZp3vckpypAgUl2KnBHM6htgjbpd4BJ1riAadaXGEcfBlyi75of11iyML5Z1peeAQ0h/pAMvtSwa68fTfpmkls2yTNmzNg4fvz4XQ8++OAbzJxrbGzMvfLKK8uZOTd69Oi6l19+eQUz5y688MLqYib5sssu23zHHXesSzRbM8kvv/zyiv79+++bMmXKtrZiTdu8muS0BSgxyS4F7moGtU3QJjybZK0LmGZ9yZleHwZcou+aH9dYsjC+WdaXblkIIf6QDL40j9rrR5N+kCY5gFvAJSa5oqJiyaRJk3aOGjWq7rjjjqu/8cYbNzBz7pFHHlkzePDgvRMmTKi9+uqrq4qZ5GeeeabiuOOOqx89enTThXstmWRmzh177LH1c+fOXdVWrGmbV5OctgAlJtmlwCVnTDVN0ETft0nWuoBp1pfsGfZhwCX6rvmRnEnWPr5Z1peauxDiD8ngS2LJQv1o0g/SJHfCtm7dusVDhw7d09DQ0G6aXk1y2gKUmGSXAnc1g9omaKLv2yRrXcA067saR18GXKLvmh/J1g/t45tlfYm5CyX+oAy+IJYs1I8mfTPJh7797Gc/WzdgwIB9ybaO9mpeTXLqAhSYZKcCdzSD2iZok75nk+w9ftNvpu9qHH0ZcIm+a34kJln7+GZZX2LuQok/JIMviSUL9aNJ30xydpv3C/dSFaDAJDsVuKMZ1DZBE33fJlnrAqZZX2IcfRhwib5rflxjycL4ZllfajRDiD8kgy+JJQv1o0nfTHJ2m/czyWkKUHrhXmp9RzOobYIm+r5NstYFTLO+q3H0ZcAl+q75cY0lC+ObZX3ploUQ4g/J4EvzqL1+NOmbSc5u874nOU0BSs8kp9YXbCvQNEETfd8mWesCpllfYhx9GHCJvmt+JIZd+/hmWV9q7kKIPySDLz2TrL1+NOmbSc5u8353izQFKN2TnFpfcCZZ0wRN9H2bZK0LmGZ9yRaEtPoSk+wzP5KtH9rHN8v6EnMXSvwhGXxJLFmoH036ZpKz27zfJ5k5RQEK726RWl9wxlTTBG3S92ySvcdv+s30JcYxrb7EJPvMj2ssWRjfLOtLzF0o8Ydk8CWxZKF+NOkHaZJvuXR/u/qAWy5t8z7J3bt3b8z/Pv9+x65t3rx5KydPnrwj+frZZ5+tSF4rfAqfz9aaSS5DiZSVlWHdunU444wzMHPmTFx33XUAgBdffBEXXXQR5s6di8mTJ4u077vvPm/6Y8aMcda/++67ceutt2L+/PkYNmwYDhw4gOnTp6OiogJPPvkkevXqhdraWkyZMsWbvm98x2/6zfUlpNWX4is/rmRhfLOsLyGU+CX4zL8rWagfTfpBUl/bNWg9B1544YVef/3rX3seqvdvkVJ+q4HDRT7SC/dS6zueMdX0G2y+fkfsSdb2G752fdezqy76kjPJPvPjGksWxjfL+tItCyHEL4ndW/6FedReP5r0EeKZZB9eoIQzyRs2bFh09tlnbx83btzucePG7X7mmWcqmDn3wgsvrBg/fvyu0aNH140fP37XokWLlnLemeTKysolRx111P7+/fvvKy8vr3vqqacqL7jggurLL7988/jx43cNHjx4b3JW+bOf/ezWRx55ZE3y/ueee+7WRx99dHVbcbfWvG63SFuAEpPsUuCSbQWaJmii79ska13ANOu7GkdfBlyi75of11iyML5Z1peYu1DiD8ngSw279vrRpG8mOWplZWVcXl5el7SBAwfuTUzyv/7rv259+umnK5k5t2rVqiXDhg2rZ+bc1q1bF+7bty/HzLknnnhi5dlnn72dC7ZbzJgxY+NNN930dvI+F1xwQfU555yzraGhIZfL5ZYNGTJkDzPn/vSnP1WeeeaZ25k5V11d/fqgQYP2JtrS5tUkpy1AiUl2KXBXM6htgib6vk2y1gVMs77kTG9afemZZF/5keyP1j6+mdYX7qUNIf6QDL4klkzUjyJ9M8ltn0nu27fv/nwD3b9//33btm1buHr16sVnnXXW9hEjRtSPHDmy7thjj63nFCb5nnvuWZt836NHj6b3HTFiRP0777yz6Cc/+clb06ZNq2or5raa1z3Jaff4SHDZQ+SKhj1Q7bUH0AVNe8Syou+K7z3sPvPjShbGN8v6EkKJX4Kv/EvIQv1o0jfahpmRy+UqKisrV1RWVq7YsmXLkr59+x6YNWvW4NNPP7129erVy+fNm7dm3759qbxnt27dOF874eKLL976wAMPvP/RRx896uqrr6728FGaKNkkA+kKUIJLgbuibYIm+r7RuoBp1pfgy4C76rvmx5UsjG/W9V0JJX4JvvIvISv1o0XfaJtJkybV/OQnPzk6+f6VV17pDgA1NTVdjjnmmH0AcP/99/crdmyvXr0aa2tru6R5n+nTp1fff//9AwDgYx/72J7SI2+Zkl1XKFfZu6Jtgib6vtG6gGnWdyUUA94RV/FnYXyzrC9Bc/y+8i9Fe/1o0g+S7r0aQtL7+c9//vbChQuPHDVq1Njhw4ePmz17dn8AmDVrVtX3v//9YyZMmDC6sbGx6LEXXnjhjj//+c99Ro8ePfbpp59u9S4XQ4YMaRg+fPieL33pS1tLiTcVpeyPgcNFPpI9yS57iCQX7oW+B6qYvu89yZr2iGVF33Wfrou+ZE+yz/y4xpKF8c2yvmQvbSjxSy/c8xG/JJYs1I8mfYS4J7mTtpqamoXHHHPMnurq6tfbQ8/rhXtpC1Bikn09iU71AuPZJHuP3/Sb6bsaR18GXKLvmh/JhXvaxzfL+hJzF0r8IRl8SSxZqB9N+maSw2hPPPHEyoEDB+79wQ9+sL69NL2a5IQ2C1B4Jjm1vqMZ1DZBm/Q7wCRrXMA060uMow8DLtF3zY/EsGsf3yzrS+9uEUL8IRl86Zlk7fWjSd9Mcnabd5OcpgClDxNJrS84k+yif6gnaBOeTbLWBUyzvmQLgg8DLtF3zY9k64f28c2yvsTchRJ/SAZfuvVDe/1o0jeTnN3m/T7JaQpQapJT6wu3FWiZoIm+b5OsdQHTrO9qHH0ZcIm+a35cY8nC+GZaX2juQog/JIMvzaP6+lGkbyY5u837E/fSFKDEJLsUuMQka5qgiX5HnEn2Gb/pN9d3NY6+DLhE3zU/kq0f2sc3y/oScxdM/AEZfEksWagfTfpmkrPbvJrktAUofeJean1HM6htgjbpezbJ3uM3/Wb6rsbRlwGX6LvmR2KStY9vlvUl5i6U+EMy+NI8aq8fTfpmkrPbvO9JTlWAApPsVOCOZlDbBG3S7wCTrHEB06wvMY4+DLhE3zU/rrFkYXyzrC89AxpC/CEZfKlh114/mvRDNMlbHvy3/a5rfGtty4P/tp9bMZObNm16PXnk9FFHHbW/f//++5Lv6+vrF7R2rKStXr168ZQpU7Yxc+6vf/3rirlz565KXnv44YfXfOc733m7Pd7Hq0lOW4DSPcmp9R3NoLYJ2oRnk6x1AdOsLznT68OAS/Rd8+MaSxbGN8v60i0LIcQfksGX5lF7/WjSD9Ekt6dBThqnNJYzZszYeNNNNzUzqY2NjbmGhoZ2P9t7++23v3nFFVdsbm9d9m2S0xagxCS7FLjkjKmmCZro+zbJWhcwzfquxtGXAZfou+ZHciZZ+/hmWV9q7kKIPySDL4klC/WjSd9McssmeenSpUtHjBhRf8kll2wZPXp03dq1axd/4QtfeHfcuHG7hw8fXn/jjTduSI47+uij982YMWPj6NGj60aOHFm3ePHipcyc+8Mf/rBy1KhRdeXl5XVjxozZvXPnzoVLly5dWl5eXldbW7tg4MCBe/v06bO/vLy8bs6cOW/km+aKioolJ554Ys3IkSPrTjnllJ1r1qxZzMy58847b+vUqVM3jx8/ftfgwYP3Pvzww2uKfZbWTHLJz1pM+6hICS6PonQllEdduur7xnf8pt+xj2qW4DM/rmRlfLOqLyGU+KX4iF9CFupHk77ROm+88Ua3a665prqiomLFsGHD9t9xxx3vLFu2rKKiomL5/Pnzey9YsKBb0nfAgAH7KyoqVlx22WXVt9xyywAAuO222wbee++9b1VWVq549dVXV/bo0aNpkvbs2ZNnzpy56fzzz99WWVm54oorrtie/95XX3310KlTp1avWrVqxQUXXLD9uuuuG5K8Vl1d3XXBggWVv//979d873vfG+z6uUo2yWkLUIJLgbuibYIm+r7RuoBp1nclNH2X/EjQPr5Z1pcQSvwSfOVfQhbqR5O+0TpDhgzZe/rpp9cl38+ZM+f9Y8eOHTNu3Lixa9eu7bZkyZLuyWtf/OIXtwPAiSeeuPvtt98+AgBOPvnkXTfccMOQm2+++ejt27d36dq1a+r3Xrx48ZHTpk3bBgBf+cpXtv73f/93r+S18847b0dZWRlOOumk+i1bthzu+rlKNskuBeiKa4G7oG2CJvq+0bqAadZ3xadBdtV3zY8rWRjfLOtLCCV+CT7z70oW6keTvtE63bt3bzrzu3Tp0iPuv//+AS+//PKqVatWrTjttNNq6uvrKa8vA0CXLl3Q2NhIAPAf//Efm+6///63du3aVXbiiSeOWbp06RHtEVe3bt04+TraNeNGySbZ1wIAhGXAD/UELfVPhGnRuoBp1nfF958IfebHlSyMb5b1JYQSv4RQDDLg9v9jqPWjSd9Iz44dO7oceeSRjX379m186623Dnv55Zd7t3XM8uXLjzjppJPq//3f/71q3LhxdcuWLeuW/3qvXr0ad+3aVdSzjh8/fteDDz74fgC47777jjrxxBPd9/a1QMkmOW0BSnApcFe0TdBS/kTogtYFTLO+K77/ROgzP65kYXyzrC8lhPgl+Mq/hCzUjyb9EKEjejSEqPfxj3+8buTIkXtGjRo1burUqUNPOOGEXW0d8+Mf/3jAyJEjx40aNWps7969G88///ya/Nc/85nP1K5YsaLHmDFjxj700EN981+7995718+ZM6ffqFGjxv7ud7/rO3v27Lfb43MAaJ+7W6S5SlRydwuXq1Bd7+IQ8lW0ren7vruFhquMs6bvescHF33J3S185sc1liyMb5b1pbdRCyF+6d0tfMQviSUL9aNJHwHe3cKaglvApS5AgUl2KnBHM6htgjbpezbJ3uM3/Wb6EuOYVl9ikn3mxzWWLIxvlvUl5i6U+EMy+JJYslA/mvTNJGe3eX/iXqoCFN4nObW+oxnUNkET/Y44k6xxAdOsLzGxPgy4RN81P66xZGF8s6wvMXehxB+SwZfeJ1l7/WjSN5Oc3ebVJKctQOkT91LrO5pBbRM00fdtkrUuYJr1XY2jLwMu0XfNj2ssWRjfLOtLtyyEEH9QBl+YR+31o0nfTHJ2m1eTnLYAJSbZpcAl2wo0TdBE37dJ1rqAadZ3NY6+DLhE3zU/rrFkYXyzrC89AxpC/CEZfKlh114/mvTNJGe3eTXJaQtQYpJdCtzVDGqboIm+b5OsdQHTrC8505tWX3om2Vd+JFs/tI9vpvWFe2lDiD8kgy/d+qG+fhTpm0nObvO+J5k5RQEKTLJTgTuaQW0TtEnfs0n2Hr/pN9OXGMe0+hKT7DM/kjPJ2sc3y/oScxdM/AEZfEksWagfTfpmkrPbvJvkNAUo3ZOcWt/RDGqboIm+b5OsdQHTrC8xsT4MuETfNT+usWRhfLOsLzF3ocQfksGXbv3QXj+a9EM0yQ8ctWK/a+201h44asV+bsNQlpWVcXl5eV3SKisrl7R1TLE2ceLE2pdeemkFM+dmzZr1jkSjvZpXk5y2AKUmObW+4Iypi/6hnqCJvm+TrHUB06zvahx9GXCJvqYffUUAACAASURBVGt+XGPJwvhmWV9q7kKIPySDL82j9vrRpB+iSW5Pg5w0bsNQdu/evbGtPmlavkluL01p82qS0xagxCS7FLjEJGuaoIm+b5OsdQHTrO9qHH0ZcIm+a35cY8nC+GZZX2o0Q4g/JIMviSUL9aNJ30xyyya5srJyyYQJE2rHjBmze8yYMbufffbZCmbOzZs3b+XkyZN3JP0uvfTSLXfeeec6zjPJ11577abk7PS555679atf/erGH/7wh+uTY66//vpNP/rRj9a3FVcpzfuZ5DQFKDHJLgXuaga1TdAmfc8m2Xv8pt9M39U4+jLgEn3X/Ei2fmgf3yzrS8xdKPGHZPAlsWShfjTpm0mOWv52i7POOms7M+dqamoW7t69ewEz55YsWbJ03LhxuzmlSeYC411ZWblkzJgxu5k519DQkDvmmGP2bNq06fW24iqldciFe20WoPBMcmp9RzOobYI26XeASda4gGnWlxhHHwZcou+aH4lh1z6+WdaXmLtQ4g/J4EvPJGuvH036ZpJbPpNcXV39+mc/+9mtI0eOrCsvL6/r1q1bIwtNMjPnTjnllJ1/+9vfls+dO3fVpz71qW1txVRq826S0xRgKRfupdIXnEl20T/UE7QJzyZZ6wKmWV+yBcGHAZfou+ZHsvVD+/hmWV9i7kKJPySDL4klC/WjSd9McssmecaMGRunTZtW1dDQkNu3b1+uS5cuzMy5p59+uvK0005rMskXX3zxu2lM8s9//vM3pk6dunnKlCnbHnvssdVtxVRq836f5DQFKDXJqfWF2wq0TNBE37dJ1rqAadZ3NY6+DLhE3zU/rrFkYXwzrS80dyHEH5LBl+ZRff0o0jeT3LJJvvLKKzd/97vffZuZc3fccce6uD5zq1evXjxo0KC9dXV1C6qrq18fNGjQ3mImuVevXg179uxZkOjV19cvGDp06J7Bgwfv3b9/v1eDzL5NctoClN4nObW+wCRrmqCJfkecSfYZv+k313c1jr4MuETfNT+SrR/axzfL+hJzF0z8ARl8SSxZqB9N+iGa5ENxC7hiJnnJkiVLR44cWXf88cfv+spXvrIpv88111xTNXTo0D2TJ0/e8clPfnJ7MZM8ffr0TcOGDas/99xztybHXXLJJVuuvfbaTW3F0x7Nq0lOW4DSJ+6l1nc0g9omaJO+Z5PsPX7Tb6bvahx9GXCJvmt+JCZZ+/hmWV9i7kKJPySDL82j9vrRpB+iSc5qa2hoyJWXl9ctWbJkaUe8n/c9yakKUGCSnQrc0Qxqm6BN+h1gkjUuYJr1JcbRhwGX6LvmxzWWLIxvlvWlZ0BDiD8kgy817NrrR5O+meSOablcbtngwYP3XnXVVVUd9Z5eTXLaApTuSU6t72gGtU3QJjybZK0LmGZ9yZleHwZcou+aH9dYsjC+WdaXblkIIf6QDL40j9rrR5O+meTsNq8mOW0BSkyyS4FLzphqmqCJvm+TrHUB06wv2TPsw4BL9F3zIzmTrH18s6wvNXchxB+SwZfEkoX60aRvJjm7zatJTluAEpPsUuCuZlDbBE30fZtkrQuYZn1X4+jLgEv0XfMj2fqhfXyzrC8xd6HEH5TBF8SShfrRpG8mObvNq0lOXYACk+xU4I5mUNsEbdL3bJK9x2/6zfRdjaMvAy7Rd82PxCRrH98s60vMXSjxh2TwJbFkoX406ZtJzm7zfuFeqgIUmGSnAnc0g9omaKLv2yRrXcA060uMow8DLtF3zY9rLFkY3yzrS41mCPGHZPAlsWShfjTpm0nObvN+JjlNAUov3Eut72gGtU3QRN+3Sda6gGnWdzWOvgy4RN81P66xZGF8s6wv3bIQQvwhGXxpHrXXjyb9EE3y4MGD9wORX2qPNnjw4DbvkwyA8+88cdNNN709Y8aMjW0d11IbNGjQ3o0bNy5qrc+sWbPekeqnad73JKcpQOmZ5NT6gm0FmiZoou/bJGtdwDTrS4yjDwMu0XfNj8Swax/fLOtLzV0I8Ydk8KVnkrXXjyb9EE1ye28Bimu8VUN5+OGHH8g3th1hkos9wKQ9m/e7W6QpQOme5NT6gjPJmiZoou/bJGtdwDTrS7YgpNWXmGSf+ZFs/dA+vlnWl5i7UOIPyeBLYslC/WjSD9Ukt2d+0pjk7t27N37rW9965/rrr9/EBSZ55cqVS04++eSakSNH1p188sk1q1atWlJ4/KZNm14/9dRTd44ePbrukksuefcDH/hAk0k+88wzt48dO3b38OHD62+99dY3mTl37bXXbiorK+Py8vK65Il8xfqV0rzfJzlVAQrvbpFaX3DGVNMEbdL3bJK9x2/6zfQlxjGtvsQk+8yPayxZGN8s60vMXSjxh2TwJbFkoX406YdqktszP2lN8tatWxcOGjRob3V19ev5JvmMM87Ycdddd61j5txPf/rTdWeeeeb2wuMvv/zyzTfeeOMGZs795je/WQ2AE5NcVVX1OjPnamtrF4wYMaJ+06ZNryfvma/RUj9p837hXqoCFN4nObW+YO+tpgma6HfEmWSNC5hmfYmJ9WHAJfqu+XGNJQvjm2V9ibkLJf6QDL4klizUjyb9UE1ye+YnrUlm5tzXvva1jd/4xjc25JvkPn367N+zZ88CZs7t2bNnQZ8+fZrtcS4vL69bvnx50xnm3r17NyQmecaMGRtHjRpVN2rUqLqePXs2PPfccxX575m0lvpJm1eTnLYApRfupdZ3NIPaJmii79ska13ANOu7GkdfBlyi75of11iyML5Z1pduWQgh/qAMvjCP2utHk37IJrm98uNikquqql4fNGjQ3htuuGGDq0muqKhoZpLnzZu3csKECbU1NTULmTk3ceLE2nnz5q3Mf09mzrXWT9q8muS0BSgxyS4FLtlWoGmCJvq+TbLWBUyzvqtx9GXAJfqu+XGNJQvjm2V96RnQEOIPyeBLDbv2+tGkH6pJbs/8uJhkZs5dc801VQMHDtybv91i9uzZa5k5d+edd64766yzim63mDlz5gZmzj3++OOrku0WjzzyyJozzjhjBzPnFi5cuOzwww8/kJjfXr16NSTmu7V+0ubVJKctQIlJdilwVzOobYIm+r5NstYFTLO+5ExvWn3pmWRf+ZFs/dA+vpnWF+6lDSH+kAy+dOuH+vpRpB+iSR44cGC73gKuX79+DdyGocw3yevXr1/UrVu3xsQkV1ZWLjnppJNSXbg3ZsyY3VdeeeXm5MK9urq6BZ/4xCd2jhw5su6cc87Zln+GePr06ZuGDRtWf+65525trZ+0ed+TnKoABSbZqcAdzaC2Cdqk79kke4/f9JvpS4xjWn2JSfaZH8mZZO3jm2V9ibkLJv6ADL4klizUjyb9EE2ytfZp3k1ymgKU7klOre9oBrVN0ETft0nWuoBp1peYWB8GXKLvmh/XWLIwvlnWl5i7UOIPyeBLt35orx9N+maSs9u8muS0BSg1yan1BWdMXfQP9QRN9H2bZK0LmGZ9V+Poy4BL9F3z4xpLFsY3y/pScxdC/CEZfGketdePJn0zydltXk1y2gKUmGSXApeYZE0TNNH3bZK1LmCa9V2Noy8DLtF3zY9rLFkY3yzrS41mCPGHZPAlsWShfjTpB2KS1zY2Ni7gAIxlVlpjY+OCRYsWrW0p5yWb5LQFKDHJLgXuaga1TdAmfc8m2Xv8pt9M39U4+jLgEn3X/Ei2fmgf3yzrS7cshBB/SAZfEksW6keTfiAm+Y9VVVVrzCi3n0Guqqpas2jRoj+2lPOuKJHJkycDAO6++27ceuutmD9/PoYNG4YDBw5g+vTpqKiowJNPPglc2NtZe+7cuen1b7/MSfuiiy5y0u/Vqxdqa2sxZcoUjBkzBvfddx/Kysqwbt06nHHGGZg5cyauu+46AMCLL77oT//7zznn0RWv8Zt+M/0jHcfHRV+Cz/xcNOt/OsWShfHNsv7yM5zLK5j4v4/5zrH7yv8ve7/lHEsW6keT/vXXX+88Ru1NQ0PDVVVVVQ9UVVV9CIBsgTfyOQBgWUNDw1Ut9ijltxo4XORTyoV7qfQFZ5Jd9EP5Ddn3mWSNv+Fr15dsQUirLzmT7DM/kq0f2sc3y/qSM6ChxC+J3Vf+pVs/tNePJn0EcCbZWse30g52uMhHapJT6wu3FWiZoIm+b5OsdQHTrC+5mM2HAZfou+bHNZYsjG+m9YXmLoT4QzL40jyqrx9F+maSO2cr7WCHi3yk90lOrS8wyZomaKLfEWeSfcZv+s31XY2jLwMu0XfNj2RPsvbxzbK+xNwFE39ABl8SSxbqR5O+meTO2Uo72OEiH+kT91LrO5pBbRO0Sd+zSfYev+k303c1jr4MuETfNT8Sk6x9fLOsLzF3ocQfksGX5lF7/WjSN5PcOVtpB8f/iaUqQIFJdipwRzOobYI26XeASda4gGnWlxhHHwZcou+aH9dYsjC+WdaXngENIf6QDL7UsGuvH036ZpI7ZyvtYIeLfKR7klPrO5pBbRO0Cc8mWesCpllfcqbXhwGX6LvmxzWWLIxvlvWlWxZCiD8kgy/No/b60aRvJrlzttIOdrjIR2KSXQpccsZU0wRN9H2bZK0LmGZ9yZ5hHwZcou+aH8mZZO3jm2V9qbkLIf6QDL4klizUjyZ9M8mds5V2sMNFPhKT7FLgrmZQ2wRN9H2bZK0LmGZ9V+Poy4BL9F3zI9n6oX18s6wvMXehxB+UwRfEkoX60aRvJrlzttIOdrnIR2CSnQrc0Qxqm6BN+p5Nsvf4Tb+Zvqtx9GXAJfqu+ZGYZO3jm2V9ibkLJf6QDL4klizUjyZ9M8mds5V2sMtFPgKT7FTgjmZQ2wRN9H2bZK0LmGZ9iXH0YcAl+q75cY0lC+ObZX2p0Qwh/pAMviSWLNSPJn0zyZ2zlXaww0U+0gv3Uus7mkFtEzTR922StS5gmvVdjaMvAy7Rd82PayxZGN8s60u3LIQQf0gGX5pH7fWjSd9McudspR3scJGP9Exyan3BtgJNEzTR922StS5gmvUlxtGHAZfou+ZHYti1j2+W9aXmLoT4QzL40jPJ2utHk76Z5M7ZSjvY4SIf6Z7k1PqCM8maJmii79ska13ANOtLtiCk1ZeYZJ/5kWz90D6+WdaXmLtQ4g/J4EtiyUL9aNI3k9w5W2kHu1zkI7y7RWp9wRlTTRO0Sd+zSfYev+k305cYx7T6EpPsMz+usWRhfLOsLzF3ocQfksGXxJKF+tGkbya5c7bSDna5yEd4n+TU+oK9t5omaKLfEWeSNS5gmvUlJtaHAZfou+bHNZYsjG+W9SXmLpT4QzL4kliyUD+a9M0kd85W2sEOF/lIL9xLre9oBrVN0ETft0nWuoBp1nc1jr4MuETfNT+usWRhfLOsL92yEEL8QRl8YR61148mfTPJnbOVdrDDRT4Sk+xS4JJtBZomaKLv2yRrXcA067saR18GXKLvmh/XWLIwvlnWl54BDSH+kAy+1LBrrx9N+maSO2cr7WCHi3wkJtmlwF3NoLYJmuj7NslaFzDN+pIzvWn1pWeSfeVHsvVD+/hmWl+4lzaE+EMy+NKtH+rrR5G+meTO2Uo72OUiH4FJdipwRzOobYI26Xs2yd7jN/1m+hLjmFZfYpJ95kdyJln7+GZZX2Lugok/IIMviSUL9aNJ30xy52ylHexwkY90T3JqfUczqG2CJvq+TbLWBUyzvsTE+jDgEn3X/LjGkoXxzbK+xNyFEn9IBl+69UN7/WjSN5PcOVtpBztc5CM1yan1BWdMXfQP9QRN9H2bZK0LmGZ9V+Poy4BL9F3z4xpLFsY3y/pScxdC/CEZfGketdePJn0zyZ2zlXaww0U+EpPsUuASk6xpgib6vk2y1gVMs76rcfRlwCX6rvlxjSUL45tlfanRDCH+kAy+JJYs1I8mfTPJnbOVdrDDRT4Sk+xS4K5mUNsEbdL3bJK9x2/6zfRdjaMvAy7Rd82PZOuH9vHNsr50y0II8Ydk8CWxZKF+NOmbSe6crbSDXS7yEZ5JTq3vaAa1TdAm/Q4wyRoXMM36EuPow4BL9F3zIzHs2sc3y/oScxdK/CEZfOmZZO31o0nfTHLnbKUd7HCRTykX7qXSF5xJdtE/1BO0Cc8mWesCpllfsgXBhwGX6LvmR7L1Q/v4ZllfYu5CiT8kgy/d+qG9fjTpm0nunK20gx0u8pGa5NT6wm0FWiZoou/bJGtdwDTruxpHXwZcou+aH9dYsjC+mdYXmrsQ4g/J4EvzqL5+FOmbSe6crbSDHS7ykd4nObW+wCRrmqCJfkecSfYZv+k313c1jr4MuETfNT+SrR/axzfL+hJzF0z8ARl8SSxZqB9N+maSO2cr7WCHi3ykT9xLre9oBrVN0CZ9zybZe/ym30zf1Tj6MuASfdf8SEyy9vHNsr7E3IUSf0gGX5pH7fWjSd9McudspR3scpGPwCQ7FbijGdQ2QZv0O8Aka1zANOtLjKMPAy7Rd82PayxZGN8s60vPgIYQf0gGX2rYtdePJn0zyZ2zEUdmVwQR1QJYmbJ7PwDVDvI++7tqh4TP2DXnRTM+a9d3f1c6yzztLIRWXy6EFHtIsRjFKWfmXoc6CKNj6Vri8SuZ+WNpOhJRLm1f3/1dtUPCZ+ya86IZn7Xru78rnWWedhZCqy8XQoo9pFiM4hBR7lDHYHQ8ZYc6AMMwDMMwDMMIDTPJhmEYhmEYhlFAqSb55576+u7vqh0SPmPXnBfNaJ1HEjrLPO0shFZfLoQUe0ixGMWxnHdCSrpwzzAMwzAMwzCyiG23MAzDMAzDMIwCzCQbhmEYhmEYRgHOJpmIyGd/n4QUS0hYXsLHZYxsjhpG+Giep4bRWXA2yVxkEzMRHebYv8X3zX+NiLoRUbdW+g5oPdrmsRBRj7zjqbXYOwuuY2p0PC7zyPccdcVlntoc1YHPdbojIKJ+RDSAiHoRUZdW+pXFrd0Nquu8s3XaMDoepwv3iKgrgNMA7AWwB8C7ABjAN5j5a0X6dwNwHjP/Nv6+N4CPI3pa0KvMvCav75EAbgRwCzPvI6LhAL4EYBCA15h5ToF2LwC/A/A8gOcALGXm/a3E3gXAFABnA1gK4I8AzgEwBMA/mPkvqRPRwRDRGABfQJTvV5l5QfxzAnAcM79RgrbTmBrtg+uYEtEJAP4HgDUA5gL4MIDhiObGyrx+3uao8HOmnqea52hnwfc67Rsi+jCA8xE9SOswRHNkHYD/ZOZdDjpdAJzIzK+WEEuqOR33tXX6EODz/15DB64meTiA1wD8F4AdAHoCeD+AswD8AsBWZr45r/8oAL9g5lOJqB+AbyD6Ty8H4CQAX2Xm+XHfMQCeYObRRPRBAHcDqIzf7yIAy5n5hwXaixAtLl0AvArgaQDvMPNeIqL837yJ6FgAv4r7jMbBRfI1AJ8G8Ftmvid1MjoIIvoAgDsA7AdwAMCxAH7AzM8T0VAADzDzJ0vQdxpTo3Rcx5SIjgFwD4AqAAMBrEdUw28BmAjgBmZ+Lu7rbY4KP2vqeap1jnYmfK/TnmMfDGA2gE0AXgewD0AvAB9DNI+uZeaX8/r3AvA5ALsRPQJ6K6I5tRHRnP09M08QxpJ6Tsf9bZ3uYHz/32vowPWx1DsA/AZAbwAVABYAOBPRb8CvAij8k1Q/AG/GXw8EcDwzjwcAIvo0gK8DSP4D7oto8UKsv4+ZZ8Z91wP4QRHt3zPz5UR0EYBLAXwVwBNE9EtmXkFEZcx8IO5/HIBdzPwjIpoI4FFmLo/1/w7gO4gWrdAoB9CXmc8GACL6FwC3EdGXEU3cUv8M6DqmRum4julxAA5n5qvjvg8z85D42LMBXI/oLB3gd45KcJmnWudoZ8L3Ou2TcQAGMvP5hS8Q0TkA/jeAl/N+/BEA/wHgcQADABwB4HBEpumDABpLiMVlTgO2Th8KfP/fayjAySQz81YiugHAtYj+LDQP0W/VK5l5LhEdUXDIcADnE9EXEP3GW1fw3vnfvwHgv4nomwC2A9hDRGMRLQjliH6bz+dYAN3juOYCmBv/5nc9gOeJaB4zX53XvwHAASL6DIDTAWwgoh7MXAegf0EsIXE04s9OREcw8wtxjm4BsATA2lLEBWNqlI7rmA7Gwfo/AOChvNeOAFCffON5jko4Funnaf4cPQ3AO0TUnZnrEfYc7Uz4Xqd9shnAFiKaiugvJdsA7GHmbYjqq9CoDwLwDiKjTAC6ATgS0XybishES0k9pwFbpw8RXv/vNXTgZJLjP43tB3AXEV0M4MeIzj4l+3IK95otQDT5LwQwDMCf814bCmBn8g0zbyaihwHcEMd1TNy/GsAKALMKtKsA/CmOqxuA/cy8CcD/IaLbAfQp6L8Q0R7HGxAtkM8BuI+IdgH4EIAH02eiQ1kL4DkiOpKZdxPRYcz8HBExgL+gxLgLxvRCADej9TE1SmctgBeI6H3MvDPFmK4G8Fj89d/iljAUkVkB0OIcHYB2mKNCXOZpMkdnxHE9j4Nz9MMId452GjpgnfbJUgAPA7gYkcHdF8d1Svz1/y7o/xqA7wGoKdyvTESrEW15kLIawK/jr19GK3M6fj9bpzse13XayCAlPXGPiPoi2sP4CjP/2eXPZkR0PKIFsyL+vgszN8Zf90G0UDQCeIuZa4scn5xhKiX+UxEtli8x84pStHxB0dXO70P0Z83kt9ouzNxIRKcBKGPmF9vhPcqYuSE+y/MNRDn5IxF1ZeaGEj+GkQdFF/10Zea9+T/LG1Ni5pdS6HQDcAKiLQqLW+gzAMA3cXA8m+ZZihjHAWgoZW6UOk/jP3GOBfBCqHO0M3Eo1un2Jt5rnFycyoj2J69qbZ0r/L+NiAhAtxJrmxDN9XzdFue0rdMdS3ut04ZunE0yEU1AdKHDPkR/iloJYDMz72uh/8mIJn09orMKawGsKyg8YmYmohMBTED0W3Q1oosZ3mbmPQWaSf+PAjgRBy+seBPAm4X9C2Ifj+i37m2I/kS43hYXo6Mhoo8gMn8rmXlhiv4nIPpzdmVb/fP6rmHmf6bQPjlP+7U08aehYJ6OBbCCmV9v45gJAEYgir3NvBgdR0et04YRCq7rtJE9XO9ucRkO/gbeHUAPRBcgbAEwi5mfb6N/d0R71KoBfCu/f17f/gV93y3sG/e/HMCpabTj/pcC+ETcv1vc/7hYv1nsoUBEST6SW//sR3TLzHoi+g2AOVzCrbFi/W6x/l5E+0KJmXe1h77RnHj/79mI5k8joguD/sTMB4joVkS3o3q1SP/uiPYvttifiD4P4FN5fefGfRuI6DZEF1Hlaxf2bzWWEj5rMf33xJMXy5GI6vC3cd/GYrEbHY/vddpz7EnM+/Iax9vYmq11RdbGwrX3IWZ+tsRY9rSg3VYstk57xnWdNrKJ690tvg7gm5x3axqg6bete4loAzNXCvu7an/Nsf8Mx/6hcBuihXQLosVxF4B6InoTwCQAd3rU/3g76BvNmQbgfkT3j/0MgP+D6D/MxxFt/3m8hP5XF+l7RNzneBzc29xa/9Ziac/PWhhPsVi6tRK70fH4Xqd94rrW+VwbXdd1W6c7Htd12sggria5BkA/ii8iA4B4M/tiIuqJgityHfv71Jb0D4V/BXAvoj9pHoXoitteiPaLDgCwwaP+wHbQN5ozAMBT8V7EeUS0BtFV/28gMoWbS+jvU9v3Z/Udi1E6mtdd17XO59rouq7bOt3x2HpkOJvkHyF6+syo+DfYLQC6UHTLpvWI9hxL+/vUlvQPhVsBPMbMbxa+QNFVztubHRGWvtGcxYj23b5O0QVBFRTdieK3iG4NVV1Cf5/avj+r71iM0tG87rqudT7XxpBiMYpj65EhvnDvc4g2s/dBtOg9h2gCN7uPqUt/n9qS/iFA0ZXYXRDdiosQ7VtLnlB2KjO/ErK+0RwiKgfQyAWPfKboji93MfNkaX+f2hJ8xm4cGrSuu65rnc+1MaRYjOLYemQAApPcTCD601nqezS69PepLekfAhTdlqY3M3s5c+Bb32hOnPP3MfM2SnErJ5f+PrUl+IzdODRoXXdd1zqfa2NIsRjFsfWoc1LmegBFHBZ/fSKAv8dfF9Vy6e9TW9I/JIgoeQTmRwA8Ff+s3eL2rW8cJMl1Qc6fBIBiC69Lf5/aEnzGbhwaCtbRiXBbd9vs7xvXtc7n2hhSLMZ7sfXIAAQmGfGfeuKve+Lgoxlbeo65S3+f2pL+QRAvgl3ib/sgus8o0E5x+9Y33gszc0s5j89WiPv71JbgM3bj0BD/mT8xCT1x8KlvRdcL1/4dyPsArIu/ThOLa3+tsRhoqtt8mnJu61HnwfXCPcRXeiZPCHobB2/LVHTfhkt/n9qS/qHgO26tedGM5nnkis/YjUPOVgD/5bG/T0KKPaRYjOJYzjshrg8TGQvgk4huwr4V0fPn32DmmlL7+9SW9A8F33FrzYtmNM8jV3zGbhiGYRg+SW2Sieh8HHwaVg9E9wk8DtGTaP6dmX8l7e9TW9I/FHzHrTUvmtE8j3x+VqvF8CGiowD0xsGnvu0FUMbMNUT0UwCrmfkeaf/OEntIsRjFsZwbCS7bLb4M4AlmfjD/h0Q0EMCviehdfu8jOl36+9SW9A8F33FrzYtmNM8jn5/VajF8vgNgEKI9xQ2Invq2h6KHK5wJYEGJ/X0SUuwhxWIUx3JuAHC7cG83oicn9U5+QESHM3MVoj2Ehbf0cenvU1vSPxR8x601L5rRPI9c8Rm70fGcieihFcsAbEP0iN5jAXwCwChEDwcppb9PQoo9pFiM4ljODQBu2y3GA7gS0Z8d1gJ4F9Gz5M8EMBrAVcy8QdLfp7akfyj4jltrXjSjeR75/KxWi+FDRNcCeJWZFxV5bQmAS5h5ubS/T0KKPaRYjOJYzo0E1wv3RgA4F9H9AvsDqAPwAoBHmbm2lP4+tSX9Q8F33FrzohnN88jnZ7VaDBsi6gHgMER/ek7+42BmZoqeqreU8x4S4tq/s8Qer9iO9wAACBtJREFUUixGcSznRoLLmeTDmXlfamGH/j61Jf1DwXfcWvOiGc3zyBWfsRsdD1HTQxXKEBkH5lb+A3Ht75OQYg8pFqM4lnMjIfWe5Jb+AyOiw4joO6X096kt6R8KvuPWmhfNaJ5HrviM3eh4+CCNzHwgMQ2t1JdT/84Se0ixGMWxnBsJqc4kE9EgALch2sC+AcA78b9rAAwA8AtmHifp71Nb0j8UfMetNS+a0TyPfH5Wq8XwSTFGDzPzWGn/zhJ7SLEYxbGcG/mkvQXc8QA+D+DHAD4K4BwA/QD0AnAMgH+U0N+ntqR/KPiOW2teNKN5Hvn8rFaL4RNafbkQUuwhxWIUx3JuNJHWJDcAuIeZbyp8gYjOAzCthP4+tSX9Q8F33FrzohnN88gVn7EbHU9o9eVCSLGHFItRHMu50URak/xPAJuIqC8zbyeiwwA0MvMBALUAfl9Cf5/akv6h4DturXnRjOZ55POzWi2GT2j1pTX2kGIximM5N5pwugXcew4k6glgPzPvbe/+PrUl/UPBd9xa86IZzfPIFZ+xGx1PaPXlQkixhxSLURzLeefF5Yl7AAAiSo6ZBuDU9uzvU1vSPxR8x601L5rRPI9c8Rm70fGEVl8uhBR7SLEYxbGcG04mmYgIB7donAOgW97PS+rvU1vSPxR8x601L5rRPI9c8Rm70fGEVl8uhBR7SLEYxbGcG0BKk5wURXzfwOR+pisArCu1v09tSf9Q8B231rxoRvM8csVn7EbHE1p9uRBS7CHFYhTHcm7k4/LEvb4AJgLYi+hRjSuZeVd79PepLekfCr7j1poXzWieR674jN3oeEKrLxdCij2kWIziWM6NhLQPE7kAwCcAEIDJiG6u/Q6AxwC8xAUiLv19akv6h4LvuLXmRTOa55HPz2q1GD6h1ZfW2EOKxSiO5dx4D8zcagNwJIC/AfgkgHEAvgbgpwA+i+im2hdL+/vUlvQPpfmOW2teNDfN88jnZ7VaDL+FVl9aYw8pFmvtM0bWst/a7gAMB7Ak7/vuAHLx10MBLJT296kt6R9K8x231rxobprnkc/ParUYfgutvrTGHlIs1tpnjKxlv6V5mMhOAAuJaDaAZQBGA/h7/NoAADUl9PepLekfCr7j1poXzWieR674jN3oeEKrLxdCij2kWIziWM6N99Dm3S2YuRrA/wWwB8AJAPYB+G78cm8Af5X296kt6R8KvuPWmhfNaJ5HPj+r1WL4hFZfLoQUe0ixGMWxnBuFOD1xj4i6MnND/DVxGwe79PepLekfCr7j1poXzWieR674jN3oeEKrLxdCij2kWIziWM4NwNEkNzuY6FhEj2rc0N79fWpL+oeC77i15kUzmueRKz5jNzqe0OrLhZBiDykWoziW885JmyaZiE4BMBbRXp0dALYDqGPmCiL6DaKN7LdK+vvUlvQPBd9xa82LZjTPI5+f1WoxfEKrL62xhxSLURzLuVFImgv3bgTQBdETZ/rEX3cloh0AzgbwnyX096kt6R8KvuPWmhfNaJ5HPj+r1WL4hFZfLoQUe0ixGMWxnBvvIY1JPhrAU4hupH0kgB4AeiG6yvMLAKpK6O9TW9I/FHzHrTUvmtE8j3x+VqvF8AmtvlwIKfaQYjGKYzk33kMakzwLwDZmXlf4AhG9AWBzCf19akv6h4LvuLXmRTOa55ErPmM3Op7Q6suFkGIPKRajOJZz4z2UdOGeYRiGYRiGYWSRNGeSQUQXAzgewG5EzzBfA6CSmbeX2t+ntqR/KPiOW2teNKN5HrniM3aj4wmtvlwIKfaQYjGKYzk38mn1TDIR9QTwY0Sb13cD+ACip850A/BPALdwdPNt5/4+tSX9Q8F33FrzohnN88jnZ7VaDJ/Q6ktr7CHFYhTHcm4UhVt5ZjWADwNYAKCs4OeHIXoKzX9K+/vUlvQPpfmOW2teNDfN88jnZ7VaDL+FVl9aYw8pFmvtM0bWOkdr67HU7wPQAKBf/g+ZeT+AV+LXpf19akv6h4LvuLXmRTOa55ErPmM3Op7Q6suFkGIPKRajOJZzoxlt7Ul+HcBDAG4joi0A3gWwHkB3AGcCeL6E/j61Jf1DwXfcWvOiGc3zyOdntVoMn9Dqy4WQYg8pFqM4lnOjGWmeuNcVwGUAxiG6X+AwAJsAPMTM80vp71Nb0j8UfMetNS+a0TyPfH5Wq8XwCa2+XAgp9pBiMYpjOTcKaevCvaEArgfQE9FvVL9m5rfi104BsJuZl0j6+9SW9A8F33FrzYtmNM8jn5/VajF8QqsvrbGHFItRHMu5UYy29iR/Pe7zDKKnz9xLRJ+OX7sawPgS+vvUlvQPBd9xa82LZjTPI1d8xm50PKHVlwshxR5SLEZxLOdGc1q7qg/AcwA+mvf9VYge2TgEwK8BfFLa36e2pH8ozXfcWvOiuWmeRz4/q9Vi+C20+tIae0ixWGufMbLWOVpbZ5K7ILpXIIioCzM/EBfNzQA+juhPEtL+PrUl/UPBd9xa86IZzfPI52e1Wgyf0OrLhZBiDykWoziWc6M5rTloAKcB+HDe913jf/8XgHoAA6X9fWpL+ofSfMetNS+am+Z55POzWi2G30KrL62xhxSLtfYZI2udo6W5uwVxXqfkeyI6jpnXltLfp7akfyj4jltrXjSjeR75/KxWi+ETWn25EFLsIcViFMdybhTSpkk2DMMwDMMwjM5GW3uSDcMwDMMwDKPTYSbZMAzDMAzDMAowk2wYhmEYhmEYBZhJNgzDMAzDMIwCzCQbhmEYhmEYRgH/H8A5j6ukMHtVAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -778,14 +780,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Deleting labels\n", + "### Deleting labels\n", "\n", "Now, we check the total number of existing labels in our source." ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -815,7 +817,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 16, "metadata": { "pycharm": { "name": "#%%\n" @@ -828,7 +830,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 17, "metadata": { "pycharm": { "name": "#%%\n" @@ -859,7 +861,7 @@ "## 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", + "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", @@ -870,7 +872,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 18, "metadata": { "pycharm": { "name": "#%%\n" @@ -880,10 +882,10 @@ { "data": { "text/plain": [ - "{'request_id': 'a36badb8f2788c247ae193acb3eaeb3e', 'request_status': 'queued'}" + "{'request_id': '5a3c573907ce61089b3c2899496f3214', 'request_status': 'queued'}" ] }, - "execution_count": 16, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -908,7 +910,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 19, "metadata": { "pycharm": { "name": "#%%\n" @@ -921,7 +923,7 @@ "'successful'" ] }, - "execution_count": 17, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -947,7 +949,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 20, "metadata": { "pycharm": { "name": "#%%\n" @@ -960,7 +962,7 @@ "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" ] }, - "execution_count": 18, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -980,13 +982,20 @@ "source": [ "The output is a dictionary that contains seven key elements.\n", "These elements are:\n", - "- `\"status\"` indicates if the analysis was successful.\n", - "- `\"request_id\"` is the identifier of the requested analysis.\n", - "- `\"feature\"` is the name of the request feature.\n", - "- `\"results\"` includes the numeric results.\n", - "- `\"inputs\"` includes the input information for the request analysis.\n", - "- `\"error_info\"` includes the error information in case the analysis fails and it is empty if the analysis is successful.\n", - "- `\"debug_info\"` includes debugging (log) information related to the failed analysis." + "\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." ] }, { @@ -1000,7 +1009,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 21, "metadata": { "pycharm": { "name": "#%%\n" @@ -1024,7 +1033,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 22, "metadata": { "pycharm": { "name": "#%%\n" @@ -1066,439 +1075,448 @@ " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", + " 1570186860\n", + " 2019-10-04 13:01:00+02:00\n", + " \n", + " \n", + " 1\n", + " Healthy\n", + " -1\n", + " Added by label propagation\n", + " 2022-03-02 19:43:50\n", " 1570273260\n", " 2019-10-05 13:01:00+02:00\n", " \n", " \n", - " 1\n", + " 2\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1570359660\n", " 2019-10-06 13:01:00+02:00\n", " \n", " \n", - " 2\n", + " 3\n", " Healthy\n", " 1\n", " This is a demo.\n", - " 2022-02-09 14:09:06\n", + " 2022-03-02 19:40:23\n", " 1570446060\n", " 2019-10-07 13:01:00+02:00\n", " \n", " \n", - " 3\n", + " 4\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1570532460\n", " 2019-10-08 13:01:00+02:00\n", " \n", " \n", - " 4\n", + " 5\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1570618860\n", " 2019-10-09 13:01:00+02:00\n", " \n", " \n", - " 5\n", + " 6\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1570705260\n", " 2019-10-10 13:01:00+02:00\n", " \n", " \n", - " 6\n", + " 7\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1570791660\n", " 2019-10-11 13:01:00+02:00\n", " \n", " \n", - " 7\n", + " 8\n", " Healthy\n", " 1\n", " This is a demo.\n", - " 2022-02-09 14:09:06\n", + " 2022-03-02 19:40:23\n", " 1570878060\n", " 2019-10-12 13:01:00+02:00\n", " \n", " \n", - " 8\n", + " 9\n", " Healthy\n", " 1\n", " This is a demo.\n", - " 2022-02-09 14:09:06\n", + " 2022-03-02 19:40:24\n", " 1570964460\n", " 2019-10-13 13:01:00+02:00\n", " \n", " \n", - " 9\n", + " 10\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1571050860\n", " 2019-10-14 13:01:00+02:00\n", " \n", " \n", - " 10\n", + " 11\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1571137260\n", " 2019-10-15 13:01:00+02:00\n", " \n", " \n", - " 11\n", + " 12\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1571223660\n", " 2019-10-16 13:01:00+02:00\n", " \n", " \n", - " 12\n", + " 13\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1571310060\n", " 2019-10-17 13:01:00+02:00\n", " \n", " \n", - " 13\n", + " 14\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1571396460\n", " 2019-10-18 13:01:00+02:00\n", " \n", " \n", - " 14\n", + " 15\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1571482860\n", " 2019-10-19 13:01:00+02:00\n", " \n", " \n", - " 15\n", + " 16\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1571569260\n", " 2019-10-20 13:01:00+02:00\n", " \n", " \n", - " 16\n", + " 17\n", " Transition\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1571655660\n", " 2019-10-21 13:01:00+02:00\n", " \n", " \n", - " 17\n", + " 18\n", " Transition\n", " 2\n", " This is a demo.\n", - " 2022-02-09 14:09:06\n", + " 2022-03-02 19:40:24\n", " 1571742060\n", " 2019-10-22 13:01:00+02:00\n", " \n", " \n", - " 18\n", + " 19\n", " Transition\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1571828460\n", " 2019-10-23 13:01:00+02:00\n", " \n", " \n", - " 19\n", + " 20\n", " Transition\n", - " -1\n", - " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2\n", + " This is a demo.\n", + " 2022-03-02 19:40:24\n", " 1571914860\n", " 2019-10-24 13:01:00+02:00\n", " \n", " \n", - " 20\n", + " 21\n", " Transition\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1572001260\n", " 2019-10-25 13:01:00+02:00\n", " \n", " \n", - " 21\n", + " 22\n", " Transition\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1572087660\n", " 2019-10-26 13:01:00+02:00\n", " \n", " \n", - " 22\n", + " 23\n", " Transition\n", " 2\n", " This is a demo.\n", - " 2022-02-09 14:09:06\n", + " 2022-03-02 19:40:24\n", " 1572177660\n", " 2019-10-27 13:01:00+01:00\n", " \n", " \n", - " 23\n", + " 24\n", " Transition\n", - " 2\n", - " This is a demo.\n", - " 2022-02-09 14:09:06\n", + " -1\n", + " Added by label propagation\n", + " 2022-03-02 19:43:50\n", " 1572264060\n", " 2019-10-28 13:01:00+01:00\n", " \n", " \n", - " 24\n", + " 25\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1572350460\n", " 2019-10-29 13:01:00+01:00\n", " \n", " \n", - " 25\n", + " 26\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1572436860\n", " 2019-10-30 13:01:00+01:00\n", " \n", " \n", - " 26\n", + " 27\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1572523260\n", " 2019-10-31 13:01:00+01:00\n", " \n", " \n", - " 27\n", + " 28\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1572609660\n", " 2019-11-01 13:01:00+01:00\n", " \n", " \n", - " 28\n", + " 29\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1572696060\n", " 2019-11-02 13:01:00+01:00\n", " \n", " \n", - " 29\n", + " 30\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1572782460\n", " 2019-11-03 13:01:00+01:00\n", " \n", " \n", - " 30\n", + " 31\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1572868860\n", " 2019-11-04 13:01:00+01:00\n", " \n", " \n", - " 31\n", + " 32\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1572955260\n", " 2019-11-05 13:01:00+01:00\n", " \n", " \n", - " 32\n", + " 33\n", " Faulty\n", " 3\n", " This is a demo.\n", - " 2022-02-09 14:09:07\n", + " 2022-03-02 19:40:24\n", " 1573041660\n", " 2019-11-06 13:01:00+01:00\n", " \n", " \n", - " 33\n", + " 34\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1573128060\n", " 2019-11-07 13:01:00+01:00\n", " \n", " \n", - " 34\n", + " 35\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1573214460\n", " 2019-11-08 13:01:00+01:00\n", " \n", " \n", - " 35\n", + " 36\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1573300860\n", " 2019-11-09 13:01:00+01:00\n", " \n", " \n", - " 36\n", + " 37\n", " Faulty\n", " 3\n", " This is a demo.\n", - " 2022-02-09 14:09:07\n", + " 2022-03-02 19:40:25\n", " 1573387260\n", " 2019-11-10 13:01:00+01:00\n", " \n", " \n", - " 37\n", + " 38\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1573473660\n", " 2019-11-11 13:01:00+01:00\n", " \n", " \n", - " 38\n", + " 39\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1573560060\n", " 2019-11-12 13:01:00+01:00\n", " \n", " \n", - " 39\n", + " 40\n", " Faulty\n", " 3\n", " This is a demo.\n", - " 2022-02-09 14:09:07\n", + " 2022-03-02 19:40:25\n", " 1573646460\n", " 2019-11-13 13:01:00+01:00\n", " \n", " \n", - " 40\n", + " 41\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1573732860\n", " 2019-11-14 13:01:00+01:00\n", " \n", " \n", - " 41\n", + " 42\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1573819260\n", " 2019-11-15 13:01:00+01:00\n", " \n", " \n", - " 42\n", + " 43\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1573905660\n", " 2019-11-16 13:01:00+01:00\n", " \n", " \n", - " 43\n", + " 44\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1573992060\n", " 2019-11-17 13:01:00+01:00\n", " \n", " \n", - " 44\n", + " 45\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1574078460\n", " 2019-11-18 13:01:00+01:00\n", " \n", " \n", - " 45\n", + " 46\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1574164860\n", " 2019-11-19 13:01:00+01:00\n", " \n", " \n", - " 46\n", + " 47\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1574251260\n", " 2019-11-20 13:01:00+01:00\n", " \n", " \n", - " 47\n", + " 48\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1574337660\n", " 2019-11-21 13:01:00+01:00\n", " \n", " \n", - " 48\n", + " 49\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-02-09 14:09:52\n", + " 2022-03-02 19:43:50\n", " 1574424060\n", " 2019-11-22 13:01:00+01:00\n", " \n", @@ -1508,109 +1526,111 @@ ], "text/plain": [ " label severity notes label_timestamp \\\n", - "0 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", - "1 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", - "2 Healthy 1 This is a demo. 2022-02-09 14:09:06 \n", - "3 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", - "4 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", - "5 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", - "6 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", - "7 Healthy 1 This is a demo. 2022-02-09 14:09:06 \n", - "8 Healthy 1 This is a demo. 2022-02-09 14:09:06 \n", - "9 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", - "10 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", - "11 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", - "12 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", - "13 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", - "14 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", - "15 Healthy -1 Added by label propagation 2022-02-09 14:09:52 \n", - "16 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n", - "17 Transition 2 This is a demo. 2022-02-09 14:09:06 \n", - "18 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n", - "19 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n", - "20 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n", - "21 Transition -1 Added by label propagation 2022-02-09 14:09:52 \n", - "22 Transition 2 This is a demo. 2022-02-09 14:09:06 \n", - "23 Transition 2 This is a demo. 2022-02-09 14:09:06 \n", - "24 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "25 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "26 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "27 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "28 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "29 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "30 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "31 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "32 Faulty 3 This is a demo. 2022-02-09 14:09:07 \n", - "33 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "34 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "35 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "36 Faulty 3 This is a demo. 2022-02-09 14:09:07 \n", - "37 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "38 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "39 Faulty 3 This is a demo. 2022-02-09 14:09:07 \n", - "40 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "41 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "42 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "43 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "44 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "45 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "46 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "47 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", - "48 Faulty -1 Added by label propagation 2022-02-09 14:09:52 \n", + "0 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", + "1 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", + "2 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", + "3 Healthy 1 This is a demo. 2022-03-02 19:40:23 \n", + "4 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", + "5 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", + "6 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", + "7 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", + "8 Healthy 1 This is a demo. 2022-03-02 19:40:23 \n", + "9 Healthy 1 This is a demo. 2022-03-02 19:40:24 \n", + "10 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", + "11 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", + "12 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", + "13 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", + "14 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", + "15 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", + "16 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", + "17 Transition -1 Added by label propagation 2022-03-02 19:43:50 \n", + "18 Transition 2 This is a demo. 2022-03-02 19:40:24 \n", + "19 Transition -1 Added by label propagation 2022-03-02 19:43:50 \n", + "20 Transition 2 This is a demo. 2022-03-02 19:40:24 \n", + "21 Transition -1 Added by label propagation 2022-03-02 19:43:50 \n", + "22 Transition -1 Added by label propagation 2022-03-02 19:43:50 \n", + "23 Transition 2 This is a demo. 2022-03-02 19:40:24 \n", + "24 Transition -1 Added by label propagation 2022-03-02 19:43:50 \n", + "25 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "26 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "27 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "28 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "29 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "30 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "31 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "32 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "33 Faulty 3 This is a demo. 2022-03-02 19:40:24 \n", + "34 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "35 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "36 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "37 Faulty 3 This is a demo. 2022-03-02 19:40:25 \n", + "38 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "39 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "40 Faulty 3 This is a demo. 2022-03-02 19:40:25 \n", + "41 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "42 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "43 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "44 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "45 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "46 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "47 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "48 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", + "49 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", "\n", " timestamp datetime \n", - "0 1570273260 2019-10-05 13:01:00+02:00 \n", - "1 1570359660 2019-10-06 13:01:00+02:00 \n", - "2 1570446060 2019-10-07 13:01:00+02:00 \n", - "3 1570532460 2019-10-08 13:01:00+02:00 \n", - "4 1570618860 2019-10-09 13:01:00+02:00 \n", - "5 1570705260 2019-10-10 13:01:00+02:00 \n", - "6 1570791660 2019-10-11 13:01:00+02:00 \n", - "7 1570878060 2019-10-12 13:01:00+02:00 \n", - "8 1570964460 2019-10-13 13:01:00+02:00 \n", - "9 1571050860 2019-10-14 13:01:00+02:00 \n", - "10 1571137260 2019-10-15 13:01:00+02:00 \n", - "11 1571223660 2019-10-16 13:01:00+02:00 \n", - "12 1571310060 2019-10-17 13:01:00+02:00 \n", - "13 1571396460 2019-10-18 13:01:00+02:00 \n", - "14 1571482860 2019-10-19 13:01:00+02:00 \n", - "15 1571569260 2019-10-20 13:01:00+02:00 \n", - "16 1571655660 2019-10-21 13:01:00+02:00 \n", - "17 1571742060 2019-10-22 13:01:00+02:00 \n", - "18 1571828460 2019-10-23 13:01:00+02:00 \n", - "19 1571914860 2019-10-24 13:01:00+02:00 \n", - "20 1572001260 2019-10-25 13:01:00+02:00 \n", - "21 1572087660 2019-10-26 13:01:00+02:00 \n", - "22 1572177660 2019-10-27 13:01:00+01:00 \n", - "23 1572264060 2019-10-28 13:01:00+01:00 \n", - "24 1572350460 2019-10-29 13:01:00+01:00 \n", - "25 1572436860 2019-10-30 13:01:00+01:00 \n", - "26 1572523260 2019-10-31 13:01:00+01:00 \n", - "27 1572609660 2019-11-01 13:01:00+01:00 \n", - "28 1572696060 2019-11-02 13:01:00+01:00 \n", - "29 1572782460 2019-11-03 13:01:00+01:00 \n", - "30 1572868860 2019-11-04 13:01:00+01:00 \n", - "31 1572955260 2019-11-05 13:01:00+01:00 \n", - "32 1573041660 2019-11-06 13:01:00+01:00 \n", - "33 1573128060 2019-11-07 13:01:00+01:00 \n", - "34 1573214460 2019-11-08 13:01:00+01:00 \n", - "35 1573300860 2019-11-09 13:01:00+01:00 \n", - "36 1573387260 2019-11-10 13:01:00+01:00 \n", - "37 1573473660 2019-11-11 13:01:00+01:00 \n", - "38 1573560060 2019-11-12 13:01:00+01:00 \n", - "39 1573646460 2019-11-13 13:01:00+01:00 \n", - "40 1573732860 2019-11-14 13:01:00+01:00 \n", - "41 1573819260 2019-11-15 13:01:00+01:00 \n", - "42 1573905660 2019-11-16 13:01:00+01:00 \n", - "43 1573992060 2019-11-17 13:01:00+01:00 \n", - "44 1574078460 2019-11-18 13:01:00+01:00 \n", - "45 1574164860 2019-11-19 13:01:00+01:00 \n", - "46 1574251260 2019-11-20 13:01:00+01:00 \n", - "47 1574337660 2019-11-21 13:01:00+01:00 \n", - "48 1574424060 2019-11-22 13:01:00+01:00 " + "0 1570186860 2019-10-04 13:01:00+02:00 \n", + "1 1570273260 2019-10-05 13:01:00+02:00 \n", + "2 1570359660 2019-10-06 13:01:00+02:00 \n", + "3 1570446060 2019-10-07 13:01:00+02:00 \n", + "4 1570532460 2019-10-08 13:01:00+02:00 \n", + "5 1570618860 2019-10-09 13:01:00+02:00 \n", + "6 1570705260 2019-10-10 13:01:00+02:00 \n", + "7 1570791660 2019-10-11 13:01:00+02:00 \n", + "8 1570878060 2019-10-12 13:01:00+02:00 \n", + "9 1570964460 2019-10-13 13:01:00+02:00 \n", + "10 1571050860 2019-10-14 13:01:00+02:00 \n", + "11 1571137260 2019-10-15 13:01:00+02:00 \n", + "12 1571223660 2019-10-16 13:01:00+02:00 \n", + "13 1571310060 2019-10-17 13:01:00+02:00 \n", + "14 1571396460 2019-10-18 13:01:00+02:00 \n", + "15 1571482860 2019-10-19 13:01:00+02:00 \n", + "16 1571569260 2019-10-20 13:01:00+02:00 \n", + "17 1571655660 2019-10-21 13:01:00+02:00 \n", + "18 1571742060 2019-10-22 13:01:00+02:00 \n", + "19 1571828460 2019-10-23 13:01:00+02:00 \n", + "20 1571914860 2019-10-24 13:01:00+02:00 \n", + "21 1572001260 2019-10-25 13:01:00+02:00 \n", + "22 1572087660 2019-10-26 13:01:00+02:00 \n", + "23 1572177660 2019-10-27 13:01:00+01:00 \n", + "24 1572264060 2019-10-28 13:01:00+01:00 \n", + "25 1572350460 2019-10-29 13:01:00+01:00 \n", + "26 1572436860 2019-10-30 13:01:00+01:00 \n", + "27 1572523260 2019-10-31 13:01:00+01:00 \n", + "28 1572609660 2019-11-01 13:01:00+01:00 \n", + "29 1572696060 2019-11-02 13:01:00+01:00 \n", + "30 1572782460 2019-11-03 13:01:00+01:00 \n", + "31 1572868860 2019-11-04 13:01:00+01:00 \n", + "32 1572955260 2019-11-05 13:01:00+01:00 \n", + "33 1573041660 2019-11-06 13:01:00+01:00 \n", + "34 1573128060 2019-11-07 13:01:00+01:00 \n", + "35 1573214460 2019-11-08 13:01:00+01:00 \n", + "36 1573300860 2019-11-09 13:01:00+01:00 \n", + "37 1573387260 2019-11-10 13:01:00+01:00 \n", + "38 1573473660 2019-11-11 13:01:00+01:00 \n", + "39 1573560060 2019-11-12 13:01:00+01:00 \n", + "40 1573646460 2019-11-13 13:01:00+01:00 \n", + "41 1573732860 2019-11-14 13:01:00+01:00 \n", + "42 1573819260 2019-11-15 13:01:00+01:00 \n", + "43 1573905660 2019-11-16 13:01:00+01:00 \n", + "44 1573992060 2019-11-17 13:01:00+01:00 \n", + "45 1574078460 2019-11-18 13:01:00+01:00 \n", + "46 1574164860 2019-11-19 13:01:00+01:00 \n", + "47 1574251260 2019-11-20 13:01:00+01:00 \n", + "48 1574337660 2019-11-21 13:01:00+01:00 \n", + "49 1574424060 2019-11-22 13:01:00+01:00 " ] }, - "execution_count": 20, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -1632,7 +1652,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 23, "metadata": { "pycharm": { "name": "#%%\n" @@ -1641,7 +1661,7 @@ "outputs": [ { "data": { - "image/png": "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tmzZkvnz53deuHBh++S6xcXF+5YtW7Z04sSJNTfffHOxJE2dOrXXnXfeuW758uVLX3zxxRUdOnSoT65fVFTk3/ve994ZP378e8uXL186adKkzanHvuyyy/pddNFFNa+99trSc845Z/M3v/nNvsllNTU1eQsXLlw+e/bsVddee+3Rzf1chGQAAAActL59++457bTTdiVf33vvvUcmEomy8vLyxJo1a9ovWrSoMLnsggsu2CxJI0aM2Ll+/foCSTrppJN2TJkype+NN97Yc/Pmzbl5eU2fSVJZWdlx8uTJ70nSFVdcsenll1/ulFw2duzYLTk5ORo5cuTuDRs2tGvu5yIkAwAA4KAVFhZ+cOZ38eLFBdOnTy9+5plnXnvttdeWnnrqqdt2795tKeu6JOXm5qqurs4k6Wc/+9k706dPX7djx46cESNGlC1evLggHXWlXkzo3vzrCgnJAAAASIstW7bkduzYsa5r165169aty3/mmWc6N7bNkiVLCkaOHLn7Jz/5SXV5efmuqqqq9qnLO3XqVLdjx44GM+vxxx+/45577jlSku66665uI0aM2J6eT0JIBgAAOPwUdqptifv71Kc+tWvw4MHvl5SUlF900UX9hg8fvqOxbW666abiwYMHl5eUlCQ6d+5cN378+G2py8eMGbN96dKlHcrKyhIzZ87smrrszjvvfOPee+/tXlJSknj44Ye73n777evT8TkkyQ7m9HPSiZ3NF5yUrlKAw8SocXFX0KZtKE7EXQKANqb4ipsWuvuJcdZQWVm5tqKioibOGlqjysrK7hUVFf0bWsaZZAAAACCCkAwAAABEEJIBAACACEIyAAAAEEFIBgAAACIIyQAAAEBE05/7BwAAgBZh4703VvieXWnLcVbQobbHxf+38uPWyc3NHT548ODdydePPPLIqiFDhuxt7rFGjBgxZOrUqetPPfXUXd///vd73XzzzdUHU3OmEZIBAAAOM+kMyE3dX0FBQf3y5cuXpvO406ZNO6qlhmSmWwAAAOCgrFixot3w4cOHJBKJskQiUTZv3ryOkvTYY491+vSnPz0oud7EiROPmTZtWrfUba+44oqj9+zZk1NaWpoYO3bsgCuvvLL3DTfc0DO5/Fvf+tbRP/7xj3sqJpxJBgAAQKOSgVaS+vbtu2fevHmre/fuXfvss8++1qFDB1+8eHHB+eef/4mq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\n", + "image/png": "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G1tXU1OTuXXr1owPPvgg84ILLhj81ltvdTYzP3DggDXlXBMmTNiWmZmpUaNG7a2urs6WpPHjx9dcc801g959992shx56qOf48eO3ZmdnJ/pjHkRIBgAAQIu4u5YsWbIyLy/vkMfUXX755cedeeaZOxctWrRu9erVnc4+++zhTTle586dDx7H/cNDnn/++dVz5sw5ev78+Ufff//9byWq/oYwJxkAAAAtctppp+346U9/2jf2/UsvvZQrSTt27MgcMGDAfkmaPXt274b27datW93OnTszm3Keb37zm1WzZ8/Ol6TRo0fvbXnlh0dIBgAAaGu696pNp+P96le/2vjaa691LSgoKB4yZEjJnXfe2UeSrrvuusobbrhhwMknn1xYV1fX4L6TJ0/etnDhwh7xN+4dzsCBA2uHDBmy9+KLL65uSb1NYfFD2M01urv5klMTWA3QHoydmOoKOqTN+cWNbwQARyD/qhll7j46lTWUl5e/VVpaWpXKGtLBzp07M4qLi4tff/31lb169Wo4dTdDeXl579LS0uMbWsdIMgAAANLeggULuhUUFJRMmzZtcyICcmO4cQ8AAABpb+LEiTsnTpy4rLXOx0gyAAAAEEFIBgAAACIIyQAAAEAEIRkAAACI4MY9AACAtuanU0q1Z2ficlxut1pdN6/8cKsrKyszzzrrrOGSVFVVlZ2RkeFHH310rSS9/vrrK+PfkJcIa9euzb766qsHLly4cP0LL7zQpbKyMusrX/nKDkmaN29ejzVr1uTcdNNNmxJ5zihCMgAAQFuTyIDchOP169evbtWqVSskafr06f3z8vLqbrzxxkNCan19vdxdmZlNennexxo6dOiBhQsXrpekV155pUtFRUVuLCRPmTJlW4tP0ARMtwAAAMARqaioyBk2bFjJRRdddFxJSUnx22+/nX3hhRcOGjFiRNHQoUNLvve97x0T2zY/P//E6dOn9y8qKiouKCgoXrp0aY4kPf74492GDx9eXFhYWFxcXFy0Y8eOjIqKipzCwsLimpoau+22247505/+dHRhYWHx3Llze/7iF7/ofemllw6UpFWrVnU65ZRTCgoKCorHjh07bN26ddmS9OUvf3nw1KlTB44cObJwwIABJ8ybN69Hcz8bIRkAAABHbN26dZ2vvPLKqpUrV64YPHjwgTvuuOOdioqKlStXrly+ePHi7mVlZZ1j2+bn5x9YuXLliilTplTdeuut+ZI0c+bMfnffffeGVatWrXj55ZdXd+nSpT62fV5enn//+99/f9KkSR+sWrVqxdSpU7fGn/uKK64YdMkll1S98cYbK84777yt3/rWtwbG1lVVVWWVlZWtmj9//trrr7/+2OZ+LkIyAAAAjtjAgQP3nXnmmbtj399///1HFxcXF5WUlBSvX7++89KlS3Nj6y666KKtkjRmzJhdGzduzJGkU089tWb69OkDb7nllr5bt27NzMpq+kyS8vLyrtOmTftAkq666qrqV199tVts3YQJE7ZlZGTolFNO2bN58+ZOzf1chGQAAAAcsdzc3IMjv8uWLcuZPXt2/nPPPffGG2+8seKMM87YsWfPHovb1iUpMzNTdXV1Jkk/+9nP3p89e/aGmpqajDFjxhQtW7YsJxF1xd9M6N78+woJyQAAAEiIbdu2ZXbt2rWuZ8+edRs2bMh+7rnnuje2z/Lly3NOOeWUPT/5yU8qS0pKdldUVHSOX9+tW7e6mpqaBjPrSSedVHPfffcdLUn33HNPrzFjxuxMzCchJAMAALQ9ud1q0/F4n/rUp3YPGzZsb0FBQckll1wyaNSoUTWN7TNjxoz8YcOGlRQUFBR37969btKkSTvi148fP37nihUruhQVFRXPnTu3Z/y6u+++++3777+/d0FBQfGjjz7a884779yYiM8hSXYkw88xo7ubLzk1UaUA7cTYiamuoEPanF+c6hIAtFP5V80oc/fRqayhvLz8rdLS0qpU1tAelZeX9y4tLT2+oXWMJAMAAAARhGQAAAAggpAMAAAARBCSAQAAgAhCMgAAABBBSAYAAAAimv7ePwAAAKSFLfffUur7dicsx1lOl9o+l/6f8o/bJjMzc9SwYcP2xL5/7LHH1g4fPnx/c881ZsyY4TNnztx4xhln7P7BD37Q79Zbb608kpqTjZAMAADQxiQyIDf1eDk5OfWrVq1akcjzzpo165h0DclMtwAAAMARWb16dadRo0YNLy4uLiouLi5atGhRV0l64oknun36058eGttuypQpx82aNatX/L5XXXXVsfv27csoLCwsnjBhwuCrr766/0033dQ3tv7b3/72sTfffHNfpQgjyQAAAGhULNBK0sCBA/ctWrRoXf/+/Wuff/75N7p06eLLli3LufDCCz9RUVGxsinHu+uuu959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", "text/plain": [ "
" ] @@ -1657,7 +1677,7 @@ "''" ] }, - "execution_count": 21, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -1674,7 +1694,7 @@ } }, "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. " + "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" ] } ], diff --git a/docs/source/content/examples/8-inference.ipynb b/docs/source/content/examples/8-inference.ipynb index c8d576b2..e20bdb0b 100644 --- a/docs/source/content/examples/8-inference.ipynb +++ b/docs/source/content/examples/8-inference.ipynb @@ -20,7 +20,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "tags": [ "parameters" @@ -47,7 +47,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -59,24 +59,20 @@ "metadata": {}, "source": [ "### Load the data\n", - "The data from Iris dataset needs to be wrangled to conform to the format used by MVG. The data is in the form of a 2D numpy array which needs to be converted to a dictionary where each key holds the name of a column (in this case features of the plants) and the corresponding values." + "The data from Iris dataset needs to be wrangled to conform to the format used by MVG.\n", + "The data is in the form of a 2D numpy array which needs to be converted to a dictionary where each key holds the name of a column (in this case features of the plants) and the corresponding values." ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": {}, "outputs": [ { "data": { - "text/plain": [ - "['sepal length (cm)',\n", - " 'sepal width (cm)',\n", - " 'petal length (cm)',\n", - " 'petal width (cm)']" - ] + "text/plain": "['sepal length (cm)',\n 'sepal width (cm)',\n 'petal length (cm)',\n 'petal width (cm)']" }, - "execution_count": 2, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -89,7 +85,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -102,12 +98,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Note that this dataset is not a timeseries dataset. It is chosen because of its availability in the common python packages like sklearn. However, it is sufficient for demonstration purposes of the `ApplyModel` feature. MVG requires timestamps for each datapoint to be provided as well. We use dummy timestamps from 0 to 149." + "Note that this dataset is not a timeseries dataset.\n", + "It is chosen because of its availability in the common python packages like sklearn.\n", + "However, it is sufficient for demonstration purposes of the `ApplyModel` feature.\n", + "MVG requires timestamps for each datapoint to be provided as well.\n", + "We use dummy timestamps from 0 to 149." ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -124,7 +124,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -136,27 +136,20 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The three classes in the data are indicated in `dataset[\"target\"]`. Data is divided into three equal parts, each with 50 samples for each class." + "The three classes in the data are indicated in `dataset[\"target\"]`.\n", + "Data is divided into three equal parts, each with 50 samples for each class." ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { - "text/plain": [ - "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", - " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n", - " 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", - " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n", - " 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])" - ] + "text/plain": "array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])" }, - "execution_count": 6, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -169,13 +162,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Build the model\n", + "## Build the model\n", + "\n", "To demonstrate `ApplyModel` as a feature, we train a model on the middle 100 samples and then apply the trained model on the entire data." ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -196,7 +190,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -205,7 +199,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -217,30 +211,27 @@ "metadata": {}, "source": [ "### Review the results\n", + "\n", "We can plot the result of the analysis that shows the three distinct modes." ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { - "text/plain": [ - "[]" - ] + "text/plain": "[]" }, - "execution_count": 9, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", - "text/plain": [ - "
" - ] + "text/plain": "
", + "image/png": "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6qHFixdfKEmPPfZY2fTp0/cny/bs2VM4bdq0URUVFZWJRGL0qlWriiWpoaGhcMqUKZeMGTOmsq6ubnj0R/IeeOCBsnHjxo0ZPXp0ZV1d3fCWlrd2Mt9www2HCgoKVFBQoIkTJx7duXNnxj9zTaIMAACALjVjxoz9ixYt6nvs2DHbuHFj7+rq6qPJsrlz5w5JJBLHtmzZsuGee+7ZNXPmzJGSNG/evCHV1dXNGzdu3FBbW3tw9+7dPSVp7dq15y1ZsqSsvr5+06ZNmzYUFBS4Bx98sLytfb/xxhu2aNGi8quvvvpQpvUmUQYAAECXmjx58vGdO3f2euihh8qmTZt2RsK6evXqkltuuaVJkmpra48cPHiwqKmpqfCFF14omTVrVpMk3XjjjYdKS0vflKRnnnmmZP369b0TicSY0aNHV65cubJ069atvdra98yZM4dVVVU119TUNGdab27mAwAAQJerqak5ePfdd1/87LPPbt67d++pHDQ6pCLJzJwkFRS8tU/XOWfXX3990/3337+ro33OmTNncGNjY9GyZct+l02d6VEGAABAl5s9e3bjnDlzXps0adLx6PyqqqojDz/8cLkkLV26tKRv374tZWVlrVVVVUcWLFhQLkmPP/546eHDhwslqaam5vDSpUv77tq1q0jyY5y3bNnylvHHX//61/s999xzfZ566qmthYWFWdWZHmUAAIBzRc/ylk5/PFyaRo0adfKuu+7amzr/vvvue62urm5ERUVFZXFxcevChQu3SdL8+fNfmz59+rsqKyvHVFdXNw8ePPiEJE2YMOH1O++8c9fUqVMrWltb1aNHD/etb33r1YqKihPR7c6dO3f44MGD35g4ceIYSbrmmmsOfPWrX92dyduzuO7utFe2iU6qz3p9ICr7SASALvQD6+4a4B3IbtIa59zE7q7HunXrticSicburkcuW7duXb9EIjEiroyhFwAAAEAMEmUAAAAgBokyAABA/mptbW1l/FAbwrFpbaucRBkAACB/rd+3b18fkuW3am1ttX379vWRtL6tZXjqBQAAQJ5qaWm5taGh4fsNDQ1jRQdpqlZJ61taWm5tawESZQAAgDw1YcKEvZJqu7se71RcWQAAAAAxSJQBAACAGCTKAAAAQAwSZQAAACAGiTIAAAAQg0QZAAAAiEGiDAAAAMQgUQYAAABikCgDAAAAMUiU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\n" }, "metadata": { "needs_background": "light" @@ -249,7 +240,6 @@ } ], "source": [ - "\n", "mode_output[\"results\"].pop(\"mode_info\", None)\n", "mode_output[\"results\"].pop(\"mode_probabilities\", None)\n", "plotting.modes_over_time(pd.DataFrame(mode_output[\"results\"]), request_id)\n" @@ -259,21 +249,21 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Comparing the resulting labels with the ground-truth in the original iris dataset shows that the borders are identified precisely. Note that `ModeId` feature sorts the ID of modes in a way that the ID for the first encountered mode is reported as 0, the second mode as 1, and so on. This happens to be the case in the iris dataset as well but for other datasets sorting of modes needs to be done before comparison." + "Comparing the resulting labels with the ground-truth in the original iris dataset shows that the borders are identified precisely.\n", + "Note that `ModeId` feature sorts the ID of modes in a way that the ID for the first encountered mode is reported as 0, the second mode as 1, and so on.\n", + "This happens to be the case in the iris dataset as well but for other datasets sorting of modes needs to be done before comparison." ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "metadata": {}, "outputs": [ { "data": { - "text/plain": [ - "True" - ] + "text/plain": "True" }, - "execution_count": 10, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -286,13 +276,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Apply the model on the whole dataset\n", - "Now, we apply the model on the entire dataset. To that end, we need to call `ApplyModel` feature and provide the `request_id` of the analysis that contains the model. Note that running `ApplyModel` is much faster than `ModeId`." + "## Apply the model on the whole dataset\n", + "\n", + "Now, we apply the model on the entire dataset.\n", + "To that end, we need to call `ApplyModel` feature and provide the `request_id` of the analysis that contains the model.\n", + "Note that running `ApplyModel` is much faster than `ModeId`." ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ @@ -307,7 +300,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -319,27 +312,30 @@ "metadata": {}, "source": [ "### Review the results of the inference\n", + "\n", "Comparing the results, show that the first 25 and last 25 elements of the data that was excluded while building the model in earlier steps are now correctly classified." ] }, { "cell_type": "code", - "execution_count": 13, - "metadata": {}, + "execution_count": 16, + "metadata": { + "pycharm": { + "name": "#%%\n" + } + }, "outputs": [ { "data": { - "text/plain": [ - "True" - ] + "text/plain": "True" }, - "execution_count": 13, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "all(am_output[\"results\"][\"labels\"]==dataset[\"target\"])" + "all(am_output[\"results\"][\"labels\"]==dataset[\"target\"])\n" ] } ], @@ -368,4 +364,4 @@ }, "nbformat": 4, "nbformat_minor": 2 -} +} \ No newline at end of file diff --git a/docs/source/index.rst b/docs/source/index.rst index 590fdb25..abce0506 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -13,13 +13,13 @@ content/examples/1-brief_overview content/examples/0-check_version - content/examples/4-error_handling content/examples/2-sources_and_measurements content/examples/6-analysis_visual content/examples/5-analysis_classes content/examples/3-tabular_example content/examples/7-labeling content/examples/8-inference + content/examples/4-error_handling .. toctree:: :maxdepth: 2 diff --git a/mvg/features/analysis.py b/mvg/features/analysis.py index 884334f1..ae482a70 100644 --- a/mvg/features/analysis.py +++ b/mvg/features/analysis.py @@ -94,7 +94,7 @@ def _add_datetime(self, time_column="timestamps"): self.time_column = time_column self._results_df = self._add_datetime_df(self._results_df, self.time_column) - def _add_datetime_df(self, dframe, timecolumn): + def _add_datetime_df(self, dframe: pd.DataFrame, timecolumn): """ Convert EPOCH time to datetime with the timezone and time unit given in constructor. Will add @@ -110,7 +110,7 @@ def _add_datetime_df(self, dframe, timecolumn): Returns ------- - DataFrame with added datetime colums + DataFrame with added datetime column """ # EPOCH to datetime considering time zone @@ -118,7 +118,8 @@ def _add_datetime_df(self, dframe, timecolumn): dframe[timecolumn], unit=self._t_unit, utc=True ).dt.tz_convert(self._t_zone) - dframe["datetime"] = dt_col + timecolumn_idx = dframe.columns.get_loc(timecolumn) + dframe.insert(loc=timecolumn_idx, column="datetime", value=dt_col) # Mark timecolumn as available self.time_column = "datetime" diff --git a/mvg/features/kpidemo.py b/mvg/features/kpidemo.py index 325fb900..07ba1728 100644 --- a/mvg/features/kpidemo.py +++ b/mvg/features/kpidemo.py @@ -82,6 +82,7 @@ def plot( name of plot file (or emtpy string in case of interactive plot) """ result_df = self.to_df() + print("columns", result_df.columns) # Select the default column as the one after timestamps which is first kpi = kpi if kpi is not None else result_df.columns[1] diff --git a/mvg/mvg.py b/mvg/mvg.py index bf819de9..2001a94c 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -55,8 +55,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.12.0") - self.tested_api_version = self.parse_version("v0.3.2") + self.mvg_version = self.parse_version("v0.12.2") + self.tested_api_version = self.parse_version("v0.3.3") # Get API version try: @@ -236,7 +236,7 @@ def say_hello(self) -> dict: response = self._request("get", "") # return list of IDs - return response.json()["message"] + return response.json()["message"]["api"] def create_source( self, From 9a882ff65525ed0b3fe4fca9261114f77920ab8e Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Mon, 4 Apr 2022 12:04:07 +0200 Subject: [PATCH 64/90] Multiple fixes to modes_over_time (#159) * Multiple fixes to modes_over_time Co-Authored-By: Mohsen Nosratinia * Ignore pylint warnings related to overrided method params * Bump versions Co-authored-by: Mohsen Nosratinia --- mvg/features/kpidemo.py | 3 +- mvg/mvg.py | 4 +-- mvg/plotting.py | 67 +++++++++++++++++++++++++++++------------ 3 files changed, 51 insertions(+), 23 deletions(-) diff --git a/mvg/features/kpidemo.py b/mvg/features/kpidemo.py index 07ba1728..f166123d 100644 --- a/mvg/features/kpidemo.py +++ b/mvg/features/kpidemo.py @@ -54,7 +54,7 @@ def summary(self): def plot( self, kpi=None, interactive=True, time_format=None, filename=None - ): # pylint: disable=arguments-differ + ): # pylint: disable=arguments-differ,arguments-renamed """ Generate a basic plot on KPIs. @@ -82,7 +82,6 @@ def plot( name of plot file (or emtpy string in case of interactive plot) """ result_df = self.to_df() - print("columns", result_df.columns) # Select the default column as the one after timestamps which is first kpi = kpi if kpi is not None else result_df.columns[1] diff --git a/mvg/mvg.py b/mvg/mvg.py index 2001a94c..3cbaaaef 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -55,8 +55,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.12.2") - self.tested_api_version = self.parse_version("v0.3.3") + self.mvg_version = self.parse_version("v0.12.3") + self.tested_api_version = self.parse_version("v0.3.4") # Get API version try: diff --git a/mvg/plotting.py b/mvg/plotting.py index 3fe81c92..f460ca76 100644 --- a/mvg/plotting.py +++ b/mvg/plotting.py @@ -139,6 +139,7 @@ def modes_group_boxplot(dfs, feature, request_ids): # pylint: disable=too-many-locals +# pylint: disable=too-many-statements def modes_over_time( data, request_id, @@ -210,6 +211,13 @@ def modes_over_time( else: data["Date"] = pd.to_datetime(data["timestamps"], unit=timeunit) + # Add an additional row with a future timestamp to ensure the mode + # for the last timestamp (if the said mode lasts for a single + # timestamp) in the dataset is clearly visible. + ts_start, ts_end = data["timestamps"].iloc[[0, -1]] + ts_next = (ts_end - ts_start) / 30 + ts_end + data.loc[len(data)] = {**data.iloc[-1], "timestamps": int(ts_next)} + colors = colors or MODE_COLOR_CODES # Create figure with blank plot @@ -219,26 +227,30 @@ def modes_over_time( image = axes.plot() # Create rectangular patch for timestamp - ts_range = data["timestamps"].iloc[-1] - data["timestamps"].iloc[0] scaling_factor = len(data) / ts_range - def _plot_row(row_data, is_uncert_data, y_pos=0): - # Collect the indices of data where modes change plus start and end points + # List of coordinates, one for each row we want to plot + row_coordinates = [ + {"y_pos": 0, "row_height": 0.85 * height}, + {"y_pos": 0.85 * height, "row_height": 0.2 * height}, + ] + + def _plot_row(row_data, is_uncert_data, y_pos=0, row_height=height): + # Collect the indices of data where the labels change plus start and end points interval_list = ( [0] + [i for i in range(1, len(row_data)) if row_data[i] != row_data[i - 1]] + [len(row_data) - 1] ) - for idx in range(len(interval_list) - 1): - # gray border around uncertains i = interval_list[idx] + i_next = interval_list[idx + 1] if is_uncert_data: + # gray border around uncertains col = -2 if row_data[i] else -1 else: col = row_data[i] - i_next = interval_list[idx + 1] block_len = ( data["timestamps"].iloc[i_next] - data["timestamps"].iloc[i] ) * scaling_factor @@ -248,31 +260,50 @@ def _plot_row(row_data, is_uncert_data, y_pos=0): rect = patches.Rectangle( (width * start_pos, y_pos), width * block_len, - height - y_pos, + row_height, edgecolor=colors[col], facecolor=colors[col], fill=True, ) axes.add_patch(rect) + # This datalist contains the additional row which + # will be required to plot the patches datalist = data["labels"].tolist() - _plot_row(datalist, is_uncert_data=False) + _plot_row( + datalist, + is_uncert_data=False, + y_pos=row_coordinates[0]["y_pos"], + row_height=row_coordinates[0]["row_height"], + ) if show_uncertain: uncertlist = data["uncertain"].tolist() - _plot_row(uncertlist, is_uncert_data=True, y_pos=4 / 5 * height) + _plot_row( + uncertlist, + is_uncert_data=True, + y_pos=row_coordinates[1]["y_pos"], + row_height=row_coordinates[1]["row_height"], + ) # Create time ticks on x-axis and labels + # The tick indexes should be based on the user data + # (without the additional row) + _datalist = datalist[:-1] if timeticks_interval is None: tick_index = ( [0] - + [i for i in range(1, len(datalist)) if datalist[i] != datalist[i - 1]] - + [len(datalist) - 1] + + [ + i + for i in range(1, len(_datalist) - 1) + if datalist[i] != datalist[i - 1] + ] + + [len(_datalist) - 1] ) else: - tick_index = list(range(0, len(datalist), timeticks_interval)) + tick_index = list(range(0, len(_datalist), timeticks_interval)) if only_start_end_timeticks: - tick_index = [0, len(datalist) - 1] + tick_index = [0, len(_datalist) - 1] tick_positions = [ (data["timestamps"].iloc[i] - data["timestamps"].iloc[0]) * scaling_factor @@ -294,10 +325,9 @@ def _plot_row(row_data, is_uncert_data, y_pos=0): # Modify ticks position and create legend df_changes = data.iloc[tick_index] - if time_format is None: - tick_x_labels = df_changes["Date"].apply(lambda x: x.date()) - else: - tick_x_labels = df_changes["Date"].apply(lambda x: x.strftime(time_format)) + tick_x_labels = df_changes["Date"].apply( + lambda x: x.date() if time_format is None else x.strftime(time_format) + ) axes.set_xticklabels(tick_x_labels, rotation=timetick_angle) legend_labels = [ @@ -497,7 +527,6 @@ def modes_over_time_group(dfs, request_ids, days=1, tol=2, timeunit="ms"): ) -# pylint: disable=too-many-locals def plot_labels_over_time( data, source_id, @@ -510,7 +539,7 @@ def plot_labels_over_time( only_start_end_timeticks=False, timetick_angle=85, time_format=None, -): +): # pylint: disable=too-many-locals """Creates a rectangular timeline of labels. The rectangle presents the timeline of the labels for a source. From d8c332740cefbcea2650cfdfbd8d2bbe72efbf4c Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Wed, 11 May 2022 16:15:01 +0200 Subject: [PATCH 65/90] update tests after change in the structure of label endpoint (#163) * update tests after change in the structure of label endpoint * update api and mvg versions * fix list_labels for unlabeled measurements * update labeling example notebook * Update mvg/mvg.py Co-authored-by: Vishnu Nadhan Co-authored-by: Vishnu Nadhan --- docs/source/content/examples/7-labeling.ipynb | 947 +++++++++--------- mvg/mvg.py | 32 +- tests/test_api_sources.py | 44 +- 3 files changed, 531 insertions(+), 492 deletions(-) diff --git a/docs/source/content/examples/7-labeling.ipynb b/docs/source/content/examples/7-labeling.ipynb index f2ad4677..92111da5 100644 --- a/docs/source/content/examples/7-labeling.ipynb +++ b/docs/source/content/examples/7-labeling.ipynb @@ -84,9 +84,9 @@ { "data": { "text/plain": [ - "{'api_version': '0.3.2',\n", - " 'mvg_highest_tested_version': '0.3.2',\n", - " 'mvg_version': '0.12.2'}" + "{'api_version': '0.4.0',\n", + " 'mvg_highest_tested_version': '0.4.0',\n", + " 'mvg_version': '0.13.0'}" ] }, "execution_count": 3, @@ -150,7 +150,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": { "pycharm": { "name": "#%%\n" @@ -178,68 +178,68 @@ " \n", " \n", " \n", + " datetime\n", " timestamps\n", " labels\n", " uncertain\n", " mode_probability\n", - " datetime\n", " \n", " \n", " \n", " \n", " 0\n", - " 1570186860\n", + " 2019-10-05 13:01:00+02:00\n", + " 1570273260\n", " 0\n", " False\n", - " 0.912743\n", - " 2019-10-04 13:01:00+02:00\n", + " 0.966994\n", " \n", " \n", " 1\n", - " 1570273260\n", + " 2019-10-06 13:01:00+02:00\n", + " 1570359660\n", " 0\n", " False\n", - " 0.972841\n", - " 2019-10-05 13:01:00+02:00\n", + " 0.931219\n", " \n", " \n", " 2\n", - " 1570359660\n", + " 2019-10-07 13:01:00+02:00\n", + " 1570446060\n", " 0\n", " False\n", - " 0.929741\n", - " 2019-10-06 13:01:00+02:00\n", + " 0.999575\n", " \n", " \n", " 3\n", - " 1570446060\n", + " 2019-10-08 13:01:00+02:00\n", + " 1570532460\n", " 0\n", " False\n", - " 0.999620\n", - " 2019-10-07 13:01:00+02:00\n", + " 0.979806\n", " \n", " \n", " 4\n", - " 1570532460\n", + " 2019-10-09 13:01:00+02:00\n", + " 1570618860\n", " 0\n", " False\n", - " 0.978940\n", - " 2019-10-08 13:01:00+02:00\n", + " 0.885940\n", " \n", " \n", "\n", "" ], "text/plain": [ - " timestamps labels uncertain mode_probability datetime\n", - "0 1570186860 0 False 0.912743 2019-10-04 13:01:00+02:00\n", - "1 1570273260 0 False 0.972841 2019-10-05 13:01:00+02:00\n", - "2 1570359660 0 False 0.929741 2019-10-06 13:01:00+02:00\n", - "3 1570446060 0 False 0.999620 2019-10-07 13:01:00+02:00\n", - "4 1570532460 0 False 0.978940 2019-10-08 13:01:00+02:00" + " 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": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -254,7 +254,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": { "pycharm": { "name": "#%%\n" @@ -263,7 +263,7 @@ "outputs": [ { "data": { - "image/png": "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T55c98QTTxzb0riVKIuIiIhIXl155ZVbZs2aVbVr1y6rra3tMmrUqJ3psmnTpvVNpVK7li1b9vott9yyZtKkSScDXHfddX1HjRpVX1tb+/r48eO3rlu3riPAwoULj3r44Ye7z58/f8mSJUteLysr83vuuadH5vY2bNhQ0bVr130dOnQAYMCAAXs2bNjQsaVxK1EWERERkbw6++yzd69evbrTvffe233s2LHbMsteeeWVrlOmTKkDGD9+/I6tW7dW1NXVlb/00ktdJ0+eXAcwYcKEbZWVlfsA5s2b13Xx4sVdUqnU4EGDBtU8//zzlcuXL++Uuc7M3uc0M2vx3T90MZ+IiIiI5N24ceO23nTTTSc+9dRTSzdu3PhuDnqwpLas7MA+XXe3Sy65pO7uu+9e09S2jj/++IYdO3aU7927lw4dOrBy5cqOvXr1avG4aPUoi4iIiEjeXX311ZunTp26dsSIEbszp48cOXLHjBkzegDMnTu3a1VVVUP37t0bR44cueP+++/vATB79uzK7du3lwOMGzdu+9y5c6vWrFlTAWGM87Jly/YbVlFWVpZebxXA/fff3+P888/f2tKYlSiLiIiItBM9epDTrdXysb6BAwfuvfHGGzdmT7/jjjvWLly4sEt1dXXN9ddf3++BBx5YAXD77bevfeGFF46pqakZ/OSTT3br06fPHoBhw4a9fcMNN6wZM2ZMdXV1dc25555bvWrVqg7Z6/3Wt761+vvf//7xJ5100plvvfVWxbXXXru5pftnSd3duRo+fLjPnz//kJcXERERKUVmtsDdhxc7jkWLFq1MpVItThDbk0WLFvVMpVIDksrUoywiIiIikkCJsoiIiIhIAiXKIiIiIiIJlCiLiIiIiCQ4rER5b96f0i0iIiIiUhyH9cCR114Ds9YKRaR0Hfq9ZaRV/IcaKhERaTkNvRARERFpL3qSwhjWaq+epJrbpJkNu/DCC09O/713716qqqpSH/3oR09tSej9+vUbsm7dupw7eW+77bbjTjrppDPNbFhLlsukRFlERESkvag7vNEEh7K+zp07Ny5durRzfX29ATz22GOVvXv3zvsA3nPOOaf+6aefXta3b989h7oOJcoiIiIikldjxozZNmfOnGMBZs6c2f3iiy/eki7bsGFD+dixYwdWV1fXpFKpQS+//HJngPXr15ePHj36tMGDB9dMnDixf+ZD8qZPn959yJAhgwcNGlQzceLE/g0NBz4gcPTo0btPP/30Q06SQYmyiIiIiOTZlVdeuWXWrFlVu3btstra2i6jRo3amS6bNm1a31QqtWvZsmWv33LLLWsmTZp0MsB1113Xd9SoUfW1tbWvjx8/fuu6des6AixcuPCohx9+uPv8+fOXLFmy5PWysjK/5557euQjbiXKIiIiIpJXZ5999u7Vq1d3uvfee7uPHTt2W2bZK6+80nXKlCl1AOPHj9+xdevWirq6uvKXXnqp6+TJk+sAJkyYsK2ysnIfwLx587ouXry4SyqVGjxo0KCa559/vnL58uWd8hF3645TERERERFJMG7cuK033XTTiU899dTSjRs3vpuDZg6pSDMzBygrO7BP193tkksuqbv77rvX5DNeUI+yiIiIiBTA1VdfvXnq1KlrR4wYsTtz+siRI3fMmDGjB8DcuXO7VlVVNXTv3r1x5MiRO+6///4eALNnz67cvn17OcC4ceO2z507t2rNmjUVEMY4L1u2rGM+YlaiLCIiItJe9ODAq94KtL6BAwfuvfHGGzdmT7/jjjvWLly4sEt1dXXN9ddf3++BBx5YAXD77bevfeGFF46pqakZ/OSTT3br06fPHoBhw4a9fcMNN6wZM2ZMdXV1dc25555bvWrVqg7Z67311lt79e7d+6wNGzZ0TKVSNZdddln/lu6eJXV357ywDXeYf8jLi7QXeuBIkemBIyJSYHYFC9x9eLHjWLRo0cpUKrW52HEcyRYtWtQzlUoNSCpTj7KIiIiISAIlyiIiIiIiCZQoi4iIiIgkUKIsIiIiIpJAibKIiIiISAIlyiIiIiIiCfRkPhEREZH24uGeKfbUtV7+17FHA5/avOhgs5jZsAsuuGDL448/vgJg79699OrVKzV06NCdzz777F9y3VS/fv2GzJ8/v7ZPnz453bt5/PjxJ7/22mtHd+jQwYcOHbrzwQcffLNTp04tumOrepRFRERE2ovWTJJzXF/nzp0bly5d2rm+vt4AHnvsscrevXvvbdU4ElxxxRVbli9fvnjp0qV/evvtt+273/1uz5auQ4myiIiIiOTVmDFjts2ZM+dYgJkzZ3a/+OKLt6TLNmzYUD527NiB1dXVNalUatDLL7/cGWD9+vXlo0ePPm3w4ME1EydO7J/5kLzp06d3HzJkyOBBgwbVTJw4sX9Dw4GdzJdddtm2srIyysrKGD58+M7Vq1e3+DHXSpRFREREJK+uvPLKLbNmzaratWuX1dbWdhk1atTOdNm0adP6plKpXcuWLXv9lltuWTNp0qSTAa677rq+o0aNqq+trX19/PjxW9etW9cRYOHChUc9/PDD3efPn79kyZIlr5eVlfk999zTo6ltv/POOzZr1qwe55133raWxq1EWURERETy6uyzz969evXqTvfee2/3sWPH7pewvvLKK12nTJlSBzB+/PgdW7durairqyt/6aWXuk6ePLkOYMKECdsqKyv3AcybN6/r4sWLu6RSqcGDBg2qef755yuXL1/eqaltT5o06aSRI0fWjxs3rr6lcetiPhERERHJu3Hjxm296aabTnzqqaeWbty48d0cNHNIRZqZOUBZ2YF9uu5ul1xySd3dd9+9prltTp06tc/mzZsrnnzyyTcOJWb1KIuIiIhI3l199dWbp06dunbEiBG7M6ePHDlyx4wZM3oAzJ07t2tVVVVD9+7dG0eOHLnj/vvv7wEwe/bsyu3bt5cDjBs3bvvcuXOr1qxZUwFhjPOyZcsOGH/87W9/u+czzzzT7fHHH19eXl5+SDGrR1lERESkvejYo6HVbw+Xo4EDB+698cYbN2ZPv+OOO9ZOnDhxQHV1dU3nzp0bH3jggRUAt99++9qLL774lJqamsGjRo2q79Onzx6AYcOGvX3DDTesGTNmTHVjYyMdOnTwu+6666/V1dV7Mtc7bdq0/n369Hln+PDhgwHOP//8t+688851Ldk9S+ruznlhG+4w/5CXF2kvDv0ok1bxH1bsCESknbErWODuw4sdx6JFi1amUqnNxY7jSLZo0aKeqVRqQFKZhl6IiIiIiCRQoiwiIiIikkCJsoiIiEjpamxsbNT4sybEumlsqlyJsoiIiEjpWrxp06ZuSpYP1NjYaJs2beoGLG5qHt31QkRERKRENTQ0XLV+/fr71q9ffybqIM3WCCxuaGi4qqkZlCiLiIiIlKhhw4ZtBMYXO462Sr8sREREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUmgRFlEREREJIESZRERERGRBEqURUREREQSKFEWEREREUlg7n7oC5vtAJa2XjgiJasnsLnYQbRjqn8RKbTT3b1rsYOQw1NxmMsvdffhrRKJSAkzs/k6VopH9S8ihWZm84sdgxw+Db0QEREREUmgRFlEREREJMHhJso/apUoREqfjpXiUv2LSKGp3SkBh3Uxn4iIiIhIqdLQCxERERGRBEqURUREREQStDhRNjPLRyAiIiIiIkeSVhmjbGYd3H1vK8QjUjLMLP1D1F0XAxSNmfUA9gENwE69FyIikqsWPXDEzCqADwPvAG8DmwAH/hm4ttWjE2nD3L0xabqZlQMj3P3FAofUrpjZIOA8oAroB/wFWAz8ZzHjEpHSZWaDgQmE/OhFd18Qpxtwiru/Ucz4pOVa1KNsZgOBl4HHga3AMUB3YCzwAFDn7t9o/TBF2hYz6wpcCOwkPDq5jnDMrAUGAI+4+/uLFmCJM7O+wLeANwl1fx6wAjga6ANc6O51xYtQREqNmfUBvgvsBRoJbf3N7v5rM+sP3OfuHytiiHIIWvoI663ATKASqAUWAGOAIcCLgMYviwQp4JvALKA30AnoSGhATyIMBZD8GQz0dPfLAczsF8BX3f1SM/sMIYn+TPHCE5ESdDpQ5e4fBzCzc4E7zWwKIXFWjtQGtShRdvc6M/sicDUwEHiC0EO21N3nmFmnPMQo0hb1BVYTkmUDjiL0Zu4mJGipokXWPuwB9prZhwinQM8nDBkD2AF0KVZgIlKyehHOImJmndz9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", + "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": [ "
" ] @@ -279,7 +279,7 @@ "''" ] }, - "execution_count": 7, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -314,7 +314,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -345,7 +345,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": { "pycharm": { "name": "#%%\n" @@ -373,104 +373,104 @@ " \n", " \n", " \n", + " datetime\n", " timestamps\n", " labels\n", " uncertain\n", " mode_probability\n", - " datetime\n", " \n", " \n", " \n", " \n", - " 3\n", + " 2\n", + " 2019-10-07 13:01:00+02:00\n", " 1570446060\n", " 0\n", " False\n", - " 0.999620\n", - " 2019-10-07 13:01:00+02:00\n", + " 0.999575\n", " \n", " \n", - " 8\n", + " 7\n", + " 2019-10-12 13:01:00+02:00\n", " 1570878060\n", " 0\n", " False\n", - " 0.996754\n", - " 2019-10-12 13:01:00+02:00\n", + " 0.996115\n", " \n", " \n", - " 9\n", + " 8\n", + " 2019-10-13 13:01:00+02:00\n", " 1570964460\n", " 0\n", " False\n", - " 0.994076\n", - " 2019-10-13 13:01:00+02:00\n", + " 0.980702\n", " \n", " \n", - " 18\n", + " 17\n", + " 2019-10-22 13:01:00+02:00\n", " 1571742060\n", " 1\n", " False\n", - " 0.997126\n", - " 2019-10-22 13:01:00+02:00\n", + " 0.996703\n", " \n", " \n", - " 20\n", - " 1571914860\n", + " 22\n", + " 2019-10-27 13:01:00+01:00\n", + " 1572177660\n", " 1\n", " False\n", - " 0.995323\n", - " 2019-10-24 13:01:00+02:00\n", + " 0.996604\n", " \n", " \n", " 23\n", - " 1572177660\n", + " 2019-10-28 13:01:00+01:00\n", + " 1572264060\n", " 1\n", " False\n", - " 0.996432\n", - " 2019-10-27 13:01:00+01:00\n", + " 0.996323\n", " \n", " \n", - " 33\n", + " 32\n", + " 2019-11-06 13:01:00+01:00\n", " 1573041660\n", " 2\n", " False\n", - " 0.999948\n", - " 2019-11-06 13:01:00+01:00\n", + " 0.999899\n", " \n", " \n", - " 37\n", + " 36\n", + " 2019-11-10 13:01:00+01:00\n", " 1573387260\n", " 2\n", " False\n", - " 0.999831\n", - " 2019-11-10 13:01:00+01:00\n", + " 0.999897\n", " \n", " \n", - " 40\n", + " 39\n", + " 2019-11-13 13:01:00+01:00\n", " 1573646460\n", " 2\n", " False\n", - " 0.999388\n", - " 2019-11-13 13:01:00+01:00\n", + " 0.999187\n", " \n", " \n", "\n", "" ], "text/plain": [ - " timestamps labels uncertain mode_probability datetime\n", - "3 1570446060 0 False 0.999620 2019-10-07 13:01:00+02:00\n", - "8 1570878060 0 False 0.996754 2019-10-12 13:01:00+02:00\n", - "9 1570964460 0 False 0.994076 2019-10-13 13:01:00+02:00\n", - "18 1571742060 1 False 0.997126 2019-10-22 13:01:00+02:00\n", - "20 1571914860 1 False 0.995323 2019-10-24 13:01:00+02:00\n", - "23 1572177660 1 False 0.996432 2019-10-27 13:01:00+01:00\n", - "33 1573041660 2 False 0.999948 2019-11-06 13:01:00+01:00\n", - "37 1573387260 2 False 0.999831 2019-11-10 13:01:00+01:00\n", - "40 1573646460 2 False 0.999388 2019-11-13 13:01:00+01:00" + " 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": 9, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -494,7 +494,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": { "pycharm": { "name": "#%%\n" @@ -535,65 +535,56 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[{'timestamp': 1570273260,\n", - " 'label': 'bearing_failure',\n", - " 'severity': 3,\n", - " 'notes': 'Imaginary bearing failure',\n", - " 'label_timestamp': '2022-03-02 19:39:40'},\n", - " {'timestamp': 1570446060,\n", - " 'label': 'Healthy',\n", - " 'severity': 1,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:23'},\n", - " {'timestamp': 1570878060,\n", - " 'label': 'Healthy',\n", - " 'severity': 1,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:23'},\n", - " {'timestamp': 1570964460,\n", - " 'label': 'Healthy',\n", - " 'severity': 1,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:24'},\n", - " {'timestamp': 1571742060,\n", - " 'label': 'Transition',\n", - " 'severity': 2,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:24'},\n", - " {'timestamp': 1571914860,\n", - " 'label': 'Transition',\n", - " 'severity': 2,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:24'},\n", - " {'timestamp': 1572177660,\n", - " 'label': 'Transition',\n", - " 'severity': 2,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:24'},\n", - " {'timestamp': 1573041660,\n", - " 'label': 'Faulty',\n", - " 'severity': 3,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:24'},\n", - " {'timestamp': 1573387260,\n", - " 'label': 'Faulty',\n", - " 'severity': 3,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:25'},\n", - " {'timestamp': 1573646460,\n", - " 'label': 'Faulty',\n", - " 'severity': 3,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:25'}]" + "{'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": 11, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -612,7 +603,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -621,10 +612,10 @@ "{'label': 'bearing_failure',\n", " 'severity': 3,\n", " 'notes': 'Imaginary bearing failure',\n", - " 'label_timestamp': '2022-03-02 19:39:40'}" + " 'label_timestamp': '2022-05-10 10:15:56'}" ] }, - "execution_count": 12, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -645,65 +636,56 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[{'timestamp': 1570273260,\n", - " 'label': 'healthy',\n", - " 'severity': 0,\n", - " 'notes': 'This was an OK measurement',\n", - " 'label_timestamp': '2022-03-02 19:39:40'},\n", - " {'timestamp': 1570446060,\n", - " 'label': 'Healthy',\n", - " 'severity': 1,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:23'},\n", - " {'timestamp': 1570878060,\n", - " 'label': 'Healthy',\n", - " 'severity': 1,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:23'},\n", - " {'timestamp': 1570964460,\n", - " 'label': 'Healthy',\n", - " 'severity': 1,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:24'},\n", - " {'timestamp': 1571742060,\n", - " 'label': 'Transition',\n", - " 'severity': 2,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:24'},\n", - " {'timestamp': 1571914860,\n", - " 'label': 'Transition',\n", - " 'severity': 2,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:24'},\n", - " {'timestamp': 1572177660,\n", - " 'label': 'Transition',\n", - " 'severity': 2,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:24'},\n", - " {'timestamp': 1573041660,\n", - " 'label': 'Faulty',\n", - " 'severity': 3,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:24'},\n", - " {'timestamp': 1573387260,\n", - " 'label': 'Faulty',\n", - " 'severity': 3,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:25'},\n", - " {'timestamp': 1573646460,\n", - " 'label': 'Faulty',\n", - " 'severity': 3,\n", - " 'notes': 'This is a demo.',\n", - " 'label_timestamp': '2022-03-02 19:40:25'}]" + "{'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": 13, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -737,7 +719,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -746,13 +728,13 @@ "[]" ] }, - "execution_count": 14, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAskAAADQCAYAAAD1c/yXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAzl0lEQVR4nO3deXxU9b3/8dcnCQSBgLKvguwBFCm2ymLR1q1ulVKKdd+wav1ZtVXbSr2Ua2t9qLeW2ipqi0WLtV5ablVu1d7iUq22IKCCIIhxgYQlSAhbIMnn98c5A+OYbUgGzpm8n4/HPJLMfM45n/nON2c+853vOcfcHRERERER2SfnYCcgIiIiIhI1KpJFRERERFKoSBYRERERSaEiWUREREQkhYpkEREREZEUKpJFRERERFKoSBaJCTN7wcyuONDLRoWZ/a+ZXXyAtnW7mW0ys5IDsT0REYkeFckiB5iZFZnZSQc7jygzs2lm9ljyfe7+FXf/3QHY9uHAd4Gh7t4t09sLt3memX1gZtvNbJ6ZdUh6rIOZ/Tl87AMzOy+NZa81s4VmVmFmjxyI5yIiki1UJIvIQWVmeQc7hxSHA6XuviHdBffnuZjZMGAmcCHQFdgB/Dop5FfA7vCx84H7w2Uasuw64Hbgt+nmJSLS3KlIFokIMzvMzJ42s41m9kn4e6+UsP5m9i8z22pm/5Myanicmb1qZlvMbKmZnVDLdgaY2YtmVhZOKXiijpzONrNl4TpfMLPC8P5bzOy/U2J/YWYzwt/bm9lvzKzYzNaG0xdyw8cuMbNXzOznZlYKTEtZz2nAD4HJZrbNzJaG9++dMpKyji1mtsbMxoT3f2RmG5KnZphZvpndbWYfmtl6M3vAzA6p4fmeBDwP9Ai3/Uhd7RA+VhS2x5vA9tRC2cz6mpkn358y/eV84Cl3f8ndtwE/Ar5mZgVm1gaYCPzI3be5+z+AvxAUxXUuC+Duf3L3eUBpba+xiIjUTEWySHTkALOAPgSjmTuB+1JiLgIuA7oDlUCiKO0JPEMwatgB+B4w18w617Cd/wSeAw4DegG/rCkZMxsEPA5cD3QG5gNPmVlL4A/A6YliLCyAvwHMCRd/JMxvADASOAVInhN9LLCGYPTzJ8nbdfe/Aj8FnnD3tu4+oqb8wnW8CXQMt/sH4PPhNi8A7jOztmHsz4BBwNHh4z2B21JX6O5/A74CrAu3fUk97ZDwTeAM4FB3r6wl39oMA5Ym5fAewcjxoPBW6e7vJsUvDZepb1kREWkEFckiEeHupe4+1913uHs5QfE4PiXsUXd/2923E4wafiMsUC8A5rv7fHevdvfngYXA6TVsag9BId7D3XeFo5M1mQw84+7Pu/se4G7gEGCMu38AvAFMCGO/BOxw99fMrGu43evdfXs4beHnwLlJ617n7r9090p335lOOyV5391nuXsV8ATQG5ju7hXu/hxBsTjAzAy4ErjB3TeHbfvTlHzqUms7JMXMcPeP9vO5tAXKUu4rAwrCx7bW8lh9y4qISCOoSBaJCDNrbWYzw4OwtgIvAYcmpimEPkr6/QOgBdCJoOidFE4H2GJmW4BxBCPOqW4GDPhXOIXgslpS6hFuAwB3rw633zO8aw7BCCrAeewbRe4T5lWclMtMoEstz2N/rU/6fWeYY+p9bQlGf1sDi5Ly+Wt4f0PU1w7QuOezDWiXcl87oLyex+pbVkREGiFqB8yINGffBQYDx7p7iZkdDSwmKGgTeif9fjjBqPAmgiLtUXefUt9G3L0EmAJgZuOAv5nZS+6+OiV0HXBk4o9wRLY3sDa860ngnnDe9ARgdHj/R0AF0KmOqQdeX5r1PY80bCIomIe5+9r6gmtQXztA3fluD3+2Zt+ocPJZM5YBe6eUmFk/IB94F6gG8sxsoLuvCkNGhMvUt6yIiDSCRpJFDo4WZtYq6ZZH8BX5TmBLeEDef9Sw3AVmNtTMWgPTgf8Opxs8BpxlZqeaWW64zhPsswf+YWaTku7/hKDAq65hW38EzjCzL5tZC4IivgJ4FcDdNwIvEMyjft/d3wnvLyaY83yPmbUzsxwz629mqVNH6rIe6Gtmjd5HhSO/DwE/N7MuEMzhNrNTG7iKOtuhAdvfSFBQXxC+NpcB/ZNCfk/w2h0fHqg3HfiTu5eH02r+BEw3szZmNhb4KvBofcuGzzPPzFoBuUCiX2hwRESkAVQkixwc8wkK4sRtGnAvwVzXTcBrBFMCUj1KcFBcCdAKuA7A3T8iKJ5+CGwkGM29iZr/xz8PvG5m2wjOlPAdd1+TGuTuKwnmOv8yzOks4Cx3350UNgc4iX1TLRIuAloCywkK8f+m5qkftXky/FlqZm+ksVxtbgFWA6+FU1n+RjBqX68GtkN9phC8HqUEB9vtLbDdfRlwFUHBu4Hgw9I1ScteQ9AvNhAcQHh1uExDlp1K0L++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/0qKHwy8AzwArCPYya5I3WkkxXcj2Bm3J9jpvQTcFD68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", "text/plain": [ "
" ] @@ -787,14 +769,14 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Currently, there are 10 labels\n" + "Currently, there are 5 labels\n" ] } ], @@ -817,7 +799,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": { "pycharm": { "name": "#%%\n" @@ -830,7 +812,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": { "pycharm": { "name": "#%%\n" @@ -841,7 +823,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Currently, there are 9 labels\n" + "Currently, there are 5 labels\n" ] } ], @@ -872,7 +854,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": { "pycharm": { "name": "#%%\n" @@ -882,10 +864,10 @@ { "data": { "text/plain": [ - "{'request_id': '5a3c573907ce61089b3c2899496f3214', 'request_status': 'queued'}" + "{'request_id': 'e28ef3d9560bb88b5b70db685b8b8d8b', 'request_status': 'queued'}" ] }, - "execution_count": 18, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -910,7 +892,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": { "pycharm": { "name": "#%%\n" @@ -923,7 +905,7 @@ "'successful'" ] }, - "execution_count": 19, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -949,7 +931,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 19, "metadata": { "pycharm": { "name": "#%%\n" @@ -962,7 +944,7 @@ "dict_keys(['status', 'request_id', 'feature', 'results', 'inputs', 'error_info', 'debug_info'])" ] }, - "execution_count": 20, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -1009,7 +991,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "metadata": { "pycharm": { "name": "#%%\n" @@ -1033,7 +1015,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 21, "metadata": { "pycharm": { "name": "#%%\n" @@ -1065,8 +1047,9 @@ " severity\n", " notes\n", " label_timestamp\n", - " timestamp\n", " datetime\n", + " timestamp\n", + " certainty_level\n", " \n", " \n", " \n", @@ -1075,450 +1058,490 @@ " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1570186860\n", - " 2019-10-04 13:01:00+02:00\n", - " \n", - " \n", - " 1\n", - " Healthy\n", - " -1\n", - " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1570273260\n", + " 2022-05-10 10:16:12\n", " 2019-10-05 13:01:00+02:00\n", + " 1570273260\n", + " 1.0\n", " \n", " \n", - " 2\n", + " 1\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1570359660\n", + " 2022-05-10 10:16:12\n", " 2019-10-06 13:01:00+02:00\n", + " 1570359660\n", + " 1.0\n", " \n", " \n", - " 3\n", + " 2\n", " Healthy\n", " 1\n", " This is a demo.\n", - " 2022-03-02 19:40:23\n", - " 1570446060\n", + " 2022-05-10 10:15:56\n", " 2019-10-07 13:01:00+02:00\n", + " 1570446060\n", + " 1.0\n", " \n", " \n", - " 4\n", + " 3\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1570532460\n", + " 2022-05-10 10:16:12\n", " 2019-10-08 13:01:00+02:00\n", + " 1570532460\n", + " 1.0\n", " \n", " \n", - " 5\n", + " 4\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1570618860\n", + " 2022-05-10 10:16:12\n", " 2019-10-09 13:01:00+02:00\n", + " 1570618860\n", + " 1.0\n", " \n", " \n", - " 6\n", + " 5\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1570705260\n", + " 2022-05-10 10:16:12\n", " 2019-10-10 13:01:00+02:00\n", + " 1570705260\n", + " 1.0\n", " \n", " \n", - " 7\n", + " 6\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1570791660\n", + " 2022-05-10 10:16:12\n", " 2019-10-11 13:01:00+02:00\n", + " 1570791660\n", + " 1.0\n", " \n", " \n", - " 8\n", + " 7\n", " Healthy\n", " 1\n", " This is a demo.\n", - " 2022-03-02 19:40:23\n", - " 1570878060\n", + " 2022-05-10 10:15:56\n", " 2019-10-12 13:01:00+02:00\n", + " 1570878060\n", + " 1.0\n", " \n", " \n", - " 9\n", + " 8\n", " Healthy\n", " 1\n", " This is a demo.\n", - " 2022-03-02 19:40:24\n", - " 1570964460\n", + " 2022-05-10 10:15:56\n", " 2019-10-13 13:01:00+02:00\n", + " 1570964460\n", + " 1.0\n", " \n", " \n", - " 10\n", + " 9\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1571050860\n", + " 2022-05-10 10:16:12\n", " 2019-10-14 13:01:00+02:00\n", + " 1571050860\n", + " 1.0\n", " \n", " \n", - " 11\n", + " 10\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1571137260\n", + " 2022-05-10 10:16:12\n", " 2019-10-15 13:01:00+02:00\n", + " 1571137260\n", + " 1.0\n", " \n", " \n", - " 12\n", + " 11\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1571223660\n", + " 2022-05-10 10:16:12\n", " 2019-10-16 13:01:00+02:00\n", + " 1571223660\n", + " 1.0\n", " \n", " \n", - " 13\n", + " 12\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1571310060\n", + " 2022-05-10 10:16:12\n", " 2019-10-17 13:01:00+02:00\n", + " 1571310060\n", + " 1.0\n", " \n", " \n", - " 14\n", + " 13\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1571396460\n", + " 2022-05-10 10:16:12\n", " 2019-10-18 13:01:00+02:00\n", + " 1571396460\n", + " 1.0\n", " \n", " \n", - " 15\n", + " 14\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1571482860\n", + " 2022-05-10 10:16:12\n", " 2019-10-19 13:01:00+02:00\n", + " 1571482860\n", + " 1.0\n", " \n", " \n", - " 16\n", + " 15\n", " Healthy\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1571569260\n", + " 2022-05-10 10:16:12\n", " 2019-10-20 13:01:00+02:00\n", + " 1571569260\n", + " 1.0\n", " \n", " \n", - " 17\n", + " 16\n", " Transition\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1571655660\n", + " 2022-05-10 10:16:12\n", " 2019-10-21 13:01:00+02:00\n", + " 1571655660\n", + " 1.0\n", " \n", " \n", - " 18\n", + " 17\n", " Transition\n", " 2\n", " This is a demo.\n", - " 2022-03-02 19:40:24\n", - " 1571742060\n", + " 2022-05-10 10:15:56\n", " 2019-10-22 13:01:00+02:00\n", + " 1571742060\n", + " 1.0\n", " \n", " \n", - " 19\n", + " 18\n", " Transition\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1571828460\n", + " 2022-05-10 10:16:12\n", " 2019-10-23 13:01:00+02:00\n", + " 1571828460\n", + " 1.0\n", " \n", " \n", - " 20\n", + " 19\n", " Transition\n", - " 2\n", - " This is a demo.\n", - " 2022-03-02 19:40:24\n", - " 1571914860\n", + " -1\n", + " Added by label propagation\n", + " 2022-05-10 10:16:12\n", " 2019-10-24 13:01:00+02:00\n", + " 1571914860\n", + " 1.0\n", " \n", " \n", - " 21\n", + " 20\n", " Transition\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1572001260\n", + " 2022-05-10 10:16:12\n", " 2019-10-25 13:01:00+02:00\n", + " 1572001260\n", + " 1.0\n", " \n", " \n", - " 22\n", + " 21\n", " Transition\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1572087660\n", + " 2022-05-10 10:16:12\n", " 2019-10-26 13:01:00+02:00\n", + " 1572087660\n", + " 1.0\n", " \n", " \n", - " 23\n", + " 22\n", " Transition\n", " 2\n", " This is a demo.\n", - " 2022-03-02 19:40:24\n", - " 1572177660\n", + " 2022-05-10 10:15:57\n", " 2019-10-27 13:01:00+01:00\n", + " 1572177660\n", + " 1.0\n", " \n", " \n", - " 24\n", + " 23\n", " Transition\n", - " -1\n", - " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1572264060\n", + " 2\n", + " This is a demo.\n", + " 2022-05-10 10:15:57\n", " 2019-10-28 13:01:00+01:00\n", + " 1572264060\n", + " 1.0\n", " \n", " \n", - " 25\n", + " 24\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1572350460\n", + " 2022-05-10 10:16:12\n", " 2019-10-29 13:01:00+01:00\n", + " 1572350460\n", + " 1.0\n", " \n", " \n", - " 26\n", + " 25\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1572436860\n", + " 2022-05-10 10:16:12\n", " 2019-10-30 13:01:00+01:00\n", + " 1572436860\n", + " 1.0\n", " \n", " \n", - " 27\n", + " 26\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1572523260\n", + " 2022-05-10 10:16:12\n", " 2019-10-31 13:01:00+01:00\n", + " 1572523260\n", + " 1.0\n", " \n", " \n", - " 28\n", + " 27\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1572609660\n", + " 2022-05-10 10:16:12\n", " 2019-11-01 13:01:00+01:00\n", + " 1572609660\n", + " 1.0\n", " \n", " \n", - " 29\n", + " 28\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1572696060\n", + " 2022-05-10 10:16:12\n", " 2019-11-02 13:01:00+01:00\n", + " 1572696060\n", + " 1.0\n", " \n", " \n", - " 30\n", + " 29\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1572782460\n", + " 2022-05-10 10:16:12\n", " 2019-11-03 13:01:00+01:00\n", + " 1572782460\n", + " 1.0\n", " \n", " \n", - " 31\n", + " 30\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1572868860\n", + " 2022-05-10 10:16:12\n", " 2019-11-04 13:01:00+01:00\n", + " 1572868860\n", + " 1.0\n", " \n", " \n", - " 32\n", + " 31\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1572955260\n", + " 2022-05-10 10:16:12\n", " 2019-11-05 13:01:00+01:00\n", + " 1572955260\n", + " 1.0\n", " \n", " \n", - " 33\n", + " 32\n", " Faulty\n", " 3\n", " This is a demo.\n", - " 2022-03-02 19:40:24\n", - " 1573041660\n", + " 2022-05-10 10:15:57\n", " 2019-11-06 13:01:00+01:00\n", + " 1573041660\n", + " 1.0\n", " \n", " \n", - " 34\n", + " 33\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1573128060\n", + " 2022-05-10 10:16:12\n", " 2019-11-07 13:01:00+01:00\n", + " 1573128060\n", + " 1.0\n", " \n", " \n", - " 35\n", + " 34\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1573214460\n", + " 2022-05-10 10:16:12\n", " 2019-11-08 13:01:00+01:00\n", + " 1573214460\n", + " 1.0\n", " \n", " \n", - " 36\n", + " 35\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1573300860\n", + " 2022-05-10 10:16:12\n", " 2019-11-09 13:01:00+01:00\n", + " 1573300860\n", + " 1.0\n", " \n", " \n", - " 37\n", + " 36\n", " Faulty\n", " 3\n", " This is a demo.\n", - " 2022-03-02 19:40:25\n", - " 1573387260\n", + " 2022-05-10 10:15:57\n", " 2019-11-10 13:01:00+01:00\n", + " 1573387260\n", + " 1.0\n", " \n", " \n", - " 38\n", + " 37\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1573473660\n", + " 2022-05-10 10:16:12\n", " 2019-11-11 13:01:00+01:00\n", + " 1573473660\n", + " 1.0\n", " \n", " \n", - " 39\n", + " 38\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1573560060\n", + " 2022-05-10 10:16:12\n", " 2019-11-12 13:01:00+01:00\n", + " 1573560060\n", + " 1.0\n", " \n", " \n", - " 40\n", + " 39\n", " Faulty\n", " 3\n", " This is a demo.\n", - " 2022-03-02 19:40:25\n", - " 1573646460\n", + " 2022-05-10 10:15:57\n", " 2019-11-13 13:01:00+01:00\n", + " 1573646460\n", + " 1.0\n", " \n", " \n", - " 41\n", + " 40\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1573732860\n", + " 2022-05-10 10:16:12\n", " 2019-11-14 13:01:00+01:00\n", + " 1573732860\n", + " 1.0\n", " \n", " \n", - " 42\n", + " 41\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1573819260\n", + " 2022-05-10 10:16:12\n", " 2019-11-15 13:01:00+01:00\n", + " 1573819260\n", + " 1.0\n", " \n", " \n", - " 43\n", + " 42\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1573905660\n", + " 2022-05-10 10:16:12\n", " 2019-11-16 13:01:00+01:00\n", + " 1573905660\n", + " 1.0\n", " \n", " \n", - " 44\n", + " 43\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1573992060\n", + " 2022-05-10 10:16:12\n", " 2019-11-17 13:01:00+01:00\n", + " 1573992060\n", + " 1.0\n", " \n", " \n", - " 45\n", + " 44\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1574078460\n", + " 2022-05-10 10:16:12\n", " 2019-11-18 13:01:00+01:00\n", + " 1574078460\n", + " 1.0\n", " \n", " \n", - " 46\n", + " 45\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1574164860\n", + " 2022-05-10 10:16:12\n", " 2019-11-19 13:01:00+01:00\n", + " 1574164860\n", + " 1.0\n", " \n", " \n", - " 47\n", + " 46\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1574251260\n", + " 2022-05-10 10:16:12\n", " 2019-11-20 13:01:00+01:00\n", + " 1574251260\n", + " 1.0\n", " \n", " \n", - " 48\n", + " 47\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1574337660\n", + " 2022-05-10 10:16:12\n", " 2019-11-21 13:01:00+01:00\n", + " 1574337660\n", + " 1.0\n", " \n", " \n", - " 49\n", + " 48\n", " Faulty\n", " -1\n", " Added by label propagation\n", - " 2022-03-02 19:43:50\n", - " 1574424060\n", + " 2022-05-10 10:16:12\n", " 2019-11-22 13:01:00+01:00\n", + " 1574424060\n", + " 1.0\n", " \n", " \n", "\n", @@ -1526,111 +1549,109 @@ ], "text/plain": [ " label severity notes label_timestamp \\\n", - "0 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", - "1 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", - "2 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", - "3 Healthy 1 This is a demo. 2022-03-02 19:40:23 \n", - "4 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", - "5 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", - "6 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", - "7 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", - "8 Healthy 1 This is a demo. 2022-03-02 19:40:23 \n", - "9 Healthy 1 This is a demo. 2022-03-02 19:40:24 \n", - "10 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", - "11 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", - "12 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", - "13 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", - "14 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", - "15 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", - "16 Healthy -1 Added by label propagation 2022-03-02 19:43:50 \n", - "17 Transition -1 Added by label propagation 2022-03-02 19:43:50 \n", - "18 Transition 2 This is a demo. 2022-03-02 19:40:24 \n", - "19 Transition -1 Added by label propagation 2022-03-02 19:43:50 \n", - "20 Transition 2 This is a demo. 2022-03-02 19:40:24 \n", - "21 Transition -1 Added by label propagation 2022-03-02 19:43:50 \n", - "22 Transition -1 Added by label propagation 2022-03-02 19:43:50 \n", - "23 Transition 2 This is a demo. 2022-03-02 19:40:24 \n", - "24 Transition -1 Added by label propagation 2022-03-02 19:43:50 \n", - "25 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "26 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "27 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "28 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "29 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "30 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "31 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "32 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "33 Faulty 3 This is a demo. 2022-03-02 19:40:24 \n", - "34 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "35 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "36 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "37 Faulty 3 This is a demo. 2022-03-02 19:40:25 \n", - "38 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "39 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "40 Faulty 3 This is a demo. 2022-03-02 19:40:25 \n", - "41 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "42 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "43 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "44 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "45 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "46 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "47 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "48 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \n", - "49 Faulty -1 Added by label propagation 2022-03-02 19:43:50 \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", - " timestamp datetime \n", - "0 1570186860 2019-10-04 13:01:00+02:00 \n", - "1 1570273260 2019-10-05 13:01:00+02:00 \n", - "2 1570359660 2019-10-06 13:01:00+02:00 \n", - "3 1570446060 2019-10-07 13:01:00+02:00 \n", - "4 1570532460 2019-10-08 13:01:00+02:00 \n", - "5 1570618860 2019-10-09 13:01:00+02:00 \n", - "6 1570705260 2019-10-10 13:01:00+02:00 \n", - "7 1570791660 2019-10-11 13:01:00+02:00 \n", - "8 1570878060 2019-10-12 13:01:00+02:00 \n", - "9 1570964460 2019-10-13 13:01:00+02:00 \n", - "10 1571050860 2019-10-14 13:01:00+02:00 \n", - "11 1571137260 2019-10-15 13:01:00+02:00 \n", - "12 1571223660 2019-10-16 13:01:00+02:00 \n", - "13 1571310060 2019-10-17 13:01:00+02:00 \n", - "14 1571396460 2019-10-18 13:01:00+02:00 \n", - "15 1571482860 2019-10-19 13:01:00+02:00 \n", - "16 1571569260 2019-10-20 13:01:00+02:00 \n", - "17 1571655660 2019-10-21 13:01:00+02:00 \n", - "18 1571742060 2019-10-22 13:01:00+02:00 \n", - "19 1571828460 2019-10-23 13:01:00+02:00 \n", - "20 1571914860 2019-10-24 13:01:00+02:00 \n", - "21 1572001260 2019-10-25 13:01:00+02:00 \n", - "22 1572087660 2019-10-26 13:01:00+02:00 \n", - "23 1572177660 2019-10-27 13:01:00+01:00 \n", - "24 1572264060 2019-10-28 13:01:00+01:00 \n", - "25 1572350460 2019-10-29 13:01:00+01:00 \n", - "26 1572436860 2019-10-30 13:01:00+01:00 \n", - "27 1572523260 2019-10-31 13:01:00+01:00 \n", - "28 1572609660 2019-11-01 13:01:00+01:00 \n", - "29 1572696060 2019-11-02 13:01:00+01:00 \n", - "30 1572782460 2019-11-03 13:01:00+01:00 \n", - "31 1572868860 2019-11-04 13:01:00+01:00 \n", - "32 1572955260 2019-11-05 13:01:00+01:00 \n", - "33 1573041660 2019-11-06 13:01:00+01:00 \n", - "34 1573128060 2019-11-07 13:01:00+01:00 \n", - "35 1573214460 2019-11-08 13:01:00+01:00 \n", - "36 1573300860 2019-11-09 13:01:00+01:00 \n", - "37 1573387260 2019-11-10 13:01:00+01:00 \n", - "38 1573473660 2019-11-11 13:01:00+01:00 \n", - "39 1573560060 2019-11-12 13:01:00+01:00 \n", - "40 1573646460 2019-11-13 13:01:00+01:00 \n", - "41 1573732860 2019-11-14 13:01:00+01:00 \n", - "42 1573819260 2019-11-15 13:01:00+01:00 \n", - "43 1573905660 2019-11-16 13:01:00+01:00 \n", - "44 1573992060 2019-11-17 13:01:00+01:00 \n", - "45 1574078460 2019-11-18 13:01:00+01:00 \n", - "46 1574164860 2019-11-19 13:01:00+01:00 \n", - "47 1574251260 2019-11-20 13:01:00+01:00 \n", - "48 1574337660 2019-11-21 13:01:00+01:00 \n", - "49 1574424060 2019-11-22 13:01:00+01:00 " + " 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": 22, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -1652,7 +1673,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "metadata": { "pycharm": { "name": "#%%\n" @@ -1661,7 +1682,7 @@ "outputs": [ { "data": { - "image/png": "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G1tXU1OTuXXr1owPPvgg84ILLhj81ltvdTYzP3DggDXlXBMmTNiWmZmpUaNG7a2urs6WpPHjx9dcc801g959992shx56qOf48eO3ZmdnJ/pjHkRIBgAAQIu4u5YsWbIyLy/vkMfUXX755cedeeaZOxctWrRu9erVnc4+++zhTTle586dDx7H/cNDnn/++dVz5sw5ev78+Ufff//9byWq/oYwJxkAAAAtctppp+346U9/2jf2/UsvvZQrSTt27MgcMGDAfkmaPXt274b27datW93OnTszm3Keb37zm1WzZ8/Ol6TRo0fvbXnlh0dIBgAAaGu696pNp+P96le/2vjaa691LSgoKB4yZEjJnXfe2UeSrrvuusobbrhhwMknn1xYV1fX4L6TJ0/etnDhwh7xN+4dzsCBA2uHDBmy9+KLL65uSb1NYfFD2M01urv5klMTWA3QHoydmOoKOqTN+cWNbwQARyD/qhll7j46lTWUl5e/VVpaWpXKGtLBzp07M4qLi4tff/31lb169Wo4dTdDeXl579LS0uMbWsdIMgAAANLeggULuhUUFJRMmzZtcyICcmO4cQ8AAABpb+LEiTsnTpy4rLXOx0gyAAAAEEFIBgAAACIIyQAAAEAEIRkAAACI4MY9AACAtuanU0q1Z2ficlxut1pdN6/8cKsrKyszzzrrrOGSVFVVlZ2RkeFHH310rSS9/vrrK+PfkJcIa9euzb766qsHLly4cP0LL7zQpbKyMusrX/nKDkmaN29ejzVr1uTcdNNNmxJ5zihCMgAAQFuTyIDchOP169evbtWqVSskafr06f3z8vLqbrzxxkNCan19vdxdmZlNennexxo6dOiBhQsXrpekV155pUtFRUVuLCRPmTJlW4tP0ARMtwAAAMARqaioyBk2bFjJRRdddFxJSUnx22+/nX3hhRcOGjFiRNHQoUNLvve97x0T2zY/P//E6dOn9y8qKiouKCgoXrp0aY4kPf74492GDx9eXFhYWFxcXFy0Y8eOjIqKipzCwsLimpoau+22247505/+dHRhYWHx3Llze/7iF7/ofemllw6UpFWrVnU65ZRTCgoKCorHjh07bN26ddmS9OUvf3nw1KlTB44cObJwwIABJ8ybN69Hcz8bIRkAAABHbN26dZ2vvPLKqpUrV64YPHjwgTvuuOOdioqKlStXrly+ePHi7mVlZZ1j2+bn5x9YuXLliilTplTdeuut+ZI0c+bMfnffffeGVatWrXj55ZdXd+nSpT62fV5enn//+99/f9KkSR+sWrVqxdSpU7fGn/uKK64YdMkll1S98cYbK84777yt3/rWtwbG1lVVVWWVlZWtmj9//trrr7/+2OZ+LkIyAAAAjtjAgQP3nXnmmbtj399///1HFxcXF5WUlBSvX7++89KlS3Nj6y666KKtkjRmzJhdGzduzJGkU089tWb69OkDb7nllr5bt27NzMpq+kyS8vLyrtOmTftAkq666qrqV199tVts3YQJE7ZlZGTolFNO2bN58+ZOzf1chGQAAAAcsdzc3IMjv8uWLcuZPXt2/nPPPffGG2+8seKMM87YsWfPHovb1iUpMzNTdXV1Jkk/+9nP3p89e/aGmpqajDFjxhQtW7YsJxF1xd9M6N78+woJyQAAAEiIbdu2ZXbt2rWuZ8+edRs2bMh+7rnnuje2z/Lly3NOOeWUPT/5yU8qS0pKdldUVHSOX9+tW7e6mpqaBjPrSSedVHPfffcdLUn33HNPrzFjxuxMzCchJAMAALQ9ud1q0/F4n/rUp3YPGzZsb0FBQckll1wyaNSoUTWN7TNjxoz8YcOGlRQUFBR37969btKkSTvi148fP37nihUruhQVFRXPnTu3Z/y6u+++++3777+/d0FBQfGjjz7a884779yYiM8hSXYkw88xo7ubLzk1UaUA7cTYiamuoEPanF+c6hIAtFP5V80oc/fRqayhvLz8rdLS0qpU1tAelZeX9y4tLT2+oXWMJAMAAAARhGQAAAAggpAMAAAARBCSAQAAgAhCMgAAABBBSAYAAAAimv7ePwAAAKSFLfffUur7dicsx1lOl9o+l/6f8o/bJjMzc9SwYcP2xL5/7LHH1g4fPnx/c881ZsyY4TNnztx4xhln7P7BD37Q79Zbb608kpqTjZAMAADQxiQyIDf1eDk5OfWrVq1akcjzzpo165h0DclMtwAAAMARWb16dadRo0YNLy4uLiouLi5atGhRV0l64oknun36058eGttuypQpx82aNatX/L5XXXXVsfv27csoLCwsnjBhwuCrr766/0033dQ3tv7b3/72sTfffHNfpQgjyQAAAGhULNBK0sCBA/ctWrRoXf/+/Wuff/75N7p06eLLli3LufDCCz9RUVGxsinHu+uuu959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", + "image/png": "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", "text/plain": [ "
" ] @@ -1677,7 +1698,7 @@ "''" ] }, - "execution_count": 23, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -1718,7 +1739,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.9.5" } }, "nbformat": 4, diff --git a/mvg/mvg.py b/mvg/mvg.py index 3cbaaaef..715f56ec 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -14,6 +14,7 @@ import time import logging from typing import Dict, List, Optional +import pandas as pd import requests from requests.exceptions import RequestException @@ -55,8 +56,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.12.3") - self.tested_api_version = self.parse_version("v0.3.4") + self.mvg_version = self.parse_version("v0.13.0") + self.tested_api_version = self.parse_version("v0.4.0") # Get API version try: @@ -993,27 +994,14 @@ def list_labels( if not include_unlabeled: return labels - # Inlcude the missing labels + # Include the missing labels measurements = self.list_measurements(source_id) - labels_by_ts = {label["timestamp"]: label for label in labels} - labelled_measurements = [] - - for measurement in measurements: - timestamp = measurement["timestamp"] - if timestamp in labels_by_ts: - labelled_measurements.append(labels_by_ts[timestamp]) - else: - labelled_measurements.append( - { - "timestamp": timestamp, - "label": None, - "severity": -1, - "notes": "", - "label_timestamp": None, - } - ) - - return labelled_measurements + measurements_ts = pd.DataFrame(measurements)[["timestamp"]] + return ( + pd.DataFrame(labels) + .merge(measurements_ts, on=["timestamp"], how="outer", sort=True) + .to_dict("list") + ) def update_label( self, diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index 7f8c0d3d..e153e4f9 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -350,13 +350,15 @@ def test_create_label(session, tabular_source_with_measurements): labels = session.list_labels(source_id) - # Remove timestamps - for label in labels: - label.pop("label_timestamp") - assert labels == [ - dict(timestamp=timestamps[0], **label1), - dict(timestamp=timestamps[1], **label2), - ] + # Remove label creation timestamps + labels.pop("label_timestamp") + assert labels == { + "timestamp": timestamps[0:2], + "label": [label1["label"], label2["label"]], + "severity": [label1["severity"], label2["severity"]], + "notes": [label1["notes"], label2["notes"]], + } + label1_timestamp = label1_response.pop("label_timestamp") dtdiff1 = datetime.utcnow() - datetime.strptime( label1_timestamp, "%Y-%m-%d %H:%M:%S" @@ -406,4 +408,32 @@ def test_delete_label(session, tabular_source_with_measurements): assert exc.value.response.status_code == 404 +def test_list_labels(session, tabular_source_with_measurements): + source_id, tabular_dict = tabular_source_with_measurements + timestamps = tabular_dict["timestamp"] + for k in [0, -1]: + session.create_label( + source_id, + timestamps[k], + "failure", + 100, + "This is really bad!", + ) + + list_short = session.list_labels(source_id, include_unlabeled=False) + list_short.pop("label_timestamp") + assert list_short == { + "timestamp": [43854, 44080], + "label": ["failure", "failure"], + "severity": [100, 100], + "notes": ["This is really bad!", "This is really bad!"], + } + + list_long = session.list_labels(source_id, include_unlabeled=True) + assert list_long["timestamp"] == tabular_dict["timestamp"] + assert list_long["label"][0] == "failure" + assert list_long["label"][-1] == "failure" + assert np.all(np.isnan(np.array(list_long["label"][1:-2]))) + + # End of code From fa2a80b01bbb59e0bc6abcbc7d7479c3025838fe Mon Sep 17 00:00:00 2001 From: Sergio Martin-del-Campo <61144290+SergioMDCB@users.noreply.github.com> Date: Wed, 11 May 2022 18:24:34 +0200 Subject: [PATCH 66/90] Update Mode colors (#165) * Change of color code for mode 7 and 8 * Version change * update prod version Co-authored-by: Mohsen Nosratinia --- mvg/mvg.py | 4 ++-- mvg/plotting.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 715f56ec..0bffd3ec 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -56,8 +56,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.13.0") - self.tested_api_version = self.parse_version("v0.4.0") + self.mvg_version = self.parse_version("v0.13.1") + self.tested_api_version = self.parse_version("v0.4.1") # Get API version try: diff --git a/mvg/plotting.py b/mvg/plotting.py index f460ca76..d06dd1e7 100644 --- a/mvg/plotting.py +++ b/mvg/plotting.py @@ -26,8 +26,8 @@ [4, "pink"], [5, "steelblue"], [6, "olive"], - [7, "lavender"], - [8, "beige"], + [7, "purple"], + [8, "darkgoldenrod"], [9, "mediumseagreen"], [10, "indigo"], [11, "lightcoral"], From 600a7d09419bc73dd3ec691aed27f2395e615631 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Tue, 11 Oct 2022 16:50:14 +0200 Subject: [PATCH 67/90] Run tests against the latest docker image from ECR (#175) * Remove usage of deprecated functions * Bump tested API version * Run a test case that does not depend on analysis Revert "Run a test case that does not depend on analysis" This reverts commit be908a8da37c6d02c4761f6107f3ae4c2c10664f. Revert "Revert "Run a test case that does not depend on analysis"" This reverts commit 3dce11ef0b170a28f321425b8f81721ce254f52b. * Increased timeout to start docker services * Skip tests on callback feature * Pylint fixes * README for how-to-run-tests :pencil: * Disable debug in docker compose * Docker compose now spins up AWS services AWS authentication included in CI/CD for pytest tasks * Debug enabled Localstack debug enabled --- .github/workflows/ci-checks.yml | 50 +++++++++++++++++++--------- .pylintrc | 3 +- mvg/analysis_classes.py | 2 +- mvg/mvg.py | 2 +- tests/README.md | 58 +++++++++++++++++++++++++++++++++ tests/conftest.py | 9 ++--- tests/docker-compose.yml | 47 +++++++++++++++++++++++--- tests/localstack/init.sh | 5 +++ tests/test_analysis_classes.py | 2 +- tests/test_api_analyses.py | 9 +++++ 10 files changed, 158 insertions(+), 29 deletions(-) create mode 100644 tests/README.md create mode 100644 tests/localstack/init.sh diff --git a/.github/workflows/ci-checks.yml b/.github/workflows/ci-checks.yml index 4a66af1c..4fdeb05a 100644 --- a/.github/workflows/ci-checks.yml +++ b/.github/workflows/ci-checks.yml @@ -6,13 +6,19 @@ on: pull_request: branches: [ master ] +env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: eu-west-1 + AWS_ECR: 801465902363.dkr.ecr.eu-west-1.amazonaws.com + concurrency: group: ${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: black: - runs-on: [ ubuntu-latest ] + runs-on: ubuntu-latest name: "running black" steps: - uses: actions/checkout@v2 @@ -25,7 +31,7 @@ jobs: - name: "Run black!" run: "black --check ." pylint: - runs-on: [ ubuntu-latest ] + runs-on: ubuntu-latest name: "running pylint" steps: - uses: actions/checkout@v2 @@ -40,7 +46,7 @@ jobs: - name: "Run pylint!" run: "pylint mvg" flake8: - runs-on: [ ubuntu-latest ] + runs-on: ubuntu-latest name: "running flake8" steps: - uses: actions/checkout@v2 @@ -52,8 +58,8 @@ jobs: run: "pip install -r requirements_dev.txt" - name: "Run flake8!" run: "flake8 mvg" - pytest: - runs-on: [ ubuntu-latest ] + pytest: + runs-on: ubuntu-latest needs: [black, pylint, flake8] strategy: matrix: @@ -68,18 +74,24 @@ jobs: run: | pip install -r requirements.txt pip install -r requirements_dev.txt - - name: Login to GHCR - uses: docker/login-action@v1 + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1 with: - registry: ghcr.io - username: vagrinder - password: ${{ secrets.VAGRINDER_GITHUB_PKG_TOKEN }} + aws-access-key-id: ${{ env.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ env.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: Log in to Amazon ECR + uses: aws-actions/amazon-ecr-login@v1 - name: "Running tests with pytest" env: TEST_TOKEN: ${{ secrets.TEST_TOKEN }} run: "python -m pytest --verbose tests/ --ignore=tests/test_notebooks.py" + - name: Log out of Amazon ECR + id: login-ecr + if: always() + run: docker logout ${{ steps.login-ecr.outputs.registry }} test-notebooks: - runs-on: [ ubuntu-latest ] + runs-on: ubuntu-latest needs: [black, pylint, flake8] strategy: matrix: @@ -95,14 +107,20 @@ jobs: pip install -r requirements.txt pip install -r requirements_dev.txt pip install -r requirements_docs.txt - - name: Login to GHCR - uses: docker/login-action@v1 + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1 with: - registry: ghcr.io - username: vagrinder - password: ${{ secrets.VAGRINDER_GITHUB_PKG_TOKEN }} + aws-access-key-id: ${{ env.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ env.AWS_SECRET_ACCESS_KEY }} + aws-region: ${{ env.AWS_DEFAULT_REGION }} + - name: Log in to Amazon ECR + uses: aws-actions/amazon-ecr-login@v1 - name: "Running tests with pytest" timeout-minutes: 120 env: TEST_TOKEN: ${{ secrets.TEST_TOKEN }} run: "python -m pytest --verbose tests/test_notebooks.py" + - name: Log out of Amazon ECR + id: login-ecr + if: always() + run: docker logout ${{ steps.login-ecr.outputs.registry }} \ No newline at end of file diff --git a/.pylintrc b/.pylintrc index 21e98174..763cd91c 100644 --- a/.pylintrc +++ b/.pylintrc @@ -1,9 +1,8 @@ [pylint] disable = + W3101, # missing-timeout R0904, R0801, - C0330, - C0326, no-self-argument, no-name-in-module, too-few-public-methods, diff --git a/mvg/analysis_classes.py b/mvg/analysis_classes.py index d6ca1299..ef752b5d 100644 --- a/mvg/analysis_classes.py +++ b/mvg/analysis_classes.py @@ -63,7 +63,7 @@ def parse_results(results, t_zone=None, t_unit=None): feature = results["feature"] except KeyError: raise KeyError( - "Malformed input." "Check if input is result of a get_results call." + "Malformed input. Check if input is result of a get_results call." ) # Get the analysis class from the features dict diff --git a/mvg/mvg.py b/mvg/mvg.py index 0bffd3ec..e72f40bf 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -57,7 +57,7 @@ def __init__(self, endpoint: str, token: str): self.token = token self.mvg_version = self.parse_version("v0.13.1") - self.tested_api_version = self.parse_version("v0.4.1") + self.tested_api_version = self.parse_version("v0.4.6") # Get API version try: diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 00000000..c46512a1 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,58 @@ +# Running Tests + +The test suite tests the functionalities of the MVG client library. Some of these test cases involves a network call to the API, the `vibium-cloud` service. + +## Test against a local instance of the API +Assuming that the API runs on the host `http://localhost:8000`, use the host argument of `pytest` to run the tests against the local API instance. + +```bash +python -m pytest tests --host "http://localhost:8000" +``` + +## Test against a local instance of the AWS infrastructure +The `vibium-cloud` service is hosted on a AWS infrastructure and it is possible to clone the entire infrastructure locally. This way we run the test suite against a specific or the production version of the `vibium-cloud` service. + +Prerequisites: +- Docker +- [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) + + +Create an environment file named `services.env` in the `tests` folder with the following content +```env +AWS_DEFAULT_REGION= +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_ECR= +VIBIUM_VERSION=prod +``` +_The text within <> should be replaced with valid values_ + +Login to AWS +```bash +aws ecr auth +aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com +``` + +Run docker compose to setup the AWS infrastructure +```bash +docker compose --env-file=services.env up -d +``` + +Monitor the logs of the docker container `tests-vibium-api-1` to know if the service has started. If the service has started, the logs for the container would contain the below text +```text +tests-vibium-api-1 | 2022-10-11 10:29:30,890 - INFO - vibium_app.main - Creating manager FastApi application... +tests-vibium-api-1 | INFO: Started server process [9] +tests-vibium-api-1 | 2022-10-11 10:29:31,049 - INFO - uvicorn.error - Started server process [9] +tests-vibium-api-1 | INFO: Waiting for application startup. +tests-vibium-api-1 | 2022-10-11 10:29:31,049 - INFO - uvicorn.error - Waiting for application startup. +tests-vibium-api-1 | INFO: Application startup complete. +tests-vibium-api-1 | 2022-10-11 10:29:31,050 - INFO - uvicorn.error - Application startup complete. +tests-vibium-api-1 | INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) +tests-vibium-api-1 | 2022-10-11 10:29:31,050 - INFO - uvicorn.error - Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) +``` + +If all has been well so far, then the `vibium-cloud` service should be running on `http://localhost:8000`. The test suite can be run against this host as follows: + +```bash +python -m pytest tests --host "http://localhost:8000" +``` diff --git a/tests/conftest.py b/tests/conftest.py index 24e667d4..c354ca70 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -47,8 +47,9 @@ def pytest_addoption(parser): # Retrieve API version to test against -version_session = MVG("https://api.beta.multiviz.com", "NO TOKEN") -VIBIUM_VERSION = "v" + str(version_session.tested_api_version) +version_session = MVG(VIBIUM_PROD_URL, "NO TOKEN") +# VIBIUM_VERSION = str(version_session.tested_api_version) +VIBIUM_VERSION = "prod" # Pytest initial configuration def pytest_configure(): @@ -91,10 +92,10 @@ def vibium_prod(): def vibium(docker_ip, docker_services): """Ensure that HTTP service is up and responsive.""" # `port_for` takes a container port and returns the corresponding host port - port = docker_services.port_for("vibium", 8000) + port = docker_services.port_for("vibium-api", 8000) url = f"http://{docker_ip}:{port}" docker_services.wait_until_responsive( - timeout=30.0, pause=0.1, check=lambda: is_responsive(url) + timeout=120.0, pause=0.1, check=lambda: is_responsive(url) ) return url diff --git a/tests/docker-compose.yml b/tests/docker-compose.yml index bed0b022..6054b973 100644 --- a/tests/docker-compose.yml +++ b/tests/docker-compose.yml @@ -1,8 +1,47 @@ version: "3.3" +x-vibium-services-config: &vibium-services-config + image: ${AWS_ECR}/vibium-app:${VIBIUM_VERSION} + restart: unless-stopped + environment: + - VIBIUM_SLEEP=60 # wait for localstack to be ready + - VIBIUM_PIPELINE=/pipeline + - AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION} + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} + - AWS_ENDPOINT_URL=http://localstack:4566 + - ANALYSIS_IN_QUEUE=vibium-analysis-in + volumes: + - "vibium-pipeline:/pipeline" + networks: + - vibium_net + depends_on: + - localstack + services: - vibium: - image: ghcr.io/vikinganalytics/vibium/vibium_cloud:${VIBIUM_VERSION} - restart: unless-stopped + vibium-worker: + <<: *vibium-services-config + entrypoint: ["python", "worker.py"] + vibium-api: + <<: *vibium-services-config + ports: + - 8000:8000 + + localstack: + image: localstack/localstack:0.14 ports: - - 8000:8000 \ No newline at end of file + - 4566:4566 + - 4571:4571 + volumes: + - "./localstack:/docker-entrypoint-initaws.d" + environment: + - SERVICES=sqs,s3 + - AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION} + networks: + - vibium_net + +volumes: + vibium-pipeline: + +networks: + vibium_net: diff --git a/tests/localstack/init.sh b/tests/localstack/init.sh new file mode 100644 index 00000000..a94158a4 --- /dev/null +++ b/tests/localstack/init.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -x +awslocal sqs create-queue --region eu-west-1 --queue-name vibium-analysis-in +awslocal s3 mb s3://vibium-bucket +set +x diff --git a/tests/test_analysis_classes.py b/tests/test_analysis_classes.py index 8b4276cf..cdb300ea 100644 --- a/tests/test_analysis_classes.py +++ b/tests/test_analysis_classes.py @@ -93,7 +93,7 @@ def test_ModeId(): # Check dataframe conversion df_df = pd.read_csv("./tests/test_data/ModeId_df.csv") pd.testing.assert_frame_equal( - feat.to_df().drop("datetime", axis=1), df_df, check_less_precise=True + feat.to_df().drop("datetime", axis=1), df_df, atol=1e-5, rtol=0 ) # Summary diff --git a/tests/test_api_analyses.py b/tests/test_api_analyses.py index 23fb2739..7f7a2cc7 100644 --- a/tests/test_api_analyses.py +++ b/tests/test_api_analyses.py @@ -14,6 +14,8 @@ from pathlib import Path import pytest +from mvg import MVG + LOG_FILE = Path("_callback_test_server_log.txt") @@ -56,6 +58,11 @@ def callback_server(): os.remove(LOG_FILE) +def test_kpidemo_sources(session: MVG, waveform_source_with_measurements): + meas = session.list_measurements(waveform_source_with_measurements) + assert len(meas) > 0 + + def test_kpidemo_analysis(session, waveform_source_with_measurements): kpi = session.request_analysis(waveform_source_with_measurements, "KPIDemo") session.wait_for_analyses([kpi["request_id"]]) @@ -70,6 +77,7 @@ def test_kpidemo_analysis(session, waveform_source_with_measurements): assert len(kpi_results["acc"].keys()) == 7 +@pytest.mark.skip(reason="callback feature") def test_callback(session, callback_server, waveform_source_with_measurements): req = session.request_analysis( waveform_source_with_measurements, "KPIDemo", callback_url=callback_server @@ -81,6 +89,7 @@ def test_callback(session, callback_server, waveform_source_with_measurements): assert f"{req_id}::{status}" in LOG_FILE.read_text() +@pytest.mark.skip(reason="callback feature") def test_callback_server_failure( session, callback_server, waveform_source_with_measurements ): From ae823a9614d3e15142bd3f64f5d54d0e581619eb Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Fri, 4 Nov 2022 16:28:21 +0100 Subject: [PATCH 68/90] Retry mechanism for specific failed requests (#178) * Requests should retry on 502 * Display tests run durations * pylint cleanup * Bump MVG version * Cover more 5xx codes for retry requests Co-authored-by: Mohsen Nosratinia * Moving retry configuration to RequestRetry Co-authored-by: Mohsen Nosratinia --- .github/workflows/ci-checks.yml | 2 +- .pylintrc | 8 +--- mvg/http_client.py | 83 +++++++++++++++++++++++++++++++++ mvg/mvg.py | 33 ++++++------- requirements_dev.txt | 1 + tests/test_http_client.py | 80 +++++++++++++++++++++++++++++++ 6 files changed, 179 insertions(+), 28 deletions(-) create mode 100644 mvg/http_client.py create mode 100644 tests/test_http_client.py diff --git a/.github/workflows/ci-checks.yml b/.github/workflows/ci-checks.yml index 4fdeb05a..52c58984 100644 --- a/.github/workflows/ci-checks.yml +++ b/.github/workflows/ci-checks.yml @@ -85,7 +85,7 @@ jobs: - name: "Running tests with pytest" env: TEST_TOKEN: ${{ secrets.TEST_TOKEN }} - run: "python -m pytest --verbose tests/ --ignore=tests/test_notebooks.py" + run: "python -m pytest --durations=0 --verbose tests/ --ignore=tests/test_notebooks.py" - name: Log out of Amazon ECR id: login-ecr if: always() diff --git a/.pylintrc b/.pylintrc index 763cd91c..91ceb1df 100644 --- a/.pylintrc +++ b/.pylintrc @@ -1,18 +1,12 @@ [pylint] -disable = - W3101, # missing-timeout +disable = R0904, - R0801, - no-self-argument, - no-name-in-module, too-few-public-methods, too-many-arguments, logging-fstring-interpolation, - fixme, missing-module-docstring, missing-function-docstring, missing-class-docstring, raise-missing-from, - unsubscriptable-object # TODO: Only required in python 3.9 max-line-length = 88 \ No newline at end of file diff --git a/mvg/http_client.py b/mvg/http_client.py new file mode 100644 index 00000000..4c4928f1 --- /dev/null +++ b/mvg/http_client.py @@ -0,0 +1,83 @@ +import logging +from requests import Session +from requests.adapters import HTTPAdapter, Retry +from mvg.exceptions import raise_for_status + +logger = logging.getLogger(__name__) + + +class RequestRetry(Retry): + """ + Retry with logging + """ + + def __init__( + self, + total=3, + status_forcelist=frozenset([500, 502, 503, 504]), + raise_on_status=False, + backoff_factor=0.5, + remove_headers_on_redirect=frozenset(), + **kwargs, + ): + if kwargs.get("history"): + request = kwargs.get("history")[-1] + logger.warning( + f"Retring request {request[1]} with status code {request[3]}" + ) + + super().__init__( + total=total, + status_forcelist=status_forcelist, + raise_on_status=raise_on_status, + backoff_factor=backoff_factor, + remove_headers_on_redirect=remove_headers_on_redirect, + **kwargs, + ) + + +class HTTPClient: + def __init__( + self, + endpoint, + token, + retries=None, + timeout=120, + ): + self.endpoint = endpoint + self.token = token + self.timeout = timeout + + self.retries = retries + if not self.retries: + self.retries = RequestRetry() + + def request(self, method, path, headers=None, do_not_raise=None, **kwargs): + response = None + with Session() as session: + session.mount("http://", HTTPAdapter(max_retries=self.retries)) + session.mount("https://", HTTPAdapter(max_retries=self.retries)) + + _headers = {"Authorization": f"Bearer {self.token}"} + if headers: + _headers.update(headers) + + response = session.request( + method=method, + url=self.endpoint + path, + headers=_headers, + timeout=self.timeout, + **kwargs, + ) + + if do_not_raise is None: + do_not_raise = [] + + if response.status_code in do_not_raise: + logger.warning( + f"Ignoring error {response.status_code} - {response.text}" + ) + else: + raise_for_status(response) + + return response diff --git a/mvg/mvg.py b/mvg/mvg.py index e72f40bf..0c83e1f3 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -17,10 +17,10 @@ import pandas as pd import requests from requests.exceptions import RequestException - import semver -from mvg.exceptions import MVGConnectionError, raise_for_status +from mvg.exceptions import MVGConnectionError +from mvg.http_client import HTTPClient logger = logging.getLogger(__name__) @@ -56,8 +56,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.13.1") - self.tested_api_version = self.parse_version("v0.4.6") + self.mvg_version = self.parse_version("v0.13.2") + self.tested_api_version = self.parse_version("v0.4.7") # Get API version try: @@ -70,7 +70,9 @@ def __init__(self, endpoint: str, token: str): self.api_version = self.parse_version(api_vstr) self.api_content = api_root["content"] - def _request(self, method, path, do_not_raise=None, **kwargs) -> requests.Response: + def _request( + self, method, path, do_not_raise=None, retries=None, **kwargs + ) -> requests.Response: """Helper function for removing duplicate code on API requests. Makes requests on self.endpoint with authorization header and validates the response by status code. Writes DEBUG logs on @@ -87,6 +89,9 @@ def _request(self, method, path, do_not_raise=None, **kwargs) -> requests.Respon do_not_raise : list List of error status codes to ignore. Defaults to [] if None + retries: RequestRetry + A RequestRetry object that defines the configuration for retry requests + **kwargs : Any Keyword arguments to pass to requests.request @@ -94,22 +99,10 @@ def _request(self, method, path, do_not_raise=None, **kwargs) -> requests.Respon ------- Response from the API call """ - headers = {"Authorization": f"Bearer {self.token}"} - response = requests.request( - method=method, - url=self.endpoint + path, - headers=headers, - **kwargs, + client = HTTPClient(self.endpoint, self.token, retries) + response = client.request( + method=method, path=path, do_not_raise=do_not_raise, **kwargs ) - - if do_not_raise is None: - do_not_raise = [] - - if response.status_code in do_not_raise: - logger.info(f"Ignoring error {response.status_code} - {response.text}") - else: - raise_for_status(response) - return response @staticmethod diff --git a/requirements_dev.txt b/requirements_dev.txt index 8ed88eff..3a79ac2c 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -8,6 +8,7 @@ darglint pylint pytest pytest-docker +pytest_localserver # for callback test server uvicorn==0.16.0 fastapi diff --git a/tests/test_http_client.py b/tests/test_http_client.py new file mode 100644 index 00000000..391fb4f0 --- /dev/null +++ b/tests/test_http_client.py @@ -0,0 +1,80 @@ +from mvg.exceptions import MVGAPIError +from mvg.http_client import HTTPClient, RequestRetry + +from pytest_localserver import http +import pytest + + +@pytest.fixture +def httpserver(request): + server = http.ContentServer() + server.start() + request.addfinalizer(server.stop) + yield server + + +def test_retry_default(httpserver): + client = HTTPClient(endpoint=httpserver.url, token="") + retries = client.retries.total + status_forcelist = client.retries.status_forcelist + status_code = next(iter(status_forcelist)) + + # Ask the server to return content with the provided status code + httpserver.serve_content({}, code=status_code) + with pytest.raises(MVGAPIError) as excinfo: + client.request("get", "") + + assert excinfo.value.response.status_code == status_code + assert len(httpserver.requests) == retries + 1 + + +def test_retry_custom(httpserver): + # Define retry for status code 402 + status_code = 402 + retries_obj = RequestRetry( + total=3, + status_forcelist=[status_code], + raise_on_status=False, + backoff_factor=0.5, + remove_headers_on_redirect=[], + ) + client = HTTPClient(endpoint=httpserver.url, token="", retries=retries_obj) + retries = client.retries.total + + httpserver.serve_content({}, code=status_code) + with pytest.raises(MVGAPIError) as exc: + client.request("get", "") + + assert exc.value.response.status_code == status_code + assert len(httpserver.requests) == retries + 1 + + +def test_ignore_409(httpserver): + client = HTTPClient(endpoint=httpserver.url, token="") + status_code = 409 + + httpserver.serve_content({}, code=status_code) + # Does not raise 409 + client.request("get", "", do_not_raise=[status_code]) + assert len(httpserver.requests) == 1 + + +def test_do_not_ignore_409(httpserver): + client = HTTPClient(endpoint=httpserver.url, token="") + status_code = 409 + + httpserver.serve_content({}, code=status_code) + # Raises 409 + with pytest.raises(MVGAPIError) as _: + client.request("get", "", do_not_raise=[]) + assert len(httpserver.requests) == 1 + + +def test_no_retry(httpserver): + client = HTTPClient(endpoint=httpserver.url, token="") + # Successful request is assumed to be never retried + status_code = 200 + + httpserver.serve_content({}, code=status_code) + client.request("get", "") + assert len(httpserver.requests) == 1 From b41e334782a97f57d15364f19435ef44e38eb602 Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Tue, 8 Nov 2022 18:26:04 +0100 Subject: [PATCH 69/90] replace sklearn with scikit-learn (#181) --- requirements_docs.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_docs.txt b/requirements_docs.txt index 81f1a661..21c57032 100644 --- a/requirements_docs.txt +++ b/requirements_docs.txt @@ -6,4 +6,4 @@ sphinx-rtd-theme nbsphinx sphinx-copybutton m2r2 -sklearn +scikit-learn From 05d4ec77f1b1f5d00e8f779bd70fb816a90dc97e Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Tue, 8 Nov 2022 19:52:37 +0100 Subject: [PATCH 70/90] introduce code coverage (#179) --- .github/workflows/ci-checks.yml | 2 +- requirements_dev.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-checks.yml b/.github/workflows/ci-checks.yml index 52c58984..a7107c4f 100644 --- a/.github/workflows/ci-checks.yml +++ b/.github/workflows/ci-checks.yml @@ -85,7 +85,7 @@ jobs: - name: "Running tests with pytest" env: TEST_TOKEN: ${{ secrets.TEST_TOKEN }} - run: "python -m pytest --durations=0 --verbose tests/ --ignore=tests/test_notebooks.py" + run: "python -m pytest --cov-report term-missing --cov=mvg --durations=0 --verbose tests/ --ignore=tests/test_notebooks.py" - name: Log out of Amazon ECR id: login-ecr if: always() diff --git a/requirements_dev.txt b/requirements_dev.txt index 3a79ac2c..63636bb1 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -9,6 +9,7 @@ pylint pytest pytest-docker pytest_localserver +pytest-cov # for callback test server uvicorn==0.16.0 fastapi From d37275678ca88e50f7b343715eba39b1f0f4bc9f Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Tue, 8 Nov 2022 19:55:35 +0100 Subject: [PATCH 71/90] introduce pyhon 3.11 to CI checks (#180) --- .github/workflows/ci-checks.yml | 6 +++--- setup.py | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-checks.yml b/.github/workflows/ci-checks.yml index a7107c4f..2529a318 100644 --- a/.github/workflows/ci-checks.yml +++ b/.github/workflows/ci-checks.yml @@ -63,7 +63,7 @@ jobs: needs: [black, pylint, flake8] strategy: matrix: - python-version: [3.6,3.7,3.8,3.9,"3.10"] + python-version: ["3.6","3.7","3.8","3.9","3.10","3.11"] steps: - uses: actions/checkout@v2 - name: "Set up Python ${{ matrix.python-version }}" @@ -95,7 +95,7 @@ jobs: needs: [black, pylint, flake8] strategy: matrix: - python-version: [3.6,3.7,3.8,3.9,"3.10"] + python-version: ["3.6","3.7","3.8","3.9","3.10","3.11"] steps: - uses: actions/checkout@v2 - name: "Set up Python ${{ matrix.python-version }}" @@ -123,4 +123,4 @@ jobs: - name: Log out of Amazon ECR id: login-ecr if: always() - run: docker logout ${{ steps.login-ecr.outputs.registry }} \ No newline at end of file + run: docker logout ${{ steps.login-ecr.outputs.registry }} diff --git a/setup.py b/setup.py index 37b2191e..66facf56 100644 --- a/setup.py +++ b/setup.py @@ -39,6 +39,7 @@ "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", ], python_requires=">=3.6", install_requires=required, From f9218894a9f4a5997ce3d1759d3730c8917f13be Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Thu, 24 Nov 2022 17:34:15 +0100 Subject: [PATCH 72/90] Ability to delete an analysis (#188) * Bump minor version * Ability to delete an analysis * Update mvg/mvg.py Co-authored-by: Mohsen Nosratinia * Ability to delete an analysis Co-authored-by: Mohsen Nosratinia --- mvg/mvg.py | 17 +++++++- tests/helpers.py | 2 +- tests/test_api_analyses.py | 88 ++++++++++++++++++++++++++++++-------- 3 files changed, 86 insertions(+), 21 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 0c83e1f3..447f49ae 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -56,7 +56,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.13.2") + self.mvg_version = self.parse_version("v0.13.3") self.tested_api_version = self.parse_version("v0.4.7") # Get API version @@ -898,6 +898,21 @@ def get_analysis_results(self, request_id: str) -> dict: return response.json() + def delete_analysis(self, request_id: str): + """Deletes an analysis. + + Parameters + ---------- + request_id : str + request_id (analysis identifier) + + """ + + logger.info("endpoint %s", self.endpoint) + logger.info("deleting analysis with request_id=%s", request_id) + + self._request("delete", f"/analyses/requests/{request_id}") + # Labels def create_label( self, diff --git a/tests/helpers.py b/tests/helpers.py index 97e0c2a4..556b3da2 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -1,5 +1,5 @@ -import numpy as np from itertools import cycle +import numpy as np from mvg.mvg import MVG diff --git a/tests/test_api_analyses.py b/tests/test_api_analyses.py index 7f7a2cc7..8568bb1c 100644 --- a/tests/test_api_analyses.py +++ b/tests/test_api_analyses.py @@ -15,6 +15,7 @@ import pytest from mvg import MVG +from mvg.exceptions import MVGAPIError LOG_FILE = Path("_callback_test_server_log.txt") @@ -64,11 +65,13 @@ def test_kpidemo_sources(session: MVG, waveform_source_with_measurements): def test_kpidemo_analysis(session, waveform_source_with_measurements): - kpi = session.request_analysis(waveform_source_with_measurements, "KPIDemo") - session.wait_for_analyses([kpi["request_id"]]) - status = session.get_analysis_status(kpi["request_id"]) + request = session.request_analysis(waveform_source_with_measurements, "KPIDemo") + request_id = request["request_id"] + + session.wait_for_analyses([request_id]) + status = session.get_analysis_status(request_id) assert status == "successful" - results = session.get_analysis_results(kpi["request_id"]) + results = session.get_analysis_results(request_id) assert len(results.keys()) == 7 assert results["status"] == "successful" assert results["feature"] == "KPIDemo" @@ -76,44 +79,62 @@ def test_kpidemo_analysis(session, waveform_source_with_measurements): assert len(kpi_results.keys()) == 2 assert len(kpi_results["acc"].keys()) == 7 + # Delete analysis + session.delete_analysis(request_id) + @pytest.mark.skip(reason="callback feature") def test_callback(session, callback_server, waveform_source_with_measurements): - req = session.request_analysis( + request = session.request_analysis( waveform_source_with_measurements, "KPIDemo", callback_url=callback_server ) - req_id = req["request_id"] - session.wait_for_analyses([req_id]) - status = session.get_analysis_status(req_id) + request_id = request["request_id"] + session.wait_for_analyses([request_id]) + status = session.get_analysis_status(request_id) assert status == "successful" - assert f"{req_id}::{status}" in LOG_FILE.read_text() + assert f"{request_id}::{status}" in LOG_FILE.read_text() + + # Delete analysis + session.delete_analysis(request_id) @pytest.mark.skip(reason="callback feature") def test_callback_server_failure( session, callback_server, waveform_source_with_measurements ): - req = session.request_analysis( + request = session.request_analysis( waveform_source_with_measurements, "KPIDemo", callback_url=f"{callback_server}/fail", ) - session.wait_for_analyses([req["request_id"]]) + request_id = request["request_id"] + session.wait_for_analyses([request_id]) assert "400 Bad Request" in LOG_FILE.read_text() + # Delete analysis + session.delete_analysis(request_id) + def test_modeid_analysis_selected_columns(session, tabular_source_with_measurements): source_id, tabular_dict = tabular_source_with_measurements columns = list(tabular_dict.keys()) def assert_results(selected_columns): - req = session.request_analysis( - source_id, "ModeId", selected_columns=selected_columns + parameters = {"n_trials": 1} + request = session.request_analysis( + source_id, + "ModeId", + selected_columns=selected_columns, + parameters=parameters, ) - session.wait_for_analyses([req["request_id"]]) - results = session.get_analysis_results(req["request_id"]) + request_id = request["request_id"] + session.wait_for_analyses([request_id]) + results = session.get_analysis_results(request_id) assert results["inputs"]["selected_columns"] == (selected_columns or []) + # Delete analysis + session.delete_analysis(request_id) + # Test with defined selected_columns assert_results(columns[1:3]) @@ -127,15 +148,44 @@ def test_modeid_analysis_selected_channels(session, waveform_source_multiaxial_0 channels = source_info["properties"]["channels"] def assert_results(selected_channels): - req = session.request_analysis( - source_id, "ModeId", selected_channels=selected_channels + parameters = {"n_trials": 1} + request = session.request_analysis( + source_id, + "ModeId", + selected_channels=selected_channels, + parameters=parameters, ) - session.wait_for_analyses([req["request_id"]]) - results = session.get_analysis_results(req["request_id"]) + request_id = request["request_id"] + session.wait_for_analyses([request_id]) + results = session.get_analysis_results(request_id) assert results["inputs"]["selected_channels"] == (selected_channels or []) + # Delete analysis + session.delete_analysis(request_id) + # Test with defined selected_channels assert_results(channels[:2]) # Test with defined selected_channels assert_results(None) + + +def test_delete_analysis(session, waveform_source_multiaxial_001): + source_id, _ = waveform_source_multiaxial_001 + parameters = {"n_trials": 10} + request = session.request_analysis( + sid=source_id, feature="ModeId", parameters=parameters + ) + request_id = request["request_id"] + + # Deleting a queued analysis + with pytest.raises(MVGAPIError) as exc: + session.delete_analysis(request_id) + + session.wait_for_analyses([request_id]) + session.delete_analysis(request_id) + + # Accessing a deleted analysis + with pytest.raises(MVGAPIError) as exc: + session.get_analysis_results(request_id) + assert f"Request with ID {request_id} does not exist" in str(exc) From 702af15e254298152bc4421cabc4ab83793f171d Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Fri, 9 Dec 2022 11:57:05 +0100 Subject: [PATCH 73/90] add codecov (#189) * add codecov * add ubuntu-20.04 for py36 * remove py3.6 * update API version * py3.6 os version * fix py for notebook tests and update action versions --- .github/workflows/ci-checks.yml | 38 +++++++++++++++++++++------------ mvg/mvg.py | 2 +- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/.github/workflows/ci-checks.yml b/.github/workflows/ci-checks.yml index 2529a318..aec150d2 100644 --- a/.github/workflows/ci-checks.yml +++ b/.github/workflows/ci-checks.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest name: "running black" steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: "Set up Python 3" - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: '3.x' - name: "Install dependencies" @@ -34,9 +34,9 @@ jobs: runs-on: ubuntu-latest name: "running pylint" steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: "Set up Python 3" - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: '3.x' - name: "Install dependencies" @@ -49,9 +49,9 @@ jobs: runs-on: ubuntu-latest name: "running flake8" steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: "Set up Python 3" - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: '3.x' - name: "Install dependencies" @@ -59,15 +59,19 @@ jobs: - name: "Run flake8!" run: "flake8 mvg" pytest: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} needs: [black, pylint, flake8] strategy: matrix: - python-version: ["3.6","3.7","3.8","3.9","3.10","3.11"] + python-version: ["3.7","3.8","3.9","3.10","3.11"] + os: [ubuntu-latest] + include: + - python-version: 3.6 + os: ubuntu-20.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: "Set up Python ${{ matrix.python-version }}" - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: "${{ matrix.python-version }}" - name: "Install dependencies" @@ -86,20 +90,26 @@ jobs: env: TEST_TOKEN: ${{ secrets.TEST_TOKEN }} run: "python -m pytest --cov-report term-missing --cov=mvg --durations=0 --verbose tests/ --ignore=tests/test_notebooks.py" + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 - name: Log out of Amazon ECR id: login-ecr if: always() run: docker logout ${{ steps.login-ecr.outputs.registry }} test-notebooks: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} needs: [black, pylint, flake8] strategy: matrix: - python-version: ["3.6","3.7","3.8","3.9","3.10","3.11"] + python-version: ["3.7","3.8","3.9","3.10","3.11"] + os: [ubuntu-latest] + include: + - python-version: 3.6 + os: ubuntu-20.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: "Set up Python ${{ matrix.python-version }}" - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: "${{ matrix.python-version }}" - name: "Install dependencies" diff --git a/mvg/mvg.py b/mvg/mvg.py index 447f49ae..cfaccd05 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -57,7 +57,7 @@ def __init__(self, endpoint: str, token: str): self.token = token self.mvg_version = self.parse_version("v0.13.3") - self.tested_api_version = self.parse_version("v0.4.7") + self.tested_api_version = self.parse_version("v0.4.8") # Get API version try: From 5db6e9e935f45821b70258cc0c2f348b362c7321 Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Thu, 5 Jan 2023 16:55:25 +0100 Subject: [PATCH 74/90] add pagination to list_measurments() (#191) * add pagination to list_measurments() * fix typo * add offset and limit to list_* methods * fix the case of empty results * refactoring based on comments * bump versions * add pagination tests * add test sfor list_tabular_measurements --- mvg/mvg.py | 95 ++++++++++++++++++++++++++++++--------- tests/test_api_sources.py | 52 +++++++++++++++------ 2 files changed, 112 insertions(+), 35 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index cfaccd05..a17137e5 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -56,8 +56,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.13.3") - self.tested_api_version = self.parse_version("v0.4.8") + self.mvg_version = self.parse_version("v0.14.0") + self.tested_api_version = self.parse_version("v0.5.0") # Get API version try: @@ -518,13 +518,19 @@ def create_tabular_measurement( ) # in example - def list_measurements(self, sid: str) -> list: - """Retrieves all measurements (all timestamps and metadata) for a source. + def list_measurements( + self, sid: str, offset: int = None, limit: int = None + ) -> list: + """Retrieves measurements (all timestamps and metadata) for a source. Parameters ---------- sid : str - source Id. + source ID. + offset: int + index of the first measurment in the database + limit: int + maximum number of measurments to be returned Returns ------- @@ -533,11 +539,32 @@ def list_measurements(self, sid: str) -> list: """ logger.info("endpoint %s", self.endpoint) logger.info("retrieving all measurements from source id=%s", sid) - - response = self._request("get", f"/sources/{sid}/measurements") - all_measurements = response.json() - - logger.info("%s measurements in database", len(all_measurements)) + url = f"/sources/{sid}/measurements" + params = {} + if limit is not None: + params["limit"] = limit + if offset is not None: + params["offset"] = offset + if params: + response = self._request("get", url, params=params) + response = response.json() + all_measurements = response["items"] + num_measurements = response["total"] + else: + # List all by default if pagination is not requested + response = self._request("get", url) + resp_first = response.json() + all_measurements = resp_first["items"] + num_measurements = resp_first["total"] + limit = resp_first["limit"] + num_reqs = (num_measurements - 1) // limit + for idx in range(1, num_reqs + 1): + offset = idx * limit + response = self._request("get", url, params={"offset": offset}) + all_measurements += response.json()["items"] + + logger.info("%s measurements in database", num_measurements) + logger.info("Returned %s measurements", len(all_measurements)) return all_measurements @@ -573,7 +600,12 @@ def read_single_measurement(self, sid: str, timestamp: int) -> dict: return response.json() def list_tabular_measurements( - self, sid: str, start_timestamp: int = None, end_timestamp: int = None + self, + sid: str, + start_timestamp: int = None, + end_timestamp: int = None, + offset: int = None, + limit: int = None, ) -> dict: """Retrieves tabular measurements (including metadata) for a source. @@ -588,30 +620,51 @@ def list_tabular_measurements( end_timestamp : int Measurements ending at a timestamp [optional]. + offset: int + index of the first measurment in the database + limit: int + maximum number of measurments to be returned + Returns ------- An dict having a list of all timestamps, a list of all measurements grouped by - KPI, and metadata corresponding to a measurement + column names, and metadata corresponding to a measurement. """ logger.info("endpoint %s", self.endpoint) logger.info("retrieving all measurements from source id=%s", sid) - query_params_list = [] - query_params_str = "" + url = f"/sources/{sid}/measurements/tabular" + params = {} if start_timestamp is not None: - query_params_list.append(f"start_timestamp={start_timestamp}") + params["start_timestamp"] = start_timestamp if end_timestamp is not None: - query_params_list.append(f"end_timestamp={end_timestamp}") - - if len(query_params_list) != 0: - query_params_str = f"?{'&'.join(query_params_list)}" + params["end_timestamp"] = end_timestamp + if limit is not None: + params["limit"] = limit + if offset is not None: + params["offset"] = offset response = self._request( - "get", f"/sources/{sid}/measurements/tabular{query_params_str}" + "get", + url, + params=params, ) - return response.json() + resp_first = response.json() + all_measurements = resp_first["items"] + num_v = resp_first["total"] + if not params: + # List all by default if pagination is not requested or + # start/end timestamps are not specified + limit = resp_first["limit"] + num_reqs = (num_v - 1) // limit + for idx in range(1, num_reqs + 1): + offset = idx * limit + response = self._request("get", url, params={"offset": offset}) + all_measurements += response.json()["items"] + + return all_measurements # in example def update_measurement(self, sid: str, timestamp: int, meta: dict): diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index e153e4f9..1440ce5d 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -307,23 +307,21 @@ def test_list_tabular_measurements(session, tabular_source): # Retrieve data for a segment (1..n) response = session.list_tabular_measurements(source_id, ts_1, ts_n) - assert all( - tabular_dict[column][1:] == response["data"][column] for column in columns - ) - assert len(response["meta"].keys()) == 1 - assert response["meta"][f"{ts_1}"] == meta[f"{ts_1}"] + assert all(tabular_dict[column][1:] == response[column] for column in columns) # Retrieve entire data (0..n) - response = session.list_tabular_measurements(source_id, None, None) - assert all(tabular_dict[column] == response["data"][column] for column in columns) - assert len(response["meta"].keys()) == 2 - assert response["meta"][f"{ts_0}"] == meta[f"{ts_0}"] - assert response["meta"][f"{ts_1}"] == meta[f"{ts_1}"] + response = session.list_tabular_measurements( + source_id, start_timestamp=ts_0, end_timestamp=ts_n + ) + assert all(tabular_dict[column] == response[column] for column in columns) + + # Retrieve one page (0..MAX_PAGE_LIMIT) + response = session.list_tabular_measurements(source_id) + assert all(tabular_dict[column] == response[column] for column in columns) # Retrieve data that is beyond the range of the dataset timestamps - with pytest.raises(MVGAPIError) as exc: - session.list_tabular_measurements(source_id, ts_n + 1, ts_n + 2) - assert exc.value.response.status_code == 404 + response = session.list_tabular_measurements(source_id, ts_n + 1, ts_n + 2) + assert all(response[column] == [] for column in columns) # Call API with negative timestamp with pytest.raises(MVGAPIError) as exc: @@ -436,4 +434,30 @@ def test_list_labels(session, tabular_source_with_measurements): assert np.all(np.isnan(np.array(list_long["label"][1:-2]))) -# End of code +def test_pagination(session, tabular_source_with_measurements): + sid, tabular_dict = tabular_source_with_measurements + timestamps = tabular_dict["timestamp"] + num_meas = len(timestamps) + + # deafult offset and limit + response = session.list_measurements(sid) + assert len(response) == num_meas + + response = session.list_tabular_measurements(sid) + assert len(response["timestamp"]) == num_meas + + # non-default offset + offset = num_meas // 3 + response = session.list_measurements(sid, offset=offset) + assert len(response) == num_meas - offset + + response = session.list_tabular_measurements(sid, offset=offset) + assert len(response["timestamp"]) == num_meas - offset + + # non-default limit + limit = num_meas // 10 + response = session.list_measurements(sid, limit=limit) + assert len(response) == limit + + response = session.list_tabular_measurements(sid, limit=limit) + assert len(response["timestamp"]) == limit From 5a9e9061f4b8c662198168418b0f4bb631928daa Mon Sep 17 00:00:00 2001 From: Rickard Claeson Date: Fri, 6 Jan 2023 00:10:44 +0100 Subject: [PATCH 75/90] Tabular measurements downsample (#190) * Method to retrieve downsampled tabular data Referes to vikinganalytics/vibium-pipeline#128 * Test for list_tabular_downsampled_measurements * Simplified method using kwargs and TypeDict * Reverted from using TypeDict (flake8 warning) * Ensure result timestamps are within given range * Fixed Pylint warning * Use of snake_case naming * Renamed fields (x -> timestamps, y -> values) * bump versions * Fix typos Co-authored-by: Mohsen Nosratinia Co-authored-by: Vishnu Nadhan --- mvg/mvg.py | 55 ++++++++++++++++++++++++++++++++++++--- tests/test_api_sources.py | 44 +++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 4 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index a17137e5..9577ce9f 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -56,8 +56,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.14.0") - self.tested_api_version = self.parse_version("v0.5.0") + self.mvg_version = self.parse_version("v0.14.1") + self.tested_api_version = self.parse_version("v0.5.1") # Get API version try: @@ -621,9 +621,9 @@ def list_tabular_measurements( Measurements ending at a timestamp [optional]. offset: int - index of the first measurment in the database + index of the first measurement in the database limit: int - maximum number of measurments to be returned + maximum number of measurements to be returned Returns ------- @@ -666,6 +666,53 @@ def list_tabular_measurements( return all_measurements + def list_tabular_downsampled_measurements( + self, + sid: str, + threshold: Optional[int] = None, + start_timestamp: Optional[int] = None, + end_timestamp: Optional[int] = None, + ) -> dict: + """Retrieves downsampled tabular measurements for a source. + + Parameters + ---------- + sid : str + source Id. + + threshold: int + Max number of points to display per dataset. + Value of 0 means no downsampling will be applied [optional]. + + start_timestamp : int + Measurements starting from a timestamp [optional]. + + end_timestamp : int + Measurements ending at a timestamp [optional]. + + Returns + ------- + A dictionary of KPIs in the format: + {kpi1: { x: timestamps, y: values }, kpi2: { ... }} + """ + logger.info("endpoint %s", self.endpoint) + logger.info("retrieving all measurements from source id=%s", sid) + + params = {} + + if threshold is not None: + params["threshold"] = threshold + if start_timestamp is not None: + params["start_timestamp"] = start_timestamp + if end_timestamp is not None: + params["end_timestamp"] = end_timestamp + + response = self._request( + "get", f"/sources/{sid}/measurements/tabular/downsample", params=params + ) + + return response.json() + # in example def update_measurement(self, sid: str, timestamp: int, meta: dict): """Replaces meta information along measurement. diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index 1440ce5d..3992d70a 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -15,6 +15,7 @@ from mvg.exceptions import MVGAPIError + # Just to check if API is live def test_say_hello(session): hello = session.say_hello() @@ -334,6 +335,49 @@ def test_list_tabular_measurements(session, tabular_source): assert exc.value.response.status_code == 422 +def test_list_tabular_downsampled_measurements( + session, tabular_source_with_measurements +): + source_id, tabular_dict = tabular_source_with_measurements + + # Unsuccessful call to API using a negative threshold + with pytest.raises(MVGAPIError) as exc: + session.list_tabular_downsampled_measurements(source_id, -1) + assert exc.value.response.status_code == 422 + + # Successful call to API requesting downsampled data + threshold = 2 + response_threshold = session.list_tabular_downsampled_measurements( + source_id, threshold + ) + assert len(response_threshold["data"]) > 0 + assert all( + # Ensure number of timestamps and values equals threshold value + len(value["timestamps"]) == threshold and len(value["values"]) == threshold + for value in list(response_threshold["data"].values()) + ) + + # Successful call to API requesting a specific time range + timestamps = sorted(tabular_dict["timestamp"]) + start_timestamp = timestamps[len(timestamps) // 5] + end_timestamp = timestamps[len(timestamps) - len(timestamps) // 5] + response_time_range = session.list_tabular_downsampled_measurements( + source_id, + threshold=0, + start_timestamp=start_timestamp, + end_timestamp=end_timestamp, + ) + assert len(response_time_range["data"]) > 0 + assert all( + # Ensure response timestamps are within given timestamp range + all( + timestamp in range(start_timestamp, end_timestamp + 1) + for timestamp in kpi["timestamps"] + ) + for kpi in response_time_range["data"].values() + ) + + def test_create_label(session, tabular_source_with_measurements): source_id, tabular_dict = tabular_source_with_measurements timestamps = tabular_dict["timestamp"] From 5ee949baf050111a889449e4560b1f21e8988ab8 Mon Sep 17 00:00:00 2001 From: Mohsen Nosratinia Date: Thu, 2 Feb 2023 20:37:03 +0100 Subject: [PATCH 76/90] conform to new version of black (#196) * conform to new version of black * Update mvg.py --- mvg/mvg.py | 2 +- tests/conftest.py | 2 +- tests/test_analysis_classes.py | 2 -- tests/test_api_general.py | 2 +- tests/test_api_sources.py | 6 ------ 5 files changed, 3 insertions(+), 11 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 9577ce9f..04b3a761 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -57,7 +57,7 @@ def __init__(self, endpoint: str, token: str): self.token = token self.mvg_version = self.parse_version("v0.14.1") - self.tested_api_version = self.parse_version("v0.5.1") + self.tested_api_version = self.parse_version("v0.5.2") # Get API version try: diff --git a/tests/conftest.py b/tests/conftest.py index c354ca70..6bc3e927 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -51,6 +51,7 @@ def pytest_addoption(parser): # VIBIUM_VERSION = str(version_session.tested_api_version) VIBIUM_VERSION = "prod" + # Pytest initial configuration def pytest_configure(): pytest.SOURCE_ID_WAVEFORM = uuid.uuid1().hex @@ -110,7 +111,6 @@ def vibium(): @pytest.fixture(scope="session") def session(vibium) -> MVG: - url = vibium print("Overriding vibium function with url %s", url) session = MVG(url, pytest.VALID_TOKEN) diff --git a/tests/test_analysis_classes.py b/tests/test_analysis_classes.py index cdb300ea..0fa871bc 100644 --- a/tests/test_analysis_classes.py +++ b/tests/test_analysis_classes.py @@ -84,7 +84,6 @@ def test_BlackSheep(): def test_ModeId(): - # read dict with open("./tests/test_data/ModeId_results_dict.json") as json_file: api_results = json.load(json_file) @@ -112,7 +111,6 @@ def test_ModeId(): def test_labelprop(): - with open("./tests/test_data/label_prop_results.json") as json_file: api_results = json.load(json_file) diff --git a/tests/test_api_general.py b/tests/test_api_general.py index 1d76fa77..8fdc051c 100644 --- a/tests/test_api_general.py +++ b/tests/test_api_general.py @@ -13,6 +13,7 @@ # MVG Token VALID_TOKEN = pytest.VALID_TOKEN + # API / def test_say_hello(vibium): session = MVG(vibium, "NO TOKEN") @@ -30,7 +31,6 @@ def test_check_prod_version(vibium_prod): # API / # Test version handling def test_check_version(vibium): - # Get current API version for testing session = MVG(vibium, "NO TOKEN") diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index 3992d70a..688fa88b 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -74,7 +74,6 @@ def test_measurements_crud(session): # iterate over 4 meas (m is timestamp) for ts_m in meas: - # samples file for one measurement ts_meas = str(ts_m) + ".csv" # filename ts_meas = src_path / ts_meas # path to file @@ -143,7 +142,6 @@ def test_measurements_crud(session): # API POST /sources/{source_id}/measurements [non-existing source] def test_failure_create_measurement(session): - with pytest.raises(MVGAPIError) as exc: data = [1, 2, 3] session.create_measurement( @@ -154,7 +152,6 @@ def test_failure_create_measurement(session): # API GET /sources/{source_id}//measurements/{timestamp} [non-existing meas] def test_failure_get_measurement(session): - with pytest.raises(MVGAPIError) as exc: session.delete_measurement(pytest.SOURCE_ID_WAVEFORM, 314152) @@ -163,7 +160,6 @@ def test_failure_get_measurement(session): # API GET /sources/{source_id} [non-existing source] def test_failure_get_source(session): - with pytest.raises(MVGAPIError) as exc: session.get_source(sid="THE_VOID") @@ -172,7 +168,6 @@ def test_failure_get_source(session): # API DELETE /sources/{source_id} [non-existing source] def test_failure_delete_source(session): - with pytest.raises(MVGAPIError) as exc: session.delete_source(sid="THE_VOID") @@ -189,7 +184,6 @@ def test_failure_create_source(session): # API POST /sources/ # API DELETE /sources/{source_id} def test_sources_d(session): - session.delete_source(pytest.SOURCE_ID_WAVEFORM) with pytest.raises(MVGAPIError) as exc: session.get_source(sid=pytest.SOURCE_ID_WAVEFORM) From 99858bda08aa6a2f440232de965ba0be73d03490 Mon Sep 17 00:00:00 2001 From: Rickard Claeson Date: Fri, 3 Feb 2023 10:12:19 +0100 Subject: [PATCH 77/90] Added list_timestamps (#192) * Added list_timestamps * Refactor: helper functions into modules * Temporary change to test against dev * Reverted temp changes - Kept double linebreaks (flake8 fix) * New version * Updates regarding sort order * Pylint warning * list_timestamps now returns a pagination Dict * Docstring + type changes * Reverted type changes * Lint code --------- Co-authored-by: Vishnu Nadhan --- mvg/mvg.py | 80 +++++++++++++++++++++++--------- mvg/utils/__init__.py | 0 mvg/utils/response_processing.py | 57 +++++++++++++++++++++++ tests/test_api_sources.py | 19 ++++++++ 4 files changed, 135 insertions(+), 21 deletions(-) create mode 100644 mvg/utils/__init__.py create mode 100644 mvg/utils/response_processing.py diff --git a/mvg/mvg.py b/mvg/mvg.py index 04b3a761..5e8d3813 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -20,6 +20,7 @@ import semver from mvg.exceptions import MVGConnectionError +from mvg.utils.response_processing import SortOrder, get_paginated_items from mvg.http_client import HTTPClient logger = logging.getLogger(__name__) @@ -56,7 +57,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.14.1") + self.mvg_version = self.parse_version("v0.14.2") self.tested_api_version = self.parse_version("v0.5.2") # Get API version @@ -517,6 +518,59 @@ def create_tabular_measurement( json=body, ) + def list_timestamps( + self, + sid: str, + offset: int = None, + limit: int = None, + order: SortOrder = SortOrder.ASC.value, + ) -> Dict: + """ + Retrieves timestamps for a source. + If offset and limit params are not specified, all timestamps will be returned. + + Parameters + ---------- + sid : str + source ID. + offset: int + index of the first timestamp in the database [optional]. + limit: int + maximum number of timestamps to be returned [optional]. + order : SortOrder + Sort order, either "asc" or "desc". Defaults to "asc". + + Returns + ------- + A dictionary containing the following keys: + + - "offset": int, representing starting point of returned items. + - "limit: int, representing max items to return." + - "items": list of int, representing timestamps. + - "total": int, representing total number of items. + """ + logger.info("endpoint %s", self.endpoint) + logger.info("retrieving timestamps from source id=%s", sid) + url = f"/sources/{sid}/timestamps" + params = {} + if limit is not None: + params["limit"] = limit + if offset is not None: + params["offset"] = offset + if order is not None: + params["order"] = order + paginated_items = get_paginated_items(self._request, url, params) + + logger.info("%s timestamps in database", paginated_items["total"]) + logger.info("Returned %s timestamps", len(paginated_items["items"])) + + return { + "offset": offset or 0, + "limit": limit or paginated_items["total"], + "items": paginated_items["items"], + "total": paginated_items["total"], + } + # in example def list_measurements( self, sid: str, offset: int = None, limit: int = None @@ -545,28 +599,12 @@ def list_measurements( params["limit"] = limit if offset is not None: params["offset"] = offset - if params: - response = self._request("get", url, params=params) - response = response.json() - all_measurements = response["items"] - num_measurements = response["total"] - else: - # List all by default if pagination is not requested - response = self._request("get", url) - resp_first = response.json() - all_measurements = resp_first["items"] - num_measurements = resp_first["total"] - limit = resp_first["limit"] - num_reqs = (num_measurements - 1) // limit - for idx in range(1, num_reqs + 1): - offset = idx * limit - response = self._request("get", url, params={"offset": offset}) - all_measurements += response.json()["items"] + paginated_items = get_paginated_items(self._request, url, params) - logger.info("%s measurements in database", num_measurements) - logger.info("Returned %s measurements", len(all_measurements)) + logger.info("%s measurements in database", paginated_items["total"]) + logger.info("Returned %s measurements", len(paginated_items["items"])) - return all_measurements + return paginated_items["items"] # in example def read_single_measurement(self, sid: str, timestamp: int) -> dict: diff --git a/mvg/utils/__init__.py b/mvg/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/mvg/utils/response_processing.py b/mvg/utils/response_processing.py new file mode 100644 index 00000000..c04ddd7d --- /dev/null +++ b/mvg/utils/response_processing.py @@ -0,0 +1,57 @@ +""" +This module contains helper functions for manipulating the response from endpoints. +""" + +from enum import Enum +from typing import Dict, Callable + + +class SortOrder(Enum): + ASC = "asc" + DESC = "desc" + + +def get_paginated_items(request: Callable, url: str, params: Dict) -> Dict: + """ + Retrieves items and total as a dictionary from a paginated endpoint. + If offset and limit params are not specified, all items will be returned. + + Parameters + ---------- + request : Callable + The request function to be used to make the GET request. + url : str + The paginated endpoint URL. + params : Dict + The query parameters for the GET request, including optional: + offset: int + index of the first timestamp in the database [optional]. + limit: int + maximum number of timestamps to be returned [optional]. + + Returns + ------- + A dictionary containing the following keys: + + - "items": list of int, representing timestamps. + - "total": int, representing total number of items. + """ + if "limit" in params or "offset" in params: + response = request("get", url, params=params) + response = response.json() + all_items = response["items"] + num_items = response["total"] + else: + # List all by default if pagination is not requested + response = request("get", url, params=params) + resp_first = response.json() + all_items = resp_first["items"] + num_items = resp_first["total"] + limit = resp_first["limit"] + num_reqs = (num_items - 1) // limit + for idx in range(1, num_reqs + 1): + offset = idx * limit + params["offset"] = offset + response = request("get", url, params=params) + all_items += response.json()["items"] + return {"items": all_items, "total": num_items} diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index 688fa88b..7f6386d4 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -484,6 +484,9 @@ def test_pagination(session, tabular_source_with_measurements): response = session.list_tabular_measurements(sid) assert len(response["timestamp"]) == num_meas + response = session.list_timestamps(sid) + assert len(response["items"]) == num_meas + # non-default offset offset = num_meas // 3 response = session.list_measurements(sid, offset=offset) @@ -492,6 +495,10 @@ def test_pagination(session, tabular_source_with_measurements): response = session.list_tabular_measurements(sid, offset=offset) assert len(response["timestamp"]) == num_meas - offset + response = session.list_timestamps(sid, offset=offset) + assert response["total"] == num_meas + assert len(response["items"]) == num_meas - offset + # non-default limit limit = num_meas // 10 response = session.list_measurements(sid, limit=limit) @@ -499,3 +506,15 @@ def test_pagination(session, tabular_source_with_measurements): response = session.list_tabular_measurements(sid, limit=limit) assert len(response["timestamp"]) == limit + + response = session.list_timestamps(sid, limit=limit) + assert response["total"] == num_meas + assert len(response["items"]) == limit + + # test order=asc + response = session.list_timestamps(sid, order="asc") + assert response["items"] == sorted(response["items"]) + + # test order=desc + response = session.list_timestamps(sid, order="desc") + assert response["items"] == sorted(response["items"], reverse=True) From 8c46cc503bd496ab0e9afa2dd9c7808a613eea06 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Fri, 3 Feb 2023 15:48:26 +0530 Subject: [PATCH 78/90] Force parameter in request analysis calls (#194) * Force parameter in request analysis - Also includes fixing grammatical errors * Bump MVG / API version * Fix docstrings Co-Authored-By: Rickard Claeson --------- Co-authored-by: Rickard Claeson --- mvg/mvg.py | 86 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 56 insertions(+), 30 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 5e8d3813..48b54be7 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -36,7 +36,7 @@ def __init__(self, endpoint: str, token: str): On instantiation of a MVG object the session parameters are stored for future calls and the version of the API is requested. - In case token is "NO TOKEN", will insert the harcoded + In case token is "NO TOKEN", will insert the hardcoded valid token from testcases. Parameters @@ -57,7 +57,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.14.2") + self.mvg_version = self.parse_version("v0.14.3") self.tested_api_version = self.parse_version("v0.5.2") # Get API version @@ -165,7 +165,7 @@ def check_version(self) -> dict: Returns ------ message : dict - Showing the api version, the highest vesrion tested against + Showing the api version, the highest version tested against and the version of the MVG library. """ logger.info("Checking versions for:%s", self.endpoint) @@ -205,7 +205,7 @@ def check_version(self) -> dict: if self.api_version.minor > self.tested_api_version.minor: raise UserWarning( f"API version {self.api_version} may contain features" - f" not supporeted by " + f" not supported by " f"current MVG version {self.mvg_version}" ) @@ -218,7 +218,7 @@ def check_version(self) -> dict: def say_hello(self) -> dict: """ - Retrievs information about the API. + Retrieves information about the API. This call does not require a valid token. Returns @@ -582,9 +582,9 @@ def list_measurements( sid : str source ID. offset: int - index of the first measurment in the database + index of the first measurement in the database limit: int - maximum number of measurments to be returned + maximum number of measurements to be returned Returns ------- @@ -830,49 +830,60 @@ def request_analysis( start_timestamp: int = None, end_timestamp: int = None, callback_url: str = None, + force: bool = False, ) -> dict: """Request an analysis on the given endpoint with given parameters. Parameters ---------- sid : str - source Id. + Source Id. feature : str - name of feature to run. + Name of feature to run. parameters : dict - name value pairs of parameters [optional]. + Name value pairs of parameters [optional]. selected_channels : List[str] Subset of Waveform Data channels for analysis. - This cannot be used in conjuction with selected_columns [optional]. + This cannot be used in conjunction with selected_columns [optional]. selected_columns : List[str] Subset of Tabular Data columns for analysis. - This cannot be used in conjuction with selected_channels [optional]. + This cannot be used in conjunction with selected_channels [optional]. start_timestamp : int - start of analysis time window [optional]. + Start of analysis time window [optional]. end_timestamp : int - start of analysis time window [optional]. + Start of analysis time window [optional]. callback_url : str - Base URL to receieve a notification when the analysis job ends. - A POST reuest will be made to {callback_url}/analyses with payload + Base URL to receive a notification when the analysis job ends. + A POST request will be made to {callback_url}/analyses with payload that includes the request_id and request_status of the job [optional]. + force: bool + Set to False to reuse the analysis results if it already exists, otherwise + re-run the analysis. Defaults to False. + Returns ------- - request_id: analysis identifier + dict + Containing request_id and request_status corresponding to + analysis identifier and analysis status. """ logger.info("endpoint %s", self.endpoint) logger.info("source id=%s", sid) logger.info("sending %s analysis request", feature) logger.info("parameters %s", parameters) - logger.info("from %s to %s ", start_timestamp, end_timestamp) + logger.info( + "from start timestamp as %s to end timestamp as %s ", + start_timestamp, + end_timestamp, + ) if parameters is None: parameters = {} @@ -890,7 +901,9 @@ def request_analysis( "params": parameters, "start_timestamp": start_timestamp, "end_timestamp": end_timestamp, + "force": force, } + params = None if callback_url: params = {"callback_url": callback_url} @@ -908,8 +921,9 @@ def request_population_analysis( start_timestamp: int = None, end_timestamp: int = None, callback_url: str = None, - ) -> str: - """Request an population analysis on the given endpoint with given parameters. + force: bool = False, + ) -> dict: + """Request a population analysis on the given endpoint with given parameters. Parameters ---------- @@ -917,32 +931,42 @@ def request_population_analysis( Source ids. feature : str - name of feature to run. This feature must be of population type. + Name of feature to run. This feature must be of population type. parameters : dict - name value pairs of parameters [optional]. + Name value pairs of parameters [optional]. start_timestamp : int - start of analysis time window [optional]. + Start of analysis time window [optional]. end_timestamp : int - start of analysis time window [optional]. + Start of analysis time window [optional]. callback_url : str - Base URL to receieve a notification when the analysis job ends. - A POST reuest will be made to {callback_url}/analyses with payload + Base URL to receive a notification when the analysis job ends. + A POST request will be made to {callback_url}/analyses with payload that includes the request_id and request_status of the job [optional]. + force: bool + Set to True to force a re-run on any existing analysis, otherwise existing + analysis results will be reused. Defaults to False. + Returns ------- - request_id: analysis identifier + dict + Containing request_id and request_status corresponding to + analysis identifier and analysis status. """ logger.info("endpoint %s", self.endpoint) logger.info("source ids=%s", sids) logger.info("sending %s analysis request", feature) logger.info("parameters %s", parameters) - logger.info("from %s to %s ", start_timestamp, end_timestamp) + logger.info( + "from start timestamp as %s to end timestamp as %s ", + start_timestamp, + end_timestamp, + ) if parameters is None: parameters = {} @@ -954,6 +978,7 @@ def request_population_analysis( "params": parameters, "start_timestamp": start_timestamp, "end_timestamp": end_timestamp, + "force": force, } params = None @@ -962,6 +987,7 @@ def request_population_analysis( response = self._request( "post", "/analyses/requests/population/", json=analysis_info, params=params ) + return response.json() def list_analyses(self, sid: str, feature: str) -> list: @@ -1001,7 +1027,7 @@ def get_analysis_status(self, request_id: str) -> str: ------- str status of the analysis. It can take any of the following values: - "queued": The request is cheduled but have not started. + "queued": The request is scheduled but have not started. "ongoing": The request is running "failed": The request failed due to internal issue. "successful": The request finished successfully. @@ -1218,7 +1244,7 @@ def wait_for_analyses(self, request_id_list: list, timeout=None): for request_id in jobs: status = self.get_analysis_status(request_id) if status in ("successful", "failed"): - logger.info("Anlysis with ID %s done", request_id) + logger.info("Analysis with ID %s done", request_id) done_jobs.add(request_id) jobs = jobs - done_jobs From 1b493a2413539d7d6c25f470c070048e2078f612 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Fri, 10 Feb 2023 14:00:23 +0530 Subject: [PATCH 79/90] Ability to retrieve paginated analysis results (#198) * Ability to retrieve paginated analysis results * Review comments Co-Authored-By: Mohsen Nosratinia * Bump API version --------- Co-authored-by: Mohsen Nosratinia --- mvg/mvg.py | 33 ++++++++++++--- mvg/utils/response_processing.py | 53 ++++++++++++++++++++++++ tests/conftest.py | 2 +- tests/test_api_analyses.py | 70 ++++++++++++++++++++++++++++++++ 4 files changed, 151 insertions(+), 7 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 48b54be7..25950f35 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -20,7 +20,11 @@ import semver from mvg.exceptions import MVGConnectionError -from mvg.utils.response_processing import SortOrder, get_paginated_items +from mvg.utils.response_processing import ( + SortOrder, + get_paginated_analysis_results, + get_paginated_items, +) from mvg.http_client import HTTPClient logger = logging.getLogger(__name__) @@ -57,8 +61,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.14.3") - self.tested_api_version = self.parse_version("v0.5.2") + self.mvg_version = self.parse_version("v0.14.4") + self.tested_api_version = self.parse_version("v0.5.3") # Get API version try: @@ -1040,7 +1044,12 @@ def get_analysis_status(self, request_id: str) -> str: return response.json()["request_status"] - def get_analysis_results(self, request_id: str) -> dict: + def get_analysis_results( + self, + request_id: str, + offset: int = None, + limit: int = None, + ) -> dict: """Retrieves an analysis with given request_id The format of the result structure depends on the feature. @@ -1048,6 +1057,12 @@ def get_analysis_results(self, request_id: str) -> dict: ---------- request_id : str request_id (analysis identifier) + offset: int + zero-based index of an item in one of the dictionaries + in the data for "results" key [optional]. + limit: int + maximum number of items to be returned from each + dictionary in the data for "results" key [optional]. Returns ------- @@ -1058,9 +1073,15 @@ def get_analysis_results(self, request_id: str) -> dict: logger.info("endpoint %s", self.endpoint) logger.info("get analysis results with request_id=%s", request_id) - response = self._request("get", f"/analyses/requests/{request_id}/results") + url = f"/analyses/requests/{request_id}/results" + params = {} + if offset is not None: + params["offset"] = offset + if limit is not None: + params["limit"] = limit - return response.json() + response = get_paginated_analysis_results(self._request, url, params) + return response def delete_analysis(self, request_id: str): """Deletes an analysis. diff --git a/mvg/utils/response_processing.py b/mvg/utils/response_processing.py index c04ddd7d..3c7da61a 100644 --- a/mvg/utils/response_processing.py +++ b/mvg/utils/response_processing.py @@ -55,3 +55,56 @@ def get_paginated_items(request: Callable, url: str, params: Dict) -> Dict: response = request("get", url, params=params) all_items += response.json()["items"] return {"items": all_items, "total": num_items} + + +def get_paginated_analysis_results(request: Callable, url: str, params: Dict) -> Dict: + """ + Iteratively construct the results of an analysis making use of the + pagination parameters provided in the params dictionary + + Parameters + ---------- + request : Callable + the request object + url : str + the URL to retrieve the analysis results + params : Dict + parameters dict for the request object + + Returns + ------- + Dict + Analysis results + """ + response = request("get", url, params=params).json() + + if "limit" not in params and "offset" not in params: + # User has not requested a subset of results + results = response["results"] + + # Pagination Model fields + paginator_model_fields = ["total", "limit", "offset"] + + # Does the analysis results include pagination? + # We remove this check when the backend has enabled pagination for + # the results of all analysis + is_paginated = all(f in results for f in paginator_model_fields) + if is_paginated: + # Fields with paginated data + paginated_fields = ["timestamps", "labels", "uncertain", "mode_probability"] + + num_items = results["total"] + limit = results["limit"] + num_reqs = (num_items - 1) // limit + for idx in range(1, num_reqs + 1): + offset = idx * limit + params["offset"] = offset + _results = request("get", url, params=params).json()["results"] + for key in _results: + if key in paginated_fields: + results[key] += _results[key] + + # Construct the response to return + response["results"] = results + + return response diff --git a/tests/conftest.py b/tests/conftest.py index 6bc3e927..20854e51 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -210,7 +210,7 @@ def fixture(session): source_id, meta={"type": "pump"}, channels=list(pattern.keys()) ) upload_measurements(session, source_id, data) - yield source_id, timestamps + yield source_id, {"timestamps": timestamps, "pattern": pattern} finally: session.delete_source(source_id) diff --git a/tests/test_api_analyses.py b/tests/test_api_analyses.py index 8568bb1c..c7f00c62 100644 --- a/tests/test_api_analyses.py +++ b/tests/test_api_analyses.py @@ -189,3 +189,73 @@ def test_delete_analysis(session, waveform_source_multiaxial_001): with pytest.raises(MVGAPIError) as exc: session.get_analysis_results(request_id) assert f"Request with ID {request_id} does not exist" in str(exc) + + +def test_get_analysis_results_modeid_paginated( + session: MVG, waveform_source_multiaxial_001 +): + source_id, source_info = waveform_source_multiaxial_001 + timestamps = source_info["timestamps"] + pattern = source_info["pattern"]["acc_x"] + + # ModeId + parameters = {"n_trials": 1} + request = session.request_analysis(source_id, "ModeId", parameters=parameters) + request_id = request["request_id"] + response = session.get_analysis_results(request_id) + assert response["results"] == {} + session.wait_for_analyses([request_id]) + + # Request for entire results + response = session.get_analysis_results(request_id) + assert timestamps == response["results"]["timestamps"] + assert pattern == response["results"]["labels"] + + # Request for a subset of results with a limit + result_size = 100 + response = session.get_analysis_results(request_id, limit=result_size) + assert timestamps[:result_size] == response["results"]["timestamps"] + assert pattern[:result_size] == response["results"]["labels"] + + # Request for a subset of results with a limit and an offset + offset = 10 + result_size = 100 + response = session.get_analysis_results( + request_id, offset=offset, limit=result_size + ) + assert timestamps[offset:result_size] == response["results"]["timestamps"] + assert pattern[offset:result_size] == response["results"]["labels"] + + # Request for a subset of results with an offset + offset = 10 + response = session.get_analysis_results(request_id, offset=offset) + assert timestamps[offset:] == response["results"]["timestamps"] + assert pattern[offset:] == response["results"]["labels"] + + # Delete analysis + session.delete_analysis(request_id) + + +def test_get_analysis_results_kpidemo_paginated( + session: MVG, waveform_source_multiaxial_001 +): + source_id, source_info = waveform_source_multiaxial_001 + timestamps = source_info["timestamps"] + + request = session.request_analysis(source_id, "KPIDemo") + request_id = request["request_id"] + response = session.get_analysis_results(request_id) + assert response["results"] == {} + session.wait_for_analyses([request_id]) + + # Request for entire results + response = session.get_analysis_results(request_id) + assert timestamps == response["results"]["timestamps"] + + # Request for a subset of results, but still returns entire results + result_size = 10 + response = session.get_analysis_results(request_id, limit=result_size) + assert timestamps == response["results"]["timestamps"] + + # Delete analysis + session.delete_analysis(request_id) From 9b9b82d52cf747e963e070ca3c8d528b678e7314 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Sat, 4 Mar 2023 18:35:00 +0530 Subject: [PATCH 80/90] Get information about an analysis result (#200) * Bump version and fix grammatical errors * Add timezone to the date format * Get info of an analysis --- mvg/mvg.py | 34 ++++++++++++++++++++++++++++++---- tests/test_api_analyses.py | 16 ++++++++++++++++ tests/test_api_sources.py | 12 +++++++----- 3 files changed, 53 insertions(+), 9 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 25950f35..d455dc81 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -61,8 +61,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.14.4") - self.tested_api_version = self.parse_version("v0.5.3") + self.mvg_version = self.parse_version("v0.14.5") + self.tested_api_version = self.parse_version("v0.5.6") # Get API version try: @@ -445,7 +445,7 @@ def create_measurement( """ logger.info("endpoint %s", self.endpoint) - logger.info("creating measurement from source id=%s", sid) + logger.info("creating measurement for source id=%s", sid) logger.info(" duration: %s", duration) logger.info(" timestamp: %s", timestamp) logger.info(" meta data: %s", meta) @@ -505,7 +505,7 @@ def create_tabular_measurement( """ logger.info("endpoint %s", self.endpoint) - logger.info("creating tabular measurement from source id=%s", sid) + logger.info("creating tabular measurement for source id=%s", sid) do_not_raise = [] if exist_ok: @@ -1044,6 +1044,32 @@ def get_analysis_status(self, request_id: str) -> str: return response.json()["request_status"] + def get_analysis_info(self, request_id: str) -> dict: + """Retrieves info of an analysis request. + + The info of an analysis request includes the current status and the + status history of the analysis where the status history is a list of + statuses logged for the analysis. The info also contains an overview + of the measurements used by the analysis. + + Parameters + ---------- + request_id : str + request_id (analysis identifier) + + Returns + ------- + dict + a dictionary with the analysis info. + + """ + logger.info("endpoint %s", self.endpoint) + logger.info("get analysis info with request_id=%s", request_id) + + response = self._request("get", f"/analyses/requests/{request_id}") + + return response.json() + def get_analysis_results( self, request_id: str, diff --git a/tests/test_api_analyses.py b/tests/test_api_analyses.py index c7f00c62..c12e0c23 100644 --- a/tests/test_api_analyses.py +++ b/tests/test_api_analyses.py @@ -259,3 +259,19 @@ def test_get_analysis_results_kpidemo_paginated( # Delete analysis session.delete_analysis(request_id) + + +def test_get_analysis_info(session: MVG, waveform_source_multiaxial_001): + sid, _ = waveform_source_multiaxial_001 + request = session.request_analysis(sid, "KPIDemo") + request_id = request["request_id"] + + analysis_info = session.get_analysis_info(request_id) + assert isinstance(analysis_info, dict) + assert analysis_info["request_status"] in ["queued", "running"] + assert analysis_info["request_id"] == request_id + + session.wait_for_analyses([request_id]) + + analysis_info = session.get_analysis_info(request_id) + assert analysis_info["request_status"] == "successful" diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index 7f6386d4..0ff67624 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -396,15 +396,15 @@ def test_create_label(session, tabular_source_with_measurements): } label1_timestamp = label1_response.pop("label_timestamp") - dtdiff1 = datetime.utcnow() - datetime.strptime( - label1_timestamp, "%Y-%m-%d %H:%M:%S" + dtdiff1 = datetime.now().astimezone() - datetime.strptime( + label1_timestamp, "%Y-%m-%d %H:%M:%S%z" ) assert label1_response == label1 assert dtdiff1 < timedelta(minutes=1) label2_timestamp = label2_response.pop("label_timestamp") - dtdiff2 = datetime.utcnow() - datetime.strptime( - label2_timestamp, "%Y-%m-%d %H:%M:%S" + dtdiff2 = datetime.now().astimezone() - datetime.strptime( + label2_timestamp, "%Y-%m-%d %H:%M:%S%z" ) assert label2_response == label2 assert dtdiff2 < timedelta(minutes=1) @@ -422,7 +422,9 @@ def test_update_label(session, tabular_source_with_measurements): label_response = session.get_label(source_id, timestamps[0]) label_timestamp = label_response.pop("label_timestamp") - dtdiff = datetime.utcnow() - datetime.strptime(label_timestamp, "%Y-%m-%d %H:%M:%S") + dtdiff = datetime.now().astimezone() - datetime.strptime( + label_timestamp, "%Y-%m-%d %H:%M:%S%z" + ) assert label_response == label_post assert dtdiff < timedelta(minutes=1) From 252819db0b367d6f820fcfa9143efd39ed3817e9 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Tue, 28 Mar 2023 17:24:17 +0200 Subject: [PATCH 81/90] Get customized analysis results with result_type (#205) * Include result_type in get analysis results * Assert exception message * Bump versions * ipywidgets no longer installs ipykernel --- mvg/mvg.py | 11 +++++-- mvg/utils/response_processing.py | 7 ++-- requirements_docs.txt | 1 + tests/test_api_analyses.py | 55 ++++++++++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 4 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index d455dc81..da6b7514 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -61,8 +61,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.14.5") - self.tested_api_version = self.parse_version("v0.5.6") + self.mvg_version = self.parse_version("v0.14.6") + self.tested_api_version = self.parse_version("v0.5.12") # Get API version try: @@ -1075,6 +1075,7 @@ def get_analysis_results( request_id: str, offset: int = None, limit: int = None, + result_type: str = None, ) -> dict: """Retrieves an analysis with given request_id The format of the result structure depends on the feature. @@ -1089,6 +1090,10 @@ def get_analysis_results( limit: int maximum number of items to be returned from each dictionary in the data for "results" key [optional]. + result_type: str + The type of results to return. By default, the type is + 'full' implying the complete analysis results will be + returned. The allowed types varies between features [optional]. Returns ------- @@ -1105,6 +1110,8 @@ def get_analysis_results( params["offset"] = offset if limit is not None: params["limit"] = limit + if result_type is not None: + params["result_type"] = result_type response = get_paginated_analysis_results(self._request, url, params) return response diff --git a/mvg/utils/response_processing.py b/mvg/utils/response_processing.py index 3c7da61a..b332a685 100644 --- a/mvg/utils/response_processing.py +++ b/mvg/utils/response_processing.py @@ -91,7 +91,10 @@ def get_paginated_analysis_results(request: Callable, url: str, params: Dict) -> is_paginated = all(f in results for f in paginator_model_fields) if is_paginated: # Fields with paginated data - paginated_fields = ["timestamps", "labels", "uncertain", "mode_probability"] + # We might have to later re-enable this to not make this + # automatically paginate list-based values. + # paginated_fields = ["timestamps", "labels", "uncertain", + # "mode_probability"] num_items = results["total"] limit = results["limit"] @@ -101,7 +104,7 @@ def get_paginated_analysis_results(request: Callable, url: str, params: Dict) -> params["offset"] = offset _results = request("get", url, params=params).json()["results"] for key in _results: - if key in paginated_fields: + if isinstance(_results[key], list): results[key] += _results[key] # Construct the response to return diff --git a/requirements_docs.txt b/requirements_docs.txt index 21c57032..7b7647d6 100644 --- a/requirements_docs.txt +++ b/requirements_docs.txt @@ -1,5 +1,6 @@ papermill ipywidgets +ipykernel tqdm sphinx sphinx-rtd-theme diff --git a/tests/test_api_analyses.py b/tests/test_api_analyses.py index c12e0c23..ddfb78f0 100644 --- a/tests/test_api_analyses.py +++ b/tests/test_api_analyses.py @@ -275,3 +275,58 @@ def test_get_analysis_info(session: MVG, waveform_source_multiaxial_001): analysis_info = session.get_analysis_info(request_id) assert analysis_info["request_status"] == "successful" + + +def test_get_analysis_results_with_valid_result_type( + session: MVG, waveform_source_multiaxial_001 +): + source_id, source_info = waveform_source_multiaxial_001 + timestamps = source_info["timestamps"] + pattern = source_info["pattern"] + + parameters = {"n_trials": 1} + request = session.request_analysis(source_id, "ModeId", parameters=parameters) + request_id = request["request_id"] + result_type = "compressed" + session.wait_for_analyses([request_id]) + response = session.get_analysis_results(request_id, result_type=result_type) + + results = response["results"] + num_timestamps_in_modes = [6, 14, 5] # from the pattern + assert response["status"] == "successful" + assert results["count"] == num_timestamps_in_modes + for channel in pattern.keys(): + assert all(label in pattern[channel] for label in results["label"]) + assert all(ts in timestamps for ts in results["start_timestamp"]) + assert all(ts in timestamps for ts in results["end_timestamp"]) + + +def test_get_analysis_results_with_noncompliant_result_type( + session: MVG, waveform_source_with_measurements +): + source_id = waveform_source_with_measurements + + feature = "KPIDemo" + request = session.request_analysis(source_id, feature) + request_id = request["request_id"] + result_type = "compressed" + session.wait_for_analyses([request_id]) + + with pytest.raises(MVGAPIError) as exc: + session.get_analysis_results(request_id, result_type=result_type) + assert f"Feature {feature} supports only result types in" in str(exc) + + +def test_get_analysis_results_with_invalid_result_type( + session: MVG, waveform_source_with_measurements +): + source_id = waveform_source_with_measurements + + request = session.request_analysis(source_id, "KPIDemo") + request_id = request["request_id"] + result_type = "someresultype" + session.wait_for_analyses([request_id]) + + with pytest.raises(MVGAPIError) as exc: + session.get_analysis_results(request_id, result_type=result_type) + assert f"Feature result type '{result_type}' does not exist." in str(exc) From 9856de0e76e25bc0c1704b1ba98d523b4514b44e Mon Sep 17 00:00:00 2001 From: Raman R Date: Tue, 4 Apr 2023 19:40:16 +0200 Subject: [PATCH 82/90] Upload spectrum data support (#207) * Upload spectrum data support * Fix for python3.6 and updated mvg version * Review fixes * Lint errors fix * Added test cases for exist_ok=True * Make documentation more clear * Improve test suite for spectrum data and sources - Improve fixture that creates spectrum sources - Use simulated spectrum measurements - Name of a test case should start with the name of the tested method * Add scipy * Remove deprecated usage of inplace * Pylint should work with pydantic package --------- Co-authored-by: Vishnu Nadhan --- .pylintrc | 3 +- mvg/mvg.py | 115 ++++++++++++++++++++++++++++++- mvg/plotting.py | 2 +- mvg/utils/response_processing.py | 4 ++ requirements.txt | 1 + requirements_dev.txt | 1 + tests/conftest.py | 64 ++++++++++++++--- tests/helpers.py | 66 +++++++++++++++++- tests/test_api_sources.py | 113 ++++++++++++++++++++++++++++-- 9 files changed, 349 insertions(+), 20 deletions(-) diff --git a/.pylintrc b/.pylintrc index 91ceb1df..de849bae 100644 --- a/.pylintrc +++ b/.pylintrc @@ -1,6 +1,7 @@ [pylint] +extension-pkg-whitelist=pydantic disable = - R0904, + too-many-public-methods, too-few-public-methods, too-many-arguments, logging-fstring-interpolation, diff --git a/mvg/mvg.py b/mvg/mvg.py index da6b7514..02613e62 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -21,6 +21,7 @@ from mvg.exceptions import MVGConnectionError from mvg.utils.response_processing import ( + FrequencyRange, SortOrder, get_paginated_analysis_results, get_paginated_items, @@ -61,7 +62,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.14.6") + self.mvg_version = self.parse_version("v0.14.7") self.tested_api_version = self.parse_version("v0.5.12") # Get API version @@ -281,6 +282,49 @@ def create_source( source_info = {"source_id": sid, "meta": meta, "channels": channels} self._request("post", "/sources/", do_not_raise, json=source_info) + def create_spectrum_source( + self, + sid: str, + channels: List[str], + meta: dict = None, + exist_ok: bool = False, + ): + """ + Creates a spectrum source on the server side. + + Parameters + ---------- + sid : str + Source ID + + channels : List[str] + Channels of spectrum Data. For instance axial, vertical and horizontal. + Channel names must be unique. + Cannot be updated after creating source. + + meta : dict + Meta information of source [optional]. + + exist_ok : bool + Set to true to prevent exceptions for 409 Conflict errors + caused by trying to create an existing source. Defaults to False. + """ + + logger.info("endpoint %s", self.endpoint) + logger.info("creating spectrum source with source id=%s", sid) + logger.info("metadata: %s", meta) + logger.info("channels: %s", channels) + + if meta is None: + meta = {} + + do_not_raise = [] + if exist_ok: + do_not_raise.append(requests.codes["conflict"]) # 409 + + source_info = {"source_id": sid, "meta": meta, "channels": channels} + self._request("post", "/sources/spectrum", do_not_raise, json=source_info) + def create_tabular_source( self, sid: str, @@ -471,6 +515,75 @@ def create_measurement( "post", f"/sources/{sid}/measurements", do_not_raise, json=meas_struct ) + def create_spectrum_measurement( + self, + sid: str, + freq_range: FrequencyRange, + timestamp: int, + data: Dict[str, List[float]], + meta: dict = None, + exist_ok: bool = False, + ): + """Stores a measurement on the server side. + + Although it is up to the client side to handle the + scaling of data it is recommended that the values + represent the acceleration in g. + The timestamp shall represent the time when the measurement was + recorded. + + Parameters + ---------- + sid: str + source Id. + + freq_range: FrequencyRange + lowest and highest frequency available in the spectrum as a list [MIN, MAX]. + + timestamp: int + in milliseconds since EPOCH. + + data: Dict[str, List[float]] + Data on the format {channel: values}. + This format can be generated by pandas.DataFrame.to_dict("list"). + + meta: dict + Meta information to attach to data [optional]. + + exist_ok: bool + Set to true to prevent exceptions for 409 Conflict errors + caused by trying to create an existing measurement. Defaults to False. + """ + + logger.info("endpoint %s", self.endpoint) + logger.info("creating spectrum measurement for source id=%s", sid) + logger.info(" freq_range: %s", freq_range) + logger.info(" timestamp: %s", timestamp) + logger.info(" meta data: %s", meta) + + if meta is None: + meta = {} + + do_not_raise = [] + if exist_ok: + do_not_raise.append(requests.codes["conflict"]) # 409 + + meas_struct = [ + { + "timestamp": timestamp, + "freq_range": freq_range, + "data": data, + "meta": meta, + } + ] + + self._request( + "post", + f"/sources/{sid}/measurements/spectrum", + do_not_raise, + json=meas_struct, + ) + def create_tabular_measurement( self, sid: str, diff --git a/mvg/plotting.py b/mvg/plotting.py index d06dd1e7..5694b3c3 100644 --- a/mvg/plotting.py +++ b/mvg/plotting.py @@ -81,7 +81,7 @@ def modes_boxplot(data, feature, request_id, total_modes=None, axes=None): modes = modes.astype("category") data["Modes"] = data["labels"].copy() data["Modes"] = data["Modes"].astype("category") - data["Modes"].cat.set_categories(modes.tolist(), inplace=True) + data["Modes"] = data["Modes"].cat.set_categories(modes.tolist()) # Plot and format figure image = data.boxplot(column=feature, by="Modes", ax=axes) diff --git a/mvg/utils/response_processing.py b/mvg/utils/response_processing.py index b332a685..e8b7bbcc 100644 --- a/mvg/utils/response_processing.py +++ b/mvg/utils/response_processing.py @@ -5,6 +5,10 @@ from enum import Enum from typing import Dict, Callable +from pydantic import conlist + +FrequencyRange = conlist(float, min_items=2, max_items=2) + class SortOrder(Enum): ASC = "asc" diff --git a/requirements.txt b/requirements.txt index 01835d0e..63cdd79f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,3 +5,4 @@ numpy semver matplotlib tabulate +pydantic \ No newline at end of file diff --git a/requirements_dev.txt b/requirements_dev.txt index 63636bb1..b335eef6 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -13,3 +13,4 @@ pytest-cov # for callback test server uvicorn==0.16.0 fastapi +scipy diff --git a/tests/conftest.py b/tests/conftest.py index 20854e51..fac2a7dc 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,19 +1,20 @@ +import argparse +import json import os +import sys from pathlib import Path +import pandas as pd import pytest import requests -import uuid -import json -import pandas as pd + from mvg import MVG from mvg.exceptions import MVGAPIError - -import argparse -import sys - from tests.helpers import ( + generate_random_source_id, generate_sources_patterns, + make_channel_names, + simulate_spectrum_data, stub_multiaxial_data, upload_measurements, ) @@ -54,9 +55,9 @@ def pytest_addoption(parser): # Pytest initial configuration def pytest_configure(): - pytest.SOURCE_ID_WAVEFORM = uuid.uuid1().hex + pytest.SOURCE_ID_WAVEFORM = generate_random_source_id() pytest.REF_DB_PATH = Path.cwd() / "tests" / "test_data" / "mini_charlie" - pytest.SOURCE_ID_TABULAR = uuid.uuid1().hex + pytest.SOURCE_ID_TABULAR = generate_random_source_id() pytest.VALID_TOKEN = os.environ["TEST_TOKEN"] @@ -226,6 +227,51 @@ def fixture(session): ) +def make_spectrum_source_fixture(pattern, n_channels=1): + @pytest.fixture + def fixture(session: MVG): + sid = generate_random_source_id() + channels = make_channel_names(n_channels=n_channels) + + source_info = {"sid": sid, "channels": channels, "meta": {}} + session.create_spectrum_source(**source_info) + timestamps = [] + measurements = [] + if pattern: + timestamps, measurements = simulate_spectrum_data( + pattern=pattern, channels=channels + ) + for meas in measurements: + session.create_spectrum_measurement( + sid=sid, + freq_range=meas["freq_range"], + timestamp=meas["timestamp"], + data=meas["data"], + meta=meas["meta"], + ) + + info = { + "measurements": measurements, + "timestamps": timestamps, + "pattern": pattern, + "channels": channels, + "meta": source_info["meta"], + } + try: + yield sid, info + finally: + session.delete_source(sid) + + return fixture + + +spectrum_source_with_zero_measurements = make_spectrum_source_fixture(pattern=[]) + +spectrum_source_with_measurements = make_spectrum_source_fixture( + pattern=7 * [0] + 15 * [1] +) + + @pytest.fixture() def tabular_source(session): source_id = pytest.SOURCE_ID_TABULAR diff --git a/tests/helpers.py b/tests/helpers.py index 556b3da2..865a7483 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -1,9 +1,21 @@ +from typing import List +import uuid from itertools import cycle + import numpy as np +from scipy import fft from mvg.mvg import MVG +def generate_random_source_id(): + return uuid.uuid1().hex + + +def make_channel_names(n_channels): + return [f"acc_{i}" for i in range(n_channels)] + + def upload_measurements(session: MVG, sid: str, data: list): """Upload measurements for a source""" timestamps = list(data.keys()) @@ -14,6 +26,29 @@ def upload_measurements(session: MVG, sid: str, data: list): ) +def FFT(data, sample_freq) -> list(): + """Calculates FFT of the given time-series data. + + Parameters + ---------- + data : array + data to be transformed. + sample_freq : float + sampling frequency. + + Returns + ------- + tuple : the frequency range and FFT + """ + N = len(data) # Number of samples + T = 1 / sample_freq # Sample spacing + xf = np.linspace(0.0, 1.0 / (2.0 * T), int(N / 2)) # Creates frequency vector + yf = fft.rfft(data) # Performs FFT + # FFTpeak is currently calculated, to calculate FFTrms reaplce 2.0 by np.sqrt(2) + abs_yf = (2.0 / N) * np.absolute(yf[: N // 2]) # Calculates norm + return xf, abs_yf + + def stub_multiaxial_data(samp_freq=3000, duration=3.0, pattern={}): """Create measurements based on cosine signals (with added noise) for a multiaxial source. @@ -37,7 +72,7 @@ def stub_multiaxial_data(samp_freq=3000, duration=3.0, pattern={}): Examples -------- - >>> pattern = {'acc_x': [0] * 1 + [1] * 1, 'acc_x': [0] * 2, 'acc_z': [1] * 2} + >>> pattern = {'acc_x': [0] * 1 + [1] * 1, 'acc_y': [0] * 2, 'acc_z': [1] * 2} >>> timestamps, data, duration = stub_multiaxial_data() >>> print(data) {0: {"data": {"acc_x": [...], "acc_y": [...], "acc_z": [...]}, "meta": {}}, 3600000: {"data": {"acc_x": [...], "acc_y": [...], "acc_z": [...]}, "meta": {}}} @@ -86,6 +121,35 @@ def stub_multiaxial_data(samp_freq=3000, duration=3.0, pattern={}): return timestamps, data, duration +def simulate_spectrum_data(pattern, channels, sample_freq=3000): + channels_pattern = {channel: pattern for channel in channels} + + timestamps, data, _ = stub_multiaxial_data( + samp_freq=sample_freq, pattern=channels_pattern + ) + + measurements: List[dict] = [] + for timestamp in timestamps: + waveform_data = data[timestamp]["data"] + spectrum_data = {} + for channel, channel_data in waveform_data.items(): + # convert the waveform data in each channel to its + # respective spectrum + _, fft_y = FFT(channel_data, sample_freq) + spectrum_data[channel] = list(fft_y) + + measurements.append( + { + "timestamp": timestamp, + "freq_range": [0, sample_freq], + "meta": {}, + "data": spectrum_data, + } + ) + + return timestamps, measurements + + def generate_sources_patterns(): """Generate a list of multiaxial sources with axis-based patterns""" sources_patterns = [ diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index 0ff67624..5932ef2a 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -6,14 +6,21 @@ Tests need to be run in order -p no:randomly """ -from datetime import datetime, timedelta -import os import json +import os +from datetime import datetime, timedelta + import numpy as np import pandas as pd import pytest from mvg.exceptions import MVGAPIError +from mvg.mvg import MVG +from tests.helpers import ( + generate_random_source_id, + make_channel_names, + simulate_spectrum_data, +) # Just to check if API is live @@ -189,8 +196,6 @@ def test_sources_d(session): session.get_source(sid=pytest.SOURCE_ID_WAVEFORM) assert exc.value.response.status_code == 404 - print("Finishing") - print(session.list_sources()) # API ignore existing @@ -218,19 +223,113 @@ def test_sources_cru_existing(session): session.create_source(source, meta=meta, channels=["acc"]) +def test_get_source_spectrum_source(session: MVG): + source_id = generate_random_source_id() + channels = make_channel_names(n_channels=1) + meta = {"asset_id": "pump"} + + try: + session.create_spectrum_source(source_id, channels=channels, meta=meta) + source = session.get_source(source_id) + + # Check received source data + assert source["source_id"] == source_id + assert source["meta"] == meta + + props = source["properties"] + assert props["data_class"] == "spectrum" + assert props["channels"] == channels + finally: + session.delete_source(source_id) + + # Check that the source has been removed + with pytest.raises(MVGAPIError) as exc: + session.get_source(source_id) + assert exc.value.response.status_code == 404 + assert f"Source ID: {source_id} does not exist!" in str(exc.value) + + +def test_create_spectrum_source_existing( + session: MVG, spectrum_source_with_zero_measurements +): + source_id, source_info = spectrum_source_with_zero_measurements + + # create existing source (409 not ignored) + with pytest.raises(MVGAPIError) as exc: + session.create_spectrum_source( + sid=source_id, channels=source_info["channels"], meta=source_info["meta"] + ) + assert exc.value.response.status_code == 409 + + +def test_create_spectrum_source_ignore_409( + session: MVG, spectrum_source_with_zero_measurements +): + source_id, source_info = spectrum_source_with_zero_measurements + # create existing source (409 ignored) + session.create_spectrum_source( + sid=source_id, + channels=source_info["channels"], + meta=source_info["meta"], + exist_ok=True, + ) + + +def test_create_spectrum_measurement_new_measurement( + session: MVG, spectrum_source_with_zero_measurements +): + source_id, source_info = spectrum_source_with_zero_measurements + + _, measurements = simulate_spectrum_data( + pattern=[0], channels=source_info["channels"] + ) + for measurement in measurements: + session.create_spectrum_measurement(sid=source_id, **measurement) + + # Check received source data + list_measurements = session.list_measurements(source_id) + assert len(list_measurements) == 1 + + assert list_measurements[0]["timestamp"] == measurement["timestamp"] + assert list_measurements[0]["freq_range"] == measurement["freq_range"] + assert list_measurements[0]["meta"] == measurement["meta"] + + +def test_create_spectrum_measurement_existing( + session: MVG, spectrum_source_with_measurements +): + source_id, source_info = spectrum_source_with_measurements + data = source_info["measurements"][0] + + # create existing measurement (409 not ignored) + with pytest.raises(MVGAPIError) as exc: + session.create_spectrum_measurement(sid=source_id, **data) + assert exc.value.response.status_code == 409 + + +def test_create_spectrum_measurement_ignore_409( + session: MVG, spectrum_source_with_measurements +): + source_id, source_info = spectrum_source_with_measurements + data = source_info["measurements"][0] + + # create existing measurement (409 ignored) + session.create_spectrum_measurement(sid=source_id, exist_ok=True, **data) + + def test_tabular_sources(session, tabular_source): source_id, tabular_dict = tabular_source columns = list(tabular_dict.keys()) meta = {"extra": "information"} - # create source again (409 ignored) - session.create_tabular_source(source_id, columns, meta, exist_ok=True) - # create source again (409 not ignored) with pytest.raises(MVGAPIError) as exc: session.create_tabular_source(source_id, columns, meta) assert exc.value.response.status_code == 409 + # create source again (409 ignored) + session.create_tabular_source(source_id, columns, meta, exist_ok=True) + columns.remove("timestamp") src = session.get_source(source_id) assert src["source_id"] == source_id From eabb01d969195272bdfd45a9188d34fb8bf343d0 Mon Sep 17 00:00:00 2001 From: Raman R Date: Wed, 17 May 2023 17:55:34 +0200 Subject: [PATCH 83/90] Fixes for paginated measurements requests (#213) * Pagination should also take into account the limits and offset Bump version of MVG and API Co-Authored-By: Raman R <4946529+pro100watt@users.noreply.github.com> * More tests for pagination * Use the offset from the response --------- Co-authored-by: Raman R <4946529+pro100watt@users.noreply.github.com> Co-authored-by: Vishnu Nadhan --- mvg/mvg.py | 39 ++++++++++------ mvg/utils/response_processing.py | 77 ++++++++++++++++++++++++-------- tests/test_api_sources.py | 48 +++++++++++++++++++- 3 files changed, 131 insertions(+), 33 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index 02613e62..c55e9a62 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -10,23 +10,24 @@ For more information see README.md. """ +import logging import re import time -import logging from typing import Dict, List, Optional + import pandas as pd import requests -from requests.exceptions import RequestException import semver +from requests.exceptions import RequestException from mvg.exceptions import MVGConnectionError +from mvg.http_client import HTTPClient from mvg.utils.response_processing import ( FrequencyRange, SortOrder, get_paginated_analysis_results, get_paginated_items, ) -from mvg.http_client import HTTPClient logger = logging.getLogger(__name__) @@ -62,8 +63,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.14.7") - self.tested_api_version = self.parse_version("v0.5.12") + self.mvg_version = self.parse_version("v0.14.8") + self.tested_api_version = self.parse_version("v0.6.5") # Get API version try: @@ -754,6 +755,7 @@ def read_single_measurement(self, sid: str, timestamp: int) -> dict: return response.json() + # pylint: disable=too-many-locals def list_tabular_measurements( self, sid: str, @@ -808,16 +810,27 @@ def list_tabular_measurements( resp_first = response.json() all_measurements = resp_first["items"] - num_v = resp_first["total"] - if not params: + total_num = resp_first.get("total", None) + request_limit = resp_first.get("limit", None) + + has_missing_items = False + if total_num and request_limit: + offset = offset or 0 + limit = min(limit or total_num, total_num - offset) + has_missing_items = request_limit < limit + + if not params or has_missing_items: # List all by default if pagination is not requested or # start/end timestamps are not specified - limit = resp_first["limit"] - num_reqs = (num_v - 1) // limit - for idx in range(1, num_reqs + 1): - offset = idx * limit - response = self._request("get", url, params={"offset": offset}) - all_measurements += response.json()["items"] + num_reqs = (total_num - 1) // request_limit + for _ in range(1, num_reqs + 1): + if "limit" in params: + params["limit"] -= request_limit + offset += request_limit + params["offset"] = offset + response = self._request("get", url, params=params) + for key, items in response.json()["items"].items(): + all_measurements[key] += items return all_measurements diff --git a/mvg/utils/response_processing.py b/mvg/utils/response_processing.py index e8b7bbcc..e5c5f8d8 100644 --- a/mvg/utils/response_processing.py +++ b/mvg/utils/response_processing.py @@ -3,13 +3,44 @@ """ from enum import Enum -from typing import Dict, Callable +from typing import Callable, Dict from pydantic import conlist FrequencyRange = conlist(float, min_items=2, max_items=2) +def clamp(value, minimum, maximum): + """ + Clamps a value within a specified range. + + Parameters + ---------- + value : float|int + The value to be clamped. + minimum : float|int + The minimum value of the range. + maximum : float|int + The maximum value of the range. + + Returns + ------- + float or int: The clamped value, + which is guaranteed to be within the range [minimum, maximum]. + + Example + ------- + >>> clamp(10, 0, 5) + 5 + >>> clamp(3, 0, 5) + 3 + >>> clamp(-1, 0, 5) + 0 + """ + + return max(minimum, min(value, maximum)) + + class SortOrder(Enum): ASC = "asc" DESC = "desc" @@ -40,25 +71,33 @@ def get_paginated_items(request: Callable, url: str, params: Dict) -> Dict: - "items": list of int, representing timestamps. - "total": int, representing total number of items. """ - if "limit" in params or "offset" in params: - response = request("get", url, params=params) - response = response.json() - all_items = response["items"] - num_items = response["total"] - else: - # List all by default if pagination is not requested + response = request("get", url, params=params) + response = response.json() + items = response["items"] + total_items_num = response["total"] + request_limit = response["limit"] + + offset = params.get("offset", response["offset"]) + limit = params.get("limit", total_items_num) + + # The items count we expect to receive given the pagination params + expected_num = clamp(limit, 0, total_items_num - offset) + + # The items count we didn't receive due to request max items limit + missing_num = expected_num - len(items) + + # How many additional requests to fetch the data + num_reqs = (missing_num - 1) // request_limit + 1 + + for _ in range(0, num_reqs): + if "limit" in params: + params["limit"] -= request_limit + offset += request_limit + params["offset"] = offset response = request("get", url, params=params) - resp_first = response.json() - all_items = resp_first["items"] - num_items = resp_first["total"] - limit = resp_first["limit"] - num_reqs = (num_items - 1) // limit - for idx in range(1, num_reqs + 1): - offset = idx * limit - params["offset"] = offset - response = request("get", url, params=params) - all_items += response.json()["items"] - return {"items": all_items, "total": num_items} + items += response.json()["items"] + + return {"items": items, "total": total_items_num, "limit": request_limit} def get_paginated_analysis_results(request: Callable, url: str, params: Dict) -> Dict: diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index 5932ef2a..1fb51eab 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -16,6 +16,7 @@ from mvg.exceptions import MVGAPIError from mvg.mvg import MVG +from mvg.utils.response_processing import get_paginated_items from tests.helpers import ( generate_random_source_id, make_channel_names, @@ -578,7 +579,7 @@ def test_pagination(session, tabular_source_with_measurements): timestamps = tabular_dict["timestamp"] num_meas = len(timestamps) - # deafult offset and limit + # default offset and limit response = session.list_measurements(sid) assert len(response) == num_meas @@ -619,3 +620,48 @@ def test_pagination(session, tabular_source_with_measurements): # test order=desc response = session.list_timestamps(sid, order="desc") assert response["items"] == sorted(response["items"], reverse=True) + + +def test_pagination_limits(session, tabular_source_with_measurements): + # API sets the limits for pagination which MVG is not aware of. The source + # fixtures defined in MVG might have measurements less than the pagination + # limits. This test enhances the fixtures beyond the pagination limits to + # run tests + + sid, tabular_dict = tabular_source_with_measurements + end_timestamp = tabular_dict["timestamp"][-1] + num_meas = len(tabular_dict["timestamp"]) + + # Find the default pagination limits of the API + url = f"/sources/{sid}/measurements" + paginated_items = get_paginated_items(session._request, url, {}) + measurements_limit = paginated_items["limit"] + + # Prepare measurements upto "x" times the limit + n_times = 2 * measurements_limit + new_timestamps = [end_timestamp + i for i in range(1, n_times + 1)] + data = { + col: n_times * [values[-1]] + for col, values in tabular_dict.items() + if col != "timestamp" + } + data["timestamp"] = new_timestamps + + # Add measurements + session.create_tabular_measurement(sid, data) + for column in tabular_dict: + tabular_dict[column].extend(data[column]) + + # Number of new + existing measurements + num_new_meas = len(tabular_dict["timestamp"]) + # Assert we have the expected number of measurements + assert num_new_meas == num_meas + n_times + + # Default offset and limit + response = session.list_measurements(sid) + assert len(response) == num_new_meas + + # Non-default limit + limit = num_new_meas // 2 + response = session.list_measurements(sid, limit=limit) + assert len(response) == limit From 8018ade464f9a2de6655ed8002668e19352f66c6 Mon Sep 17 00:00:00 2001 From: Vishnu Nadhan Date: Sun, 9 Jul 2023 14:14:53 +0200 Subject: [PATCH 84/90] Fix versions in requirements, update test suite infra. (#217) * Bump versions * Fix versions .. and remove unused dependency "typer" * Reduce number of sources for a BlackSheep analysis * Update docker services for testsuite * Setting lower bounds on main requirements --- .../content/examples/5-analysis_classes.ipynb | 845 +++++++++++++++++- mvg/mvg.py | 4 +- requirements.txt | 15 +- tests/docker-compose.yml | 42 +- 4 files changed, 870 insertions(+), 36 deletions(-) diff --git a/docs/source/content/examples/5-analysis_classes.ipynb b/docs/source/content/examples/5-analysis_classes.ipynb index d0e8e621..63e0532b 100644 --- a/docs/source/content/examples/5-analysis_classes.ipynb +++ b/docs/source/content/examples/5-analysis_classes.ipynb @@ -1,6 +1,7 @@ { "cells": [ { + "attachments": {}, "cell_type": "markdown", "id": "skilled-premium", "metadata": {}, @@ -36,6 +37,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "concerned-vienna", "metadata": {}, @@ -63,6 +65,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "accomplished-mechanics", "metadata": { @@ -109,7 +112,11 @@ "outputs": [ { "data": { - "text/plain": "{'api_version': '0.3.3',\n 'mvg_highest_tested_version': '0.3.3',\n 'mvg_version': '0.12.2'}" + "text/plain": [ + "{'api_version': '0.3.3',\n", + " 'mvg_highest_tested_version': '0.3.3',\n", + " 'mvg_version': '0.12.2'}" + ] }, "execution_count": 3, "metadata": {}, @@ -122,6 +129,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "neural-anniversary", "metadata": { @@ -151,7 +159,14 @@ "outputs": [ { "data": { - "text/plain": "{'source_id': 'u0001',\n 'meta': {'assetId': 'assetJ',\n 'measPoint': 'mloc01',\n 'location': 'cancun',\n 'timezone': 'Europe/Stockholm'},\n 'properties': {'data_class': 'waveform', 'channels': ['acc']}}" + "text/plain": [ + "{'source_id': 'u0001',\n", + " 'meta': {'assetId': 'assetJ',\n", + " 'measPoint': 'mloc01',\n", + " 'location': 'cancun',\n", + " 'timezone': 'Europe/Stockholm'},\n", + " 'properties': {'data_class': 'waveform', 'channels': ['acc']}}" + ] }, "execution_count": 4, "metadata": {}, @@ -164,6 +179,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "relative-niagara", "metadata": { @@ -214,6 +230,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "suited-journal", "metadata": { @@ -288,6 +305,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "global-prediction", "metadata": {}, @@ -318,8 +336,10 @@ "outputs": [ { "data": { - "text/plain": "
", - "image/png": "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\n" + "image/png": "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", + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" @@ -328,7 +348,9 @@ }, { "data": { - "text/plain": "''" + "text/plain": [ + "''" + ] }, "execution_count": 7, "metadata": {}, @@ -340,6 +362,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "alone-array", "metadata": { @@ -369,8 +392,798 @@ "outputs": [ { "data": { - "text/plain": " timestamps rms_acc peak_acc peak2peak_acc variance_acc \\\n0 1570186860 0.647086 2.686563 5.313293 0.418720 \n1 1570273260 0.647123 2.691750 5.367004 0.418769 \n2 1570359660 0.646619 2.715251 5.414856 0.418116 \n3 1570446060 0.646873 2.685147 5.351562 0.418445 \n4 1570532460 0.646643 2.726605 5.395325 0.418147 \n5 1570618860 0.646717 2.697001 5.310974 0.418243 \n6 1570705260 0.647093 2.711733 5.314697 0.418729 \n7 1570791660 0.647422 2.681256 5.325928 0.419155 \n8 1570878060 0.646890 2.667379 5.271362 0.418467 \n9 1570964460 0.647694 2.678755 5.379150 0.419507 \n10 1571050860 0.647081 2.722979 5.499878 0.418714 \n11 1571137260 0.647205 2.682736 5.299072 0.418874 \n12 1571223660 0.646743 2.682785 5.278564 0.418276 \n13 1571310060 0.647322 2.700798 5.424622 0.419026 \n14 1571396460 0.647434 2.721002 5.374634 0.419170 \n15 1571482860 0.647621 2.738182 5.366699 0.419413 \n16 1571569260 0.647111 2.692440 5.362610 0.418753 \n17 1571655660 0.484892 2.372010 4.607971 0.235120 \n18 1571742060 0.484841 2.273428 4.554382 0.235071 \n19 1571828460 0.484752 2.356562 4.664490 0.234984 \n20 1571914860 0.484564 2.367471 4.701599 0.234802 \n21 1572001260 0.485001 2.260560 4.652771 0.235226 \n22 1572087660 0.485013 2.301963 4.591980 0.235237 \n23 1572177660 0.485254 2.260858 4.618774 0.235472 \n24 1572264060 0.485157 2.336525 4.584412 0.235377 \n25 1572350460 0.627895 3.037107 5.601013 0.394252 \n26 1572436860 0.628139 3.069790 5.720886 0.394559 \n27 1572523260 0.628308 3.103501 5.754272 0.394771 \n28 1572609660 0.628020 3.032668 5.694519 0.394409 \n29 1572696060 0.628019 2.969318 5.649292 0.394408 \n30 1572782460 0.628283 3.029716 5.675476 0.394740 \n31 1572868860 0.628152 3.136087 5.711792 0.394575 \n32 1572955260 0.627966 3.123363 5.723633 0.394341 \n33 1573041660 0.627735 3.047385 5.654846 0.394052 \n34 1573128060 0.627870 3.134621 5.796387 0.394221 \n35 1573214460 0.628681 3.098128 5.695251 0.395239 \n36 1573300860 0.628127 3.069387 5.691528 0.394543 \n37 1573387260 0.628122 2.961798 5.575195 0.394537 \n38 1573473660 0.627780 3.072126 5.696533 0.394108 \n39 1573560060 0.627846 3.011650 5.716858 0.394191 \n40 1573646460 0.628536 2.978442 5.552795 0.395058 \n41 1573732860 0.628397 3.106778 5.705566 0.394883 \n42 1573819260 0.628307 3.093943 5.683105 0.394769 \n43 1573905660 0.628142 2.996528 5.589905 0.394563 \n44 1573992060 0.628540 3.012680 5.602417 0.395063 \n45 1574078460 0.628118 3.103921 5.717590 0.394532 \n46 1574164860 0.628429 3.058288 5.590271 0.394922 \n47 1574251260 0.628441 3.085465 5.767273 0.394938 \n48 1574337660 0.628601 3.049571 5.659180 0.395139 \n49 1574424060 0.627963 3.088068 5.777344 0.394337 \n\n crest_factor_acc utilization_acc dc_component_acc \\\n0 4.151786 1 -0.140237 \n1 4.159563 1 -0.140420 \n2 4.199152 1 -0.140239 \n3 4.150966 1 -0.140347 \n4 4.216556 1 -0.140423 \n5 4.170294 1 -0.140055 \n6 4.190640 1 -0.140505 \n7 4.141435 1 -0.140363 \n8 4.123387 1 -0.140524 \n9 4.169247 1 -0.140486 \n10 4.291424 1 -0.139850 \n11 4.145110 1 -0.140317 \n12 4.148148 1 -0.140365 \n13 4.207834 1 -0.140312 \n14 4.202750 1 -0.140069 \n15 4.228060 1 -0.140403 \n16 4.160706 1 -0.140071 \n17 4.891831 1 -0.114442 \n18 4.704542 1 -0.114736 \n19 4.861379 1 -0.114924 \n20 4.885779 1 -0.114846 \n21 4.932384 1 -0.114624 \n22 4.746192 1 -0.114586 \n23 4.859134 1 -0.114862 \n24 4.816021 1 -0.114540 \n25 4.836969 1 -0.109921 \n26 4.887119 1 -0.110074 \n27 4.939456 1 -0.109604 \n28 4.828938 1 -0.109878 \n29 4.728068 1 -0.109149 \n30 4.822214 1 -0.109794 \n31 4.992559 1 -0.109659 \n32 4.973780 1 -0.109508 \n33 4.854570 1 -0.110191 \n34 4.992468 1 -0.109597 \n35 4.927984 1 -0.109786 \n36 4.886571 1 -0.109670 \n37 4.715324 1 -0.110052 \n38 4.893636 1 -0.109663 \n39 4.796795 1 -0.109611 \n40 4.738696 1 -0.109851 \n41 4.943972 1 -0.109341 \n42 4.924257 1 -0.109263 \n43 4.770460 1 -0.109992 \n44 4.793137 1 -0.110092 \n45 4.941623 1 -0.109658 \n46 4.866564 1 -0.109374 \n47 4.909715 1 -0.109269 \n48 4.851366 1 -0.109081 \n49 4.917596 1 -0.109065 \n\n datetime \n0 2019-10-04 13:01:00+02:00 \n1 2019-10-05 13:01:00+02:00 \n2 2019-10-06 13:01:00+02:00 \n3 2019-10-07 13:01:00+02:00 \n4 2019-10-08 13:01:00+02:00 \n5 2019-10-09 13:01:00+02:00 \n6 2019-10-10 13:01:00+02:00 \n7 2019-10-11 13:01:00+02:00 \n8 2019-10-12 13:01:00+02:00 \n9 2019-10-13 13:01:00+02:00 \n10 2019-10-14 13:01:00+02:00 \n11 2019-10-15 13:01:00+02:00 \n12 2019-10-16 13:01:00+02:00 \n13 2019-10-17 13:01:00+02:00 \n14 2019-10-18 13:01:00+02:00 \n15 2019-10-19 13:01:00+02:00 \n16 2019-10-20 13:01:00+02:00 \n17 2019-10-21 13:01:00+02:00 \n18 2019-10-22 13:01:00+02:00 \n19 2019-10-23 13:01:00+02:00 \n20 2019-10-24 13:01:00+02:00 \n21 2019-10-25 13:01:00+02:00 \n22 2019-10-26 13:01:00+02:00 \n23 2019-10-27 13:01:00+01:00 \n24 2019-10-28 13:01:00+01:00 \n25 2019-10-29 13:01:00+01:00 \n26 2019-10-30 13:01:00+01:00 \n27 2019-10-31 13:01:00+01:00 \n28 2019-11-01 13:01:00+01:00 \n29 2019-11-02 13:01:00+01:00 \n30 2019-11-03 13:01:00+01:00 \n31 2019-11-04 13:01:00+01:00 \n32 2019-11-05 13:01:00+01:00 \n33 2019-11-06 13:01:00+01:00 \n34 2019-11-07 13:01:00+01:00 \n35 2019-11-08 13:01:00+01:00 \n36 2019-11-09 13:01:00+01:00 \n37 2019-11-10 13:01:00+01:00 \n38 2019-11-11 13:01:00+01:00 \n39 2019-11-12 13:01:00+01:00 \n40 2019-11-13 13:01:00+01:00 \n41 2019-11-14 13:01:00+01:00 \n42 2019-11-15 13:01:00+01:00 \n43 2019-11-16 13:01:00+01:00 \n44 2019-11-17 13:01:00+01:00 \n45 2019-11-18 13:01:00+01:00 \n46 2019-11-19 13:01:00+01:00 \n47 2019-11-20 13:01:00+01:00 \n48 2019-11-21 13:01:00+01:00 \n49 2019-11-22 13:01:00+01:00 ", - "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 \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
timestampsrms_accpeak_accpeak2peak_accvariance_acccrest_factor_accutilization_accdc_component_accdatetime
015701868600.6470862.6865635.3132930.4187204.1517861-0.1402372019-10-04 13:01:00+02:00
115702732600.6471232.6917505.3670040.4187694.1595631-0.1404202019-10-05 13:01:00+02:00
215703596600.6466192.7152515.4148560.4181164.1991521-0.1402392019-10-06 13:01:00+02:00
315704460600.6468732.6851475.3515620.4184454.1509661-0.1403472019-10-07 13:01:00+02:00
415705324600.6466432.7266055.3953250.4181474.2165561-0.1404232019-10-08 13:01:00+02:00
515706188600.6467172.6970015.3109740.4182434.1702941-0.1400552019-10-09 13:01:00+02:00
615707052600.6470932.7117335.3146970.4187294.1906401-0.1405052019-10-10 13:01:00+02:00
715707916600.6474222.6812565.3259280.4191554.1414351-0.1403632019-10-11 13:01:00+02:00
815708780600.6468902.6673795.2713620.4184674.1233871-0.1405242019-10-12 13:01:00+02:00
915709644600.6476942.6787555.3791500.4195074.1692471-0.1404862019-10-13 13:01:00+02:00
1015710508600.6470812.7229795.4998780.4187144.2914241-0.1398502019-10-14 13:01:00+02:00
1115711372600.6472052.6827365.2990720.4188744.1451101-0.1403172019-10-15 13:01:00+02:00
1215712236600.6467432.6827855.2785640.4182764.1481481-0.1403652019-10-16 13:01:00+02:00
1315713100600.6473222.7007985.4246220.4190264.2078341-0.1403122019-10-17 13:01:00+02:00
1415713964600.6474342.7210025.3746340.4191704.2027501-0.1400692019-10-18 13:01:00+02:00
1515714828600.6476212.7381825.3666990.4194134.2280601-0.1404032019-10-19 13:01:00+02:00
1615715692600.6471112.6924405.3626100.4187534.1607061-0.1400712019-10-20 13:01:00+02:00
1715716556600.4848922.3720104.6079710.2351204.8918311-0.1144422019-10-21 13:01:00+02:00
1815717420600.4848412.2734284.5543820.2350714.7045421-0.1147362019-10-22 13:01:00+02:00
1915718284600.4847522.3565624.6644900.2349844.8613791-0.1149242019-10-23 13:01:00+02:00
2015719148600.4845642.3674714.7015990.2348024.8857791-0.1148462019-10-24 13:01:00+02:00
2115720012600.4850012.2605604.6527710.2352264.9323841-0.1146242019-10-25 13:01:00+02:00
2215720876600.4850132.3019634.5919800.2352374.7461921-0.1145862019-10-26 13:01:00+02:00
2315721776600.4852542.2608584.6187740.2354724.8591341-0.1148622019-10-27 13:01:00+01:00
2415722640600.4851572.3365254.5844120.2353774.8160211-0.1145402019-10-28 13:01:00+01:00
2515723504600.6278953.0371075.6010130.3942524.8369691-0.1099212019-10-29 13:01:00+01:00
2615724368600.6281393.0697905.7208860.3945594.8871191-0.1100742019-10-30 13:01:00+01:00
2715725232600.6283083.1035015.7542720.3947714.9394561-0.1096042019-10-31 13:01:00+01:00
2815726096600.6280203.0326685.6945190.3944094.8289381-0.1098782019-11-01 13:01:00+01:00
2915726960600.6280192.9693185.6492920.3944084.7280681-0.1091492019-11-02 13:01:00+01:00
3015727824600.6282833.0297165.6754760.3947404.8222141-0.1097942019-11-03 13:01:00+01:00
3115728688600.6281523.1360875.7117920.3945754.9925591-0.1096592019-11-04 13:01:00+01:00
3215729552600.6279663.1233635.7236330.3943414.9737801-0.1095082019-11-05 13:01:00+01:00
3315730416600.6277353.0473855.6548460.3940524.8545701-0.1101912019-11-06 13:01:00+01:00
3415731280600.6278703.1346215.7963870.3942214.9924681-0.1095972019-11-07 13:01:00+01:00
3515732144600.6286813.0981285.6952510.3952394.9279841-0.1097862019-11-08 13:01:00+01:00
3615733008600.6281273.0693875.6915280.3945434.8865711-0.1096702019-11-09 13:01:00+01:00
3715733872600.6281222.9617985.5751950.3945374.7153241-0.1100522019-11-10 13:01:00+01:00
3815734736600.6277803.0721265.6965330.3941084.8936361-0.1096632019-11-11 13:01:00+01:00
3915735600600.6278463.0116505.7168580.3941914.7967951-0.1096112019-11-12 13:01:00+01:00
4015736464600.6285362.9784425.5527950.3950584.7386961-0.1098512019-11-13 13:01:00+01:00
4115737328600.6283973.1067785.7055660.3948834.9439721-0.1093412019-11-14 13:01:00+01:00
4215738192600.6283073.0939435.6831050.3947694.9242571-0.1092632019-11-15 13:01:00+01:00
4315739056600.6281422.9965285.5899050.3945634.7704601-0.1099922019-11-16 13:01:00+01:00
4415739920600.6285403.0126805.6024170.3950634.7931371-0.1100922019-11-17 13:01:00+01:00
4515740784600.6281183.1039215.7175900.3945324.9416231-0.1096582019-11-18 13:01:00+01:00
4615741648600.6284293.0582885.5902710.3949224.8665641-0.1093742019-11-19 13:01:00+01:00
4715742512600.6284413.0854655.7672730.3949384.9097151-0.1092692019-11-20 13:01:00+01:00
4815743376600.6286013.0495715.6591800.3951394.8513661-0.1090812019-11-21 13:01:00+01:00
4915744240600.6279633.0880685.7773440.3943374.9175961-0.1090652019-11-22 13:01:00+01:00
\n
" + "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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
timestampsrms_accpeak_accpeak2peak_accvariance_acccrest_factor_accutilization_accdc_component_accdatetime
015701868600.6470862.6865635.3132930.4187204.1517861-0.1402372019-10-04 13:01:00+02:00
115702732600.6471232.6917505.3670040.4187694.1595631-0.1404202019-10-05 13:01:00+02:00
215703596600.6466192.7152515.4148560.4181164.1991521-0.1402392019-10-06 13:01:00+02:00
315704460600.6468732.6851475.3515620.4184454.1509661-0.1403472019-10-07 13:01:00+02:00
415705324600.6466432.7266055.3953250.4181474.2165561-0.1404232019-10-08 13:01:00+02:00
515706188600.6467172.6970015.3109740.4182434.1702941-0.1400552019-10-09 13:01:00+02:00
615707052600.6470932.7117335.3146970.4187294.1906401-0.1405052019-10-10 13:01:00+02:00
715707916600.6474222.6812565.3259280.4191554.1414351-0.1403632019-10-11 13:01:00+02:00
815708780600.6468902.6673795.2713620.4184674.1233871-0.1405242019-10-12 13:01:00+02:00
915709644600.6476942.6787555.3791500.4195074.1692471-0.1404862019-10-13 13:01:00+02:00
1015710508600.6470812.7229795.4998780.4187144.2914241-0.1398502019-10-14 13:01:00+02:00
1115711372600.6472052.6827365.2990720.4188744.1451101-0.1403172019-10-15 13:01:00+02:00
1215712236600.6467432.6827855.2785640.4182764.1481481-0.1403652019-10-16 13:01:00+02:00
1315713100600.6473222.7007985.4246220.4190264.2078341-0.1403122019-10-17 13:01:00+02:00
1415713964600.6474342.7210025.3746340.4191704.2027501-0.1400692019-10-18 13:01:00+02:00
1515714828600.6476212.7381825.3666990.4194134.2280601-0.1404032019-10-19 13:01:00+02:00
1615715692600.6471112.6924405.3626100.4187534.1607061-0.1400712019-10-20 13:01:00+02:00
1715716556600.4848922.3720104.6079710.2351204.8918311-0.1144422019-10-21 13:01:00+02:00
1815717420600.4848412.2734284.5543820.2350714.7045421-0.1147362019-10-22 13:01:00+02:00
1915718284600.4847522.3565624.6644900.2349844.8613791-0.1149242019-10-23 13:01:00+02:00
2015719148600.4845642.3674714.7015990.2348024.8857791-0.1148462019-10-24 13:01:00+02:00
2115720012600.4850012.2605604.6527710.2352264.9323841-0.1146242019-10-25 13:01:00+02:00
2215720876600.4850132.3019634.5919800.2352374.7461921-0.1145862019-10-26 13:01:00+02:00
2315721776600.4852542.2608584.6187740.2354724.8591341-0.1148622019-10-27 13:01:00+01:00
2415722640600.4851572.3365254.5844120.2353774.8160211-0.1145402019-10-28 13:01:00+01:00
2515723504600.6278953.0371075.6010130.3942524.8369691-0.1099212019-10-29 13:01:00+01:00
2615724368600.6281393.0697905.7208860.3945594.8871191-0.1100742019-10-30 13:01:00+01:00
2715725232600.6283083.1035015.7542720.3947714.9394561-0.1096042019-10-31 13:01:00+01:00
2815726096600.6280203.0326685.6945190.3944094.8289381-0.1098782019-11-01 13:01:00+01:00
2915726960600.6280192.9693185.6492920.3944084.7280681-0.1091492019-11-02 13:01:00+01:00
3015727824600.6282833.0297165.6754760.3947404.8222141-0.1097942019-11-03 13:01:00+01:00
3115728688600.6281523.1360875.7117920.3945754.9925591-0.1096592019-11-04 13:01:00+01:00
3215729552600.6279663.1233635.7236330.3943414.9737801-0.1095082019-11-05 13:01:00+01:00
3315730416600.6277353.0473855.6548460.3940524.8545701-0.1101912019-11-06 13:01:00+01:00
3415731280600.6278703.1346215.7963870.3942214.9924681-0.1095972019-11-07 13:01:00+01:00
3515732144600.6286813.0981285.6952510.3952394.9279841-0.1097862019-11-08 13:01:00+01:00
3615733008600.6281273.0693875.6915280.3945434.8865711-0.1096702019-11-09 13:01:00+01:00
3715733872600.6281222.9617985.5751950.3945374.7153241-0.1100522019-11-10 13:01:00+01:00
3815734736600.6277803.0721265.6965330.3941084.8936361-0.1096632019-11-11 13:01:00+01:00
3915735600600.6278463.0116505.7168580.3941914.7967951-0.1096112019-11-12 13:01:00+01:00
4015736464600.6285362.9784425.5527950.3950584.7386961-0.1098512019-11-13 13:01:00+01:00
4115737328600.6283973.1067785.7055660.3948834.9439721-0.1093412019-11-14 13:01:00+01:00
4215738192600.6283073.0939435.6831050.3947694.9242571-0.1092632019-11-15 13:01:00+01:00
4315739056600.6281422.9965285.5899050.3945634.7704601-0.1099922019-11-16 13:01:00+01:00
4415739920600.6285403.0126805.6024170.3950634.7931371-0.1100922019-11-17 13:01:00+01:00
4515740784600.6281183.1039215.7175900.3945324.9416231-0.1096582019-11-18 13:01:00+01:00
4615741648600.6284293.0582885.5902710.3949224.8665641-0.1093742019-11-19 13:01:00+01:00
4715742512600.6284413.0854655.7672730.3949384.9097151-0.1092692019-11-20 13:01:00+01:00
4815743376600.6286013.0495715.6591800.3951394.8513661-0.1090812019-11-21 13:01:00+01:00
4915744240600.6279633.0880685.7773440.3943374.9175961-0.1090652019-11-22 13:01:00+01:00
\n", + "
" + ], + "text/plain": [ + " timestamps rms_acc peak_acc peak2peak_acc variance_acc \\\n", + "0 1570186860 0.647086 2.686563 5.313293 0.418720 \n", + "1 1570273260 0.647123 2.691750 5.367004 0.418769 \n", + "2 1570359660 0.646619 2.715251 5.414856 0.418116 \n", + "3 1570446060 0.646873 2.685147 5.351562 0.418445 \n", + "4 1570532460 0.646643 2.726605 5.395325 0.418147 \n", + "5 1570618860 0.646717 2.697001 5.310974 0.418243 \n", + "6 1570705260 0.647093 2.711733 5.314697 0.418729 \n", + "7 1570791660 0.647422 2.681256 5.325928 0.419155 \n", + "8 1570878060 0.646890 2.667379 5.271362 0.418467 \n", + "9 1570964460 0.647694 2.678755 5.379150 0.419507 \n", + "10 1571050860 0.647081 2.722979 5.499878 0.418714 \n", + "11 1571137260 0.647205 2.682736 5.299072 0.418874 \n", + "12 1571223660 0.646743 2.682785 5.278564 0.418276 \n", + "13 1571310060 0.647322 2.700798 5.424622 0.419026 \n", + "14 1571396460 0.647434 2.721002 5.374634 0.419170 \n", + "15 1571482860 0.647621 2.738182 5.366699 0.419413 \n", + "16 1571569260 0.647111 2.692440 5.362610 0.418753 \n", + "17 1571655660 0.484892 2.372010 4.607971 0.235120 \n", + "18 1571742060 0.484841 2.273428 4.554382 0.235071 \n", + "19 1571828460 0.484752 2.356562 4.664490 0.234984 \n", + "20 1571914860 0.484564 2.367471 4.701599 0.234802 \n", + "21 1572001260 0.485001 2.260560 4.652771 0.235226 \n", + "22 1572087660 0.485013 2.301963 4.591980 0.235237 \n", + "23 1572177660 0.485254 2.260858 4.618774 0.235472 \n", + "24 1572264060 0.485157 2.336525 4.584412 0.235377 \n", + "25 1572350460 0.627895 3.037107 5.601013 0.394252 \n", + "26 1572436860 0.628139 3.069790 5.720886 0.394559 \n", + "27 1572523260 0.628308 3.103501 5.754272 0.394771 \n", + "28 1572609660 0.628020 3.032668 5.694519 0.394409 \n", + "29 1572696060 0.628019 2.969318 5.649292 0.394408 \n", + "30 1572782460 0.628283 3.029716 5.675476 0.394740 \n", + "31 1572868860 0.628152 3.136087 5.711792 0.394575 \n", + "32 1572955260 0.627966 3.123363 5.723633 0.394341 \n", + "33 1573041660 0.627735 3.047385 5.654846 0.394052 \n", + "34 1573128060 0.627870 3.134621 5.796387 0.394221 \n", + "35 1573214460 0.628681 3.098128 5.695251 0.395239 \n", + "36 1573300860 0.628127 3.069387 5.691528 0.394543 \n", + "37 1573387260 0.628122 2.961798 5.575195 0.394537 \n", + "38 1573473660 0.627780 3.072126 5.696533 0.394108 \n", + "39 1573560060 0.627846 3.011650 5.716858 0.394191 \n", + "40 1573646460 0.628536 2.978442 5.552795 0.395058 \n", + "41 1573732860 0.628397 3.106778 5.705566 0.394883 \n", + "42 1573819260 0.628307 3.093943 5.683105 0.394769 \n", + "43 1573905660 0.628142 2.996528 5.589905 0.394563 \n", + "44 1573992060 0.628540 3.012680 5.602417 0.395063 \n", + "45 1574078460 0.628118 3.103921 5.717590 0.394532 \n", + "46 1574164860 0.628429 3.058288 5.590271 0.394922 \n", + "47 1574251260 0.628441 3.085465 5.767273 0.394938 \n", + "48 1574337660 0.628601 3.049571 5.659180 0.395139 \n", + "49 1574424060 0.627963 3.088068 5.777344 0.394337 \n", + "\n", + " crest_factor_acc utilization_acc dc_component_acc \\\n", + "0 4.151786 1 -0.140237 \n", + "1 4.159563 1 -0.140420 \n", + "2 4.199152 1 -0.140239 \n", + "3 4.150966 1 -0.140347 \n", + "4 4.216556 1 -0.140423 \n", + "5 4.170294 1 -0.140055 \n", + "6 4.190640 1 -0.140505 \n", + "7 4.141435 1 -0.140363 \n", + "8 4.123387 1 -0.140524 \n", + "9 4.169247 1 -0.140486 \n", + "10 4.291424 1 -0.139850 \n", + "11 4.145110 1 -0.140317 \n", + "12 4.148148 1 -0.140365 \n", + "13 4.207834 1 -0.140312 \n", + "14 4.202750 1 -0.140069 \n", + "15 4.228060 1 -0.140403 \n", + "16 4.160706 1 -0.140071 \n", + "17 4.891831 1 -0.114442 \n", + "18 4.704542 1 -0.114736 \n", + "19 4.861379 1 -0.114924 \n", + "20 4.885779 1 -0.114846 \n", + "21 4.932384 1 -0.114624 \n", + "22 4.746192 1 -0.114586 \n", + "23 4.859134 1 -0.114862 \n", + "24 4.816021 1 -0.114540 \n", + "25 4.836969 1 -0.109921 \n", + "26 4.887119 1 -0.110074 \n", + "27 4.939456 1 -0.109604 \n", + "28 4.828938 1 -0.109878 \n", + "29 4.728068 1 -0.109149 \n", + "30 4.822214 1 -0.109794 \n", + "31 4.992559 1 -0.109659 \n", + "32 4.973780 1 -0.109508 \n", + "33 4.854570 1 -0.110191 \n", + "34 4.992468 1 -0.109597 \n", + "35 4.927984 1 -0.109786 \n", + "36 4.886571 1 -0.109670 \n", + "37 4.715324 1 -0.110052 \n", + "38 4.893636 1 -0.109663 \n", + "39 4.796795 1 -0.109611 \n", + "40 4.738696 1 -0.109851 \n", + "41 4.943972 1 -0.109341 \n", + "42 4.924257 1 -0.109263 \n", + "43 4.770460 1 -0.109992 \n", + "44 4.793137 1 -0.110092 \n", + "45 4.941623 1 -0.109658 \n", + "46 4.866564 1 -0.109374 \n", + "47 4.909715 1 -0.109269 \n", + "48 4.851366 1 -0.109081 \n", + "49 4.917596 1 -0.109065 \n", + "\n", + " datetime \n", + "0 2019-10-04 13:01:00+02:00 \n", + "1 2019-10-05 13:01:00+02:00 \n", + "2 2019-10-06 13:01:00+02:00 \n", + "3 2019-10-07 13:01:00+02:00 \n", + "4 2019-10-08 13:01:00+02:00 \n", + "5 2019-10-09 13:01:00+02:00 \n", + "6 2019-10-10 13:01:00+02:00 \n", + "7 2019-10-11 13:01:00+02:00 \n", + "8 2019-10-12 13:01:00+02:00 \n", + "9 2019-10-13 13:01:00+02:00 \n", + "10 2019-10-14 13:01:00+02:00 \n", + "11 2019-10-15 13:01:00+02:00 \n", + "12 2019-10-16 13:01:00+02:00 \n", + "13 2019-10-17 13:01:00+02:00 \n", + "14 2019-10-18 13:01:00+02:00 \n", + "15 2019-10-19 13:01:00+02:00 \n", + "16 2019-10-20 13:01:00+02:00 \n", + "17 2019-10-21 13:01:00+02:00 \n", + "18 2019-10-22 13:01:00+02:00 \n", + "19 2019-10-23 13:01:00+02:00 \n", + "20 2019-10-24 13:01:00+02:00 \n", + "21 2019-10-25 13:01:00+02:00 \n", + "22 2019-10-26 13:01:00+02:00 \n", + "23 2019-10-27 13:01:00+01:00 \n", + "24 2019-10-28 13:01:00+01:00 \n", + "25 2019-10-29 13:01:00+01:00 \n", + "26 2019-10-30 13:01:00+01:00 \n", + "27 2019-10-31 13:01:00+01:00 \n", + "28 2019-11-01 13:01:00+01:00 \n", + "29 2019-11-02 13:01:00+01:00 \n", + "30 2019-11-03 13:01:00+01:00 \n", + "31 2019-11-04 13:01:00+01:00 \n", + "32 2019-11-05 13:01:00+01:00 \n", + "33 2019-11-06 13:01:00+01:00 \n", + "34 2019-11-07 13:01:00+01:00 \n", + "35 2019-11-08 13:01:00+01:00 \n", + "36 2019-11-09 13:01:00+01:00 \n", + "37 2019-11-10 13:01:00+01:00 \n", + "38 2019-11-11 13:01:00+01:00 \n", + "39 2019-11-12 13:01:00+01:00 \n", + "40 2019-11-13 13:01:00+01:00 \n", + "41 2019-11-14 13:01:00+01:00 \n", + "42 2019-11-15 13:01:00+01:00 \n", + "43 2019-11-16 13:01:00+01:00 \n", + "44 2019-11-17 13:01:00+01:00 \n", + "45 2019-11-18 13:01:00+01:00 \n", + "46 2019-11-19 13:01:00+01:00 \n", + "47 2019-11-20 13:01:00+01:00 \n", + "48 2019-11-21 13:01:00+01:00 \n", + "49 2019-11-22 13:01:00+01:00 " + ] }, "execution_count": 8, "metadata": {}, @@ -382,6 +1195,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "accredited-council", "metadata": { @@ -413,6 +1227,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "rural-consistency", "metadata": {}, @@ -432,8 +1247,8 @@ "start_time": "2021-03-18T10:00:50.909661Z" }, "pycharm": { - "name": "#%%\n", - "is_executing": true + "is_executing": true, + "name": "#%%\n" } }, "outputs": [ @@ -447,7 +1262,7 @@ ], "source": [ "# Specific signature for BlackSheep\n", - "POPULATION_SOURCES = [\"u0001\",\"u0001\",\"u0001\",\"u0001\",\"u0001\",\"u0001\",\"u0001\",\"u0001\",\"u0001\",\"u0004\",\"u0002\",\"u0003\",\"u0001\"]\n", + "POPULATION_SOURCES = [\"u0001\",\"u0002\",\"u0003\",\"u0004\"]\n", "analysis_request = session.request_population_analysis(POPULATION_SOURCES, \"BlackSheep\", parameters={\"atypical_threshold\": 0.15})\n", "\n", "# Generic part to request analysis, same as above\n", @@ -457,6 +1272,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "stunning-device", "metadata": { @@ -492,6 +1308,7 @@ ] }, { + "attachments": {}, "cell_type": "markdown", "id": "convinced-louis", "metadata": {}, @@ -520,7 +1337,9 @@ }, { "data": { - "text/plain": "'9895be09684f27257096bd9d517a9680.pkl'" + "text/plain": [ + "'9895be09684f27257096bd9d517a9680.pkl'" + ] }, "execution_count": 13, "metadata": {}, @@ -552,7 +1371,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.10" + "version": "3.11.3" }, "toc": { "base_numbering": 1, @@ -599,4 +1418,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} \ No newline at end of file +} diff --git a/mvg/mvg.py b/mvg/mvg.py index c55e9a62..bd181f12 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -63,8 +63,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.14.8") - self.tested_api_version = self.parse_version("v0.6.5") + self.mvg_version = self.parse_version("v0.14.9") + self.tested_api_version = self.parse_version("v0.9.3") # Get API version try: diff --git a/requirements.txt b/requirements.txt index 63cdd79f..d87847a6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,7 @@ -typer -pandas -requests -numpy -semver -matplotlib -tabulate -pydantic \ No newline at end of file +pandas>=1.1.5,<=2.0.3 +requests>=2.27.1,<=2.31.0 +numpy>=1.19.5,<=1.24.1 +semver>=2.13.0,<=3.0.1 +matplotlib>=3.3.4,<=3.7.2 +tabulate>=0.8.10,<=0.9.0 +pydantic>=1.9.2,<=1.10.11 \ No newline at end of file diff --git a/tests/docker-compose.yml b/tests/docker-compose.yml index 6054b973..b32996fd 100644 --- a/tests/docker-compose.yml +++ b/tests/docker-compose.yml @@ -1,29 +1,35 @@ version: "3.3" -x-vibium-services-config: &vibium-services-config +x-vibium-service: &vibium-service image: ${AWS_ECR}/vibium-app:${VIBIUM_VERSION} restart: unless-stopped - environment: - - VIBIUM_SLEEP=60 # wait for localstack to be ready - - VIBIUM_PIPELINE=/pipeline - - AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION} - - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} - - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} - - AWS_ENDPOINT_URL=http://localstack:4566 - - ANALYSIS_IN_QUEUE=vibium-analysis-in + environment: &vibium-service-environment + VIBIUM_PIPELINE: /pipeline + AWS_DEFAULT_REGION: eu-west-1 + AWS_ACCESS_KEY_ID: test + AWS_SECRET_ACCESS_KEY: test + AWS_ENDPOINT_URL: http://localstack:4566 + MONGO_URI: mongodb://mongo:27017/ + ACTIVE_PROFILE: local volumes: - "vibium-pipeline:/pipeline" networks: - vibium_net depends_on: + - mongo - localstack services: vibium-worker: - <<: *vibium-services-config - entrypoint: ["python", "worker.py"] + <<: *vibium-service + entrypoint: ["python", "-m", "vibium_app.worker"] + environment: + <<: *vibium-service-environment + HEART_BEAT_FREQUENCY_SECONDS: 0 # disable heartbeat + EXIT_ON_MESSAGE_PROCESSED: "False" + vibium-api: - <<: *vibium-services-config + <<: *vibium-service ports: - 8000:8000 @@ -35,10 +41,20 @@ services: volumes: - "./localstack:/docker-entrypoint-initaws.d" environment: - - SERVICES=sqs,s3 + - SERVICES=sqs - AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION} networks: - vibium_net + mongo: + image: mongo:6.0 + ports: + - 27071:27071 + - 27017:27017 + restart: always + environment: + - MONGO_INITDB_DATABASE=vibiumdb + networks: + - vibium_net volumes: vibium-pipeline: From cb7f277ccfbe05e621527b347b7873de2b50ff11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Th=C3=B6rnblom?= <137047800+adamthornblom@users.noreply.github.com> Date: Tue, 11 Jul 2023 10:16:07 +0200 Subject: [PATCH 85/90] At improving documentation (#215) * Update README.md * metainformation > metadata * bump API version --------- Co-authored-by: Mohsen Nosratinia --- README.md | 107 ++++++++++++++++++----------------------------------- mvg/mvg.py | 2 +- 2 files changed, 36 insertions(+), 73 deletions(-) diff --git a/README.md b/README.md index a5a98f1e..89310ae5 100644 --- a/README.md +++ b/README.md @@ -4,16 +4,18 @@ PyPI - Python Version -A Python library to interface the the **M**ulti**V**iz Analytics En**G**ine ('MVG') +The **M**ulti**V**iz Analytics En**G**ine ('MVG') is a Python library that enables users to: -* setup a session towards the vibium-cloud service - -* interface the services by means of API calls. [API documentation](https://api.beta.multiviz.com/docs). +- Establish a session with the Vibium Cloud service +- Interface the services via API calls. For more information, refer to the [API documentation](https://api.beta.multiviz.com/docs). ## Documentation Usage of the library and several examples can be found [here](https://vikinganalytics.github.io/mvg/). -## Obtaining the library + +## Installation + +To install the library, use the following pip command: ``` pip install va-mvg @@ -21,101 +23,62 @@ pip install va-mvg ## Basic Usage -1. Create a session by instantiating a MVG object. A session is a combination -of an endpoint (server address) and a token. The token is used both for -authentication and authorization. -The token is provided by Viking Analytics. +The basic usage involves three steps: -2. Call the API functions +1. Create a session by instantiating an MVG object. A session is a combination of an endpoint (server address) and a token. The token, provided by Viking Analytics, is used for both authentication and authorization. -3. Errors are propagated via exceptions. It is up to the calling application -to handle error cases. +2. Call the API functions. + +3. Handle exceptions. Errors are propagated via exceptions, and it is the responsibility of the calling application to handle these. ## Important Concepts -* endpoint: The server providing the analytics and data handling functions. -Represented by an URL. The endpoint is set when creating the session. +- **Endpoint**: The server that provides the analytics and data handling functions. This is represented by a URL and is set when creating the session. -* source ID (sid): an identifier representing a measurement source, -typically a sensor. The sid is set on the client side and will be used -as a reference for the source and all information related to it -(e.g. measurements and analysis results). +- **Source ID (sid)**: An identifier that represents a measurement source, typically a sensor. The sid is set on the client side and is used as a reference for the source and all information related to it (e.g., measurements and analysis results). -* token: authentication and authorization token (to be provided by Viking -Analytics) +- **Token**: An authentication and authorization token provided by Viking Analytics. -* meta information: additional information attached to sources or measurements. -For some analyses the meta information needs to contain specific key-value pairs, -but in general meta information is managed by the client side. -Meta information will be stored along the sources/measurements and can be -retrieved from the server side, even if it is not processed on the -server side. Example of meta information for a source +- **Metadata**: Additional data providing information about the sources or measurements. This can contain specific key-value pairs for some analyses, but generally, metadata is managed by the client side. Even if it is not processed on the server side, metadata is stored alongside the sources/measurements and can be retrieved from the server side. For example: ```python {"sensor_type": "arduino", "location": "gearbox"} ``` -* measurements: measurements is numerical data (typically a list of float values -representing sensor data) identified by the source ID (the sensor recording the -measurement) and the timestamp when the measurement was recorded. It is the -responsibility of the client side to convey source ID and timestamp to the server -side. - -* features: features are the analytics functions supported by the server side. -An analytics function is invoked on a set of measurements by requesting -an analysis. - -* analysis: an analysis applies a feature on a set of previously stored data. -To specify an analysis the feature, the data, and the parameters need to be -specified by the client side. Data needs to be available on the server. -All calls to analysis are asynchronous. So the flow is to (1) request an -analysis (2) poll for status (3) retrieve results when the analysis is completed. -Each analysis is assigned a unique ID (request_id). Completed analyses are stored -on the server side and can be retrieved by means of the jobid. -It is primarily the clients side's responsibility to keep track of analyses. - -## Version handling of mvg and API version - -The version string of the MVG API on the server side has the form -v{MAJOR}.{MINOR}.{PATCH}. -An increase of MAJOR means an incompatible change which requires an -upgrade of mvg, an increase in MINOR does not require an upgrade of -mvg, but may then not allow to access new features of the API. See mvg -documentation and examples/0-check_version.ipynb for details. +- **Measurements**: Numerical data (typically a list of float values representing sensor data) identified by the source ID (the sensor recording the measurement) and the timestamp when the measurement was recorded. The client side is responsible for conveying the source ID and timestamp to the server side. + +- **Features**: The analytics functions supported by the server side. An analytics function is invoked on a set of measurements by requesting an analysis. + +- **Analysis**: An analysis applies a feature on a set of previously stored data. The client side needs to specify the feature, the data, and the parameters for an analysis. Data needs to be available on the server. All calls to analysis are asynchronous. The typical flow is to (1) request an analysis, (2) poll for status, and (3) retrieve results when the analysis is completed. Each analysis is assigned a unique ID (request_id). Completed analyses are stored on the server side and can be retrieved using the job ID. It is primarily the client side's responsibility to keep track of analyses. + +## Version Handling of MVG and API Version + +The version string of the MVG API on the server side has the form v{MAJOR}.{MINOR}.{PATCH}. An increase in MAJOR signifies an incompatible change that requires an upgrade of mvg. An increase in MINOR does not require an upgrade but may not allow access to new features of the API. Please refer to the mvg documentation + + and the example "examples/0-check_version.ipynb" for details. ## Additional Documentation -* API documentation on mvg, autogenerated from mvg.py +- Autogenerated API documentation on mvg from mvg.py ### Examples -Under the examples section there are a number of jupyter notebooks -with Python code to show how to use the library for interfacing the -Viking Analytics Engine. The notebooks can be downloaded by -clicking "View Page Source" link located on the top left of the -examples. You will need to change the extension to .ipynb before -running them. +In the examples section, there are several Jupyter notebooks with Python code demonstrating how to use the library for interfacing with the Viking Analytics Engine. You can download these notebooks by clicking on the "View Page Source" link located at the top left of the examples. Be sure to change the extension to .ipynb before running them. ### Analysis Classes (beta) -Analysis classes provide a simple and powerful way to parse and -inspect the results for analysis calls for our features. -Apart from converting the results to dataframes, -they can be used in an interactive -shell to inspect the results from analysis calls. +Analysis classes provide a simple and powerful way to parse and inspect the results from analysis calls for our features. Apart from converting the results to dataframes, they can be used in an interactive shell to inspect the results from analysis calls. -In the directory anlysis_class_examples there are scripts for -showing how to use the analysis classes. +In the "analysis_class_examples" directory, there are scripts showing how to use the analysis classes. ### Maintainer -Maintainer of the mvg library is Viking Analytics AB. +The mvg library is maintained by Viking Analytics AB. Visit their website at . -### Bug Reporting, Pull request, and support ... +### Bug Reporting, Pull Requests, and Support -... please use the issue tracking and pull requests on -https://github.com/vikinganalytics/mvg +For bug reporting, pull requests, and support, please use the issue tracking and pull requests on the mvg GitHub page: https://github.com/vikinganalytics/mvg. ### License -The mvg library is licensed under Apache License 2.0, see LICENSE file. +The mvg library is licensed under the Apache License 2.0. See the LICENSE file for details. diff --git a/mvg/mvg.py b/mvg/mvg.py index bd181f12..b7d9f896 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -63,7 +63,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.14.9") + self.mvg_version = self.parse_version("v0.14.10") self.tested_api_version = self.parse_version("v0.9.3") # Get API version From 5b67e2e51f719c104ae4a4e33bf4309db55be8b1 Mon Sep 17 00:00:00 2001 From: Pavel Rabetski Date: Thu, 13 Jul 2023 20:48:52 +0200 Subject: [PATCH 86/90] Add custom user-agent header to identify MVG (#219) * Add custom user-agent header to identify MVG * Update mvg and api versions * Update vibium api version --- mvg/http_client.py | 7 ++++++- mvg/mvg.py | 6 +++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/mvg/http_client.py b/mvg/http_client.py index 4c4928f1..78a020b8 100644 --- a/mvg/http_client.py +++ b/mvg/http_client.py @@ -41,12 +41,14 @@ def __init__( self, endpoint, token, + mvg_version=None, retries=None, timeout=120, ): self.endpoint = endpoint self.token = token self.timeout = timeout + self.mvg_version = mvg_version self.retries = retries if not self.retries: @@ -58,7 +60,10 @@ def request(self, method, path, headers=None, do_not_raise=None, **kwargs): session.mount("http://", HTTPAdapter(max_retries=self.retries)) session.mount("https://", HTTPAdapter(max_retries=self.retries)) - _headers = {"Authorization": f"Bearer {self.token}"} + _headers = { + "Authorization": f"Bearer {self.token}", + "User-Agent": f"mvg/{self.mvg_version}", + } if headers: _headers.update(headers) diff --git a/mvg/mvg.py b/mvg/mvg.py index b7d9f896..bb647cb2 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -63,8 +63,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.14.10") - self.tested_api_version = self.parse_version("v0.9.3") + self.mvg_version = self.parse_version("v0.14.11") + self.tested_api_version = self.parse_version("v0.9.7") # Get API version try: @@ -106,7 +106,7 @@ def _request( ------- Response from the API call """ - client = HTTPClient(self.endpoint, self.token, retries) + client = HTTPClient(self.endpoint, self.token, self.mvg_version, retries) response = client.request( method=method, path=path, do_not_raise=do_not_raise, **kwargs ) From 724549a6c430d128c2226f30931e47f2ee38c5f7 Mon Sep 17 00:00:00 2001 From: Raman R Date: Tue, 18 Jul 2023 11:22:16 +0200 Subject: [PATCH 87/90] Removed RMS feature. (#220) * Removed RMS example. Replaced old RMS mentions with KPIDemo. * Bump package version --------- Co-authored-by: Vishnu Nadhan --- analysis_classes_examples/rms.py | 36 ------------------- .../content/examples/6-analysis_visual.ipynb | 22 ++++++------ .../content/features/plotSupport/rmsplot.R | 2 +- mvg/mvg.py | 2 +- 4 files changed, 13 insertions(+), 49 deletions(-) delete mode 100644 analysis_classes_examples/rms.py diff --git a/analysis_classes_examples/rms.py b/analysis_classes_examples/rms.py deleted file mode 100644 index 76bd41cd..00000000 --- a/analysis_classes_examples/rms.py +++ /dev/null @@ -1,36 +0,0 @@ -# This example requires sources to be uploaded to -# the server side - -import os - -from mvg import MVG -from mvg import analysis_classes - -# for using RERUN=False -# a request_id for the feature needs to exist -RERUN = True - -# replace token and server with your url/token -ENDPOINT = os.environ["SERVER_URL"] -TOKEN = os.environ["SERVER_TOKEN"] - -ses = MVG(ENDPOINT, TOKEN) - -# replace with your source -SOURCE_ID = "u0001" - -if RERUN: - RMS = ses.request_analysis(SOURCE_ID, "RMS") - print(f"Waiting for {RMS}") - ses.wait_for_analyses([RMS["request_id"]]) - rms_res = ses.get_analysis_results(RMS["request_id"]) -else: - REQ_ID = "2f6dc5ae055f9e82f6f5311c23250f07" # replace with valid ID - rms_res = ses.get_analysis_results(REQ_ID) -print(rms_res) - - -rms = analysis_classes.RMS(rms_res, t_zone="Europe/Stockholm", t_unit="s") -rms.plot() -rms.summary() -print("Bye") diff --git a/docs/source/content/examples/6-analysis_visual.ipynb b/docs/source/content/examples/6-analysis_visual.ipynb index 9cef45d1..79174b88 100644 --- a/docs/source/content/examples/6-analysis_visual.ipynb +++ b/docs/source/content/examples/6-analysis_visual.ipynb @@ -399,7 +399,7 @@ } }, "source": [ - "The similar procedure is repeated to request the \"RMS\" and \"ModeId\" for our source \"u0005\"." + "The similar procedure is repeated to request the \"KPIDemo\" and \"ModeId\" for our source \"u0005\"." ] }, { @@ -545,9 +545,9 @@ } ], "source": [ - "REQUEST_IDS_RMS = [session.list_analyses(SOURCE_IDS[0], \"KPIDemo\")[-1], session.list_analyses(SOURCE_IDS[1], \"KPIDemo\")[-1]]\n", - "print(f\"The KPI analysis of {SOURCE_IDS[0]} has request_id {REQUEST_IDS_RMS[0]}.\")\n", - "print(f\"The KPI analysis of {SOURCE_IDS[1]} has request_id {REQUEST_IDS_RMS[1]}.\")\n", + "REQUEST_IDS_KPI = [session.list_analyses(SOURCE_IDS[0], \"KPIDemo\")[-1], session.list_analyses(SOURCE_IDS[1], \"KPIDemo\")[-1]]\n", + "print(f\"The KPI analysis of {SOURCE_IDS[0]} has request_id {REQUEST_IDS_KPI[0]}.\")\n", + "print(f\"The KPI analysis of {SOURCE_IDS[1]} has request_id {REQUEST_IDS_KPI[1]}.\")\n", "REQUEST_IDS_MODEID = [session.list_analyses(SOURCE_IDS[0], \"ModeId\")[-1], session.list_analyses(SOURCE_IDS[1], \"ModeId\")[-1]]\n", "print(f\"The ModeId analysis of {SOURCE_IDS[0]} has request_id {REQUEST_IDS_MODEID[0]}.\")\n", "print(f\"The ModeId analysis of {SOURCE_IDS[1]} has request_id {REQUEST_IDS_MODEID[1]}.\")" @@ -827,7 +827,7 @@ "Each of these dictionaries contains the mode probabilities as it was identified for each mode.\n", "\n", "We pass all the lists to a dataframe for ease of manipulation.\n", - "Similarly to the RMS feature, we will show how to access the dictionary results information and convert it into a Pandas dataframe.\n", + "Similarly to the KPIDemo feature, we will show how to access the dictionary results information and convert it into a Pandas dataframe.\n", "Please check the [\"Analysis Classes\"](5-analysis_classes.ipynb) example for directly getting a results Pandas dataframe.\n", "In addition, the \"timestamp\" column is converted to a timestamp object in a column called \"Date\"." ] @@ -1037,7 +1037,7 @@ } }, "source": [ - "For the purpose of demonstration of our visualization functions, we will merge the dataframes of the \"RMS\" results and the \"ModeId\" results into a single dataframe." + "For the purpose of demonstration of our visualization functions, we will merge the dataframes of the \"KPIDemo\" results and the \"ModeId\" results into a single dataframe." ] }, { @@ -1372,10 +1372,10 @@ } ], "source": [ - "#RMS\n", - "df_rms5 = pd.DataFrame(kpi_output5[\"results\"][\"acc\"])\n", - "df_rms5[\"timestamps\"] = kpi_output5[\"results\"]['timestamps']\n", - "df_rms5['Date'] = pd.to_datetime(df_rms5['timestamps'], unit=\"s\")\n", + "#KPI\n", + "df_kpi5 = pd.DataFrame(kpi_output5[\"results\"][\"acc\"])\n", + "df_kpi5[\"timestamps\"] = kpi_output5[\"results\"]['timestamps']\n", + "df_kpi5['Date'] = pd.to_datetime(df_kpi5['timestamps'], unit=\"s\")\n", "#MODE_ID (full)\n", "mode_all5 = mode_output5[\"results\"].copy()\n", "mode_probabilities5 = mode_all5.pop(\"mode_probabilities\")\n", @@ -1383,7 +1383,7 @@ "df_mode5 = pd.DataFrame(mode_all5)\n", "df_mode5['Date'] = pd.to_datetime(df_mode5['timestamps'], unit=\"s\")\n", "#Merging dataframes\n", - "df_u0005 = pd.merge_asof(df_rms5, df_mode5, on=\"timestamps\", by=\"Date\")\n", + "df_u0005 = pd.merge_asof(df_kpi5, df_mode5, on=\"timestamps\", by=\"Date\")\n", "df_u0005.head()" ] }, diff --git a/docs/source/content/features/plotSupport/rmsplot.R b/docs/source/content/features/plotSupport/rmsplot.R index 6aa33df6..fb2865c3 100644 --- a/docs/source/content/features/plotSupport/rmsplot.R +++ b/docs/source/content/features/plotSupport/rmsplot.R @@ -1,4 +1,4 @@ -## Publication quality plot for RMS documentTION +## Publication quality plot for RMS documentation ## Data from VA-Charlie ## assuming wd to be in plotSupport diff --git a/mvg/mvg.py b/mvg/mvg.py index bb647cb2..afd9b4f7 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -63,7 +63,7 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.14.11") + self.mvg_version = self.parse_version("v0.14.12") self.tested_api_version = self.parse_version("v0.9.7") # Get API version From 81a90c8d10f03be14a5889ba590595cb5be85d00 Mon Sep 17 00:00:00 2001 From: Pavel Rabetski Date: Mon, 14 Aug 2023 08:46:08 +0200 Subject: [PATCH 88/90] Use required meta for sources (#221) * Use required meta for sources * Fix black * Fix versioning * Add documentation for mvg.add_source --- mvg/mvg.py | 14 ++++++++-- tests/conftest.py | 23 +++++++++++----- tests/test_api_analyses.py | 2 +- tests/test_api_sources.py | 29 +++++++++++--------- tests/test_data/mini_charlie/u0001/meta.json | 9 +++++- 5 files changed, 52 insertions(+), 25 deletions(-) diff --git a/mvg/mvg.py b/mvg/mvg.py index afd9b4f7..9932fb42 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -63,8 +63,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.14.12") - self.tested_api_version = self.parse_version("v0.9.7") + self.mvg_version = self.parse_version("v0.14.13") + self.tested_api_version = self.parse_version("v0.9.14") # Get API version try: @@ -260,7 +260,15 @@ def create_source( Cannot be updated after creating source. meta : dict - Meta information of source [optional]. + Meta information of source. Note that tabular source requires + "location" and "assetName" in metadata, while spectrum and waveform + need "location", "assetName", "sensorName" and "measurementName" e.g: + { + "location": "Factory x", + "assetName": "Water pump 13", + "sensorName": "NDE H", + "measurementName": "8k_Acc_1200000" + } exist_ok : bool Set to true to prevent exceptions for 409 Conflict errors diff --git a/tests/conftest.py b/tests/conftest.py index fac2a7dc..39c541c4 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -207,9 +207,14 @@ def waveform_source_multiaxial_fixture_creator(source_id, pattern): def fixture(session): try: timestamps, data, _ = stub_multiaxial_data(pattern=pattern) - session.create_source( - source_id, meta={"type": "pump"}, channels=list(pattern.keys()) - ) + meta = { + "type": "pump", + "location": "cancun", + "assetName": "motor_x", + "sensorName": "2CA", + "measurementName": "8k_Acc_1200000", + } + session.create_source(source_id, meta=meta, channels=list(pattern.keys())) upload_measurements(session, source_id, data) yield source_id, {"timestamps": timestamps, "pattern": pattern} finally: @@ -233,7 +238,11 @@ def fixture(session: MVG): sid = generate_random_source_id() channels = make_channel_names(n_channels=n_channels) - source_info = {"sid": sid, "channels": channels, "meta": {}} + m_file_name = pytest.REF_DB_PATH / "u0001" / "meta.json" + with open(m_file_name, "r") as json_file: + meta = json.load(json_file) + + source_info = {"sid": sid, "channels": channels, "meta": meta} session.create_spectrum_source(**source_info) timestamps = [] measurements = [] @@ -280,15 +289,15 @@ def tabular_source(session): pytest.REF_DB_PATH.parent / "tabular_data.csv", float_precision="round_trip" ) columns = tabular_df.columns.tolist() - meta = {"extra": "information"} + meta = {"location": "gbg", "assetName": "motor_1", "extra": "information"} session.create_tabular_source(source_id, columns=columns, meta=meta) - yield source_id, tabular_df.to_dict("list") + yield source_id, tabular_df.to_dict("list"), meta finally: session.delete_source(source_id) @pytest.fixture() def tabular_source_with_measurements(session, tabular_source): - source_id, tabular_dict = tabular_source + source_id, tabular_dict, _ = tabular_source session.create_tabular_measurement(source_id, tabular_dict) yield tabular_source diff --git a/tests/test_api_analyses.py b/tests/test_api_analyses.py index ddfb78f0..f1afc517 100644 --- a/tests/test_api_analyses.py +++ b/tests/test_api_analyses.py @@ -116,7 +116,7 @@ def test_callback_server_failure( def test_modeid_analysis_selected_columns(session, tabular_source_with_measurements): - source_id, tabular_dict = tabular_source_with_measurements + source_id, tabular_dict, _ = tabular_source_with_measurements columns = list(tabular_dict.keys()) def assert_results(selected_columns): diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index 1fb51eab..91d0cd4b 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -227,7 +227,11 @@ def test_sources_cru_existing(session): def test_get_source_spectrum_source(session: MVG): source_id = generate_random_source_id() channels = make_channel_names(n_channels=1) - meta = {"asset_id": "pump"} + + m_file_name = pytest.REF_DB_PATH / "u0001" / "meta.json" + with open(m_file_name, "r") as json_file: + meta = json.load(json_file) + meta["extra"] = "pump" try: session.create_spectrum_source(source_id, channels=channels, meta=meta) @@ -319,9 +323,8 @@ def test_create_spectrum_measurement_ignore_409( def test_tabular_sources(session, tabular_source): - source_id, tabular_dict = tabular_source + source_id, tabular_dict, meta = tabular_source columns = list(tabular_dict.keys()) - meta = {"extra": "information"} # create source again (409 not ignored) with pytest.raises(MVGAPIError) as exc: @@ -340,7 +343,7 @@ def test_tabular_sources(session, tabular_source): def test_tabular_measurements_float_timestamps(session, tabular_source): with pytest.raises(MVGAPIError) as exc: - source_id, tabular_dict = tabular_source + source_id, tabular_dict, _ = tabular_source tabular_dict_float = tabular_dict.copy() tabular_dict_float["timestamp"] = [ts + 0.1 for ts in tabular_dict["timestamp"]] session.create_tabular_measurement(source_id, tabular_dict_float) @@ -348,7 +351,7 @@ def test_tabular_measurements_float_timestamps(session, tabular_source): def test_tabular_measurements(session, tabular_source): - source_id, tabular_dict = tabular_source + source_id, tabular_dict, _ = tabular_source columns = list(tabular_dict.keys()) columns.remove("timestamp") tabular_df = pd.DataFrame(tabular_dict) @@ -384,7 +387,7 @@ def test_tabular_measurements(session, tabular_source): def test_list_tabular_measurements(session, tabular_source): - source_id, tabular_dict = tabular_source + source_id, tabular_dict, _ = tabular_source columns = list(tabular_dict.keys()) ts_0 = tabular_dict["timestamp"][0] @@ -432,7 +435,7 @@ def test_list_tabular_measurements(session, tabular_source): def test_list_tabular_downsampled_measurements( session, tabular_source_with_measurements ): - source_id, tabular_dict = tabular_source_with_measurements + source_id, tabular_dict, _ = tabular_source_with_measurements # Unsuccessful call to API using a negative threshold with pytest.raises(MVGAPIError) as exc: @@ -473,7 +476,7 @@ def test_list_tabular_downsampled_measurements( def test_create_label(session, tabular_source_with_measurements): - source_id, tabular_dict = tabular_source_with_measurements + source_id, tabular_dict, _ = tabular_source_with_measurements timestamps = tabular_dict["timestamp"] label1 = {"label": "normal", "severity": 0, "notes": ""} label2 = {"label": "failure", "severity": 100, "notes": "This is really bad!"} @@ -511,7 +514,7 @@ def test_create_label(session, tabular_source_with_measurements): def test_update_label(session, tabular_source_with_measurements): - source_id, tabular_dict = tabular_source_with_measurements + source_id, tabular_dict, _ = tabular_source_with_measurements timestamps = tabular_dict["timestamp"] label_pre = {"label": "failure", "severity": 100, "notes": "This is really bad!"} session.create_label(source_id, timestamps[0], **label_pre) @@ -530,7 +533,7 @@ def test_update_label(session, tabular_source_with_measurements): def test_delete_label(session, tabular_source_with_measurements): - source_id, tabular_dict = tabular_source_with_measurements + source_id, tabular_dict, _ = tabular_source_with_measurements timestamps = tabular_dict["timestamp"] session.create_label( source_id, @@ -547,7 +550,7 @@ def test_delete_label(session, tabular_source_with_measurements): def test_list_labels(session, tabular_source_with_measurements): - source_id, tabular_dict = tabular_source_with_measurements + source_id, tabular_dict, _ = tabular_source_with_measurements timestamps = tabular_dict["timestamp"] for k in [0, -1]: session.create_label( @@ -575,7 +578,7 @@ def test_list_labels(session, tabular_source_with_measurements): def test_pagination(session, tabular_source_with_measurements): - sid, tabular_dict = tabular_source_with_measurements + sid, tabular_dict, _ = tabular_source_with_measurements timestamps = tabular_dict["timestamp"] num_meas = len(timestamps) @@ -628,7 +631,7 @@ def test_pagination_limits(session, tabular_source_with_measurements): # limits. This test enhances the fixtures beyond the pagination limits to # run tests - sid, tabular_dict = tabular_source_with_measurements + sid, tabular_dict, _ = tabular_source_with_measurements end_timestamp = tabular_dict["timestamp"][-1] num_meas = len(tabular_dict["timestamp"]) diff --git a/tests/test_data/mini_charlie/u0001/meta.json b/tests/test_data/mini_charlie/u0001/meta.json index 1a24f0f7..ef678c44 100644 --- a/tests/test_data/mini_charlie/u0001/meta.json +++ b/tests/test_data/mini_charlie/u0001/meta.json @@ -1 +1,8 @@ -{"assetId": "assetJ", "measPoint": "mloc01", "location": "cancun"} \ No newline at end of file +{ + "assetId": "assetJ", + "measPoint": "mloc01", + "location": "cancun", + "assetName": "motor_x", + "sensorName": "2CA", + "measurementName": "8k_Acc_1200000" +} \ No newline at end of file From aa248312a67fb66275d86c0fa54ddaed18f623b6 Mon Sep 17 00:00:00 2001 From: Pavel Rabetski Date: Mon, 21 Aug 2023 15:28:18 +0200 Subject: [PATCH 89/90] Use timestamp in millis (#222) * Use timestamp in millis * Fix black --- tests/helpers.py | 3 +- tests/test_api_sources.py | 2 +- .../{1570186860.csv => 1570186860000.csv} | 0 .../{1570186860.json => 1570186860000.json} | 0 .../{1570273260.csv => 1570273260000.csv} | 0 .../{1570273260.json => 1570273260000.json} | 0 .../{1570359660.csv => 1570359660000.csv} | 0 .../{1570359660.json => 1570359660000.json} | 0 .../{1570446060.csv => 1570446060000.csv} | 0 .../{1570446060.json => 1570446060000.json} | 0 .../{1570532460.csv => 1570532460000.csv} | 0 .../{1570532460.json => 1570532460000.json} | 0 .../{1570618860.csv => 1570618860000.csv} | 0 .../{1570618860.json => 1570618860000.json} | 0 .../{1570705260.csv => 1570705260000.csv} | 0 .../{1570705260.json => 1570705260000.json} | 0 .../{1570791660.csv => 1570791660000.csv} | 0 .../{1570791660.json => 1570791660000.json} | 0 .../{1570878060.csv => 1570878060000.csv} | 0 .../{1570878060.json => 1570878060000.json} | 0 .../{1570964460.csv => 1570964460000.csv} | 0 .../{1570964460.json => 1570964460000.json} | 0 .../{1571050860.csv => 1571050860000.csv} | 0 .../{1571050860.json => 1571050860000.json} | 0 .../{1571137260.csv => 1571137260000.csv} | 0 .../{1571137260.json => 1571137260000.json} | 0 .../{1571223660.csv => 1571223660000.csv} | 0 .../{1571223660.json => 1571223660000.json} | 0 .../{1571310060.csv => 1571310060000.csv} | 0 .../{1571310060.json => 1571310060000.json} | 0 .../{1571396460.csv => 1571396460000.csv} | 0 .../{1571396460.json => 1571396460000.json} | 0 .../{1571482860.csv => 1571482860000.csv} | 0 .../{1571482860.json => 1571482860000.json} | 0 .../{1571828460.csv => 1571828460000.csv} | 0 .../{1571828460.json => 1571828460000.json} | 0 .../{1571914860.csv => 1571914860000.csv} | 0 .../{1571914860.json => 1571914860000.json} | 0 .../{1572001260.csv => 1572001260000.csv} | 0 .../{1572001260.json => 1572001260000.json} | 0 .../{1572087660.csv => 1572087660000.csv} | 0 .../{1572087660.json => 1572087660000.json} | 0 .../{1572177660.csv => 1572177660000.csv} | 0 .../{1572177660.json => 1572177660000.json} | 0 .../{1572264060.csv => 1572264060000.csv} | 0 .../{1572264060.json => 1572264060000.json} | 0 .../{1572350460.csv => 1572350460000.csv} | 0 .../{1572350460.json => 1572350460000.json} | 0 .../{1572436860.csv => 1572436860000.csv} | 0 .../{1572436860.json => 1572436860000.json} | 0 .../{1572523260.csv => 1572523260000.csv} | 0 .../{1572523260.json => 1572523260000.json} | 0 .../{1572609660.csv => 1572609660000.csv} | 0 .../{1572609660.json => 1572609660000.json} | 0 .../{1572696060.csv => 1572696060000.csv} | 0 .../{1572696060.json => 1572696060000.json} | 0 .../{1572782460.csv => 1572782460000.csv} | 0 .../{1572782460.json => 1572782460000.json} | 0 .../{1572868860.csv => 1572868860000.csv} | 0 .../{1572868860.json => 1572868860000.json} | 0 .../{1572955260.csv => 1572955260000.csv} | 0 .../{1572955260.json => 1572955260000.json} | 0 .../{1573041660.csv => 1573041660000.csv} | 0 .../{1573041660.json => 1573041660000.json} | 0 .../{1573128060.csv => 1573128060000.csv} | 0 .../{1573128060.json => 1573128060000.json} | 0 .../{1573214460.csv => 1573214460000.csv} | 0 .../{1573214460.json => 1573214460000.json} | 0 .../{1573300860.csv => 1573300860000.csv} | 0 .../{1573300860.json => 1573300860000.json} | 0 .../{1573387260.csv => 1573387260000.csv} | 0 .../{1573387260.json => 1573387260000.json} | 0 .../{1573473660.csv => 1573473660000.csv} | 0 .../{1573473660.json => 1573473660000.json} | 0 .../{1573560060.csv => 1573560060000.csv} | 0 .../{1573560060.json => 1573560060000.json} | 0 .../{1573646460.csv => 1573646460000.csv} | 0 .../{1573646460.json => 1573646460000.json} | 0 .../{1573732860.csv => 1573732860000.csv} | 0 .../{1573732860.json => 1573732860000.json} | 0 .../{1573819260.csv => 1573819260000.csv} | 0 .../{1573819260.json => 1573819260000.json} | 0 .../{1573905660.csv => 1573905660000.csv} | 0 .../{1573905660.json => 1573905660000.json} | 0 .../{1573992060.csv => 1573992060000.csv} | 0 .../{1573992060.json => 1573992060000.json} | 0 .../{1574078460.csv => 1574078460000.csv} | 0 .../{1574078460.json => 1574078460000.json} | 0 .../{1574164860.csv => 1574164860000.csv} | 0 .../{1574164860.json => 1574164860000.json} | 0 .../{1574251260.csv => 1574251260000.csv} | 0 .../{1574251260.json => 1574251260000.json} | 0 .../{1574337660.csv => 1574337660000.csv} | 0 .../{1574337660.json => 1574337660000.json} | 0 .../{1574424060.csv => 1574424060000.csv} | 0 .../{1574424060.json => 1574424060000.json} | 0 tests/test_data/tabular_data.csv | 318 +++++++++--------- 97 files changed, 162 insertions(+), 161 deletions(-) rename tests/test_data/mini_charlie/u0001/{1570186860.csv => 1570186860000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1570186860.json => 1570186860000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1570273260.csv => 1570273260000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1570273260.json => 1570273260000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1570359660.csv => 1570359660000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1570359660.json => 1570359660000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1570446060.csv => 1570446060000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1570446060.json => 1570446060000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1570532460.csv => 1570532460000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1570532460.json => 1570532460000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1570618860.csv => 1570618860000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1570618860.json => 1570618860000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1570705260.csv => 1570705260000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1570705260.json => 1570705260000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1570791660.csv => 1570791660000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1570791660.json => 1570791660000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1570878060.csv => 1570878060000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1570878060.json => 1570878060000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1570964460.csv => 1570964460000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1570964460.json => 1570964460000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1571050860.csv => 1571050860000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1571050860.json => 1571050860000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1571137260.csv => 1571137260000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1571137260.json => 1571137260000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1571223660.csv => 1571223660000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1571223660.json => 1571223660000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1571310060.csv => 1571310060000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1571310060.json => 1571310060000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1571396460.csv => 1571396460000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1571396460.json => 1571396460000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1571482860.csv => 1571482860000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1571482860.json => 1571482860000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1571828460.csv => 1571828460000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1571828460.json => 1571828460000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1571914860.csv => 1571914860000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1571914860.json => 1571914860000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1572001260.csv => 1572001260000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1572001260.json => 1572001260000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1572087660.csv => 1572087660000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1572087660.json => 1572087660000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1572177660.csv => 1572177660000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1572177660.json => 1572177660000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1572264060.csv => 1572264060000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1572264060.json => 1572264060000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1572350460.csv => 1572350460000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1572350460.json => 1572350460000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1572436860.csv => 1572436860000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1572436860.json => 1572436860000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1572523260.csv => 1572523260000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1572523260.json => 1572523260000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1572609660.csv => 1572609660000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1572609660.json => 1572609660000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1572696060.csv => 1572696060000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1572696060.json => 1572696060000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1572782460.csv => 1572782460000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1572782460.json => 1572782460000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1572868860.csv => 1572868860000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1572868860.json => 1572868860000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1572955260.csv => 1572955260000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1572955260.json => 1572955260000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1573041660.csv => 1573041660000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1573041660.json => 1573041660000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1573128060.csv => 1573128060000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1573128060.json => 1573128060000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1573214460.csv => 1573214460000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1573214460.json => 1573214460000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1573300860.csv => 1573300860000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1573300860.json => 1573300860000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1573387260.csv => 1573387260000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1573387260.json => 1573387260000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1573473660.csv => 1573473660000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1573473660.json => 1573473660000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1573560060.csv => 1573560060000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1573560060.json => 1573560060000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1573646460.csv => 1573646460000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1573646460.json => 1573646460000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1573732860.csv => 1573732860000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1573732860.json => 1573732860000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1573819260.csv => 1573819260000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1573819260.json => 1573819260000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1573905660.csv => 1573905660000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1573905660.json => 1573905660000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1573992060.csv => 1573992060000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1573992060.json => 1573992060000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1574078460.csv => 1574078460000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1574078460.json => 1574078460000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1574164860.csv => 1574164860000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1574164860.json => 1574164860000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1574251260.csv => 1574251260000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1574251260.json => 1574251260000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1574337660.csv => 1574337660000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1574337660.json => 1574337660000.json} (100%) rename tests/test_data/mini_charlie/u0001/{1574424060.csv => 1574424060000.csv} (100%) rename tests/test_data/mini_charlie/u0001/{1574424060.json => 1574424060000.json} (100%) diff --git a/tests/helpers.py b/tests/helpers.py index 865a7483..34f97019 100644 --- a/tests/helpers.py +++ b/tests/helpers.py @@ -84,7 +84,8 @@ def stub_multiaxial_data(samp_freq=3000, duration=3.0, pattern={}): n_meas = len(list(pattern.values())[0]) assert all(len(p) == n_meas for p in pattern.values()) - timestamps = [k * 3600 * 1000 for k in range(n_meas)] + start_ts = 1577833200000 # millis sicne epoch for 2020-01-01 + timestamps = [start_ts + k * 3600 * 1000 for k in range(n_meas)] n_samples = int(samp_freq * duration) T = np.linspace(0.0, duration, n_samples + 1) f_peak = 300.0 diff --git a/tests/test_api_sources.py b/tests/test_api_sources.py index 91d0cd4b..052b2728 100644 --- a/tests/test_api_sources.py +++ b/tests/test_api_sources.py @@ -564,7 +564,7 @@ def test_list_labels(session, tabular_source_with_measurements): list_short = session.list_labels(source_id, include_unlabeled=False) list_short.pop("label_timestamp") assert list_short == { - "timestamp": [43854, 44080], + "timestamp": [946684843854, 946684844080], "label": ["failure", "failure"], "severity": [100, 100], "notes": ["This is really bad!", "This is really bad!"], diff --git a/tests/test_data/mini_charlie/u0001/1570186860.csv b/tests/test_data/mini_charlie/u0001/1570186860000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570186860.csv rename to tests/test_data/mini_charlie/u0001/1570186860000.csv diff --git a/tests/test_data/mini_charlie/u0001/1570186860.json b/tests/test_data/mini_charlie/u0001/1570186860000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570186860.json rename to tests/test_data/mini_charlie/u0001/1570186860000.json diff --git a/tests/test_data/mini_charlie/u0001/1570273260.csv b/tests/test_data/mini_charlie/u0001/1570273260000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570273260.csv rename to tests/test_data/mini_charlie/u0001/1570273260000.csv diff --git a/tests/test_data/mini_charlie/u0001/1570273260.json b/tests/test_data/mini_charlie/u0001/1570273260000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570273260.json rename to tests/test_data/mini_charlie/u0001/1570273260000.json diff --git a/tests/test_data/mini_charlie/u0001/1570359660.csv b/tests/test_data/mini_charlie/u0001/1570359660000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570359660.csv rename to tests/test_data/mini_charlie/u0001/1570359660000.csv diff --git a/tests/test_data/mini_charlie/u0001/1570359660.json b/tests/test_data/mini_charlie/u0001/1570359660000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570359660.json rename to tests/test_data/mini_charlie/u0001/1570359660000.json diff --git a/tests/test_data/mini_charlie/u0001/1570446060.csv b/tests/test_data/mini_charlie/u0001/1570446060000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570446060.csv rename to tests/test_data/mini_charlie/u0001/1570446060000.csv diff --git a/tests/test_data/mini_charlie/u0001/1570446060.json b/tests/test_data/mini_charlie/u0001/1570446060000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570446060.json rename to tests/test_data/mini_charlie/u0001/1570446060000.json diff --git a/tests/test_data/mini_charlie/u0001/1570532460.csv b/tests/test_data/mini_charlie/u0001/1570532460000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570532460.csv rename to tests/test_data/mini_charlie/u0001/1570532460000.csv diff --git a/tests/test_data/mini_charlie/u0001/1570532460.json b/tests/test_data/mini_charlie/u0001/1570532460000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570532460.json rename to tests/test_data/mini_charlie/u0001/1570532460000.json diff --git a/tests/test_data/mini_charlie/u0001/1570618860.csv b/tests/test_data/mini_charlie/u0001/1570618860000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570618860.csv rename to tests/test_data/mini_charlie/u0001/1570618860000.csv diff --git a/tests/test_data/mini_charlie/u0001/1570618860.json b/tests/test_data/mini_charlie/u0001/1570618860000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570618860.json rename to tests/test_data/mini_charlie/u0001/1570618860000.json diff --git a/tests/test_data/mini_charlie/u0001/1570705260.csv b/tests/test_data/mini_charlie/u0001/1570705260000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570705260.csv rename to tests/test_data/mini_charlie/u0001/1570705260000.csv diff --git a/tests/test_data/mini_charlie/u0001/1570705260.json b/tests/test_data/mini_charlie/u0001/1570705260000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570705260.json rename to tests/test_data/mini_charlie/u0001/1570705260000.json diff --git a/tests/test_data/mini_charlie/u0001/1570791660.csv b/tests/test_data/mini_charlie/u0001/1570791660000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570791660.csv rename to tests/test_data/mini_charlie/u0001/1570791660000.csv diff --git a/tests/test_data/mini_charlie/u0001/1570791660.json b/tests/test_data/mini_charlie/u0001/1570791660000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570791660.json rename to tests/test_data/mini_charlie/u0001/1570791660000.json diff --git a/tests/test_data/mini_charlie/u0001/1570878060.csv b/tests/test_data/mini_charlie/u0001/1570878060000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570878060.csv rename to tests/test_data/mini_charlie/u0001/1570878060000.csv diff --git a/tests/test_data/mini_charlie/u0001/1570878060.json b/tests/test_data/mini_charlie/u0001/1570878060000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570878060.json rename to tests/test_data/mini_charlie/u0001/1570878060000.json diff --git a/tests/test_data/mini_charlie/u0001/1570964460.csv b/tests/test_data/mini_charlie/u0001/1570964460000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570964460.csv rename to tests/test_data/mini_charlie/u0001/1570964460000.csv diff --git a/tests/test_data/mini_charlie/u0001/1570964460.json b/tests/test_data/mini_charlie/u0001/1570964460000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1570964460.json rename to tests/test_data/mini_charlie/u0001/1570964460000.json diff --git a/tests/test_data/mini_charlie/u0001/1571050860.csv b/tests/test_data/mini_charlie/u0001/1571050860000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571050860.csv rename to tests/test_data/mini_charlie/u0001/1571050860000.csv diff --git a/tests/test_data/mini_charlie/u0001/1571050860.json b/tests/test_data/mini_charlie/u0001/1571050860000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571050860.json rename to tests/test_data/mini_charlie/u0001/1571050860000.json diff --git a/tests/test_data/mini_charlie/u0001/1571137260.csv b/tests/test_data/mini_charlie/u0001/1571137260000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571137260.csv rename to tests/test_data/mini_charlie/u0001/1571137260000.csv diff --git a/tests/test_data/mini_charlie/u0001/1571137260.json b/tests/test_data/mini_charlie/u0001/1571137260000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571137260.json rename to tests/test_data/mini_charlie/u0001/1571137260000.json diff --git a/tests/test_data/mini_charlie/u0001/1571223660.csv b/tests/test_data/mini_charlie/u0001/1571223660000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571223660.csv rename to tests/test_data/mini_charlie/u0001/1571223660000.csv diff --git a/tests/test_data/mini_charlie/u0001/1571223660.json b/tests/test_data/mini_charlie/u0001/1571223660000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571223660.json rename to tests/test_data/mini_charlie/u0001/1571223660000.json diff --git a/tests/test_data/mini_charlie/u0001/1571310060.csv b/tests/test_data/mini_charlie/u0001/1571310060000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571310060.csv rename to tests/test_data/mini_charlie/u0001/1571310060000.csv diff --git a/tests/test_data/mini_charlie/u0001/1571310060.json b/tests/test_data/mini_charlie/u0001/1571310060000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571310060.json rename to tests/test_data/mini_charlie/u0001/1571310060000.json diff --git a/tests/test_data/mini_charlie/u0001/1571396460.csv b/tests/test_data/mini_charlie/u0001/1571396460000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571396460.csv rename to tests/test_data/mini_charlie/u0001/1571396460000.csv diff --git a/tests/test_data/mini_charlie/u0001/1571396460.json b/tests/test_data/mini_charlie/u0001/1571396460000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571396460.json rename to tests/test_data/mini_charlie/u0001/1571396460000.json diff --git a/tests/test_data/mini_charlie/u0001/1571482860.csv b/tests/test_data/mini_charlie/u0001/1571482860000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571482860.csv rename to tests/test_data/mini_charlie/u0001/1571482860000.csv diff --git a/tests/test_data/mini_charlie/u0001/1571482860.json b/tests/test_data/mini_charlie/u0001/1571482860000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571482860.json rename to tests/test_data/mini_charlie/u0001/1571482860000.json diff --git a/tests/test_data/mini_charlie/u0001/1571828460.csv b/tests/test_data/mini_charlie/u0001/1571828460000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571828460.csv rename to tests/test_data/mini_charlie/u0001/1571828460000.csv diff --git a/tests/test_data/mini_charlie/u0001/1571828460.json b/tests/test_data/mini_charlie/u0001/1571828460000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571828460.json rename to tests/test_data/mini_charlie/u0001/1571828460000.json diff --git a/tests/test_data/mini_charlie/u0001/1571914860.csv b/tests/test_data/mini_charlie/u0001/1571914860000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571914860.csv rename to tests/test_data/mini_charlie/u0001/1571914860000.csv diff --git a/tests/test_data/mini_charlie/u0001/1571914860.json b/tests/test_data/mini_charlie/u0001/1571914860000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1571914860.json rename to tests/test_data/mini_charlie/u0001/1571914860000.json diff --git a/tests/test_data/mini_charlie/u0001/1572001260.csv b/tests/test_data/mini_charlie/u0001/1572001260000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572001260.csv rename to tests/test_data/mini_charlie/u0001/1572001260000.csv diff --git a/tests/test_data/mini_charlie/u0001/1572001260.json b/tests/test_data/mini_charlie/u0001/1572001260000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572001260.json rename to tests/test_data/mini_charlie/u0001/1572001260000.json diff --git a/tests/test_data/mini_charlie/u0001/1572087660.csv b/tests/test_data/mini_charlie/u0001/1572087660000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572087660.csv rename to tests/test_data/mini_charlie/u0001/1572087660000.csv diff --git a/tests/test_data/mini_charlie/u0001/1572087660.json b/tests/test_data/mini_charlie/u0001/1572087660000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572087660.json rename to tests/test_data/mini_charlie/u0001/1572087660000.json diff --git a/tests/test_data/mini_charlie/u0001/1572177660.csv b/tests/test_data/mini_charlie/u0001/1572177660000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572177660.csv rename to tests/test_data/mini_charlie/u0001/1572177660000.csv diff --git a/tests/test_data/mini_charlie/u0001/1572177660.json b/tests/test_data/mini_charlie/u0001/1572177660000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572177660.json rename to tests/test_data/mini_charlie/u0001/1572177660000.json diff --git a/tests/test_data/mini_charlie/u0001/1572264060.csv b/tests/test_data/mini_charlie/u0001/1572264060000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572264060.csv rename to tests/test_data/mini_charlie/u0001/1572264060000.csv diff --git a/tests/test_data/mini_charlie/u0001/1572264060.json b/tests/test_data/mini_charlie/u0001/1572264060000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572264060.json rename to tests/test_data/mini_charlie/u0001/1572264060000.json diff --git a/tests/test_data/mini_charlie/u0001/1572350460.csv b/tests/test_data/mini_charlie/u0001/1572350460000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572350460.csv rename to tests/test_data/mini_charlie/u0001/1572350460000.csv diff --git a/tests/test_data/mini_charlie/u0001/1572350460.json b/tests/test_data/mini_charlie/u0001/1572350460000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572350460.json rename to tests/test_data/mini_charlie/u0001/1572350460000.json diff --git a/tests/test_data/mini_charlie/u0001/1572436860.csv b/tests/test_data/mini_charlie/u0001/1572436860000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572436860.csv rename to tests/test_data/mini_charlie/u0001/1572436860000.csv diff --git a/tests/test_data/mini_charlie/u0001/1572436860.json b/tests/test_data/mini_charlie/u0001/1572436860000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572436860.json rename to tests/test_data/mini_charlie/u0001/1572436860000.json diff --git a/tests/test_data/mini_charlie/u0001/1572523260.csv b/tests/test_data/mini_charlie/u0001/1572523260000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572523260.csv rename to tests/test_data/mini_charlie/u0001/1572523260000.csv diff --git a/tests/test_data/mini_charlie/u0001/1572523260.json b/tests/test_data/mini_charlie/u0001/1572523260000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572523260.json rename to tests/test_data/mini_charlie/u0001/1572523260000.json diff --git a/tests/test_data/mini_charlie/u0001/1572609660.csv b/tests/test_data/mini_charlie/u0001/1572609660000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572609660.csv rename to tests/test_data/mini_charlie/u0001/1572609660000.csv diff --git a/tests/test_data/mini_charlie/u0001/1572609660.json b/tests/test_data/mini_charlie/u0001/1572609660000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572609660.json rename to tests/test_data/mini_charlie/u0001/1572609660000.json diff --git a/tests/test_data/mini_charlie/u0001/1572696060.csv b/tests/test_data/mini_charlie/u0001/1572696060000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572696060.csv rename to tests/test_data/mini_charlie/u0001/1572696060000.csv diff --git a/tests/test_data/mini_charlie/u0001/1572696060.json b/tests/test_data/mini_charlie/u0001/1572696060000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572696060.json rename to tests/test_data/mini_charlie/u0001/1572696060000.json diff --git a/tests/test_data/mini_charlie/u0001/1572782460.csv b/tests/test_data/mini_charlie/u0001/1572782460000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572782460.csv rename to tests/test_data/mini_charlie/u0001/1572782460000.csv diff --git a/tests/test_data/mini_charlie/u0001/1572782460.json b/tests/test_data/mini_charlie/u0001/1572782460000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572782460.json rename to tests/test_data/mini_charlie/u0001/1572782460000.json diff --git a/tests/test_data/mini_charlie/u0001/1572868860.csv b/tests/test_data/mini_charlie/u0001/1572868860000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572868860.csv rename to tests/test_data/mini_charlie/u0001/1572868860000.csv diff --git a/tests/test_data/mini_charlie/u0001/1572868860.json b/tests/test_data/mini_charlie/u0001/1572868860000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572868860.json rename to tests/test_data/mini_charlie/u0001/1572868860000.json diff --git a/tests/test_data/mini_charlie/u0001/1572955260.csv b/tests/test_data/mini_charlie/u0001/1572955260000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572955260.csv rename to tests/test_data/mini_charlie/u0001/1572955260000.csv diff --git a/tests/test_data/mini_charlie/u0001/1572955260.json b/tests/test_data/mini_charlie/u0001/1572955260000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1572955260.json rename to tests/test_data/mini_charlie/u0001/1572955260000.json diff --git a/tests/test_data/mini_charlie/u0001/1573041660.csv b/tests/test_data/mini_charlie/u0001/1573041660000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573041660.csv rename to tests/test_data/mini_charlie/u0001/1573041660000.csv diff --git a/tests/test_data/mini_charlie/u0001/1573041660.json b/tests/test_data/mini_charlie/u0001/1573041660000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573041660.json rename to tests/test_data/mini_charlie/u0001/1573041660000.json diff --git a/tests/test_data/mini_charlie/u0001/1573128060.csv b/tests/test_data/mini_charlie/u0001/1573128060000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573128060.csv rename to tests/test_data/mini_charlie/u0001/1573128060000.csv diff --git a/tests/test_data/mini_charlie/u0001/1573128060.json b/tests/test_data/mini_charlie/u0001/1573128060000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573128060.json rename to tests/test_data/mini_charlie/u0001/1573128060000.json diff --git a/tests/test_data/mini_charlie/u0001/1573214460.csv b/tests/test_data/mini_charlie/u0001/1573214460000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573214460.csv rename to tests/test_data/mini_charlie/u0001/1573214460000.csv diff --git a/tests/test_data/mini_charlie/u0001/1573214460.json b/tests/test_data/mini_charlie/u0001/1573214460000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573214460.json rename to tests/test_data/mini_charlie/u0001/1573214460000.json diff --git a/tests/test_data/mini_charlie/u0001/1573300860.csv b/tests/test_data/mini_charlie/u0001/1573300860000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573300860.csv rename to tests/test_data/mini_charlie/u0001/1573300860000.csv diff --git a/tests/test_data/mini_charlie/u0001/1573300860.json b/tests/test_data/mini_charlie/u0001/1573300860000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573300860.json rename to tests/test_data/mini_charlie/u0001/1573300860000.json diff --git a/tests/test_data/mini_charlie/u0001/1573387260.csv b/tests/test_data/mini_charlie/u0001/1573387260000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573387260.csv rename to tests/test_data/mini_charlie/u0001/1573387260000.csv diff --git a/tests/test_data/mini_charlie/u0001/1573387260.json b/tests/test_data/mini_charlie/u0001/1573387260000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573387260.json rename to tests/test_data/mini_charlie/u0001/1573387260000.json diff --git a/tests/test_data/mini_charlie/u0001/1573473660.csv b/tests/test_data/mini_charlie/u0001/1573473660000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573473660.csv rename to tests/test_data/mini_charlie/u0001/1573473660000.csv diff --git a/tests/test_data/mini_charlie/u0001/1573473660.json b/tests/test_data/mini_charlie/u0001/1573473660000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573473660.json rename to tests/test_data/mini_charlie/u0001/1573473660000.json diff --git a/tests/test_data/mini_charlie/u0001/1573560060.csv b/tests/test_data/mini_charlie/u0001/1573560060000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573560060.csv rename to tests/test_data/mini_charlie/u0001/1573560060000.csv diff --git a/tests/test_data/mini_charlie/u0001/1573560060.json b/tests/test_data/mini_charlie/u0001/1573560060000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573560060.json rename to tests/test_data/mini_charlie/u0001/1573560060000.json diff --git a/tests/test_data/mini_charlie/u0001/1573646460.csv b/tests/test_data/mini_charlie/u0001/1573646460000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573646460.csv rename to tests/test_data/mini_charlie/u0001/1573646460000.csv diff --git a/tests/test_data/mini_charlie/u0001/1573646460.json b/tests/test_data/mini_charlie/u0001/1573646460000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573646460.json rename to tests/test_data/mini_charlie/u0001/1573646460000.json diff --git a/tests/test_data/mini_charlie/u0001/1573732860.csv b/tests/test_data/mini_charlie/u0001/1573732860000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573732860.csv rename to tests/test_data/mini_charlie/u0001/1573732860000.csv diff --git a/tests/test_data/mini_charlie/u0001/1573732860.json b/tests/test_data/mini_charlie/u0001/1573732860000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573732860.json rename to tests/test_data/mini_charlie/u0001/1573732860000.json diff --git a/tests/test_data/mini_charlie/u0001/1573819260.csv b/tests/test_data/mini_charlie/u0001/1573819260000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573819260.csv rename to tests/test_data/mini_charlie/u0001/1573819260000.csv diff --git a/tests/test_data/mini_charlie/u0001/1573819260.json b/tests/test_data/mini_charlie/u0001/1573819260000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573819260.json rename to tests/test_data/mini_charlie/u0001/1573819260000.json diff --git a/tests/test_data/mini_charlie/u0001/1573905660.csv b/tests/test_data/mini_charlie/u0001/1573905660000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573905660.csv rename to tests/test_data/mini_charlie/u0001/1573905660000.csv diff --git a/tests/test_data/mini_charlie/u0001/1573905660.json b/tests/test_data/mini_charlie/u0001/1573905660000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573905660.json rename to tests/test_data/mini_charlie/u0001/1573905660000.json diff --git a/tests/test_data/mini_charlie/u0001/1573992060.csv b/tests/test_data/mini_charlie/u0001/1573992060000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573992060.csv rename to tests/test_data/mini_charlie/u0001/1573992060000.csv diff --git a/tests/test_data/mini_charlie/u0001/1573992060.json b/tests/test_data/mini_charlie/u0001/1573992060000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1573992060.json rename to tests/test_data/mini_charlie/u0001/1573992060000.json diff --git a/tests/test_data/mini_charlie/u0001/1574078460.csv b/tests/test_data/mini_charlie/u0001/1574078460000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1574078460.csv rename to tests/test_data/mini_charlie/u0001/1574078460000.csv diff --git a/tests/test_data/mini_charlie/u0001/1574078460.json b/tests/test_data/mini_charlie/u0001/1574078460000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1574078460.json rename to tests/test_data/mini_charlie/u0001/1574078460000.json diff --git a/tests/test_data/mini_charlie/u0001/1574164860.csv b/tests/test_data/mini_charlie/u0001/1574164860000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1574164860.csv rename to tests/test_data/mini_charlie/u0001/1574164860000.csv diff --git a/tests/test_data/mini_charlie/u0001/1574164860.json b/tests/test_data/mini_charlie/u0001/1574164860000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1574164860.json rename to tests/test_data/mini_charlie/u0001/1574164860000.json diff --git a/tests/test_data/mini_charlie/u0001/1574251260.csv b/tests/test_data/mini_charlie/u0001/1574251260000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1574251260.csv rename to tests/test_data/mini_charlie/u0001/1574251260000.csv diff --git a/tests/test_data/mini_charlie/u0001/1574251260.json b/tests/test_data/mini_charlie/u0001/1574251260000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1574251260.json rename to tests/test_data/mini_charlie/u0001/1574251260000.json diff --git a/tests/test_data/mini_charlie/u0001/1574337660.csv b/tests/test_data/mini_charlie/u0001/1574337660000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1574337660.csv rename to tests/test_data/mini_charlie/u0001/1574337660000.csv diff --git a/tests/test_data/mini_charlie/u0001/1574337660.json b/tests/test_data/mini_charlie/u0001/1574337660000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1574337660.json rename to tests/test_data/mini_charlie/u0001/1574337660000.json diff --git a/tests/test_data/mini_charlie/u0001/1574424060.csv b/tests/test_data/mini_charlie/u0001/1574424060000.csv similarity index 100% rename from tests/test_data/mini_charlie/u0001/1574424060.csv rename to tests/test_data/mini_charlie/u0001/1574424060000.csv diff --git a/tests/test_data/mini_charlie/u0001/1574424060.json b/tests/test_data/mini_charlie/u0001/1574424060000.json similarity index 100% rename from tests/test_data/mini_charlie/u0001/1574424060.json rename to tests/test_data/mini_charlie/u0001/1574424060000.json diff --git a/tests/test_data/tabular_data.csv b/tests/test_data/tabular_data.csv index e4364e42..e0ded8aa 100644 --- a/tests/test_data/tabular_data.csv +++ b/tests/test_data/tabular_data.csv @@ -1,160 +1,160 @@ timestamp,band46,band11,band20,band90,band10,band39,band101,band119,band13,band58,band57,band8 -43854,9.440766359,177.3098711,3.950077662,1.589993797,9.737112906,1.559607422,1.854634423,12.78396882,27.07465774,12.15287463,3.527962864,9.657255818 -43855,9.32935756,192.6438013,2.944403879,1.731263083,9.506100816,1.742567993,1.612556001,12.51576102,32.91728865,12.92191251,3.276684535,11.10493579 -43856,9.317966557,186.7426065,3.012011269,1.9809254,9.350440911,1.79489577,1.870134713,12.26139983,31.82888861,13.81505328,5.154198973,11.755605 -43857,10.53187831,140.944138,3.581465997,1.977361048,8.982307159,1.513458151,1.936753328,12.49534826,26.0496071,12.78678696,4.196380612,9.420797857 -43858,10.87388321,146.4238782,3.399872476,1.944730886,9.289619206,1.597556743,1.760447904,13.55912326,28.96555816,12.99284926,4.546379839,8.752881275 -43859,9.93411636,164.766234,3.549477692,1.737514236,9.527458635,1.54931284,1.960000422,12.36131508,25.31036571,11.37392489,3.594857658,8.328322214 -43860,10.41748476,150.5379154,3.903998409,2.220174398,9.364194674,1.56944494,2.21066263,12.90854785,26.24072389,12.59090567,3.802558592,8.754049267 -43861,11.98103198,109.2982635,3.239468976,2.308095763,8.541436075,1.652925602,2.196514401,14.69834766,26.61564019,13.97962838,4.028291316,7.717099365 -43862,11.65002899,127.8490169,3.312785741,1.975693429,9.05869402,1.64001794,1.72879365,14.68997175,34.22602295,13.01166672,3.426341607,9.7366868 -43863,8.965787591,164.8566163,2.985169923,1.556183002,10.87054217,1.863109122,1.719884787,13.57821584,31.08221617,12.89335182,3.688505598,9.899963222 -43864,11.63162815,128.8872569,3.797715535,1.602512392,9.109480477,1.596300931,2.66960243,12.51512289,25.98618946,12.80923856,5.616782242,9.121981642 -43865,11.98617269,116.0131719,3.759687995,2.268950885,9.417275678,1.493602288,1.962518739,13.80726236,24.56493944,12.7816714,4.69788188,8.743497059 -43866,10.03672652,169.7229417,3.048944077,1.878434859,9.209833096,1.728801065,1.876839774,13.16007456,28.34732428,12.20241821,4.745921591,7.977240027 -43867,10.61935313,147.2099874,3.68942904,1.869495541,9.553079819,1.64898915,1.907671673,13.87509994,27.96876886,11.88117765,3.732076479,8.984932808 -43868,9.571882017,182.4582153,3.123081561,1.877818394,9.403611106,1.532686362,1.994946816,12.42323865,26.89888554,11.87783003,4.887301228,9.347698267 -43869,26.44025538,93.22433323,3.193593005,1.925369812,8.843829986,1.979556016,1.600325767,14.52892065,34.71682239,11.13878349,2.665028793,8.290407599 -43870,32.62124545,89.38587001,3.724020496,2.176492173,9.590566288,1.65265973,1.910916776,12.58918437,32.42323956,10.39880146,4.120905817,9.650404206 -43871,19.3013283,103.0381363,2.827516714,1.890375769,8.930470397,1.535328336,1.620571341,13.53279446,24.79491217,10.62893931,4.107743065,8.210228947 -43872,35.96652846,72.2035585,3.588476436,2.291369529,9.005297678,1.479850809,1.830064518,12.58423192,23.51334165,10.10329514,3.612481356,8.078592268 -43873,21.91712004,108.9487817,3.4071566,2.403084117,8.265528704,1.746295566,2.016944613,13.66090554,27.97545432,11.26174956,3.315448683,8.352642215 -43874,15.91779222,143.2241585,2.918261205,1.578464169,8.541933212,1.557871806,1.723063029,12.69055433,26.46365253,9.618256463,4.324918146,8.379862776 -43875,23.76314021,96.6089188,2.699459571,2.231586255,10.43074896,1.478808211,1.817735635,11.61232843,27.157009,2.427040969,11.31932079,8.263532823 -43876,22.66602337,114.6987409,3.170866427,1.81187672,10.0350077,1.625129061,1.509959627,13.2424072,32.4091159,6.69890585,9.50375832,10.66421364 -43877,29.46895243,93.34132696,3.825482011,1.91321309,10.45906989,1.758285893,1.560273038,13.06343382,30.90110797,10.91428791,3.864927833,9.806785697 -43878,29.4424216,85.67672352,3.240289457,1.779405972,9.044089931,1.489330631,1.640068459,11.93127113,24.1205151,10.28039665,3.692295742,8.153902231 -43879,25.84415243,90.47274988,4.053469344,2.49347245,8.84243135,1.462244538,1.946266314,13.36459948,24.51650494,9.957694718,3.74163454,8.184392367 -43880,20.40001941,101.0981999,3.157362825,2.003933412,9.257088946,1.494946731,1.740852853,12.64515394,24.93550464,10.96748753,4.896947653,8.559089186 -43881,27.60529431,81.60726747,2.965960731,2.061925897,8.955384491,1.592808275,1.686975622,12.96685613,25.71363929,11.19522544,5.164686953,8.509259615 -43882,40.60939851,70.34622372,3.315279931,2.037023209,9.687054037,1.464403525,1.440709973,12.3388899,25.9424845,9.942883022,3.61335955,8.953568122 -43883,35.0464374,87.50813813,3.735893839,2.365806052,9.653112994,1.679847258,1.822301001,13.26877371,32.10233178,10.63539226,3.359603554,9.199452627 -43884,31.93901248,87.17122021,3.441987088,2.07997457,9.370730197,1.469594714,1.778066342,12.17900339,30.20746839,10.14325783,3.960275765,9.848808184 -43885,39.86340071,71.61329885,3.60056181,2.688283285,10.77269429,1.465387546,1.949997036,10.99562695,23.48637653,9.886590179,3.537719368,8.954159985 -43886,35.32529767,76.90357306,4.042117919,2.658741716,8.939375598,1.612277184,2.159043722,11.96344384,24.30345554,9.979197505,3.804142792,8.557371724 -43887,40.59524354,70.48105523,3.845265944,2.238195814,8.902417082,1.434345772,1.618881735,12.3077326,27.12834687,10.66596958,3.706498256,8.922621883 -43889,37.2437394,69.42163088,3.24786207,1.888748554,8.955001472,1.508843717,1.617963616,12.5922906,25.41716847,10.31586204,3.362304262,7.664041445 -43893,25.29490677,84.85906301,3.559811279,1.727264482,8.856720494,1.766346415,1.641195462,13.86089901,25.77492059,10.79203984,5.054632936,8.71925348 -43894,26.5342675,81.78845487,3.276052381,1.794244599,9.259401873,1.314407778,1.784260677,12.44913876,24.31684158,10.58651105,3.083394863,8.084644367 -43895,19.93254881,94.60807901,2.719008565,2.022196148,8.676996544,1.478869035,1.708259991,13.86669567,23.36273547,10.43799186,3.676248482,7.659981709 -43897,20.53632714,123.9785828,3.490810661,1.698066766,8.905426314,1.818850193,1.646237476,13.08107588,31.1791078,11.25720666,4.093672298,9.551510926 -43898,29.428626,88.10518944,3.550492499,2.463002815,8.729321283,1.692919661,2.115294853,12.7248583,32.42510726,11.17092542,3.848713463,9.709301876 -43899,31.47474713,74.66399386,3.589859325,2.294704278,9.126138948,1.340367889,1.972126752,12.7713727,25.3747639,10.74156269,3.721261329,8.131339043 -43900,42.94935036,67.02939946,3.271820201,1.828373994,10.32174785,1.492740749,1.813982927,11.62450415,26.82032158,8.238636557,7.532571565,7.61293131 -43901,40.79490293,66.86568819,3.080516944,1.916703302,10.33281768,1.654380366,1.675161165,12.88221096,23.5509162,10.7522654,3.955935714,8.39605368 -43902,33.59062146,80.18843936,3.083544573,1.931489003,9.091129146,1.420392829,1.627423029,11.84914451,25.78730212,2.865507986,11.64077078,8.03612935 -43903,33.98958026,72.69278816,3.841083476,2.453295856,9.961340044,1.448616303,1.828120526,12.48548635,24.61525391,10.02322029,3.737938662,8.08796438 -43904,23.80951571,98.09494379,3.123747886,1.905752471,8.924027653,1.616671784,1.647056465,13.39247143,30.83727544,11.82476006,3.947729652,9.829119789 -43905,25.1368346,96.53562136,3.289022589,2.236065439,9.246016019,1.648828278,1.941684715,13.26299341,29.46402905,11.23373865,4.219742536,9.609657175 -43906,48.21206768,66.06708608,3.628718057,1.996987857,9.283407095,1.647795184,1.925980428,12.89849265,27.48051222,9.5823842,2.54824363,9.006917055 -43908,46.43566137,64.85067566,4.162609083,2.329106896,9.258913024,1.511300119,2.078156691,12.77212617,22.44031847,10.28078344,3.972694979,8.558164919 -43909,32.62098907,83.19346792,3.107550277,1.759944964,9.195469921,1.494577794,1.861280499,11.72524323,24.08810312,2.57393333,10.58508165,8.798268961 -43910,40.83370376,69.53002228,4.080731877,1.979325099,9.10546923,1.561653374,2.134231682,12.61499184,24.96073286,5.898037992,10.13356475,7.902526521 -43911,26.05329011,97.96734169,3.938388041,1.740238653,9.095030975,1.734663815,1.735221237,12.63621954,31.74449963,3.128743183,12.18381894,10.20055737 -43912,21.61703254,103.4942973,2.821033446,2.134949404,9.101054683,1.580749084,1.784366382,14.06334173,34.50529875,10.85149777,4.271938578,9.02264595 -43913,21.87308932,98.50054436,3.46759173,2.043202802,8.272425052,1.642449375,1.772408993,13.29287746,30.14446223,11.32124578,4.055693151,8.171320779 -43916,18.88087637,96.82751684,2.746242589,1.64810782,8.106991048,1.65017903,1.842903274,13.37827053,25.92578186,10.70997649,3.659346217,8.124774434 -43917,23.47770563,92.79339565,3.688846828,1.806780502,9.054264765,1.856638174,1.808487788,12.52419596,31.29336164,10.97354646,3.137643578,8.83223705 -43918,24.0969751,93.74815799,3.174631937,2.027023275,8.509342855,1.611010522,1.663551513,12.93423646,33.16181217,10.75097914,4.190347384,10.00082325 -43919,20.45483718,109.2025905,3.751314774,2.22103243,8.610011118,1.833802328,1.782172716,13.37245118,32.56813633,11.76989526,2.904647058,10.24874097 -43920,17.00852558,97.58948733,3.57277629,1.740281189,8.653669145,2.016263662,1.815219709,14.45791123,27.25685593,10.70996966,3.460101859,7.679678949 -43921,20.73594529,96.79621078,3.848811921,1.913216165,8.671174391,1.628984847,1.947960462,13.777805,28.03585255,11.9771146,3.365264934,7.322554372 -43922,20.70911789,85.87402229,3.619442701,1.828277919,9.863451084,1.667257031,1.95407978,12.75773144,29.30335147,11.18781264,3.988702794,7.888345805 -43923,23.946299,90.20968554,3.297802125,2.10387448,9.528868465,1.583471642,1.946570398,12.12960306,27.97799285,12.37464737,3.99787667,8.135812061 -43924,26.72946537,73.81307392,2.724107298,2.167311944,8.783311375,1.587081766,1.699499274,12.34402885,27.13850861,10.41096113,4.318988264,8.215802815 -43927,31.87710222,79.50081917,3.894340982,1.865562823,8.682070221,1.544177393,1.551984154,12.41258463,28.48238873,10.64571924,3.733862254,8.619561265 -43928,46.2838508,72.49427648,3.211752784,2.175055137,9.946619189,1.55110199,1.676676968,11.70080471,27.04739458,8.200763361,7.547808261,8.612535297 -43929,44.35607979,70.84151875,4.147212918,2.488280842,10.3433844,1.364896577,1.852932961,11.53042505,27.99823702,10.86146071,2.62655694,8.773042115 -43931,60.24635648,68.83486325,3.934998412,2.114414224,10.02460495,1.51448042,1.437706515,11.69405823,30.19872077,10.39816226,4.232185018,10.57737375 -43932,79.90205796,62.67199617,2.923272088,2.221121883,10.76486524,1.700218894,1.66937682,12.90901585,28.8061067,8.503899654,4.88187051,10.53449839 -43933,59.15293989,69.66971379,4.413228095,2.272426595,10.49371649,1.481496326,1.795843819,12.8916728,28.2852347,9.421742905,3.695898318,10.28669085 -43934,64.95316038,68.24371259,3.483298785,3.082287056,10.31664153,1.78483113,1.805373416,12.46236666,27.56585404,8.7437737,4.041078431,10.71800208 -43935,19.88316872,96.70688724,3.775232122,1.895247517,9.110076849,1.469836371,1.477348705,14.40785276,24.92364439,10.95210702,4.550186302,8.996316783 -43936,22.84933382,99.28164945,3.781350372,1.622714916,8.945701856,1.355275647,1.657960462,13.45895232,27.13592608,11.44025408,3.734119953,8.455355464 -43937,36.85528778,80.50864177,3.951410978,2.03120383,9.711311455,1.588776789,1.592160504,11.75591135,26.29334684,9.952940626,3.917912145,8.932994998 -43938,53.92705233,62.32398884,3.881696095,1.889733019,10.55116193,1.57639607,2.136583391,12.13840511,22.52845898,8.896506811,3.796161253,9.211194091 -43940,25.80258178,90.50761147,3.481576001,1.751717169,9.155932809,1.61923714,1.723053734,13.6103906,29.8727451,9.566469474,7.210426799,8.764501455 -43955,54.63563479,59.64828472,3.7709804,1.793919408,9.569598103,1.592792124,1.609213194,11.34835517,23.0253531,9.835093431,4.624571458,9.079772639 -43957,41.61165776,74.65553551,4.179136937,1.956063229,9.561140627,1.639877167,1.695351851,13.23926878,28.40853437,10.76125052,3.453657713,8.503722275 -43958,65.56643108,71.89077426,4.186812816,1.993189156,10.57388621,1.715211891,1.681778084,12.68919677,29.93837698,9.536961835,3.280901192,9.14576592 -43960,42.87544487,77.08187178,3.740498334,1.760402577,10.0352844,1.252065962,1.490750755,12.77002189,28.38927837,4.460978595,11.32012788,9.887524045 -43961,56.13808387,67.70126461,3.615178476,1.827612362,10.10180501,1.496789684,1.692955243,13.66052313,26.64666962,9.866971591,2.988408591,10.03753557 -43962,52.2280541,59.25587559,3.974716507,1.959768113,8.609041093,1.672278076,1.732273736,13.87796075,23.71857831,10.83342596,3.940284448,8.164385377 -43963,39.84916705,77.97707479,2.828653646,1.950700265,9.719832132,1.576150765,1.635215142,12.47998255,28.00132545,7.617168735,9.476797219,8.907356161 -43964,35.51064019,83.11969596,2.398557735,1.974357993,10.35094834,1.779355931,1.746983663,11.21796051,22.41270131,3.239294792,11.01497203,9.603613314 -43965,38.65174808,76.84658802,3.641337703,1.915304147,9.404567649,1.663482633,1.491645353,12.50207029,28.45761884,11.49098479,4.294741946,9.188406661 -43966,33.98483769,85.83372186,2.938014058,1.838554379,10.73264452,1.693014942,1.863027017,12.03259525,29.7382292,8.871472933,7.183832181,9.2231187 -43967,34.66129432,89.503482,3.792268402,1.90142501,9.343568959,1.683920279,1.519895086,12.47461303,28.84828934,11.07419798,3.784139448,9.284674964 -43969,73.50347272,58.5667246,3.485069604,2.077073399,10.20841252,1.407911111,1.713822305,13.12954243,22.95787443,8.654288496,3.486178965,8.523159083 -43970,77.4115436,58.6134002,3.506654691,2.341481711,12.29892708,1.477353941,1.984463966,12.06976127,22.20340485,2.684883084,8.693587044,8.804567707 -43971,49.97551691,81.36779835,3.379006884,2.116626422,10.91302012,1.51745676,1.979760458,11.40066566,28.43351687,2.819503275,10.51321952,8.386102555 -43973,56.63980833,71.44164961,2.91997649,2.040887647,11.44798318,1.640411852,1.651602801,12.09890098,25.72638331,9.722899558,2.947430481,10.99131767 -43977,28.81323022,84.31870886,3.899005372,1.671967738,9.511613643,1.486317088,1.677971451,12.19182846,24.46127187,3.757603251,10.6692104,9.732812286 -43978,51.82346543,67.84800579,3.231173012,2.487860341,9.885424498,1.656183625,1.89878843,11.85035465,25.32796562,3.424220527,11.04646332,8.763640491 -43980,42.13578025,84.45796011,2.931570958,2.298892221,10.37935883,1.456573738,1.6954729,11.67948302,30.52318104,10.50930992,3.762492512,9.412538752 -43982,54.68334011,70.58572477,4.213628818,2.681864847,11.31951627,1.677955016,1.977973106,12.53680977,28.53207898,10.22921971,3.492043896,9.636675513 -43983,68.43719644,72.13958974,3.246572986,3.01247563,10.54853637,1.620458832,2.108439726,12.94266211,33.32931582,10.00735964,2.964589852,10.36573215 -43984,61.69845321,60.85682306,4.269393333,2.198890329,9.183014973,1.585178656,1.592850559,13.25138711,23.89863195,10.16593422,4.86861325,7.913083715 -43985,61.48467461,61.45614021,2.948065667,2.839636783,10.27586137,1.852112127,2.019804893,11.33794835,22.65951094,9.629149439,2.882283173,9.498646857 -43986,48.79240694,67.52736672,3.767032307,2.894967588,9.594077004,1.755316009,1.975406149,12.3278268,27.17769517,11.14913442,3.728641936,8.509445086 -43987,42.85837733,74.18031055,4.36898692,1.823668628,10.80502832,1.461614367,1.673538126,11.47159313,24.68199448,10.34971499,3.974822102,9.055664796 -43988,41.25462142,80.44185271,2.981788674,2.344018112,10.52813571,1.754669829,1.859874884,12.9336464,30.18942092,10.76109417,3.802234806,10.08285906 -43989,49.73366237,71.65276744,3.568056406,1.88921516,10.85158582,1.535959803,1.660104264,12.42841801,30.61108665,11.26618178,5.395819705,9.94982293 -43993,67.6297693,67.55693338,3.82501827,1.993883099,10.33975112,1.659558886,1.981681138,13.28369208,31.35215069,10.64626407,4.064142729,10.37618066 -43997,85.63305383,59.58430521,3.080561348,2.540037174,12.16998434,1.529125596,2.212155478,12.02019125,25.54055525,2.835776535,9.486797356,9.315252331 -43998,64.83046949,58.02278725,3.780513112,2.228624288,10.92827719,1.719951156,2.00963053,11.68366822,21.61007348,8.777556637,4.020285282,8.354152785 -43999,73.12152549,56.16043006,3.09345658,2.226930113,9.958206464,1.676277672,1.911784028,11.29296739,21.96474615,9.410808168,3.031184353,8.647637427 -44000,63.01720408,63.87868751,4.637092581,2.032352147,9.712182916,1.65604277,1.668270202,12.48735764,24.79659858,9.676759803,3.996266894,9.46986308 -44002,71.14118655,65.04566237,3.145578628,1.847615056,9.686249628,1.521756659,1.883815721,11.32948741,26.83957034,10.10313581,3.365319262,10.90070543 -44003,73.87844962,65.08806132,3.773034448,1.976257695,11.34942494,1.578396307,1.799532942,12.4400864,27.81238862,8.853413784,4.785870169,9.249730771 -44004,87.00357763,59.91096725,4.723999781,2.652004762,11.12314887,1.545893151,2.292741284,13.3960854,25.14550808,8.539268101,3.123861084,9.211581715 -44005,53.32830775,60.71956373,4.23970955,2.209044827,10.00387317,1.534306033,2.20353163,11.1992356,23.29851309,9.589795023,4.100716863,8.818903284 -44006,87.10733457,54.40787943,3.86917409,2.602030507,9.480757454,1.405135681,2.159485194,13.25209821,22.31419907,8.475692641,3.637156017,8.240553989 -44027,45.32797257,66.40454905,3.256349071,1.692080045,9.835200662,1.457868873,1.750217173,1.87532758,23.13152669,9.614067984,4.266390787,9.081211293 -44028,42.65236233,68.48169597,3.606865389,1.857678202,9.29320437,1.408556357,1.659535135,2.00856014,23.56770806,10.96777157,3.338207129,8.393694389 -44029,47.31281689,68.99831827,3.38824204,1.693989461,9.407858624,1.470366497,1.828285638,1.98300391,24.24275706,10.70351275,4.535875149,9.571820017 -44030,69.4836774,61.91488852,3.552386899,2.089098721,12.0303394,1.799641375,1.895451022,1.939206117,27.28257213,9.388637914,3.838108396,11.50947728 -44031,93.62092067,56.33492205,3.37640346,3.321829206,12.70062842,1.63257067,2.565820213,2.061012181,27.30144318,8.529984207,2.895718672,11.12845436 -44032,72.95593318,56.84302626,3.535773709,2.475364061,9.503004197,1.507402135,2.086967394,2.001881865,24.4244231,9.43788115,3.555888737,9.015195283 -44033,5.516436501,59.61583902,27.37325214,8.620478933,12.10455437,4.706261709,3.037415385,0.11673474,7.767222956,3.019926272,5.813551595,9.830081674 -44034,63.98674382,61.76102687,3.289081088,2.12544497,9.729528996,1.750123124,2.610802895,1.864066039,23.8394549,3.250312426,9.220240907,9.960738607 -44035,45.99589063,66.8801041,2.869598001,2.381218093,10.95278262,1.394653529,1.883910813,2.018333457,21.02125697,10.17606897,3.515018536,8.678548778 -44036,52.18620254,70.05670679,3.245385541,2.128447028,10.86836728,1.60175996,2.195359992,1.985061852,28.72343325,9.931504297,3.336691549,8.122606935 -44037,71.30391718,66.59759656,3.402207174,2.222519192,10.9208388,1.844958338,2.511648209,1.908472663,27.60657415,9.279766281,3.50383752,11.37966718 -44038,48.22000671,67.11634418,3.376906067,2.224769725,9.633369492,1.848524526,2.394737655,2.111851779,26.69679561,9.867417314,4.645709898,12.37740244 -44039,51.33669268,59.28115784,3.473032331,2.402129016,10.78046972,1.724980143,2.509709574,2.097630875,22.5041748,9.740267716,3.436285106,8.484742644 -44040,58.75094491,65.69745263,3.555436147,2.410375803,10.05910721,1.855018947,2.657197267,1.830245177,25.36592514,8.899598574,3.673812941,9.142039539 -44041,38.34877282,71.56421417,3.001616791,2.201395342,8.590908808,1.888143243,2.716640295,1.93698064,29.67750054,10.05079178,4.117675746,10.09320918 -44043,86.03481549,61.02959058,3.097341709,2.902784449,12.07289838,1.681673184,2.47435238,2.035179654,25.67808292,8.128847805,4.225167224,9.873276458 -44044,100.9908779,58.05674382,3.664044056,2.392454002,11.77023849,1.932822862,2.649489836,2.173322173,27.52379308,7.937270451,2.906249864,12.43514261 -44045,44.59788907,79.36673089,2.667915175,1.900003092,10.26141973,1.739240455,1.991415087,1.932394657,28.17841855,8.29869139,7.961643193,11.67206999 -44047,35.45125994,69.17185832,3.668347844,1.706641627,9.850077911,1.590236678,1.835909852,2.107603385,24.42123299,10.91265587,3.308250898,9.362159488 -44048,41.04676633,69.1068052,3.924807699,2.188510149,10.5141732,1.783637106,2.532210309,1.788215322,23.09219693,10.3745107,4.212013692,7.927872446 -44049,60.16139993,69.47207912,2.776253815,2.838022709,11.3427563,1.708149843,3.258109928,1.94104543,30.9830797,9.435546218,3.681127916,10.12104656 -44051,108.0057919,56.77172943,3.632220089,2.301231624,12.57051146,1.979982493,2.318974418,2.093783162,28.87386628,8.165442976,4.619957421,10.40874913 -44052,102.626149,59.89033621,2.95187215,2.356340497,11.78103656,1.759986576,2.257780881,2.104201526,28.45422093,7.884340768,2.761868434,9.969731896 -44053,88.02149029,53.94261182,2.563903278,2.251584825,11.86389541,1.694206543,2.70160575,1.903345586,20.03009452,7.584281148,3.189224021,8.969284238 -44054,93.16295316,50.61179216,4.391329482,2.301472625,11.32624248,1.538643464,2.443500294,2.010911566,20.67699453,7.771312184,2.889461116,9.680279613 -44055,110.6901536,57.89026138,2.988765145,2.215949439,11.60497944,1.679550702,2.581559132,2.040422015,24.4455954,7.301592899,3.325005717,9.445619927 -44056,85.68245375,60.52827971,3.719804803,2.274213594,11.28519277,1.51216909,1.926353029,1.932958951,21.62523779,7.582921773,3.021078611,9.24472504 -44057,85.19914088,50.06741293,3.472819627,2.850557854,9.267323727,2.029113886,2.654772256,1.754896349,20.47091595,8.848197514,3.436862755,7.839920854 -44058,69.23563247,64.01981563,3.251470906,2.021312469,11.27894821,1.671310595,2.142331313,1.965662409,25.74840646,8.44177367,3.568377045,9.419023574 -44059,76.95293253,56.68895438,3.242005431,1.914561323,11.09602917,1.743136756,1.926610584,2.023389312,28.75568216,8.237998091,3.72351266,10.00102073 -44060,30.0607926,67.93840956,3.083848468,1.917392755,10.13787631,1.725059516,2.188697297,2.248270417,23.13830511,10.66893783,4.218543612,7.936377991 -44061,48.9525548,60.59907736,3.059345921,2.252000626,10.27367983,1.472438098,2.013478555,2.011135372,20.99716401,9.264740473,3.197139813,8.833737092 -44062,44.62579624,62.25440382,3.256213943,1.771970803,10.13190684,1.505752475,1.91564765,1.975424752,22.82595222,9.729545613,3.178052229,7.754420483 -44063,64.1325496,54.63241547,3.902099234,2.282672031,10.52476288,1.381278937,2.052610249,1.937971681,25.35068277,8.971024062,3.040686502,7.20830885 -44065,33.81207555,73.91214327,4.092236141,2.120019756,9.950080639,2.026913824,2.174247509,2.304887537,27.6439562,10.53023288,3.446723293,11.10126125 -44067,30.04313363,69.91562486,3.794337041,2.035611861,9.59355821,2.048156589,2.59393083,2.310809025,24.83699667,11.07663763,4.099670445,7.874951048 -44068,8.303462963,79.80455503,28.35392581,5.361164138,10.53380901,2.463788491,3.871720869,0.158518331,5.226154343,2.25970273,3.891215249,10.59612566 -44069,26.48938596,74.38723566,3.394082581,2.227431089,8.653085683,1.951798046,2.205325952,2.286571223,25.91737695,10.72615023,4.185747419,9.07030387 -44070,26.09149159,72.47273374,4.241387006,1.949601301,8.901866487,2.015021155,2.330124875,2.380615513,25.17654964,10.63953631,3.895938166,7.140513948 -44071,37.59668105,63.33393499,3.20621126,2.271985624,8.831108062,1.765735571,2.793064349,2.041420825,24.46414739,10.28827529,3.056046341,7.2865973 -44072,38.57587093,73.39575773,3.591620711,2.067781628,9.166712249,1.531574372,1.886950103,2.028726118,27.18521861,10.66529031,3.223970965,10.32148785 -44073,31.57673513,72.03216413,3.34846729,1.79675546,9.280688774,1.714631292,1.859206543,2.283611272,28.39608524,10.7660131,3.306785981,10.13936529 -44074,30.51759109,65.20866287,3.818221477,2.267291049,8.957911749,2.071324843,2.449109814,2.283342256,23.60047141,11.15844822,3.28679868,7.928640696 -44075,32.46106278,82.11958764,3.404541744,1.776631304,10.20009811,1.35363274,1.757447119,1.949828348,25.37680254,10.46918741,2.967286604,8.557613939 -44076,43.07506486,71.09313078,3.243097469,1.913367409,8.530042128,1.356117641,1.782548092,1.883669269,26.87539189,4.022233544,10.56165465,8.469106813 -44078,6.502126829,55.60648323,26.62622642,12.06674444,41.67954797,2.615703914,2.850348312,0.061986842,4.325058875,1.273963343,2.521944078,12.03443598 -44079,36.00077076,84.82465314,3.292203934,1.749449952,9.71660884,1.642295145,1.612005181,2.05798348,28.98149305,9.911381598,2.978928013,10.34626076 -44080,27.91378826,92.19510265,4.677949635,2.285265262,11.12585507,1.476593401,2.159418322,2.240775439,30.38867172,10.65042632,5.111546746,8.800151923 +946684843854,9.440766359,177.3098711,3.950077662,1.589993797,9.737112906,1.559607422,1.854634423,12.78396882,27.07465774,12.15287463,3.527962864,9.657255818 +946684843855,9.32935756,192.6438013,2.944403879,1.731263083,9.506100816,1.742567993,1.612556001,12.51576102,32.91728865,12.92191251,3.276684535,11.10493579 +946684843856,9.317966557,186.7426065,3.012011269,1.9809254,9.350440911,1.79489577,1.870134713,12.26139983,31.82888861,13.81505328,5.154198973,11.755605 +946684843857,10.53187831,140.944138,3.581465997,1.977361048,8.982307159,1.513458151,1.936753328,12.49534826,26.0496071,12.78678696,4.196380612,9.420797857 +946684843858,10.87388321,146.4238782,3.399872476,1.944730886,9.289619206,1.597556743,1.760447904,13.55912326,28.96555816,12.99284926,4.546379839,8.752881275 +946684843859,9.93411636,164.766234,3.549477692,1.737514236,9.527458635,1.54931284,1.960000422,12.36131508,25.31036571,11.37392489,3.594857658,8.328322214 +946684843860,10.41748476,150.5379154,3.903998409,2.220174398,9.364194674,1.56944494,2.21066263,12.90854785,26.24072389,12.59090567,3.802558592,8.754049267 +946684843861,11.98103198,109.2982635,3.239468976,2.308095763,8.541436075,1.652925602,2.196514401,14.69834766,26.61564019,13.97962838,4.028291316,7.717099365 +946684843862,11.65002899,127.8490169,3.312785741,1.975693429,9.05869402,1.64001794,1.72879365,14.68997175,34.22602295,13.01166672,3.426341607,9.7366868 +946684843863,8.965787591,164.8566163,2.985169923,1.556183002,10.87054217,1.863109122,1.719884787,13.57821584,31.08221617,12.89335182,3.688505598,9.899963222 +946684843864,11.63162815,128.8872569,3.797715535,1.602512392,9.109480477,1.596300931,2.66960243,12.51512289,25.98618946,12.80923856,5.616782242,9.121981642 +946684843865,11.98617269,116.0131719,3.759687995,2.268950885,9.417275678,1.493602288,1.962518739,13.80726236,24.56493944,12.7816714,4.69788188,8.743497059 +946684843866,10.03672652,169.7229417,3.048944077,1.878434859,9.209833096,1.728801065,1.876839774,13.16007456,28.34732428,12.20241821,4.745921591,7.977240027 +946684843867,10.61935313,147.2099874,3.68942904,1.869495541,9.553079819,1.64898915,1.907671673,13.87509994,27.96876886,11.88117765,3.732076479,8.984932808 +946684843868,9.571882017,182.4582153,3.123081561,1.877818394,9.403611106,1.532686362,1.994946816,12.42323865,26.89888554,11.87783003,4.887301228,9.347698267 +946684843869,26.44025538,93.22433323,3.193593005,1.925369812,8.843829986,1.979556016,1.600325767,14.52892065,34.71682239,11.13878349,2.665028793,8.290407599 +946684843870,32.62124545,89.38587001,3.724020496,2.176492173,9.590566288,1.65265973,1.910916776,12.58918437,32.42323956,10.39880146,4.120905817,9.650404206 +946684843871,19.3013283,103.0381363,2.827516714,1.890375769,8.930470397,1.535328336,1.620571341,13.53279446,24.79491217,10.62893931,4.107743065,8.210228947 +946684843872,35.96652846,72.2035585,3.588476436,2.291369529,9.005297678,1.479850809,1.830064518,12.58423192,23.51334165,10.10329514,3.612481356,8.078592268 +946684843873,21.91712004,108.9487817,3.4071566,2.403084117,8.265528704,1.746295566,2.016944613,13.66090554,27.97545432,11.26174956,3.315448683,8.352642215 +946684843874,15.91779222,143.2241585,2.918261205,1.578464169,8.541933212,1.557871806,1.723063029,12.69055433,26.46365253,9.618256463,4.324918146,8.379862776 +946684843875,23.76314021,96.6089188,2.699459571,2.231586255,10.43074896,1.478808211,1.817735635,11.61232843,27.157009,2.427040969,11.31932079,8.263532823 +946684843876,22.66602337,114.6987409,3.170866427,1.81187672,10.0350077,1.625129061,1.509959627,13.2424072,32.4091159,6.69890585,9.50375832,10.66421364 +946684843877,29.46895243,93.34132696,3.825482011,1.91321309,10.45906989,1.758285893,1.560273038,13.06343382,30.90110797,10.91428791,3.864927833,9.806785697 +946684843878,29.4424216,85.67672352,3.240289457,1.779405972,9.044089931,1.489330631,1.640068459,11.93127113,24.1205151,10.28039665,3.692295742,8.153902231 +946684843879,25.84415243,90.47274988,4.053469344,2.49347245,8.84243135,1.462244538,1.946266314,13.36459948,24.51650494,9.957694718,3.74163454,8.184392367 +946684843880,20.40001941,101.0981999,3.157362825,2.003933412,9.257088946,1.494946731,1.740852853,12.64515394,24.93550464,10.96748753,4.896947653,8.559089186 +946684843881,27.60529431,81.60726747,2.965960731,2.061925897,8.955384491,1.592808275,1.686975622,12.96685613,25.71363929,11.19522544,5.164686953,8.509259615 +946684843882,40.60939851,70.34622372,3.315279931,2.037023209,9.687054037,1.464403525,1.440709973,12.3388899,25.9424845,9.942883022,3.61335955,8.953568122 +946684843883,35.0464374,87.50813813,3.735893839,2.365806052,9.653112994,1.679847258,1.822301001,13.26877371,32.10233178,10.63539226,3.359603554,9.199452627 +946684843884,31.93901248,87.17122021,3.441987088,2.07997457,9.370730197,1.469594714,1.778066342,12.17900339,30.20746839,10.14325783,3.960275765,9.848808184 +946684843885,39.86340071,71.61329885,3.60056181,2.688283285,10.77269429,1.465387546,1.949997036,10.99562695,23.48637653,9.886590179,3.537719368,8.954159985 +946684843886,35.32529767,76.90357306,4.042117919,2.658741716,8.939375598,1.612277184,2.159043722,11.96344384,24.30345554,9.979197505,3.804142792,8.557371724 +946684843887,40.59524354,70.48105523,3.845265944,2.238195814,8.902417082,1.434345772,1.618881735,12.3077326,27.12834687,10.66596958,3.706498256,8.922621883 +946684843889,37.2437394,69.42163088,3.24786207,1.888748554,8.955001472,1.508843717,1.617963616,12.5922906,25.41716847,10.31586204,3.362304262,7.664041445 +946684843893,25.29490677,84.85906301,3.559811279,1.727264482,8.856720494,1.766346415,1.641195462,13.86089901,25.77492059,10.79203984,5.054632936,8.71925348 +946684843894,26.5342675,81.78845487,3.276052381,1.794244599,9.259401873,1.314407778,1.784260677,12.44913876,24.31684158,10.58651105,3.083394863,8.084644367 +946684843895,19.93254881,94.60807901,2.719008565,2.022196148,8.676996544,1.478869035,1.708259991,13.86669567,23.36273547,10.43799186,3.676248482,7.659981709 +946684843897,20.53632714,123.9785828,3.490810661,1.698066766,8.905426314,1.818850193,1.646237476,13.08107588,31.1791078,11.25720666,4.093672298,9.551510926 +946684843898,29.428626,88.10518944,3.550492499,2.463002815,8.729321283,1.692919661,2.115294853,12.7248583,32.42510726,11.17092542,3.848713463,9.709301876 +946684843899,31.47474713,74.66399386,3.589859325,2.294704278,9.126138948,1.340367889,1.972126752,12.7713727,25.3747639,10.74156269,3.721261329,8.131339043 +946684843900,42.94935036,67.02939946,3.271820201,1.828373994,10.32174785,1.492740749,1.813982927,11.62450415,26.82032158,8.238636557,7.532571565,7.61293131 +946684843901,40.79490293,66.86568819,3.080516944,1.916703302,10.33281768,1.654380366,1.675161165,12.88221096,23.5509162,10.7522654,3.955935714,8.39605368 +946684843902,33.59062146,80.18843936,3.083544573,1.931489003,9.091129146,1.420392829,1.627423029,11.84914451,25.78730212,2.865507986,11.64077078,8.03612935 +946684843903,33.98958026,72.69278816,3.841083476,2.453295856,9.961340044,1.448616303,1.828120526,12.48548635,24.61525391,10.02322029,3.737938662,8.08796438 +946684843904,23.80951571,98.09494379,3.123747886,1.905752471,8.924027653,1.616671784,1.647056465,13.39247143,30.83727544,11.82476006,3.947729652,9.829119789 +946684843905,25.1368346,96.53562136,3.289022589,2.236065439,9.246016019,1.648828278,1.941684715,13.26299341,29.46402905,11.23373865,4.219742536,9.609657175 +946684843906,48.21206768,66.06708608,3.628718057,1.996987857,9.283407095,1.647795184,1.925980428,12.89849265,27.48051222,9.5823842,2.54824363,9.006917055 +946684843908,46.43566137,64.85067566,4.162609083,2.329106896,9.258913024,1.511300119,2.078156691,12.77212617,22.44031847,10.28078344,3.972694979,8.558164919 +946684843909,32.62098907,83.19346792,3.107550277,1.759944964,9.195469921,1.494577794,1.861280499,11.72524323,24.08810312,2.57393333,10.58508165,8.798268961 +946684843910,40.83370376,69.53002228,4.080731877,1.979325099,9.10546923,1.561653374,2.134231682,12.61499184,24.96073286,5.898037992,10.13356475,7.902526521 +946684843911,26.05329011,97.96734169,3.938388041,1.740238653,9.095030975,1.734663815,1.735221237,12.63621954,31.74449963,3.128743183,12.18381894,10.20055737 +946684843912,21.61703254,103.4942973,2.821033446,2.134949404,9.101054683,1.580749084,1.784366382,14.06334173,34.50529875,10.85149777,4.271938578,9.02264595 +946684843913,21.87308932,98.50054436,3.46759173,2.043202802,8.272425052,1.642449375,1.772408993,13.29287746,30.14446223,11.32124578,4.055693151,8.171320779 +946684843916,18.88087637,96.82751684,2.746242589,1.64810782,8.106991048,1.65017903,1.842903274,13.37827053,25.92578186,10.70997649,3.659346217,8.124774434 +946684843917,23.47770563,92.79339565,3.688846828,1.806780502,9.054264765,1.856638174,1.808487788,12.52419596,31.29336164,10.97354646,3.137643578,8.83223705 +946684843918,24.0969751,93.74815799,3.174631937,2.027023275,8.509342855,1.611010522,1.663551513,12.93423646,33.16181217,10.75097914,4.190347384,10.00082325 +946684843919,20.45483718,109.2025905,3.751314774,2.22103243,8.610011118,1.833802328,1.782172716,13.37245118,32.56813633,11.76989526,2.904647058,10.24874097 +946684843920,17.00852558,97.58948733,3.57277629,1.740281189,8.653669145,2.016263662,1.815219709,14.45791123,27.25685593,10.70996966,3.460101859,7.679678949 +946684843921,20.73594529,96.79621078,3.848811921,1.913216165,8.671174391,1.628984847,1.947960462,13.777805,28.03585255,11.9771146,3.365264934,7.322554372 +946684843922,20.70911789,85.87402229,3.619442701,1.828277919,9.863451084,1.667257031,1.95407978,12.75773144,29.30335147,11.18781264,3.988702794,7.888345805 +946684843923,23.946299,90.20968554,3.297802125,2.10387448,9.528868465,1.583471642,1.946570398,12.12960306,27.97799285,12.37464737,3.99787667,8.135812061 +946684843924,26.72946537,73.81307392,2.724107298,2.167311944,8.783311375,1.587081766,1.699499274,12.34402885,27.13850861,10.41096113,4.318988264,8.215802815 +946684843927,31.87710222,79.50081917,3.894340982,1.865562823,8.682070221,1.544177393,1.551984154,12.41258463,28.48238873,10.64571924,3.733862254,8.619561265 +946684843928,46.2838508,72.49427648,3.211752784,2.175055137,9.946619189,1.55110199,1.676676968,11.70080471,27.04739458,8.200763361,7.547808261,8.612535297 +946684843929,44.35607979,70.84151875,4.147212918,2.488280842,10.3433844,1.364896577,1.852932961,11.53042505,27.99823702,10.86146071,2.62655694,8.773042115 +946684843931,60.24635648,68.83486325,3.934998412,2.114414224,10.02460495,1.51448042,1.437706515,11.69405823,30.19872077,10.39816226,4.232185018,10.57737375 +946684843932,79.90205796,62.67199617,2.923272088,2.221121883,10.76486524,1.700218894,1.66937682,12.90901585,28.8061067,8.503899654,4.88187051,10.53449839 +946684843933,59.15293989,69.66971379,4.413228095,2.272426595,10.49371649,1.481496326,1.795843819,12.8916728,28.2852347,9.421742905,3.695898318,10.28669085 +946684843934,64.95316038,68.24371259,3.483298785,3.082287056,10.31664153,1.78483113,1.805373416,12.46236666,27.56585404,8.7437737,4.041078431,10.71800208 +946684843935,19.88316872,96.70688724,3.775232122,1.895247517,9.110076849,1.469836371,1.477348705,14.40785276,24.92364439,10.95210702,4.550186302,8.996316783 +946684843936,22.84933382,99.28164945,3.781350372,1.622714916,8.945701856,1.355275647,1.657960462,13.45895232,27.13592608,11.44025408,3.734119953,8.455355464 +946684843937,36.85528778,80.50864177,3.951410978,2.03120383,9.711311455,1.588776789,1.592160504,11.75591135,26.29334684,9.952940626,3.917912145,8.932994998 +946684843938,53.92705233,62.32398884,3.881696095,1.889733019,10.55116193,1.57639607,2.136583391,12.13840511,22.52845898,8.896506811,3.796161253,9.211194091 +946684843940,25.80258178,90.50761147,3.481576001,1.751717169,9.155932809,1.61923714,1.723053734,13.6103906,29.8727451,9.566469474,7.210426799,8.764501455 +946684843955,54.63563479,59.64828472,3.7709804,1.793919408,9.569598103,1.592792124,1.609213194,11.34835517,23.0253531,9.835093431,4.624571458,9.079772639 +946684843957,41.61165776,74.65553551,4.179136937,1.956063229,9.561140627,1.639877167,1.695351851,13.23926878,28.40853437,10.76125052,3.453657713,8.503722275 +946684843958,65.56643108,71.89077426,4.186812816,1.993189156,10.57388621,1.715211891,1.681778084,12.68919677,29.93837698,9.536961835,3.280901192,9.14576592 +946684843960,42.87544487,77.08187178,3.740498334,1.760402577,10.0352844,1.252065962,1.490750755,12.77002189,28.38927837,4.460978595,11.32012788,9.887524045 +946684843961,56.13808387,67.70126461,3.615178476,1.827612362,10.10180501,1.496789684,1.692955243,13.66052313,26.64666962,9.866971591,2.988408591,10.03753557 +946684843962,52.2280541,59.25587559,3.974716507,1.959768113,8.609041093,1.672278076,1.732273736,13.87796075,23.71857831,10.83342596,3.940284448,8.164385377 +946684843963,39.84916705,77.97707479,2.828653646,1.950700265,9.719832132,1.576150765,1.635215142,12.47998255,28.00132545,7.617168735,9.476797219,8.907356161 +946684843964,35.51064019,83.11969596,2.398557735,1.974357993,10.35094834,1.779355931,1.746983663,11.21796051,22.41270131,3.239294792,11.01497203,9.603613314 +946684843965,38.65174808,76.84658802,3.641337703,1.915304147,9.404567649,1.663482633,1.491645353,12.50207029,28.45761884,11.49098479,4.294741946,9.188406661 +946684843966,33.98483769,85.83372186,2.938014058,1.838554379,10.73264452,1.693014942,1.863027017,12.03259525,29.7382292,8.871472933,7.183832181,9.2231187 +946684843967,34.66129432,89.503482,3.792268402,1.90142501,9.343568959,1.683920279,1.519895086,12.47461303,28.84828934,11.07419798,3.784139448,9.284674964 +946684843969,73.50347272,58.5667246,3.485069604,2.077073399,10.20841252,1.407911111,1.713822305,13.12954243,22.95787443,8.654288496,3.486178965,8.523159083 +946684843970,77.4115436,58.6134002,3.506654691,2.341481711,12.29892708,1.477353941,1.984463966,12.06976127,22.20340485,2.684883084,8.693587044,8.804567707 +946684843971,49.97551691,81.36779835,3.379006884,2.116626422,10.91302012,1.51745676,1.979760458,11.40066566,28.43351687,2.819503275,10.51321952,8.386102555 +946684843973,56.63980833,71.44164961,2.91997649,2.040887647,11.44798318,1.640411852,1.651602801,12.09890098,25.72638331,9.722899558,2.947430481,10.99131767 +946684843977,28.81323022,84.31870886,3.899005372,1.671967738,9.511613643,1.486317088,1.677971451,12.19182846,24.46127187,3.757603251,10.6692104,9.732812286 +946684843978,51.82346543,67.84800579,3.231173012,2.487860341,9.885424498,1.656183625,1.89878843,11.85035465,25.32796562,3.424220527,11.04646332,8.763640491 +946684843980,42.13578025,84.45796011,2.931570958,2.298892221,10.37935883,1.456573738,1.6954729,11.67948302,30.52318104,10.50930992,3.762492512,9.412538752 +946684843982,54.68334011,70.58572477,4.213628818,2.681864847,11.31951627,1.677955016,1.977973106,12.53680977,28.53207898,10.22921971,3.492043896,9.636675513 +946684843983,68.43719644,72.13958974,3.246572986,3.01247563,10.54853637,1.620458832,2.108439726,12.94266211,33.32931582,10.00735964,2.964589852,10.36573215 +946684843984,61.69845321,60.85682306,4.269393333,2.198890329,9.183014973,1.585178656,1.592850559,13.25138711,23.89863195,10.16593422,4.86861325,7.913083715 +946684843985,61.48467461,61.45614021,2.948065667,2.839636783,10.27586137,1.852112127,2.019804893,11.33794835,22.65951094,9.629149439,2.882283173,9.498646857 +946684843986,48.79240694,67.52736672,3.767032307,2.894967588,9.594077004,1.755316009,1.975406149,12.3278268,27.17769517,11.14913442,3.728641936,8.509445086 +946684843987,42.85837733,74.18031055,4.36898692,1.823668628,10.80502832,1.461614367,1.673538126,11.47159313,24.68199448,10.34971499,3.974822102,9.055664796 +946684843988,41.25462142,80.44185271,2.981788674,2.344018112,10.52813571,1.754669829,1.859874884,12.9336464,30.18942092,10.76109417,3.802234806,10.08285906 +946684843989,49.73366237,71.65276744,3.568056406,1.88921516,10.85158582,1.535959803,1.660104264,12.42841801,30.61108665,11.26618178,5.395819705,9.94982293 +946684843993,67.6297693,67.55693338,3.82501827,1.993883099,10.33975112,1.659558886,1.981681138,13.28369208,31.35215069,10.64626407,4.064142729,10.37618066 +946684843997,85.63305383,59.58430521,3.080561348,2.540037174,12.16998434,1.529125596,2.212155478,12.02019125,25.54055525,2.835776535,9.486797356,9.315252331 +946684843998,64.83046949,58.02278725,3.780513112,2.228624288,10.92827719,1.719951156,2.00963053,11.68366822,21.61007348,8.777556637,4.020285282,8.354152785 +946684843999,73.12152549,56.16043006,3.09345658,2.226930113,9.958206464,1.676277672,1.911784028,11.29296739,21.96474615,9.410808168,3.031184353,8.647637427 +946684844000,63.01720408,63.87868751,4.637092581,2.032352147,9.712182916,1.65604277,1.668270202,12.48735764,24.79659858,9.676759803,3.996266894,9.46986308 +946684844002,71.14118655,65.04566237,3.145578628,1.847615056,9.686249628,1.521756659,1.883815721,11.32948741,26.83957034,10.10313581,3.365319262,10.90070543 +946684844003,73.87844962,65.08806132,3.773034448,1.976257695,11.34942494,1.578396307,1.799532942,12.4400864,27.81238862,8.853413784,4.785870169,9.249730771 +946684844004,87.00357763,59.91096725,4.723999781,2.652004762,11.12314887,1.545893151,2.292741284,13.3960854,25.14550808,8.539268101,3.123861084,9.211581715 +946684844005,53.32830775,60.71956373,4.23970955,2.209044827,10.00387317,1.534306033,2.20353163,11.1992356,23.29851309,9.589795023,4.100716863,8.818903284 +946684844006,87.10733457,54.40787943,3.86917409,2.602030507,9.480757454,1.405135681,2.159485194,13.25209821,22.31419907,8.475692641,3.637156017,8.240553989 +946684844027,45.32797257,66.40454905,3.256349071,1.692080045,9.835200662,1.457868873,1.750217173,1.87532758,23.13152669,9.614067984,4.266390787,9.081211293 +946684844028,42.65236233,68.48169597,3.606865389,1.857678202,9.29320437,1.408556357,1.659535135,2.00856014,23.56770806,10.96777157,3.338207129,8.393694389 +946684844029,47.31281689,68.99831827,3.38824204,1.693989461,9.407858624,1.470366497,1.828285638,1.98300391,24.24275706,10.70351275,4.535875149,9.571820017 +946684844030,69.4836774,61.91488852,3.552386899,2.089098721,12.0303394,1.799641375,1.895451022,1.939206117,27.28257213,9.388637914,3.838108396,11.50947728 +946684844031,93.62092067,56.33492205,3.37640346,3.321829206,12.70062842,1.63257067,2.565820213,2.061012181,27.30144318,8.529984207,2.895718672,11.12845436 +946684844032,72.95593318,56.84302626,3.535773709,2.475364061,9.503004197,1.507402135,2.086967394,2.001881865,24.4244231,9.43788115,3.555888737,9.015195283 +946684844033,5.516436501,59.61583902,27.37325214,8.620478933,12.10455437,4.706261709,3.037415385,0.11673474,7.767222956,3.019926272,5.813551595,9.830081674 +946684844034,63.98674382,61.76102687,3.289081088,2.12544497,9.729528996,1.750123124,2.610802895,1.864066039,23.8394549,3.250312426,9.220240907,9.960738607 +946684844035,45.99589063,66.8801041,2.869598001,2.381218093,10.95278262,1.394653529,1.883910813,2.018333457,21.02125697,10.17606897,3.515018536,8.678548778 +946684844036,52.18620254,70.05670679,3.245385541,2.128447028,10.86836728,1.60175996,2.195359992,1.985061852,28.72343325,9.931504297,3.336691549,8.122606935 +946684844037,71.30391718,66.59759656,3.402207174,2.222519192,10.9208388,1.844958338,2.511648209,1.908472663,27.60657415,9.279766281,3.50383752,11.37966718 +946684844038,48.22000671,67.11634418,3.376906067,2.224769725,9.633369492,1.848524526,2.394737655,2.111851779,26.69679561,9.867417314,4.645709898,12.37740244 +946684844039,51.33669268,59.28115784,3.473032331,2.402129016,10.78046972,1.724980143,2.509709574,2.097630875,22.5041748,9.740267716,3.436285106,8.484742644 +946684844040,58.75094491,65.69745263,3.555436147,2.410375803,10.05910721,1.855018947,2.657197267,1.830245177,25.36592514,8.899598574,3.673812941,9.142039539 +946684844041,38.34877282,71.56421417,3.001616791,2.201395342,8.590908808,1.888143243,2.716640295,1.93698064,29.67750054,10.05079178,4.117675746,10.09320918 +946684844043,86.03481549,61.02959058,3.097341709,2.902784449,12.07289838,1.681673184,2.47435238,2.035179654,25.67808292,8.128847805,4.225167224,9.873276458 +946684844044,100.9908779,58.05674382,3.664044056,2.392454002,11.77023849,1.932822862,2.649489836,2.173322173,27.52379308,7.937270451,2.906249864,12.43514261 +946684844045,44.59788907,79.36673089,2.667915175,1.900003092,10.26141973,1.739240455,1.991415087,1.932394657,28.17841855,8.29869139,7.961643193,11.67206999 +946684844047,35.45125994,69.17185832,3.668347844,1.706641627,9.850077911,1.590236678,1.835909852,2.107603385,24.42123299,10.91265587,3.308250898,9.362159488 +946684844048,41.04676633,69.1068052,3.924807699,2.188510149,10.5141732,1.783637106,2.532210309,1.788215322,23.09219693,10.3745107,4.212013692,7.927872446 +946684844049,60.16139993,69.47207912,2.776253815,2.838022709,11.3427563,1.708149843,3.258109928,1.94104543,30.9830797,9.435546218,3.681127916,10.12104656 +946684844051,108.0057919,56.77172943,3.632220089,2.301231624,12.57051146,1.979982493,2.318974418,2.093783162,28.87386628,8.165442976,4.619957421,10.40874913 +946684844052,102.626149,59.89033621,2.95187215,2.356340497,11.78103656,1.759986576,2.257780881,2.104201526,28.45422093,7.884340768,2.761868434,9.969731896 +946684844053,88.02149029,53.94261182,2.563903278,2.251584825,11.86389541,1.694206543,2.70160575,1.903345586,20.03009452,7.584281148,3.189224021,8.969284238 +946684844054,93.16295316,50.61179216,4.391329482,2.301472625,11.32624248,1.538643464,2.443500294,2.010911566,20.67699453,7.771312184,2.889461116,9.680279613 +946684844055,110.6901536,57.89026138,2.988765145,2.215949439,11.60497944,1.679550702,2.581559132,2.040422015,24.4455954,7.301592899,3.325005717,9.445619927 +946684844056,85.68245375,60.52827971,3.719804803,2.274213594,11.28519277,1.51216909,1.926353029,1.932958951,21.62523779,7.582921773,3.021078611,9.24472504 +946684844057,85.19914088,50.06741293,3.472819627,2.850557854,9.267323727,2.029113886,2.654772256,1.754896349,20.47091595,8.848197514,3.436862755,7.839920854 +946684844058,69.23563247,64.01981563,3.251470906,2.021312469,11.27894821,1.671310595,2.142331313,1.965662409,25.74840646,8.44177367,3.568377045,9.419023574 +946684844059,76.95293253,56.68895438,3.242005431,1.914561323,11.09602917,1.743136756,1.926610584,2.023389312,28.75568216,8.237998091,3.72351266,10.00102073 +946684844060,30.0607926,67.93840956,3.083848468,1.917392755,10.13787631,1.725059516,2.188697297,2.248270417,23.13830511,10.66893783,4.218543612,7.936377991 +946684844061,48.9525548,60.59907736,3.059345921,2.252000626,10.27367983,1.472438098,2.013478555,2.011135372,20.99716401,9.264740473,3.197139813,8.833737092 +946684844062,44.62579624,62.25440382,3.256213943,1.771970803,10.13190684,1.505752475,1.91564765,1.975424752,22.82595222,9.729545613,3.178052229,7.754420483 +946684844063,64.1325496,54.63241547,3.902099234,2.282672031,10.52476288,1.381278937,2.052610249,1.937971681,25.35068277,8.971024062,3.040686502,7.20830885 +946684844065,33.81207555,73.91214327,4.092236141,2.120019756,9.950080639,2.026913824,2.174247509,2.304887537,27.6439562,10.53023288,3.446723293,11.10126125 +946684844067,30.04313363,69.91562486,3.794337041,2.035611861,9.59355821,2.048156589,2.59393083,2.310809025,24.83699667,11.07663763,4.099670445,7.874951048 +946684844068,8.303462963,79.80455503,28.35392581,5.361164138,10.53380901,2.463788491,3.871720869,0.158518331,5.226154343,2.25970273,3.891215249,10.59612566 +946684844069,26.48938596,74.38723566,3.394082581,2.227431089,8.653085683,1.951798046,2.205325952,2.286571223,25.91737695,10.72615023,4.185747419,9.07030387 +946684844070,26.09149159,72.47273374,4.241387006,1.949601301,8.901866487,2.015021155,2.330124875,2.380615513,25.17654964,10.63953631,3.895938166,7.140513948 +946684844071,37.59668105,63.33393499,3.20621126,2.271985624,8.831108062,1.765735571,2.793064349,2.041420825,24.46414739,10.28827529,3.056046341,7.2865973 +946684844072,38.57587093,73.39575773,3.591620711,2.067781628,9.166712249,1.531574372,1.886950103,2.028726118,27.18521861,10.66529031,3.223970965,10.32148785 +946684844073,31.57673513,72.03216413,3.34846729,1.79675546,9.280688774,1.714631292,1.859206543,2.283611272,28.39608524,10.7660131,3.306785981,10.13936529 +946684844074,30.51759109,65.20866287,3.818221477,2.267291049,8.957911749,2.071324843,2.449109814,2.283342256,23.60047141,11.15844822,3.28679868,7.928640696 +946684844075,32.46106278,82.11958764,3.404541744,1.776631304,10.20009811,1.35363274,1.757447119,1.949828348,25.37680254,10.46918741,2.967286604,8.557613939 +946684844076,43.07506486,71.09313078,3.243097469,1.913367409,8.530042128,1.356117641,1.782548092,1.883669269,26.87539189,4.022233544,10.56165465,8.469106813 +946684844078,6.502126829,55.60648323,26.62622642,12.06674444,41.67954797,2.615703914,2.850348312,0.061986842,4.325058875,1.273963343,2.521944078,12.03443598 +946684844079,36.00077076,84.82465314,3.292203934,1.749449952,9.71660884,1.642295145,1.612005181,2.05798348,28.98149305,9.911381598,2.978928013,10.34626076 +946684844080,27.91378826,92.19510265,4.677949635,2.285265262,11.12585507,1.476593401,2.159418322,2.240775439,30.38867172,10.65042632,5.111546746,8.800151923 From 0386b7ad9209b44e703315fb78b6e4ffc43b260f Mon Sep 17 00:00:00 2001 From: Raman R Date: Thu, 21 Sep 2023 11:53:05 +0200 Subject: [PATCH 90/90] Switched to API token. (#224) * Switched to API token. * Updated version. * Temporary disabled notebook tests. * Fixed mongo. * Queue env variables fix. --- docs/source/content/examples/1-brief_overview.ipynb | 2 +- mvg/http_client.py | 2 +- mvg/mvg.py | 4 ++-- tests/docker-compose.yml | 5 ++++- tests/mongo/mongo-init.js | 10 ++++++++++ tests/test_api_key | 1 + tests/test_notebooks.py | 5 +++++ 7 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 tests/mongo/mongo-init.js create mode 100644 tests/test_api_key diff --git a/docs/source/content/examples/1-brief_overview.ipynb b/docs/source/content/examples/1-brief_overview.ipynb index 5eb8262f..38c12beb 100644 --- a/docs/source/content/examples/1-brief_overview.ipynb +++ b/docs/source/content/examples/1-brief_overview.ipynb @@ -156,7 +156,7 @@ "source": [ "ENDPOINT = \"https://api.beta.multiviz.com\"\n", "# Replace by your own Token\n", - "VALID_TOKEN = \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE2MTA0NTY3NTQsImV4cCI6MTg5MzQ1NjAwMCwiY2xpZW50X2lkIjoiYXBmZWwiLCJzaXRlX2lkIjoic3RydWRlbCJ9.m7LYLLbTW0voLzEOTYY8nf5dKl_XPp2c5YOyF_66M6mnPICdqBVzF2JcaN7hUlQEWBzxysma5tw6QfU1NspwPeDGT87_sZKAWWqnBmgjP7OYUNYvt1fg-o5lylsHSriradI6SBJv0vcHYU3y_Mey_OmV9Vu12OnQWRBam14qqT0\"" + "VALID_TOKEN = os.environ['TEST_TOKEN']" ] }, { diff --git a/mvg/http_client.py b/mvg/http_client.py index 78a020b8..d46f94aa 100644 --- a/mvg/http_client.py +++ b/mvg/http_client.py @@ -61,7 +61,7 @@ def request(self, method, path, headers=None, do_not_raise=None, **kwargs): session.mount("https://", HTTPAdapter(max_retries=self.retries)) _headers = { - "Authorization": f"Bearer {self.token}", + "X-Vibium-Api-Key": self.token, "User-Agent": f"mvg/{self.mvg_version}", } if headers: diff --git a/mvg/mvg.py b/mvg/mvg.py index 9932fb42..55c4df89 100644 --- a/mvg/mvg.py +++ b/mvg/mvg.py @@ -63,8 +63,8 @@ def __init__(self, endpoint: str, token: str): self.endpoint = endpoint self.token = token - self.mvg_version = self.parse_version("v0.14.13") - self.tested_api_version = self.parse_version("v0.9.14") + self.mvg_version = self.parse_version("v0.15.0") + self.tested_api_version = self.parse_version("v0.11.5") # Get API version try: diff --git a/tests/docker-compose.yml b/tests/docker-compose.yml index b32996fd..cdcc8880 100644 --- a/tests/docker-compose.yml +++ b/tests/docker-compose.yml @@ -10,7 +10,8 @@ x-vibium-service: &vibium-service AWS_SECRET_ACCESS_KEY: test AWS_ENDPOINT_URL: http://localstack:4566 MONGO_URI: mongodb://mongo:27017/ - ACTIVE_PROFILE: local + ACTIVE_PROFILE: docker + MESSAGE_PRODUCER__FEATURE_TO_QUEUE: "{}" volumes: - "vibium-pipeline:/pipeline" networks: @@ -53,6 +54,8 @@ services: restart: always environment: - MONGO_INITDB_DATABASE=vibiumdb + volumes: + - "./mongo:/docker-entrypoint-initdb.d:ro" networks: - vibium_net diff --git a/tests/mongo/mongo-init.js b/tests/mongo/mongo-init.js new file mode 100644 index 00000000..d61fda47 --- /dev/null +++ b/tests/mongo/mongo-init.js @@ -0,0 +1,10 @@ +db.createCollection('api_keys'); +db.api_keys.insertOne({ + "key_id": "Gjjlg2Ez", + "key_hash": "cdb51a5eb54ae8604af9d26bbbec8b469db4c556ff72789f031ef616e0dddbb9", + "client_id": "mvg_test", + "site_id": "test", + "app_id": "test", + "created_at": ISODate("2023-09-19T11:26:48.492Z"), + "last_active": null +}) \ No newline at end of file diff --git a/tests/test_api_key b/tests/test_api_key new file mode 100644 index 00000000..7fcbc743 --- /dev/null +++ b/tests/test_api_key @@ -0,0 +1 @@ +Gjjlg2Ez.ycTA8NL5qyoLxfI49ePVgBo4Z6AvKQwk \ No newline at end of file diff --git a/tests/test_notebooks.py b/tests/test_notebooks.py index 2ff20b1b..0301e0a4 100644 --- a/tests/test_notebooks.py +++ b/tests/test_notebooks.py @@ -1,7 +1,12 @@ +import pytest from pathlib import Path import papermill as pm +@pytest.mark.skip( + reason="Notebooks rely depend on data from, which needs to be fixed " + "(https://github.com/vikinganalytics/va-data-charlie)." +) def test_notebooks(vibium): notebooks_path = ( Path(__file__).parents[1] / "docs" / "source" / "content" / "examples"