【问题标题】:How to generate fake data that looks real in a graph [closed]如何生成在图表中看起来真实的假数据[关闭]
【发布时间】:2012-01-28 20:39:21
【问题描述】:

我想生成用于测试图形库的假数据(在这种情况下为高图,但这并不重要)。例如,我想在每次点击时生成随机数据,看起来它实际上可能是折线图中的真实数据。

这对我来说意味着仅仅一系列 (X+1, rand()) 的幼稚方法是行不通的。大多数时候它不会欺骗任何人。

是否存在看起来像“真实数据”但可以反复生成以产生看起来“真实”的不同形状的方法。抱歉含糊其辞,有点像“我看到它就知道”之类的东西。

我正在寻找的是一种算法,而不是一种特定的语言实现。不过,我最有可能使用 Ruby 和/或 javascript。

【问题讨论】:

  • 这是一个链接(抱歉,不确定它会持续多久)到我用中点位移生成的图表:imgur.com/L70qp

标签: javascript random highcharts


【解决方案1】:

您可以像描述的 here 那样使用中点位移

在此算法中,您从几个随机点开始,然后计算这些点之间的小高度偏移。

它通常用于计算机游戏中的 2D 地形生成。

【讨论】:

    【解决方案2】:

    像这样稍微嘈杂的线路怎么样?

    perl -e '$slope = rand()*3; print "$_, ", $slope*$_ + (rand() - .5)*$slope, "\n" foreach 0 .. 9;'

    【讨论】:

      【解决方案3】:

      最简单的情况(即对于具有视觉可识别趋势的图表),您应该

      1. 决定您的图表的外观,即函数 为您的图表没有数据中的噪音。
      2. 决定您希望添加到数据中的噪声类型(外行 术语随机性将是什么样的)即您的噪声模型 (均匀、高斯等)。
      3. 对于每个随机(或有意选择的点),添加噪声采样 从您的噪声模型到它。

      例如如果你希望你的曲线看起来像一条直线,你的函数是 y = f(x) = mx + c,噪声均匀,在区间 0

      1. 首先选择 m 和 c,线的斜率和 y 截距。您当然可以从一系列值中随机选择 m 和 c。例如。如果您想要 a

        int m = a + (rand() % (b - a));

      2. 在你的 x 区间内随机选择 N 个点,即调用 rand() % 100 N 次以在 0

      3. 对于每个 x 值说 xi,你有一个对应的 y 值 yi = f(xi) 通过将 xi 代入您的等式中。
      4. 现在使用您的噪声模型为您的 yi 添加噪声。此步骤特定于 您选择的噪声模型。假设您使用的是均匀噪声 (最简单的)在 -1 到 1 的区间内(这是特定于您的 选择)。你需要做的就是再次调用

        int 噪声 = (rand() % 3) - 1; // -1 到 1 之间的噪声。Rand() 是均匀噪声的近似值。

        yi = yi + 噪声;

      5. 因此,您的随机数据点为 (xi, yi)。

      这里的很多东西都是可定制的。当然可以

      1. 使用与行不同的函数,例如y = f(x) = sinx 等
      2. 使用不同的噪声模型,例如高斯改变“外观”的 图表中的噪音。
      3. 为 x 和噪声范围选择不同的间隔。
      4. 为图表方程选择不同的参数。例如。在我们的 例如,您可以选择 m 和 c。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-19
        • 2012-01-03
        • 2016-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多