Дублирование данных временных рядов при наличии нескольких избыточных источников (Python или Javascript) - PullRequest
0 голосов
/ 21 января 2020

Предположим, у нас есть 2 системы (представьте, что IoT-датчики) наблюдают за одним и тем же источником данных на предмет избыточности, генерируя 2 потока данных временных рядов A и B. В приведенном ниже примере значения A и B смещены на 1 секунду в течение этих 5 секунд, показанных здесь, имитируя задержку. A также отсутствует значение 3, ожидаемое во время = 4, которое находится в B во время = 3.

Вопрос: В grouped, оба A и B были объединены и сгруппированы по time. Как мы можем затем дедуплицировать объединенный поток данных grouped, чтобы мы получили дедуплицированный временной ряд desired?

Примечания:

1 Если дублирующая точка данных существует как в A, так и B, мы сохраним ту, которая возникла ранее, и откажитесь от нового дубликата.

2 Дедуплицированный результат не требует 100% точности. Нам просто нужна разумная стратегия для разрешения неопределенного сценария ios во время дедупликации.

Иллюстрация 2 временных рядов A и B и требуемых дедуплицированных данных desired

// time(s)  A   B       desired
// ---------------------------

// 5        2      

// 4            2       2

// 3        1   3       3 

// 2        2   1       1

// 1        1   2       2

// 0            1       1

Существующий код (Javascript)

Не стесняйтесь использовать Javascript, Python, псевдокод или подобные языки. Javascript является наиболее предпочтительным, можно использовать такие библиотеки, как Lodash / Pandas.

// 2 data streams
const A = [
    {time: 5, score: 2},
    {time: 3, score: 1},
    {time: 2, score: 2},
    {time: 1, score: 1}
];

const B = [
    {time: 4, score: 2},
    {time: 3, score: 3},
    {time: 2, score: 1},
    {time: 1, score: 2},
    {time: 0, score: 1}
];

// After grouping both A and B by `time`, we get `grouped`
// Skipping the implementation here for simplicity
let grouped = [
    {time: 5, score: [2]},
    {time: 4, score: [2]},
    {time: 3, score: [1, 3]},
    {time: 2, score: [2, 1]},
    {time: 1, score: [1, 2]},
    {time: 0, score: [1]},
];

Желаемый результат

[
    {time: 4, score: [2]},
    {time: 3, score: [3]},
    {time: 2, score: [1]},
    {time: 1, score: [2]},
    {time: 0, score: [1]}, 
]
...