07.11.2017       Выпуск 203 (06.11.2017 - 12.11.2017)       Статьи

«Рок это жёстко» или я.музыка как граф

Я очень давно пользуюсь яндекс музыкой для поиска «что послушать». Чаще всего, я просто хожу по похожим исполнителям приятных мне групп, однако, этот метод уже давно не даёт результатов. Какое-то время мои потребности закрывало я.радио с фильтром по жанру, но и его репертуар на удивление скуп. Настало время решать проблему глобально, и вот что из этого получилось =)

Читать>>



Экспериментальная функция:

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

Просим обратить внимание, что текст по ссылке и здесь может не совпадать.

КДПВ

Я очень давно пользуюсь яндекс музыкой для поиска «что послушать». Чаще всего, я просто хожу по похожим исполнителям приятных мне групп, однако, этот метод уже давно не даёт результатов. Какое-то время мои потребности закрывало я.радио с фильтром по жанру, но и его репертуар на удивление скуп. Настало время решать проблему глобально, и вот что из этого получилось =)

Что хотелось

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

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

Проблема ерундовая, скажете вы, возьми ТОП100 по версии какого-либо издания и радуйся, но оно так не работает: все топы, что я видел, либо слишком “новомодные” и мне не по нраву, либо очень классические и я всё это уже слышал.

Вообще, мои путешествия по музыке — это отдельная история: смешно было лицезреть друзей-металлистов, когда я рассказывал им про новых для себя

Black Sabbath

в контексте "

вы только послушайте как звучат!

" =)

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

Как собирал

Не раз и не два садился я за этот проект, но каждый раз интерес затухал раньше значимого результата (прямо по книжке). В этот раз я решил послушаться идеологов хакатонов и постарался напилить минимальный рабочий продукт за минимальное же время. По этой причине остановился на сборе наиболее близких мне жанрах рока и метала вместо сбора всей музыки.

Сам парсинг написан на питоне и селениуме плюс Postgree для данных, поскольку под рукой был готовый проект на этом стеке. Селениум для продакшена решение конечно спорное, но у нас и не продакшен.

Для начала я собрал данные по рок исполнителям, их оказалось около шести тысяч.

Когда стал собирать ссылки на похожих, оказалось, что рокеров на самом деле сильно больше и только небольшая их часть представлена в индексе по жанру. Отдельно собирал поджанры (русский рок и другие) — они с основным индексом совсем слабо пересекаются. С металом сюрпризов уже не было, разве что на середине парсинга у него появились поджанры и пришлось собирать всё заново.

В общем, трижды всё пересобрав я понял, что всё, что мог сделал и нужно рисовать.

Хотелось бы отдельно попросить не ругаться ребят из яндекса на мои паразитные запросы, пусть их было не так много — парни, всё ради науки =)

Как рисовал

Хотел я наконец отказаться от ручного рисования в пользу

Gephi

, чтоб только ползуночки двигать между

красиво

и

понятно

