Sto esaminando soluzioni di archiviazione e interrogazione di un record storico di occorrenze di eventi per un numero elevato di elementi.Algoritmo in Python per archiviare e cercare eventi giornalieri per migliaia di eventi numerati?
Questo è lo scenario semplificato: sto ottenendo un registro giornaliero di 200 000 lampioni (etichettato da sl1 a sl200000) che mostra se la lampada era operativa il giorno o meno. Non importa per quanto tempo la lampada era in servizio solo che era in un dato giorno di calendario.
Altri bit di informazioni vengono memorizzate per ogni lampada come bene e l'inizio della classe Python simile a questa:
class Streetlamp(object):
"""Class for streetlamp record"""
def __init__(self, **args):
self.location = args['location']
self.power = args['power']
self.inservice = ???
mio py-foo non è troppo grande e vorrei evitare una soluzione che è troppo goloso su disco/memoria. Quindi una soluzione con una tinta di (anno, mese, giorno) potrebbe essere una soluzione, ma spero di ottenere indicazioni per una soluzione più efficiente.
Un record potrebbe essere memorizzato come un flusso di bit ad ogni bit che rappresenta un giorno di un anno, a partire con Jan 1. Quindi, se una lampada era operativa i primi tre giorni del 2010, poi il record potrebbe essere:
sl1000_up = dict('2010': '11100000000000...', '2011':'11111100100...')
La ricerca oltre i confini dell'anno avrebbe bisogno di unire, gli anni bisestili sono un caso speciale, in più avrei bisogno di codificare/decodificare un bel po 'con questa soluzione nazionale. Sembra non proprio giusto. speed-up-bitstring-bit-operations, how-do-i-find-missing-dates-in-a-list e finding-data-gaps-with-bit-masking dove mi sono imbattuto in post interessanti. Ho anche studiato su python-bitstring e ho fatto qualche ricerca su google, ma nulla sembra adattarsi davvero.
Inoltre, mi piacerebbe cercare "vuoti", ad es. "tre o più giorni fuori dall'azione" ed è essenziale che un giorno contrassegnato possa essere convertito in una data di calendario reale.
Gradirei idee o indicazioni su possibili soluzioni. Per aggiungere ulteriori dettagli, potrebbe essere interessante che il DB di back-end utilizzato sia ZODB e che gli oggetti Python puri che possono essere decimati siano preferiti.
Grazie per aver segnalato scikits.timeseries. Sembra supportare la maggior parte delle analisi che devo fare. Memorizzare tutte le lampade in un array per un anno non è possibile, poiché preferirei memorizzare il record di una lampada nell'oggetto istanziato. Tuttavia, questo dovrebbe essere facile da adattare e con Numpy non ho il top reinventare la ruota. Solo un noob Python potrebbe trascurare questo pacchetto ;-) – Axial
Vale la pena sapere che un bool di Numpy è memorizzato come un byte intero, quindi questo potrebbe non essere così efficiente come sembra. –