Data alignment: skip 1 point gaps (insert interpolated value)

This commit is contained in:
Alexander Zobnin
2021-09-23 13:15:01 +03:00
parent 9133b0aaed
commit d46b9c9a91

View File

@@ -22,10 +22,20 @@ func (ts TimeSeries) Align(interval time.Duration) TimeSeries {
pointFrameTs = point.GetTimeFrame(interval) pointFrameTs = point.GetTimeFrame(interval)
if pointFrameTs.After(frameTs) { if pointFrameTs.After(frameTs) {
pointsToAdd := make([]TimePoint, 0)
for frameTs.Before(pointFrameTs) { for frameTs.Before(pointFrameTs) {
alignedTs = append(alignedTs, TimePoint{Time: frameTs, Value: nil}) pointsToAdd = append(pointsToAdd, TimePoint{Time: frameTs, Value: nil})
frameTs = frameTs.Add(interval) frameTs = frameTs.Add(interval)
} }
if len(pointsToAdd) > 1 {
alignedTs = append(alignedTs, pointsToAdd...)
} else if len(pointsToAdd) == 1 && i < ts.Len()-1 {
// In case of 1 point gap, insert interpolated value to prevent unnecessary gaps
interpolatedPoint := pointsToAdd[0]
pointValue := linearInterpolation(interpolatedPoint.Time, ts[i], ts[i+1])
interpolatedPoint.Value = &pointValue
alignedTs = append(alignedTs, interpolatedPoint)
}
} }
alignedTs = append(alignedTs, TimePoint{Time: pointFrameTs, Value: point.Value}) alignedTs = append(alignedTs, TimePoint{Time: pointFrameTs, Value: point.Value})