Как составить рейтинг участников

На соревнованиях часто определяют места участников, исходя из суммы баллов за выступление. Бывает так, что разные участники набирают одинаковое количество баллов. В такой ситуации на одном месте оказывается несколько человек. В этом задании научимся определять места SQL запросом.

Проанализируем покупки клиентов. Для каждого товара найдем самую дешевую цену, по которой он продавался:

SELECT pi.product_id,
       min (pi.price) AS min_price
  FROM purchase_item pi
 GROUP BY pi.product_id
 ORDER BY min_price

Обрати внимание на строки 5 и 6. Товары продавались по одной цене.

Попробуем ввести рейтинг самых дешевых товаров. Воспользуемся функцией row_number() для проставления номеров в рейтинге:

SELECT pi.product_id,
       row_number () over (order by min (pi.price)) AS position,
       min (pi.price) AS min_price
  FROM purchase_item pi
 GROUP BY pi.product_id
 ORDER BY min_price

Смотрим на строки 5 и 6

Так дело не пойдет. Чем продукт 2 хуже продукта 3? У них должно быть одинаковое место в рейтинге.

В SQL есть специальная функция ранжирования, которая проставит одинаковое место (ранг) для продуктов с одинаковой стоимостью. Она называется rank.

Заменим row_number() на rank() и посмотрим на результат:

SELECT pi.product_id,
       rank () over (order by min (pi.price)) AS position,
       min (pi.price) AS min_price
  FROM purchase_item pi
 GROUP BY pi.product_id
 ORDER BY min_price

Продукты 2 и 3 теперь занимают одинаковую позицию в рейтинге.

Обрати внимание, что после 5 позиции в рейтинге сразу идет 7-я, т.к. на пятом месте располагаются два товара.

Рейтинг участников

rating-genius-loci

После ввода 3й версии в этом году с новым дизайном и новым функционалом я был занят преимущественно шлифовкой проекта : «косметика», рабочая доводка функционала и баги.

Но сегодня я закончил одно из важных дополнений сайта, которое было запланировано на «послезапуск» 3й версии. Новый рейтинг участников.

Во-первых, нужно рассказать зачем он нужен.

Зачем нужен рейтинг.

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

Если ваш рейтинг в абсолютном значении превышает значение — 1.2, то вы сможете участвовать в выборе претендента на получение гранта. Нам хотелось избежать фейковых голосов, накруток, потому сначала мы позволяли голосовать только участникам с аккаунтами GL+. Теперь для этой цели служит рейтинг.

Немного о рейтинге.

Рейтинг учитывает в данный момент 15 параметров. Его величина отражает относительную активность участника.

В рейтинг заложен также механизм обновления. Те факты активности участника, которые учитываются, со временем дают все меньший вклад, уменьшаясь за год примерно в 10 раз. Т.е. скажем, работа, размещенная год назад и работа, размещенная за последнюю неделю, будут давать совершенно разный вклад в активность.

Но интересная работа, не потерявшая актуальность и через год, все также будет привлекать новые комментарии и оценки. А автору ещё не раз скажут спасибо. И это зачтется в рейтинге.

Команда GL

Не удивительно, что наиболее активными участниками ГенийМеста являются наши редакторы. Их профили мы отметили специальным знаком.

Написать комментарий


Данная запись опубликована в 09.08.2016 22:00 и размещена в Гений места.
Вы можете перейти в конец страницы и оставить ваш комментарий.

Мало букафф? Читайте есчо !

Гений, бета 7

Сентябрь 21, 2014 г.

Сегодня залил важное функциональное дополнение проекта – оценки работ и рейтинги.

Работы оцениваются по 100-бальной шкале, и каждой из них присваивается …

Читать

Гений места бета 6

Сентябрь 10, 2014 г.

Сайт за время моего отпуска не рухнул, и это радует!

За пару недель бета версия прирослала ещё на единичку. Что же нового?

Были внесены как всегда косметические правки и дополнения. К примеру, начиная с этой версии вам будут приходить оповещения …

Читать

