{ "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-04-24T17:17:33.012981Z", "iopub.status.busy": "2026-04-24T17:17:33.012981Z", "iopub.status.idle": "2026-04-24T17:17:36.188742Z", "shell.execute_reply": "2026-04-24T17:17:36.188742Z" } }, "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", "import nomad.stop_detection.dbscan as DBSCAN\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)\n", "\n", "filepath_root = '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 = DBSCAN.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-04-24T17:17:36.191743Z", "iopub.status.busy": "2026-04-24T17:17:36.190743Z", "iopub.status.idle": "2026-04-24T17:17:36.534750Z", "shell.execute_reply": "2026-04-24T17:17:36.534750Z" } }, "outputs": [ { "data": { "image/png": "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REgDAABwIEIaAACAAxHSAAAAHIiQBgAA4ECENAAAAAcipAEAADjQlFYcyM13G4/HbW1MPliJAVn9A5LhkTxkUNcxTckyZcTjMlLZYrfmBH39fUpms8oM9MufzRS7ObZKJxLKZrPq6+9TeJbnhnzvt4nadiodI+BUkc/zkd1yWWoKawlMbcWBffv2qba2dvYtAwAAgPbu3aulS5dO+JophTTTNHXgwAGVl5fLMIy8NTBf4vG4amtrtXfvXscvWwX70A8g0Q8wjH4AyZn9wLIs9fX1afHixfJMcsdvSrc7PR7PpGnPCSKRiGMOAoqHfgCJfoBh9ANIzusHFRUVU3odg7YAAAAciJAGAADgQK4IacFgULfffruCwWCxm4Iioh9Aoh9gGP0A0tzvB1N6cAAAAACF5YoraQAAAG5DSAMAAHAgQhoAAIADEdIAAAAcqGgh7bHHHtMb3vAGLV68WIZh6Kc//ekJr/nJT36iK664QvPnz5dhGNq8efOUy9+3b58CgYBWr1497u8Nw5BhGPr9738/6ufJZHKkvkceeWQaW4SZmKwfpNNpfeQjH9FZZ52l0tJSLV68WDfffLMOHDgwYblvfetbR45xIBBQY2Oj7rrrLmUyw2s1PvLIIzIMQ/PmzVMikRj13j/84Q8j70XhfPWrX1VDQ4NCoZAuuOACPf3006N+/81vflOXXXaZIpGIDMNQT0/PpGXSD+aeifpBLBbTe9/7Xp1++ukKh8Oqq6vT+973PvX29k5Y5mWXXTZyLEOhkFatWqWvfe1rI79fv369DMPQGWecccJ7f/jDH8owDDU0NORtGzG5yc4H73rXu7RixQqFw2EtWLBAb3zjG7Vt27YJy5yL/aBoIW1gYEBnn322vvrVr074mosvvlif//znp13++vXrde211yoej+upp54a9zW1tbW6//77R/3sgQceUFlZ2bTrw8xM1g8GBwe1adMmffKTn9SmTZv0k5/8RNu3b9c111wzadlXXnmlOjs79dJLL+m2227THXfcoS984QujXlNeXq4HHnhg1M/uu+8+1dXVzXyjMG3f//739cEPflC33367Nm3apLPPPluve93r1NXVNfKawcFBXXnllfrYxz42rbLpB3PHZP3gwIEDOnDggL74xS9q69atWr9+vX71q1/p7W9/+6Rlv+Md71BnZ6deeOEFXXvttXr3u9+t7373uyO/Ly0tVVdXl5588slR76MfFN5Uzgfnnnuu7r//fr344ot66KGHZFmWrrjiCmWz2QnLnnP9wHIASdYDDzxw0t/v3r3bkmQ9++yzUyrPNE1r+fLl1q9+9SvrIx/5iPWOd7xj3Do/8YlPWJFIxBocHBz5+Wtf+1rrk5/8pCXJ2rhx4zS3BLMxWT/Iefrppy1J1p49e076mltuucV64xvfOOpnr33ta60LL7zQsizL2rhx40gfuPzyy0deMzg4aFVUVIz0ARTG+eefb7373e8e+Xc2m7UWL15sfe5znzvhtbljd/To0UnLpR/MLdPpBzk/+MEPrEAgYKXT6ZO+5tJLL7Xe//73j/rZaaedZl1//fWWZVnW/fffb1VUVFjvec97rL/+678eec3evXutYDBoffSjH7Xq6+tntlGYtpn0gy1btliSrB07dpz0NXOxH7hyTNrGjRs1ODioyy+/XDfeeKO+973vaWBg4ITXnXvuuWpoaNCPf/xjSVJHR4cee+wx3XTTTYVuMqaht7dXhmGosrJyWu8Lh8NKpVKjfnbTTTeptbVVHR0dkqQf//jHamho0Nq1a/PVXEwilUrpmWee0eWXXz7yM4/Ho8svv/yEv2bzgX7gTDPtB729vYpEIvL5prQU9Yjx+sGtt96qH/zgBxocHJQ0fEfmyiuvVE1NzbTKxszNpB8MDAzo/vvv17Jly1RbWzut+pzeD1wZ0u677z5df/318nq9Wr16tZYvX64f/vCH47721ltv1be+9S1Jwwfi6quv1oIFCwrZXExDIpHQRz7yEd1www1TXizXsiw9/PDDeuihh/Sa17xm1O+qq6t11VVXaf369ZKkb33rW7r11lvz3WxMoLu7W9ls9oQTYE1NjQ4ePJi3eugHzjaTftDd3a27775b73znO6dcTzab1be//W0999xzJ/SDNWvWaPny5frRj34ky7K0fv16+kGBTacffO1rX1NZWZnKysr0y1/+Ur/5zW8UCASmVM9c6QeuC2k9PT36yU9+ohtvvHHkZzfeeKPuu+++cV9/44036sknn9SuXbv4QDpcOp3WtddeK8uy9PWvf33S1//85z9XWVmZQqGQrrrqKl133XW64447TnjdrbfeqvXr12vXrl168skn9Za3vMWG1qNY6AfuFI/H1dLSolWrVo17PMfKfaGHw2G94x3v0Ac+8AH97d/+7Qmvu/XWW3X//ffr0Ucf1cDAgK6++mobWo98eMtb3qJnn31Wjz76qJqamnTttdee8ADQWHOtH0zv+vAc8J3vfEeJREIXXHDByM8sy5Jpmmpra1NTU9Oo18+fP1+vf/3r9fa3v12JREJXXXWV+vr6Ct1sTCIX0Pbs2aPf/e53U7qKtm7dOn39619XIBDQ4sWLT3o75KqrrtI73/lOvf3tb9cb3vAGzZ8/P9/NxwSqqqrk9Xp16NChUT8/dOiQFi5cOOvy6Qdzw3T6QV9fn6688sqRBz78fv+k5b/lLW/Rxz/+cYXDYS1atEgez/jXKN7ylrfowx/+sO644w7ddNNN076NitmZTj+oqKhQRUWFTjvtNF144YWaN2+eHnjgAd1www0nLX+u9QPXXUm77777dNttt2nz5s0j/9uyZYuam5tHbmuOdeutt+qRRx7RzTffLK/XW+AWYzK5gPbSSy/p4YcfnvKXZ2lpqRobG1VXVzfhB8zn8+nmm2/WI488wpXUIggEAjr33HP129/+duRnpmnqt7/9rS666KJZl08/mBum2g/i8biuuOIKBQIBPfjggwqFQlMqv6KiQo2NjVqyZMlJv5glKRqN6pprrtGjjz5KPyiCmZ4PLMuSZVlKJpMTlj/X+kHR/kTo7+/Xjh07Rv69e/dubd68WdFodOQx11gspo6OjpE5sbZv3y5JWrhw4bh/YW/evFmbNm3S//zP/2jlypWjfnfDDTforrvu0qc//ekTTtRXXnmlDh8+POUxTsifyfpBOp3Wm9/8Zm3atEk///nPlc1mR8YlRKPRKY8/mMzdd9+tD33oQ1w9KZIPfvCDuuWWW3Teeefp/PPP17333quBgQG97W1vG3nNwYMHdfDgwZH+8qc//Unl5eWqq6tTNBrNSzvoB8U1WT/IBbTBwUF9+9vfVjweVzwelyQtWLAgb39kr1+/Xl/72tfoB0UyWT/YtWuXvv/97+uKK67QggULtG/fPt1zzz0Kh8N5vS3phH5QtJD2xz/+UevWrRv59wc/+EFJ0i233DIyePfBBx8cdZK+/vrrJUm33377uGMQ7rvvPq1ateqEgCZJf/EXf6H3vOc9+sUvfnHCHFuGYaiqqmq2m4QZmKwf7N+/Xw8++KAk6Zxzzhn13o0bN+qyyy7LSzsCgQB9oIiuu+46HT58WJ/61Kd08OBBnXPOOfrVr341avDwN77xDd15550j/77kkkskSffff7/e+ta35qUd9IPimqwfbNq0aWTey8bGxlHv3b17d94mGg2HwwqHw3kpC9M3WT8IhUJqbW3Vvffeq6NHj6qmpkaXXHKJnnjiCVVXV+etHU7oB4ZlWVZRWwAAAIATuG5MGgAAgBsQ0gAAAByIkAYAAOBAhDQAAAAHIqQBAAA4ECENAADAgQhpAAAADkRIAwAAcCBCGgAAgAMR0gAAAByIkAYAAOBAhDQAAAAH+v8B2aT/CM+rAyAAAAAASUVORK5CYII=", "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": { "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 }