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

How to generate fake data that looks real in a graph

本文关键字:真实 数据 看起来 何生成      更新时间:2023-09-26

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

这对我来说意味着简单的方法(X+1, rand())是行不通的。大多数情况下,它骗不了任何人。

有没有一种方法看起来像"真实数据",但可以反复生成,以产生看起来"真实"的不同形状?很抱歉我说得很含糊,这是一种"当我看到它时我就知道了"的事情。

我要找的是一个算法,而不是一个特定的语言实现。Ruby和/或javascript是我最可能使用的。

你可以像这里描述的那样使用中点位移

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

它通常用于电脑游戏中的2D地形生成。

像这样稍微有点噪音的行呢?

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

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

  1. 决定你的图形看起来像什么,即函数对于没有数据噪声的图。
  2. 决定您希望在数据中添加哪种类型的噪声(在外行中)随机性是什么样子的?也就是你的噪声模型(均匀,高斯等)。
  3. 对于每个随机(或故意选择的点),添加采样噪声从你的噪声模型到它。

。如果你希望你的曲线看起来像一条直线,你的函数是y = f(x) = mx + c,在间隔0 <= x <100(或任何您喜欢的间隔),您

  1. 先取m和c,直线的斜率和y轴截距。你当然可以从一个值范围中随机选择m和c。例如,如果你想要<= m

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

  2. 在x间隔中随机选择N个点,即调用rand() %在区间0 <= x <100 .

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

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

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

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

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