Excel генерирует нормализованные данные - PullRequest
1 голос
/ 08 января 2011

Я хочу сгенерировать данные, в которых данные двух средних значений (средний клик) и (средний клик по времени) будут правильно выводить данные с разнесением.

Трудно объяснить, но лучше всего с примером.

Учитывая следующие данные:

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, а общее среднее (7 за 10 дней) составляет 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).

Ответы [ 2 ]

1 голос
/ 08 января 2011

Вот функция начального массива: вы вводите ее по вертикали: выберите количество строк = числу дней, введите функцию и нажмите 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
0 голосов
/ 08 января 2011

Я думаю, что вы можете довольно легко добиться этого с помощью Солвера. Создайте модель, подобную той, которую вы хотите, определите свои цели (2 средних) в виде формул, а затем предоставьте диапазон данных для решения. Впрочем, вполне возможно, что каждый раз получаешь один и тот же ответ. Попробуйте.
Обратите внимание, что Solver - это дополнительная установка, которая может не отображаться, если вы сделали стандартную установку вместо полной.

...