Я собираю логии посещений своих сайтов в БД MSSQL (довольно много хитов – сейчас около 100 000 хитов в сутки).
Мне бы хотелось посчитать наиболее популярные пути движения по сайтом.
Не подскажите ли, как это можно сделать?
Существуют ли какие-либо подходы к решению такой задачи?
[14 мая 2004 в 15:12:10] Michael_E_Smrinov ->
ME> Я собираю логии посещений своих сайтов в БД MSSQL (довольно много хитов – ME> сейчас около 100 000 хитов в сутки). Мне бы хотелось посчитать наиболее ME> популярные пути движения по сайтом. Не подскажите ли, как это можно ME> сделать? Существуют ли какие-либо подходы к решению такой задачи?
а чем не устраивают решения счётчиков?
у них тоже есть вывод "путей по сайту".
Здравствуйте, Michael_E_Smrinov, Вы писали:
M_E>Добрый день!
M_E>Я собираю логии посещений своих сайтов в БД MSSQL (довольно много хитов – сейчас около 100 000 хитов в сутки). M_E>Мне бы хотелось посчитать наиболее популярные пути движения по сайтом. M_E>Не подскажите ли, как это можно сделать? M_E>Существуют ли какие-либо подходы к решению такой задачи?
M_E>Спасибо!
Все зависит от того, какую информацию ты логируешь. Если можешь, приведи ее — чтобы была почва для размышлений.
А задачка-то довольно интересная... В свое время мы сделали только эвристику, а не точный анализ.
DZ>Все зависит от того, какую информацию ты логируешь. Если можешь, приведи ее — чтобы была почва для размышлений. DZ>А задачка-то довольно интересная... В свое время мы сделали только эвристику, а не точный анализ.
Привожу —
Я собираю максимум информации о хитах — IP пользователя, URL на сайте, Referrer, SessionID, версию JavaScript, UserAgent и др.
Имя SessionID я могу определить последовательность хитов на сайте в пределах сесии — собственно именно так я и делаю —
нормализую логи из одной RAW таблицы в две — Sessions и Hits.
Вот мне бы и хотелось подсчитать наиболее попоулярные пути движения по сайту.
Здравствуйте, Michael_E_Smrinov, Вы писали:
M_E>Привожу —
M_E>Я собираю максимум информации о хитах — IP пользователя, URL на сайте, Referrer, SessionID, версию JavaScript, UserAgent и др.
M_E>Имя SessionID я могу определить последовательность хитов на сайте в пределах сесии — собственно именно так я и делаю — M_E>нормализую логи из одной RAW таблицы в две — Sessions и Hits.
M_E>Вот мне бы и хотелось подсчитать наиболее попоулярные пути движения по сайту.
Так как у нас для каждой сессии есть записи вида (URL; Referrer), мы можем построить граф перемещения пользователя по сайту в пределах каждой сессии.
Маленький примерчик.
Здесь изображена ситуация, когда пользователь серфил открыв еще одно окошко браузера из первой страницы. А теперь внимание вопрос: какими двумя путями шел пользователь?
Варианты ответов:
1) 1 — 2 — 5 — 6 — 8 и 1 — 3 — 4 — 5 — 7 — 8
2) 1 — 2 — 5 — 7 — 8 и 1 — 3 — 4 — 5 — 6 — 8
И это еще цветочки. Самое интересное начинается при подсчете самых популярных путей...
Здравствуйте, Michael_E_Smrinov, Вы писали:
M_E>В общем да, так оно и есть.
M_E>Но можно в принципе упростить случай и считать, что нас интересуют не комбинации URL, Referrer, M_E>а просто последователоьность URL'ов в пределах сессии.
Можно. Но это уже не будет отражать сути поставленной задачи. В случае, когда пользователь открывает более одного окна браузера (а это довольно частое явление), построенный таким образом путь не будет путем на самом деле... Это плоховатенький вариант эвристики. Сочетание URL — Referrer нужно учитывать.
Здравствуйте, DrZubr, Вы писали:
DZ>Можно. Но это уже не будет отражать сути поставленной задачи. В случае, когда пользователь открывает более одного окна браузера (а это довольно частое явление), построенный таким образом путь не будет путем на самом деле... Это плоховатенький вариант эвристики. Сочетание URL — Referrer нужно учитывать.
Согласен, в идеале это было бы хорошо.
А как же это реализовать?
Здравствуйте, Michael_E_Smrinov, Вы писали:
M_E>Согласен, в идеале это было бы хорошо. M_E>А как же это реализовать?
Как бы это получше реализовать, не знаю... Мне бы самому было бы интересно послушать, кто какую эвристику смог бы предложить. Поэтому свою писать пока не буду (ибо далеко не идеальна ).
Здравствуйте, Michael_E_Smrinov, Вы писали:
M_E>Спасибо!
Ну, во-первых тебе надо трэкать не хиты, а переходы. Т.е. начинаем с информации вида
_From _To Session
----- ---- -------
вот такой запрос выдает список самых популярных переходов:
select count(*) as freq, _From, _To from hits group by _From, _To order by 1 desc
Но переход — это не маршрут. Маршрут, хотелось бы думать, должон подлиннее быть. Ок, поищем маршруты длиной три странички:
select count(*) as freq, p1, p2, p3 from
(select h1._From as p1, h1._To as p2, h2._to as p3
from hits h1 join hits h2 on h1._to=h2._from and h1.session=h2.session) _temp group by p1, p2, p3 order by 1 desc
таким образом, можно последовательно получать информацию о все более длинных маршрутах. Вместо построения одного супердлинного запроса, можно сохранять результаты последовательных джойнов в таблице — это позволит поэкономить стоимость.
Для того, чтобы сэкономить стоимость, наверное имеет смысл ограничить объем данных: Первым проходом берем только те переходы, которые входят в top 100 (например). На самом деле надо будет посмотреть распределение — скорее всего это что-то типа Зипфа — и выбрать количество переходов исходя из него. Считаем, что остальные переходы (раз они такие экзотические) не могут быть частью популярного маршрута.
... << RSDN@Home 1.1.4 beta 1 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.