Python 中的平滑数据
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()
输出:
在上面的例子中,我们使用过滤方法来平滑要绘制在 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))
输出:
在上面的例子中,我们绘制了两个时间增量为 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 中捕获键盘中断错误
发布时间:2023/12/20 浏览次数:187 分类:Python
-
本教程讨论如何在 Python 中捕获 KeyboardInterrupt。当用户使用 Ctrl + C 或 Ctrl + Z 手动尝试停止正在运行的程序时,或在 Jupyter Notebook 的情况下通过中断内核
在 Python 中实现低通滤波器
发布时间:2023/12/20 浏览次数:101 分类:Python
-
本教程讨论如何在 python 中创建低通滤波器。低通滤波器是信号处理基础中的一个术语,经常用于过滤信号以获得更准确的结果。
在 Python 中使用 requests 模块实现 Curl 命令
发布时间:2023/12/20 浏览次数:72 分类:Python
-
在本文中,你将学习如何使用 Python 中的 Requests 模块实现 curl 命令。我们讨论了 Get、Post、Put 和 Delete curl 命令。
在 Python 中使用 fetchall() 从数据库中提取元素
发布时间:2023/12/20 浏览次数:142 分类:Python
-
本文解释了 Python 中 fetchall() 方法的实现。该程序为数据库创建一个游标并处理错误异常。导出的输出给出了查询中提供的特定表中的元素列表。
在 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 库