{ "cells": [ { "cell_type": "markdown", "id": "8c99d6eb-109a-4aa0-9237-8b7b07e8101f", "metadata": {}, "source": [ "## Spatio-Temporal Clustering" ] }, { "cell_type": "code", "execution_count": 1, "id": "4d300f10-4b48-4360-8770-9cef7e3c17ae", "metadata": {}, "outputs": [], "source": [ "import movekit as mkit\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from matplotlib import animation" ] }, { "cell_type": "code", "execution_count": 2, "id": "c6c91190-5438-444c-b1bc-4543ab449879", "metadata": {}, "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", "
timeanimal_idxy
000201.623002186.148565
101247.658670177.650135
202127.45723020.572136
303231.180722172.861323
404217.739517189.203565
\n", "
" ], "text/plain": [ " time animal_id x y\n", "0 0 0 201.623002 186.148565\n", "1 0 1 247.658670 177.650135\n", "2 0 2 127.457230 20.572136\n", "3 0 3 231.180722 172.861323\n", "4 0 4 217.739517 189.203565" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Enter path to CSV file\n", "path = \"./datasets/fish-6.csv\"\n", "\n", "data = mkit.read_data(path)\n", "data.head()" ] }, { "cell_type": "markdown", "id": "964e8492-2924-4c21-bf4f-e125de1460aa", "metadata": {}, "source": [ "`Movekit` allows the use of many different clustering algorithms for spatio-temporal clustering: dbscan, hdbscan, agglomerative, kmeans, optics, spectral, affinitypropagation, birch. " ] }, { "cell_type": "code", "execution_count": 3, "id": "7935b584-5e75-4ce6-8989-633e18599774", "metadata": {}, "outputs": [], "source": [ "#normalize the data first\n", "data_norm = mkit.normalize(data)\n", "\n", "#then cluster it\n", "labels = mkit.clustering('dbscan', data_norm, eps1=0.05, eps2=10, min_samples=2)\n", "\n", "#OR cluster with the splitting-and-merging method (data is partitioned into frames and merged afterwards).\n", "#labels = mkit.clustering_with_splits('dbscan', data, frame_size=20, eps1=0.05, eps2=10, min_samples=3)" ] }, { "cell_type": "code", "execution_count": 4, "id": "651d19b3-51db-44b1-9045-dcf280ad3efa", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0, 0, 1, ..., 3, 0, 0])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "labels" ] }, { "cell_type": "code", "execution_count": 5, "id": "2e589697-7ac2-48e5-875f-f8b8c4ed6d04", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def plot(data, labels):\n", " colors = ['#a6cee3','#1f78b4','#b2df8a','#33a02c','#fb9a99','#e31a1c','#fdbf6f','#ff7f00','#cab2d6','#6a3d9a']\n", " \n", " for i in range(-1, len(set(labels))):\n", " if i == -1:\n", " col = [0, 0, 0, 1]\n", " else:\n", " col = colors[i % len(colors)]\n", " \n", " clust = data[np.where(labels==i)]\n", " plt.scatter(clust[:,0], clust[:,1], c=[col], s=1)\n", " plt.show()\n", "\n", " return None\n", "\n", "data_np = data_norm.loc[:, ['time','x','y']].values\n", "plot(data_np[:,1:], labels)" ] }, { "cell_type": "code", "execution_count": null, "id": "cc03df6f-2e11-48f5-b4f0-5a400900f526", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "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.9.7" } }, "nbformat": 4, "nbformat_minor": 5 }