Программно определить относительную «популярность» списка предметов (книги, песни, фильмы и т. Д.) - PullRequest
7 голосов
/ 03 июня 2010

Учитывая список (скажем) песен, как лучше определить их относительную "популярность"?

Моя первая мысль - использовать Google Trends. Этот список песен:

  1. Подземный Homesick Blues
  2. Империя Государства Разума
  3. Калифорнийские гурлы

создает следующий отчет Google Trends : (чтобы узнать, что популярно сейчас , я ограничил отчет последними 30 днями)

http://s3.amazonaws.com/instagal/original/image001.png?1275516612

Empire State of Mind незначительно более популярен, чем California Gurls, а Subterieval Homesick Blues гораздо менее популярны, чем оба.

Так что это работает довольно хорошо, но что происходит, когда ваш список состоит из 100 или 1000 песен? Google Trends позволяет сравнивать только 5 терминов одновременно, поэтому при отсутствии большого количества циклов, какой подход правильный?

Другой вариант - просто выполнить поиск Google для каждой песни и посмотреть, какая из них приносит больше всего результатов, но на самом деле это не одно и то же

Ответы [ 4 ]

3 голосов
/ 03 июня 2010

Отличный вопрос - одна песня Бритни Спирс может быть феноменально популярной в течение 2 месяцев, а затем (к счастью) забыта, в то время как другая песня Элвиса могла бы сохранять популярность в течение 30 лет.Как вы количественно различаете два?Мы знаем, что хотим думать, что устойчивая популярность важнее, чем «вспышка в кастрюле», но как получить этот результат?

Во-первых, я бы нормализовался в отношении даты выпуска - Subterieval Homesick Blues сейчас может быть непопулярным (хотя и не в моем доме), но нормализация до 1965 года может дать другой результат.

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

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

Кто-нибудь?

2 голосов
/ 03 июня 2010

Существует неофициальный API трендов Google. См. http://zoastertech.com/projects/googletrends/index.php?page=Getting+Started Я не использовал его, но, возможно, это поможет.

2 голосов
/ 03 июня 2010

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

1 голос
/ 03 июня 2010

Я бы определенно отнесся к API Google как к "ограниченному".

Как правило, функции сравнения, используемые для алгоритмов сортировки, очень «двоичны»:

  • вход: 2 элемента
  • вывод: true / false

Здесь у вас есть:

  • вход: 5 элементов
  • вывод: относительные веса каждого элемента

Поэтому вам потребуется только линейное количество вызовов API (тогда как для сортировки обычно требуется O (N log N) вызовов функций сравнения).

Вам понадобятся ровно ceil( (N-1)/4 ) звонки. Вы можете распараллелить, хотя внимательно прочитайте руководство пользователя по количеству запросов, которые вы имеете право подавать.

Затем, после того, как все они "оценены", вы можете выполнить простую сортировку по локальной сети.

Интуитивно, чтобы правильно собрать их, вы должны:

  • Перемешать ваш список
  • Поп 5 первых элементов
  • вызов API
  • Вставить их отсортированными в результате (используйте сортировку вставки здесь)
  • Подберите медиану
  • Вставьте 4 первых элемента (или меньше, если доступно меньше)
  • Сначала вызовите API с медианой и теми 4
  • Вернитесь к Вставке, пока у вас не закончатся элементы

Если ваш список состоит из 1000 песен, то 250 вызовов API, ничего страшного.

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