07 marzo, 2015

Cómo guardar los datos y metadatos en una misma estructura de MATLAB

Cuando proceso datos en MATLAB uso estructuras para manejar los datos y metadatos. El uso de estructuras hace engorroso el acceso a los datos pero me facilita el manejo de los metadatos porque me permite tenerlos en la misma variable. Para cada variable creo una estructura con el campo data donde almaceno el valor de la variable; el resto de los campos de la estructura contienen los metadatos de la variable.

Contents

Variables individuales

Supongamos que queremos graficar una serie de tiempo de la marea. Usaremos las estructuras Tiempo y Altura.

% Inicializar
clear, close all

% Se define la variable independiente
Tiempo.data = linspace(0,24);
Tiempo.units = 'hr';
Tiempo.long_name = 'Tiempo';
Tiempo.standard_name = 'time';
Tiempo.axis = 'T';

% Se define la variable dependiente
Altura.data = sin(Tiempo.data/24*2*pi);
Altura.units = 'm';
Altura.long_name = 'Altura del Nivel del Mar';
Altura.standard_name = 'sea_surface_height';

Atributos globales

Conviene incluir las estructuras de ambas variables en una estructura que contenga los atributos globales de la serie de tiempo.

% Incluir ambas variables
Marea.Tiempo=Tiempo;
Marea.Altura=Altura;

% Definir atributos globales
Marea.Metadata.title = 'Serie de tiempo de la marea';
Marea.Metadata.institution = 'GECI';
Marea.Metadata.source = 'Datos sintéticos';
Marea.Metadata.history = [datestr(now,30) ' Versión inicial'];
Marea.Metadata.references = 'http://evaristor.blogspot.com/search/label/MATLAB';
Marea.Metadata.comment = 'Guía de estilo para MATLAB: Metadatos';

% Graficado
plot(Marea.Tiempo.data,Marea.Altura.data)
xlabel([Marea.Tiempo.long_name ' (' Marea.Tiempo.units ')']);
ylabel([Marea.Altura.long_name ' (' Marea.Altura.units ')']);
title(Marea.Metadata.title)