Нужно больше датасетов. Музыка, IT-скилы и котики

yltzpwxtj4mxacdf3nim-2-srlq.jpeg

Привет, Хабр! Совсем недавно мы писали про открытый датасет, собранный командой студентов магистратуры «Наука о данных» НИТУ МИСиС и Zavtra.Online (подразделение SkillFactory по работе с университетами) в рамках первого учебного Дататона. А сегодня представим вам целых 3 датасета от команд, которые также вышли в финал.

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


Датасет 1: Скользим по музыкальным волнам с «Data Surfers»


Состав команды:
  • Плотников Кирилл — project manager, разработка, документация.
  • Тарасов Дмитрий — разработка, сбор данных, документация.
  • Шадрин Ярослав — разработка, сбор данных.
  • Мерзликин Артём — product manager, презентация.
  • Колесниченко Ксения — предварительный анализ данных.

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

Spotify — музыкальная платформа, пришедшая в Россию не так давно, но уже активно захватывающая популярность на рынке. Кроме того, с точки зрения анализа данных, Spotify предоставляет очень удобное API с возможностью запроса большого количества данных, в том числе их собственных метрик, например таких, как «danceability» — показатель от 0 до 1, описывающий, насколько трек подходит для танцев.

MusicBrainz — это музыкальная энциклопедия, содержащая максимально полную информацию о существующих и существовавших музыкальных коллективах. Своего рода «музыкальная википедия». Данные с этого ресурса нам были необходимы для того, чтобы получить список всех исполнителей из России.

Сбор данных об артистах


Мы собрали целую таблицу, содержащую 14363 уникальных записи о различных исполнителях. Чтобы в ней было удобно ориентироваться — под спойлером описание полей таблицы.
Описание полей таблицы
artist — имя артиста или название группы;
musicbrainz_id — уникальный идентификатор артиста в музыкальной базе данных Musicbrainz;
spotify_id — уникальный идентификатор артиста в стриминговом сервисе Spotify, если он там представлен;
type — тип исполнителя, может принимать значения Person, Group, Other, Orchestra, Choir или Character;
followers — количество подписчиков артиста на Spotify;
genres — музыкальные жанры артиста;
popularity — индекс популярности артиста на Spotify от 0 до 100, который рассчитывается на основе популярности всех треков артиста.

0zmhhoorqcy7ug5n_abtjsus4ac.png

Пример записи

Поля artist, musicbrainz_id и type извлекаем из музыкальной базы данных Musicbrainz, так как там есть возможность получить список артистов, связанных с одной страной. Извлечь эти данные можно двумя способами:

  1. Постранично парсить раздел Artists на странице с информацией о России.
  2. Достать данные через API.
    Документация MusicBrainz API
    Документация MusicBrainz API Search
    Пример запроса GET на musicbrainz.org

В ходе работы выяснилось, что API MusicBrainz не совсем корректно отвечает на запрос с параметром Area: Russia, скрывая от нас тех исполнителей, у кого в поле Area указано, например, Izhevsk или Moskva. Поэтому данные с MusicBrainz были взяты парсером непосредственно с сайта. Ниже пример страницы, откуда парсились данные.
aahnfynwozvfid52fvfduwcgs2a.png

Полученные данные об артистах из Musicbrainz.

Остальные поля получаем в результате GET запросов к эндпоинту. При отправке запроса в значении параметра q указываем имя артиста, а в значении параметра type указываем artist.

Сбор данных о популярных треках


Таблица содержит 44473 записи о самых популярных треках российских артистов, представленных в таблице выше. Под спойлером описание полей таблицы.
Описание полей таблицы
artist — имя артиста или название группы;
artist_spotify_id — уникальный идентификатор артиста в стриминговом сервисе Spotify (по нему можно будет джойнить таблицы, так как это spotify_id из таблицы с артистами);
name — название трека;
spotify_id — уникальный идентификатор трека в стриминговом сервисе Spotify;
duration_ms — длительность трека в миллисекундах;
explicit — содержит ли текст трека нецензурные выражения, может принимать значения true или false;
popularity — индекс популярности трека на Spotify *;
album_type — тип альбома, может принимать значения album, single или compilation;
album_name — название альбома;
album_spotify_id — уникальный идентификатор альбома в стриминговом сервисе Spotify;
release_date — дата выхода альбома;
album_popularity — индекс популярности альбома на Spotify.

