Меня где-то с лета любопытно следующее. Возьмём некоторый музыкальный жанр, или несколько жанров. Возьмём набор групп, которые в этом жанре играли или играют, и список их участников, текущих и прошлых. Будем рисовать! Нарисуем каждой группе по точке на плоскости и подпишем их названиями групп. Если в двух группах когда-то играл один и тот же музыкант, то соединим соответствующие точки линией, и у линии подпишем имя участника. Сделаем так для всех групп. Что получится в итоге? Правильно, много точек и чёрточек!
Хотя никакой цели и пользы в этом интересе, понятно нет, почему-то меня уже давно подмывало его удовлетворить, но лень-матушка мешала. Наконец я решил, что сделаю такую штуку, попутно подтянув мои знания в каком-нибудь языке программирования, в котором я разбираюсь плохо, а хочу разбираться лучше. С такой аргументацией лень побороть оказалось проще.
Сразу ясно, что идея рисовать такие картинки (графы) по достаточно большому (и потому интересному) числу групп вручную --- идея плохая. Значит, надо откуда-то брать исходные данные, лопатить их и по ним их более-менее автоматически строить. Долго ли, коротко ли, но был принят следующий план (обсуждение технических подробностей будет в конце поста, так что пока --- просто констатирую):
1. Данные про музыкантов выдирать из википедии.
2. Раз данные придётся выдирать из википедии, то целесообразно использовать какой-нибудь высокоуровневый скриптовый язык. Им был выбран Питон (вырвавший в последний момент эту роль у Перла), который мне как раз не плохо бы подучить.
3. После составления таблицы групп и игравших в них людей, рисование итогового визуального результата перепоручить графопостроителю. Им была выбрана, после непродолжительного гугления, программа yEd.
Сказано --- сделано. Увы, автоматический разгрёб википедии наткнулся на технические проблемы (если интересно какие, то см. ниже), и потому с особым размахом идею реализовать не удалось.
Для графопостроения были выбраны (в порядке убывания моего знания о области) английский прогрессивный рок, английский тяжёлый рок, английский блюз-рок и английский металл общего направления (т.е. без всяких приставок типа «дум-металл» или «готик-металл»). Английский тут означает не «англоязычный», а то, что группа родом из Объединённого королевства. Впрочем, внимательный читатель, я уверен, без труда найдёт на приведённых ниже картинках одну группу из Австралии.
Сразу извинюсь --- картинки получились большие и тяжелые. Я бы выложил их в исходном, векторном svg, но, увы, мне не известно ни одного хостинга векторной графики.
Итак, первый граф --- прог-рок! 83 группы и 200 переходов между ними. (Дальше для краткости буду писать в стиле «83 вершины и 200 рёбер»)
ОСТОРОЖНО, это БОЛЬШАЯ картинка. Лучше ее скачать и смотреть вне браузера.

Второй граф --- хард-рок! 34 вершины и 58 рёбер.
ОСТОРОЖНО, это тоже БОЛЬШАЯ картинка, но поменьше.

Третий граф --- блюз-рок! 28 вершин, 75 рёбер.
ОСТОРОЖНО! Большая картинка.

Последние два графа выглядят как-то одиноко. Вот граф, построенный по всем трём направления.
ОСТОРОЖНО! Эта картинка ЕЩЕ БОЛЬШЕ предыдущих.

Внимательный читатель, наверно, уже заподозрил неладное --- на последней картинке 152 вершины (и 424 ребра), в то время как на предыдущих картинках в сумме было 145 групп. А ещё некоторые группы присутствуют на нескольких картинках. Как так?! Дело в том, что не вся вытащенная с википедии информация попадает на граф. Рисуются только те группы, которые с кем-то соединены --- иными словами, если у группы нет общих музыкантов ни с одной группой из списка, то в графе она не рисуется (дабы избежать захламления кучей точек). Таким расчудесным образом в прог---рок графе нет Pink Floyd, а в хард---рок --- Led Zeppelin. Однако в объёдиненном графе они есть: Pink Floyd «стыкуется» с Jokers Wild, блюз-роковой группой, а Led Zeppelin --- с прогрессивной XYZ.
Интересно заметить, что число «островков» на графе при объединении групп сокращается. Так, на прог-графе есть (наверху) «болтающийся» кусок около Hawkwind. А на общем графе он «срастается» с общей структуру.
Далее. Металл! 78 вершин, 116 рёбер.
ОСТОРОЖНО! Большая картинка.

Выглядит довольно разрозненно на фоне остальных, не правда ли?
И, наконец, финальный граф по всем четырем направлениям. 227 вершин, 579 рёбер.
ОСТОРОЖНО! ЭТА КАРТИНКА БОЛЬШЕ ВСЕХ ОСТАЛЬНЫХ!

На ней видно, что графопостроитель yEd, как он не старался, не смог нарисовать что-то разборчивое. Большая часть графа --- натуральное месиво. Однако, если внимательно присмотреться, то можно обнаружить, что некая закономерность все же есть. Чисто условно ее можно нарисовать так (что областями не помечено, то точно классифицировать нельзя):
СПОКОЙНО! Эта картинка маленькая, открывайте её без страха.

