Aprende (funcionalidad básica de) PyTables paso a paso (II)

Por Kiko Correoso

En el anterior capítulo vimos como crear una estructura básica para nuestro fichero h5. Ahora vamos a ver como rellenar tablas de ese mismo fichero.

Rellenar tablas

Ahora es tiempo de rellenar la tabla con datos sin sentido (datos aleatorios) y fechas. numpy y datetime nos facilitarán la tarea por lo que vamos a importarlos antes).

import numpy as np
import datetime as dt

Abrimos de nuevo el fichero h5 que creamos en el anterior capítulo, pero en lugar de abrirlo en modo "write" lo abriremos en modo "append".

h5file = tb.openFile("tabla_test.h5", mode = "a")

Recuperamos la tabla que queremos llenar (indicando la ruta en la estructura del fichero hdf5) y usando la función getNode:

tab = h5file.getNode("/carpeta1/datos_carpeta1_tabla1")

Para rellenar la tabla creamos un puntero (o constructor de líneas propio a la tabla) row.

mis_datos = tab.row

Creamos los datos que usaremos para rellenar la tabla:

fechas = np.array([int((dt.date(2000, 1, 1) +
                        dt.timedelta(days = 1) * i).strftime("%Y%m%d"))
                        for i in range(10000)],
                        dtype = np.int32)
x = np.random.randn(10000)
y = np.random.randn(10000)
z = np.random.randn(10000)

Llenamos la tabla de manera recursiva con el constructor de líneas mis_datos y el método append:

for i in range(10000):
    mis_datos['fecha'] = fechas[i]
    mis_datos['x'] = x[i]
    mis_datos['y'] = y[i]
    mis_datos['z'] = z[i]
    mis_datos.append()

Se llama al método flush sobre la tabla para volcar y registrar efectivamente los datos en la tabla.

tab.flush()

Si queremos, podemos añadir meta-información a la tabla:

tab.attrs.nombre_sensor="medidas de un escaterómetro"
tab.attrs.numero_columnas = 3

Además de la meta-información que hemos añadido, el objeto tabla contenía ya un cierto número de atributos que podemos ver escribiendo lo siguiente en IPython

tab.attrs

que nos mostrará lo siguiente:

/carpeta1/datos_carpeta1_tabla1._v_attrs (AttributeSet), 14 attributes:
   [CLASS := 'TABLE',
    FIELD_0_FILL := 0,
    FIELD_0_NAME := 'fecha',
    FIELD_1_FILL := 0.0,
    FIELD_1_NAME := 'x',
    FIELD_2_FILL := 0.0,
    FIELD_2_NAME := 'y',
    FIELD_3_FILL := 0.0,
    FIELD_3_NAME := 'z',
    NROWS := 0,
    TITLE := 'ejemplo de tabla',
    VERSION := '2.7',
    nombre_sensor := 'medidas de un escaterómetro',
    numero_columnas := 3]

Finalmente, cerramos la tabla creada como vimos en el primer capítulo.

h5file.close()

Si queréis usar una aplicación gráfica para ver el alrchivo que hemos creado podéis usar hdfview (sudo apt-get install hdfview) o vitables. En este caso os muestro un ejemplo con hdfview ya que vitables posiblemente lo veamos en uno de los próximos capítulos.

hdfview

Bueno, ya tenemos algunos datos guardados en nuestro fichero HDF5. El próximo día veremos como anexar datos a una tabla ya existente.

Saludos.


photo

Kiko es doctor en ciencias físicas y esta especializado en física de la atmósfera, meteorología y climatología. Además de estar en las nubes es especialista en temas de energías renovables en Iberdrola. Ávido de seguir mejorando siempre está abierto a participar en nuevos proyectos y retos por lo que no dudes en contactarle si necesitas servicios especializados de Python o meteorología.

Comentarios