Glatte Daten in Python

Shivam Arora 30 Januar 2023
  1. Verwendung von die Methode scipy.signal.savgol_filter() zum Glätten von Daten in Python
  2. Verwendung von die Methode numpy.convolve zum Glätten von Daten in Python
  3. Verwenden Sie statsmodels.kernel_regression, um Daten in Python zu glätten
Glatte Daten in Python

Python hat eine breite Anwendung in der Datenanalyse und -visualisierung. Wenn wir umfangreiche Datensätze analysieren, die viele Beobachtungen enthalten, können wir auf Situationen stoßen, in denen wir die Kurven in einem Diagramm glätten müssen, um das endgültige Diagramm genauer zu untersuchen. Wir werden diskutieren, wie Sie dies in Python mit verschiedenen Methoden erreichen können.

Verwendung von die Methode scipy.signal.savgol_filter() zum Glätten von Daten in Python

Der Savitzky-Golay-Filter ist ein digitaler Filter, der Datenpunkte zum Glätten des Graphen verwendet. Es verwendet die Methode der kleinsten Quadrate, die ein kleines Fenster erzeugt und ein Polynom auf die Daten dieses Fensters anwendet und dann dieses Polynom verwendet, um den Mittelpunkt des bestimmten Fensters anzunehmen. Als nächstes wird das Fenster um einen Datenpunkt verschoben und der Prozess wird wiederholt, bis alle Nachbarn relativ zueinander angepasst sind.

Wir können dies mit der Funktion scipy.signal.savgol_filter() in Python implementieren.

Siehe das folgende Beispiel.

import numpy as np
from scipy.signal import savgol_filter
import matplotlib.pyplot as plt

x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x) + np.random.random(100) * 0.2
yhat = savgol_filter(y, 51, 3)

plt.plot(x, y)
plt.plot(x, yhat, color="green")
plt.show()

Ausgabe:

Python glatte Daten 1

Im obigen Beispiel haben wir die Filtermethode verwendet, um die auf der y-Achse darzustellenden Daten zu glätten. Wir haben sowohl die ursprünglichen als auch die geglätteten Daten grafisch dargestellt, damit Sie den Unterschied beobachten können.

Verwendung von die Methode numpy.convolve zum Glätten von Daten in Python

Das numpy.convolve() gibt die diskrete, lineare Faltung zweier eindimensionaler Folgen an. Wir werden dies verwenden, um gleitende Durchschnitte zu erstellen, die die Daten filtern und glätten können.

Dies wird nicht als gute Methode angesehen.

Zum Beispiel,

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x) + np.random.random(100) * 0.8


def smooth(y, box_pts):
    box = np.ones(box_pts) / box_pts
    y_smooth = np.convolve(y, box, mode="same")
    return y_smooth


plt.plot(x, y)
plt.plot(x, smooth(y, 3))
plt.plot(x, smooth(y, 19))

Ausgabe:

Python glatte Daten 2

Im obigen Beispiel haben wir zwei gleitende Durchschnitte mit einem Zeit-Delta von 3 und 19 gezeichnet. Wir haben beide in der Grafik eingezeichnet.

Wir können auch andere Methoden verwenden, um gleitende Durchschnitte zu berechnen.

Verwenden Sie statsmodels.kernel_regression, um Daten in Python zu glätten

Die Kernel-Regression berechnet den bedingten Mittelwert E[y|X] mit y = g(X) + e und passt in das Modell. Es kann verwendet werden, um Daten basierend auf der Kontrollvariablen zu glätten.

Dazu müssen wir die Funktion KernelReg() aus dem Modul statsmodels verwenden.

Zum Beispiel,

from statsmodels.nonparametric.kernel_regression import KernelReg
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x) + np.random.random(100) * 0.2

kr = KernelReg(y, x, "c")
plt.plot(x, y, "+")
y_pred, y_std = kr.fit(x)

plt.plot(x, y_pred)
plt.show()

Ausgabe:

Python glatte Daten 3

Beachten Sie, dass diese Methode ein gutes Ergebnis liefert, aber als sehr langsam angesehen wird. Wir können auch die Fourier-Transformation verwenden, aber sie funktioniert nur mit periodischen Daten.

Verwandter Artikel - Python Graph