【问题标题】:Interpolating data points in Excel在 Excel 中插入数据点
【发布时间】:2010-11-05 19:45:24
【问题描述】:

我相信这是其他人以前解决过很多次的问题。

一组人将进行测量(准确地说是家庭能源使用情况)。 他们都会在不同的时间和不同的时间间隔这样做。

所以我将从每个人那里得到一组 {date, value} 对,其中缺少日期。

我需要的是一组完整的 {date, value} 对,其中对于范围内的每个日期,一个值是已知的(测量的或计算的)。 我希望一个简单的线性插值足以满足这个项目。

如果我假设它必须在 Excel 中完成。 在这样的数据集中进行插值的最佳方法是什么(所以我每天都有一个值)?

谢谢。

注意:当这些数据集完成后,我将确定斜率(即每天的使用量),然后我们可以开始进行家庭到家庭的比较。

附加信息在最初的几个建议之后: 我不想手动找出测量集中的孔在哪里(太多不完整的测量集!!)。 我正在寻找一些(现有的)自动为我做的事情。 所以如果我的输入是

{2009-06-01,  10}
{2009-06-03,  20}
{2009-06-06, 110}

那我期望自动得到

{2009-06-01,  10}
{2009-06-02,  15}
{2009-06-03,  20}
{2009-06-04,  50}
{2009-06-05,  80}
{2009-06-06, 110}

是的,我可以编写执行此操作的软件。我只是希望有人已经为这个(相当通用的)问题提供了“准备运行”的软件(Excel)功能。

【问题讨论】:

  • 我今天偶然发现了这个。这里有一个很棒的工作示例,类似于下面的一个答案,但有一个不需要加载项的可下载示例 (blueleafsoftware.com/Products/Dagra/…)

标签: excel date interpolation


【解决方案1】:

我遇到了这个问题并且不愿意使用加载项,因为它很难与没有安装加载项的人共享工作表。

我的同事设计了一个相对紧凑的干净配方(以使用一点魔法为代价)。

注意事项:

  • 公式的工作原理:

    • 使用MATCH 函数在inputs 范围内查找要搜索的值之前的行(例如,3 是 3.5 之前的值)
    • 使用OFFSETs 选择该行的正方形和下一行(浅紫色)
    • 使用FORECAST 仅使用这两个点构建线性插值,并获得结果
  • 这个公式不能做外推;确保您的搜索值在端点之间(我在下面的示例中通过使用极值来做到这一点)。

不确定这对人们来说是否过于复杂;但它的好处是非常便携(并且比许多替代解决方案更简单)。

如果要复制粘贴公式,则为:

