2013-05-09 15 views
7

Ich zeichne Zeitreihendaten mit Matplotlib und einige der Daten fehlen in der Sequenz. Matplotlib implizit verbindet den letzten zusammenhängenden Datenpunkt mit dem nächsten. Aber falls Daten fehlen, sieht die Handlung hässlich aus. Das Folgende ist die erhaltene Kurve. enter image description hereMatplotlib entferne Interpolation für fehlende Daten

Es kann gesehen werden, dass in der Nähe der 30. April Marker Daten fehlen und Matplotlib verbindet die Punkte. Auch das folgende Bild ist das Streudiagramm der Daten. Das Streudiagramm deckt diesen Fehler ab, aber zusammenhängende Datenpunkte sind in diesem Fall nicht gemeinsam. Darüber hinaus ist das Streudiagramm bei der großen Anzahl von Datenpunkten sehr langsam. enter image description here

Was ist die empfohlene Lösung für solche Probleme.

Antwort

8

Wenn Sie identifizieren können, wo die Bruchstellen sein sollte, können Sie entweder:

  1. Pause die Daten und zeichnen sich ‚Abschnitt‘ von Hand
  2. Einsatz np.nan in den Daten in den Spalten

Siehe zum Beispiel Plot periodic trajectories.

Sie können die gleiche Wirkung von scatter erhalten mit

ax.plot(x, y, linestyle='none', marker='o') 
+0

Beendet mit Pandas, die NaN einfügen würden –

+0

@NipunBatra Wenn Sie etwas anderes getan haben, sollten Sie dies als Antwort aufschreiben und Ihre eigene Antwort akzeptieren. – tacaswell

4

(wenn Sie nicht die Größe oder die Farbe jedes Punktes unabhängig skalieren wollen) Wie die vorherige Antwort sagt, sollten Sie NaNs einsetzen, wo es ist keine Daten. Diese Antwort ist spezifisch für Pandas und erklärt, wie dies leicht erreicht werden kann. Entweder:

  • Series.resample() oder
  • Series.reindex()

Die einfachste Methode zu verwenden ist resample(). Dies ist der kürzeste Weg für Daten mit regelmäßigem Abstand. Wenn Sie in Ihrem obigen Beispiel z. 5 Minuten Daten, tun Sie einfach data.resample("5 min"). Dies gibt Ihren Datensatz mit 'NaT' (Zeitäquivalent von NaN) in den fehlenden Werten zurück.

Der einzige Fall, in dem dies nicht funktioniert, ist, wenn Ihre Proben nicht regelmäßig voneinander getrennt sind.

Die Alternative ist reindex(), die auch für geordnete (aber nicht zeitserielle) Daten funktioniert. Wenn Sie beispielsweise einen Datensatz mit Ganzzahlen von 0 .. 100 indiziert haben, aber ein paar fehlende Beispiele, können Sie data.reindex([0:100]) tun. Sie können auch das Verhalten von resample mit reindex replizieren, indem Sie eine pandas.date_range()-Funktion als Argument übergeben.