Как сделать рейтинг активности в группе ВК и отслеживать подписчиков? Стоит воспользоваться специальными приложениями, например, «Рейтинг подписчиков бесплатно» или «Пьедестал». Достаточно просто подключить их, остальное произойдет автоматически.

Что это за инструмент и зачем он нужен?

Давайте для начало скажем несколько слов, о том, что вообще такое рейтинг активности в группе ВК (и зачем он необходим). Разумеется, у каждого сообщества есть подписчики – именно ради них вы и создаете контент.

Подписчики совершают какие-то целевые действия – обычно это лайки, написание комментариев, репосты записей. Остановимся на этих трёх категориях, потому что они являются основными.

Рейтинг активности ВК, как вы уже могли догадаться, это отображение информации о том, кто из пользователей совершает больше целевых действий. В табличке отображаются имена людей, которые чаще всего писали комментарии, делали репосты, ставили лайки. Такие подписчики важны для каждого сообщества, ведь они потребляют контент – а значит, помогают продвижению группы.

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

Кажется, с целями и особенностями мы разобрались. Значит, можно переходить к главному вопросу – как добавить рейтинг активности в группу ВК? Об этом рассказываем во второй части обзора.

Как настроить рейтинг активности в группе?

Мы расскажем о двух самых простых приложениях, позволяющих настроить рейтинг активности в группе ВК бесплатно. Разумеется, подобных сервисов гораздо больше (обратите внимание, что некоторые из них могут быть платными.). Многие из них обладают куда более широким функционалом и позволяют пользоваться разными игровыми механиками – это привлекает значительное количество новых подписчиков, стимулирует активность текущих участников сообщества. Впрочем, вместо того чтобы читать об этом, оцените их на практике!

Итак, поговорим о том, как настроить рейтинг активности в ВК через бесплатное приложение https://vk.com/app7500976. Виджет устанавливается в один клик!

Разработчики действительно не врут, достаточно нажать на кнопку «Добавить в сообщество», чтобы виджет начал работать. Если у вас несколько групп, необходимо выбрать нужное название списка.

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

Повторимся, вам не нужно ничего считать вручную. Сервис самостоятельно начисляет участникам баллы, суммирует их и выводит в таблицу.

Теперь о том, как сделать рейтинг активности в ВК через приложение «Пьедестал». Найти его можно здесь – https://vk.com/app7147757. Никаких глобальных отличий в подключении и настройке нет. Переходите по ссылке, нажимайте на кнопку «Подключить к сообществу» и выбирайте нужную группу, если у вас их несколько.

Что отличает приложение «Пьедестал»? Рейтинг обновляется каждые полчаса, последнее время/дата обновления видны на верхней панели – вы точно получаете самую актуальную информацию. В таблице выводятся следующие данные: имена пользователей, количество заработанных баллов, место в рейтинге.

Вы можете сами назначать, сколько баллов будет начисляться за той или иное целевое действие: например, один – за лайк и репост, два – за комментарий. Разумеется, самому считать ничего не нужно. Сервис «запомнит» вашу шкалу оценивания и будет начислять и суммировать бонусы, которые затем выведут пользователей на какие-то призовые места.

Рассказали, как поставить рейтинг активности в группе ВК – кажется, что нет ничего проще! Но несмотря на кажущуюся простоту, вы получаете доступ к огромному количеству полезных функций, которые помогут в продвижении и развитии вашего сообщества.

Предлагаю такую структуру данных:

Для метрик:

Создать таблицу с метриками:

+----------+----------+-----+----------+
| users_id | metric_x | ... | metric_y |
+----------+----------+-----+----------+
|        1 |       10 | ... |      310 |
|        2 |       34 | ... |      103 |
+----------+----------+-----+----------+

Либо в более нормализованном виде (но за 1 запрос будет уже не строка, а список):

+----------+------------+----------+
| users_id |       name |    value |
+----------+------------+----------+
|        1 |          1 |       10 |
|        1 |          2 |      310 |
|        2 |          1 |       34 |
|        2 |          2 |      103 |
+----------+------------+----------+

Для достижений:

Ссылка на пользователя и на достижение (можно в список достижений уже поместить фото, описание, и если достижений не много можно хранить их в массиве)

