Предположим, у нас есть 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]},
]