如何生成在图表中看起来真实的虚假数据

时间:2011-12-28 00:40:45

标签: javascript random highcharts

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

这对我来说意味着只是一系列(X + 1,rand())的天真方法不起作用。大多数时候它都不会愚弄任何人。

是否存在看似“真实数据”的方法,但可以反复生成以产生看起来“真实”的不同形状。对于模糊不清,这有点像“当我看到它时我就知道了”。

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

3 个答案:

答案 0 :(得分:3)

您可以像描述here

一样使用Midpoint Displacement

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

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

答案 1 :(得分:2)

像这样有点吵闹的线怎么样?

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

答案 2 :(得分:2)

最简单的情况(例如,对于在视觉上可识别的趋势的图表),您应该

  1. 决定图表的外观,即功能 对于没有数据噪声的图表。
  2. 决定您希望在数据中添加哪种类型的噪音(在外行中) 术语什么是随机性,即你的噪音模型 (制服,高斯等)。
  3. 对于每个随机(或故意选择的点),添加采样的噪声 从你的噪音模型到它。
  4. E.g。如果你希望你的曲线看起来像一条直线,你的函数是y = f(x)= mx + c,具有均匀的噪声,在间隔0< = x< 100(或你喜欢的任何间隔),你

    1. 首先选择m和c,你的线的斜率和y截距。您当然可以从一系列值中随机选择m和c。例如。如果你想要< = m< b其中a,b是您选择的2个任意数字:

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

    2. 随机选择x区间内的N个点,即调用rand()% 在N <= x <1的区间内获得N个x值的100 N次。 100。

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

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

      yi = yi + noise;

    5. 您的随机数据点是(xi,yi)。

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

      1. 使用除行之外的其他功能,例如y = f(x)= sinx等。
      2. 使用不同的噪音模型,例如高斯改变了“外观” 图表中的噪音。
      3. 为x和噪音范围选择不同的间隔。
      4. 为图表的等式选择不同的参数。例如。在我们的 例如,你可以选择m和c。
      5. 希望这有帮助。