数据插值技术详解

数据插值是一种在两个已知数据点之间估计未知数据点的技术。在Python中,插值公式主要用于数据预处理阶段,对数据框或序列中的缺失值进行估算。可以使用这种方法来估计数据中的缺失数据点,无论是在Power BI中的Python还是在机器学习算法中。插值也用于图像处理中,例如在图像放大时,可以通过邻近像素来估计像素值。

学习目标

在这篇关于数据科学和机器学习的文章中,将学习如何处理缺失数据以及在将数据用于机器学习模型之前进行预处理。还将学习如何使用Python和Python的pandas库来处理缺失数据,即pandas的插值方法和scipy库。这篇文章是作为数据科学博客马拉松的一部分发布的。

目录

  • 引言
  • 什么是插值?
  • 插值的类型
  • 何时使用插值?
  • 什么是插值公式?
  • 使用插值填充序列数据中的缺失值
  • 使用插值填充Pandas DataFrame中的缺失值
  • 填充时间序列数据中的缺失值
  • 填充缺失值的语法:前向和后向方法
  • 结论
  • 常见问题解答

什么是插值?

插值就像填补空白。它是一种在已知数据点之间估计缺失值的方法,比如当只有下午2点和4点的温度读数时,猜测下午3点的温度。

插值的类型

最近邻插值:类似于选择最近的朋友!要估计下午3点的温度,可以简单地取最近时间槽的温度读数,例如下午2点,当有下午2点和4点的数据点时。这种方法可能简单但具有挑战性,特别是当数据点不均匀分布时。

线性插值:涉及使用直线连接点。想象一下,在下午2点和4点记录了温度。为了估计下午3点的温度,可以用一条线连接这两个点,并在下午3点的线上确定该值。这比最近邻插值更精细,但不能准确表示突然的角度变化。它是一种数学公式,通过分析现有数据点之间的线性连接来预测特定范围内的值。

样条插值:想象一下用曲线而不是直线连接点。这比线性插值更复杂,但能够更准确地描述具有曲线和弯曲的数据。样条插值涉及使用多项式函数在数据点之间进行插值,创建一条平滑的曲线,该曲线穿过每个数据点。

何时使用插值?

可以使用插值来找到缺失值/空值,借助其邻居的帮助。当用平均值插值缺失值不适用时,必须转向另一种技术,而大多数人发现的技术就是插值。插值主要用于处理时间序列数据,因为在时间序列数据中,喜欢用前一个或两个值填充缺失值。例如,假设是温度,总是更倾向于用过去两天的平均值来填充今天的气温,而不是用整个月的平均值。还可以使用插值来计算移动平均值。

什么是插值公式?

插值公式:给定两个数据点(x1, y1)和(x2, y2),其中x1 < x < x2,x点的插值y值计算为:

y = y1 + (x - x1) * (x2 - x1) / (y2 - y1)

使用插值填充序列数据中的缺失值

Pandas序列是一个一维数组,能够存储各种数据类型的元素,如列表。可以通过列表、元组或字典的帮助轻松创建一个序列。为了执行所有的插值方法,将创建一个包含一些NaN值的pandas序列,并尝试用一些插值填充缺失值,通过实现插值方法或其他不同的插值方法。

import pandas as pd import numpy as np a = pd.Series([0, 1, np.nan, 3, 4, 5, 7])

线性插值简单地意味着通过按递增顺序连接点来估计缺失值。简而言之,它从前面的值中以相同的递增顺序估计未知值。插值默认使用的方法就是线性的。因此,在应用它时,不需要指定它。

print(a.interpolate())

输出结果如下:

0 0.0 1 1.0 2 2.0 3 3.0 4 4.0 5 5.0 6 7.0

因此,线性插值按相同的顺序工作。记住,它不使用索引进行解释;它通过按直线连接点来解释值。

使用插值填充Pandas DataFrame中的缺失值

DataFrame是Python中广泛使用的数据结构,以行和列的形式存储数据。当执行数据分析时,总是将数据存储在表格中,这被称为数据框。dropna()函数通常用于删除DataFrame中的所有空值。一个数据框可以在许多列中包含大量的缺失值,因此让了解如何使用插值来填充数据框中的缺失值。

import pandas as pd # 创建数据框 df = pd.DataFrame({"A":[12, 4, 7, None, 2], "B":[None, 3, 57, 3, None], "C":[20, 16, None, 3, 8], "D":[14, 3, None, None, 6]})

线性插值在前向方向:

df.interpolate(method ='linear', limit_direction ='forward')

输出结果如下:

A B C D 0 12.0 NaN 20.0 14.0 1 4.0 3.0 16.0 3.0 2 7.0 57.0 NaN NaN 3 7.0 3.0 3.0 14.0 4 2.0 NaN 8.0 6.0

现在,如果只想在单列中执行插值,那也很简单,如下所示:

df['C'].interpolate(method="linear")

线性插值在后向方向(bfill):

df.interpolate(method ='linear', limit_direction ='backward')

输出结果如下:

A B C D 0 NaN NaN 20.0 14.0 1 4.0 3.0 16.0 3.0 2 7.0 57.0 3.0 14.0 3 7.0 3.0 8.0 6.0 4 2.0 NaN NaN NaN

插值通过填充:

df.interpolate(method="pad", limit=2)

运行上述代码后,它将用前面的值填充缺失值,并给出如下输出:

A B C D 0 12.0 NaN 20.0 14.0 1 4.0 3.0 16.0 3.0 2 7.0 57.0 16.0 14.0 3 7.0 3.0 3.0 6.0 4 2.0 NaN 8.0 6.0

填充时间序列数据中的缺失值

时间序列数据是遵循某种特殊趋势或季节性的数据。使用时间戳前后的变量进行插值对于填充缺失值是有意义的。分析时间序列数据与普通数据框略有不同。每当有时间序列数据时,那么处理缺失值时,不能使用均值插值技术。插值是填充时间序列数据中缺失值的强大方法。

df = pd.DataFrame({'Date': pd.date_range(start='2021-07-01', periods=10, freq='H'), 'Value':range(10)}) df.loc[2:3, 'Value'] = np.nan

填充缺失值的语法:前向和后向方法:

df['value'].interpolate(method="linear")

但是,当有日期列时,不会使用该方法,因为要按照日期填充缺失值,这在填充时间序列数据中的缺失值时是有意义的。

df.set_index('Date')['Value'].interpolate(method="linear")

相同的代码稍作修改后可以作为后填充来填充后向方向的缺失值。

df.set_index('Date')['Value'].fillna(method="backfill", axis=None)

学习了在Python中使用插值函数填充序列和数据框中缺失值的各种方法。对于数据科学家和分析师来说,知道如何使用插值函数非常重要,因为处理缺失值是他们日常工作的重要组成部分。在大多数情况下,插值被认为是填充缺失值的最佳技术。希望现在知道插值的力量,并了解如何使用它。

可以读取Excel和CSV文件,并可以使用插值函数。可以在前向和后向方向填充缺失值。

Q1. 人工智能中的插值是什么?

人工智能中的插值有助于填补空白!它估计图像、声音或其他信息中的缺失数据,使事物更平滑、更准确,以便于人工智能任务。

Q2. 缺失数据的插值方法是什么?

有多种方法可以插值缺失数据,如线性和多项式插值。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485