Datos fluidos en Python

Shivam Arora 30 enero 2023
  1. Utilice el método scipy.signal.savgol_filter() para suavizar los datos en Python
  2. Utilice el método numpy.convolve para suavizar los datos en Python
  3. Utilice statsmodels.kernel_regression para suavizar los datos en Python
Datos fluidos 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:

datos suaves de python 1

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:

datos suaves de python 2

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:

datos suaves de python 3

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.

Artículo relacionado - Python Graph