33 votos

¿Cuál es la mejor estructura/implementación de datos para representar una serie temporal?

Me preguntaba cuál es la mejor práctica para representar elementos en una serie temporal, especialmente con grandes cantidades de datos. El enfoque/contexto es en un motor de pruebas de espalda y la comparación de múltiples series.

Parece que hay dos opciones:

1) Utilizando un índice entero, o
2) Utilizar un índice basado en la fecha

Por el momento estoy utilizando fechas, pero esto afecta al rendimiento y al uso de la memoria, ya que estoy utilizando una tabla hash en lugar de una matriz, y requiere cierta sobrecarga en la iteración (ya sea hacia adelante o hacia atrás), ya que tengo que determinar la fecha válida siguiente/anterior antes de poder acceder a ella.

Sin embargo, me permite agregar datos sobre la marcha (por ejemplo, construir el ohlc para la semana anterior cuando se miran las barras diarias) y, lo que es más importante para mí, me permite comparar diferentes series con la certeza de que estoy mirando la misma fecha/hora. Si estoy mirando un tema de la equidad en relación con un índice más amplio, y decir que el índice más amplio es la falta de unas pocas barras por cualquier razón, el uso de una matriz indexada entero significaría que estoy buscando en los datos futuros para el índice amplio frente a los datos actuales para el valor dado. No veo cómo podría manejar estas situaciones a menos que esté utilizando la fecha / hora.

Usar índices de enteros sería mucho más fácil en cuanto a código, así que me preguntaba qué hacen los demás o si hay una mejor práctica con esto.

27voto

lomaxx Puntos 32540

Representar las series temporales (especialmente los datos de ticks) utilizando estructuras de datos elaboradas puede no ser la mejor idea.

Puede intentar utilizar dos matrices de la misma longitud para almacenar sus series temporales. La primera matriz almacena los valores (por ejemplo, el precio) y la segunda el tiempo. Observe que la segunda serie es monotónicamente creciente (o al menos no decreciente), es decir, está ordenada. Esta propiedad permite buscar en ella mediante el algoritmo de búsqueda binaria. Una vez que obtienes el índice de un tiempo de interés en el segundo array, también tienes el índice de la entrada correspondiente en el primer array. Si envuelves los dos arrays y el algoritmo de búsqueda, por ejemplo, en una clase, tendrás toda la complejidad de la implementación oculta tras una simple interfaz.

11voto

public static Puntos 3587

Realmente no implementaría las series temporales por mi cuenta a menos que tuviera una buena razón para hacerlo. AQR usa pandas, casi todo el mundo en R usa zoo o xts.

Nunca me han gustado los arrays paralelos múltiples, si se rompe todo se rompe, además se pone más feo a medida que se incrementan los datos. Si estás haciendo algo en C++, ¿por qué no tener un array de structs para cada objeto en el que tengas cita, tiempo y todos los demás datos que necesites?

10voto

Avery Payne Puntos 11379

Si te tomas en serio el rendimiento y la flexibilidad, tienes que echar un vistazo a tabla de datos en R. Aquí está el paquete revisión de crantastic . Es muy rápido. Creo que es el mejor paquete que aborda los problemas de rendimiento y memoria.

8voto

ICR Puntos 6960

Después de hablarlo con mi mujer, se nos ocurrieron las siguientes ideas:

  1. Pocas personas pagan el precio completo. Entre una subvención aquí y una beca allí, las pequeñas sumas hicieron una buena mella para nosotros.
  2. ¿Piensas pagar todo el barco, sólo la matrícula, sólo la matrícula y el alojamiento y la comida? Hay muchos niveles en los que podemos participar como padres que lo hacen mucho más fácil.
  3. ¿Vamos a aconsejar a nuestra hija sobre las cargas adecuadas? Yo tomé entre 12 y 18 créditos por trimestre y terminé a tiempo, mi esposa tomó un bote completo pero tenía dos trabajos a tiempo completo para pagar la escuela y fue difícil para ella. Si nuestra hija tiene que trabajar para pagar todo, le sugeriremos que tome más de 4 años para completar la escuela (sólo por su cordura)

Lo importante es que, por mucho que quiera pagar la escuela de mi hijo, necesito estar seguro de que mi jubilación está totalmente financiada. Creo que sería un regalo cien veces mayor dejar que mi hija se independice y no se preocupe por su familia que tener un viaje gratis a la escuela. Parece egoísta tomar primero nuestra parte, pero a medida que envejecemos habrá cada vez menos tiempo para hacer una jubilación cómoda. Desde mi punto de vista, la escuela de un niño es la última de las prioridades para las que hay que ahorrar.

Por lo tanto, dejo de lado lo que puedo (que ahora mismo es nada) sabiendo que hay opciones para mi hija y que si me cuidan ella es libre de ser su propia persona.

7voto

mendicant Puntos 489

Hay una tercera opción: utilizar el ZOO para objetos de series temporales. Tendrá la ventaja de contar con índices y series temporales.

Según el comentario de Ulrich, el XTS es el camino a seguir.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X