2012-06-08 3 views
1

Я пытаюсь провести исследование с поисковыми журналами. Мой первый интерес - найти тенденции. Например: зимой у людей часто бывает холодная болячка. Поэтому я думаю, что зимой мы можем наблюдать рост таких запросов типа.Найти тенденции в журнале запросов поисковых систем

Как я хочу, чтобы обнаружить тенденции:

  1. Использование априорной алгоритма или что-то, чтобы получить частый элемент набора.
  2. Count число каждого набора в диапазоне времени (один час, один день и т.д.)
  3. Использование линейной регрессии для найденного относительного изменения функции , если это регресс ах + Ь, то просто вычислить (а * (first_date) + б)/(а * (second_date) + б)

Так у меня есть проблема: Это очень трудно найденного частом пункта, установленного на большом наборе данных (у меня есть миллионы запросов). Я реализовал алгоритм априорного алгоритма, но он работает очень медленно с низкой поддержкой (например, 2 на 200k запросах может занять день)

Какой лучший алгоритм в моем случае? Может быть, я могу решить свою задачу по-другому?

+0

@Yavar У меня есть только одна машина (или две). Вот почему я не могу разойтись. – Neir0

ответ

0

Вот что нужно, чтобы сузить его до подсчета только строк в запрошенные временные рамки, а не всю коллекцию.
Сохраните ваши запросы в отсортированной расширяемой структуре данных - я думаю, что skip list будет здесь подойдет.
Порядок запросов в списке пропуска по времени, по возрастанию.
Примечание: добавление нового запроса в список пропусков очень просто - вы всегда добавляете его, потому что он всегда «больше», а затем (после него) все существующие запросы.

Теперь, когда вам нужно найти временные рамки - вам не нужно выполнять итерацию по всем запросам, а скорее по соответствующей ее части, так как можно найти первый и последний элементы временного интервала быстро в списке пропусков.

Чтобы повысить эффективность, я бы использовал би-карту, чтобы дать уникальный идентификатор каждой строке и сохранить только идентификаторы. создание гистограммы из идентификаторов, скорее всего, будет проще (вычислительно говоря), а затем создать его для исходных строк. После того, как вы найдете наиболее часто встречающиеся идентификаторы, вы можете вывести, какие строки они ссылаются на карте.

Смежные вопросы