=FORECAST(F3,OFFSET(inputs,MATCH(F3,inputs)-1,1,2,1),OFFSET(inputs,MATCH(F3,inputs)-1,0,2,1

inputs 是一个命名范围)

【讨论】:

  • +1 非常有用的技巧。尽管您提供的复制粘贴公式与屏幕截图中的公式不匹配。后者是正确的;前者包含错误。在我的例子中,我使用了:=FORECAST(W33,OFFSET(T38:T59,MATCH(W33,S38:S59)-1,0,2,1),OFFSET(S38:S59,MATCH(W33,S38:S59)-1,0,2,1)),其中 S38:S59 包含 x 值,T38:T59 包含 y 值。
  • 谢谢!更正了公式。
  • 使用 X 和 Y 轻松复制和粘贴替换:=FORECAST(XX1,OFFSET(Y1:Y10,MATCH(XX1,X1:X10)-1,0,2,1),OFFSET(X1:X10,MATCH(XX1,X1:X10)-1,0,2,1))
【解决方案2】:

最简单的方法可能如下:

  1. 在此处下载 Excel 插件:XlXtrFun™ Extra Functions for Microsoft Excel

  2. 使用函数 intepolate()。 =插值($A$1:$A$3,$B$1:$B$3,D1,FALSE,FALSE)

A 列和 B 列应包含您的输入,G 列应包含您的所有日期值。公式进入 E 列。

【讨论】:

  • 谢谢。我希望这是 Excel 的标准部分。这可以满足我的需要。
  • Xlxtrfun 不再可供下载。见error 403 message on the website
  • 由于网站不再支持下载,有谁知道在哪里可以获得 XLxtrfun?
【解决方案3】:

有两个函数,LINESTTREND,您可以尝试看看哪个函数能给您带来更好的结果。它们都采用一组已知的 X 和 Y 以及一个新的 X 值,并计算一个新的 Y 值。不同之处在于 LINEST 进行简单的线性回归,而 TREND 会在进行回归之前首先尝试找到适合您数据的曲线。

【讨论】:

  • 感谢您的提示。我尝试了这两个函数,显然这两个函数都绘制了一条穿过所有数据点的直线。那不是我想要的。我的主要要求是测量点保持原样。这些功能“打破”了这一要求。
  • 对已知输入仅使用两个点来进行线性插值。因此,如果您在 8:30、9:00、10:00、10:30... 进行测量,并且您想估算 9:30 的测量值,则只需要 9:00 和 10:00 的测量值在 LINEST 函数中,而不是整个集合。使用两个最近的边界点对您需要估计的每个数据点执行此操作。
  • 也许我误解了你的建议,但对我来说这意味着我手动确定“洞在哪里”。我是一名开发人员,天生懒惰,我希望软件能帮我解决这个问题。
【解决方案4】:

一种很好的图形方式来查看插值结果的拟合程度:

获取您的日期、值对并使用 Excel 中的 XY 图表(而不是折线图)绘制它们。右键单击图表上的结果线,然后单击“添加趋势线”。有许多不同的选项可以选择使用哪种类型的曲线拟合。然后您可以转到新创建的趋势线的属性并显示方程和 R 平方值。

确保在格式化趋势线方程标签时,将数值格式设置为具有高精度,以便显示方程常数的所有有效数字。

【讨论】:

    【解决方案5】:

    YGA 的上述答案不处理所需 X 值与参考范围的 X 值相同的范围结束情况。使用 YGA 给出的示例,excel 公式将返回 #DIV/0!如果要求 9999 处的插值,则会出错。这显然是 YGA 将 9999 和 -9999 这两个极端端点添加到输入数据范围,然后假设所有预测值都在这两个数字之间的部分原因。如果这种填充是不希望的或不可能的,另一种避免#DIV/0 的方法!错误是使用以下公式检查输入值是否完全匹配:

    =IF(ISNA(MATCH(F3,inputs,0)),FORECAST(F3,OFFSET(inputs,MATCH(F3,inputs)-1,1,2,1),OFFSET(inputs,MATCH(F3,inputs)-1,0,2,1)),OFFSET(inputs,MATCH(F3,inputs)-1,1,1,1))
    

    其中 F3 是需要插值结果的值。

    注意:我会将此作为评论添加到原始 YGA 帖子中,但我还没有足够的声望点。

    【讨论】:

      【解决方案6】:

      或者。

      =INDEX(yVals,MATCH(J7,xVals,1))+(J7-MATCH(J7,xVals,1))*(INDEX(yVals,MATCH(J7,xVals,1)+1)-INDEX(yVals,MATCH(J7,xVals,1)))/(INDEX(xVals,MATCH(J7,xVals,1)+1)-MATCH(J7,xVals,1))
      

      j7 是 x 值。

      xvals 是 x 值的范围 yvals 是 y 值的范围

      更容易将其放入代码中。

      【讨论】:

        【解决方案7】:

        您可以使用 Excel 的“趋势线”功能找出最适合您的数据的公式。使用该公式,您可以为任何 x 计算 y

        1. 为其创建线性散射 (XY)(插入 => 散射);
        2. 创建多项式或移动平均线趋势线,勾选“Display Equation on 图表”(右键单击系列 => 添加趋势线);
        3. 将方程复制到单元格中,并将x 替换为所需的 x 值

        在下面的屏幕截图中,A12:A16 包含 x,B12:B16 包含 y,C12 包含计算 y 的任何 x 的公式。

        我先发了一个答案here,后来发现这个问题

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-08
          • 2023-03-11
          • 1970-01-01
          • 2020-02-24
          • 2013-05-15
          • 2019-02-11
          相关资源
          最近更新 更多