2011-01-12 11 views
5

Al fine di risparmiare larghezza di banda e in modo da non avere generare immagini/Grafico noi stessi Ho intenzione di utilizzare Google API di creazione di grafici:Grafico tracciato: mantenere solo i dati più rilevanti

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

che funziona con la semplice emissione un (potenzialmente lungo) GET (o un POST) e poi Google genera e fornisce il grafico stesso.

A partire da ora ho grafici composti da circa duemila voci e vorrei ridurlo a un numero arbitrario di voci (ad esempio mantenendo solo il 50% delle voci originali o il 10% del voci originali).

Come posso decidere quali voci dovrei conservare in modo da avere il mio nuovo grafico il più vicino al grafico originale?

Si tratta di un problema di adattamento alla curva?

Nota che so che posso fare POST per Chart API di Google con fino a 16K di dati e di questo può essere sufficiente per le mie esigenze, ma io sono ancora curioso

risposta

3

Cosa stai cercando di fare è noto come downsampling o decimazione. Essenzialmente si filtrano i dati e si rilascia N - 1 su ogni N campioni (decimazione o down-sampling per fattore di N). Un filtro grezzo sta prendendo una media mobile locale. Per esempio. se vuoi decimare di un fattore di N = 10, allora sostituisci ogni 10 punti per la media di quei 10 punti.

Nota che con lo schema sopra puoi perdere alcuni dati ad alta frequenza dalla tua trama (dal momento che stai effettivamente filtrando in basso i dati) - se è importante vedere la variabilità a breve termine allora un approccio alternativo è tracciare ogni N punti come una singola barra verticale che rappresenta l'intervallo (cioè min..max) di questi N punti.

+0

No, questo non mantiene il nuovo grafico più vicino all'originale. In effetti, potresti perdere tutti i dati rilevanti (che possono essere solo un segmento di punti X). Se l'OP significa fare seri "dati rilevanti", questa non è la soluzione. –

+0

A quale delle due soluzioni sopra menzionate fa riferimento? Intervallo di sottocampionamento/decimazione o di tracciamento? –

+0

In entrambi si sta semplicemente modificando i dati, che, almeno per gli statistici, è sempre un no-no, perché i punti "non sono veri e propri punti di dati". Se vuoi mantenere lo "spirito" del grafico, questi metodi non lo faranno, hai bisogno di un approccio più intelligente. Se, tuttavia, la fedeltà dei dati non è importante per l'OP, allora sì, questo semplice metodo farà. –

1

Il riepilogo grafico (dati serie temporali) è un problema molto difficile. È come decidere, in un testo, qual è la parte "rilevante" da conservare in un riepilogo automatico di esso. Vi suggerisco di utilizzare una delle biblioteche più rispettati per la ricerca di "modelli di interesse" nei dati di serie temporali da Eamonn Keogh

3

Il flot-downsample plugin per la libreria grafica Flot JavaScript potrebbe fare quello che stai cercando, fino a un certo punto.

Lo scopo è provare a mantenere le caratteristiche visive della linea originale utilizzando un numero di punti dati notevolmente inferiore.

La ricerca dietro questo algoritmo è documentata in the author's thesis.

Si noti che non funziona per qualsiasi tipo di serie e non darà risultati significativi quando si desidera un fattore di campionamento inferiore a 10, nella mia esperienza.

Il problema è che taglia le serie in finestre di dimensioni uguali quindi mantiene un punto per finestra. Dal momento che potresti avere dati più densi in alcune finestre rispetto ad altri, il risultato non è necessariamente ottimale. Ma è efficiente (funziona in tempo lineare).

Problemi correlati