【问题标题】:How to generate fake data that looks real in a graph [closed]如何生成在图表中看起来真实的假数据[关闭]
【发布时间】:2012-01-28 20:39:21
【问题描述】:
我想生成用于测试图形库的假数据(在这种情况下为高图,但这并不重要)。例如,我想在每次点击时生成随机数据,看起来它实际上可能是折线图中的真实数据。
这对我来说意味着仅仅一系列 (X+1, rand()) 的幼稚方法是行不通的。大多数时候它不会欺骗任何人。
是否存在看起来像“真实数据”但可以反复生成以产生看起来“真实”的不同形状的方法。抱歉含糊其辞,有点像“我看到它就知道”之类的东西。
我正在寻找的是一种算法,而不是一种特定的语言实现。不过,我最有可能使用 Ruby 和/或 javascript。
【问题讨论】:
标签:
javascript
random
highcharts
【解决方案1】:
您可以像描述的 here 那样使用中点位移
在此算法中,您从几个随机点开始,然后计算这些点之间的小高度偏移。
它通常用于计算机游戏中的 2D 地形生成。
【解决方案2】:
像这样稍微嘈杂的线路怎么样?
perl -e '$slope = rand()*3; print "$_, ", $slope*$_ + (rand() - .5)*$slope, "\n" foreach 0 .. 9;'
【解决方案3】:
最简单的情况(即对于具有视觉可识别趋势的图表),您应该
- 决定您的图表的外观,即函数
为您的图表没有数据中的噪音。
- 决定您希望添加到数据中的噪声类型(外行
术语随机性将是什么样的)即您的噪声模型
(均匀、高斯等)。
- 对于每个随机(或有意选择的点),添加噪声采样
从您的噪声模型到它。
例如如果你希望你的曲线看起来像一条直线,你的函数是 y = f(x) = mx + c,噪声均匀,在区间 0
-
首先选择 m 和 c,线的斜率和 y 截距。您当然可以从一系列值中随机选择 m 和 c。例如。如果您想要 a
int m = a + (rand() % (b - a));
在你的 x 区间内随机选择 N 个点,即调用 rand() %
100 N 次以在 0
- 对于每个 x 值说 xi,你有一个对应的 y 值 yi = f(xi)
通过将 xi 代入您的等式中。
-
现在使用您的噪声模型为您的 yi 添加噪声。此步骤特定于
您选择的噪声模型。假设您使用的是均匀噪声
(最简单的)在 -1 到 1 的区间内(这是特定于您的
选择)。你需要做的就是再次调用
int 噪声 = (rand() % 3) - 1; // -1 到 1 之间的噪声。Rand() 是均匀噪声的近似值。
yi = yi + 噪声;
因此,您的随机数据点为 (xi, yi)。
这里的很多东西都是可定制的。当然可以
- 使用与行不同的函数,例如y = f(x) =
sinx 等
- 使用不同的噪声模型,例如高斯改变“外观”的
图表中的噪音。
- 为 x 和噪声范围选择不同的间隔。
- 为图表方程选择不同的参数。例如。在我们的
例如,您可以选择 m 和 c。
希望这会有所帮助。