+----------+-----------------+
| users_id |  achievement_id |
+----------+-----------------+
|        1 |               1 |
|        1 |               2 |
|        2 |               1 |
|        3 |               8 |
+----------+-----------------+

Таблица с достижениями (многоточие означают информацию о достижении):

и поле metric_id говорят какая метрика и value и когда достижение будет выполнено, но у этого примера есть ограничения его скорей всего будет сложно использовать например для достижений по 2 метрикам или достижениям который зависят от достижений и скорей всего стоит отказать от достижений или объединить их с метриками.

+----+-----+------------+-------+
| id | ... |  metric_id | value |
+----+-----+------------+-------+
|  1 | ... |          1 |   300 |
|  2 | ... |          2 |   200 |
|  3 | ... |          1 |    50 |
+----+-----+------------+-------+

И тригеры которые будут вызываться при нужных действиях:

И пример псевдокода (использую нормализованную таблицу для метрик):

public function trigger_update($user_id, $metric_id, $metric_value, $achievement) { 
    $sql = "UPDATE metric SET value = value + {$metric_value} 
            WHERE users_id = {$user_id} AND name = {$metric_id}";

    // выполнения запроса и получения элемента 
    $metic_value = sql_query($sql).commit();

    $sql = "SELECT * FROM achievement WHERE id = {$achievement} AND metric_id = {$metric_id} AND value >= ${value}";
    if (sql_query($sql).commit() !== Null){          

        $sql = "INSERT INTO users_achievement (users_id, achievement_id) VALUES ({$user_id}, {$achievement});"

        // и да, нужен индекс что-бы записи были уникальны 
        // и тут нужны обработка исключений или select что-бы нормально реагировать на то что у человека уже есть данное достижение. 
        sql_query($sql).commit();
        push_user($user_id, $metric_value);  // и метод уведомления
    }
}

p.s.

И достижения можно хранить в массиве и их условие, и не использовать для этих целей базу, из плюсов нет лишних запросов в БД, из минусов нет возможности быстро их менять.

Методика составления рейтинга и информация



Иллюстрация: Эксперт Online

Методика составления рейтинга и информация

Основные принципы

В качестве главного критерия составления рейтинга «Эксперт-400» принят показатель, характеризующий объем реализации продукции (работ, услуг) в 2012 году. В случаях, когда  в силу специфики деятельности компаний этот показатель не может быть применен (например, для банков, страховых компаний), используются данные финансовой отчетности, максимально близкие к нему по экономическому смыслу.

Дополнительно приводится список 200 крупнейших компаний по рыночной стоимости (капитализации) на 2 сентября 2013 года — «Капитализация-200».

Для более полной картины в списках приведены и другие характеристики — объем реализации продукции за 2011 год, прибыль, параметры рынка акций и др.

Замечания к составлению «Эксперт-400»

Участие в рейтинге «Эксперт-400» не имеет ограничений отраслевого характера. В результате в него вошли компании практически из всех основных сфер экономики. Место компании в рейтинге определялось путем их ранжирования по объему реализации продукции (работ, услуг) в 2012 году. В зависимости от профиля деятельности конкретной компании под этим термином понимается:

для компаний, занятых в сфере промышленности, АПК, телекоммуникаций, транспорта, торговли, жилищно-коммунального хозяйства, строительства, — объем выручки от продаж продукции (товаров, работ, услуг за минусом НДС, акцизов и аналогичных обязательных платежей);

для банков — сумма процентных и комиссионных доходов (до вычета расходов). Источником этих данных являлась бухгалтерская отчетность банков, подготовленная только по стандарту МСФО;

для страховых компаний — сумма подписанных страховых премий и чистого дохода от инвестиций за вычетом премий, переданных в перестрахование (МСФО), или сумма страховых премий (взносов) по страхованию жизни за вычетом взносов, переданных в перестрахование, страховых премий по видам иным, чем страхование жизни, за вычетом взносов, переданных в перестрахование и доходов по инвестициям за вычетом расходов по инвестициям (РСБУ).

В тех случаях, когда в списке оказывались холдинги, их дочерние компании в список уже не включались — дабы избежать двойного счета.

