{ "cells": [ { "cell_type": "markdown", "id": "7c76d1d8", "metadata": {}, "source": [ "# TADBSCAN Stop Detection" ] }, { "cell_type": "markdown", "id": "f29a96ce", "metadata": {}, "source": [ "The second stop detection algorithm implemented in ```nomad``` is an adaptation of DBSCAN. Unlike in plain DBSCAN, we also incorporate the time dimension to determine if two pings are \"neighbors\". This implementation relies on 3 parameters\n", "\n", "* `time_thresh` defines the maximum time difference (in minutes) between two consecutive pings for them to be considered neighbors within the same cluster.\n", "* `dist_thresh` specifies the maximum spatial distance (in meters) between two pings for them to be considered neighbors.\n", "* `min_pts` sets the minimum number of neighbors required for a ping to form a cluster.\n", "\n", "Notice that this method also works with **geographic coordinates** (lon, lat), using Haversine distance. " ] }, { "cell_type": "code", "execution_count": 1, "id": "1e62c25a", "metadata": { "execution": { "iopub.execute_input": "2026-08-13T02:17:51.159289Z", "iopub.status.busy": "2026-08-13T02:17:51.159289Z", "iopub.status.idle": "2026-08-13T02:17:53.527082Z", "shell.execute_reply": "2026-08-13T02:17:53.527082Z" } }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "\n", "# Imports\n", "import nomad.io.base as loader\n", "import geopandas as gpd\n", "from shapely.geometry import box\n", "from nomad.stop_detection.viz import plot_stops_barcode, plot_time_barcode, plot_stops, plot_pings\n", "from nomad.stop_detection.density_algs import ta_dbscan\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)\n", "\n", "filepath_root = data_dir / \"gc_data_long\"\n", "tc = {\"user_id\": \"gc_identifier\", \"x\": \"dev_x\", \"y\": \"dev_y\", \"timestamp\": \"unix_ts\"}\n", "\n", "# Density based stop detection (Temporal DBSCAN)\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", "stops_tadb = ta_dbscan(traj,\n", " time_thresh=60,\n", " dist_thresh=8,\n", " min_pts=3,\n", " dur_min=5,\n", " complete_output=True,\n", " traj_cols=tc) " ] }, { "cell_type": "code", "execution_count": 2, "id": "df942a2c", "metadata": { "execution": { "iopub.execute_input": "2026-08-13T02:17:53.529082Z", "iopub.status.busy": "2026-08-13T02:17:53.529082Z", "iopub.status.idle": "2026-08-13T02:17:53.830336Z", "shell.execute_reply": "2026-08-13T02:17:53.830336Z" } }, "outputs": [ { "data": { "image/png": "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/v7+KculH8wvM+kHOb/5zW/sYDBop9PpCV/zmte8xv7whz+8188OPvhg+21ve5tt27Z9ww032JWVlfYHP/hB+93vfvfYa7Zu3WqHQiH7E5/4hL1s2bLZbRRmbDb94IknnrAl2c8999yEr5mP/cCT96Tde++9SiQSOvXUU3XhhRfqV7/6lYaHh/d73XHHHaempib9/ve/lyRt2bJFDzzwgC666KJCNxkzMDAwIMMwVFVVNaP3hcNhpVKpvX520UUXqa2tTVu2bJEk/f73v1dTU5OOPfbYfDUXU0ilUnrsscd06qmnjv3M5/Pp1FNP3e+v2XygH7jTbPvBwMCAIpGI/P5pLUU9Zrx+cNlll+k3v/mNEomEpF1XZM4880w1NDTMqGzM3mz6wfDwsG644QYtX75cS5YsmVF9bu8Hngxp119/vd72trfJNE0dfvjhOuigg/Tb3/523Ndedtll+ulPfypp14E4++yzVVdXV8jmYgZGR0f18Y9/XBdccMG0F8u1bVt33XWX/vKXv+h1r3vdXr+rr6/XWWedpRtvvFGS9NOf/lSXXXZZvpuNSfT29iqTyex3AmxoaFBXV1fe6qEfuNts+kFvb6+uu+46vec975l2PZlMRjfddJOefPLJ/frBMccco4MOOki/+93vZNu2brzxRvpBgc2kH3zve99TeXm5ysvL9ec//1l33nmngsHgtOqZL/3AcyFt586duvnmm3XhhReO/ezCCy/U9ddfP+7rL7zwQv3tb3/T5s2b+UC6XDqd1vnnny/btvX9739/ytf/6U9/Unl5uUpKSnTWWWfprW99qz772c/u97rLLrtMN954ozZv3qy//e1vesc73uFA61Es9ANvisfjam1t1erVq8c9nvvKfaGHw2Fdfvnl+shHPqJ/+7d/2+91l112mW644Qbdf//9Gh4e1tlnn+1A65EP73jHO/T444/r/vvvV3Nzs84///z9HgDa13zrBzMbH54HfvnLX2p0dFQnnnji2M9s21Y2m1V7e7uam5v3en1NTY1e//rX613vepdGR0d11llnaXBwsNDNxhRyAe3FF1/UPffcM61RtNe+9rX6/ve/r2AwqIULF054OeSss87Se97zHr3rXe/SOeeco5qamnw3H5Oora2VaZrasWPHXj/fsWOHFixYMOfy6Qfzw0z6weDgoM4888yxBz4CgcCU5b/jHe/Qpz71KYXDYTU2NsrnG3+M4h3veIf+4z/+Q5/97Gd10UUXzfgyKuZmJv2gsrJSlZWVOvjgg/WKV7xC1dXVuuWWW3TBBRdMWP586weeG0m7/vrrddVVV2nDhg1j/3viiSfU0tIydllzX5dddpnuu+8+XXzxxTJNs8AtxlRyAe3ZZ5/VXXfdNe0vz7KyMq1cuVJLly6d9APm9/t18cUX67777mMktQiCwaCOO+443X333WM/y2azuvvuu3XSSSfNuXz6wfww3X4Qj8d1+umnKxgM6tZbb1VJScm0yq+srNTKlSu1aNGiCb+YJSkajercc8/V/fffTz8ogtmeD2zblm3bSiaTk5Y/3/pB0f5EGBoa0nPPPTf27xdeeEEbNmxQNBode8w1Fotpy5YtY3Nibdq0SZK0YMGCcf/C3rBhg9avX6//+Z//0apVq/b63QUXXKDPf/7z+sIXvrDfifrMM89UT0/PtO9xQv5M1Q/S6bTe8pa3aP369frTn/6kTCYzdl9CNBqd9v0HU7nuuuv0sY99jNGTIrnyyit1ySWX6Pjjj9cJJ5ygb33rWxoeHtY73/nOsdd0dXWpq6trrL/84x//UEVFhZYuXapoNJqXdtAPimuqfpALaIlEQjfddJPi8bji8bgkqa6uLm9/ZN9444363ve+Rz8okqn6webNm/XrX/9ap59+uurq6rRt2zZ95StfUTgczutlSTf0g6KFtEcffVSvfe1rx/595ZVXSpIuueSSsZt3b7311r1O0m9729skSddee+249yBcf/31Wr169X4BTZLOO+88ffCDH9Rtt9223xxbhmGotrZ2rpuEWZiqH7z00ku69dZbJUlHH330Xu+99957dcopp+SlHcFgkD5QRG9961vV09Ojz3zmM+rq6tLRRx+t22+/fa+bh3/wgx/oc5/73Ni/Tz75ZEnSDTfcoEsvvTQv7aAfFNdU/WD9+vVj816uXLlyr/e+8MILeZtoNBwOKxwO56UszNxU/aCkpERtbW361re+pf7+fjU0NOjkk0/WQw89pPr6+ry1ww39wLBt2y5qCwAAALAfz92TBgAA4AWENAAAABcipAEAALgQIQ0AAMCFCGkAAAAuREgDAABwIUIaAACACxHSAAAAXIiQBgAA4EKENAAAABcipAEAALgQIQ0AAMCF/j91TXB59fM4MgAAAABJRU5ErkJggg==", "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_tadb, ax=ax_map, cmap='Reds')\n", "plot_pings(traj, ax=ax_map, s=6, color='black', alpha=0.5, traj_cols=tc)\n", "ax_map.set_axis_off()\n", "\n", "plot_time_barcode(traj['unix_ts'], ax=ax_barcode, set_xlim=True)\n", "plot_stops_barcode(stops_tadb, ax=ax_barcode, cmap='Reds', set_xlim=False, timestamp='unix_ts')\n", "\n", "plt.tight_layout(pad=0.1)\n", "plt.show()" ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "all", "formats": "ipynb,py:percent" }, "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.10.0" } }, "nbformat": 4, "nbformat_minor": 5 }