Objetos y colecciones de series temporales
Tipos de series temporales y sus usos
Los objetos de series temporales de MATLAB® son de dos tipos:
timeseries
: almacena datos y valores de tiempo, así como la información de metadatos que incluye unidades, eventos, calidad de datos y método de interpolacióntscollection
: almacena una colección de objetos detimeseries
que comparten un vector de tiempo común, conveniente para realizar operaciones en series temporales sincronizadas con diferentes unidades
Esta sección trata los siguientes temas:
Usar constructores de series temporales para crear instancias de clases de series temporales
Modificar propiedades de objeto utilizando métodos
set
o de notación de puntosLlamar a funciones y métodos de series temporales
Para obtener una visión general rápida de la programación con objetos de timeseries
y tscollection
, siga los pasos en Ejemplo: Objetos y métodos de series temporales.
Muestra de datos de series temporales
Para comprender adecuadamente la descripción de las propiedades y los métodos de timeseries
en esta documentación, es importante aclarar algunos términos relacionados con el almacenamiento de datos en un objeto de timeseries
: la diferencia entre un valor de datos y una muestra de datos.
Un valor de datos es un valor escalar único registrado en un momento específico. Una muestra de datos consta de uno o más valores asociados con un tiempo específico en el objeto de timeseries
. El número de muestras de datos en una serie temporal es igual a la longitud del vector de tiempo.
Por ejemplo, considere datos que consisten en tres señales de sensores: dos señales representan la posición de un objeto en metros y la tercera representa su velocidad en metros/segundo.
Para introducir la matriz de datos, escriba lo siguiente en la línea de comandos de MATLAB:
x = [-0.2 -0.3 13; -0.1 -0.4 15; NaN 2.8 17; 0.5 0.3 NaN; -0.3 -0.1 15]
El valor NaN
representa un valor de datos que faltan. MATLAB muestra la siguiente matriz de 5 por 3:
x= -0.2000 -0.3000 13.0000 -0.1000 -0.4000 15.0000 NaN 2.8000 17.0000 0.5000 0.3000 NaN -0.3000 -0.1000 15.0000
Las dos primeras columnas de x
contienen cantidades con las mismas unidades y puede crear un objeto de timeseries
multivariado para almacenar estas dos series temporales. Para obtener más información sobre cómo crear objetos de timeseries
, consulte Constructor de series temporales. El siguiente comando crea un objeto de timeseries
ts_pos
para almacenar los valores de posición:
ts_pos = timeseries(x(:,1:2), 1:5, 'name', 'Position')
MATLAB responde mostrando las siguientes propiedades de ts_pos
:
timeseries Common Properties: Name: 'Position' Time: [5x1 double] TimeInfo: [1x1 tsdata.timemetadata] Data: [5x2 double] DataInfo: [1x1 tsdata.datametadata] More properties, Methods
La longitud del vector de tiempo, que es 5
en este ejemplo, es igual al número de muestras de datos en el objeto de timeseries
. Encuentre el tamaño de la muestra de datos en ts_pos
escribiendo lo siguiente en la línea de comandos de MATLAB:
getdatasamplesize(ts_pos) ans = 1 2
Del mismo modo, puede crear un segundo objeto de timeseries
para almacenar los datos de velocidad:
ts_vel = timeseries(x(:,3), 1:5, 'name', 'Velocity');
Encuentre el tamaño de cada muestra de datos en ts_vel
escribiendo lo siguiente:
getdatasamplesize(ts_vel) ans = 1 1
Observe que ts_vel
tiene un valor de datos en cada muestra de datos y ts_pos
tiene dos valores de datos en cada muestra de datos.
Nota
En general, cuando los datos de series temporales son un arreglo multidimensional M por N por P por... con muestras de M, el tamaño de cada muestra de datos es N por P por...
Si desea realizar operaciones en los objetos ts_pos
y ts_vel
de timeseries
mientras los mantiene sincronizados, agrúpelos en una colección de series temporales. Para obtener más información, consulte Sintaxis del constructor de la colección de series temporales.
Ejemplo: Objetos y métodos de series temporales
Modificar unidades de series temporales y método de interpolación
Volver a muestrear un objeto de colección de series temporales
Añadir una muestra de datos a un objeto de colección de series temporales
Eliminar una serie temporal de una colección de series temporales
Visualizar valores de vectores de tiempo como cadenas de fecha
Crear objetos de series temporales
Esta parte del ejemplo ilustra cómo crear varios objetos de timeseries
a partir de un arreglo. Para obtener más información sobre el objeto de timeseries
, consulte Constructor de series temporales.
Importe los datos de muestra de count.dat
al área de trabajo de MATLAB.
load count.dat
Esto añade la matriz de 24 por 3, count
, al área de trabajo. Cada columna de count
representa el recuento de vehículos por hora en cada una de las tres intersecciones urbanas.
Vea la matriz count
.
count
Cree tres objetos de timeseries
para almacenar los datos recopilados en cada intersección.
count1 = timeseries(count(:,1), 1:24,'name', 'intersection1'); count2 = timeseries(count(:,2), 1:24,'name', 'intersection2'); count3 = timeseries(count(:,3), 1:24,'name', 'intersection3');
Nota
En la construcción anterior, los objetos de timeseries
tienen tanto un nombre de variable (por ejemplo, count1
) como un nombre de objeto interno (por ejemplo, intersection1
). El nombre de la variable se usa con las funciones de MATLAB. El nombre del objeto es una propiedad del objeto, al que se accede con métodos de objeto. Para obtener más información sobre las propiedades y métodos de los objetos timeseries
, consulte Propiedades de series temporales y Métodos de series temporales.
Por defecto, una serie temporal tiene un vector de tiempo que tiene unidades de segundos y un tiempo de inicio de 0 segundos. El ejemplo construye los objetos de series temporales count1
, count2
y count3
con tiempos de inicio de 1 segundo, tiempos de finalización de 24 segundos e incrementos de 1 segundo. Usted cambiará las unidades de tiempo a horas en Modificar unidades de series temporales y método de interpolación.
Nota
Si desea crear un objeto timeseries
que agrupe las tres columnas de datos en count
, use la siguiente sintaxis:
count_ts = timeseries(count, 1:24,'name','traffic_counts')
Esto es útil cuando todas las series temporales tienen las mismas unidades y desea mantenerlas sincronizadas durante los cálculos.
Modificar unidades de series temporales y método de interpolación
Después de crear un objeto de timeseries
, como se describe en Crear objetos de series temporales, puede modificar sus unidades y el método de interpolación utilizando la notación de puntos.
Vea las propiedades actuales de count1
.
get(count1)
MATLAB muestra los valores de propiedad actuales del objeto count1
timeseries
.
Vea las propiedades actuales de DataInfo
usando notación de puntos.
count1.DataInfo
Cambie las unidades de datos de count1
a 'cars'
.
count1.DataInfo.Units = 'cars';
Establezca el método de interpolación para count1
para mantener el orden cero.
count1.DataInfo.Interpolation = tsdata.interpolation('zoh');
Compruebe que las propiedades de DataInfo
se hayan modificado.
count1.DataInfo
Modifique las unidades de tiempo para que sean 'hours'
para las tres series temporales.
count1.TimeInfo.Units = 'hours'; count2.TimeInfo.Units = 'hours'; count3.TimeInfo.Units = 'hours';
Definir eventos
Esta parte del ejemplo ilustra cómo definir eventos para un objeto de timeseries
utilizando el objeto auxiliar tsdata.event
. Los eventos marcan los datos en momentos específicos. Cuando representa los datos, los marcadores de eventos se muestran en la gráfica. Los eventos también proporcionan una manera conveniente de sincronizar varias series temporales.
Añada dos eventos a los datos que marquen las horas de los desplazamientos al trabajo por la mañana y de vuelta a casa por la tarde.
Construya y añada el primer evento a todas las series temporales. El primer evento ocurre a las 8 a. m.
e1 = tsdata.event('AMCommute',8); e1.Units = 'hours'; % Specify the units for time count1 = addevent(count1,e1); % Add the event to count1 count2 = addevent(count2,e1); % Add the event to count2 count3 = addevent(count3,e1); % Add the event to count3
Construya y añada el segundo evento a todas las series temporales. El segundo evento ocurre a las 6 p. m.
e2 = tsdata.event('PMCommute',18); e2.Units = 'hours'; % Specify the units for time count1 = addevent(count1,e2); % Add the event to count1 count2 = addevent(count2,e2); % Add the event to count2 count3 = addevent(count3,e2); % Add the event to count3
Represente la serie temporal count1
.
figure plot(count1)
Cuando representa cualquiera de las series temporales, el método de representación definido para los objetos de series temporales muestra los eventos como marcadores. Por defecto, los marcadores son círculos rojos.
La gráfica refleja que count1
usa interpolación de retención de orden cero.
Represente count2
.
plot(count2)
Si representa la serie temporal count2
, esta reemplaza la visualización de count1
. Puede ver sus eventos y que usa interpolación lineal.
Superponga las gráficas de series temporales estableciendo hold on
.
hold on
plot(count3)
Crear objetos de colección de series temporales
Esta parte del ejemplo ilustra cómo crear un objeto de tscollection
. Cada serie temporal individual en una colección se denomina miembro. Para obtener más información sobre el objeto de tscollection
, consulte Constructor de colecciones de series temporales.
Nota
Normalmente, utiliza el objeto de tscollection
para agrupar series temporales sincronizadas que tienen unidades diferentes. En este ejemplo simple, todas las series temporales tienen las mismas unidades y el objeto tscollection
no proporciona una ventaja sobre la agrupación de las tres series temporales en un solo objeto de timeseries
. Para ver un ejemplo de cómo agrupar varias series temporales en un objeto de timeseries
, consulte Crear objetos de series temporales.
Cree un objeto de tscollection
llamado count_coll
y use la sintaxis del constructor para agregar inmediatamente dos de las tres series temporales actualmente en el espacio de trabajo de MATLAB (añadirá la tercera serie temporal más adelante).
tsc = tscollection({count1 count2},'name', 'count_coll')
Nota
Los vectores de tiempo de los objetos de timeseries
que está agregando a tscollection
deben coincidir.
Observe que la propiedad Name
de los objetos de timeseries
se usa para nombrar a los miembros de la colección como intersection1
e intersection2
.
Añada el tercer objeto de timeseries
en el espacio de trabajo a tscollection
.
tsc = addts(tsc, count3)
Se enumeran los tres miembros de la colección.
Volver a muestrear un objeto de colección de series temporales
Esta parte del ejemplo ilustra cómo volver a muestrear cada miembro en un tscollection
usando un nuevo vector de tiempo. La operación de remuestreo se utiliza para seleccionar datos existentes en valores de tiempo específicos o para interpolar datos en intervalos más precisos. Si el nuevo vector de tiempo contiene valores de tiempo que no existían en el vector de tiempo anterior, los nuevos valores de datos se calculan utilizando el método de interpolación predeterminado que asoció con la serie temporal.
Vuelva a muestrear la serie temporal para incluir valores de datos cada 2 horas en lugar de cada hora y guárdela como un nuevo objeto de tscollection
.
tsc1 = resample(tsc,1:2:24)
En algunos casos, es posible que necesite una muestra más precisa de la información que tiene actualmente y es razonable obtenerla interpolando valores de datos.
Interpole valores en cada marca de media hora.
tsc1 = resample(tsc,1:0.5:24)
Para añadir valores en cada marca de media hora, se utiliza el método de interpolación predeterminado de una serie temporal. Por ejemplo, los nuevos puntos de datos en intersection1
se calculan utilizando el método de interpolación de retención de orden cero, que mantiene constante el valor de la muestra anterior. Establezca el método de interpolación para intersection1
como se describe en Modificar unidades de series temporales y método de interpolación.
Los nuevos puntos de datos en intersection2
e intersection3
se calculan mediante interpolación lineal, que es el método predeterminado.
Represente los miembros de tsc1
con marcadores para ver los resultados de la interpolación.
hold off % Allow axes to clear before plotting plot(tsc1.intersection1,'-xb','Displayname','Intersection 1')
Puede ver que los puntos de datos se han interpolado en intervalos de media hora, y que la Intersección 1 usa interpolación de retención de orden cero, mientras que los otros dos miembros usan interpolación lineal.
Mantenga la gráfica en la figura mientras agrega los otros dos miembros a la gráfica. Debido a que el método plot
suprime las etiquetas del eje mientras que hold
está on
, añada también una leyenda para describir las tres series.
hold on plot(tsc1.intersection2,'-.xm','Displayname','Intersection 2') plot(tsc1.intersection3,':xr','Displayname','Intersection 3') legend('show','Location','NorthWest')
Añadir una muestra de datos a un objeto de colección de series temporales
Esta parte del ejemplo ilustra cómo añadir una muestra de datos a un tscollection
.
Añada una muestra de datos al miembro de la colección intersection1
a las 3,25 horas (es decir, 15 minutos después de la hora).
tsc1 = addsampletocollection(tsc1,'time',3.25,... 'intersection1',5);
Hay tres miembros en la colección tsc1
y, si se añade una muestra de datos a un miembro, se añade una muestra de datos a los otros dos miembros a las 3,25 horas. Sin embargo, dado que no especificó los valores de datos para intersection2
e intersection3
en la nueva muestra, los valores restantes se representan con valores NaN
para estos miembros. Para aprender a eliminar o interpolar valores de datos que faltan, consulte Eliminar los datos que faltan y Interpolar los datos que faltan.
Datos de tsc1
de 2,0 a 3,5 horas
Horas | Intersección 1 | Intersección 2 | Intersección 3 |
---|---|---|---|
2.0 | 7 | 13 | 11 |
2.5 | 7 | 15 | 15.5 |
3.0 | 14 | 17 | 20 |
3.25 | 5 |
|
|
3.5 | 14 | 15 | 14.5 |
Para ver todos los datos de intersection1
(incluida la nueva muestra a las 3,25 horas), escriba
tsc1.intersection1
Del mismo modo, para ver todos los datos de intersection2
(incluida la nueva muestra a las 3,25 horas que contiene un valor NaN
), escriba
tsc1.intersection2
Eliminar e interpolar los datos que faltan
Los objetos de series temporales usan valores NaN
para representar datos que faltan. En esta parte del ejemplo se muestra cómo eliminar los datos que faltan o interpolar valores para ellos mediante el método de interpolación especificado para esa serie temporal. En Añadir una muestra de datos a un objeto de colección de series temporales, añadió una nueva muestra de datos a la colección tsc1
a las 3,25 horas.
Como la colección tsc1
tiene tres miembros, añadir una muestra de datos a un miembro añadió una muestra de datos a los otros dos miembros a las 3,25 horas. Sin embargo, debido a que no especificó los valores de datos para los miembros intersection2
e intersection3
a las 3,25 horas, actualmente contienen valores que faltan, representados por NaN
.
Eliminar los datos que faltan. Encuentre y elimine las muestras de datos que contienen valores NaN en la colección tsc1
.
tsc1 = delsamplefromcollection(tsc1,'index',... find(isnan(tsc1.intersection2.Data)));
Este comando busca un miembro tscollection
a la vez, en este caso, intersection2
. Cuando un valor faltante se encuentra en intersection2
, los datos en ese momento se eliminan de todos los miembros de tscollection
.
Nota
Use la sintaxis de notación de puntos para acceder a la propiedad Data
del miembro intersection2
en la colección tsc1
:
tsc1.intersection2.Data
Para obtener una lista completa de las propiedades de timeseries
, consulte Propiedades de series temporales.
Interpolar los datos que faltan. Siguiendo el ejemplo, reintroduzca los valores NaN
en intersection2
e intersection3
.
tsc1 = addsampletocollection(tsc1,'time',3.25,... 'intersection1',5);
Interpole los valores que faltan en tsc1
utilizando el vector de tiempo actual (tsc1.Time
).
tsc1 = resample(tsc1,tsc1.Time);
Esto reemplaza los valores NaN
en intersection2
e intersection3
mediante el uso de interpolación lineal, el método de interpolación predeterminado para estas series temporales.
Nota
La notación de puntos tsc1.Time
se usa para acceder a la propiedad Time
de la colección tsc1
. Para obtener una lista completa de las propiedades de tscollection
, consulte Propiedades de la colección de series temporales.
Para ver los datos de intersection2
después de la interpolación, por ejemplo, escriba
tsc1.intersection2
Nuevos datos tsc1 de 2,0 a 3,5 horas
Horas | Intersección 1 | Intersección 2 | Intersección 3 |
---|---|---|---|
2.0 | 7 | 13 | 11 |
2.5 | 7 | 15 | 15.5 |
3.0 | 14 | 17 | 20 |
3.25 | 5 | 16 | 17.3 |
3.5 | 14 | 15 | 14.5 |
Eliminar una serie temporal de una colección de series temporales
Elimine la serie temporal de intersection3
del objeto de tscollection
tsc1
.
tsc1 = removets(tsc1,'intersection3')
Ahora se enumeran dos series temporales como miembros de la colección.
Visualizar valores de vectores de tiempo como cadenas de fecha
Esta parte del ejemplo ilustra cómo controlar el formato en el que se visualiza el vector de datos numéricos de tiempo, usando cadenas de fecha de MATLAB. Para obtener una lista completa de los formatos de cadena de fecha de MATLAB compatibles con los objetos de timeseries
y tscollection
, consulte la definición de la definición del vector de tiempo en la página de referencia de timeseries
.
Para usar cadenas de fecha, debe establecer el campo StartDate
de la propiedad TimeInfo
. Todos los valores en el vector de tiempo se convierten en cadenas de fecha usando StartDate
como fecha de referencia.
Supongamos que la fecha de referencia es el 25 de diciembre de 2009.
tsc1.TimeInfo.Units = 'hours'; tsc1.TimeInfo.StartDate = '25-DEC-2009 00:00:00';
De manera similar a lo que hizo con los objetos de series temporales de count1
, count2
y count3
, establezca las unidades de datos de los miembros tsc1
en la cadena 'car count'
.
tsc1.intersection1.DataInfo.Units = 'car count'; tsc1.intersection2.DataInfo.Units = 'car count';
Representar miembros de la colección de series temporales
Para representar datos en una colección de series temporales, debe representar a sus miembros de uno en uno.
Primero represente el miembro intersection1
de tsc1
.
hold off
plot(tsc1.intersection1);
Cuando representa un miembro de una colección de series temporales, sus unidades de tiempo se muestran en el eje x
y sus unidades de datos se muestran en el eje y
. El título de la gráfica se muestra como 'Time Series Plot:<member name>'
.
Si utiliza la misma figura para representar un miembro diferente de la colección, no se mostrarán anotaciones. El método de serie temporal plot
no intenta actualizar etiquetas y títulos cuando hold
está on
porque los descriptores de la serie pueden ser diferentes.
Represente intersection1
e intersection2
en la misma figura. Evite sobrescribir la gráfica, pero elimine las etiquetas de los ejes y el título. Añada una leyenda y establezca la propiedad DisplayName
de la serie de líneas para etiquetar cada miembro.
plot(tsc1.intersection1,'-xb','Displayname','Intersection 1') hold on plot(tsc1.intersection2,'-.xm','Displayname','Intersection 2') legend('show','Location','NorthWest')
La gráfica ahora incluye las dos series temporales en la colección: intersection1
e intesection2
. Al representar la segunda gráfica se borraron las etiquetas de la primera gráfica.
Finalmente, cambie las cadenas de fecha en el eje x
a hours
y represente nuevamente los dos miembros de la colección de series temporales con una leyenda.
Especifique las unidades de tiempo para que sean «horas» para la colección.
tsc1.TimeInfo.Units = 'hours';
Especifique el formato para mostrar el tiempo.
tsc1.TimeInfo.Format = 'HH:MM';
Recree la última gráfica con nuevas unidades de tiempo.
hold off plot(tsc1.intersection1,'-xb','Displayname','Intersection 1') % Prevent overwriting plot, but remove axis labels and title. hold on plot(tsc1.intersection2,'-.xm','Displayname','Intersection 2') legend('show','Location','NorthWest') % Restore the labels with the |xlabel| and |ylabel| commands and overlay a % data grid. xlabel('Time (hours)') ylabel('car count') grid on
Para obtener más información sobre las opciones de representación de series temporales, consulte timeseries
.
Constructor de series temporales
Antes de implementar las diversas funciones y métodos de MATLAB específicamente diseñados para gestionar datos de series temporales, debe crear un objeto de timeseries
para almacenar los datos. Consulte timeseries
para la sintaxis del constructor de objetos de timeseries
.
Para ver un ejemplo del uso del constructor, consulte Crear objetos de series temporales.
Propiedades de series temporales
Consulte timeseries
para obtener una descripción de todas las propiedades del objeto de timeseries
. Puede especificar las propiedades Data
, IsTimeFirst
, Name
, Quality
y Time
como argumentos de entrada en el constructor. Para asignar otras propiedades, use la función set
o la notación de puntos.
Nota
Para obtener información de propiedad desde la línea de comandos, escriba help timeseries/tsprops
en la línea de comandos de MATLAB.
Para ver un ejemplo de edición de propiedades de objeto de timeseries
, consulte Modificar unidades de series temporales y método de interpolación.
Métodos de series temporales
Para obtener una descripción de todos los métodos de series temporales, consulte timeseries
.
Constructor de colecciones de series temporales
Introducción
El objeto de MATLAB, llamado tscollection
es una variable de MATLAB que agrupa varias series temporales con un vector de tiempo común. Los objetos de timeseries
que incluye en el objeto de tscollection
se denominan miembros de esta colección y poseen varios métodos para un análisis y manipulación convenientes de timeseries
.
Sintaxis del constructor de la colección de series temporales
Antes de implementar los métodos de MATLAB específicamente diseñados para operar en una colección de objetos de timeseries
, debe crear un objeto de tscollection
para almacenar los datos.
La siguiente tabla resume la sintaxis para usar el constructor de tscollection
. Para ver un ejemplo del uso de este constructor, consulte Crear objetos de colección de series temporales.
Descripciones de sintaxis de colección de series temporales
Sintaxis | Descripción |
---|---|
| Crea un objeto de El argumento
Los objetos de |
| Crea un objeto de Cuando los valores de tiempo son cadenas de fecha, debe especificar |
| De forma opcional, introduzca los siguientes pares de parámetro-valor después de los argumentos
|
Propiedades de la colección de series temporales
En esta tabla se enumeran las propiedades del objeto de tscollection
. Puede especificar las propiedades Name
, Time
y TimeInfo
como argumentos de entrada en el constructor de tscollection
.
Descripciones de propiedades de colección de series temporales
Propiedad | Descripción |
---|---|
| El nombre del objeto de |
| Un vector de valores de tiempo. Cuando La longitud de |
| Usa los siguientes campos para almacenar información contextual acerca de
|
Métodos de colección de series temporales
Métodos generales de colección de series temporales. Utilice los siguientes métodos para consultar y establecer propiedades de objeto y representar los datos.
Métodos para consultar propiedades
Método | Descripción |
---|---|
| Consultar los valores de propiedad del objeto de |
| Evaluar como |
| Devolver la longitud del vector de tiempo. |
Representar la serie temporal en una colección. | |
| Establecer los valores de las propiedades de |
| Devolver el tamaño de un objeto de |
Métodos de manipulación de datos y tiempo. Utilice los siguientes métodos para añadir o eliminar muestras de datos y manipular el objeto de tscollection
.
Métodos para manipular datos y tiempo
Método | Descripción |
---|---|
Añadir un objeto de | |
Añadir muestras de datos a un objeto de | |
Eliminar una o más muestras de datos de un objeto de | |
| Extraer un vector de tiempo de cadenas de fecha de un objeto de |
| Extraer muestras de datos de un objeto de |
Devolver un arreglo de celdas de nombres de series temporales en un objeto de | |
| Concatenación horizontal de objetos de |
Eliminar uno o más objetos de | |
| Seleccionar o interpolar datos en un objeto de |
| Establecer los valores de tiempo en el vector de tiempo de un objeto de |
Cambiar el nombre del objeto seleccionado en un objeto de | |
| Concatenación vertical de objetos de |