Вот такие картинки. Совсем бесполезные. И страшные. Я такие люблю делать. Буду думать, что хоть своё знание Питона я немного поднял.
Немного о смысле. ОСТОРОЖНО! Нудятина!
Вообще, задней мыслью была идея о возможности, глядя на картинки вроде последней, делать всякие выводы. Типа, «У прогрессивного рока есть много связей с металлом и блюзом, а классический хард-рок оказывается центральной фигурой всего английского рока в целом». И действительно, на последней картинке видно, что в центре всего графа есть область, не принадлежащая полностью ни одну жанру --- там находятся Rainbow, Deep Purple, Uriah Heep, Asia и прочие, которые записываются сразу в несколько категорий. Увы, такая логика терпит крах. Что значит «много связей с металлом»? Что границы при рисовке совпали? Если алгоритм кластеризации (он и сейчас на больших графах, как видно, работает плохо) сработает по-другому, то эти границы могут перепутаться. Во-вторых, что значит «центральная фигура»? Что много связей с другими группами, своего, и, что важнее, смежных жанров? Увы, нет. Обилие связей на графах у тех же Rainbow и Deep Purple объясняется не их влиянием, а, вернее всего, скверным характером Ричи Блэкмора. И означает ли большое «влияние» в смысле графа, что это много кому нравящаяся (давайте скажем так, бездушно, количественно) музыка? Тоже нет. Самая нижняя вершина последнего графа, от которой идёт одна-единственная связь --- это Pink Floyd. Рядом с ними, вдалеке от основной массы, висят Queen. Что тоже, наверно, с точки зрения музыкального влияния, не очень правильно.
Итак, в итоге имеется неплохой инструмент для анализа музыкальной утечки кадров, но не более.
Обещанные тех.подробности. ОСТОРОЖНО! Тоска!
0. Почему википедия? Единственная открытая база, что мне удалось найти, с историей изменений состава группы. Есть другие, специальные музыкальные базы, которые бы не пришлось долго и тщательно лопатить, но они почти все целиком посвящены хранению списков альбом, песен и текстов, что, увы, меня не интересует.
1. Из кода страницы со списком групп выдирался (руками) собственно, сам список. Именно поэтому везде к жанрам добавлялась приставка «английский»: в википедии есть страница «список английских прогрессивных групп», но нет страницы «список вообще всех прогрессивных групп». Для чистоты эксперимента, я решил не добавлять. Хотя руки чесались. Хотя бы канадцев Rush! Но нет.
2. Означенный список имеет очень простые записи вида
из которых регуляркой выдирается имя группы и ссылка на ее страницу (и то, и то взято в строке в кавычки).
3. На большинстве страниц по правилам оформления (как я надеялся) плашки «Members» и «Past Members», из которых я думал выдирать инофрмацию. Беда оказалась в том, что а) далеко не все страницы оформлены по правилам и б) Даже там, где они оформлены, оформление, выглядя одинаково, может получаться из разных HTML---тэгов. После некоторого курения исходников выяснилось, что большинство случаев имеют вид либо
либо
(возможно, в обоих случаях, без тега \a). В итоге, «не такими оказалось»: прог--- 45/167, хард --- 13/65, блюз --- 19/54, металл --- 26/153). Некоторые группы, увы, требовали дополнительной обработки, ибо список их бывших участников настолько велик, что в плашку не помещается и потому выделен в отдельное место (а то и в отдельную статью). В общем, процесс полностью не автоматизирован.
4. Составление таблицы зависимостей осуществлялось стандартными средствами Питона. Я боялся, что придётся писать структуры данных, но вариант «по умолчанию» сработал на ура. Удивительно. Экспорт графа осуществлялся в Trivial Graph Format. Который считывался yEd'ом и уже там превращался в нечто красивое. Как я ни старался его настроить, кластеризация на последних графах выглядит слабо. Хотя, может, тут ее и нет, кто знает?
А в "музыку" поста запишу-ка я песню группы, которую бездушные алгоритмы не включили ни в один из приведенных графов.
@музыка: The Who --- Armenia Sity In The Sky
@темы: картинки, питон, музыка, содержательный пост, графы
А вообще, для меня это все выглядит как завихрения магии ._.
Если по существу — очень интересно было ознакомиться, право слово. Может быть, на основании графиков и не сделать желанных выводов, зато идея нашла выход. И с Питоном попрактиковаться довелось)
За тех.подробности отдельное спасибо, изнанка проделанной работы не менее занятна, чем результат.
На самом деле, идеи приходят довольно часто. Они накапливаются, хранятся, записываются, теряются и вспоминаются. Большинство даже и реализовывать смысла не имеет, некоторые можно, но трудоемко, а некоторые, возможно, можно бы и реализовать, но непонятно, как это сделать в доступное мне время (и силы),
Примеры. ОСТОРОЖНО! Много технических деталей!
Они похожи на созвездия! Или даже на целые маленькие галактики.
Если по существу — очень интересно было ознакомиться, право слово.