Somma cumulativa di sovrapposizione / diminuzione nel tempo

2

Sto cercando un modo efficiente per gestire un calcolo. Ho un sacco di eventi timestamp, che rappresentano il carico e lo scarico di camion. Ho bisogno di costruire il tasso di riempimento di questi camion nel tempo.

Questa immagine rappresenta i dati e il risultato desiderato. Tieni presente che il set di dati è abbastanza grande e molti eventi possono sovrapporsi, persino iniziare e / o terminare allo stesso tempo.

A volte il caricamento non è noto, quindi dobbiamo supporre che il carrello sia pieno (valore = 13).

Sto cercando idealmente un algoritmo o un metodo agnostico.

Grazie mille per il tuo aiuto

    
posta frinux 09.10.2018 - 08:52
fonte

2 risposte

0

Crea due liste. Entrambi hanno articoli con data / ora, valore e 'tipo'.

Il primo elenco viene creato dall'inizio degli eventi, il valore di quell'evento e il tipo di avvio. Il secondo è creato dalla fine dell'evento, il valore di quell'evento e il termine "tipo". Unisci le due liste e ordina per data / ora.

Quindi enumera l'elenco finale, aggiungendo valore all'accumulatore quando l'elemento è di tipo iniziale e rimuovendo il valore quando il tipo finale.

    
risposta data 09.10.2018 - 08:57
fonte
0

dati

Le uniche informazioni che devi sapere sono il timestamp per ogni carico / scarico e il tasso di riempimento per ciascuno (per un evento di scarico, il tasso di riempimento sarà negativo per compensare l'evento di caricamento).

Ordina tutti i tuoi dati con questo timestamp con il suo tasso di riempimento. La somma corrente è il totale parziale corrente dopo aver aggiunto tutte queste tariffe di riempimento.

Trucchi! - Somma corrente

Certo, per grandi serie di dati come il tuo, questo potrebbe richiedere del tempo per calcolare, ma non temere! Ci sono trucchi!

Una volta che hai la somma corrente, salva il timestamp corrente ! Questo è importante. La prossima volta che è necessario determinare la somma corrente, utilizzare la somma corrente corrente e applicare tutti gli eventi di carico / scarico che si sono verificati dopo quel timestamp. In questo modo sarai sicuro di includere tutti gli eventi.

Se vogliamo essere precisi, devi creare il timestamp prima di interrogare i dati, e poi prendi solo i dati meno recenti di quel timestamp (così non rischierai che vengano aggiunti nuovi eventi dopo aver interrogato il dati che non vengono presi in considerazione).

Trucchi! - Riorganizzazione

Se i query richiedono molto tempo, è necessario riorganizzare i dati in modo che gli eventi che non sono ancora stati considerati nella somma parziale siano facilmente accessibili. Se stai usando un database, questo potrebbe significare metterlo nella propria tabella o partizionare la tabella esistente per data.

Se hai difficoltà a convertire i dati per caricare / scaricare la data / ora dell'evento e il tasso di riempimento, non aver paura di riorganizzare i dati come meglio credi. Puoi farlo usando le viste se stai usando un database, oppure puoi semplicemente reindicizzare i tuoi dati in memoria prima di ordinare i dati.

Conclusione

Fammi sapere se questo ti aiuta! In caso contrario, chiedi nei commenti e proverò a rispondere a qualsiasi domanda tu possa avere aggiornando la mia risposta.

    
risposta data 09.10.2018 - 09:27
fonte

Leggi altre domande sui tag