# Interactive labeling/annotating of time series data

I have a data set of time series data. I'm looking for an annotation (or labeling) tool to visualize it and to be able to interactively add labels on it, in order to get annotated data that I can use for supervised ML.

E.g. the input data is a csv-file and the output is another csv-file of the format timestamp,label.

Therefore I need something like this:

1. to visualize data
2. to select a specific area
3. output the labels with timestamps

As an example:

Building such a tool in python will not take too long, however I was just wondering how other people solve this problem and maybe there are already nice OS tools for doing this. Thank you!

• If you're plotting in python, chances are your best bet is to annotate in python, not in the OS. – Adrian Keister Sep 13 '18 at 15:56
• @AdrianKeister When I wrote OS, I meant an open source project. – mibrl12 Sep 14 '18 at 11:31
• I was about to ask the exactly same question before i found yours. I also need such a tool to annotate data for my thesis. Did you solve the problem yet? I was about to use django and write my own data labeleler. – dataddicted Mar 3 at 10:06
• @dataddicted I started writing the tool, however due to the small amount of data, I just labeled it manually and forgot about it for now ^^ please share the link to your github if you start doing it seriously ;) – mibrl12 Mar 5 at 16:45

## 5 Answers

We had this same problem again and again at Geocene, so we came up with this open-source web app called TRAINSET. You can use TRAINSET to brush labels onto time series data. You import data in a defined CSV format, then label the data, and export a labeled CSV. You can also import a pre-labeled CSV if you're really just trying to refine labels. You can use the hosted version of TRAINSET at https://trainset.geocene.com or you can deploy it yourself by following the readme at https://github.com/geocene/trainset

I also need such a tool to annotate data but did not found any suitable tool. Therefore, i wrote a small python app by myself, just abused matplotlib for this task.

I used matplotlib.use('TkAgg') and SpanSelector with my own onselect(xmin, xmax) method called for this task. Check this code example: https://matplotlib.org/gallery/widgets/span_selector.html

• do you have it available on github? – mibrl12 Mar 18 at 13:12

I am currently developing a set of tools to annotate and detect patterns in time series data: https://github.com/avenix/WDK

check the AnnotationApp in 1-Annotation

• Thank for your answer. However I would prefer a stand alone app, since Matlab is.. well.. Matlab :) – mibrl12 Mar 22 at 13:00
• I dont know what you mean with Matlab is... Matlab? Have you found a standalone annotation tool yet? If not, paying a Matlab licence and installing Matlab might be more cost- efficient than building your own tool. – Juan Haladjian Mar 25 at 10:12

I'm using axvspan() function from matplotlib.pyplot. Main disadvantage is a difficult configuration of text labels.

import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0,3.14,0.01)
s = np.sin(t)
plt.axvspan(t[12], t[100], facecolor='blue', alpha=0.2)
plt.plot(t,s,color='red')


Nova can do it interactively. https://github.com/hcmlab/nova It's much more powerful than just labeling time-series data, but you can just do labeling with it. Also, I suggest you set the sample rate frequency to 1Hz. Best of Luck.