При пересчете выручки компании в 2012 году в другую валюту использовался средневзвешенный курс 31,08 руб./доллар США и 39,90 руб./евро; выручки в 2011 году — средневзвешенный курс 29,39 руб./доллар США и 40,90 руб./евро.

При расчете капитализации компаний использовался курс на 2 сентября 2013 года — 33,2474 руб./доллар США.

При прочих равных условиях приоритет отдавался данным отчетности, подготовленной в соответствии со стандартами МСФО или US GAAP, а также анкетным данным компаний. Если анкетные данные не подтверждались копией аудированной отчетности по соответствующему стандарту и таковая не обнаруживалась в открытом доступе в других источниках, отчетность считалась управленческой по соответствующему стандарту (для РСБУ — просто «управленческая»).

В случае, когда структура компании претерпела существенные изменения, кардинально повлиявшие на объемы выручки, полученной за год, предшествующий году составления рейтинга, или изменился стандарт отчетности предоставляемых данных, информация о месте компании в предыдущем рейтинге и/или данные о темпе прироста объема выручки от продаж в списке «Эксперт-400» не публикуются.

Замечания к составлению списка «Капитализация-200»

О рыночной стоимости ценных бумаг имеет смысл говорить только в том случае, если ими торгуют. Эмитент рассматривался в качестве кандидата на включение в рейтинг, только если его акции относились к одной из следующих категорий ликвидности.

Категория А. Высокая ликвидность. С ценными бумагами регулярно совершаются сделки на российских и/или иностранных биржах. При этом сделки заключались и в день расчета (2 сентября 2013 года).

Категория B. Средняя ликвидность. Сделки с ценными бумагами на российских и/или иностранных биржах совершаются нерегулярно. В течение месяца, предшествующего дате расчета, была заключена хотя бы одна сделка (в августе 2013 года).

В качестве цены акций категории А использовалась средневзвешенная цена за 2 сентября 2013 года. В качестве цены акций категории В использовалась средневзвешенная цена за август 2013 года. Информация была предоставлена Московской биржей.

В отличие от рейтинга по реализации холдинги и их дочерние структуры рассматривались на равных. Ведь если объем реализации холдинга определяется как суммарная реализация его дочерних структур за вычетом внутренних оборотов, то для капитализации это неверно.

Для расчета капитализации компании «Русал» использовалась информация о рыночной стоимости и количестве выпущенных компанией российских депозитарных расписок. Итоговое количество РДР на дату эмиссии покрывало 100% имеющихся в обороте размещенных и объявленных обыкновенных акций объединенной компании «Русал».

Как собиралась информация

Сбор данных о компаниях осуществлялся в три этапа.

Первый — подготовительный. На основе рейтингов прошлых лет, статотчетности за 2012 год, оперативной статотчетности, сообщений СМИ был составлен список компаний — потенциальных участников рейтинга. После предварительного отбора в нем было оставлено около 600 компаний.

На втором этапе был проведен опрос компаний — кандидатов в рейтинг. Запрашивались основные показатели деятельности за 2012 и 2011 годы.

Наконец, на третьем этапе пробелы в собранной информации были восполнены за счет данных Росстата и корпоративных сайтов в интернете.

Для подготовки рейтинга использовалась информация Федеральной службы государственной статистики и Федеральной налоговой службы, представленная в «Системе профессионального анализа рынков и компаний (СПАРК) агентства «Интерфакс».

Мы благодарим за помощь в предоставлении данных Московскую Биржу и выражаем признательность ее руководству и сотрудникам.

Над рейтингом работали: Дмитрий Гришанков (руководитель проекта), Дмитрий Кабалинский, Федор Жердев, Дмитрий Миндич, Вартан Ханферян, Андрей Градецкий, Олег Никонов, Юрий Беликов, Галина Береговая, Станислав Волков, Георгий Дзитиев, Михаил Доронкин, Николай Карягин, Наталья Комлева, Павел Митрофанов, Павел Самиев, Дмитрий Сергиенко, Денис Стукан, Александра Таранникова, Павел Шаляпин, Алексей Янин

Методика получила заключение PwC в 1999–2001, 2004–2013 годах

№20

Добавить комментарий