schegloff ([info]schegloff) wrote,
@ 2006-10-26 13:36:00


10 replies, 6 authors
Entry tags:СГО, полезняшки

Доморощенные рейтинги, или Забавы с python
Я программирую исключительно ради удовольствия - это чтобы каждые 10-15 минут запускать чего-нибудь посчитать, откидываться на спинку стула и через пару минут разглядывать нужный результат. Понятно, что с незнакомым языком нужный результат скорее исключение, чем правило (я только на третий день понял, что строки в питоне передаются по значению, а списки - уже по ссылке, хотя x[0:10] для них пишется одинаково...). Тем приятнее, когда наконец что-то получается.

Перво-наперво, скачал я с яндекс.топ список 1000 самых популярных ЖЖ-юзеров. Поскольку я там периодически оказываюсь на 666 месте, 1000 вполне достаточно :). Затем загрузил для каждого юзера список его френдов (с misc/fdata.bml, естественно). Получилось 14 мегов ценной информации, с которой пришлось что-то делать.

Сначала я напустил на эти мегабайты слегка модифицированный Clique Finder. Обнаружилась такая вот максимальная клика среди топ-1000 (группа, где все из участники - взаимные френды друг друга):

15 = set(['olduser', '69__96', 'e_apraksina', 'shurick31', 'rogoff_', 'hedinthedark', 'deineko', 'risha_spb', 'wodka_with_milk', 'taranoff', '_madbull_', 'romalis', 'gavniloff', 'bigimotoff', 'satanov'])

Учитывая, что автор Clique Finder нашел в свое время клику из 137 человек, результат для русского ЖЖ просто оскорбительный. Впрочем, Clique Finder - алгоритм эвристический, и вполне возможно, что на самом деле в нашем ЖЖ есть и большая клика, только вот найти ее не получается.

На следующем этапе я вспомнил, что в утилите [info]popunder Friends Finder реализован хитрый алгоритм расчета рейтинга, напоминающий гуглевский PageRank. Рейтинг в этом алгоритме определяется не количеством читателей, а "качеством" их "дружбы": чем больше у конкретного ЖЖ-юзера читаемых френдов, тем меньшее количество "внимания" он может уделить каждому из них, и тем меньше будет его вклад в общую "популярность" рейтингуемого. Разумеется, алгоритм Friends Finder'а несколько сложнее, чем здесь описано, но я счел за благо реализовать и такую упрощенную его версию:

Рейтинг X = Summ ( для каждого Y в списке и читателя X : 1 / Число_читаемых_френдов_Y )

По 100 топ-юзерам (имя, число читателей из топ-100, рейтинг):
galerist, 32, 0.108862651261
krylov, 24, 0.0953493700369
another_kashin, 30, 0.0907934428644
drugoi, 20, 0.0859812185666
sholademi, 29, 0.0848744239938
nl, 22, 0.0828254238916
pioneer_lj, 25, 0.0724645745045
holmogor, 17, 0.0723023496129
olshansky, 19, 0.0722488960317
golishev, 27, 0.0678472139897

По 1000 топ-юзерам (имя, число читателей из топ-1000, рейтинг):
drugoi, 122, 0.804845411183
abstract2001, 154, 0.671702383313
krusenstern, 66, 0.624111530652
nedorazumenie, 78, 0.599140032587
maxim_sokolov, 152, 0.562321014429
galerist, 176, 0.558613357461
another_kashin, 176, 0.551028055317
akuaku, 140, 0.538209634625
beauty_n_beast, 114, 0.530134971316
doppel_herz, 97, 0.500084080227

Если в первом списке особых неожиданностей нет, то во втором проявляется эффект "замкнутых сообществ" - в лидеры выходят авторы, популярные в узком круге ЖЖ-юзеров с малым числом френдов.

По такому случаю принимаются пожелания, как еще посчитать какие-нибудь рейтинги. С общей теорией я пока не в ладах, до Сергея Брина далековато :)



[info]sartac
2006-10-26 02:31 pm UTC (link)
Кстати, кликфайндер хорошо находит виртуалов :)

(Reply to this)


[info]dubor
2006-10-26 03:39 pm UTC (link)
Сразу пришла в голову идея, что неплохо как-то оценивать еще и соотношение потребления/выработки информации ЖЖ-юзерами: как часто они пишут и как много читают? Есть читатели, чоторые только потребляют интерестную им информацию, а есть писатели, которых читают. А еще есть флудеры, которые в основном только комментят.

т.е. оценить
1) Как часто/много пишет
2) Как часто его читают (сколько френдов по-сути)
3) Как часто комментирует сам, т.е. участвует в обсуждении.
4) Как часто комментируют его, т.е. насколько интерестны его записи

правда не знаю, о чем такая информация может говорить.

з.ы. Сами посты тоже можно оценивать с точки зрения комментариев. Раз комментируют, значит тема интерестна.

(Reply to this)


[info]gxost
2006-10-26 04:39 pm UTC (link)
Чистых клик мало - это скорее исключения. Помнится, вы связность группы считали... Вот если бы построить такой график - зависимость связности от размера клики, а потом посмотреть, что там за группы в экстремуме (или экстремумах)...

(Reply to this)


[info]mat33
2006-11-01 02:54 pm UTC (link)
Из вышепреведенных топов, знаю и уважаю единственно Дивовский ЖЖ ;)

(Reply to this)


[info]grey_horse
2006-11-15 12:59 pm UTC (link)
Сначала я напустил на эти мегабайты слегка модифицированный Clique Finder
Согласитесь ли вы опубликовать этот скрипт, либо переслать его мне на емайл?

(Reply to this) (Thread)

Выложил куда и все прочее,
[info]schegloff
2006-11-16 05:19 am UTC (link)
см. Программки Щеглова на python, пп. 1 и 5.

Надо бы [info]hukuma написать, кстати, что я его программку реанимировал. Спасибо за идею.

(Reply to this) (Parent) (Thread)

Re: Выложил куда и все прочее,
[info]grey_horse
2006-11-16 05:24 am UTC (link)
см. Программки Щеглова на python, пп. 1 и 5
А, вот они где. К сожалению, туда нет ссылки с заглавной страницы сайта.

(Reply to this) (Parent)

Re: Выложил куда и все прочее,
[info]grey_horse
2006-11-16 05:58 am UTC (link)
У меня скрипт формирует директорию с базой френдов, но никаких клик не находит :(

(Reply to this) (Parent) (Thread)

Лезьте в исходник :)
[info]schegloff
2006-11-16 06:22 am UTC (link)
Для выдачи на экран там стоит ограничение на минимальный размер клики:
while cl_len > 5 :
    ...

В вашем френд-окружении максимальная клика, кроме Вас - 4 ЖЖ-юзера:
set(['z_u_m_a', 'adjika', 'inoe', 'frost_wyrm'])

Кстати, она должна сохраниться в файл grey_horse.txt, посмотрите на винте :)

(Reply to this) (Parent) (Thread)

Re: Лезьте в исходник :)
[info]grey_horse
2006-11-16 06:29 am UTC (link)
Благодарю, теперь ясно. Я осваиваю понемногу Питон, так как есть идея собственного ЖЖ-скрипта, но понять код с первого взгляда пока не могу.

(Reply to this) (Parent)