Особенности аудио
key — предполагаемая общая тональность трека, целые числа накладываются на нотацию звуковысотных классов, 0 = C, 1 = C♯/D♭, 2 = D и т.д.;
mode — указывает модальность трека, мажор — 1, минор — 0;
time_signature — предполагаемый общий тактовый размер композиции;
acousticness — мера достоверности от 0,0 до 1,0 того, является ли трек акустическим;
danceability — описывает, насколько трек подходит для танцев от 0,0 до 1,0;
energy — представляет собой перцептивную меру интенсивности и активности от 0,0 до 1,0;
instrumentalness — определяет, содержит ли трек вокал, принимает значения от 0,0 до 1.0;
liveness — определяет присутствие аудитории при записи, принимает значения от 0,0 до 1,0;
loudness — общая громкость трека в децибелах, типичный диапазон значений от -60 до 0 дБ;
speechiness — определяет наличие произнесённых слов в треке, принимает значения от 0,0 до 1,0;
valence — описывает музыкальную «позитивность», передаваемую треком, принимает значения от 0,0 до 1,0;
tempo — предполагаемый общий темп трека в ударах в минуту.

Подробно о каждом параметре можно прочитать здесь.
3zniwovojkwtd5xium-x-43m9km.png

Пример записи

Поля name, spotify_id, duration_ms, explicit, popularity, album_type, album_name, album_spotify_id, release_date получаем с помощью GET запроса на https://api.spotify.com/v1//v1/artists/{id}/top-tracks , указывая в качестве значения параметра id Spotify ID артиста, который мы получили ранее, а в значении параметра market указываем RU. Документация.
 
Поле album_popularity можно получить, сделав GET запрос на https://api.spotify.com/v1/albums/{id}, указав album_spotify_id, полученный ранее, в качестве значения для параметра id. Документация. 
 
В результате получаем данные о лучших треках артистов из Spotify. Теперь задача — получить особенности аудио. Сделать это можно двумя способами:

  1. Для получения данных об одном треке нужно сделать GET-запрос на https://api.spotify.com/v1/audio-features/{id}, указав его Spotify ID как значение параметра id. Документация. 
  2. Чтобы получить данные о нескольких треках сразу, следует отправить GET запрос на https://api.spotify.com/v1/audio-features, передавая Spotify ID этих треков через запятую как значение для параметра ids. Документация. 

Все скрипты находятся в репозитории по этой ссылке.

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

xmlxikjkdbucd3xgkgd2l_e0cqu.png

Итоги


В результате у нас получилось собрать данные по 14363 артистам и 44473 трекам. Объединив данные из MusicBrainz и Spotify, мы получили наиболее полный на текущий момент набор данных о всех российских музыкальных исполнителях, представленных на платформе Spotify.

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

Датасет 2: Исследуем рынок вакансий и выявляем ключевые навыки с «Ежу понятно»


Состав команды:
  • Пшеничный Андрей — сбор и обработка данных, написание аналитической записки о датасете.
  • Кондратёнок Павел — Product Manager, сбор данных и описание его процесса, GitHub.
  • Щербакова Светлана — сбор и обработка данных.
  • Евсеева Оксана — подготовка итоговой презентации проекта.
  • Елфимова Анна — Project Manager.

Для своего датасета мы выбрали идею сбора данных о вакансиях в России из сферы «IT и Телеком» с сайта hh.ru за октябрь 2020 года.

Сбор данных о скилах


Самым важным показателем для всех категорий пользователей являются ключевые навыки. Однако при их анализе у нас возникли трудности: эйчары при заполнении данных о вакансии выбирают ключевые навыки из списка, а также могут вносить их вручную, а следовательно, в наш датасет попало большое количество дублирующих навыков и некорректных навыков (например, мы столкнулись с названием ключевого навыка »0,4 Кb»). Есть ещё одна трудность, которая доставила проблем при анализе получившегося датасета, — только около половины вакансий содержат данные о заработной плате, но мы можем использовать средние показатели о заработной плате с другого ресурса (например, с ресурсов Мой круг или Хабр.Карьера).

Начали с получения данных и их глубинного анализа. Далее мы произвели выборку данных, то есть отобрали признаки (features или, иначе, предикторы) и объекты с учетом их релевантности для целей Data Mining, качества и технических ограничений (объема и типа).

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

ls443sqahffgy4n3myiolcbgtou.png

Наиболее часто встречающиеся ключевые навыки в вакансиях из сферы IT, Телеком

Данные получили с сайта hh.ru с помощью их API. Код для выгрузки данных можно найти тут. Вручную выбрали признаки, которые нам необходимы для датасета. Структуру и тип собираемых данных можно увидеть в описании документации к датасету.
 
