迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 中的平滑数据

作者:迹忆客 最近更新:2023/12/17 浏览次数:

Python 在数据分析和可视化方面有着广泛的应用。当我们分析包含许多观测值的海量数据集时,我们可能会遇到必须平滑图形上的曲线以更仔细地研究最终图的情况。我们将讨论如何使用不同的方法在 Python 中实现这一点。


在 Python 中使用 scipy.signal.savgol_filter() 方法平滑数据

Savitzky-Golay 滤波器是一种数字滤波器,它使用数据点来平滑图形。它使用最小二乘法创建一个小窗口并对该窗口的数据应用多项式,然后使用该多项式来假设特定窗口的中心点。接下来,将窗口移动一个数据点,并迭代该过程,直到所有邻居彼此相对调整。

我们可以使用 scipy.signal.savgol_filter() 函数在 Python 中实现这一点。

请参考以下示例。

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()

输出:

python 平滑数据 1

在上面的例子中,我们使用过滤方法来平滑要绘制在 y 轴上的数据。我们绘制了原始数据和平滑数据,以便你观察差异。


在 Python 中使用 numpy.convolve 方法平滑数据

numpy.convolve() 给出两个一维序列的离散线性卷积。我们将使用它来创建可以过滤和平滑数据的移动平均线。

这不被认为是一个好方法。

例如,

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))

输出:

python 平滑数据 2

在上面的例子中,我们绘制了两个时间增量为 3 和 19 的移动平均线。我们在图中绘制了它们。

我们也可以使用其他方法来计算移动平均线。


在 Python 中使用 statsmodels.kernel_regression 平滑数据

核回归计算条件均值 E[y|X],其中 y = g(X) + e 并拟合模型。它可用于根据控制变量平滑数据。

为此,我们必须使用 statsmodels 模块中的 KernelReg() 函数。

例如,

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()

输出:

python 平滑数据 3

请注意,此方法产生了良好的结果,但被认为非常慢。我们也可以使用傅立叶变换,但它只适用于周期性数据。

上一篇:Python 中捕获键盘中断错误

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python 中捕获键盘中断错误

发布时间:2023/12/20 浏览次数:187 分类:Python

本教程讨论如何在 Python 中捕获 KeyboardInterrupt。当用户使用 Ctrl + C 或 Ctrl + Z 手动尝试停止正在运行的程序时,或在 Jupyter Notebook 的情况下通过中断内核

在 Python 中实现低通滤波器

发布时间:2023/12/20 浏览次数:101 分类:Python

本教程讨论如何在 python 中创建低通滤波器。低通滤波器是信号处理基础中的一个术语,经常用于过滤信号以获得更准确的结果。

在 Python 中解析日志文件

发布时间:2023/12/20 浏览次数:180 分类:Python

了解如何在 Python 中解析日志文件。日志文件包含有关在软件系统或应用程序运行期间发生的事件的信息。这些事件包括错误、用户提出的请求、Bug 等。

在 Python 中声明一个没有值的变量

发布时间:2023/12/20 浏览次数:94 分类:Python

在本教程中,我们将讨论如何在 Python 中声明一个变量而不赋值。变量是保留的内存位置,可以存储一些值。换句话说,Python 程序中的变量将数据提供给计算机以处理操作。

在 Python 中定义类全局变量

发布时间:2023/12/20 浏览次数:77 分类:Python

本教程演示了如何定义类全局变量。全局变量是一个可见变量,可以在程序的每个部分使用。全局变量也不在任何函数或方法中定义。

在 Python 中的 Lambda 函数中传递多个参数

发布时间:2023/12/20 浏览次数:133 分类:Python

了解如何在 Python 中的 Lambda 函数中传递多个参数。lambda 形式或 lambda 表达式是 Python 中的匿名函数。它们是可以使用 Python 中保留的 lambda 关键字创建的内联函数。

在 Python 中导入 OpenSSL

发布时间:2023/12/20 浏览次数:147 分类:Python

本教程演示了如何在 Python 中使用 OpenSSL。我们旨在学习如何在 Python 中使用 OpenSSL。安装 OpenSSL Python 库

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便