Package: infostop
InfostopPython package for detecting stop locations in mobility dataThis package implements the algorithm described inhttps://arxiv.org/pdf/2003.14370.pdf, for detecting stop locations in time-ordered location data.Infostop is useful to anyone who wishes to detect stationary events in location coordinate streams. It is, thus, a framework to simplify dense and rich location time-series into sequences of events.UsageGiven a location trace such as:>>>dataarray([[55.75259295,12.34353885],[55.7525908,12.34353145],[55.7525876,12.3435386],...,[63.40379175,10.40477095],[63.4037841,10.40480265],[63.403787,10.4047871]])Or with time information>>>dataarray([[55.75259295,12.34353885,1581401760],[55.7525908,12.34353145,1581402760],[55.7525876,12.3435386,1581403760],...,[63.40379175,10.40477095,1583401760],[63.4037841,10.40480265,1583402760],[63.403787,10.4047871,1583403760]])A stop location solution can be obtained using:>>>frominfostopimportInfostop>>>model=Infostop()>>>labels=model.fit_predict(data)Alternatively,datacan also be a list ofnumpy.arrays, in which case it is assumed that list elements are seperate traces in the same space. In thismulti segment(ormulti user) case, Infostop finds stop locations that are shared by different segments.Solutions can be plotted using:>>>frominfostopimportplot_map>>>folmap=plot_map(model)>>>folmap.mPlotting this onto a map:AdvantagesSimplicity: At its core, the method works by two steps. (1) Reducing the location trace to the medians of each stationary event and (2) embedding the resulting locations into a network that connects locations that are within a user-defined distance and clustering that network.Multi-trace support:Currently, no other libraries support clustering multiple traces at once to find global stop locations. Infostop does. The image above visualizes stop locations at a campus for a population of almost 1000 university students.Flow based: Spatial clusters correspond to collections of location points that contain large amounts of flow when represented as a network. This enables the recovery of locations where traces slightly overlap.Speed: First the point space is reduced to the median of stationary points (executed in a fast C++ module), then spatially neighboring points connected using a Ball search tree algorithm, and finally the network is clustered using the C++ based Infomap program. For example, clustering 100.000 location points takes about a second.Installationpip install infostopDevelopment notesWe welcome contributions. Before you get started, you may want to read the notes below.You shouldcreate a virtual environment. In your localinfostopfolder, do:$makeenvInstallinfostopinto your virtual environment.
Do this by running:(env)$makeinstallThis command will also delete any pre-existing installation of Infostop, so you will probably want to run it after each code update.Run tests:(env)$maketestCheck test coverage:(env)$makecoverage(env)$cdhtmlcov(env)$python-mhttp.server8001Then go to localhost:8001 in your browser to look at the coverage report.Format code withblack. We don't want to argue about code formatting. Please runblackto apply standard formatting to your code before your make a pull request.TheMakefileimplements a number of commands that are useful during development.
Go ahead and executemake helpto see descriptions of available commands, or inspect the file so you understand what's going on.Convenient: create an ipykernel for the virtual environmentIf you use Jupyter notebooks, you can install the virtual environment into Jupyter as a kernel. Run:(env)$pipinstallipykernel(env)$python-mipykernelinstall--user--name=infostop_envThis lets you select the virtual environment as a kernel in a Jupyter notebook.