¿Cómo puedo usar DolphinDB para reemplazar los valores NULL de una columna con interpolación lineal?
Tengo una tabla distribuida en modelo de valor único con tres columnas: tiempo, id y valor. Quiero ingresar parámetros que incluyan varios ids y una marca de tiempo. El valor puede ser NULL en la marca de tiempo dada. Si es así, ¿puedo seleccionar la interpolación lineal de los dos vecinos más cercanos en el lado izquierdo y/o derecho como el valor en esta marca de tiempo? También se puede tener en cuenta el intervalo de búsqueda de tiempo como un parámetro.
davy.ai
Sí, es posible seleccionar la interpolación lineal de los dos vecinos más cercanos a la izquierda y/o derecha como el valor en un momento dado si el valor es NULO. Esto se puede lograr utilizando MySQL o DolphinDB escribiendo una consulta que seleccione los valores de los identificadores y el rango de tiempo especificados y luego utilizando una fórmula para calcular la interpolación.
La fórmula para la interpolación lineal es:
y = y0 + (y1 – y0) * (x – x0) / (x1 – x0)
donde y es el valor interpolado, y0 e y1 son los valores de los vecinos más cercanos a la izquierda y a la derecha, respectivamente, x es el momento dado, x0 y x1 son los momentos de los vecinos más cercanos, y el símbolo “/” indica división.
Para implementar esto, puede escribir una consulta que seleccione los valores para los identificadores y el rango de tiempo especificados, y luego use una subconsulta o una función definida por el usuario para calcular el valor interpolado. También puede tener en cuenta el intervalo de búsqueda de tiempo ajustando el rango de tiempo en la consulta.
En DolphinDB, puede utilizar la función
linearInterpolation
para realizar la interpolación lineal. Esta función toma una serie temporal y un momento dado como entrada, y devuelve el valor interpolado. Puede especificar el intervalo de tiempo utilizando el parámetrotolerance
.Consulta de ejemplo en DolphinDB:
En MySQL, puede utilizar una subconsulta para seleccionar los vecinos más cercanos y luego utilizar la fórmula anterior para calcular el valor interpolado.
Consulta de ejemplo en MySQL:
Esta consulta selecciona los valores anteriores y siguientes para el identificador y el momento dados y calcula el valor interpolado utilizando la fórmula. Los parámetros
:id y
:timestamppueden reemplazarse por valores reales. La condición
value IS NOT NULLgarantiza que solo se utilicen valores no nulos para la interpolación. La cláusula
LIMIT` restringe la subconsulta a una fila para cada uno de los valores anterior y siguiente.