Форум по Эксель

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум по Эксель » Форум по Excel » Частотный анализ (сколько раз число N следует после числа M)


Частотный анализ (сколько раз число N следует после числа M)

Сообщений 1 страница 9 из 9

1

Приветствую всех и хочу обратиться к Вам за помощью при решении следующей задачи, или если её решение вызывает трудности, то подсказать хотя бы ход направления мысли в решение вопроса.
Итак сама задача: Дан определенный столбец данных. В каждой строке данного столбца содержится 1 уникальное целое числовое значение (предположим от 0 до 9).
Задача заключается в том, чтобы посчитать сколько раз в данном столбце данных после значения числа 0 следует число 1, после числа 0 следует число 2, ... число 3 ... число 9.
___
Наглядный пример: Дан столбец данных: 0,1,7,1,2,5,1,2,6,9.
Чтобы вычислить сколько раз в данном столбце встречается число 1 пользуемся функцией: СЧЁТЕСЛИ($С$1:$С$100;1) - Получаем выходное значение 3 - это понятно.
Вопрос в следующем: как прописать такую формулу, которая на примерный запрос: Счет Если Значение 1 = 1 и Значение 2=2 на протяжении всего столбца (или не знаю на сколько корректнее назвать - массива из 100 чисел), выдавала количество совпадений по данному критерию. (В нашем примере из 10 чисел данное событие произошло 2 раза).
___
P.S. Если не совсем корректно сформулировал суть вопроса, то готов уточнить подробности, если это требуется.
Исходный столбец данных в нашей задаче уже имеется то есть его генерировать не надо, речь идет только об обработке уже имеющихся входных данных.
___
С уважением, MYSTERIO.

0

2

Здравствуйте.
Можно написать Функцию пользователя, если спецы из стандартных что-нибудь не соорудят.
Но мне непонятно ТЗ - считать надо после 0 до конца диапазона, или до второго аргумента и прекратить?
Например, ищем 1 (единицу) между 0 и 2 = 2 совпадения. Или 3 - если брать между 0 и последней двойкой? А если будет ещё 0, но ещё не будет двойки - считать заново или продолжать?

Вот например так  - считает единицы от начала диапазона до критерия:

Код:
Option Explicit

Function Счёт_единиц_сверху(диапазон As Range, критерий As Long) As Long
Dim i As Range
   For Each i In диапазон
       If i = 1 Then Счёт_единиц_сверху = Счёт_единиц_сверху + 1
       If i = критерий Then Exit Function
    Next
End Function

А так что угодно где угодно (ну не совсем, конечно :) ):

Код:
Function Счёт_чегото_от_до(диапазон As Range, чегото As Variant, критерий_от As Variant, критерий_до As Variant) As Long
Dim i As Range, flag As Boolean
   For Each i In диапазон
       If i = критерий_от Then flag = True
    If flag Then
       If i = чегото Then Счёт_чегото_от_до = Счёт_чегото_от_до + 1
       If i = критерий_до Then Exit Function
    End If
    Next
End Function

0

3

Mysterio написал(а):

(В нашем примере из 10 чисел данное событие произошло 2 раза).

Здравствуйте.
Надо кол-во повторяющихся больше 0 подсчитать?

0

4

Может надо подсчитать количество возрастающих цепочек или пар в диапазоне после нуля? Тут как раз два раза "1,2" и "1,2". Тогда вопрос - "1,2,3,4" - это одно совпадение или два? А может три?

0

5

Большое спасибо Hugo - теперь я хоть понял ход направления своей мысли при изнаальной формулировке задачи) - что он верный:
То есть имеется ввиду, что данная задача всё таки сводится к тому чтобы представить столбец исходных данных с помощью линейного массива и действовать по следующему пути:
Если I - Элемент равен 1, а I+1 Элемент = 2 - тогда счёт количестве данных пар значений (i=1) и (i+1=2).
Через обычные функции / пути решения - пока не могу придти к правильному варианту разрешения задачи.
А смысл всей задачи процесса для наглядности понимания задачи прост (Задача основана на теории вероятности):
Есть массив исходных данных (Архив выпадения чисел в рулетке за N-ный месяц) содержищий либо 144*30 либо 144*31 значение (в зависимости от месяца который берётся). Соответственно значения колеблются от -1 (данным параметром представляется двойное зеро (00)) до 36). Всего 38 уникальных значений. Требуется посчитать сколько раз 1 число выпадало после другого числа. И сопоставить все результаты стандартных пар в таблицу. - Для этого требуется написать лишь 1 подпрограмму (функцию и верно её применить в дальнейшем).
Для удобства могу предоставить файл / пример с моими наработками (вдруг кому-то потребуется :) ).
P.S. Автор по своей природе имеет экономическое образование, но в курсе основ программирования. Данная программа / (подпрограмма) не используется / не будет использоваться в каких-либо коммерческих целях, а представляет лишь личный интерес дабы вспомнить молодость / институтские годы и решить одну из очередных мат. задач связанных с теорией вероятности. Архив чисел взят с сайта одной из онлайн игр.
P.S.2. Автор в курсе, что выработать систему / стратегию чтобы выигрывать в рулетке невозможно, но тем не менее данная игра позволила для меня подвспомнить институтские годы и порешать целый ряд задач, связанных с теорией вероятности, математическим ожиданием и анализом повторяющихся событий. В прикладываемом в примере файле решены простейщие для Excel задачи (Анализ количества чисел в столбце, Анализ количества Единичных значений в столбце, Анализ на принадлежность числа к цвету, Чётность/Нечетность числа, Анализ на принадлежность к числовой группе (Дюжина, Колонка), Распределения чисел по уникальным значениям с начала месяца и т.д.). Теперь поставил перед собой задачу провести Частотный анализ (сколько раз число N следует после числа M) - здесь впервые возникли затруднения с помощью пути реализации.
Но теперь получив определённые указания с точки зрения пути решения задачи тоже уже начинаю искать новые пути решения.
Буду признателен если кто-либо посодействует в данном направлении.
Пример с наработками

