Automate your data pipeline

Sentenai helps you prepare time series data fast

data loading
data fusion
data segmentation
built for data science
& machine learning
designed for
matplotlib scikit-learn pytorch numpy pandas

Working with time series data
doesn't have to be painful

Load data from anywhere

Whether you need to collect data from one machine or have to integrate hundreds of sensors, logs, and APIs, you can load your time series data into Sentenai without pre-defining fields and types; we'll organize and optimize it for you automatically.

Get data that's always up-to-date

Sentenai automatically indexes new data so that it's available immediately, whether doing bulk export or building data sets from condition-based filters. As fields are added or field types change, indexes are automatically added and updated.

Segment data by describing patterns

Sentenai provides on-demand temporal data fusion to help you seamlessly combine multiple data sources and perform pattern-based segmentation using our automated in-memory field indexing and distributed pattern search engine.

Reshape data on-demand

Creating features on large time series data sets manually takes time; Sentenai makes it faster by supporting the same reshaping operations on our distributed back-end that you use in data frames: shift, resample, groupby, etc.

Bring your own data science tools

Whether you're visualizing resampled data with Matplotlib, or building tensors to train neural networks for time series forecasting, Sentenai is built to be a data provider for all the tools you know best.

A complete JSON API for all your time series data

Sentenai's API gives you control over how you use your data


Get fields in stream schema

Get a list of paths representing fields seen in a stream, whether there's one schema or several. This endpoint includes the timestamp and event id at which the field appeared.

Get latest event in stream

Get the latest event by timestamp in a named event stream, even data gets logged out of order. Sentenai's automatic indexing makes sure your data is properly ordered in time and available immediately.

Get values at any point in time

Find values for all fields at any point in time using Sentenai's JSON API, whether or not a specific data point exists at that time. Sentenai's native forward filling tells you what the last value of each field was and when it was set.

 1   [
 2       {'path': ['apparentTemperature'],
 3        'start': '2005-01-01T05:00:00Z',
 4        'id': 'bxtL6ZTbCqTt12GtP6rA8ixv'},
 5       {'path': ['cloudCover'],
 6        'start': '2005-01-01T05:00:00Z',
 7        'id': 'bxtL6ZTbCqTt12GtP6rA8ixv'},
 8       {'path': ['dewPoint'],
 9        'start': '2005-01-01T05:00:00Z',
10        'id': 'bxtL6ZTbCqTt12GtP6rA8ixv'},
11       {'path': ['humidity'],
12        'start': '2005-01-01T05:00:00Z',
13        'id': 'bxtL6ZTbCqTt12GtP6rA8ixv'},
 …       …
29       {'path': ['temperature'],
30        'start': '2005-01-01T05:00:00Z',
31        'id': 'bxtL6ZTbCqTt12GtP6rA8ixv'},
32   ]

 1   {'summary': 'Light Snow',
 2    'cloudCover': 1,
 3    'dewPoint': 18.6,
 4    'precipIntensity': 0.0052,
 5    'time': 1109304000,
 6    'windBearing': 326,
 7    'precipAccumulation': 0.073,
 8    'icon': 'snow',
 9    'visibility': 0.63,
10    'humidity': 0.85,
11    'temperature': 22.33,
12    'uvIndex': 0,
13    'pressure': 1022.05,
14    'precipType': 'snow',
15    'precipProbability': 0.33,
16    'windSpeed': 3.03,
17    'apparentTemperature': 18.32,
18    'windGust': 5.66}

 1   [
 2       {'ts': '2005-02-25T04:00:00Z',
 3        'path': ['apparentTemperature'],
 4        'value': 18.32,
 5        'id': 'qj-KSrNlIP_2tOqyQRbSb8xV'},
 6       {'ts': '2005-02-25T04:00:00Z',
 7        'path': ['cloudCover'],
 8        'value': 1,
 9        'id': 'qj-KSrNlIP_2tOqyQRbSb8xV'},
10       {'ts': '2005-02-25T04:00:00Z',
11        'path': ['dewPoint'],
12        'value': 18.6,
13        'id': 'qj-KSrNlIP_2tOqyQRbSb8xV'},
14       {'ts': '2005-02-25T04:00:00Z',
15        'path': ['humidity'],
16        'value': 0.85,
17        'id': 'qj-KSrNlIP_2tOqyQRbSb8xV'}
18   ]