2011-01-12 9 views
5

el fin de ahorrar ancho de banda y con el fin de no tener a generar imágenes/gráficos nosotros mismos Pienso en el uso de la API de gráficos de Google:Gráfico: solamente mantener los datos más relevantes

http://code.google.com/apis/chart/

que funciona mediante la simple emisión un (potencialmente largo) GET (o un POST) y luego Google genera y sirve el gráfico.

A partir de ahora tengo gráficos de aproximadamente dos mil entradas y me gustaría reducir esto a un número arbitrario de entradas (por ejemplo, manteniendo solo el 50% de las entradas originales, o el 10% de las entradas). entradas originales).

¿Cómo puedo decidir qué entradas debo conservar para que mi nuevo gráfico sea el más cercano al gráfico original?

¿Es esto algún tipo de problema de ajuste de curva?

Nota que sé que puedo hacer POST a la API gráfica de Google con hasta 16 K de los datos y esto puede ser suficiente para mis necesidades, pero todavía estoy curioso

Respuesta

3

Lo que se busca hacer se conoce como downsampling o diezmacion. Esencialmente filtra los datos y luego suelta N - 1 de cada N muestras (decimación o reducción del muestreo por factor de N). Un filtro crudo simplemente está tomando una media móvil local. P.ej. si quieres diezmar por un factor de N = 10, reemplaza cada 10 puntos por el promedio de esos 10 puntos.

Tenga en cuenta que con el esquema anterior puede perder algunos datos de alta frecuencia de su trazado (ya que es efectivamente de paso bajo filtrando los datos); si es importante ver la variabilidad a corto plazo, un enfoque alternativo es trazar cada N puntos como una barra vertical única que representa el rango (es decir, min..max) de esos N puntos.

+0

No, esto no mantiene el nuevo gráfico tan cerca del original. De hecho, puede perder todos los datos relevantes (que pueden ser solo un segmento de X puntos). Si el OP significa hacer "datos relevantes" serios, esta no es la solución. –

+0

¿A cuál de las dos soluciones propuestas anteriormente se refiere? Reducción de muestras/diezmaciones o rangos de trazado? –

+0

En ambos, simplemente modifica los datos, lo que, al menos para los estadísticos, es siempre un no-no, porque los puntos "no son puntos de datos reales". Si desea mantener el "espíritu" del gráfico, estos métodos no funcionarán, necesita un enfoque más inteligente. Sin embargo, si la fidelidad de los datos no es importante para el OP, entonces sí, estos simples métodos lo harán. –

1

El resumen del gráfico (datos de series de tiempo) es un problema muy difícil. Es como decidir, en un texto, cuál es la parte "relevante" para mantener en un resumen automático de la misma. Le sugiero que use una de las bibliotecas más respetadas para encontrar "patrones de interés" en los datos de series de tiempo por Eamonn Keogh

3

La biblioteca gráfica Flot JavaScript de flot-downsample plugin podría hacer lo que está buscando, hasta cierto punto.

El objetivo es intentar conservar las características visuales de la línea original utilizando considerablemente menos puntos de datos.

La investigación detrás de este algoritmo está documentada in the author's thesis.

Tenga en cuenta que no funciona para ningún tipo de serie, y no proporcionará resultados significativos cuando desee un factor de reducción de resolución superior a 10, según mi experiencia.

El problema es que corta la serie en ventanas de igual tamaño y luego mantiene un punto por ventana. Dado que puede tener datos más densos en algunas ventanas que otros, el resultado no es necesariamente óptimo. Pero es eficiente (se ejecuta en tiempo lineal).

Cuestiones relacionadas