schegloff (![]() @ 2006-10-26 13:36:00 |
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 - алгоритм эвристический, и вполне возможно, что на самом деле в нашем ЖЖ есть и большая клика, только вот найти ее не получается.
На следующем этапе я вспомнил, что в утилите 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
Если в первом списке особых неожиданностей нет, то во втором проявляется эффект "замкнутых сообществ" - в лидеры выходят авторы, популярные в узком круге ЖЖ-юзеров с малым числом френдов.
По такому случаю принимаются пожелания, как еще посчитать какие-нибудь рейтинги. С общей теорией я пока не в ладах, до Сергея Брина далековато :)
![]() | ![]() 2006-10-26 02:31 pm UTC (link) |
Кстати, кликфайндер хорошо находит виртуалов :) |
![]() | ![]() 2006-10-26 03:39 pm UTC (link) |
Сразу пришла в голову идея, что неплохо как-то оценивать еще и соотношение потребления/выработки информации ЖЖ-юзерами: как часто они пишут и как много читают? Есть читатели, чоторые только потребляют интерестную им информацию, а есть писатели, которых читают. А еще есть флудеры, которые в основном только комментят. т.е. оценить 1) Как часто/много пишет 2) Как часто его читают (сколько френдов по-сути) 3) Как часто комментирует сам, т.е. участвует в обсуждении. 4) Как часто комментируют его, т.е. насколько интерестны его записи правда не знаю, о чем такая информация может говорить. з.ы. Сами посты тоже можно оценивать с точки зрения комментариев. Раз комментируют, значит тема интерестна. |
![]() | ![]() 2006-10-26 04:39 pm UTC (link) |
Чистых клик мало - это скорее исключения. Помнится, вы связность группы считали... Вот если бы построить такой график - зависимость связности от размера клики, а потом посмотреть, что там за группы в экстремуме (или экстремумах)... |
![]() | ![]() 2006-11-01 02:54 pm UTC (link) |
Из вышепреведенных топов, знаю и уважаю единственно Дивовский ЖЖ ;) |
![]() | ![]() 2006-11-15 12:59 pm UTC (link) |
Сначала я напустил на эти мегабайты слегка модифицированный Clique Finder Согласитесь ли вы опубликовать этот скрипт, либо переслать его мне на емайл? (Reply to this) (Thread) |
![]() | Выложил куда и все прочее, ![]() 2006-11-16 05:19 am UTC (link) |
см. Программки Щеглова на python, пп. 1 и 5. Надо бы ![]() (Reply to this) (Parent) (Thread) |
![]() | ![]() 2006-11-16 05:24 am UTC (link) |
см. Программки Щеглова на python, пп. 1 и 5 А, вот они где. К сожалению, туда нет ссылки с заглавной страницы сайта. (Reply to this) (Parent) |
![]() | ![]() 2006-11-16 05:58 am UTC (link) |
У меня скрипт формирует директорию с базой френдов, но никаких клик не находит :( (Reply to this) (Parent) (Thread) |
![]() | Лезьте в исходник :) ![]() 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) |
![]() | ![]() 2006-11-16 06:29 am UTC (link) |
Благодарю, теперь ясно. Я осваиваю понемногу Питон, так как есть идея собственного ЖЖ-скрипта, но понять код с первого взгляда пока не могу. (Reply to this) (Parent) |