2017-07-25 3 views
1

Je souhaite stocker les résultats de séries temporelles (données de capteur) dans un fichier HDF5. Je n'arrive pas à attribuer des valeurs à mon ensemble de données. De toute évidence, je fais quelque chose de mal, je ne suis pas sûr que ...Stockage de séries temporelles au format HDF5

Le code:

from datetime import datetime, timezone 
import h5py 

TIME_SERIES_FLOAT = np.dtype([("time", h5py.special_dtype(vlen=str)), 
           ("value", np.float)]) 

h5 = h5py.File('balh.h5', "w") 
dset = create_dataset('data', (1, 2), chunks=True, maxshape=(None, 2), dtype=TIME_SERIES_FLOAT) 
dset[0]['time'] = datetime.now(timezone.utc).astimezone().isoformat() 
dset[0]['value'] = 0.0 

Ensuite, le code de mise à jour redimensionne l'ensemble de données et ajoute plus de valeurs. faisant clairement que par valeur est inefficace:

size = list(dset.shape) 
size[0] += 1 
dset.resize(tuple(size)) 
dset[size[0]-1]['time'] = datetime.now(timezone.utc).astimezone().isoformat() 
dset[size[0]-1]['value'] = value 

Une meilleure méthode serait de rassembler des données dans un np.array puis ajouter que chaque si souvent ...

Est-ce raisonnable ...

Répondre

1

I? besoin de plus de café ...

le type défini est un tuple contenant une chaîne (alias le temps) et un flotteur (aka la valeur) afin d'ajouter un, j'ai besoin:

dset[-1] = (datetime.now(timezone.utc).astimezone().isoformat(), value) 

C'est en fait aussi simple!

Ajout d'entrées se fait de cette façon:

l = [('stamp', x) for x in range(10)] 
size = list(dset.shape) 
tmp = size[0] 
size[0] += len(l) 
dset.resize(tuple(size)) 
for x in range(len(l)):             
    dset[tmp+x] = l[x] 

Néanmoins, cela se sent un peu maladroit et sous-optimale ...