0

6

Ну сосчитать возрастающие пары легко:
код рассчитан на столбец

Код:
Function Счёт_пар_вертикально(диапазон As Range) As Long
Dim i As Range
   For Each i In диапазон
       If i = i.Offset(1, 0) - 1 Then Счёт_пар_вертикально = Счёт_пар_вертикально + 1
    Next
End Function

Правда такой код в цепочке 1234 находит 3 пары, это надо учитывать :)
За июль 123 пары.

0

7

Формула подойдет?
=СУММПРОИЗВ((A1:A13=1)*(A2:A14=2))

0

8

Вновь спасибо Hugo, он опять указал верный для меня путь дальнейшего направления мысли (Я уже было собрался сегодня вечером подзадуматься над решением поставленной задачи двигаясь в данном направлении).
Но многоуважаемый гость - vikttur, который видимо знаком с тематикой решения такого рода статистических/математических задач - верно понял, какую конкретно мысль я хотел сформулировать:

Посчитать сколько раз 1 число выпадало после другого числа. И сопоставить все результаты стандартных пар в таблицу. - Для этого требуется написать лишь 1 подпрограмму (функцию, форумлу) и верно её применить в дальнейшем.

Благодаря формуле любезно предоставленной vikttur получается примерно следующее:
Использовал пример предоставленный мной выше - вкладку Июль-2009 (убедился что формула работает, хотя вначале не поверил, что так просто):
Самые наиболее распространённые числа в массиве данных за Июнь это 4 и 6, поэтому решил опробовать на следующем:
=СУММПРОИЗВ(($O$3:$O$4464=4)*($O$4:$O$4465=4)) - Сколько раз число 4 выпадает после числа 4 ==> выходное значение за месяц 7. (Верно.)
=СУММПРОИЗВ(($O$3:$O$4464=4)*($O$4:$O$4465=6)) - Сколько раз число 6 выпадает после числа 4 ==> выходное значение за месяц 4. (Верно.)
=СУММПРОИЗВ(($O$3:$O$4464=6)*($O$4:$O$4465=4)) - Сколько раз число 4 выпадает после числа 6 ==> выходное значение за месяц 7. (Верно.)
=СУММПРОИЗВ(($O$3:$O$4464=6)*($O$4:$O$4465=6)) - Сколько раз число 6 выпадает после числа 6 ==> выходное значение за месяц 3. (Верно.)
Чтобы проверить, что это действительно так пользовался условным форматированием по столбцу O, на числа 4 и 6. (На глаз проверил количество данных пар из массива в 4464 значения (заняло пару минут)).
Разумеется формулы работают если их перезаписать чуть "красивее": Пример:
=СУММПРОИЗВ(($O$3:$O$4464=$C$25)*($O$4:$O$4465=$C$25)) - Сколько раз число 4 выпадает после числа 4 ==> выходное значение за месяц 7. (Верно.)
Теперь составление таблицы содержащей в себе = 38*38 всевозможных пар - лишь пара пустяков имея данную формулу. Вообще большое спасибо, крутился я вокруг данного варианта, но вспомнить о формуле: =СУММПРОИЗВ не сообразил :).
Ещё раз искренне благодарю всех, кто оказал содействие в решение данного вопроса ;).
___
Задача решена - в принципе тему можно закрывать.
С уважением, Mysterio.

0

9

Решена - это хорошо. Но столько буковок! У меня бы рука заболела :):)

0


Вы здесь » Форум по Эксель » Форум по Excel » Частотный анализ (сколько раз число N следует после числа M)