{ "cells": [ { "cell_type": "markdown", "id": "67fc810a", "metadata": {}, "source": [ "# Comparing runtimes of different stop detection algorithms on toy datasets" ] }, { "cell_type": "markdown", "id": "f152187c", "metadata": {}, "source": [ "Here we compare the runtimes of four different stop detection algorithms: Lachesis, grid-based, temporal DBSCAN, and HDBSCAN." ] }, { "cell_type": "code", "execution_count": 1, "id": "474229df", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Lachesis execution time: 0.01671910285949707 seconds\n", "TA-DBSCAN execution time: 0.015048027038574219 seconds\n", "TA-DBSCAN clustering time: 0.0 seconds\n", "TA-DBSCAN label extraction time: 0.015048027038574219 seconds\n", "Grid-Based execution time: 0.01604151725769043 seconds\n", "HDBSCAN execution time: 0.24063372611999512 seconds\n", "HDBSCAN clustering time: 0.24063372611999512 seconds\n", "HDBSCAN label extraction time: 0.0 seconds\n" ] } ], "source": [ "%matplotlib inline\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "# Imports\n", "import nomad.io.base as loader\n", "import geopandas as gpd\n", "from shapely.geometry import box\n", "import pandas as pd\n", "import numpy as np\n", "from nomad.stop_detection.viz import plot_stops_barcode, plot_pings, plot_stops, plot_time_barcode\n", "import nomad.stop_detection.dbscan as DBSCAN\n", "import nomad.stop_detection.lachesis as LACHESIS\n", "import nomad.stop_detection.grid_based as GRID_BASED\n", "import nomad.stop_detection.hdbscan as HDBSCAN\n", "import nomad.filters as filters \n", "import nomad.stop_detection.postprocessing as post\n", "import time\n", "from tqdm import tqdm\n", "\n", "# Load data\n", "import nomad.data as data_folder\n", "from pathlib import Path\n", "data_dir = Path(data_folder.__file__).parent\n", "city = gpd.read_parquet(data_dir / 'garden-city-buildings-mercator.parquet')\n", "outer_box = box(*city.total_bounds).buffer(15, join_style='mitre')\n", "\n", "filepath_root = 'gc_data_long/'\n", "tc = {\n", " \"user_id\": \"gc_identifier\",\n", " \"timestamp\": \"unix_ts\",\n", " \"x\": \"dev_x\",\n", " \"y\": \"dev_y\",\n", " \"ha\":\"ha\",\n", " \"date\":\"date\"}\n", "\n", "users = ['admiring_brattain']\n", "traj = loader.sample_from_file(filepath_root, format='parquet', users=users, filters=('date','==', '2024-01-01'), traj_cols=tc)\n", "\n", "# Lachesis (sequential stop detection)\n", "start_time = time.time()\n", "stops = LACHESIS.lachesis(traj, delta_roam=20, dt_max = 60, dur_min=5, complete_output=True, keep_col_names=True, traj_cols=tc)\n", "execution_time_lachesis = time.time() - start_time\n", "print(f\"Lachesis execution time: {execution_time_lachesis} seconds\")\n", "\n", "# Density based stop detection (Temporal DBSCAN)\n", "start_time = time.time()\n", "user_data_tadb = traj.assign(cluster=DBSCAN.ta_dbscan_labels(traj, time_thresh=240, dist_thresh=15, min_pts=3, traj_cols=tc))\n", "clustering_time_tadbscan = time.time() - start_time\n", "start_time_post = time.time()\n", "cluster_labels_tadb = user_data_tadb['cluster']\n", "execution_time_tadbscan = time.time() - start_time\n", "post_time_tadbscan = time.time() - start_time_post\n", "print(f\"TA-DBSCAN execution time: {execution_time_tadbscan} seconds\")\n", "print(f\"TA-DBSCAN clustering time: {clustering_time_tadbscan} seconds\")\n", "print(f\"TA-DBSCAN label extraction time: {post_time_tadbscan} seconds\")\n", "\n", "# Grid-based\n", "start_time = time.time()\n", "traj['h3_cell'] = filters.to_tessellation(traj, index=\"h3\", res=10, traj_cols=tc, data_crs='EPSG:3857')\n", "stops_gb = GRID_BASED.grid_based(traj, time_thresh=240, complete_output=True, traj_cols=tc, location_id='h3_cell')\n", "execution_time_grid = time.time() - start_time\n", "print(f\"Grid-Based execution time: {execution_time_grid} seconds\")\n", "\n", "# HDBSCAN\n", "start_time = time.time()\n", "user_data_hdb = traj.assign(cluster=HDBSCAN.hdbscan_labels(traj, time_thresh=240, min_pts=3, min_cluster_size=2, traj_cols=tc))\n", "clustering_time_hdbscan = time.time() - start_time\n", "start_time_post = time.time()\n", "cluster_labels_hdb = user_data_hdb['cluster']\n", "execution_time_hdbscan = time.time() - start_time\n", "post_time_hdbscan = time.time() - start_time_post\n", "print(f\"HDBSCAN execution time: {execution_time_hdbscan} seconds\")\n", "print(f\"HDBSCAN clustering time: {clustering_time_hdbscan} seconds\")\n", "print(f\"HDBSCAN label extraction time: {post_time_hdbscan} seconds\")" ] }, { "cell_type": "markdown", "id": "c88f426d", "metadata": {}, "source": [ "## Summary of Single-User Performance" ] }, { "cell_type": "markdown", "id": "6a678431", "metadata": {}, "source": [ "### Lachesis" ] }, { "cell_type": "code", "execution_count": 2, "id": "b7480c93", "metadata": {}, "outputs": [ { "data": { "image/png": "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bQxh165dCofD/TaApaWl2r59e9KWwzgw20jGwa5du3TrrbfqyiuvjHs54XBYDz74oFatWtVvHBx11FGaPXu2Hn30UVmWpfvvv59xMMYSGQe/+c1vVFhYqMLCQv3973/Xs88+K7fbHddy0mUcZFxIa2lp0eOPP65LLrkk9tgll1yie+65Z8DnX3LJJXrttdf00Ucf8YU0XHd3t84//3xZlqXf/va3wz7/r3/9qwoLC5Wbm6uzzjpLF1xwgZYuXdrveYsXL9b999+vjz76SK+99pouvvhiG7pHqjAOMlMgEFB1dbUOO+ywAT/PvqL/oOfl5emKK67QkiVL9I1vfKPf8xYvXqz77rtPL730ktrb23X22Wfb0D2S4eKLL9a7776rl156SRUVFTr//PP7nQDUV7qNg8T2D6eBP/7xj+rs7NRxxx0Xe8yyLEUiEdXX16uioqLX8ydNmqTPfe5zuvzyy9XZ2amzzjpLbW1tY902hhENaI2NjXrhhRfi2ot28skn67e//a3cbremTp066OGQs846S1deeaUuv/xynXPOOZo0aVKy28cQDjjgALlcLu3YsaPX4zt27NCBBx446vqMg/SQyDhoa2vTmWeeGTvhIzs7e9j6F198sX7wgx8oLy9PU6ZMkdM58D6Kiy++WN/73ve0dOlSXXrppQkfRsXoJDIOiouLVVxcrLlz52rhwoWaOHGinnjiCV100UWD1k+3cZBxe9Luuecefec739HKlStj/7333nvy+Xyxw5p9LV68WC+++KK+/OUvy+VyjXHHGE40oK1bt07PPfdc3P94FhQUaM6cOZo5c+aQX7CsrCx9+ctf1osvvsie1BRwu91asGCBnn/++dhjkUhEzz//vI4//vhR12ccpId4x0EgENAZZ5wht9utJ598Urm5uXHVLy4u1pw5czRt2rRB/2GWJK/Xq89//vN66aWXGAcpMNLtgWVZsixLXV1dQ9ZPt3GQsj8R9u7dq/Xr18d+3rhxo1auXCmv1xs7zdXv92vTpk2xa2J9+OGHkqQDDzxwwL+wV65cqRUrVuihhx7SIYcc0ut3F110kW655Rbddttt/TbUZ555pnbu3Bn3HCckz3DjoLu7W+edd55WrFihv/71rwqHw7F5CV6vN+75B8O59dZbde2117L3JEWuueYaXXbZZTr66KN17LHH6pe//KXa29v11a9+Nfac7du3a/v27bHxsnr1ahUVFWnmzJnyer1J6YNxkFrDjYNoQOvo6NCDDz6oQCCgQCAgSZo8eXLS/si+//779Zvf/IZxkCLDjYOPPvpIf/rTn3TGGWdo8uTJ2rJli3784x8rLy8vqYclTRgHKQtpb7/9tk4++eTYz9dcc40k6bLLLotN3n3yySd7baQvvPBCSdLNN9884ByEe+65R4cddli/gCZJX/jCF3TVVVfpb3/7W79rbDkcDh1wwAGjfUsYgeHGwdatW/Xkk09Kko488sher12+fLlOOumkpPThdrsZAyl0wQUXaOfOnbrpppu0fft2HXnkkXr66ad7TR7+n//5H/3whz+M/XziiSdKku677z595StfSUofjIPUGm4crFixInbdyzlz5vR67caNG5N2odG8vDzl5eUlpRYSN9w4yM3NVW1trX75y19qz549Ki0t1YknnqhXX31VJSUlSevDhHHgsCzLSmkHAAAA6Cfj5qQBAABkAkIaAACAgQhpAAAABiKkAQAAGIiQBgAAYCBCGgAAgIEIaQAAAAYipAEAABiIkAYAAGAgQhoAAICBCGkAAAAGIqQBAAAY6P8HCINZghvo1KQAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, (ax_map, ax_barcode) = plt.subplots(2, 1, figsize=(6,6.5),\n", " gridspec_kw={'height_ratios':[10,1]})\n", "\n", "gpd.GeoDataFrame(geometry=[outer_box], crs='EPSG:3857').plot(ax=ax_map, color='#d3d3d3')\n", "city.plot(ax=ax_map, edgecolor='white', linewidth=1, color='#8c8c8c')\n", "\n", "plot_stops(stops, ax=ax_map, cmap='Reds')\n", "plot_pings(traj, ax=ax_map, s=6, point_color='black', cmap='twilight', traj_cols=tc)\n", "ax_map.set_axis_off()\n", "\n", "plot_time_barcode(traj[tc['timestamp']], ax=ax_barcode, set_xlim=True)\n", "plot_stops_barcode(stops, ax=ax_barcode, cmap='Reds', set_xlim=False, timestamp='unix_ts')\n", "\n", "plt.tight_layout(pad=0.1)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 3, "id": "98cdda1f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Summary of Single-User Performance\n", "Lachesis execution time: 0.01671910285949707 seconds\n", "TA-DBSCAN execution time: 0.015048027038574219 seconds\n", "Grid-Based execution time: 0.01604151725769043 seconds\n", "HDBSCAN execution time: 0.24063372611999512 seconds\n" ] } ], "source": [ "print(\"Summary of Single-User Performance\")\n", "print(f\"Lachesis execution time: {execution_time_lachesis} seconds\")\n", "print(f\"TA-DBSCAN execution time: {execution_time_tadbscan} seconds\")\n", "print(f\"Grid-Based execution time: {execution_time_grid} seconds\")\n", "print(f\"HDBSCAN execution time: {execution_time_hdbscan} seconds\")" ] }, { "cell_type": "code", "execution_count": 4, "id": "41e9a154", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Runtime Disaggregation\n", "Lachesis clustering time: 0.01671910285949707 seconds\n", "--------------------------------\n", "TA-DBSCAN clustering time: 0.0 seconds\n", "TA-DBSCAN label extraction time: 0.015048027038574219 seconds\n", "--------------------------------\n", "Grid-Based clustering time: 0.01604151725769043 seconds\n", "--------------------------------\n", "HDBSCAN clustering time: 0.24063372611999512 seconds\n", "HDBSCAN label extraction time: 0.0 seconds\n" ] } ], "source": [ "print(\"Runtime Disaggregation\")\n", "print(f\"Lachesis clustering time: {execution_time_lachesis} seconds\")\n", "print(\"--------------------------------\")\n", "print(f\"TA-DBSCAN clustering time: {clustering_time_tadbscan} seconds\")\n", "print(f\"TA-DBSCAN label extraction time: {post_time_tadbscan} seconds\")\n", "print(\"--------------------------------\")\n", "print(f\"Grid-Based clustering time: {execution_time_grid} seconds\")\n", "print(\"--------------------------------\")\n", "print(f\"HDBSCAN clustering time: {clustering_time_hdbscan} seconds\")\n", "print(f\"HDBSCAN label extraction time: {post_time_hdbscan} seconds\")" ] }, { "cell_type": "markdown", "id": "5c9ee070", "metadata": {}, "source": [ "## Pings vs Runtime" ] }, { "cell_type": "code", "execution_count": 5, "id": "62ed6a42", "metadata": {}, "outputs": [], "source": [ "traj = loader.sample_from_file(filepath_root, format='parquet', traj_cols=tc, seed=10)\n", "\n", "# H3 cells for grid_based stop detection method\n", "traj['h3_cell'] = filters.to_tessellation(traj, index=\"h3\", res=10, traj_cols=tc, data_crs='EPSG:3857')\n", "pings_per_user = traj['gc_identifier'].value_counts()" ] }, { "cell_type": "code", "execution_count": 6, "id": "baafc0b8", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████████████████████████████████████████████████████████████████████████████| 37/37 [00:24<00:00, 1.50it/s]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", " 75%|██████████████████████████████████████▎ | 3/4 [00:00<00:00, 6.61it/s]" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", "100%|███████████████████████████████████████████████████| 4/4 [00:00<00:00, 7.10it/s]" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "# Approximately 5 minutes for 40 users\n", "results = []\n", "for user, n_pings in tqdm(pings_per_user.items(), total=len(pings_per_user)):\n", " user_data = traj.query(\"gc_identifier == @user\")\n", "\n", " # For location based\n", " start_time = time.time()\n", " stops_gb = GRID_BASED.grid_based(user_data, time_thresh=240, complete_output=True, traj_cols=tc, location_id='h3_cell')\n", " execution_time = time.time() - start_time\n", " results += [pd.Series({'user':user, 'algo':'grid_based', 'execution_time':execution_time, 'n_pings':n_pings})]\n", " \n", " # For Lachesis\n", " start_time = time.time()\n", " stops_lac = LACHESIS.lachesis(user_data, delta_roam=30, dt_max=240, complete_output=True, traj_cols=tc)\n", " execution_time = time.time() - start_time\n", " results += [pd.Series({'user':user, 'algo':'lachesis', 'execution_time':execution_time, 'n_pings':n_pings})]\n", "\n", " # For TADbscan\n", " start_time = time.time()\n", " user_data_tadb = user_data.assign(cluster=DBSCAN.ta_dbscan_labels(user_data, time_thresh=240, dist_thresh=15, min_pts=3, traj_cols=tc))\n", " # - post-processing\n", " stops_tadb = user_data_tadb[user_data_tadb.cluster != -1]\n", " execution_time = time.time() - start_time\n", " results += [pd.Series({'user':user, 'algo':'tadbscan', 'execution_time':execution_time, 'n_pings':n_pings})]\n", "\n", " # For HDBSCAN\n", " start_time = time.time()\n", " user_data_hdb = user_data.assign(cluster=HDBSCAN.hdbscan_labels(user_data, time_thresh=240, min_pts=3, min_cluster_size=2, traj_cols=tc))\n", " # - post-processing\n", " stops_hdb = user_data_hdb[user_data_hdb.cluster != -1]\n", " execution_time = time.time() - start_time\n", " results += [pd.Series({'user':user, 'algo':'hdbscan', 'execution_time':execution_time, 'n_pings':n_pings})]\n", "\n", "results = pd.DataFrame(results)" ] }, { "cell_type": "code", "execution_count": 7, "id": "8e8546e8", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAcoAAAHWCAYAAAD3iMk8AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACU2UlEQVR4nOzdd3gUVffA8e/2bMqmEnon9F6lo6CAimIXkBrAAjZEfVFB1FexISpdkCJFwAKvPwuoIBZEpIig9Bp6SduUzbaZ3x9JliwpJCHJppzP8+yT7MzszNkE9uTeufdcjaqqKkIIIYTIkdbXAQghhBClmSRKIYQQIg+SKIUQQog8SKIUQggh8iCJUgghhMiDJEohhBAiD5IohRBCiDxIohRCCCHyIIlSCCGEyIMkSlGmaTQapk6d6uswRDHo1asXvXr18nUYuRoxYgR16tTxdRiiBEiiFEL4zL59+5g6dSonTpzwdSg5Onv2LFOnTmX37t2+DkX4kEZqvYqyLC0tDb1ej16v93UoohA+//xz7rvvPn766adsrUeHwwGA0Wj0QWTpduzYQYcOHVi8eDEjRozw2ud0OlEUBZPJ5JvgRImRTxdRpvn5+fk6BFFMfJkg88NgMPg6BFFCpOtVFImpU6ei0Wg4cuQII0aMICQkhODgYEaOHElqamqBzjVixAgCAwM5duwYffv2JSAggGrVqvHqq69ydQfI1fcoCxKHzWbjiSeeICIigqCgIO644w7OnDmT7ZxJSUk89dRT1KlTB5PJRGRkJDfffDO7du3K9T18/vnnaDQafv7552z75s+fj0aj4Z9//gHg/PnzjBw5kho1amAymahatSp33nlnvrojDxw4wL333ktYWBh+fn60b9+er776yrP/4sWLVKpUiV69enn97I4cOUJAQAAPPPCAZ5vdbufll1+mQYMGmEwmatasyXPPPYfdbs923eXLl9OxY0f8/f0JDQ2lR48efP/99579ud07rlOnjqdltmTJEu677z4AbrzxRjQaDRqNhs2bNwM536O8ePEi0dHRVK5cGT8/P1q1asXSpUu9jjlx4gQajYZ3332Xjz76iPr162MymejQoQPbt2+/5s800+bNm+nQoQMAI0eO9MS3ZMkSIPs9yqzXnT17NvXq1cPf359bbrmFU6dOoaoqr732GjVq1MBsNnPnnXcSFxeX7brfffcd3bt3JyAggKCgIG677Tb+/ffffMctip60KEWRuv/++6lbty7Tpk1j165dLFy4kMjISN56660CncftdtOvXz9uuOEG3n77bdavX8/LL7+My+Xi1VdfLZI4RowYwZo1axg6dCg33HADP//8M7fddlu2cz3yyCN8/vnnjB8/nqZNmxIbG8tvv/3G/v37adu2bY7Xv+222wgMDGTNmjX07NnTa9/q1atp1qwZzZs3B+Cee+7h33//5fHHH6dOnTpcvHiRH374gZiYmDwHi/z777907dqV6tWr85///IeAgADWrFnDwIED+eKLL7jrrruIjIxk7ty53HfffcycOZMnnngCRVEYMWIEQUFBzJkzBwBFUbjjjjv47bffGDt2LE2aNGHv3r3MmDGDQ4cOsW7dOs91X3nlFaZOnUqXLl149dVXMRqNbNu2jU2bNnHLLbdc83eTqUePHjzxxBN8+OGHvPDCCzRp0gTA8/VqNpuNXr16ceTIEcaPH0/dunX57LPPGDFiBAkJCTz55JNex69cuZKkpCQefvhhNBoNb7/9NnfffTfHjh3LV2uwSZMmvPrqq0yZMoWxY8fSvXt3ALp06ZLn61asWIHD4eDxxx8nLi6Ot99+m/vvv5+bbrqJzZs38/zzz3PkyBFmzpzJxIkTWbRokee1y5YtY/jw4fTt25e33nqL1NRU5s6dS7du3fjrr79k8JCvqEIUgZdfflkF1FGjRnltv+uuu9Tw8PACnWv48OEqoD7++OOebYqiqLfddptqNBrVS5cuebYD6ssvv1zgOHbu3KkC6lNPPeV13IgRI7KdMzg4WB03blyB3oOqquqgQYPUyMhI1eVyebadO3dO1Wq16quvvqqqqqrGx8ergPrOO+8U+Py9e/dWW7RooaalpXm2KYqidunSRY2KisoWi7+/v3ro0CH1nXfeUQF13bp1nv3Lli1TtVqt+uuvv3q9bt68eSqgbtmyRVVVVT18+LCq1WrVu+66S3W73V7HKori+f7qn2Gm2rVrq8OHD/c8/+yzz1RA/emnn7Id27NnT7Vnz56e5++//74KqMuXL/dsczgcaufOndXAwEDVarWqqqqqx48fVwE1PDxcjYuL8xz7v//9TwXU//u//8t2rdxs375dBdTFixdn2zd8+HC1du3anueZ161UqZKakJDg2T5p0iQVUFu1aqU6nU7P9kGDBqlG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alfVRLzpppu8ksbVLa25c+dSv359pk+fDkCjRo3Yu3cvb731Vr5jcTqdzJo1i06dOgGwdOlSmjRpwp9//knHjh1p1aoVrVq18hz/2muvsXbtWr766ivGjx9PTEwMAQEB3H777QQFBVG7dm3atGkDgN1u54033uDHH3+kc+fOANSrV4/ffvuN+fPn07NnzyJ5D0II33PGxOC+dBmNwYBfy5Y+i0MS5TWYDTr2vdo338frtVosZn2OydJi1hMZ5MfacV3yfe38OnbsGE6nk44dO3q2BQcH06iR983v9teok7h//35PgsuUmZDyS6/X06HDldFpjRs3JiQkhP3799OxY0eSk5OZOnUq33zzDefOncPlcmGz2YiJiQHg5ptvpnbt2tSrV49+/frRr18/7rrrLvz9/Tly5AipqancfPPNXtd0OByeZFoU70EI4XuZ9yf9WrZEm7GIvC9IorwGjUZToO5Pm8PFyC51+WDj4Wz7Rnap6/PRrwEBAT67dqaJEyfyww8/8O6779KgQQPMZjP33nsvDkd6KzsoKIhdu3axefNmvv/+e6ZMmcLUqVPZvn07ycnJAHzzzTdUr17d67wmH/5HEkIUvdLQ7QoymKfImY16HutVnyd7R2ExpydEi1nPk72jeKxX/WJLkvXq1cNgMLB9+3bPtsTERA4dOlSg82R2kWb1xx9/FOgcLpeLHRn/wAEOHjxIQkICTZo0AWDLli2MGDGCu+66ixYtWlClSpVsXcB6vZ4+ffrw9ttvs2fPHk6cOMGmTZto2rQpJpOJmJgYGjRo4PWoWbNmkb0HIYTveRZq9kF916ykRVkMTAYdD/esx7gbG3jNoyzOqSFBQUEMHz6cZ599lrCwMCIjI3n55ZfRarUFKvn0yCOPMH36dJ599llGjx7Nzp07WbJkSYFiMRgMPP7443z44Yfo9XrGjx/PDTfc4OkWjoqK4ssvv2TAgAFoNBomT56Moiie13/99dccO3aMHj16EBoayrfffouiKDRq1IigoCAmTpzI008/jaIodOvWjcTERLZs2YLFYmH48OFF8h6EEL7lvHARZ0wMaLWYM26r+Iq0KIuJv1GPUa8lPNCEUa8tke7W9957j86dO3P77bfTp08funbtSpMmTfDz88v3OWrVqsUXX3zBunXraNWqFfPmzeONN94oUBz+/v48//zzDB48mK5duxIY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Go2Go0ePEh0dTd26dTGbzTRq1MizqHImt9vNhAkTCAkJITw8nOeeey7Ha7pcLsaPH09wcDARERFMnjzZ67g5c+YQFRWFn58flStX5t577/XsUxSFt99+mwYNGmAymahVqxavv/66Z//zzz9Pw4YN8ff3p169ekyePNlrncypU6fSunVrli1bRp06dQgODubBBx8kKSkpf79AIUSp5BnIU4oLDWSSFuU12Fw2Oq3slK9jQ02hrL9nPSsPrMxx/8oDKxnZfCT9vuhHvD3+mufbNngb/oZrL/T8wQcfcOjQIZo3b86rr76aHktoKDVq1OCzzz4jPDyc33//nbFjx1K1alXuv/9+AKZPn86SJUtYtGgRTZo0Yfr06axdu5abbrrJ6/xLly4lOjqaP//8kx07djB27Fhq1arFmDFj2LFjB0888QTLli2jS5cuxMXF8euvv3peO2nSJBYsWMCMGTPo1q0b586d48CBA579QUFBLFmyhGrVqrF3717GjBlDUFAQzz33nOeYo0ePsm7dOr7++mvi4+O5//77efPNN70SrhCi7FBdrvSpIUiirHAizBHEpcV5WpJXszqsxNvjiTBH5CtR5ldwcDBGoxF/f3+qVKni2f7KK694vq9bty5bt25lzZo1nkT5/vvvM2nSJO6++24A5s2bx4YNG7Kdv2bNmsyYMQONRkOjRo3Yu3cvM2bMYMyYMcTExBAQEMDtt99OUFAQtWvXpk2bNgAkJSXxwQcfMGvWLIYPHw5A/fr16datm+fcL730kuf7OnXqMHHiRFatWuWVKBVFYcmSJQQFBQEwdOhQNm7cKIlSiDIqbf8BlNRUtBYLpqgoX4dzTZIor8GsN7Nt8LZ8H2/QGrAYLTkmS4vRQqQ5kuW3Ls/3ta/H7NmzWbRoETExMdhsNhwOB61btwYgMTGRc+fO0anTldayXq+nffv22bpfb7jhBq97CJ07d2b69Om43W5uvvlmateuTb169ejXrx/9+vXjrrvuwt/fn/3792O32+ndu3euMa5evZoPP/yQo0ePkpycjMvlyrYuXJ06dTxJEqBq1apcvHjxen40Qggf8pSta9sWjbb03wEs/RH6mEajwd/gn++HS3ExpPGQHM81pPEQXIor3+e6nhvcq1atYuLEiURHR/P999+ze/duRo4cicPhKPQ5cxIUFMSuXbv49NNPqVq1KlOmTKFVq1YkJCRgvsZK5Vu3bmXIkCHceuutfP311/z111+8+OKL2WI0GAxezzUaDYqiFOn7EEKUHJunEHrpnj+ZSRJlETMbzES3jObRlo9iMaa3jCxGC4+2fJToltGYDdfXSsyN0WjE7XZ7nm/ZsoUuXbrw2GOP0aZNGxo0aMDRo0c9+4ODg6latSrbtl1pLbtcLnZm/APOKusxAH/88QdRUVHodDogvSXap08f3n77bfbs2cOJEyfYtGkTUVFRmM1mNm7cmGPMv//+O7Vr1+bFF1+kffv2REVFcfLkyev6OQghSjdVVT0DeUpzfdespOu1GJh0JkY2H8mYlmNIciYRZAjCpbiKdWpInTp12LZtGydOnCAwMJCoqCg++eQTNmzYQN26dVm2bBnbt2+nbt26ntc8+eSTvPnmm0RFRdG4cWPee+89EhISsp07JiaGCRMm8PDDD7Nr1y5mzpzJ9OnTAfj66685duwYPXr0IDQ0lG+//RZFUWjUqBF+fn48//zzPPfccxiNRrp27cqlS5f4999/iY6OJioqipiYGFatWkWHDh345ptvWLt2bbH9jIQQvuc4dgx3fDwaPz/MzZr5Opx8kURZTDJbjmG6MAAMOkNeh1+3iRMnMnz4cJo2bYrNZuPAgQP89ddfPPDAA2g0GgYNGsRjjz3Gd99953nNM888w7lz5xg+fDharZZRo0Zx1113kZiY6HXuYcOGYbPZ6NixIzqdjieffJKxY8cCEBISwpdffsnUqVNJS0sjKiqKTz/9lGYZ/wEmT56MXq9nypQpnD17lqpVq/LII48AcMcdd/D0008zfvx47HY7t912G5MnT2bq1KnF+rMSQviOpzXZqhUao9HH0eSPRs3vZL1ywmq1EhwcTGJiYrZBI2lpaRw/fpy6devi5+fnowiFL8jvXoiScebZ57D+3/8R8dhjVHricZ/Gklc+yEruUQohhCgxZWGh5qtJohRCCFEinGfO4Dp7DvR6zBlT1coCSZRCCCFKRGrGqHq/pk3R+l+76lhpIYlSCCFEibiyUHPZ6XYFSZRCCCFKSGaLsrSvP3k1SZRCCCGKnSsuDkdG0RNzRj3oskISpRBCiGKX2Zo0RTVAHxrq42gKRhKlEEKIYmfLLDRQBpbVupokSiGEEMUudUfG/Ml2kiiFj/Tq1YunnnqqQK/RaDSsW7cOgBMnTqDRaNi9e3eRxyaEqNjcySmk7d8PlK1CA5kkURYTxWZDdTpxxcaiOp0oNpuvQxJCCJ+w7d4NioKhRg0MWRaXLyskURYDxW4nduFCDnXtxuGu3TjUtRuxCz9Gsdt9HZoQQpS41B3bgbI3fzKTTxPltGnT6NChA0FBQURGRjJw4EAOHjyY52uWLFmCRqPxehRnEWtVVVFSU/P9cCcnE/vRR1yePQfFagVAsVq5PHs2sR99hDs5Od/nKmi9ekVReO655wgLC6NKlSpeq3AcPnyYHj164OfnR9OmTfnhhx9yPMeBAwfo0qULfn5+NG/enJ9//tmzLz4+niFDhlCpUiXMZjNRUVEsXrzYs//06dMMGjSIsLAwAgICaN++vWcty6NHj3LnnXdSuXJlAgMD6dChAz/++KPXtevUqcMbb7zBqFGjCAoKolatWnz00UcF+hkIIUqfKwN5ymai9OkyWz///DPjxo2jQ4cOuFwuXnjhBW655Rb27dtHQEBArq+zWCxeCVWj0RRbjKrNxsG2+fvl6kJDabDxR+KWLc9xf9yy5YRHR3Okdx/c8fHXPF+jXTvRFKDM09KlS5kwYQLbtm1j69atjBgxgq5du9K7d2/uvvtuKleuzLZt20hMTMz1fuazzz7L+++/T9OmTXnvvfcYMGAAx48fJzw8nMmTJ7Nv3z6+++47IiIiOHLkCLaMLuXk5GR69uxJ9erV+eqrr6hSpQq7du1CURTP/ltvvZXXX38dk8nEJ598woABAzh48CC1atXyXH/69Om89tprvPDCC3z++ec8+uij9OzZk0aNGuX75yCEKD0UhwPbnj0A+JfBEa/g40S5fv16r+dLliwhMjKSnTt30qNHj1xfp9FoqFIK+7n1lSJwxcV5WpJXU6xWXPHx6CtF5CtRFlTLli15+eWXAYiKimLWrFls3LgRVVU5cOAAGzZsoFq1agC88cYb9O/fP9s5xo8fzz333APA3LlzWb9+PR9//DHPPfccMTExtGnThvYZ/9jr1Knjed3KlSu5dOkS27dvJywsfQ3OBg0aePa3atWKVq1aeZ6/9tprrF27lq+++orx48d7tt9666089thjADz//PPMmDGDn376SRKlEGVU2t69qA4HuvBwjFk+M8qSUrVwc+aCwZkftLlJTk6mdu3aKIpC27ZteeONNzwLBV/Nbrdjz3Jv0JpLEsuNxmym0a6d+T9er0drseSYLLUWC4ZKlaizalW+r10QLVu29HpetWpVLl68yP79+6lZs6YnSQJ07tw5x3Nk3a7X62nfvj37M0arPfroo9xzzz3s2rWLW265hYEDB9KlSxcAdu/eTZs2bXL93SUnJzN16lS++eYbzp07h8vlwmazERMTk+t7yPyD6OLFiwX4KQghSpOs9V2Ls/evOJWawTyKovDUU0/RtWtXmjdvnutxjRo1YtGiRfzvf/9j+fLlKIpCly5dOH36dI7HT5s2jeDgYM+jZs2aBYpLo9Gg9ffP90N1uwkbOjTHc4UNHYrqduf7XAX9R2UwGLLFntn1WRT69+/PyZMnefrppzl79iy9e/dm4sSJAJivkdQnTpzI2rVreeONN/j111/ZvXs3LVq0wOFwlOh7EEKUrCvrT5bNblcoRYly3Lhx/PPPP6y6Rmurc+fODBs2jNatW9OzZ0++/PJLKlWqxPz583M8ftKkSSQmJnoep06dKo7wPbRmM+FjxxAxbhzajBWztRYLEePGET52DNoCthKLQpMmTTh16hTnzp3zbPvjjz9yPDbrdpfLxc6dO2nSpIlnW6VKlRg+fDjLly/n/fff9wy2admyJbt37yYuLi7H827ZsoURI0Zw11130aJFC6pUqcKJEyeK4N0JIUor1e3GtusvoGzOn8xUKrpex48fz9dff80vv/xCjRo1CvRag8FAmzZtOHLkSI77TSYTJpOpKMLMN63JRPjoaCIeeRh3UhK6oCBUlwttCceRqU+fPjRs2JDhw4fzzjvvYLVaefHFF3M8dvbs2URFRdGkSRNmzJhBfHw8o0aNAmDKlCm0a9eOZs2aYbfb+frrrz1JdNCgQbzxxhsMHDiQadOmUbVqVf766y+qVatG586diYqK4ssvv2TAgAFoNBomT54sLUUhyjn7wYMoycloAwMxleFxBj5tUaqqyvjx41m7di2bNm2ibt26BT6H2+1m7969VK1atRgiLDyt2YzGYEAfFobGYPBJS9ITi1bL2rVrsdlsdOzYkdGjR/P666/neOybb77Jm2++SatWrfjtt9/46quviIiIAMBoNDJp0iRatmxJjx490Ol0nh4Ao9HI999/T2RkJLfeeistWrTgzTffRKfTAfDee+8RGhpKly5dGDBgAH379qVt27Yl8wMQQvhE5v1Jc9s2aDI+C8oijVrQyXpF6LHH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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "algos = ['grid_based', 'lachesis', 'tadbscan', 'hdbscan']\n", "palette = dict(zip(algos, sns.color_palette(n_colors=len(algos))))\n", "\n", "fig, ax = plt.subplots(figsize=(5, 5))\n", "sns.lineplot(data=results, marker='o', x='n_pings', y='execution_time', hue='algo', ax=ax)\n", "ax.set_title('n_pings vs execution_time')\n", "plt.show()" ] } ], "metadata": { "jupytext": { "formats": "ipynb,py:percent" }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.3" } }, "nbformat": 4, "nbformat_minor": 5 }