Vba Excel生成规范化数据
我希望生成的数据中,给定两个平均值(平均点击)和(随时间平均点击)将正确输出间隔数据 很难解释,但最好举个例子 鉴于以下数据:Vba Excel生成规范化数据,vba,excel,random,Vba,Excel,Random,我希望生成的数据中,给定两个平均值(平均点击)和(随时间平均点击)将正确输出间隔数据 很难解释,但最好举个例子 鉴于以下数据: Days: 10 Average Click Value: 3.5 Average Clicks over days: 0.7 然后,您可以生成以下数据: Day 1 Day 2 Day 3 4 Day 4 Day 5 Day 6 Day 7 Day 8 Day 9 3 Day 10 其中第9(3)天和第3(4)
Days: 10
Average Click Value: 3.5
Average Clicks over days: 0.7
然后,您可以生成以下数据:
Day 1
Day 2
Day 3 4
Day 4
Day 5
Day 6
Day 7
Day 8
Day 9 3
Day 10
其中第9(3)天和第3(4)天之间的平均值为3.5,总平均值(10天内的7个)为0.7
以下内容不起作用,因为它的点击值平均值为3.5,但总体平均值为1.4:
Day 1 4
Day 2
Day 3 3
Day 4
Day 5
Day 6 4
Day 7
Day 8
Day 9 3
Day 10
以下内容不起作用,因为它的总体平均值为0.7,但单击值为1.75:
Day 1 1
Day 2
Day 3 2
Day 4
Day 5 3
Day 6
Day 7
Day 8
Day 9 1
Day 10
单击值必须是一个整数,因此以下操作无效:
Day 1
Day 2
Day 3 3.5
Day 4
Day 5
Day 6
Day 7
Day 8
Day 9 3.5
Day 10
每一个之间的间距应该是随机的,但遵循严格的偏差。模式应该类似于用户访问他们喜欢的网站的频率
我理解它有时是不精确的,因为有些组合不能用数学方法完成,但它应该尽可能地接近
使用excel是否可以使用这种类型的模式(可以使用VBA)。这里有一个初学者数组函数:垂直输入:选择行数=天数,输入函数并按Ctrl-Shift-enter键。 随机程度由变异常数控制
Function ClickSpacer(nDays As Long, ClickAvg As Double, ClicksPerDay As Double)
Dim Spacing As Long
Dim Clicks() As Long ''' output
Dim Total_Clicks As Double
Dim nDaysClicked As Double
Dim j As Long
Dim ClicksSoFar As Long
Dim RandSpacing As Long
Dim RandClicks As Long
Dim ClickOffset As Long
ReDim Clicks(1 To nDays, 1 To 1)
Const Variation As Double = 0.2
Total_Clicks = Round(nDays * ClicksPerDay, 0)
nDaysClicked = Round(Total_Clicks / ClickAvg, 0)
Spacing = nDays / (nDaysClicked + 1)
RandSpacing = Round(Spacing * Variation, 0) * 2
ClickOffset = Spacing + Round(Rnd() * RandSpacing, 0) - Round(Rnd() * RandSpacing, 0)
RandClicks = ClickAvg * Variation * 2
For j = 1 To nDaysClicked
If j > 1 Then ClickOffset = ClickOffset + Spacing + Round(Rnd() * RandSpacing, 0) - Round(Rnd() * RandSpacing, 0)
If j = nDaysClicked Then
Clicks(ClickOffset, 1) = Round((Total_Clicks - ClicksSoFar) / (nDaysClicked - j + 1), 0)
Else
Clicks(ClickOffset, 1) = Round((Total_Clicks - ClicksSoFar) / (nDaysClicked - j + 1) + (RandClicks * Rnd() - RandClicks * Rnd()), 0)
End If
ClicksSoFar = ClicksSoFar + Clicks(ClickOffset, 1)
Next j
ClickSpacer = Clicks
End Function
这是一个初学者数组函数:垂直输入:选择行数=天数,输入函数并按Ctrl-Shift-enter键。 随机程度由变异常数控制
Function ClickSpacer(nDays As Long, ClickAvg As Double, ClicksPerDay As Double)
Dim Spacing As Long
Dim Clicks() As Long ''' output
Dim Total_Clicks As Double
Dim nDaysClicked As Double
Dim j As Long
Dim ClicksSoFar As Long
Dim RandSpacing As Long
Dim RandClicks As Long
Dim ClickOffset As Long
ReDim Clicks(1 To nDays, 1 To 1)
Const Variation As Double = 0.2
Total_Clicks = Round(nDays * ClicksPerDay, 0)
nDaysClicked = Round(Total_Clicks / ClickAvg, 0)
Spacing = nDays / (nDaysClicked + 1)
RandSpacing = Round(Spacing * Variation, 0) * 2
ClickOffset = Spacing + Round(Rnd() * RandSpacing, 0) - Round(Rnd() * RandSpacing, 0)
RandClicks = ClickAvg * Variation * 2
For j = 1 To nDaysClicked
If j > 1 Then ClickOffset = ClickOffset + Spacing + Round(Rnd() * RandSpacing, 0) - Round(Rnd() * RandSpacing, 0)
If j = nDaysClicked Then
Clicks(ClickOffset, 1) = Round((Total_Clicks - ClicksSoFar) / (nDaysClicked - j + 1), 0)
Else
Clicks(ClickOffset, 1) = Round((Total_Clicks - ClicksSoFar) / (nDaysClicked - j + 1) + (RandClicks * Rnd() - RandClicks * Rnd()), 0)
End If
ClicksSoFar = ClicksSoFar + Clicks(ClickOffset, 1)
Next j
ClickSpacer = Clicks
End Function
我认为使用解算器可以很容易地实现这一点。制作一个你想要的模型,将你的目标(2个平均值)定义为公式,然后给出要求解的数据范围。不过,你每次都可能得到同样的答案。试试看。
请注意,解算器是可选安装,如果您进行了标准安装而不是完整安装,则可能看不到它。我认为使用解算器可以很容易地实现这一点。制作一个你想要的模型,将你的目标(2个平均值)定义为公式,然后给出要求解的数据范围。不过,你每次都可能得到同样的答案。试试看。
请注意,解算器是一个可选安装,如果您进行的是标准安装而不是完整安装,则可能不可见