Datos fluidos en Python
-
Utilice el método
scipy.signal.savgol_filter()
para suavizar los datos en Python -
Utilice el método
numpy.convolve
para suavizar los datos en Python -
Utilice
statsmodels.kernel_regression
para suavizar los datos en Python
Python tiene una amplia aplicación en el análisis y visualización de datos. Cuando analizamos conjuntos de datos masivos que contienen muchas observaciones, podemos encontrar situaciones en las que tengamos que suavizar las curvas en un gráfico para estudiar el gráfico final con más cuidado. Discutiremos cómo lograr esto en Python usando diferentes métodos.
Utilice el método scipy.signal.savgol_filter()
para suavizar los datos en Python
El filtro Savitzky-Golay es un filtro digital que utiliza puntos de datos para suavizar el gráfico. Utiliza el método de mínimos cuadrados que crea una pequeña ventana y aplica un polinomio sobre los datos de esa ventana, y luego usa ese polinomio para asumir el punto central de la ventana en particular. A continuación, la ventana se desplaza en un punto de datos y el proceso se itera hasta que todos los vecinos estén relativamente ajustados entre sí.
Podemos usar la función scipy.signal.savgol_filter()
para implementar esto en Python.
Vea el siguiente ejemplo.
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()
Producción:
En el ejemplo anterior, usamos el método de filtrado para suavizar los datos que se trazarán en el eje y. Hemos graficado tanto los datos originales como los suavizados para que pueda observar la diferencia.
Utilice el método numpy.convolve
para suavizar los datos en Python
El numpy.convolve()
da la convolución lineal discreta de dos secuencias unidimensionales. Usaremos esto para crear promedios móviles que puedan filtrar y suavizar los datos.
Este no se considera un buen método.
Por ejemplo,
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))
Producción:
En el ejemplo anterior, graficamos dos promedios móviles con un delta de tiempo de 3 y 19. Hemos graficado ambos en el gráfico.
También podemos utilizar otros métodos para calcular las medias móviles.
Utilice statsmodels.kernel_regression
para suavizar los datos en Python
La regresión kernel calcula la media condicional E[y|X]
donde y = g(X) + e
y encaja en el modelo. Se puede utilizar para suavizar datos basados en la variable de control.
Para realizar esto, tenemos que usar la función KernelReg()
del módulo statsmodels
.
Por ejemplo,
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()
Producción:
Tenga en cuenta que este método produce un buen resultado pero se considera muy lento. También podemos usar la transformada de Fourier, pero solo funciona con datos periódicos.