После этих манипуляций мы получили Dataset размером 34 513 строк. Образец собранных данных вы можете увидеть ниже, а также найти по ссылке.

ijmz-im_x2m9vhlmw0c0jexluze.png

Образец собранных данных

Итоги


В результате получился датасет, с помощью которого можно узнать, какие навыки являются самыми востребованными среди IT специалистов по разным направлениям, и он может быть полезен для соискателей (как для начинающих, так и для опытных), работодателей, hr-специалистов, образовательных организаций и организаторов конференций. В процессе сбора данных были и трудности: слишком много признаков и они написаны на низкоформализируемом языке (описание навыков для кандидата), половина вакансий не имеет открытых данных о заработной плате. Сам датасет можно глянуть на GitHub.

Датасет 3: Наслаждаемся многообразием котиков с «Команда AA»


Состав команды:
  • Евгений Иванов — разработка веб-скрапера.
  • Сергей Гурылёв — product manager, описание процесса разработки, GitHub.
  • Юлия Черганова — подготовка презентации проекта, анализ данных.
  • Елена Терещенко — подготовка данных, анализ данных.
  • Юрий Котеленко — project manager, документация, презентация проекта.

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

Сбор данных о котиках


Изначально для сбора данных мы выбрали сайт catfishes.ru, он обладает всеми нужными нам преимуществами: это свободный источник с простой структурой HTML и качественными изображениями. Несмотря на преимущества этого сайта, он имел существенный недостаток — малое количество фотографий в целом (около 500 по всем породам) и малое количество изображений каждой породы. Поэтому мы выбрали другой сайт — lapkins.ru.
89yjlpzmodpse8dhrs9s9zxgc8a.jpeg

iyhjhzdkv0r50-h5_b8oq8ayhyu.jpeg

Из-за чуть более сложной структуры HTML скрапить второй сайт было несколько сложнее первого, но разобраться в структуре HTML было легко. В итоге нам удалось собрать со второго сайта уже 2600 фотографий всех пород.
Нам не потребовалось даже фильтровать данные, так как фотографии кошек на сайте хорошего качества и соответствуют породам.

Для сбора изображений с сайта нами был написан веб-скрапер. Сайт содержит страницу lapkins.ru/cat со списком всех пород. Сделав парсинг этой страницы, мы получили названия всех пород и ссылки на страницу каждой породы. Итеративно пройдя в цикле по каждой из пород, мы получили все изображения и сложили их в соответствующие папки. Код скрапера был реализован на Python с использованием следующих библиотек:

  • urllib: функции для работы с URL;
  • html: функции для обработки XML и HTML;
  • Shutil: функции высокого уровня для обработки файлов, групп файлов и папок;
  • OS: функции для работы с операционной системой.

Для работы с тегами мы использовали XPath.
hay458a2hovauoxgbrxpgcewgwo.png

Каталог Cats_lapkins содержит папки, названия которых соответствуют названиям пород кошек. Репозиторий содержит 64 каталога для каждой породы. Всего в датасете содержатся 2600 изображений. Все изображения представлены в формате .jpg. Формат названия файлов: например «Абиссинская кошка 2.jpg», вначале идёт название породы, затем число — порядковый номер образца.

69urjrgjr1_twmit3naa_-uevoy.png

Итоги


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

Послесловие


По итогам дататона наши студенты получили первый кейс в своё портфолио дата-сайентиста и обратную связь по работе от менторов из таких компаний, как Huawei, Лаборатория Касперского, Align Technology, Auriga, Intellivision, Wrike, Мерлин АИ. Дататон был полезен ещё и тем, что прокачал сразу и профильные хард- и софт-скилы, которые понадобятся будущим дата-сайентистам, когда они будут работать уже в реальных командах. Также это хорошая возможность для взаимного «обмена знаниями», так как у каждого студента разный бэкграунд и, соответственно, свой взгляд на задачу и её возможное решение. Можно с уверенностью сказать, что без подобных практических работ, похожих на какие-то уже существующие бизнес-задачи, подготовка специалистов в современном мире просто немыслима.

Узнать больше про нашу магистратуру можно на сайте data.misis.ru и в Telegram канале.

Ну, и, конечно, не магистратурой единой! Хотите узнать больше про Data Science, машинное и глубокое обучение — заглядывайте к нам на соответствующие курсы, будет непросто, но увлекательно. А промокод HABR поможет в стремлении освоить новое, добавив 10% к скидке на баннере.


image

Другие профессии и курсы
ПРОФЕССИИ

КУРСЫ

© Habrahabr.ru