, но не срослось — небольшие графы на тысячу вершин он отлично рисует, а в десять раз больше молча отказывается. Ни ошибок, ни приветов, у коллег на винде работает, а у меня белый лист =( Сделал себе зарубку к нему вернуться (и вам рекомендую), и пошёл рисовать привычными средствами.

Поднял довольно

старенькое сравнение

питонячих либ для распасовки графов и выбрал

Igraph

с FR алгоритмом за итоговую картинку и удовлетворительную производительность.

Что получилось

Немного вводных, которые могут показаться неочевидными:

  • вершина — исполнитель;
  • рёбра — ссылки на похожих;
  • граф направленный, но стрелки увидеть можно не всегда;
  • вес вершины — величина входящей степени (ссылки на исполнителя как похожего у других исполнителей);
  • в легенде у большинства графов записаны размер в формате вершины х рёбра, коэффициент кластеризации и средняя близость вершин.

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

Некоторые графы представлены в двух вариантах — основном и полном. Отличаются они тем, что в первом варианте участвуют только исполнители, входящие в индекс я.музыки по какому либо жанру (условно primary исполнители).

Метал

Начнём с поджанров. Графы небольшие, поэтому строил сразу полные.

фолк металпрогрессив метал ню металэпик метал экстрим металклассика метал

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

А вот так выглядит суммарный граф метала со всеми поджанрами в двух вариантах — основной и полный.

основные исполнители металавсе исполнители метала

Рок

украинский рокnew wave пост-рокрусский рок рок-н-роллпрогрессивный рок

Заметьте насколько прогрессив и рок-н-ролл опережают своих собратьев. Рок исполнителей вообще сильно больше металистов (25 тысяч против 8,5), возможно это особенности я.музыки или относительная молодость метала.

Суммарный граф рока со всеми поджанрами, тоже в двух вариантах.

основные исполнители рокавсе исполнители рока

На основном графе отлично виден маленький и гордый кластер русского рока, столь далёкий от остальных.

Пересечение рок + метал

Наконец, начнём пересекать оба жанра. Тут уже только полные графы.

пересечение рока и метала

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

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

пересечение рока и метала

На этой превьюшке ничего не разглядеть, но она кликабельна и за ней карта в

10х10 килопикселей

с легендой для вершин весом 30 и более. Эта же карта есть в другом разрешении (

10к

,

20к

,

32к

). В конце статьи есть ссылки на

более детальные варианты

этой карты и на исходники (на случай если вам захочется свой вариант цвета/размера/etc).

Интересное

Сердце рока — Элвис непобедим!

сердце рокарок и метал - переход

Перешеек между роком и металом. Фиолетовые, напомню, исполнители которые входят в оба жанра.

Сердце метала. В отличии от рока тут фиолетовые есть и имеют приличный вес.

сердце металарусский рок

Русский рок стоит очень особняком и почти не связан с металом, даже русским.

интересный кластер рока

Забавный кластер рокеров — немногочисленный, очень плотный и увесистый.

Кусочек русского метала очень далеко от всех.

русский метал

Топы

Интересно было посмотреть топов по входящей степени

Рок
ИсполнительСтепень
Elvis Presley185
Deep Purple133
Paul McCartney97
Eric Clapton93
Whitesnake73
ЧайФ73
David Bowie72
The Rolling Stones70
The Ventures67
Би-267
Метал
ИсполнительСтепень
Black Sabbath78
Edguy62
Sonata Arctica60
In Flames58
Therion58
Judas Priest57
Glenn Hughes56
Eluveitie55
Of Mice & Men54
Doro Pesch54

Интересно, что исполнители ссылаются не только на своих коллег по стилю. Топ по входящим ссылкам вне жанров рока и метала.

Другие жанры
ИсполнительСтепень
Dr114
Bob Dylan87
Ryan Tedder61
Pharrell58
John Frusciante48
Rihanna47
Frank Sinatra47
Lana Del Rey46
Ray Charles44
NOFX43

Обратите внимание на самого первого исполнителя

Dr

. Его страничка весьма скудна, при этом вес и сейчас не маленький (шутка ли, почти deep purple и это среди рокеров/металлистов), а до весеннего апдейта был и вовсе огромным. Может его добавляли как похожего когда никого более подходящего не нашлось, а ссылок нужно было добрать до девяти? Это могут сказать только ребята из яндекса.

Заключение

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

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

Буду рад аргументированной критике и фидбеку по проделанной работе.

Исходники

Варианты итогового графа

Послесловие

  1. Будьте аккуратны с запуском скриптов на локальной машине. За парсинг яндекса вас могут на нём забанить, а рендер картинок может съесть всю память, особенно если её меньше 16гб.
  2. Аналогично рассчитывайте производительность своего ноутбука, прежде чем открывать карту в 32 килопикселя.
  3. Cairo, которая под капотом рисовальщика Igraph-а, падает в кору на генерации больших картинок в не последних версиях, а в последней загоняет нас в рамки 32к пикселей. Если вам нужно больше золота — генерируйте .ps файл и конвертируйте его сторонними средствами.
  4. Насколько я заметил, вопрос количества л в названии жанра метала является очень болезненным, поэтому я придерживаюсь стороны я.музыки, раз уж все данные с неё. Очень прошу не разжигать на эту тему =)


Лучшая Python рассылка

Нас поддерживает


Python Software Foundation



Разместим вашу рекламу

Пиши: mail@pythondigest.ru

Нашли опечатку?

Выделите фрагмент и отправьте нажатием Ctrl+Enter.

Система Orphus